|
|
1.1 ! root 1: /*++ BUILD Version: 0001 // Increment this if a change has global effects ! 2: ! 3: Copyright (c) 1990-1993 Microsoft Corporation ! 4: ! 5: Module Name: ! 6: ! 7: ddvdeo.h ! 8: ! 9: Abstract: ! 10: ! 11: This is the include file that defines all constants and types for ! 12: accessing the Video device. ! 13: ! 14: Author: ! 15: ! 16: Andre Vachon (andreva) 21-Jan-1992 ! 17: ! 18: Revision History: ! 19: ! 20: --*/ ! 21: ! 22: // ! 23: // VideoIoControlFile InputBuffer/OutputBuffer record structures for ! 24: // this device. ! 25: // ! 26: ! 27: // ! 28: // Name used to create the miniport logical device names ! 29: // ! 30: ! 31: #define VIDEO_DEVICE_NAME "DISPLAY%d" ! 32: #define WVIDEO_DEVICE_NAME L"DISPLAY%d" ! 33: ! 34: ! 35: // ! 36: // The first set of IOCTLs are handle by the port driver and never seen ! 37: // by the miniport. ! 38: // ! 39: ! 40: #define IOCTL_VIDEO_ENABLE_VDM \ ! 41: CTL_CODE(FILE_DEVICE_VIDEO, 0x00, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 42: #define IOCTL_VIDEO_DISABLE_VDM \ ! 43: CTL_CODE(FILE_DEVICE_VIDEO, 0x01, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 44: #define IOCTL_VIDEO_REGISTER_VDM \ ! 45: CTL_CODE(FILE_DEVICE_VIDEO, 0x02, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 46: ! 47: ! 48: // ! 49: // All these IOCTL's must be both handled by the port and miniport since ! 50: // they require processing by both parties. ! 51: // ! 52: #define IOCTL_VIDEO_SAVE_HARDWARE_STATE \ ! 53: CTL_CODE(FILE_DEVICE_VIDEO, 0x80, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 54: #define IOCTL_VIDEO_RESTORE_HARDWARE_STATE \ ! 55: CTL_CODE(FILE_DEVICE_VIDEO, 0x81, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 56: ! 57: ! 58: // ! 59: // All these IOCTL's are public and must/can be handled by the miniport ! 60: // driver ! 61: // ! 62: ! 63: #define IOCTL_VIDEO_QUERY_AVAIL_MODES \ ! 64: CTL_CODE(FILE_DEVICE_VIDEO, 0x100, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 65: #define IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES \ ! 66: CTL_CODE(FILE_DEVICE_VIDEO, 0x101, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 67: #define IOCTL_VIDEO_QUERY_CURRENT_MODE \ ! 68: CTL_CODE(FILE_DEVICE_VIDEO, 0x102, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 69: #define IOCTL_VIDEO_SET_CURRENT_MODE \ ! 70: CTL_CODE(FILE_DEVICE_VIDEO, 0x103, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 71: #define IOCTL_VIDEO_RESET_DEVICE \ ! 72: CTL_CODE(FILE_DEVICE_VIDEO, 0x104, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 73: ! 74: #define IOCTL_VIDEO_LOAD_AND_SET_FONT \ ! 75: CTL_CODE(FILE_DEVICE_VIDEO, 0x105, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 76: ! 77: #define IOCTL_VIDEO_SET_PALETTE_REGISTERS \ ! 78: CTL_CODE(FILE_DEVICE_VIDEO, 0x106, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 79: #define IOCTL_VIDEO_SET_COLOR_REGISTERS \ ! 80: CTL_CODE(FILE_DEVICE_VIDEO, 0x107, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 81: ! 82: #define IOCTL_VIDEO_ENABLE_CURSOR \ ! 83: CTL_CODE(FILE_DEVICE_VIDEO, 0x108, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 84: #define IOCTL_VIDEO_DISABLE_CURSOR \ ! 85: CTL_CODE(FILE_DEVICE_VIDEO, 0x109, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 86: #define IOCTL_VIDEO_SET_CURSOR_ATTR \ ! 87: CTL_CODE(FILE_DEVICE_VIDEO, 0x10a, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 88: #define IOCTL_VIDEO_QUERY_CURSOR_ATTR \ ! 89: CTL_CODE(FILE_DEVICE_VIDEO, 0x10b, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 90: #define IOCTL_VIDEO_SET_CURSOR_POSITION \ ! 91: CTL_CODE(FILE_DEVICE_VIDEO, 0x10c, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 92: #define IOCTL_VIDEO_QUERY_CURSOR_POSITION \ ! 93: CTL_CODE(FILE_DEVICE_VIDEO, 0x10d, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 94: ! 95: #define IOCTL_VIDEO_ENABLE_POINTER \ ! 96: CTL_CODE(FILE_DEVICE_VIDEO, 0x10e, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 97: #define IOCTL_VIDEO_DISABLE_POINTER \ ! 98: CTL_CODE(FILE_DEVICE_VIDEO, 0x10f, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 99: #define IOCTL_VIDEO_SET_POINTER_ATTR \ ! 100: CTL_CODE(FILE_DEVICE_VIDEO, 0x110, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 101: #define IOCTL_VIDEO_QUERY_POINTER_ATTR \ ! 102: CTL_CODE(FILE_DEVICE_VIDEO, 0x111, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 103: #define IOCTL_VIDEO_SET_POINTER_POSITION \ ! 104: CTL_CODE(FILE_DEVICE_VIDEO, 0x112, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 105: #define IOCTL_VIDEO_QUERY_POINTER_POSITION \ ! 106: CTL_CODE(FILE_DEVICE_VIDEO, 0x113, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 107: #define IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES \ ! 108: CTL_CODE(FILE_DEVICE_VIDEO, 0x114, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 109: ! 110: #define IOCTL_VIDEO_GET_BANK_SELECT_CODE \ ! 111: CTL_CODE(FILE_DEVICE_VIDEO, 0x115, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 112: ! 113: #define IOCTL_VIDEO_MAP_VIDEO_MEMORY \ ! 114: CTL_CODE(FILE_DEVICE_VIDEO, 0x116, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 115: #define IOCTL_VIDEO_UNMAP_VIDEO_MEMORY \ ! 116: CTL_CODE(FILE_DEVICE_VIDEO, 0x117, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 117: #define IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES \ ! 118: CTL_CODE(FILE_DEVICE_VIDEO, 0x118, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 119: #define IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES \ ! 120: CTL_CODE(FILE_DEVICE_VIDEO, 0x119, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 121: ! 122: #define IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES \ ! 123: CTL_CODE(FILE_DEVICE_VIDEO, 0x11a, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 124: ! 125: #define IOCTL_VIDEO_QUERY_AVAIL_FONTS \ ! 126: CTL_CODE(FILE_DEVICE_VIDEO, 0x11b, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 127: #define IOCTL_VIDEO_QUERY_NUM_AVAIL_FONTS \ ! 128: CTL_CODE(FILE_DEVICE_VIDEO, 0x11c, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 129: #define IOCTL_VIDEO_QUERY_CURRENT_FONT \ ! 130: CTL_CODE(FILE_DEVICE_VIDEO, 0x11d, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 131: #define IOCTL_VIDEO_SET_CURRENT_FONT \ ! 132: CTL_CODE(FILE_DEVICE_VIDEO, 0x11e, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 133: ! 134: ! 135: ! 136: // ! 137: // Many of the video ICOTLs are modal. When ever the palette is set, or the ! 138: // cursor is set or queried, it is done for the current mode. ! 139: // ! 140: // Modal specifies that the operation is only valid within a mode. Once a ! 141: // set mode operation is performed, the state associated to the modal IOCTL ! 142: // has been destroyed or reinitialized. ! 143: // Non-modal IOCTLs have their state preserved across set-mode operations. ! 144: // ! 145: // Optional IOCTLs are IOCTLs the miniport can optionally support. If the ! 146: // miniport does not support the IOCTL, it should return the appropriate ! 147: // error status. ! 148: // Required IOCTLs must be implemented in a miniport in order for the system ! 149: // to system properly. ! 150: // ! 151: // IOCTL_VIDEO_ENABLE_VDM Non-Modal Private(1) ! 152: // IOCTL_VIDEO_DISABLE_VDM Non-Modal Private(1) ! 153: // IOCTL_VIDEO_REGISTER_VDM Non-Modal Private(1) ! 154: // ! 155: // IOCTL_VIDEO_SAVE_HARDWARE_STATE Non-Modal Required(2) ! 156: // IOCTL_VIDEO_RESTORE_HARDWARE_STATE Non-Modal Required(2) ! 157: // ! 158: // IOCTL_VIDEO_QUERY_AVAIL_MODES Non-Modal Required ! 159: // IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES Non-Modal Required ! 160: // IOCTL_VIDEO_QUERY_CURRENT_MODE Modal Required ! 161: // IOCTL_VIDEO_SET_CURRENT_MODE Non-Modal Required ! 162: // IOCTL_VIDEO_RESET_DEVICE Non-Modal Required ! 163: // ! 164: // IOCTL_VIDEO_LOAD_AND_SET_FONT Modal Required(2) ! 165: // ! 166: // IOCTL_VIDEO_SET_PALETTE_REGISTERS Modal Required(2) ! 167: // IOCTL_VIDEO_SET_COLOR_REGISTERS Modal Required(3) ! 168: // ! 169: // IOCTL_VIDEO_ENABLE_CURSOR Modal Required(2) ! 170: // IOCTL_VIDEO_DISABLE_CURSOR Modal Required(2) ! 171: // IOCTL_VIDEO_SET_CURSOR_ATTR Modal Required(2) ! 172: // IOCTL_VIDEO_QUERY_CURSOR_ATTR Modal Required(2) ! 173: // IOCTL_VIDEO_SET_CURSOR_POSITION Modal Required(2) ! 174: // IOCTL_VIDEO_QUERY_CURSOR_POSITION Modal Required(2) ! 175: // ! 176: // IOCTL_VIDEO_ENABLE_POINTER Modal Optional ! 177: // IOCTL_VIDEO_DISABLE_POINTER Modal Optional ! 178: // IOCTL_VIDEO_SET_POINTER_ATTR Modal Optional ! 179: // IOCTL_VIDEO_QUERY_POINTER_ATTR Modal Optional ! 180: // IOCTL_VIDEO_SET_POINTER_POSITION Modal Optional ! 181: // IOCTL_VIDEO_QUERY_POINTER_POSITION Modal Optional ! 182: // IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES Non-Modal Optional ! 183: // ! 184: // IOCTL_VIDEO_GET_BANK_SELECT_CODE Modal Required(2) ! 185: // ! 186: // IOCTL_VIDEO_MAP_VIDEO_MEMORY Special(4) Required ! 187: // IOCTL_VIDEO_UNMAP_VIDEO_MEMORY Non-Modal Required ! 188: // IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES Non-Modal Required ! 189: // IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES Non-Modal Required ! 190: // ! 191: // IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES Non-Modal Optional ! 192: // ! 193: // IOCTL_VIDEO_QUERY_AVAIL_FONTS Non-Modal Optional ! 194: // IOCTL_VIDEO_QUERY_NUM_AVAIL_FONTS Non-Modal Optional ! 195: // IOCTL_VIDEO_SET_CURRENT_FONT Non-Modal Optional ! 196: // IOCTL_VIDEO_QUERY_CURRENT_FONT Non-Modal Optional ! 197: // ! 198: // ! 199: // (1) Private means the IOCTL is completely implemeted within the port driver ! 200: // and the miniport does not need to support it. ! 201: // ! 202: // (2) These Required functions are for "Vga Compatible" miniports. They are ! 203: // Optional for other, non vga-compatible (i.e frame buffers) drivers. ! 204: // VGA compatible means here that the miniport implements all the VGA ! 205: // functionality and that the VgaCompatible flag for the miniport in the ! 206: // registry parameters is turned on. ! 207: // ! 208: // (3) This IOCTL is required if the device has a color lookup table (also ! 209: // commonly called palette) the PALETTE IOCTL is used for VGA while the ! 210: // COLOR IOCTL is the more general IOCTL that is called by the display ! 211: // driver or application to set the colors in the devices internal ! 212: // lookup table ! 213: // ! 214: // (4) This IOCTL is both modal and non-modal. It should map all of video ! 215: // memory in the caller's address space. A set mode MUST NOT cause the ! 216: // video memory to change location - in this sense it is non-modal. ! 217: // However, this IOCTL returns the location size of the frame buffer within ! 218: // video memory, and the frame buffer size and location may vary from mode ! 219: // to mode - so that information is modal. ! 220: // ! 221: ! 222: ! 223: // ! 224: // Any IOCTL that returns information should return in the status block the ! 225: // size of the data returned. ! 226: // If the output buffer was too small, an error should be returned. ! 227: // ! 228: // ! 229: // ! 230: // ! 231: ! 232: ! 233: ! 234: // ! 235: // VIDEO_IOCTL_ENABLE_VDM ! 236: // VIDEO_IOCTL_DISABLE_VDM ! 237: // VIDEO_IOCTL_REGISTER_VDM ! 238: // ! 239: // These IOCTLs are used to enable or disable a VDM's access to the video ! 240: // hardware. This call will cause the real video frame buffer to be mapped ! 241: // into the VDM's address space and get the video validator connected to the ! 242: // V86 emulator for direct video register access. ! 243: // ! 244: // Information used by this function is passed using the following structure: ! 245: // ! 246: ! 247: typedef struct _VIDEO_VDM { ! 248: HANDLE ProcessHandle; ! 249: } VIDEO_VDM, *PVIDEO_VDM; ! 250: ! 251: // ! 252: //ProcessHandle - Handle to the process for which this request must be ! 253: // performed. This is required because the console calls the miniport on ! 254: // the behalf of the VDM process; we are not performing this request in ! 255: // the context of the current caller. ! 256: // ! 257: ! 258: ! 259: typedef struct _VIDEO_REGISTER_VDM { ! 260: ULONG MinimumStateSize; ! 261: } VIDEO_REGISTER_VDM, *PVIDEO_REGISTER_VDM; ! 262: ! 263: // ! 264: //MinimumStateSize - Output value determining the minimum size required to ! 265: // store the video hardware state when performing SAVE_HARDWARE_SATE or ! 266: // RESTORE_HARDWARE_STATE Ioctls. ! 267: // ! 268: ! 269: ! 270: // ! 271: // Second set of structures ! 272: // ! 273: ! 274: // ! 275: // These IOCTLs are used by the VDM and the console to communicate state ! 276: // changes between the VDM and the kernel video driver. ! 277: // ! 278: // VIDEO_IOCTL_SAVE_HARDWARE_STATE - ! 279: // VIDEO_IOCTL_RESTORE_HARDWARE_STATE - ! 280: // ! 281: // ! 282: // This structure is at the start of the block used when saving or restoring ! 283: // the state of the video hardware using ConsoleHardwareState(). ! 284: // the ULONG are offset to the location of the rest of the data. That data ! 285: // is stored within the same memory block pointed to by the ! 286: // VIDEO_HARDWARE_STATE structure, right after this header. ! 287: // ! 288: // Information used by this function is passed using the following structure: ! 289: // ! 290: ! 291: typedef struct _VIDEO_HARDWARE_STATE_HEADER { ! 292: ULONG Length; ! 293: UCHAR PortValue[0x30]; ! 294: ULONG AttribIndexDataState; ! 295: ULONG BasicSequencerOffset; ! 296: ULONG BasicCrtContOffset; ! 297: ULONG BasicGraphContOffset; ! 298: ULONG BasicAttribContOffset; ! 299: ULONG BasicDacOffset; ! 300: ULONG BasicLatchesOffset; ! 301: ULONG ExtendedSequencerOffset; ! 302: ULONG ExtendedCrtContOffset; ! 303: ULONG ExtendedGraphContOffset; ! 304: ULONG ExtendedAttribContOffset; ! 305: ULONG ExtendedDacOffset; ! 306: ULONG ExtendedValidatorStateOffset; ! 307: ULONG ExtendedMiscDataOffset; ! 308: ULONG PlaneLength; ! 309: ULONG Plane1Offset; ! 310: ULONG Plane2Offset; ! 311: ULONG Plane3Offset; ! 312: ULONG Plane4Offset; ! 313: ULONG VGAStateFlags; ! 314: ULONG DIBOffset; ! 315: ULONG DIBBitsPerPixel; ! 316: ULONG DIBXResolution; ! 317: ULONG DIBYResolution; ! 318: ULONG DIBXlatOffset; ! 319: ULONG DIBXlatLength; ! 320: } VIDEO_HARDWARE_STATE_HEADER, *PVIDEO_HARDWARE_STATE_HEADER; ! 321: ! 322: // ! 323: // defines for VGAStateFlags ! 324: // ! 325: ! 326: #define VIDEO_STATE_NON_STANDARD_VGA 0x00000001 ! 327: #define VIDEO_STATE_UNEMULATED_VGA_STATE 0x00000002 ! 328: #define VIDEO_STATE_PACKED_CHAIN4_MODE 0x00000004 ! 329: ! 330: ! 331: typedef struct _VIDEO_HARDWARE_STATE { ! 332: PVIDEO_HARDWARE_STATE_HEADER StateHeader; ! 333: ULONG StateLength; ! 334: } VIDEO_HARDWARE_STATE, *PVIDEO_HARDWARE_STATE; ! 335: ! 336: // ! 337: //Length - Length of the basic structure. Used for versioning purposes. The ! 338: // length field should be initialized to be equal to ! 339: // sizeof(VIDEO_HARDWARE_STATE_HEADER). ! 340: // ! 341: //PortValue - Array of entries containing the data values for port 3B0 through ! 342: // 3DF. ! 343: // ! 344: //AttribIndexDataState - State of the attribute index register. ! 345: // ! 346: //BasicSequencerOffset - Offset, in bytes, from the beginning of the structure, ! 347: // to an array of fields containing the register values for the basic ! 348: // sequencer register set of the VGA. ! 349: // ! 350: //BasicCrtContOffset - Offset, in bytes, from the beginning of the structure, ! 351: // to an array of fields containing the register values for the basic ! 352: // CRT register set of the VGA. ! 353: // ! 354: //BasicGraphContOffset - Offset, in bytes, from the beginning of the structure, ! 355: // to an array of fields containing the register values for the basic ! 356: // graphics controller register set of the VGA. ! 357: // ! 358: //BasicAttribContOffset - Offset, in bytes, from the beginning of the structure, ! 359: // to an array of fields containing the register values for the basic ! 360: // attribute controller register set of the VGA. ! 361: // ! 362: //BasicDacOffset - Offset, in bytes, from the beginning of the structure, ! 363: // to an array of fields containing the register values for the basic ! 364: // DAC registers of the VGA. ! 365: // ! 366: //BasicLatchesOffset - Offset, in bytes, from the beginning of the structure, ! 367: // to an array of fields containing the register values for the basic ! 368: // latches of the VGA. ! 369: // ! 370: //ExtendedSequencerOffset - Offset, in bytes, from the beginning of the structure, ! 371: // to an array of fields containing the registers values for the extended ! 372: // sequencer register set of the VGA. ! 373: // ! 374: //ExtendedCrtContOffset - Offset, in bytes, from the beginning of the structure, ! 375: // to an array of fields containing the registers values for the extended ! 376: // CRT register set of the VGA. ! 377: // ! 378: //ExtendedGraphContOffset - Offset, in bytes, from the beginning of the structure, ! 379: // to an array of fields containing the registers values for the extended ! 380: // graphics controller register set of the VGA. ! 381: // ! 382: //ExtendedAttribContOffset - Offset, in bytes, from the beginning of the structure, ! 383: // to an array of fields containing the registers values for the extended ! 384: // attribute controller register set of the VGA. ! 385: // ! 386: //ExtendedDacOffset - Offset, in bytes, from the beginning of the structure, ! 387: // to an array of fields containing the registers values for the extended ! 388: // DAC registers of the VGA. ! 389: // ! 390: //ExtendedValidatorStateOffset - Offset, in bytes, from the beginning of the ! 391: // structure, to an area reserved for the miniport to put the unemulated ! 392: // save state that the miniport uses to perform instruction validation for ! 393: // DOS apps. ! 394: // ! 395: //ExtendedMiscDataOffset - Offset, in bytes, from the beginning of the structure, ! 396: // to an area reserved for the use of the miniport. ! 397: // ! 398: //PlaneLength - Length of each of the following plane (if present) ! 399: // ! 400: //Plane1Offset - Offset, in bytes, from the beginning of the structure, to an ! 401: // array of fields containing the data of the first plane of video memory. ! 402: // ! 403: //Plane2Offset - Offset, in bytes, from the beginning of the structure, to an ! 404: // array of fields containing the data of the second plane of video memory. ! 405: // ! 406: //Plane3Offset - Offset, in bytes, from the beginning of the structure, to an ! 407: // array of fields containing the data of the third plane of video memory. ! 408: // ! 409: //Plane4Offset - Offset, in bytes, from the beginning of the structure, to an ! 410: // array of fields containing the data of the fourth plane of video memory. ! 411: // ! 412: //VGAStateFlags - Flags used for the interpretation of the VGA state. ! 413: // VIDEO_STATE_NON_STANDARD_VGA is set when the set of registers the VGA ! 414: // returns is not the basic set (all super vga's are not standard). ! 415: // The VDM should not emulate the saved state unless a specific VDD ! 416: // has been written for the device. ! 417: // VIDEO_STATE_UNEMULATED_VGA_STATE specified the miniport has stored ! 418: // informaiton in the ExtendedValidatorState field and the miniport ! 419: // should treat this as a frozen state, whatever the registers say. ! 420: // VIDEO_STATE_PACKED_CHAIN4_MODE indicates that in mode 13 (320x200x256). ! 421: // the data is stored in a packed pixel format in the plane, as ! 422: // opposed to the standard VGA format where the data is interleaved ! 423: // at every four bytes, and on every 16K boundary, offset by one ! 424: // extra byte. ! 425: // ! 426: //DIBOffset - Offset to the location of the DIB in the allocated data ! 427: // structure. If NULL, no translation is available. ! 428: // ! 429: //DIBBitsPerPixel - Format of the DIB. ! 430: // ! 431: //DIBXResolution - Width of the DIB in pixels. ! 432: // ! 433: //DIBYResolution - Height of the DIB in pixels. ! 434: // ! 435: //DIBXlatOffset - Offset to the location of the translation vector ! 436: // from DIB pixel values to 32-bit RGB (1 byte red, 1 byte green, 1 byte ! 437: // blue, 1 byte empty). Maximum length 256. If NULL, the standard ! 438: // VGA palette stored in this structure should be used. ! 439: // ! 440: //DIBXlatLength - Length of the RGB translation vector at DIBXlatOffset. ! 441: // ! 442: // For each of the offset fields, if an offset value is NULL, then there is ! 443: // no data for that offset. ! 444: // The length of a data area is: ! 445: // 1) the specific length given to it : plane length (planes) or XResolution * ! 446: // Yresolution * BitsPerPel (DIB) ! 447: // 2) otherwise, the length = next_non-null_offset_value - ! 448: // current_offset_value ! 449: // ! 450: ! 451: // ! 452: //StateHeader - Pointer to the VIDEO_HARDWARE_STATE_HEADER structure. ! 453: // ! 454: //StateLength - Size of the VIDEO_HARDWARE_STATE_HEADER structure. ! 455: // ! 456: ! 457: // ! 458: // VIDEO_IOCTL_QUERY_NUM_AVAIL_MODES - Returns number of different modes ! 459: // available on the controller. ! 460: // ! 461: // Information used by this function is passed using the following structure: ! 462: // ! 463: ! 464: typedef struct _VIDEO_NUM_MODES { ! 465: ULONG NumModes; ! 466: ULONG ModeInformationLength; ! 467: } VIDEO_NUM_MODES, *PVIDEO_NUM_MODES; ! 468: ! 469: // ! 470: //NumModes - Returns the number of modes supported by the kernel driver. ! 471: // ! 472: //ModeInformationLength - Length of the VIDEO_MODE_INFORMATION structure ! 473: // for the VIDEO_IOCTL QUERY_AVAILABLE_MODES IOCTL. ! 474: ! 475: ! 476: // ! 477: // VIDEO_IOCTL_SET_CURRENT_MODE - Is used to set the mode of the controller. ! 478: // ! 479: // Information used by this function is passed using the following structure: ! 480: // ! 481: ! 482: typedef struct _VIDEO_MODE { ! 483: ULONG RequestedMode; ! 484: } VIDEO_MODE, *PVIDEO_MODE; ! 485: ! 486: #define VIDEO_MODE_NO_ZERO_MEMORY 0x80000000 // High order bit of the mode ! 487: // determines if the set mode ! 488: // should (0) or should not (1) ! 489: // cause the video memory to be ! 490: // zeroed out simultaneously to ! 491: // the set mode operation. ! 492: ! 493: // ! 494: //RequestedMode - Indicates in which mode the adapter should be initialized. ! 495: // ! 496: ! 497: ! 498: // ! 499: // VIDEO_IOCTL_RESET_DEVICE - Is used to reset the mode of the adapter when GDI ! 500: // gives up control of the device to allow a VDM to ! 501: // access the hardware. x86 only. ! 502: // The default mode should be whatever is the ! 503: // default mode when the machine is booted ! 504: // ! 505: // No information is needed fo this function. ! 506: // ! 507: ! 508: ! 509: ! 510: // ! 511: // VIDEO_IOCTL_QUERY_AVAIL_MODES - Returns information about each available ! 512: // mode on the controller. ! 513: // ! 514: // VIDEO_IOCTL_QUERY_CURRENT_MODE - Returns the information for the current ! 515: // controller mode. ! 516: // ! 517: // Information used by this function is passed using the following structure: ! 518: // ! 519: // NOTE This structure is matched exactly with the DISP_MODE structure ! 520: // in winddi.h - every change to this structure MUST be made to the ! 521: // structure in winddi.h. ! 522: // ! 523: ! 524: typedef struct _VIDEO_MODE_INFORMATION { ! 525: ULONG Length; ! 526: ULONG ModeIndex; ! 527: ULONG VisScreenWidth; ! 528: ULONG VisScreenHeight; ! 529: ULONG ScreenStride; ! 530: ULONG NumberOfPlanes; ! 531: ULONG BitsPerPlane; ! 532: ULONG Frequency; ! 533: ULONG XMillimeter; ! 534: ULONG YMillimeter; ! 535: ULONG NumberRedBits; ! 536: ULONG NumberGreenBits; ! 537: ULONG NumberBlueBits; ! 538: ULONG RedMask; ! 539: ULONG GreenMask; ! 540: ULONG BlueMask; ! 541: ULONG AttributeFlags; ! 542: ULONG VideoMemoryBitmapWidth; ! 543: ULONG VideoMemoryBitmapHeight; ! 544: } VIDEO_MODE_INFORMATION, *PVIDEO_MODE_INFORMATION; ! 545: ! 546: // ! 547: // Bit definitions for Attribute Flags ! 548: // ! 549: ! 550: #define VIDEO_MODE_COLOR 0x0001 // 0 = Mono-compatible, 1 = Color ! 551: #define VIDEO_MODE_GRAPHICS 0x0002 // 0 = Text mode, 1 = Graphics ! 552: #define VIDEO_MODE_PALETTE_DRIVEN 0x0004 // 0 = Colors are direct ! 553: // 1 = Colors are index to a palette ! 554: #define VIDEO_MODE_MANAGED_PALETTE 0x0008 // 0 = Palette is fixed (must be ! 555: // queried from miniport ! 556: // 1 = Palette is settable. ! 557: #define VIDEO_MODE_INTERLACED 0x0010 // 1 = Mode is interlaced ! 558: // 0 = non-interlaced ! 559: #define VIDEO_MODE_NO_OFF_SCREEN 0x0020 // 1 = Offscreen memory CAN NOT be ! 560: // used to store information. ! 561: // 0 = Offscreen memory is available ! 562: ! 563: // ! 564: //Length - Length of the structure in bytes. Also used to do verisioning. ! 565: // ! 566: //ModeIndex - Number used to set this mode when calling the miniport driver. ! 567: // ! 568: //VisScreenWidth - Number of visible horizontal pixels on a scan line ! 569: // ! 570: //VisScreenHeight - Number of visible lines (or scan lines) ! 571: // ! 572: //ScreenStride - Delta, in *BYTES*, between the start of two scan lines. ! 573: // ! 574: // NOTE: the width and height are in pixels, but the stride is in bytes !!! ! 575: // ! 576: //NumberOfPlanes - Number of separate planes combined by the device. ! 577: // ! 578: //BitsPerPlane - Number of bits per pixel on a plane. ! 579: // ! 580: //Frequency - Screen Frequency, in Hertz. ! 581: // ! 582: //XMillimeter - Size of the horizontal active region on the output device, ! 583: // in millimeters. ! 584: // ! 585: //YMillimeter - Size of the vertical active region on the output device, ! 586: // in millimeters. ! 587: // ! 588: //NumberRedBits - Number of bits in the red DAC. ! 589: // ! 590: //NumberGreenBits - Number of bits in the green DAC. ! 591: // ! 592: //NumberBlueBits - Number of bits in the blue DAC. ! 593: // ! 594: //RedMask - Red color Mask for device with direct color modes. Bits turned ! 595: // on indicate the bit is of color Red. ! 596: // ! 597: //GreenMask - Green color Mask for device with direct color modes. Bits ! 598: // turned on indicate the bit is of color Green. ! 599: // ! 600: //BlueMask - Blue color Mask for device with direct color modes. Bits ! 601: // turned on indicate the bit is of color Blue. ! 602: // ! 603: //AttributeFlags. Flags indicating certain behavior for the device. ! 604: // ! 605: //VideoMemoryBitmapWidth - Width of the video memory bitmap. ! 606: // VisScreenWidth <= VideoMemoryBitmapWidth <= ScreenStride ! 607: // ! 608: //VideoMemoryBitmapHeight - Height of the video memory bitmap. ! 609: // VisScreenHeight <= VideoMemoryBitmapHeight = VideoRamLength / ScreenStride ! 610: // ! 611: ! 612: // ! 613: // VIDEO_IOCTL_QUERY_NUM_AVAIL_FONTS - Returns the number of ROM fonts ! 614: // available on the card. ! 615: // ! 616: // Information used by this function is passed using the following structure: ! 617: // ! 618: ! 619: typedef struct _VIDEO_NUM_FONTS { ! 620: ULONG NumFonts; ! 621: } VIDEO_NUM_FONTS, *PVIDEO_NUM_FONTS; ! 622: ! 623: // ! 624: //NumFonts - Returns the number of ROM fonts found on the device. ! 625: // ! 626: ! 627: ! 628: // ! 629: // VIDEO_IOCTL_QUERY_AVAIL_FONTS - Returns an array containing information ! 630: // about each available font on the controller. ! 631: // ! 632: // Information used by this function is passed using the following structure: ! 633: // ! 634: ! 635: typedef struct _VIDEO_FONT_INFORMATION { ! 636: ULONG FontIndex; ! 637: USHORT WidthInPixels; ! 638: USHORT HeightInPixels; ! 639: } VIDEO_FONT_INFORMATION, *PVIDEO_FONT_INFORMATION; ! 640: ! 641: // ! 642: //FontIndex - Index of the font in the controller's font table. For a ! 643: // QUERY_CURRENT_FONT, 0 is returned if the font was a loadable-font. ! 644: // ! 645: //WidthInPixels - Width of the characters in the font, in pixels. ! 646: // ! 647: //HeigthInPixels - Heigth of the characters in the font, in pixels. ! 648: // ! 649: ! 650: ! 651: // ! 652: // VIDEO_IOCTL_SET_CURRENT_FONT - Is used to load one of the ROM fonts found ! 653: // on the controller. ! 654: // ! 655: // Information used by this function is passed using the following structure: ! 656: // ! 657: ! 658: typedef struct _VIDEO_FONT { ! 659: ULONG RequestedFont; ! 660: } VIDEO_FONT, *PVIDEO_FONT; ! 661: ! 662: // ! 663: //RequestedFont - Indicates which ROM font from the device should be loaded. ! 664: // Note that zero is not a valid font since it indicates the ! 665: // font that is currently in the font generator. ! 666: // ! 667: ! 668: ! 669: // ! 670: // VIDEO_IOCTL_LOAD_AND_SET_FONT - Is used to load a user-defined font. ! 671: // ! 672: // VIDEO_IOCTL_QUERY_CURRENT_FONT - Returns the information for the current ! 673: // controller font. ! 674: // ! 675: // Information used by this function is passed using the following structure: ! 676: // ! 677: ! 678: typedef struct _VIDEO_LOAD_FONT_INFORMATION { ! 679: USHORT WidthInPixels; ! 680: USHORT HeightInPixels; ! 681: ULONG FontSize; ! 682: UCHAR Font[1]; ! 683: } VIDEO_LOAD_FONT_INFORMATION, *PVIDEO_LOAD_FONT_INFORMATION; ! 684: ! 685: // ! 686: //WidthInPixels - Width of the characters in the font, in pixels. ! 687: // ! 688: //HeigthInPixels - Heigth of the characters in the font, in pixels. ! 689: // ! 690: //FontSize - Size of the font buffer being passed in, in bytes. ! 691: // ! 692: //Font - Start of the font buffer. ! 693: // ! 694: ! 695: ! 696: // ! 697: // VIDEO_IOCTL_SET_PALETTE_REGISTERS - Takes buffer containing ! 698: // VIDEO_PALETTE_DATA where Colors[] ! 699: // specifies the array containing the ! 700: // color values for the palette registers. ! 701: // ! 702: // Information used by this function is passed using the following structure: ! 703: // ! 704: // NOTE: This should only be used by the VGA type drivers ! 705: // ! 706: ! 707: typedef struct _VIDEO_PALETTE_DATA { ! 708: USHORT NumEntries; ! 709: USHORT FirstEntry; ! 710: USHORT Colors[1]; ! 711: } VIDEO_PALETTE_DATA, *PVIDEO_PALETTE_DATA; ! 712: ! 713: // ! 714: //NumEntries - Number of entries in the array of color values. ! 715: // ! 716: //FirstEntry - Location in the device palette to which the first entry in the ! 717: // list of colors should be copied to. The other entries in the color list ! 718: // should be copied sequentially, from this starting point into the device's ! 719: // palette. ! 720: // ! 721: //Colors - Array of color entries to copy into the device's color palette. ! 722: // ! 723: ! 724: // ! 725: // VIDEO_IOCTL_SET_COLOR_REGISTERS - Takes buffer containing VIDEO_CLUT. ! 726: // ! 727: // Information used by this function is passed using the following structure: ! 728: // ! 729: ! 730: typedef struct _VIDEO_CLUTDATA { ! 731: UCHAR Red; ! 732: UCHAR Green; ! 733: UCHAR Blue; ! 734: UCHAR Unused; ! 735: } VIDEO_CLUTDATA, *PVIDEO_CLUTDATA; ! 736: ! 737: // ! 738: //Red - Bits to be put in the Red portion of the color registers. ! 739: // ! 740: //Green - Bits to be put in the Green portion of the color registers. ! 741: // ! 742: //Blue - Bits to be put in the Blue portion of the color registers. ! 743: // ! 744: ! 745: typedef struct { ! 746: USHORT NumEntries; ! 747: USHORT FirstEntry; ! 748: union { ! 749: VIDEO_CLUTDATA RgbArray; ! 750: ULONG RgbLong; ! 751: } LookupTable[1]; ! 752: } VIDEO_CLUT, *PVIDEO_CLUT; ! 753: ! 754: // ! 755: //NumEntries - Number of entries in the LookupTable of color values. ! 756: // ! 757: //FirstEntry - Location in the device palette to which the first entry in the ! 758: // LookupTable of colors should be copied to. The other entries in the ! 759: // LookupTable should be copied sequentially, from this starting point into ! 760: // the device's palette. ! 761: // ! 762: //LookupTable - Array of color entries to copy into the device's color ! 763: // registers/palette. The color entries can be accessed as a genric 32 bit ! 764: // value or as Red/Green/Blue/Unused fields. ! 765: // ! 766: ! 767: // ! 768: // NOTE: Cursor vs. Pointer: ! 769: // A cursor is a rectangular set of pixels which are used to indicate the ! 770: // location of input coming from the keyboard. ! 771: // ! 772: // A pointer is the set of pixels that are used to paint the shape ! 773: // associated with the mouse. ! 774: // ! 775: ! 776: // ! 777: // VIDEO_IOCTL_QUERY_CURSOR_POSITION - Returns the location of the cursor on ! 778: // the screen. ! 779: // ! 780: // VIDEO_IOCTL_SET_CURSOR_POSITION - Is used to set the location of the ! 781: // cursor on the screen. ! 782: // ! 783: // Information used by this function is passed using the following structure: ! 784: // ! 785: ! 786: typedef struct _VIDEO_CURSOR_POSITION { ! 787: SHORT Column; ! 788: SHORT Row; ! 789: } VIDEO_CURSOR_POSITION, *PVIDEO_CURSOR_POSITION; ! 790: ! 791: // ! 792: //Column - Column on which the cursor is located from the top left, in pixels. ! 793: // ! 794: //Row - Row on which the cusor is located from the top left, in pixels. ! 795: // ! 796: ! 797: ! 798: // ! 799: // VIDEO_IOCTL_QUERY_CURSOR_ATTR - Returns all attributes of the cursor. ! 800: // ! 801: // VIDEO_IOCTL_SET_CURSOR_ATTR - Is used to set the attributes of the cursor. ! 802: // ! 803: // Information used by this function is passed using the following structure: ! 804: // ! 805: ! 806: // ! 807: // For the VGA: ! 808: // TopScanLine will be stored in the height when an IOCTL is made ! 809: // BottomScanLine will be stored in the width when an IOCTL is made ! 810: // ! 811: ! 812: typedef struct _VIDEO_CURSOR_ATTRIBUTES { ! 813: USHORT Width; ! 814: USHORT Height; ! 815: SHORT Column; ! 816: SHORT Row; ! 817: UCHAR Rate; ! 818: UCHAR Enable; ! 819: } VIDEO_CURSOR_ATTRIBUTES, *PVIDEO_CURSOR_ATTRIBUTES; ! 820: ! 821: // ! 822: //Width - Width of the cursor, in pixels. ! 823: // ! 824: //Height - Height of the cursor, in scans. ! 825: // ! 826: //Column - Column on which the cursor is located from the top left, in pixels. ! 827: // ! 828: //Row - Row on which the cusor is located from the top left, in pixels. ! 829: // ! 830: //Rate - Rate at which the cursor whould flash. ! 831: // ! 832: //Enable - Non-zero to display cursor, 0 not to display. ! 833: // ! 834: ! 835: // ! 836: // VIDEO_IOCTL_QUERY_POINTER_POSITION - Returns the location of the pointer ! 837: // on the screen ! 838: // ! 839: // VIDEO_IOCTL_SET_POINTER_POSITION - Is used to set the location of the ! 840: // pointer on the screen. ! 841: // ! 842: // Information used by this function is passed using the following structure: ! 843: // ! 844: ! 845: typedef struct _VIDEO_POINTER_POSITION { ! 846: SHORT Column; ! 847: SHORT Row; ! 848: } VIDEO_POINTER_POSITION, *PVIDEO_POINTER_POSITION; ! 849: ! 850: // ! 851: //Column - Column on which the cursor is located from the top left, in pixels. ! 852: // ! 853: //Row - Row on which the cusor is located from the top left, in pixels. ! 854: // ! 855: ! 856: ! 857: // ! 858: // VIDEO_IOCTL_QUERY_POINTER_ATTR - Returns all attributes of the pointer. ! 859: // ! 860: // VIDEO_IOCTL_SET_POINTER_ATTR - Is used to set the attributes of the ! 861: // pointer. ! 862: // ! 863: // Information used by this function is passed using the following structure: ! 864: // ! 865: ! 866: typedef struct _VIDEO_POINTER_ATTRIBUTES { ! 867: ULONG Flags; ! 868: ULONG Width; ! 869: ULONG Height; ! 870: ULONG WidthInBytes; ! 871: ULONG Enable; ! 872: SHORT Column; ! 873: SHORT Row; ! 874: UCHAR Pixels[1]; ! 875: } VIDEO_POINTER_ATTRIBUTES, *PVIDEO_POINTER_ATTRIBUTES; ! 876: ! 877: // ! 878: //Flags - color or mono pointer, same as for query pointer capabilities. ! 879: // ! 880: //Width - Width of the pointer, in pixels. ! 881: // ! 882: //Height - Height of the pointer, in scans. ! 883: // ! 884: //WidthInBytes - Width of the pointer, in bytes. ! 885: // ! 886: //Enable - Non-zero to display pointer, 0 not to display. ! 887: // ! 888: //Column - Column on which the cursor is located from the top left, in pixels. ! 889: // ! 890: //Row - Row on which the cusor is located from the top left, in pixels. ! 891: // ! 892: //Pixels - Start of pointer data, in device-compatible DIB format. ! 893: // (Mask data is always in 1-bpp DIB format.) ! 894: // ! 895: ! 896: ! 897: // ! 898: // VIDEO_IOCTL_QUERY_POINTER_CAPABILITIES - Returns capabilities of miniport ! 899: // hardware cursor ! 900: // ! 901: ! 902: typedef struct _VIDEO_POINTER_CAPABILITIES { ! 903: ULONG Flags; ! 904: ULONG MaxWidth; ! 905: ULONG MaxHeight; ! 906: ULONG HWPtrBitmapStart; ! 907: ULONG HWPtrBitmapEnd; ! 908: } VIDEO_POINTER_CAPABILITIES, *PVIDEO_POINTER_CAPABILITIES; ! 909: ! 910: // ! 911: // Flag bit definitions ! 912: // ! 913: ! 914: #define VIDEO_MODE_ASYNC_POINTER 0x01 // 1 if the cursor can be updated ! 915: // asynchronously to drawing operations. ! 916: #define VIDEO_MODE_MONO_POINTER 0x02 // 1 if a monochrome hardware pointer ! 917: // is supported. ! 918: #define VIDEO_MODE_COLOR_POINTER 0x04 // 1 if a color hardware pointer is ! 919: // supported. ! 920: #define VIDEO_MODE_ANIMATE_START 0x08 // The pointer being passed down has ! 921: #define VIDEO_MODE_ANIMATE_UPDATE 0x10 // the same hotspot as the previous ! 922: // pointer ! 923: ! 924: // ! 925: //MaxWidth - Widest pointer bitmap the miniport should be requested to load ! 926: // for either monochrome or color pointer. ! 927: // ! 928: //MaxHeight - widest pointer bitmap the miniport should be requested to load ! 929: // for either monochrome color pointer handled. ! 930: // ! 931: //HWPtrBitmapStart = first offset in bitmap of memory used to store hardware ! 932: // pointer bitmap, in CPU-addressable units (-1 if not applicable). For ! 933: // planar modes (like VGA mode 12h), this is a planar offset; for linear ! 934: // modes (like VGA mode 13h), this is a linear offset. The CPU-addressable ! 935: // translation in HC planar mode is assumed to be linearaddress/4, ! 936: // because there are four planes at each address. ! 937: // ! 938: //HWPtrBitmapEnd = last offset in bitmap of memory used to store hardware ! 939: // pointer bitmap (-1 if not applicable). ! 940: // ! 941: // Note: Miniport has options to reject any call to set a pointer. ! 942: // ! 943: ! 944: ! 945: // ! 946: // VIDEO_IOCTL_GET_BANK_SELECT_CODE - Called by the Windows display driver ! 947: // to get a block of executable code used ! 948: // to perform bank-switching in high ! 949: // resolution SVGA drivers. ! 950: // ! 951: // Gets information needed to implement banking control for a selected mode. ! 952: // ! 953: // Information used by this function is passed using the following structures: ! 954: // ! 955: ! 956: // ! 957: // The input from the caller in the input buffer is a VIDEO_MODE structure, as ! 958: // described under VIDEO_IOCTL_SET_CURRENT_MODE. ! 959: // ! 960: // RequestedMode - mode index for which banking information is desired. ! 961: // ! 962: ! 963: // ! 964: // Returned in output buffer. ! 965: // ! 966: ! 967: typedef struct _VIDEO_BANK_SELECT { ! 968: ULONG Length; ! 969: ULONG Size; ! 970: ULONG BankingFlags; ! 971: ULONG BankingType; ! 972: ULONG PlanarHCBankingType; ! 973: ULONG BitmapWidthInBytes; ! 974: ULONG BitmapSize; ! 975: ULONG Granularity; ! 976: ULONG PlanarHCGranularity; ! 977: ULONG CodeOffset; ! 978: ULONG PlanarHCBankCodeOffset; ! 979: ULONG PlanarHCEnableCodeOffset; ! 980: ULONG PlanarHCDisableCodeOffset; ! 981: } VIDEO_BANK_SELECT, *PVIDEO_BANK_SELECT; ! 982: ! 983: // ! 984: // Stored in the BankType and PlanarHCBankintType fields ! 985: // ! 986: ! 987: typedef enum _VIDEO_BANK_TYPE { ! 988: VideoNotBanked = 0, ! 989: VideoBanked1RW, ! 990: VideoBanked1R1W, ! 991: VideoBanked2RW, ! 992: NumVideoBankTypes ! 993: } VIDEO_BANK_TYPE, *PVIDEO_BANK_TYPE; ! 994: ! 995: // ! 996: // Defines for BankingFlags. ! 997: // ! 998: ! 999: #define PLANAR_HC 0x00000001 ! 1000: ! 1001: // ! 1002: //Note: planar high-color ("planar HC") mode is a special 8-bpp-and-up ! 1003: // CPU addressing mode in which four bytes can be accessed at ! 1004: // once by using the VGA's planar hardware. This mode is enabled ! 1005: // by turning off the Chain4 bit (bit 3 in Sequence Controller ! 1006: // register 4), so it is also known as non-Chain4 mode. Planar HC ! 1007: // mode can greatly accelerate operations such as solid fills, ! 1008: // some pattern fills, and some blits. ! 1009: // ! 1010: //Note: the term "CPU-addressable bytes" means offsets measured ! 1011: // in bytes as accessed by the CPU. In 16-color modes, this ! 1012: // merely means "measured in bytes" rather than "measured in ! 1013: // pixels," where each byte contains 8 pixels, as usual. ! 1014: // In normal high-color modes, "CPU-addressable bytes" ! 1015: // is exactly what you'd expect; it's the number of pixels in 256 ! 1016: // color modes, pixels*2 in 16-bpp modes, and so on. However, in ! 1017: // planar HC modes, there are four display memory bytes at every CPU- ! 1018: // addressable byte, because four planes are at each address, so ! 1019: // in 256 color modes the number of CPU-addressable bytes is ! 1020: // pixels/4, in 16-bpp modes CPU-addressable bytes = pixels/2, and ! 1021: // so on. Basically, "CPU-addressable bytes" just means the ! 1022: // offsets the CPU needs to address banks properly in the ! 1023: // specified mode. ! 1024: // ! 1025: //Note: the start address must be set to 0 (displayed pixels must ! 1026: // start at offset 0 in display memory), and the banking windows ! 1027: // must fit within the 64K area starting at A000:0; no 128K ! 1028: // mappings, please, because there may be a monochrome adapter ! 1029: // in the system. ! 1030: // ! 1031: //Length - Length of the basic structure. Used for versioning by checking the ! 1032: // Length of the struct is at least as large as the valuegiven by sizeof(). ! 1033: // ! 1034: //Size - number of bytes required to hold all banking information for ! 1035: // this mode, including the VIDEO_BANK_SELECT structure and all ! 1036: // bank-switch code. This is the size of the buffer that ! 1037: // VgaGetBankSelectCode requires in order properly to return info. ! 1038: // ! 1039: //BankingFlags - indicate the type of banking supported in this mode. ! 1040: // PLANAR_HC - if set, indicates that planar high-color (HC) mode ! 1041: // (non-Chain4 8-, 15-, 16-, 24-, and 32-bpp) is supported. ! 1042: // If this bit is set, the following fields must be filled in: ! 1043: // PlanarHCGranularity, pPlanarHCBankCode, ! 1044: // pPlanarHCEnableCode, pPlanarHCDisableCode. ! 1045: // This bit is ignored by the 16-color driver, as are the ! 1046: // associated fields. ! 1047: // ! 1048: //BankingType - These are the banking types supported by the adapter ! 1049: // when it is ina standard mode. ! 1050: // ! 1051: // VideoNotBanked - this mode does not support or require banking. ! 1052: // VideoBanked1RW - this mode supports a single RW (readable and ! 1053: // writable) banking window. The window is assumed to be ! 1054: // 64K in size. ! 1055: // VideoBanked1R1W - this mode supports a single window, but the ! 1056: // window can be mapped to different areas of display memory ! 1057: // for reads and for writes. The window is assumed to be ! 1058: // 64K in size. ! 1059: // VideoBanked2RW - this mode supports two independently mappable ! 1060: // banking windows, each RW. Each window is assumed to be ! 1061: // 32K in size. The second window is assumed ! 1062: // to start immediately after the end of the first, at ! 1063: // A000:8000. ! 1064: // ! 1065: //PlanarHCBankingType - These are the banking types supported by the ! 1066: // adapter when it is in a PLANAR HC mode. ! 1067: // ! 1068: // See BankingType for defintions of each banking type. ! 1069: // ! 1070: // ! 1071: //BitmapWidthInBytes - distance from start of one scan line to start ! 1072: // of next, counted in CPU-addressable bytes (not pixels). The ! 1073: // CPU-addressable distance from one scan line to the next is ! 1074: // assumed to be BitmapWidthInBytes/4 in planar HC modes, because ! 1075: // there are four planes at each address. ! 1076: // ! 1077: //BitmapSize - size of display memory in CPU-addressable bytes (for ! 1078: // example, 256K on a 1 Mb SVGA in 16-color mode, because there ! 1079: // are four bytes at each address). The CPU-addressable bitmap ! 1080: // size is assumed to be BitmapSize/4 in planar HC modes, because ! 1081: // there are four planes at each address. ! 1082: // ! 1083: //Granularity - granularity with which display memory may be mapped ! 1084: // into a banking window. (That is, resolution with which the ! 1085: // display memory address mapped to the start of a window may be ! 1086: // set; anywhere from 1K to 64K, depending on the adapter. If ! 1087: // Granularity < window size (either 64K or 32K), then adjacent ! 1088: // banks can overlap, and broken rasters can always be avoided. ! 1089: // If Granularity == window size, then banks are disjoint, and ! 1090: // display memory is basically segmented into banks.) Granularity ! 1091: // is measured in CPU-addressable bytes. ! 1092: // ! 1093: //PlanarHCGranularity - granularity with which display memory may be ! 1094: // mapped into a banking window in planar HC mode. ! 1095: // PlanarHCGranularity is measured in CPU-addressable bytes, and ! 1096: // is typically but not always Granularity/4. Ignored in ! 1097: // 16-color modes. ! 1098: // ! 1099: //CodeOffset - base of the code section in the structure. ! 1100: // ! 1101: //PlanarHCBankCodeOffset - offset from Code of executable code ! 1102: // that performs planar HC mode bank switching. Ignored in ! 1103: // 16-color modes. ! 1104: // ! 1105: //PlanarHCEnableCodeOffset - offset from Code of executable code ! 1106: // that enables planar HC mode. Ignored in 16-color modes. ! 1107: // ! 1108: //PlanarHCDisableCodeOffset - offset from Code of executable code ! 1109: // that disables planar HC mode. Ignored in 16-color modes. ! 1110: // ! 1111: //Specification for bank switch code at Code: ! 1112: // Executes requested bank mappings. ! 1113: // ! 1114: // Input: ! 1115: // EAX = bank number to which to map window #0 ! 1116: // EBX = bank number to which to map window #1 ! 1117: // interpreted according to BankingType as follows: ! 1118: // VideoBanked1RW - the single window is mapped to bank EAX, ! 1119: // EBX is ignored. ! 1120: // VideoBanked1RW - the read window is mapped to bank EAX, ! 1121: // the write window is mapped to bank EBX ! 1122: // VideoBanked1R1W - the window at A000:0 is mapped to bank EAX, ! 1123: // the window at A800:0 is mapped to bank EBX ! 1124: // ! 1125: // Output: none ! 1126: // ! 1127: // Note: the definition of "bank n" is the bank that starts at ! 1128: // display memory offset Granularity*n. In other words, ! 1129: // banks are assumed to start every Granularity CPU-addressable ! 1130: // bytes, and are numbered from 0 to number of banks-1. ! 1131: // ! 1132: //Specification for planar HC executable code: ! 1133: // ***To be filled in when we get to planar HC modes*** ! 1134: // ! 1135: ! 1136: ! 1137: // ! 1138: // VIDEO_IOCTL_MAP_VIDEO_MEMORY - Maps the frame buffer into the callers ! 1139: // address space. ! 1140: // VIDEO_IOCTL_UNMAP_VIDEO_MEMORY - Unmaps the frame buffer from the callers ! 1141: // address space. ! 1142: // ! 1143: // Information used by this function is passed using the following structure: ! 1144: // ! 1145: ! 1146: typedef struct _VIDEO_MEMORY { ! 1147: PVOID RequestedVirtualAddress; ! 1148: } VIDEO_MEMORY, *PVIDEO_MEMORY; ! 1149: ! 1150: // ! 1151: //RequestedVirtualAddress - For MAP: Requested virtual address for the video ! 1152: // memory. This value is optional. If zero is specified, the operating ! 1153: // system will choose an appropriate location. For UNMAP: Virtual Address ! 1154: // of the base of video memory. The size is implicit since it can not ! 1155: // change (you can not add video memory dynamically!). ! 1156: // ! 1157: ! 1158: // ! 1159: // VIDEO_IOCTL_MAP_VIDEO_MEMORY - Returns the virtual address and size of ! 1160: // the frame buffer and video memory in the ! 1161: // caller's address space. ! 1162: // This IOCTL must be called after a call ! 1163: // to the MAP IOCTL has been made. ! 1164: // ! 1165: ! 1166: typedef struct _VIDEO_MEMORY_INFORMATION { ! 1167: PVOID VideoRamBase; ! 1168: ULONG VideoRamLength; ! 1169: PVOID FrameBufferBase; ! 1170: ULONG FrameBufferLength; ! 1171: } VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION; ! 1172: ! 1173: // ! 1174: //VideoRamBase - Virtual address of the Video RAM in the callers address space ! 1175: // (only valid if the memory is mapped. ! 1176: // ! 1177: //VideoRamLength - Linear length of the Video RAM in the caller's virtual ! 1178: // address space (memory accessible through a bank switch mechanism is not ! 1179: // described by this value). ! 1180: // This value must be equal to VideoMemoryBitmapHeight * ScreenStride ! 1181: // ! 1182: //FrameBufferBase - Virtual address of the Frame Buffer in the caller's ! 1183: // address space. The Frame buffer is the actively displayed part of Video ! 1184: // Ram. ! 1185: // ! 1186: //FrameBufferLength - Linear length of the Frame Buffer in the caller's ! 1187: // virtual address space (memory accessible through a bank switch mechanism ! 1188: // is not described by this value). ! 1189: // This value must be equal to VisScreenWidth * ScreenStride ! 1190: // ! 1191: ! 1192: ! 1193: // ! 1194: // IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES - Returns the access range used to ! 1195: // program the hardware directly. ! 1196: // An array of these is returned if ! 1197: // multiple ranges exist. ! 1198: // ! 1199: // IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES - Frees up the access ranges that were ! 1200: // allocated by the QUERY_ACCESS_RANGES ! 1201: // call. ! 1202: // ! 1203: // Information used by this function is passed using the following structure: ! 1204: // ! 1205: ! 1206: typedef struct _VIDEO_PUBLIC_ACCESS_RANGES { ! 1207: ULONG InIoSpace; ! 1208: ULONG MappedInIoSpace; ! 1209: PVOID VirtualAddress; ! 1210: } VIDEO_PUBLIC_ACCESS_RANGES, *PVIDEO_PUBLIC_ACCESS_RANGES; ! 1211: ! 1212: // ! 1213: //InIoSpace - Indicates if the hardware registers or ports are in IO space ! 1214: // or in memory space. ! 1215: // ! 1216: //MappedInIoSpace - Indicates if under the current platform the registers or ! 1217: // ports are mapped in IO Space or memory space. ! 1218: // ! 1219: //VirtualAddress - Location of the registers or IO ports as mapped under the ! 1220: // current architecture. ! 1221: // ! 1222: ! 1223: ! 1224: // ! 1225: // IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES - Returns the color information ! 1226: // found in the monitors VDDPs ! 1227: // description file. ! 1228: // ! 1229: // NOTE: This structure must be filled out completely. A subset of the ! 1230: // values can not be returned. ! 1231: // ! 1232: ! 1233: typedef struct _VIDEO_COLOR_CAPABILITIES { ! 1234: ULONG Length; ! 1235: ULONG AttributeFlags; ! 1236: LONG RedPhosphoreDecay; ! 1237: LONG GreenPhosphoreDecay; ! 1238: LONG BluePhosphoreDecay; ! 1239: LONG WhiteChromaticity_x; ! 1240: LONG WhiteChromaticity_y; ! 1241: LONG WhiteChromaticity_Y; ! 1242: LONG RedChromaticity_x; ! 1243: LONG RedChromaticity_y; ! 1244: LONG GreenChromaticity_x; ! 1245: LONG GreenChromaticity_y; ! 1246: LONG BlueChromaticity_x; ! 1247: LONG BlueChromaticity_y; ! 1248: LONG WhiteGamma; ! 1249: LONG RedGamma; ! 1250: LONG GreenGamma; ! 1251: LONG BlueGamma; ! 1252: } VIDEO_COLOR_CAPABILITIES, *PVIDEO_COLOR_CAPABILITIES; ! 1253: ! 1254: // ! 1255: // Flag Bit definitions ! 1256: // ! 1257: ! 1258: #define VIDEO_DEVICE_COLOR 0x1 // Is this device support color (1) ! 1259: // or monochrome only ! 1260: #define VIDEO_OPTIONAL_GAMMET_TABLE 0x2 // Indicates that a gammet table can ! 1261: // be queried/set for the device ! 1262: // use other IOCTLs for that purpose. ! 1263: // ! 1264: //Length - Length of the basic structure. Used for versioning by checking the ! 1265: // Length of the struct is at least as large as the value given by sizeof(). ! 1266: // ! 1267: //AttributesFlag - List of falgs determining some of the properties of the ! 1268: // device. ! 1269: // ! 1270: //See the VDDP documentation for the details on the various fields ! 1271: // ! 1272: //RedPhosphoreDecay ! 1273: //GreenPhosphoreDecay ! 1274: //BluePhosphoreDecay - ! 1275: // ! 1276: //WhiteChromaticity_x ! 1277: //WhiteChromaticity_y ! 1278: //WhiteChromaticity_Y - ! 1279: // ! 1280: //RedChromaticity_x ! 1281: //RedChromaticity_y ! 1282: //GreenChromaticity_x ! 1283: //GreenChromaticity_y ! 1284: //BlueChromaticity_x ! 1285: //BlueChromaticity_y - ! 1286: // ! 1287: //WhiteGamma - ! 1288: // ! 1289: //RedGamma ! 1290: //GreenGamma ! 1291: //BlueGamma - ! 1292: // ! 1293: //All values returned in this structure are integers. ! 1294: //The values returned must be floating point values * 10,000; i.e: ! 1295: //a gamma of 2.34 would be returned as 23400. ! 1296: //
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.