|
|
1.1 ! root 1: / vio.s ! 2: ! 3: / This code was dropped in favor of a simpler implementation. ! 4: / I am keeping it around in case I need a similar call gate interface ! 5: / some day. - hws ! 6: ! 7: / Ring 0 services for video ! 8: / this routine is a stub for the ring 0 code ! 9: / ! 10: / int vio(int a1, int a2, int a3) ! 11: .globl vio ! 12: vio: ! 13: pushf / irpts off during trip to ring 0 ! 14: cli ! 15: ! 16: movl 16(%esp),%eax / fetch a3 ! 17: pushl %eax ! 18: movl 16(%esp),%eax / fetch a2 ! 19: pushl %eax ! 20: movl 16(%esp),%eax / fetch a1 ! 21: pushl %eax ! 22: ! 23: lcall $SEG_VIO,$0 / gate to viofR0 ! 24: / viofR0 will delete 12 bytes of stack args ! 25: popf / re-enable interrupts, if they were on before ! 26: ret ! 27: ! 28: / Ring 0 video services. Called via a gate. ! 29: / Want interrupts off when we arrive since the interrupt gates ! 30: / lead into Ring 1. ! 31: / ! 32: / I/O map manipulations affect bitmap in tss. ! 33: / I/O map offsets are in bytes from start of map. ! 34: / ! 35: / a1: VIO_OR_IO bitwise or a2 into 32-bit word at offset a3 ! 36: / return the new word value stored back into the io map. ! 37: / a1: VIO_AND_IO bitwise and a2 into 32-bit word at offset a3 ! 38: / return the new word value stored back into the io map. ! 39: viofR0: ! 40: enter $0,$8 / 8 bytes of auto storage ! 41: ! 42: pushl 12(%ebp) / print a1 ! 43: call print32 ! 44: popl %eax ! 45: ! 46: pushl 16(%ebp) / print a2 ! 47: call print32 ! 48: popl %eax ! 49: ! 50: pushl 20(%ebp) / print a3 ! 51: call print32 ! 52: popl %eax ! 53: ! 54: xorl %eax,%eax ! 55: movl 20(%ebp),%ecx / fetch a3 ! 56: cmpl $0,%ecx / don't allow access to tss below iomap ! 57: jl vioNfg ! 58: ! 59: cmpl $TSS_MAPLEN,%ecx / or above iomap ! 60: jge vioNfg ! 61: ! 62: movl tss+TSS_IOMAP(%ecx),%eax ! 63: pushl %eax ! 64: call print32 ! 65: popl %eax ! 66: ! 67: vioNfg: ! 68: cmpb $0,12(%ebp) / look at a1 ! 69: jnz vioAnd ! 70: orl 16(%ebp),%eax / or a2 with %eax ! 71: jmp vioDone ! 72: ! 73: vioAnd: ! 74: andl 16(%ebp),%eax / and a2 with %eax ! 75: ! 76: vioDone: ! 77: leave ! 78: / make 12-byte arg list disappear ! 79: lret $12 ! 80:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.