|
|
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.