Annotation of ntddk/src/video/miniport/cirrus/cirrus.h, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) 1992  Microsoft Corporation
                      4: 
                      5: Module Name:
                      6: 
                      7:     cirrus.h
                      8: 
                      9: Abstract:
                     10: 
                     11:     This module contains the definitions for the code that implements the
                     12:     Cirrus Logic VGA 6410/6420/542x device driver.
                     13: 
                     14: Environment:
                     15: 
                     16:     Kernel mode
                     17: 
                     18: Revision History:
                     19: 
                     20: 
                     21: --*/
                     22: 
                     23: //
                     24: // Do full save and restore.
                     25: //
                     26: 
                     27: #define EXTENDED_REGISTER_SAVE_RESTORE 1
                     28: 
                     29: //
                     30: // Banking ifdefs to enable banking
                     31: // the banking type MUST match the type in clhard.asm
                     32: //
                     33: 
                     34: #define ONE_64K_BANK             0
                     35: #define TWO_32K_BANKS            1
                     36: #define MULTIPLE_REFRESH_TABLES  0
                     37: 
                     38: //
                     39: // Base address of VGA memory range.  Also used as base address of VGA
                     40: // memory when loading a font, which is done with the VGA mapped at A0000.
                     41: //
                     42: 
                     43: #define MEM_VGA      0xA0000
                     44: #define MEM_VGA_SIZE 0x20000
                     45: 
                     46: //
                     47: // Port definitions for filling the ACCSES_RANGES structure in the miniport
                     48: // information, defines the range of I/O ports the VGA spans.
                     49: // There is a break in the IO ports - a few ports are used for the parallel
                     50: // port. Those cannot be defined in the ACCESS_RANGE, but are still mapped
                     51: // so all VGA ports are in one address range.
                     52: //
                     53: 
                     54: #define VGA_BASE_IO_PORT      0x000003B0
                     55: #define VGA_START_BREAK_PORT  0x000003BB
                     56: #define VGA_END_BREAK_PORT    0x000003C0
                     57: #define VGA_MAX_IO_PORT       0x000003DF
                     58: 
                     59: //
                     60: // VGA port-related definitions.
                     61: //
                     62: 
                     63: //
                     64: // VGA register definitions
                     65: //
                     66:                                             // ports in monochrome mode
                     67: #define CRTC_ADDRESS_PORT_MONO      0x0004  // CRT Controller Address and
                     68: #define CRTC_DATA_PORT_MONO         0x0005  // Data registers in mono mode
                     69: #define FEAT_CTRL_WRITE_PORT_MONO   0x000A  // Feature Control write port
                     70:                                             // in mono mode
                     71: #define INPUT_STATUS_1_MONO         0x000A  // Input Status 1 register read
                     72:                                             // port in mono mode
                     73: #define ATT_INITIALIZE_PORT_MONO    INPUT_STATUS_1_MONO
                     74:                                             // Register to read to reset
                     75:                                             // Attribute Controller index/data
                     76: #define ATT_ADDRESS_PORT            0x0010  // Attribute Controller Address and
                     77: #define ATT_DATA_WRITE_PORT         0x0010  // Data registers share one port
                     78:                                             // for writes, but only Address is
                     79:                                             // readable at 0x010
                     80: #define ATT_DATA_READ_PORT          0x0011  // Attribute Controller Data reg is
                     81:                                             // readable here
                     82: #define MISC_OUTPUT_REG_WRITE_PORT  0x0012  // Miscellaneous Output reg write
                     83:                                             // port
                     84: #define INPUT_STATUS_0_PORT         0x0012  // Input Status 0 register read
                     85:                                             // port
                     86: #define VIDEO_SUBSYSTEM_ENABLE_PORT 0x0013  // Bit 0 enables/disables the
                     87:                                             // entire VGA subsystem
                     88: #define SEQ_ADDRESS_PORT            0x0014  // Sequence Controller Address and
                     89: #define SEQ_DATA_PORT               0x0015  // Data registers
                     90: #define DAC_PIXEL_MASK_PORT         0x0016  // DAC pixel mask reg
                     91: #define DAC_ADDRESS_READ_PORT       0x0017  // DAC register read index reg,
                     92:                                             // write-only
                     93: #define DAC_STATE_PORT              0x0017  // DAC state (read/write),
                     94:                                             // read-only
                     95: #define DAC_ADDRESS_WRITE_PORT      0x0018  // DAC register write index reg
                     96: #define DAC_DATA_REG_PORT           0x0019  // DAC data transfer reg
                     97: #define FEAT_CTRL_READ_PORT         0x001A  // Feature Control read port
                     98: #define MISC_OUTPUT_REG_READ_PORT   0x001C  // Miscellaneous Output reg read
                     99:                                             // port
                    100: #define GRAPH_ADDRESS_PORT          0x001E  // Graphics Controller Address
                    101: #define GRAPH_DATA_PORT             0x001F  // and Data registers
                    102: 
                    103:                                             // ports in color mode
                    104: #define CRTC_ADDRESS_PORT_COLOR     0x0024  // CRT Controller Address and
                    105: #define CRTC_DATA_PORT_COLOR        0x0025  // Data registers in color mode
                    106: #define FEAT_CTRL_WRITE_PORT_COLOR  0x002A  // Feature Control write port
                    107: #define INPUT_STATUS_1_COLOR        0x002A  // Input Status 1 register read
                    108:                                             // port in color mode
                    109: #define ATT_INITIALIZE_PORT_COLOR   INPUT_STATUS_1_COLOR
                    110:                                             // Register to read to reset
                    111:                                             // Attribute Controller index/data
                    112:                                             // toggle in color mode
                    113: //
                    114: // Offsets in HardwareStateHeader->PortValue[] of save areas for non-indexed
                    115: // VGA registers.
                    116: //
                    117: 
                    118: #define CRTC_ADDRESS_MONO_OFFSET      0x04
                    119: #define FEAT_CTRL_WRITE_MONO_OFFSET   0x0A
                    120: #define ATT_ADDRESS_OFFSET            0x10
                    121: #define MISC_OUTPUT_REG_WRITE_OFFSET  0x12
                    122: #define VIDEO_SUBSYSTEM_ENABLE_OFFSET 0x13
                    123: #define SEQ_ADDRESS_OFFSET            0x14
                    124: #define DAC_PIXEL_MASK_OFFSET         0x16
                    125: #define DAC_STATE_OFFSET              0x17
                    126: #define DAC_ADDRESS_WRITE_OFFSET      0x18
                    127: #define GRAPH_ADDRESS_OFFSET          0x1E
                    128: #define CRTC_ADDRESS_COLOR_OFFSET     0x24
                    129: #define FEAT_CTRL_WRITE_COLOR_OFFSET  0x2A
                    130:                                                                                                                   // toggle in color mode
                    131: //
                    132: // VGA indexed register indexes.
                    133: //
                    134: 
                    135: // CL-GD542x specific registers:
                    136: //
                    137: #define IND_CL_EXTS_ENB         0x06    // index in Sequencer to enable exts
                    138: #define IND_CL_SCRATCH_PAD                  0x0A         // index in Seq of POST scratch pad
                    139: #define IND_CL_ID_REG           0x27    // index in CRTC of ID Register
                    140: //
                    141: #define IND_CURSOR_START        0x0A    // index in CRTC of the Cursor Start
                    142: #define IND_CURSOR_END          0x0B    //  and End registers
                    143: #define IND_CURSOR_HIGH_LOC     0x0E    // index in CRTC of the Cursor Location
                    144: #define IND_CURSOR_LOW_LOC      0x0F    //  High and Low Registers
                    145: #define IND_VSYNC_END           0x11    // index in CRTC of the Vertical Sync
                    146:                                         //  End register, which has the bit
                    147:                                         //  that protects/unprotects CRTC
                    148:                                         //  index registers 0-7
                    149: #define IND_SET_RESET_ENABLE    0x01    // index of Set/Reset Enable reg in GC
                    150: #define IND_DATA_ROTATE         0x03    // index of Data Rotate reg in GC
                    151: #define IND_READ_MAP            0x04    // index of Read Map reg in Graph Ctlr
                    152: #define IND_GRAPH_MODE          0x05    // index of Mode reg in Graph Ctlr
                    153: #define IND_GRAPH_MISC          0x06    // index of Misc reg in Graph Ctlr
                    154: #define IND_BIT_MASK            0x08    // index of Bit Mask reg in Graph Ctlr
                    155: #define IND_SYNC_RESET          0x00    // index of Sync Reset reg in Seq
                    156: #define IND_MAP_MASK            0x02    // index of Map Mask in Sequencer
                    157: #define IND_MEMORY_MODE         0x04    // index of Memory Mode reg in Seq
                    158: #define IND_CRTC_PROTECT        0x11    // index of reg containing regs 0-7 in
                    159:                                         //  CRTC
                    160: #define IND_CRTC_COMPAT         0x34    // index of CRTC Compatibility reg
                    161:                                         //  in CRTC
                    162: #define START_SYNC_RESET_VALUE  0x01    // value for Sync Reset reg to start
                    163:                                         //  synchronous reset
                    164: #define END_SYNC_RESET_VALUE    0x03    // value for Sync Reset reg to end
                    165:                                         //  synchronous reset
                    166:  
                    167: //
                    168: // Value to write to Extensions Control register values extensions.
                    169: //
                    170: 
                    171: #define CL64xx_EXTENSION_ENABLE_INDEX     0x0A     // GR0A to be exact!
                    172: #define CL64xx_EXTENSION_ENABLE_VALUE     0xEC
                    173: #define CL64xx_EXTENSION_DISABLE_VALUE    0xCE
                    174: #define CL64xx_TRISTATE_CONTROL_REG       0xA1
                    175: 
                    176: #define CL6340_ENABLE_READBACK_REGISTER   0xE0
                    177: #define CL6340_ENABLE_READBACK_ALLSEL_VALUE 0xF0
                    178: #define CL6340_ENABLE_READBACK_OFF_VALUE  0x00
                    179: #define CL6340_IDENTIFICATION_REGISTER    0xE9     
                    180: //
                    181: // Values for Attribute Controller Index register to turn video off
                    182: // and on, by setting bit 5 to 0 (off) or 1 (on).
                    183: //
                    184: 
                    185: #define VIDEO_DISABLE 0
                    186: #define VIDEO_ENABLE  0x20
                    187: 
                    188: // Masks to keep only the significant bits of the Graphics Controller and
                    189: // Sequencer Address registers. Masking is necessary because some VGAs, such
                    190: // as S3-based ones, don't return unused bits set to 0, and some SVGAs use
                    191: // these bits if extensions are enabled.
                    192: //
                    193: 
                    194: #define GRAPH_ADDR_MASK 0x0F
                    195: #define SEQ_ADDR_MASK   0x07
                    196: 
                    197: //
                    198: // Mask used to toggle Chain4 bit in the Sequencer's Memory Mode register.
                    199: //
                    200: 
                    201: #define CHAIN4_MASK 0x08
                    202: 
                    203: //
                    204: // Value written to the Read Map register when identifying the existence of
                    205: // a VGA in VgaInitialize. This value must be different from the final test
                    206: // value written to the Bit Mask in that routine.
                    207: //
                    208: 
                    209: #define READ_MAP_TEST_SETTING 0x03
                    210: 
                    211: //
                    212: // Default text mode setting for various registers, used to restore their
                    213: // states if VGA detection fails after they've been modified.
                    214: //
                    215: 
                    216: #define MEMORY_MODE_TEXT_DEFAULT 0x02
                    217: #define BIT_MASK_DEFAULT 0xFF
                    218: #define READ_MAP_DEFAULT 0x00
                    219: 
                    220: 
                    221: //
                    222: // Palette-related info.
                    223: //
                    224: 
                    225: //
                    226: // Highest valid DAC color register index.
                    227: //
                    228: 
                    229: #define VIDEO_MAX_COLOR_REGISTER  0xFF
                    230: 
                    231: //
                    232: // Highest valid palette register index
                    233: //
                    234: 
                    235: #define VIDEO_MAX_PALETTE_REGISTER 0x0F
                    236: 
                    237: 
                    238: //
                    239: // Indices for type of memory mapping; used in ModesVGA[], must match
                    240: // MemoryMap[].
                    241: //
                    242: 
                    243: typedef enum _VIDEO_MEMORY_MAP {
                    244:     MemMap_Mono,
                    245:     MemMap_CGA,
                    246:     MemMap_VGA
                    247: } VIDEO_MEMORY_MAP, *PVIDEO_MEMORY_MAP;
                    248: 
                    249: //
                    250: // For a mode, the type of banking supported. Controls the information
                    251: // returned in VIDEO_BANK_SELECT. PlanarHCBanking includes NormalBanking.
                    252: //
                    253: 
                    254: typedef enum _BANK_TYPE {
                    255:     NoBanking = 0,
                    256:     NormalBanking,
                    257:     PlanarHCBanking
                    258: } BANK_TYPE, *PBANK_TYPE;
                    259: 
                    260: 
                    261: #define  CL6410   0x0001
                    262: #define  CL6420   0x0002
                    263: #define  CL542x   0x0004
                    264: 
                    265: // bitfields for the DisplayType 
                    266: #define  crt      0x0001
                    267: #define  panel    0x0002
                    268: #define  simulscan 0x0004        // this means both, but is unused for now.
                    269: 
                    270: typedef struct {
                    271:     PUSHORT pCL6410_crt;
                    272:     PUSHORT pCL6410_panel;
                    273:     PUSHORT pCL6420_crt;
                    274:     PUSHORT pCL6420_panel;
                    275:     PUSHORT pCL542x;
                    276:     PUSHORT pStretchScan;
                    277: } CLCMD, *PCLCMD;
                    278: 
                    279: typedef struct {
                    280:     USHORT BiosModeCL6410;       // bios modes are different across the 
                    281:     USHORT BiosModeCL6420;       // products. that's why we need multiple
                    282:     USHORT BiosModeCL542x;       // values.
                    283:     USHORT Montype;              // montype for this mode.
                    284: } CLMODE, *PCLMODE;
                    285: 
                    286: 
                    287: //
                    288: // Structure used to describe each video mode in ModesVGA[].
                    289: //
                    290: 
                    291: typedef struct {
                    292:     USHORT  fbType; // color or monochrome, text or graphics, via
                    293:                     //  VIDEO_MODE_COLOR and VIDEO_MODE_GRAPHICS
                    294:     USHORT  numPlanes;    // # of video memory planes
                    295:     USHORT  bitsPerPlane; // # of bits of color in each plane
                    296:     SHORT   col;    // # of text columns across screen with default font
                    297:     SHORT   row;    // # of text rows down screen with default font
                    298:     USHORT  hres;   // # of pixels across screen
                    299:     USHORT  vres;   // # of scan lines down screen
                    300:     USHORT  wbytes; // # of bytes from start of one scan line to start of next
                    301:     ULONG   sbytes; // total size of addressable display memory in bytes
                    302:     ULONG   Frequency;         // Vertical Frequency
                    303:     ULONG   Interlaced;        // Determines if the mode is interlaced or not
                    304:     ULONG   MonitorType;       // Sets the determined frequency in an int10
                    305:     BANK_TYPE banktype;        // NoBanking, NormalBanking, PlanarHCBanking
                    306:     VIDEO_MEMORY_MAP   MemMap; // index from VIDEO_MEMORY_MAP of memory
                    307:                                //  mapping used by this mode
                    308:     USHORT     ChipType;       // flags that say which chipset runs this mode
                    309:     USHORT     DisplayType;    // display type this mode runs on(crt or panel)
                    310:     BOOLEAN    ValidMode;      // TRUE if mode valid, FALSE if not
                    311: 
                    312:     CLMODE     BiosModes;
                    313:                               
                    314: //
                    315: // the mode will be TRUE if there is enough video memory to support the 
                    316: // mode, and the display type(it could be a panel), will support the mode.
                    317: // PANELS only support 640x480 for now. 
                    318: //
                    319:     CLCMD CmdStrings;   // pointer to array of register-setting commands to 
                    320:                         //  set up mode
                    321: } VIDEOMODE, *PVIDEOMODE;
                    322: 
                    323: //
                    324: // Mode into which to put the VGA before starting a VDM, so it's a plain
                    325: // vanilla VGA.  (This is the mode's index in ModesVGA[], currently standard
                    326: // 80x25 text mode.)
                    327: //
                    328: 
                    329: #define DEFAULT_MODE 0
                    330: 
                    331: 
                    332: //
                    333: // Info used by the Validator functions and save/restore code.
                    334: // Structure used to trap register accesses that must be done atomically.
                    335: //
                    336: 
                    337: #define VGA_MAX_VALIDATOR_DATA             100
                    338: 
                    339: #define VGA_VALIDATOR_UCHAR_ACCESS   1
                    340: #define VGA_VALIDATOR_USHORT_ACCESS  2
                    341: #define VGA_VALIDATOR_ULONG_ACCESS   3
                    342: 
                    343: typedef struct _VGA_VALIDATOR_DATA {
                    344:    ULONG Port;
                    345:    UCHAR AccessType;
                    346:    ULONG Data;
                    347: } VGA_VALIDATOR_DATA, *PVGA_VALIDATOR_DATA;
                    348: 
                    349: //
                    350: // Number of bytes to save in each plane.
                    351: //
                    352: 
                    353: #define VGA_PLANE_SIZE 0x10000
                    354:  
                    355: //
                    356: // Number of each type of indexed register in a standard VGA, used by
                    357: // validator and state save/restore functions.
                    358: //
                    359: // Note: VDMs currently only support basic VGAs only.
                    360: //
                    361: 
                    362: #define VGA_NUM_SEQUENCER_PORTS     5
                    363: #define VGA_NUM_CRTC_PORTS         25
                    364: #define VGA_NUM_GRAPH_CONT_PORTS    9
                    365: #define VGA_NUM_ATTRIB_CONT_PORTS  21
                    366: #define VGA_NUM_DAC_ENTRIES       256
                    367: 
                    368: #ifdef EXTENDED_REGISTER_SAVE_RESTORE
                    369: 
                    370: //
                    371: // Indices to start save/restore in extension registers:
                    372: // For both chip types
                    373: 
                    374: #define CL64xx_GRAPH_EXT_START          0x0b  // does not include ext. enable
                    375: #define CL64xx_GRAPH_EXT_END            0xFF
                    376: 
                    377: #define CL542x_GRAPH_EXT_START          0x09
                    378: #define CL542x_GRAPH_EXT_END            0x39
                    379: #define CL542x_SEQUENCER_EXT_START      0x07  // does not include ext. enable
                    380: #define CL542x_SEQUENCER_EXT_END        0x1F
                    381: #define CL542x_CRTC_EXT_START           0x19
                    382: #define CL542x_CRTC_EXT_END             0x1B
                    383: 
                    384: //
                    385: // Number of extended regs for both chip types
                    386: //
                    387: 
                    388: #define CL64xx_NUM_GRAPH_EXT_PORTS     (CL64xx_GRAPH_EXT_END - CL64xx_GRAPH_EXT_START + 1)
                    389: 
                    390: #define CL542x_NUM_GRAPH_EXT_PORTS     (CL542x_GRAPH_EXT_END - CL542x_GRAPH_EXT_START + 1)
                    391: #define CL542x_NUM_SEQUENCER_EXT_PORTS (CL542x_SEQUENCER_EXT_END - CL542x_SEQUENCER_EXT_START + 1)
                    392: #define CL542x_NUM_CRTC_EXT_PORTS      (CL542x_CRTC_EXT_END - CL542x_CRTC_EXT_START + 1) 
                    393: 
                    394: //
                    395: // set values for save/restore area based on largest value for a chipset.
                    396: //
                    397: 
                    398: #define EXT_NUM_GRAPH_CONT_PORTS    ((CL64xx_NUM_GRAPH_EXT_PORTS >   \
                    399:                                      CL542x_NUM_GRAPH_EXT_PORTS) ?   \
                    400:                                      CL64xx_NUM_GRAPH_EXT_PORTS :    \
                    401:                                      CL542x_NUM_GRAPH_EXT_PORTS)
                    402: #define EXT_NUM_SEQUENCER_PORTS     CL542x_NUM_SEQUENCER_EXT_PORTS
                    403: #define EXT_NUM_CRTC_PORTS          CL542x_NUM_CRTC_EXT_PORTS
                    404: #define EXT_NUM_ATTRIB_CONT_PORTS   0
                    405: #define EXT_NUM_DAC_ENTRIES         0
                    406: 
                    407: #else 
                    408: 
                    409: #define EXT_NUM_GRAPH_CONT_PORTS    0
                    410: #define EXT_NUM_SEQUENCER_PORTS     0
                    411: #define EXT_NUM_CRTC_PORTS          0
                    412: #define EXT_NUM_ATTRIB_CONT_PORTS   0
                    413: #define EXT_NUM_DAC_ENTRIES         0
                    414: 
                    415: #endif        
                    416: 
                    417: //
                    418: // These constants determine the offsets within the
                    419: // VIDEO_HARDWARE_STATE_HEADER structure that are used to save and
                    420: // restore the VGA's state.
                    421: //
                    422: 
                    423: #define VGA_HARDWARE_STATE_SIZE sizeof(VIDEO_HARDWARE_STATE_HEADER)
                    424: 
                    425: #define VGA_BASIC_SEQUENCER_OFFSET (VGA_HARDWARE_STATE_SIZE + 0)
                    426: #define VGA_BASIC_CRTC_OFFSET (VGA_BASIC_SEQUENCER_OFFSET + \
                    427:          VGA_NUM_SEQUENCER_PORTS)
                    428: #define VGA_BASIC_GRAPH_CONT_OFFSET (VGA_BASIC_CRTC_OFFSET + \
                    429:          VGA_NUM_CRTC_PORTS)
                    430: #define VGA_BASIC_ATTRIB_CONT_OFFSET (VGA_BASIC_GRAPH_CONT_OFFSET + \
                    431:          VGA_NUM_GRAPH_CONT_PORTS)
                    432: #define VGA_BASIC_DAC_OFFSET (VGA_BASIC_ATTRIB_CONT_OFFSET + \
                    433:          VGA_NUM_ATTRIB_CONT_PORTS)
                    434: #define VGA_BASIC_LATCHES_OFFSET (VGA_BASIC_DAC_OFFSET + \
                    435:          (3 * VGA_NUM_DAC_ENTRIES))
                    436: 
                    437: #define VGA_EXT_SEQUENCER_OFFSET (VGA_BASIC_LATCHES_OFFSET + 4)
                    438: #define VGA_EXT_CRTC_OFFSET (VGA_EXT_SEQUENCER_OFFSET + \
                    439:          EXT_NUM_SEQUENCER_PORTS)
                    440: #define VGA_EXT_GRAPH_CONT_OFFSET (VGA_EXT_CRTC_OFFSET + \
                    441:          EXT_NUM_CRTC_PORTS)
                    442: #define VGA_EXT_ATTRIB_CONT_OFFSET (VGA_EXT_GRAPH_CONT_OFFSET +\
                    443:          EXT_NUM_GRAPH_CONT_PORTS)
                    444: #define VGA_EXT_DAC_OFFSET (VGA_EXT_ATTRIB_CONT_OFFSET + \
                    445:          EXT_NUM_ATTRIB_CONT_PORTS)
                    446: 
                    447: #define VGA_VALIDATOR_OFFSET (VGA_EXT_DAC_OFFSET + 4 * EXT_NUM_DAC_ENTRIES)
                    448: 
                    449: #define VGA_VALIDATOR_AREA_SIZE  sizeof (ULONG) + (VGA_MAX_VALIDATOR_DATA * \
                    450:                                  sizeof (VGA_VALIDATOR_DATA)) +             \
                    451:                                  sizeof (ULONG) +                           \
                    452:                                  sizeof (ULONG) +                           \
                    453:                                  sizeof (PVIDEO_ACCESS_RANGE)
                    454: 
                    455: #define VGA_MISC_DATA_AREA_OFFSET VGA_VALIDATOR_OFFSET + VGA_VALIDATOR_AREA_SIZE
                    456: 
                    457: #define VGA_MISC_DATA_AREA_SIZE  0
                    458: 
                    459: #define VGA_PLANE_0_OFFSET VGA_MISC_DATA_AREA_OFFSET + VGA_MISC_DATA_AREA_SIZE
                    460: 
                    461: #define VGA_PLANE_1_OFFSET VGA_PLANE_0_OFFSET + VGA_PLANE_SIZE
                    462: #define VGA_PLANE_2_OFFSET VGA_PLANE_1_OFFSET + VGA_PLANE_SIZE
                    463: #define VGA_PLANE_3_OFFSET VGA_PLANE_2_OFFSET + VGA_PLANE_SIZE
                    464: 
                    465: //
                    466: // Space needed to store all state data.
                    467: //
                    468: 
                    469: #define VGA_TOTAL_STATE_SIZE VGA_PLANE_3_OFFSET + VGA_PLANE_SIZE
                    470: 
                    471: 
                    472: //
                    473: // Device extension for the driver object.  This data is only used
                    474: // locally, so this structure can be added to as needed.
                    475: //
                    476: 
                    477: typedef struct _HW_DEVICE_EXTENSION {
                    478: 
                    479:     PUCHAR  IOAddress;            // base I/O address of VGA ports
                    480: //    PVOID   VideoMemoryAddress;   // base virtual memory address of VGA memory
                    481:     PUCHAR  VideoMemoryAddress;   // base virtual memory address of VGA memory
                    482:     ULONG   NumAvailableModes;    // number of available modes this session
                    483:     ULONG   ModeIndex;            // index of current mode in ModesVGA[]
                    484:     PVIDEOMODE  CurrentMode;      // pointer to VIDEOMODE structure for
                    485:                                   // current mode
                    486: 
                    487:     USHORT  FontPelColumns;          // Width of the font in pels
                    488:     USHORT  FontPelRows;          // height of the font in pels
                    489: 
                    490:     VIDEO_CURSOR_POSITION CursorPosition;  // current cursor position
                    491: 
                    492:                                  
                    493:     UCHAR CursorEnable;           // whether cursor is enabled or not
                    494:     UCHAR CursorTopScanLine;      // Cursor Start register setting (top scan)
                    495:     UCHAR CursorBottomScanLine;   // Cursor End register setting (bottom scan)
                    496: // add HW cursor data here
                    497:     PHYSICAL_ADDRESS PhysicalVideoMemoryBase; // physical memory address and
                    498:     ULONG PhysicalVideoMemoryLength;          // length of display memory
                    499:     PHYSICAL_ADDRESS PhysicalFrameBase;   // physical memory address and
                    500:     ULONG PhysicalFrameLength;            // length of display memory for the
                    501:                                           // current mode.
                    502: 
                    503:     USHORT ChipType;                      // CL6410, CL6420, or CL542x
                    504:     USHORT ChipRevision;                  // chip revision value
                    505:     USHORT DisplayType;                   // crt, panel or simulscan
                    506:     ULONG AdapterMemorySize;              // amount of installed video ram
                    507: 
                    508:     //
                    509:     // These 4 fields must be at the end of the device extension and must be
                    510:     // kept in this order since this data will be copied to and from the save
                    511:     // state buffer that is passed to and from the VDM.
                    512:     //
                    513: 
                    514:     ULONG TrappedValidatorCount;   // number of entries in the Trapped
                    515:                                    // validator data Array.
                    516:     VGA_VALIDATOR_DATA TrappedValidatorData[VGA_MAX_VALIDATOR_DATA];
                    517:                                    // Data trapped by the validator routines
                    518:                                    // but not yet played back into the VGA
                    519:                                    // register.
                    520: 
                    521:     ULONG SequencerAddressValue;   // Determines if the Sequencer Address Port
                    522:                                    // is currently selecting the SyncReset data
                    523:                                    // register.
                    524: 
                    525:     ULONG CurrentNumVdmAccessRanges;           // Number of access ranges in
                    526:                                                // the access range array pointed
                    527:                                                // to by the next field
                    528:     PVIDEO_ACCESS_RANGE CurrentVdmAccessRange; // Access range currently
                    529:                                                // associated to the VDM
                    530: 
                    531: } HW_DEVICE_EXTENSION, *PHW_DEVICE_EXTENSION;
                    532: 
                    533: 
                    534: //
                    535: // Function prototypes.
                    536: //
                    537: 
                    538: //
                    539: // Entry points for the VGA validator. Used in VgaEmulatorAccessEntries[].
                    540: //
                    541: 
                    542: VP_STATUS
                    543: VgaValidatorUcharEntry (
                    544:     ULONG Context,
                    545:     ULONG Port,
                    546:     UCHAR AccessMode,
                    547:     PUCHAR Data
                    548:     );
                    549: 
                    550: VP_STATUS
                    551: VgaValidatorUshortEntry (
                    552:     ULONG Context,
                    553:     ULONG Port,
                    554:     UCHAR AccessMode,
                    555:     PUSHORT Data
                    556:     );
                    557: 
                    558: VP_STATUS
                    559: VgaValidatorUlongEntry (
                    560:     ULONG Context,
                    561:     ULONG Port,
                    562:     UCHAR AccessMode,
                    563:     PULONG Data
                    564:     );
                    565: 
                    566: BOOLEAN
                    567: VgaPlaybackValidatorData (
                    568:     PVOID Context
                    569:     );
                    570: 
                    571: //
                    572: // Bank switch code start and end labels, define in HARDWARE.ASM
                    573: //
                    574: // two version for Cirrus Logic products
                    575: //
                    576: 
                    577: extern UCHAR CL64xxBankSwitchStart;
                    578: extern UCHAR CL64xxBankSwitchEnd;
                    579: extern UCHAR CL64xxPlanarHCBankSwitchStart;
                    580: extern UCHAR CL64xxPlanarHCBankSwitchEnd;
                    581: extern UCHAR CL64xxEnablePlanarHCStart;
                    582: extern UCHAR CL64xxEnablePlanarHCEnd;
                    583: extern UCHAR CL64xxDisablePlanarHCStart;
                    584: extern UCHAR CL64xxDisablePlanarHCEnd;
                    585: 
                    586: extern UCHAR CL542xBankSwitchStart;
                    587: extern UCHAR CL542xBankSwitchEnd;
                    588: extern UCHAR CL542xPlanarHCBankSwitchStart;
                    589: extern UCHAR CL542xPlanarHCBankSwitchEnd;
                    590: extern UCHAR CL542xEnablePlanarHCStart;
                    591: extern UCHAR CL542xEnablePlanarHCEnd;
                    592: extern UCHAR CL542xDisablePlanarHCStart;
                    593: extern UCHAR CL542xDisablePlanarHCEnd;
                    594: 
                    595: //
                    596: // Vga init scripts for font loading
                    597: //
                    598: 
                    599: extern USHORT EnableA000Data[];
                    600: extern USHORT DisableA000Color[];
                    601: 
                    602: //
                    603: // Mode Information
                    604: //
                    605: 
                    606: extern ULONG NumVideoModes;
                    607: extern VIDEOMODE ModesVGA[];

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.