|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1992 Microsoft Corporation
4:
5: Module Name:
6:
7: cl_data.h
8:
9: Abstract:
10:
11: This module contains all the global data used by the cirrus driver.
12:
13: Environment:
14:
15: Kernel mode
16:
17: Revision History:
18:
19:
20: --*/
21:
22: //
23: // This structure describes to which ports access is required.
24: //
25:
26: #define NUM_VGA_ACCESS_RANGES 3
27:
28: VIDEO_ACCESS_RANGE VgaAccessRange[] = {
29: {
30: VGA_BASE_IO_PORT, 0x00000000, // 64-bit linear base address
31: // of range
32: VGA_START_BREAK_PORT - VGA_BASE_IO_PORT + 1, // # of ports
33: 1, // range is in I/O space
34: 1, // range should be visible
35: 0 // range should be shareable
36: },
37: {
38: VGA_END_BREAK_PORT, 0x00000000,
39: VGA_MAX_IO_PORT - VGA_END_BREAK_PORT + 1,
40: 1,
41: 1,
42: 0
43: },
44: {
45: 0x000A0000, 0x00000000,
46: 0x00020000,
47: 0,
48: 1,
49: 0
50: }
51: };
52:
53:
54: //
55: // Validator Port list.
56: // This structure describes all the ports that must be hooked out of the V86
57: // emulator when a DOS app goes to full-screen mode.
58: // The structure determines to which routine the data read or written to a
59: // specific port should be sent.
60: //
61:
62: #define VGA_NUM_EMULATOR_ACCESS_ENTRIES 6
63:
64: EMULATOR_ACCESS_ENTRY VgaEmulatorAccessEntries[] = {
65:
66: //
67: // Traps for byte OUTs.
68: //
69:
70: {
71: 0x000003b0, // range start I/O address
72: 0xC, // range length
73: Uchar, // access size to trap
74: EMULATOR_READ_ACCESS | EMULATOR_WRITE_ACCESS, // types of access to trap
75: FALSE, // does not support string accesses
76: (PVOID)VgaValidatorUcharEntry // routine to which to trap
77: },
78:
79: {
80: 0x000003c0, // range start I/O address
81: 0x20, // range length
82: Uchar, // access size to trap
83: EMULATOR_READ_ACCESS | EMULATOR_WRITE_ACCESS, // types of access to trap
84: FALSE, // does not support string accesses
85: (PVOID)VgaValidatorUcharEntry // routine to which to trap
86: },
87:
88: //
89: // Traps for word OUTs.
90: //
91:
92: {
93: 0x000003b0,
94: 0x06,
95: Ushort,
96: EMULATOR_READ_ACCESS | EMULATOR_WRITE_ACCESS,
97: FALSE,
98: (PVOID)VgaValidatorUshortEntry
99: },
100:
101: {
102: 0x000003c0,
103: 0x10,
104: Ushort,
105: EMULATOR_READ_ACCESS | EMULATOR_WRITE_ACCESS,
106: FALSE,
107: (PVOID)VgaValidatorUshortEntry
108: },
109:
110: //
111: // Traps for dword OUTs.
112: //
113:
114: {
115: 0x000003b0,
116: 0x03,
117: Ulong,
118: EMULATOR_READ_ACCESS | EMULATOR_WRITE_ACCESS,
119: FALSE,
120: (PVOID)VgaValidatorUlongEntry
121: },
122:
123: {
124: 0x000003c0,
125: 0x08,
126: Ulong,
127: EMULATOR_READ_ACCESS | EMULATOR_WRITE_ACCESS,
128: FALSE,
129: (PVOID)VgaValidatorUlongEntry
130: }
131:
132: };
133:
134:
135: //
136: // Used to trap only the sequncer and the misc output registers
137: //
138:
139: #define NUM_MINIMAL_VGA_VALIDATOR_ACCESS_RANGE 4
140:
141: VIDEO_ACCESS_RANGE MinimalVgaValidatorAccessRange[] = {
142: {
143: VGA_BASE_IO_PORT, 0x00000000,
144: VGA_START_BREAK_PORT - VGA_BASE_IO_PORT + 1,
145: 1,
146: 1, // <- enable range IOPM so that it is not trapped.
147: 0
148: },
149: {
150: VGA_END_BREAK_PORT, 0x00000000,
151: VGA_MAX_IO_PORT - VGA_END_BREAK_PORT + 1,
152: 1,
153: 1,
154: 0
155: },
156: {
157: VGA_BASE_IO_PORT + MISC_OUTPUT_REG_WRITE_PORT, 0x00000000,
158: 0x00000001,
159: 1,
160: 0,
161: 0
162: },
163: {
164: VGA_BASE_IO_PORT + SEQ_ADDRESS_PORT, 0x00000000,
165: 0x00000002,
166: 1,
167: 0,
168: 0
169: }
170: };
171:
172: //
173: // Used to trap all registers
174: //
175:
176: #define NUM_FULL_VGA_VALIDATOR_ACCESS_RANGE 2
177:
178: VIDEO_ACCESS_RANGE FullVgaValidatorAccessRange[] = {
179: {
180: VGA_BASE_IO_PORT, 0x00000000,
181: VGA_START_BREAK_PORT - VGA_BASE_IO_PORT + 1,
182: 1,
183: 0, // <- disable range in the IOPM so that it is trapped.
184: 0
185: },
186: {
187: VGA_END_BREAK_PORT, 0x00000000,
188: VGA_MAX_IO_PORT - VGA_END_BREAK_PORT + 1,
189: 1,
190: 0,
191: 0
192: }
193: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.