home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ddkx86v1.zip / DDKX86 / H / SVGADEFS.H < prev    next >
C/C++ Source or Header  |  1995-04-14  |  56KB  |  1,278 lines

  1. /*DDK*************************************************************************/
  2. /*                                                                           */
  3. /* COPYRIGHT (C) Microsoft Corporation, 1989                                 */
  4. /* COPYRIGHT    Copyright (C) 1995 IBM Corporation                           */
  5. /*                                                                           */
  6. /*    The following IBM OS/2 WARP source code is provided to you solely for  */
  7. /*    the purpose of assisting you in your development of OS/2 WARP device   */
  8. /*    drivers. You may use this code in accordance with the IBM License      */
  9. /*    Agreement provided in the IBM Device Driver Source Kit for OS/2. This  */
  10. /*    Copyright statement may not be removed.                                */
  11. /*                                                                           */
  12. /*****************************************************************************/
  13. /*****************************************************************************
  14.  *
  15.  * SOURCE FILE NAME = SVGADEFS.H
  16.  *
  17.  * DESCRIPTIVE NAME =
  18.  *
  19.  *
  20.  * VERSION = V2.0
  21.  *
  22.  * DATE
  23.  *
  24.  * DESCRIPTION  Contains SVGA definitions.
  25.  *
  26.  * FUNCTIONS
  27.  *
  28.  * NOTES        When included into VVID sources, #ifdef SVGA
  29.  *              must be used before #include!
  30.  *
  31.  * STRUCTURES
  32.  *
  33.  * EXTERNAL REFERENCES
  34.  *
  35.  * EXTERNAL FUNCTIONS
  36.  *
  37. */
  38.  
  39. #define INCL_DOSERRORS
  40. #define MAX_LOCKUNLOCKCMD       40                              /*          */
  41. #define MAX_CLEANDATA          200      /* Includes DACs */     /*@V3.0YEE01*/
  42. #define MAX_SETBANK_CMD         25                              /*          */
  43. #define MAX_GETBANK_CMD         20                              /*          */
  44. #define MAX_MODESET_CMD         84                              /*          */
  45.  
  46.  
  47. #define DEFAULT_ADAPTER       (-1)
  48. #define UNKNOWN_ADAPTER         0
  49. #define VIDEO7_ADAPTER          1       /* bugbug line up with cleanups! */
  50. #define TRIDENT_ADAPTER         2
  51. #define TSENG_ADAPTER           3
  52. #define WESTERNDIG_ADAPTER      4
  53. #define ATI_ADAPTER             5
  54. #define IBM_ADAPTER             6
  55. #define CIRRUS_ADAPTER          7
  56. #define S3_ADAPTER              8
  57. #define CHIPS_ADAPTER           9                      /*            */
  58. #define WEITEK_ADAPTER          10                     /*            */
  59. #define NUMBER9_ADAPTER         11                     /*            */
  60. #define GENERIC_PCISVGA_ADAPTER 12                      //@senja
  61.  /* remember to update SVGA_LASTADAPTER when adding new adapter support */
  62.  
  63. #define SVGA_FIRSTADAPTER       VIDEO7_ADAPTER         /*            */
  64. #define SVGA_LASTADAPTER        GENERIC_PCISVGA_ADAPTER
  65.  
  66. /*            start */
  67. #ifdef FAMILY2
  68.   #define ORCHID_MC_ADAPTER     2       /*            */
  69.   #define ORCHID_MC_ID          0x86    /*            */
  70. #endif
  71.  
  72. /*
  73. ** DAC types
  74. */
  75.  
  76. #define VGA_DAC           0                                     /*          */
  77. #define DEFAULT_DAC       VGA_DAC                               /*          */
  78. #define HICOLOR_DAC       1      /* Unidentified */             /*          */
  79. #define WINBOND_DAC       HICOLOR_DAC                           /*          */
  80. #define BT485_DAC         2      /* Brooktree 485 */            /*          */
  81. #define Weitek_BT485DAC   3      /* BT485 used by Weitek      */
  82. #define SC15025_DAC       4      /* SC15025                   */
  83. #define SierraDAC         SC15025_DAC /* Use more specific name! */
  84. #define ATT490_DAC        5
  85. #define ATTDAC            ATT490_DAC /* Use more specific name! */
  86. #define MU9C1880_DAC      6      /* MU9C4870, MU9C1880, SS2410*/
  87. #define MU9C4870_DAC      MU9C1880_DAC                          /*          */
  88.  
  89. #define TRUECOLOR_DAC     7                                     /*          */
  90. #define IMSG173_DAC       8      /*These DACS identified, but not programmed*/
  91. #define InmosDAC          IMSG173_DAC /* Use more specific name! */
  92. #define CH8398_DAC        9
  93. #define ChrontelDAC       CH8398_DAC /* Use more specific name! */
  94. #define CIRRUS_DAC       10
  95. #define ICS5341_DAC      11
  96. #define ICS5342_DAC      ICS5341_DAC                            /*          */
  97. #define SGS1702_DAC      12
  98. #define SGSThomsonDAC16  SGS1702_DAC /* Use more specific name! */
  99. #define SGS1703_DAC      13                                     /*          */
  100. #define MU9C4910_DAC     14      /* MU9C4910 (blue byte first) */
  101.                                  /*  note that the MU9C1880 is also true color, but */
  102.                                  /*       it does not need to be identified because */
  103.                                  /*       behaves like the others in its group      */
  104. #define MusicDAC16RGB    MU9C4910_DAC /* Use more specific name! */
  105. #define ATI68830_DAC     15      /* ATI 68830 & compatible              */
  106. #define S3SDAC_DAC       16      /* S3 SDAC                             */
  107. #define ATT498_DAC       17      /* AT&T 498 CLOCKDAC                   */
  108. #define SGS1700_DAC      18      /* SGS 1700 DAC                        */
  109. #define TLC34075_DAC     19      /* Texas Instruments TLC34075*/
  110. #define ATI68875_DAC     TLC34075_DAC
  111. #define BT476_DAC        20      /* Brooktree 476/478                   */
  112. #define BT478_DAC        BT476_DAC
  113. #define BT481_DAC        21      /* Brooktree 481/482                   */
  114. #define BT482_DAC        BT481_DAC
  115. #define ATI68860_DAC     22      /* ATI 68860/68880                     */
  116. #define MU9CBUG_DAC      23
  117. #define CH8391_DAC       24
  118. #define W82C490_DAC      25
  119. #define ATT491_DAC       26
  120. #define ATT492_DAC       27
  121. #define ATT493_DAC       28
  122. #define ATT497_DAC       29
  123. #define WD90C24_DAC      30
  124. #define MU9C9910_DAC     31      /* (blue byte first) */
  125. #define ATT409_DAC       32
  126. #define TI3025_DAC       33      /* TI Viewpoint 3025 CLOCKDAC  @V3.0YEE01*/
  127. #define MAX_DAC          34                                   /*@V3.0YEE01*/
  128.  
  129. #define VGADAC_NAME     "VGA_RGB"                             /*          */
  130. #define HICOLOR_NAME    "HICOLOR_RGB"                         /*          */
  131. #define BT485_NAME      "BT485_RGB"                           /*          */
  132. #define VIPER_NAME      "BT485_RGB"
  133. #define SC15025_NAME    "SC15025_RGB"
  134. #define ATT490_NAME     "ATT20C490_RGB"                       /*          */
  135. #define MU9C1880_NAME   "MU9C1880_BGR"
  136. #define TRUECOLOR_NAME  "TRUECOLOR_RGB"                       /*          */
  137. #define IMSG173_NAME    "IMSG173_RGB"
  138. #define CH8398_NAME     "CH8398_RGB"
  139. #define CIRRUS_NAME     "CIRRUS_RGB"
  140. #define ICS5341_NAME    "ICS5341_RGB"
  141. #define SGS1702_NAME    "SGS1702_RGB"
  142. #define SGS1703_NAME    "SGS1703_RGB"                         /*          */
  143. #define MU9C4910_NAME   "MU9C4910_RGB"                        /*            was BGR */
  144. #define ATI68830_NAME   "ATI68830_RGB"                        /*          */
  145. #define S3SDAC_NAME     "S3SDAC_RGB"                          /*          */
  146. #define ATT498_NAME     "ATT20C498_RGB"                       /*          */
  147. #define SGS1700_NAME    "SGS1700_RGB"                         /*          */
  148. #define TLC34075_NAME   "TLC34075_RGB"                        /*          */
  149. #define ATI68875_NAME   "ATI68875_RGB"                        /*          */
  150. #define BT476_NAME      "BT476_RGB"                           /*          */
  151. #define BT481_NAME      "BT481_RGB"                           /*          */
  152. #define ATI68860_NAME   "ATI68860_RGB"                        /*          */
  153. #define MU9CBUG_NAME    "MU9C1880BUG_BGR"                     /*          */
  154. #define CH8391_NAME     "CH8391_RGB"                          /*          */
  155. #define W82C490_NAME    "W82C490_RGB"                         /*          */
  156. #define ATT491_NAME     "ATT20C491_RGB"                       /*          */
  157. #define ATT492_NAME     "ATT20C492_RGB"                       /*          */
  158. #define ATT493_NAME     "ATT20C493_RGB"                       /*          */
  159. #define ATT497_NAME     "ATT20C497_RGB"                       /*          */
  160. #define WD90C24_NAME    "WD90C24_RGB"                         /*          */
  161. #define MU9C9910_NAME   "MU9C9910_RGB"                        /*          */
  162. #define ATT409_NAME     "ATT20C409_RGB"                       /*          */
  163. #define TI3025_NAME     "TVP3025_RGB" /* TI Viewpoint 3025 DAC  @V3.0YEE01*/
  164.  
  165. /* NOINC */
  166. typedef struct _DACINFO {       /* dac */
  167.   USHORT        DACFamily;
  168.   USHORT        DACType;
  169. } DACINFO;
  170.  
  171. /*
  172. ** flag values for fPortFlags in TRAPREGINFO              
  173. */
  174. #define BYTE_IOPORT        0x001
  175. #define WORD_IOPORT        0x002
  176. #define DWORD_IOPORT       0x004
  177. #define BYTE_MMIOPORT      0x008
  178. #define WORD_MMIOPORT      0x010
  179. #define DWORD_MMIOPORT     0x020
  180. #define INDEXED            0x040
  181. #define ACCEL              0x080
  182. #define RESET_PORT         0x100
  183. #define READ_ONLY          0x200
  184. #define WRITE_ONLY         0x400
  185. #define READ_WRITE         0x800
  186.  
  187. #define MASK_SIZE             32
  188.  
  189. typedef struct _TRAPREGINFO {   /* trp */
  190. #ifdef DEVELOP
  191.         ULONG   cb;                     /* size of the structure            */
  192. #endif
  193.         ULONG   ulAddressPort;          /* Address Port                     */
  194.         ULONG   ulDataPort;             /* Data Port                        */
  195.         USHORT  fPortFlags;             /* port type                        */
  196.         USHORT  usIndex;                /* value in index port              */
  197.         ULONG   ulIndexMask;            /* index mask                       */
  198.         ULONG   ulDataMask;             /* data mask                        */
  199.         ULONG   ulResetOneMask;         /*                                  */
  200.         ULONG   ulResetZeroMask;         /*                                 */
  201.         BYTE    abIndexList[MASK_SIZE]; /* bit mask of trapped indexed ports*/
  202.         BYTE    abUpdateList[MASK_SIZE];/* bit mask of updated port indices */
  203.         PVOID   aTrapRegData;           /* trap registers data area         */
  204. } TRAPREGINFO;
  205. typedef TRAPREGINFO FAR *PTRAPREGINFO;
  206.  
  207. typedef ULONG       MODEID;
  208. typedef MODEID FAR *PMODEID;
  209.  
  210.                                         /*             definition of         */
  211.                                         /* parameter packet of PMIREQUEST fx */
  212.                                         /* PMIRequest_UpdateModeTrapData()   */
  213. typedef struct _UPDATETRAPDATA {   /* upd */
  214.    PTRAPREGINFO  asTrapInfo;
  215.    MODEID        miModeId;
  216. } UPDATETRAPDATA;
  217. typedef UPDATETRAPDATA  *PUPDATETRAPDATA;
  218.  
  219. /* INC */
  220.  
  221. #define WEITEK_P9000_INCREMENT  0x0040 //Spacing between potential bases.
  222. #define WEITEK_P9000_REGISTERS  0x0010 //Base address offset for registers.
  223. #define WEITEK_P9000_VRAM       0x0020 //Base address offset for VRAM.
  224. #define WEITEK_P9000_SYSCONFIG  0x0004 //Offset for config reg
  225. #define WEITEK_P9000_INTERRUPT  0x0008 //Offset for interrupt reg
  226. #define WEITEK_P9000_ENABLE     0x000c //Offset for interrupt enable reg
  227. #define WEITEK_P9000_MEMCONFIG  0x0184 //Offset for memory config reg
  228. #define WEITEK_P9000_REGLENGTH  0x2000 //Length for register addressability
  229. /*            end   */
  230.  
  231. #define UNKNOWN_CHIP            0
  232.  
  233. #define VIDEO7_HT205_CHIP       1
  234. #define VIDEO7_HT208_CHIP       2
  235. #define VIDEO7_HT209_CHIP       3
  236. #define MAX_VIDEO7_CHIP         VIDEO7_HT209_CHIP               /*          */
  237.  
  238. #define VIDEO7_HT205_NAME       "HT205"                         /*          */
  239. #define VIDEO7_HT208_NAME       "HT208"                         /*          */
  240. #define VIDEO7_HT209_NAME       "HT209"                         /*          */
  241.  
  242. #define TRIDENT_8800_CHIP       1
  243. #define TRIDENT_8900_CHIP       2
  244. #define MAX_TRIDENT_CHIP        TRIDENT_8900_CHIP               /*          */
  245.  
  246. #define TRIDENT_8800_NAME       "TR8800"                        /*          */
  247. #define TRIDENT_8900_NAME       "TR8900"                        /*          */
  248.  
  249.  
  250. #define TSENG_ET3000_CHIP       1
  251. #define TSENG_ET4000_CHIP       2
  252. #define TSENG_ET4000W32_CHIP    3    /* w32                             */
  253. #define TSENG_ET4000W32I_CHIP   4    /* w32i (level a)                  */
  254. #define TSENG_ET4000W32IB_CHIP  5    /* w32i level b                    */
  255. #define TSENG_ET4000W32IC_CHIP  6    /* w32i level c                    */
  256. #define TSENG_ET4000W32PA_CHIP  7    /* w32p level a                    */
  257. #define TSENG_ET4000W32PB_CHIP  8    /* w32p level b                    */
  258. #define TSENG_ET4000W32PC_CHIP  9    /* w32p level c                    */
  259. #define TSENG_ET4000W32ID_CHIP 10    /* w32i level d                    */
  260. #define TSENG_ET4000W32PD_CHIP 11    /* w32p level d                    */
  261. #define TSENG_ET4000W32PX_CHIP 12    /* all others                      */
  262. #define MAX_TSENG_CHIP         12
  263.  
  264. #define TSENG_ET3000_NAME       "ET3000"                        /*          */
  265. #define TSENG_ET4000_NAME       "ET4000"                        /*          */
  266. #define TSENG_ET4000W32_NAME    "ET4000W32"                     /*          */
  267. #define TSENG_ET4000W32I_NAME   "ET4000W32IREVA"                /*          */
  268. #define TSENG_ET4000W32IB_NAME  "ET4000W32IREVB"                /*          */
  269. #define TSENG_ET4000W32IC_NAME  "ET4000W32IREVC"                /*          */
  270. #define TSENG_ET4000W32PA_NAME  "ET4000W32PREVA"                /*          */
  271. #define TSENG_ET4000W32PB_NAME  "ET4000W32PREVB"                /*          */
  272. #define TSENG_ET4000W32PC_NAME  "ET4000W32PREVC"                /*          */
  273. #define TSENG_ET4000W32ID_NAME  "ET4000W32IREVD"                /*          */
  274. #define TSENG_ET4000W32PD_NAME  "ET4000W32PREVD"                /*          */
  275. #define TSENG_ET4000W32PX_NAME  "ET4000W32PREVC_COMPATABLE"     /*          */
  276.  
  277. #define WESTERNDIG_PVGA1A_CHIP  1
  278. #define WESTERNDIG_WD9000_CHIP  2 /* PVGA1B */
  279. #define WESTERNDIG_WD9011_CHIP  3 /* PVGA1C */
  280. #define WESTERNDIG_WD9030_CHIP  4 /* PVGA1D */
  281. #define WESTERNDIG_WD9026_CHIP  5 /* PVGA1F */                  /*          */
  282. #define WESTERNDIG_WD9027_CHIP  6                               /*          */
  283. #define WESTERNDIG_WD9031_CHIP  7 /* PVGA1DW */                 /*          */
  284. #define WESTERNDIG_WD9024_CHIP  8                               /*          */
  285. #define WESTERNDIG_WD9033_CHIP  9 /* PVGA2DW */                 /*          */
  286. #define MAX_WESTERNDIG_CHIP     WESTERNDIG_WD9033_CHIP          /*          */
  287.  
  288. #define WESTERNDIG_PVGA1A_NAME  "PVGA1A"                        /*          */
  289. #define WESTERNDIG_WD9000_NAME  "PVGA1B"                        /*          */
  290. #define WESTERNDIG_WD9011_NAME  "PVGA1C"                        /*          */
  291. #define WESTERNDIG_WD9030_NAME  "PVGA1D"                        /*          */
  292. #define WESTERNDIG_WD9026_NAME  "WD90C26"                       /*          */
  293. #define WESTERNDIG_WD9027_NAME  "WD90C27"                       /*          */
  294. #define WESTERNDIG_WD9031_NAME  "WD90C31"                       /*          */
  295. #define WESTERNDIG_WD9024_NAME  "WD90C24"                       /*          */
  296. #define WESTERNDIG_WD9033_NAME  "WD90C33"                       /*          */
  297.  
  298. #define ATI_18800_CHIP          1 /*VGAWONDER*/
  299. #define ATI_28800_CHIP          2 /*VGAWONDER+/XL*/
  300. #define ATI_38800_CHIP          3 /*MACH8/GraphicsUltra*/       /*          */
  301. #define ATI_68800_CHIP          4 /*MACH32/GraphicsUltraPro*/   /*          */
  302. #define ATI_88800_CHIP          5 /*MACH64*/                    /*          */
  303. #define MAX_ATI_CHIP            ATI_88800_CHIP                  /*          */
  304.  
  305. #define ATI_18800_NAME          "ATI18800"                      /*          */
  306. #define ATI_28800_NAME          "ATI28800"                      /*          */
  307. #define ATI_38800_NAME          "ATI38800MACH8"                 /*          */
  308. #define ATI_68800_NAME          "ATI68800MACH32"                /*          */
  309. #define ATI_88800_NAME          "ATI88800MACH64"                /*          */
  310.  
  311. #define IBM_SVGA_CHIP           1
  312. #define MAX_IBM_CHIP            IBM_SVGA_CHIP                   /*          */
  313.  
  314. #define IBM_SVGA_NAME           "IBMSVGA"                       /*          */
  315.  
  316. #define CIRRUS_5420_CHIP        1                               /*          */
  317. #define CIRRUS_5422_CHIP        2
  318. #define CIRRUS_5424_CHIP        3
  319. #define CIRRUS_5426_CHIP        4
  320. #define CIRRUS_5428_CHIP        5                               /*          */
  321. #define CIRRUS_5429_CHIP        6                               /*          */
  322. #define CIRRUS_543X_CHIP        7                               /*          */
  323. #define CIRRUS_5434_CHIP        8                               /*          */
  324. #define MAX_CIRRUS_CHIP         CIRRUS_5434_CHIP                /*          */
  325.  
  326. #define CIRRUS_5420_NAME        "GD5420"                        /*          */
  327. #define CIRRUS_5422_NAME        "GD5422"                        /*          */
  328. #define CIRRUS_5424_NAME        "GD5424"                        /*          */
  329. #define CIRRUS_5426_NAME        "GD5426"                        /*          */
  330. #define CIRRUS_5428_NAME        "GD5428"                        /*          */
  331. #define CIRRUS_5429_NAME        "GD5429"                        /*          */
  332. #define CIRRUS_543X_NAME        "GD543X"                        /*          */
  333. #define CIRRUS_5434_NAME        "GD5434"                        /*          */
  334.  
  335. #define S3_86C805_CHIP          1           /* 801 or 805 */
  336. #define S3_86C928_CHIP          2
  337. #define S3_86C911_CHIP          3           /*            */
  338. #define S3_86C864_CHIP          4                               /*          */
  339. #define S3_86C964_CHIP          5                               /*          */
  340. #define MAX_S3_CHIP             S3_86C964_CHIP                  /*          */
  341.  
  342. #define S3_86C805_NAME          "S386C80X"                      /*          */
  343. #define S3_86C928_NAME          "S386C928"                      /*          */
  344. #define S3_86C911_NAME          "S386C911"                      /*          */
  345. #define S3_86C864_NAME          "S386C864"       /* VISION864 *//*          */
  346. #define S3_86C964_NAME          "S386C964"       /* VISION964 *//*          */
  347.  
  348. #define CHIPS_FIRST_CHIP        1                /* bogus chip              */
  349. #define MAX_CHIPS_CHIP          1                               /*          */
  350.  
  351. #define WEITEK_P9000_CHIP       1                               /*          */
  352. #define WEITEK_W5186_CHIP       2                               /*          */
  353. #define WEITEK_W5286_CHIP       3                               /*          */
  354. #define WEITEK_P9100_CHIP       4                               /*          */
  355. #define MAX_WEITEK_CHIP         WEITEK_P9100_CHIP               /*          */
  356.  
  357. #define WEITEK_P9000_NAME       "P9000"                         /*          */
  358. #define WEITEK_W5186_NAME       "W5186"                         /*          */
  359. #define WEITEK_W5286_NAME       "W5286"                         /*          */
  360.  
  361. /*
  362. ** OEM manufacturer defines.
  363. */
  364.  
  365. #define UNKNOWN_MANUFACTURER    0                               /*          */
  366. #define DIAMOND_MANUFACTURER    1                               /*          */
  367. #define ORCHID_MANUFACTURER     2                               /*          */
  368. #define NUMBER9_MANUFACTURER    3                               /*          */
  369. #define ARTIST_MANUFACTURER     4                               /*          */
  370. #define LACUNA_MANUFACTURER     5                               /*          */
  371. #define STB_MANUFACTURER        6                               /*          */
  372. #define S3_MANUFACTURER         7                               /*          */
  373. #define CIRRUS_MANUFACTURER     8
  374. #define MIROCRYSTAL_MANUFACTURER   9                            /*          */
  375. #define VIDEOLOGIC_MANUFACTURER    10                           /*          */
  376. #define THINKPAD_MANUFACTURER    11                             /*@V3.0YEE02*/
  377. #define MANUFACTURER_MAX        THINKPAD_MANUFACTURER           /*@V3.0YEE02*/
  378. #define DEFAULT_MANUFACTURER    UNKNOWN_MANUFACTURER            /*          */
  379. /* NOINC */
  380. typedef struct _ADAPTERS {      /* adp */
  381.   CHAR  *Name;
  382.   CHAR  *Manufacturer;
  383.   INT    ID;
  384. }ADAPTERS;
  385.  
  386. typedef CHAR *CHIPNAMES;
  387. typedef CHIPNAMES *PCHIPNAMES;
  388.  
  389. /*
  390.  * define CHIPS_INCL to include the following definitions.
  391.  */
  392. #ifdef CHIPS_INCL
  393. /*
  394. ** This table contains adapter ID's as not to depend on the changes to
  395. ** the ID's and their order. The ChipsetName table should be kept in sync
  396. ** with the Adapters table.
  397. */
  398. ADAPTERS Adapters [SVGA_LASTADAPTER + 0x01] =          /*            */
  399. {
  400.   {"UNKNOWN","Unknown",                         UNKNOWN_ADAPTER},
  401.   {"VIDEO7","Headland Technology, Inc.",        VIDEO7_ADAPTER},
  402.   {"TRIDENT","Trident Microsystems, Inc.",      TRIDENT_ADAPTER},
  403.   {"TSENG","Tseng Labs, Inc.",                  TSENG_ADAPTER},
  404.   {"WESTERNDIGITAL","Western Digital Corporation",WESTERNDIG_ADAPTER},
  405.   {"ATI","ATI Technologies Inc.",               ATI_ADAPTER},
  406.   {"IBM","IBM Corporation",                     IBM_ADAPTER},
  407.   {"CIRRUS","Cirrus Logic, Inc.",               CIRRUS_ADAPTER},
  408.   {"S3","S3 Incorporated",                      S3_ADAPTER},
  409.   {"CHIPS","Chips and Techologies",             CHIPS_ADAPTER},
  410.   {"WEITEK","WEITEK Corporation",               WEITEK_ADAPTER},
  411.   {"NUMBER9","Number Nine Corporation",         NUMBER9_ADAPTER},
  412.   {"GENERICPCI","Unknown",                      GENERIC_PCISVGA_ADAPTER}
  413. };
  414. CHIPNAMES ppszUnknownChipNames [1] =
  415.   {
  416.     "UNKNOWN",
  417.   };
  418. CHIPNAMES ppszVideo7ChipNames [MAX_VIDEO7_CHIP] =               /*          */
  419.   { /* Video 7==Headland Technology */                          /*          */
  420.     VIDEO7_HT205_NAME,                                          /*          */
  421.     VIDEO7_HT208_NAME,                                          /*          */
  422.     VIDEO7_HT209_NAME,                                          /*          */
  423.   };
  424. CHIPNAMES ppszTridentChipNames [MAX_TRIDENT_CHIP] =             /*          */
  425.   { /* Trident */                                               /*          */
  426.     TRIDENT_8800_NAME,                                          /*          */
  427.     TRIDENT_8900_NAME,                                          /*          */
  428.   };
  429. CHIPNAMES ppszTsengChipNames [MAX_TSENG_CHIP] =                 /*          */
  430.   { /* Tseng */
  431.     TSENG_ET3000_NAME,                                          /*          */
  432.     TSENG_ET4000_NAME,
  433.     TSENG_ET4000W32_NAME,
  434.     TSENG_ET4000W32I_NAME,
  435.     TSENG_ET4000W32IB_NAME,
  436.     TSENG_ET4000W32IC_NAME,                                     /*          */
  437.     TSENG_ET4000W32PA_NAME,                                     /*          */
  438.     TSENG_ET4000W32PB_NAME,                                     /*          */
  439.     TSENG_ET4000W32PC_NAME,                                     /*          */
  440.     TSENG_ET4000W32ID_NAME,                                     /*          */
  441.     TSENG_ET4000W32PD_NAME,                                     /*          */
  442.     TSENG_ET4000W32PX_NAME,  /*JWK23*/
  443.   };
  444. CHIPNAMES ppszWDChipNames [MAX_WESTERNDIG_CHIP] =               /*          */
  445.   { /* Western Digital */                                       /*          */
  446.     WESTERNDIG_PVGA1A_NAME,                                     /*          */
  447.     WESTERNDIG_WD9000_NAME,                                     /*          */
  448.     WESTERNDIG_WD9011_NAME,                                     /*          */
  449.     WESTERNDIG_WD9030_NAME,                                     /*          */
  450.     WESTERNDIG_WD9026_NAME,                                     /*          */
  451.     WESTERNDIG_WD9027_NAME,                                     /*          */
  452.     WESTERNDIG_WD9031_NAME,                                     /*          */
  453.     WESTERNDIG_WD9024_NAME,                                     /*          */
  454.     WESTERNDIG_WD9033_NAME,                                     /*          */
  455.   };
  456. CHIPNAMES ppszATIChipNames [MAX_ATI_CHIP] =                     /*          */
  457.   { /* ATI */                                                   /*          */
  458.     ATI_18800_NAME,                                             /*          */
  459.     ATI_28800_NAME,                                             /*          */
  460.     ATI_38800_NAME,                                             /*          */
  461.     ATI_68800_NAME,                                             /*          */
  462.     ATI_88800_NAME,                                             /*          */
  463.   };
  464. CHIPNAMES ppszIBMChipNames [MAX_IBM_CHIP] =                     /*          */
  465.   { /* IBM */                                                   /*          */
  466.     IBM_SVGA_NAME,                                              /*          */
  467.   };
  468. CHIPNAMES ppszCirrusChipNames [MAX_CIRRUS_CHIP] =               /*          */
  469.   { /* Cirrus Logic */                                          /*          */
  470.     CIRRUS_5420_NAME,                                           /*          */
  471.     CIRRUS_5422_NAME,
  472.     CIRRUS_5424_NAME,
  473.     CIRRUS_5426_NAME,
  474.     CIRRUS_5428_NAME,                                           /*          */
  475.     CIRRUS_5429_NAME,                                           /*          */
  476.     CIRRUS_543X_NAME,                                           /*          */
  477.     CIRRUS_5434_NAME,
  478.   };
  479. CHIPNAMES ppszS3ChipNames [MAX_S3_CHIP] =                       /*          */
  480.   { /* S3 */                                                    /*          */
  481.     S3_86C805_NAME,                                             /*          */
  482.     S3_86C928_NAME,                                             /*          */
  483.     S3_86C911_NAME,                                             /*          */
  484.     S3_86C864_NAME,                                             /*          */
  485.     S3_86C964_NAME,                                             /*          */
  486.   };
  487. CHIPNAMES ppszWeitekChipNames [MAX_WEITEK_CHIP] =               /*          */
  488.   { /* Weitek */                                                /*          */
  489.     WEITEK_P9000_NAME,                                          /*          */
  490.     WEITEK_W5186_NAME,                                          /*          */
  491.     WEITEK_W5286_NAME,                                          /*          */
  492.   };
  493. PCHIPNAMES ChipsetName [SVGA_LASTADAPTER + 0x01] =              /*          */
  494. {
  495.   ppszUnknownChipNames,                                         /*          */
  496.   ppszVideo7ChipNames,                                          /*          */
  497.   ppszTridentChipNames,                                         /*          */
  498.   ppszTsengChipNames,                                           /*          */
  499.   ppszWDChipNames,                                              /*          */
  500.   ppszATIChipNames,                                             /*          */
  501.   ppszIBMChipNames,                                             /*          */
  502.   ppszCirrusChipNames,                                          /*          */
  503.   ppszS3ChipNames,                                              /*          */
  504.   ppszUnknownChipNames,                                         /*          */
  505.   ppszWeitekChipNames,                                          /*          */
  506. };
  507. #endif
  508. /* INC */
  509.  
  510. /*
  511. ** Mode flag values
  512. ** used in VIDEOMODEINFO
  513. */
  514. #define MODE_FLAG_NOT_MONO      0x0001  /* Mono-compatible                  */
  515. #define MODE_FLAG_GRAPHICS      0x0002  /* Text mode, Graphics              */
  516. #define MODE_FLAG_NO_CLR_BRST   0x0004  /* Disable Color burst              */
  517. #define MODE_FLAG_NATIVE        0x0008  /* Native (advanced function) mode  */
  518. #define IGNORE_CLR_BRST         0x0010  /* Disable color burst doesn't make */
  519.                                         /* sense for this mode              */
  520. #define NOT_PLASMA              0x0020  /*            won't work on plasma  */
  521.                                         /* display                          */
  522. #define MODE_FLAG_VGA_ENTRY     0x0040  /* VGA mode, need clean up          */
  523.  
  524. /*
  525.  * definitions of bus type
  526.  */
  527. #define ISA_BUS    0
  528. #define VLB_BUS    1
  529. #define PCI_BUS    2
  530. #define EISA_BUS   3
  531. #define PCMCIA_BUS 4
  532. #define MCA_BUS    5
  533.  
  534. /*
  535. * endian type
  536. */
  537. #define LITTLE_ENDIAN  0
  538. #define BIG_ENDIAN     1
  539.  
  540.  
  541. /*
  542. ** VIDEOPMI.DLL prototypes.
  543. */
  544. /* NOINC */
  545. #define HVIDEO   PVOID
  546. typedef HVIDEO  *PHVIDEO;
  547.  
  548. #ifndef APIENTRY
  549. #define APIENTRY /* nothing */
  550. #endif
  551.  
  552. #ifndef APIRET
  553. #define APIRET ULONG
  554. #endif
  555.  
  556. /*
  557. ** Structures passed as input and output parameters.
  558. */
  559.  
  560. typedef struct _VIDEOMODEINFO { /* vmi */
  561. #ifdef DEVELOP
  562.         ULONG   cb;                     /* size of the structure            */
  563. #endif
  564.         MODEID  miModeId;               /* used to make setmode request     */
  565.         USHORT  usType;                 /* mode type bits                   */
  566.         USHORT  usInt10ModeSet;         /* int 10 mode                      */
  567.         USHORT  usXResolution;          /* horizontal pels                  */
  568.         USHORT  usYResolution;          /* vertical scan lines              */
  569.         ULONG   ulBufferAddress;        /* physical address of VRAM         */
  570.         ULONG   ulApertureSize;         /* VRAM aperture                    */
  571.         BYTE    bBitsPerPixel;          /* no of colors                     */
  572.         BYTE    bBitPlanes;             /* number of planes                 */
  573.         BYTE    bXCharSize;             /* font width                       */
  574.         BYTE    bYCharSize;             /* font height                      */
  575.         USHORT  usBytesPerScanLine;     /* logical line length in bytes     */
  576.         USHORT  usTextRows;             /* text rows                        */
  577.         ULONG   ulPageLength;           /* no of bytes to save a plane      */
  578.         ULONG   ulSaveSize;             /* total bytes of VRAM to save      */
  579.         /*
  580.          * Monitor Info
  581.          */
  582.         BYTE    bVrtRefresh;
  583.         BYTE    bHrtRefresh;
  584.         BYTE    bVrtPolPos;
  585.         BYTE    bHrtPolPos;
  586.         USHORT  usScrnTop;
  587.         USHORT  usScrnBottom;
  588.         USHORT  usScrnLeft;
  589.         USHORT  usScrnRight;
  590.  
  591.         CHAR    szColorFormat[8];       /* for true color or hi-color modes */
  592.         CHAR    szColorWeight[8];       /* for true color or hi-color modes */
  593.  
  594. } VIDEOMODEINFO;
  595. typedef VIDEOMODEINFO FAR *PVIDEOMODEINFO;
  596.  
  597. typedef struct _SVGARGB { /* rgb */
  598.         BYTE    bR;
  599.         BYTE    bG;
  600.         BYTE    bB;
  601.         BYTE    bUnused;
  602. } SVGARGB;
  603. typedef SVGARGB FAR *PSVGARGB;
  604.  
  605. typedef struct _CLUTDATA { /* clt */
  606.         ULONG   ulRGBCount;             /* No of aRGB entries that follow   */
  607.         ULONG   ulRGBStart;             /* Start index for RGB triplets     */
  608.         SVGARGB aRGB[1];                /* One defined, ulRGBCount entries  */
  609. } CLUTDATA;
  610. typedef CLUTDATA FAR *PCLUTDATA;
  611.  
  612. typedef struct _PALETTEDATA { /* pal */
  613.         ULONG   ulPalCount;             /* No of bPal.. entries that follow */
  614.         ULONG   ulPalStart;             /* Start index for data             */
  615.         BYTE    bPaletteData[1];        /* One defined, ulPalCount entries  */
  616. } PALETTEDATA;
  617. typedef PALETTEDATA FAR *PPALETTEDATA;
  618.  
  619. typedef struct _FONTDATA { /* font */
  620.         ULONG   ulCharCount;            /* No of chars in font              */
  621.         ULONG   ulFontHeight;           /* No of scanlines per character    */
  622.         ULONG   ulFontWidth;            /* No of columns per character      */
  623.         BYTE    bFontData[1];           /* ulCharCount*ulFontHeight entries */
  624. } FONTDATA;
  625. typedef FONTDATA FAR *PFONTDATA;
  626.  
  627. typedef BYTE FAR *PVRAMDATA;
  628.  
  629. typedef struct _CLEANDATA { /* clean */
  630.     USHORT  Command;
  631.     USHORT  IndexPort;
  632.     USHORT  DataPort;
  633.     USHORT  Index;
  634.     USHORT  ANDMask;
  635.     USHORT  ORMask;
  636. } CLEANDATA;
  637.  
  638. typedef struct _BANKDATA { /* bank */
  639.         MODEID  miBank;                 /*                                  */
  640.         ULONG   ulBank;                 /*                                  */
  641. } BANKDATA;
  642. typedef BANKDATA FAR *PBANKDATA;
  643.  
  644. #define MAX_OEM_STRING  128
  645. #define MAX_DAC_STRING  128
  646. #define MAX_VERSION     128
  647.  
  648. typedef struct _ADAPTERINFO {   /* adi */
  649.         ULONG       ulAdapterID;
  650.         CHAR        szOEMString[MAX_OEM_STRING];    /* adapter info from Hardware section */
  651.         CHAR        szDACString[MAX_DAC_STRING];    /* DAC info from Hardware section */
  652.         CHAR        szRevision[MAX_VERSION];        /* whatever the revision  means   */
  653.         ULONG       ulTotalMemory;
  654.         ULONG       ulMMIOBaseAddress;
  655.         ULONG       ulPIOBaseAddress;
  656.         BYTE        bBusType;
  657.         BYTE        bEndian;
  658.         USHORT      usDeviceBusID;       /* has to be 2 bytes */
  659.         USHORT      usVendorBusID;       /* has to be 2 bytes */
  660.         USHORT      SlotID;              /* has to be 2 bytes */
  661. } ADAPTERINFO, FAR *PADAPTERINFO;
  662.  
  663. /*
  664.  * Adapter Instance definition. The structure will be passed in every
  665.  * PMIREQUEST call.
  666.  */
  667. typedef struct _VIDEO_ADAPTER { /* va */
  668.      HVIDEO          hvideo;
  669.      ADAPTERINFO     Adapter;
  670.      VIDEOMODEINFO   ModeInfo;
  671. } VIDEO_ADAPTER, FAR *PVIDEO_ADAPTER;
  672.  
  673. /*
  674.  * prototype for import functions in PMI file
  675.  */
  676. typedef ULONG   *PREGS;     //pointer to registers. Passed to imported PMI functions.
  677. typedef APIRET (EXPENTRY FNIMPORTPMI)(PVIDEO_ADAPTER, PREGS);
  678. typedef FNIMPORTPMI *PFNIMPORTPMI;
  679.  
  680. #ifdef INCL_16
  681.    #define VIDEOAPI FAR     //this controls the calling convention.
  682. #else                           // 32-bit code
  683.    #define VIDEOAPI EXPENTRY       //C calling convention
  684. #endif
  685.  
  686. /*
  687. ** prototype for VIDEOPMI request functions
  688. */
  689. typedef APIRET (VIDEOAPI FNVIDEOPMIREQUEST)(PVIDEO_ADAPTER, ULONG, PVOID, PVOID);
  690.  
  691. typedef FNVIDEOPMIREQUEST     *PFNVIDEOPMIREQUEST;
  692.                                          /* used to exchange data with vvid */
  693. typedef struct _VDDDATA {    /* vdd */
  694.         PFNVIDEOPMIREQUEST       npfnEntryPointAddress;
  695.         HVIDEO                   hvideo;
  696. } VDDDATA;
  697. typedef VDDDATA *PVDDATA;
  698. /* INC */
  699. /*
  700. ** Save Restore constants
  701. */
  702.  
  703. #define STATEFLAG_REGISTERS     0x0001  /*                                  */
  704. #define STATEFLAG_CLUT          0x0002  /*                                  */
  705. #define STATEFLAG_VRAM          0x0004  /*                                  */
  706. #define STATEFLAG_FONT          0x0008  /*                                  */
  707.  
  708. /* NOINC */
  709. typedef struct _VIDEOSTATE { /* vst */
  710. #ifdef DEVELOP
  711.         ULONG     cb;                   /* size of the structure            */
  712. #endif
  713.         ULONG     fStateFlags;          /*                                  */
  714.         MODEID    miState;              /*                                  */
  715.         PVOID     pModeData;            /*                                  */
  716.         ULONG     ulVRAMSaveSize;       /* No of bytes/page to save         */
  717.         PVRAMDATA pVRAM;                /*                                  */
  718.         PCLUTDATA pCLUT;                /*                                  */
  719.         PFONTDATA pFont;                /*                                  */
  720. } VIDEOSTATE;
  721. typedef VIDEOSTATE FAR *PVIDEOSTATE;
  722. /* INC */
  723.  
  724. /*
  725. ** Function request parameters supported.
  726. */
  727.  
  728. #define PMIREQUEST_SETMODE                 0
  729. #define PMIREQUEST_LOCKREGISTERS           1
  730. #define PMIREQUEST_UNLOCKREGISTERS         2
  731. #define PMIREQUEST_CLEANUP                 3
  732. #define PMIREQUEST_SAVESTATE               4
  733. #define PMIREQUEST_RESTORESTATE            5
  734. #define PMIREQUEST_GETBANK                 6
  735. #define PMIREQUEST_SETBANK                 7
  736. #define PMIREQUEST_GETCLUT                 8
  737. #define PMIREQUEST_SETCLUT                 9
  738. #define PMIREQUEST_GETPALETTE             10
  739. #define PMIREQUEST_SETPALETTE             11
  740. #define PMIREQUEST_GETFONT                12
  741. #define PMIREQUEST_SETFONT                13
  742. #define PMIREQUEST_TUNEDISPLAY            14        /*            */
  743. #define PMIREQUEST_QUERYMAXMODEENTRIES    15
  744. #define PMIREQUEST_QUERYMAXMODELISTSIZE   16
  745. #define PMIREQUEST_QUERYMODEINFODATA      17
  746. #define PMIREQUEST_QUERYMAXTRAPENTRIES    18
  747. #define PMIREQUEST_QUERYTRAPLISTDATA      19
  748. #define PMIREQUEST_QUERYMODEHRDWRLIST     20        /*            */
  749. #define PMIREQUEST_LOADPMIFILE            21
  750. #define PMIREQUEST_IDENTIFYADAPTER        22
  751.  
  752. #define PMIREQUEST_MAX (PMIREQUEST_IDENTIFYADAPTER + 1) /* last entry + 1 */
  753.  
  754. /* NOINC */
  755.  
  756. /*
  757.  * define PMIDEF_INCL to include the following definitions.
  758.  */
  759. #ifdef PMIDEF_INCL
  760.  
  761. /*           
  762. ** Possible flags in ModeAtrributes field in PMI file
  763. ** the flags will be saved in ModeInfo.ulType
  764. */
  765. #define  PMI_MODE_COLOUR          0x08        /* Bit 3 - 0 = mono, 1 = colour */
  766. #define  PMI_MODE_GRAPHICS        0x10      /* Bit 4 - 0 = text, 1 = graphics */
  767. #define  PMI_MODE_VGA_ENTRY       0x20/* vga entry, need clean up in set mode */
  768. #define  PMI_MODE_IGNORE_CLR_BRST 0x40 /* won't work on B/W mode              */
  769. #define  PMI_MODE_NOT_PLASMA      0x80 /* won't work on planar display        */
  770.  
  771. /*
  772.  * PMI commands
  773.  */
  774. #define PMICMD_NONE             0xFF            //reserved
  775. #define PMICMD_INB              0
  776. #define PMICMD_OUTB             1
  777. #define PMICMD_INW              2
  778. #define PMICMD_OUTW             3
  779. #define PMICMD_INDW             4
  780. #define PMICMD_OUTDW            5
  781. #define PMICMD_BINB             6
  782. #define PMICMD_BOUTB            7
  783. #define PMICMD_ABOUTW           8
  784. #define PMICMD_ABOUTDW          9
  785. #define PMICMD_RMWBN           10
  786. #define PMICMD_RMWBI           11
  787. #define PMICMD_RMWWN           12
  788. #define PMICMD_REGOP           13
  789. #define PMICMD_ASSIGN          14
  790. /***************** for backward compatibility ***************/
  791. #define PMICMD_WAIT            15
  792. #define PMI_WAIT_CLEAR          0       /* Wait for CLEAR condition         */
  793. /***************** for backward compatibility ***************/
  794. #define PMICMD_WAITB           16
  795. #define PMICMD_WAITW           17
  796. #define PMICMD_WAITDW          18
  797. #define PMICMD_READB           19               /*                     */
  798. #define PMICMD_READW           20               /* Don't rearrange the */
  799. #define PMICMD_READDW          21               /* order or put        */
  800. #define PMICMD_WRITEB          22               /* anything in between */
  801. #define PMICMD_WRITEW          23               /* for these MMIO      */
  802. #define PMICMD_WRITEDW         24               /* commands            */
  803. #define PMICMD_ROUTINE         25               /*                     */
  804. #define PMICMD_LABEL           26
  805. #define PMICMD_WHILE           27
  806. #define PMICMD_ENDWHILE        28
  807. #define PMICMD_IF              29
  808. #define PMICMD_GOTO            30
  809. #define PMICMD_STRCMP          31
  810. #define PMICMD_MEMCMP          32
  811. #define PMICMD_CALL            33
  812. #define PMICMD_MAX             PMICMD_CALL  /* equals last entry   */
  813.  
  814.  
  815. #define PMI_REGOP_ASSIGN          0     /* Rxxx  = <value>                  */
  816. #define PMI_REGOP_AND             1     /* Rxxx &= <value>                  */
  817. #define PMI_REGOP_OR              2     /* Rxxx |= <value>                  */
  818. #define PMI_REGOP_XOR             3     /* Rxxx ^= <value>                  */
  819. #define PMI_REGOP_PLUS            4     /* Rxxx += <value>                  */
  820. #define PMI_REGOP_MINUS           5     /* Rxxx -= <value>                  */
  821. #define PMI_REGOP_SHL             6     /* Rxxx <= <value>                  */
  822. #define PMI_REGOP_SHR             7     /* Rxxx >= <value>                  */
  823. #define PMI_REGOP_LESS            8     /* Rxx < Rxyy                       */
  824. #define PMI_REGOP_LESS_EQUALS     9     /* Rxx <= Ryy                       */
  825. #define PMI_REGOP_GREATER         10    /* Rxx > Rxyy                       */
  826. #define PMI_REGOP_GREATER_EQUALS  11    /* Rxx >= Ryy                       */
  827. #define PMI_REGOP_EQUALS          12    /* Rxx == Ryy                       */
  828. #define PMI_REGOP_NOT_EQUALS      13    /* Rxx != Ryy                       */
  829. #define PMI_REGOP_MAX  PMI_REGOP_NOT_EQUALS /* must equal last entry        */
  830.  
  831. /*
  832. **      Type Definitions
  833. **
  834. **      Tokens are grouped, and must be kept that way.
  835. **      There are dummy tokens, place holders, TOK_??_BEGIN and TOK_??_END
  836. **      to make tests and expansion easier. Just be sure to keep token
  837. **      info for a given section, within these bounds.
  838. */
  839.  
  840. typedef enum _PMITOKEN {        /* pt */
  841.      TOK_SECT_BEGIN,
  842. /***************** for backward compatibility ***************/
  843.      TOK_ADAPTERTYPE,           /* Section Heading tokens */
  844.      TOK_CHIPSET,
  845. /***************** for backward compatibility ***************/
  846.      TOK_PMIVERSION,           /* Section Heading tokens */
  847.      TOK_COMMENT,
  848.      TOK_MODEINFO,
  849.      TOK_SETMODE,
  850.      TOK_MONITORMODEINFO,
  851.      TOK_TRAPREGS,
  852.      TOK_UNLOCK,
  853.      TOK_LOCK,
  854.      TOK_CLEANUP,
  855.      TOK_SETBANK,
  856.      TOK_GETBANK,
  857.      TOK_DECLARATIONS,
  858.      TOK_COPYVRAM,
  859.      TOK_TUNEDISPLAY,
  860.      TOK_HARDWARE,
  861.      TOK_IDENTIFYADAPTER,
  862.      TOK_ISENGINEBUSY,
  863.      TOK_ENABLECONTROLLER,
  864.      TOK_DISABLECONTROLLER,
  865.      TOK_SETMONITORTIMINGS,
  866.      TOK_ROUTINE_DECLR,             /*            */
  867.      TOK_INCLUDE,                   /* text include */
  868.      TOK_INCLUDECODE,               /* DLL include  */
  869.      TOK_SECT_END,
  870.  
  871.      TOK_MI_BEGIN,
  872.      TOK_MODEATTRIBUTES,        /* ModeInfo Section tokens */
  873.      TOK_INT10MODESET,          /*            int 10 mode */
  874.      TOK_BYTESPERSCANLINE,
  875.      TOK_TEXTROWS,              /* [ModeInfo] and [Hardware] tokens       */
  876.      TOK_XRESOLUTION,           /* are PMI keyvariables. Do remember      */
  877.      TOK_YRESOLUTION,           /* update the PMIKeyVarTable[] and        */
  878.      TOK_XCHARSIZE,             /* PMI Keyvariable defines in header file */
  879.      TOK_YCHARSIZE,
  880.      TOK_BITSPERPIXEL,
  881.      TOK_NUMBEROFPLANES,
  882.      TOK_PAGELENGTH,
  883.      TOK_SAVESIZE,
  884.      TOK_BUFFERADDRESS,
  885.      TOK_APERTURESIZE,
  886.      TOK_COLORFORMAT,
  887.      TOK_COLORWEIGHT,
  888.      TOK_VERTICALREFRESH,
  889.      TOK_HORIZONTALREFRESH,
  890.      TOK_VPOLARITYPOSITIVE,
  891.      TOK_HPOLARITYPOSITIVE,
  892.      TOK_SCREENLEFTEDGE,
  893.      TOK_SCREENRIGHTEDGE,
  894.      TOK_SCREENTOPEDGE,
  895.      TOK_SCREENBOTTOMEDGE,
  896. /***************** for backward compatibility ***************/
  897.      TOK_INTERLACEMODE,
  898. /***************** for backward compatibility ***************/
  899.      TOK_MI_END,
  900.  
  901.      TOK_HARDWARE_BEGIN,      /*            Hardware Section */
  902.      TOK_BUSTYPE,
  903.      TOK_OEMSTRING,
  904.      TOK_DACSTRING,
  905.      TOK_VERSION,
  906.      TOK_TOTALMEMORY,
  907.      TOK_MEMORYIOADDRESS,
  908.      TOK_PORTIOADDRESS,
  909.      TOK_ENDIAN,
  910.      TOK_HARDWARE_END,
  911.  
  912.      TOK_TRAP_BEGIN,
  913.      TOK_BYTE_IOPORT,             /*             trap registers type */
  914.      TOK_WORD_IOPORT,
  915.      TOK_DWORD_IOPORT,
  916.      TOK_BYTE_MMIOPORT,
  917.      TOK_WORD_MMIOPORT,
  918.      TOK_DWORD_MMIOPORT,
  919.      TOK_RESET,
  920.      TOK_INDEX,
  921.      TOK_INDEXMASK,
  922.      TOK_DATAMASK,
  923.      TOK_ACCEL,
  924.      TOK_RO,
  925.      TOK_WO,
  926.      TOK_RW,
  927.      TOK_TRAP_END,
  928.  
  929.      TOK_SM_BEGIN,
  930.      TOK_INB,                /* Command Section tokens */
  931.      TOK_OUTB,
  932.      TOK_INW,
  933.      TOK_INDW,
  934.      TOK_OUTW,
  935.      TOK_OUTDW,
  936.      TOK_BINB,
  937.      TOK_BOUTB,
  938.      TOK_RMWBI,
  939.      TOK_RMWBN,
  940.      TOK_RMWWN,
  941.      TOK_ABOUTW,
  942.      TOK_ABOUTDW,
  943.      TOK_IF,
  944.      TOK_GOTO,
  945.      TOK_VARIABLE,
  946.      TOK_WHILE,
  947.      TOK_ENDWHILE,
  948.      TOK_MEMCMP,
  949.      TOK_STRCMP,
  950.      TOK_READB,         /*                     */
  951.      TOK_READW,         /* Don't rearrange the */
  952.      TOK_READDW,        /* order or put        */
  953.      TOK_WRITEB,        /* anything in between */
  954.      TOK_WRITEW,        /* for these MMIO      */
  955.      TOK_WRITEDW,       /* commands            */
  956.      TOK_CALL,
  957.      TOK_ROUTINE,
  958. /***************** for backward compatibility ***************/
  959.      TOK_WAIT,
  960. /***************** for backward compatibility ***************/
  961.      TOK_WAITB,
  962.      TOK_WAITW,
  963.      TOK_WAITDW,
  964.      TOK_VALUE,
  965.      TOK_PMIREG,
  966.      TOK_LPAREN,
  967.      TOK_RPAREN,
  968.      TOK_LBRACE,
  969.      TOK_RBRACE,
  970.      TOK_EQUALS,
  971.      TOK_NOTEQUALS,
  972.      TOK_SEMICOLON,
  973.      TOK_COMMA,
  974.      TOK_COLON,
  975.      TOK_MINUS,
  976.      TOK_HYPHEN = TOK_MINUS,
  977.      TOK_NEGATE,         /*            */
  978.      TOK_DOUBLEQUOTE,
  979.      TOK_PLUS,
  980.      TOK_REGOP_AND,
  981.      TOK_REGOP_OR,
  982.      TOK_REGOP_XOR,
  983.      TOK_REGOP_SHL,
  984.      TOK_LESS = TOK_REGOP_SHL,  /*            */
  985.      TOK_REGOP_SHR,
  986.      TOK_SM_END,
  987.  
  988.      TOK_EOF,
  989.      TOK_IOPORT,
  990.      TOK_MMIO,
  991.      TOK_PIO,
  992.      TOK_ISA,
  993.      TOK_VLB,
  994.      TOK_PCI,
  995.      TOK_EISA,
  996.      TOK_PCMCIA,
  997.      TOK_MCA,
  998.      TOK_BIG_ENDIAN,
  999.      TOK_LITTLE_ENDIAN,
  1000.      TOK_QUOTEDSTRING,
  1001.      TOK_MMIO_REG_NAME,
  1002.      TOK_IOPORT_NAME,
  1003.      TOK_PMI_KEYVAR,
  1004.      TOK_SHADOWVRAM,
  1005.      TOK_ERROR,                /* error */
  1006.      TOK_PASS
  1007. } PMITOKEN;
  1008.  
  1009. typedef struct _TOK { /* tok */
  1010.   CHAR *tok_txt;
  1011.   PMITOKEN tok_val;
  1012. } TOK;
  1013.  
  1014. /*
  1015.  * definitions of bus types.
  1016.  */
  1017. #define ISA_BUS    0           /*            */
  1018. #define VLB_BUS    1
  1019. #define PCI_BUS    2
  1020. #define EISA_BUS   3
  1021. #define PCMCIA_BUS 4
  1022. #define MCA_BUS    5
  1023. #define BUS_MAX MCA_BUS
  1024.  
  1025. #endif /* PMIDEF_INCL */
  1026.  
  1027. /*
  1028.  * PMI token declarations
  1029.  * PMI_TOKEN_ARRAY should be defined to include the following array.
  1030.  * In this way, this array will not be allocated for every C file.
  1031.  */
  1032. #ifdef PMI_TOKEN_ARRAY
  1033.  
  1034. TOK Tokens[] =
  1035. {
  1036.  
  1037. /***************** for backward compatibility ***************/
  1038.   "[ADAPTERTYPE]",      TOK_ADAPTERTYPE,
  1039.   "[CHIPSET]",          TOK_CHIPSET,
  1040. /***************** for backward compatibility ***************/
  1041.   "[PMIVERSION]",       TOK_PMIVERSION,
  1042.   "[COMMENT]",          TOK_COMMENT,
  1043.   "[MODEINFO]",         TOK_MODEINFO,
  1044.   "[SETMODE]",          TOK_SETMODE,
  1045.   "[MONITORMODEINFO]",  TOK_MONITORMODEINFO,
  1046.   "[TRAPREGS]",         TOK_TRAPREGS,
  1047.   "[UNLOCK]",           TOK_UNLOCK,
  1048.   "[LOCK]",             TOK_LOCK,
  1049.   "[CLEANUP]",          TOK_CLEANUP,
  1050.   "[SETBANK]",          TOK_SETBANK,
  1051.   "[GETBANK]",          TOK_GETBANK,
  1052.   "[DECLARATIONS]",     TOK_DECLARATIONS,
  1053.   "[COPYVRAM]",         TOK_COPYVRAM,
  1054.   "[TUNEDISPLAY]",      TOK_TUNEDISPLAY,
  1055.   "[HARDWARE]",         TOK_HARDWARE,
  1056.   "[IDENTIFYADAPTER]",  TOK_IDENTIFYADAPTER,
  1057.   "[ISENGINEBUSY]",     TOK_ISENGINEBUSY,
  1058.   "[ENABLECONTROLLER]", TOK_ENABLECONTROLLER,
  1059.   "[DISABLECONTROLLER]",TOK_DISABLECONTROLLER,
  1060.   "[SETMONITORTIMINGS]",TOK_SETMONITORTIMINGS,
  1061.   "INCLUDE",            TOK_INCLUDE,                   /* text include */
  1062.   "INCLUDECODE",        TOK_INCLUDECODE,               /* DLL include  */
  1063.   /*
  1064.    * Hardware Section
  1065.    */
  1066.   "BUSTYPE",            TOK_BUSTYPE,
  1067.   "OEMSTRING",          TOK_OEMSTRING,
  1068.   "DACSTRING",          TOK_DACSTRING,
  1069.   "VERSION",            TOK_VERSION,
  1070.   "TOTALMEMORY",        TOK_TOTALMEMORY,
  1071.   "MEMORYIOADDRESS",    TOK_MEMORYIOADDRESS,
  1072.   "PORTIOADDRESS",      TOK_PORTIOADDRESS,
  1073.   "ENDIAN",             TOK_ENDIAN,
  1074.   /*
  1075.    * TrapRegs Section
  1076.    */
  1077.   "BYTE_IOPORT",        TOK_BYTE_IOPORT,
  1078.   "WORD_IOPORT",        TOK_WORD_IOPORT,
  1079.   "DWORD_IOPORT",       TOK_DWORD_IOPORT,
  1080.   "BYTE_MMIOPORT",      TOK_BYTE_MMIOPORT,
  1081.   "WORD_MMIOPORT",      TOK_WORD_MMIOPORT,
  1082.   "DWORD_MMIOPORT",     TOK_DWORD_MMIOPORT,
  1083.   "RESET",              TOK_RESET,
  1084.   "INDEX",              TOK_INDEX,
  1085.   "INDEXMASK",          TOK_INDEXMASK,
  1086.   "DATAMASK",           TOK_DATAMASK,
  1087.   "ACCEL",              TOK_ACCEL,
  1088.   "RO",                 TOK_RO,
  1089.   "WO",                 TOK_WO,
  1090.   "RW",                 TOK_RW,
  1091.   /*
  1092.    * ModeInfo Section
  1093.    */
  1094.   "INT10MODESET",       TOK_INT10MODESET,
  1095.   "MODEATTRIBUTES",     TOK_MODEATTRIBUTES,
  1096.   "BYTESPERSCANLINE",   TOK_BYTESPERSCANLINE,
  1097.   "TEXTROWS",           TOK_TEXTROWS,
  1098.   "XRESOLUTION",        TOK_XRESOLUTION,
  1099.   "YRESOLUTION",        TOK_YRESOLUTION,
  1100.   "XCHARSIZE",          TOK_XCHARSIZE,
  1101.   "YCHARSIZE",          TOK_YCHARSIZE,
  1102.   "BITSPERPIXEL",       TOK_BITSPERPIXEL,
  1103.   "NUMBEROFPLANES",     TOK_NUMBEROFPLANES,
  1104.   "PAGELENGTH",         TOK_PAGELENGTH,
  1105.   "SAVESIZE",           TOK_SAVESIZE,
  1106.   "BUFFERADDRESS",      TOK_BUFFERADDRESS,
  1107.   "APERTURESIZE",       TOK_APERTURESIZE,
  1108.   "COLORFORMAT",        TOK_COLORFORMAT,
  1109.   "COLORWEIGHT",        TOK_COLORWEIGHT,
  1110. /***************** for backward compatibility ***************/
  1111.   "INTERLACEMODE",      TOK_INTERLACEMODE,
  1112. /***************** for backward compatibility ***************/
  1113.   "VERTICALREFRESH",    TOK_VERTICALREFRESH,
  1114.   "HORIZONTALREFRESH",  TOK_HORIZONTALREFRESH,
  1115.   "VPOLARITYPOSITIVE",  TOK_VPOLARITYPOSITIVE,
  1116.   "HPOLARITYPOSITIVE",  TOK_HPOLARITYPOSITIVE,
  1117.   "SCREENLEFTEDGE",     TOK_SCREENLEFTEDGE,
  1118.   "SCREENRIGHTEDGE",    TOK_SCREENRIGHTEDGE,
  1119.   "SCREENTOPEDGE",      TOK_SCREENTOPEDGE,
  1120.   "SCREENBOTTOMEDGE",   TOK_SCREENBOTTOMEDGE,
  1121.   /*
  1122.    * PMI Commands
  1123.    */
  1124.   "INB",                TOK_INB,
  1125.   "OUTB",               TOK_OUTB,
  1126.   "INW",                TOK_INW,
  1127.   "OUTW",               TOK_OUTW,
  1128.   "INDW",               TOK_INDW,
  1129.   "OUTDW",              TOK_OUTDW,
  1130.   "BINB",               TOK_BINB,
  1131.   "BOUTB",              TOK_BOUTB,
  1132.   "RMWBI",              TOK_RMWBI,
  1133.   "RMWBN",              TOK_RMWBN,
  1134. /***************** for backward compatibility ***************/
  1135.   "RMWB",               TOK_RMWBI,
  1136.   "RMWW",               TOK_RMWBN,
  1137. /***************** for backward compatibility ***************/
  1138.   "RMWWN",               TOK_RMWWN,
  1139.   "ABOUTW",             TOK_ABOUTW,
  1140.   "ABOUTDW",            TOK_ABOUTDW,
  1141.   "IF",                 TOK_IF,
  1142.   "GOTO",               TOK_GOTO,
  1143.   "WHILE",              TOK_WHILE,
  1144.   "ENDWHILE",           TOK_ENDWHILE,
  1145.   "MEMCMP",             TOK_MEMCMP,
  1146.   "STRCMP",             TOK_STRCMP,
  1147.   "READB",              TOK_READB,      /*                     */
  1148.   "READW",              TOK_READW,      /* Don't rearrange the */
  1149.   "READDW",             TOK_READDW,     /* order or put        */
  1150.   "WRITEB",             TOK_WRITEB,     /* anything in between */
  1151.   "WRITEW",             TOK_WRITEW,     /* for these MMIO      */
  1152.   "WRITEDW",            TOK_WRITEDW,    /* commands            */
  1153.   "CALL",               TOK_CALL,
  1154. /***************** for backward compatibility ***************/
  1155.   "WAIT",               TOK_WAIT,
  1156. /***************** for backward compatibility ***************/
  1157.   "WAITB",              TOK_WAITB,
  1158.   "WAITW",              TOK_WAITW,
  1159.   "WAITDW",             TOK_WAITDW,
  1160.   /*
  1161.    * others
  1162.    */
  1163.   "MMIO",               TOK_MMIO,    /* used in [Declarations]  */
  1164. /***************** for backward compatibility ***************/
  1165.   "P",                  TOK_MMIO,    /* used in [Declarations]  */
  1166. /***************** for backward compatibility ***************/
  1167.   "PIO",                TOK_PIO,     /*                         */
  1168.   "ISA",                TOK_ISA,
  1169.   "VLB",                TOK_VLB,
  1170.   "PCI",                TOK_PCI,
  1171.   "EISA",               TOK_EISA,
  1172.   "PCMCIA",             TOK_PCMCIA,
  1173.   "MCA",                TOK_MCA,
  1174.   "SHADOWVRAM",         TOK_SHADOWVRAM,
  1175.   "BIG",                TOK_BIG_ENDIAN,
  1176.   "LITTLE",             TOK_LITTLE_ENDIAN
  1177.  
  1178. } ;
  1179.  
  1180. extern TOK Tokens[];
  1181.  
  1182. #endif  /* PMI_TOKEN_ARRAY */
  1183.  
  1184. /*
  1185. ** PMI subsystem errors
  1186. */
  1187. #define ERROR_ADAPTER_NOT_SUPPORTED          ERROR_USER_DEFINED_BASE+0x10
  1188. #define ERROR_REFRESH_NOT_SUPPORTED          ERROR_USER_DEFINED_BASE+0x11
  1189. #define ERROR_MODE_NOT_SUPPORTED             ERROR_USER_DEFINED_BASE+0x12
  1190. #define ERROR_REQ_SECTION_UNDEFINED          ERROR_USER_DEFINED_BASE+0x13
  1191. #define ERROR_PMI_FILE_SYNTAX                ERROR_USER_DEFINED_BASE+0x14
  1192. #define ERROR_NO_MONITOR_SUPPORT             ERROR_USER_DEFINED_BASE+0x15
  1193. #define ERROR_INVALID_CONFIGURATION          ERROR_USER_DEFINED_BASE+0x16
  1194. /*
  1195. ** DIF subsystem defines
  1196. */
  1197. typedef struct _MONMODEINFO { /* mmi */
  1198.         USHORT            usXResolution;
  1199.         USHORT            usYResolution;
  1200.         BYTE              bVertRefresh;
  1201.         BYTE              bHorizRefresh;
  1202.         BYTE              bVPolarityPos;
  1203.         BYTE              bHPolarityPos;
  1204. } MONMODEINFO;
  1205. #define MAX_PATH_NAME  256
  1206. #define MAX_MONITOR_LEN   128   /* length of name string */
  1207. #define MAX_MONITOR_MODES 10    /* up to 10 modes per monitor */
  1208. typedef struct _MonInfo { /* mi */
  1209.         CHAR             szMonitor[MAX_MONITOR_LEN];
  1210.         MONMODEINFO      ModeInfo[MAX_MONITOR_MODES];
  1211. } MONITORINFO, FAR *PMONITORINFO;
  1212.  
  1213. #define   DIF_SERVICE_DLL_NAME           "VIDEOCFG"
  1214. /*
  1215. ** Functions exported by VIDEOCFG.DLL.
  1216. */
  1217.  
  1218. /* Begin                                                               */
  1219. /* These functions are exported only to PM aware apps. Include PMWIN.H */
  1220. #ifdef MRESULT
  1221. BOOL EXPENTRY QueryScreenPageData(PHMODULE phmodResourceMRI,
  1222.                                   PUSHORT  pusDlgId,
  1223.                                   PSZ      pszName,
  1224.                                   PUSHORT  pusHelpId,
  1225.                                   PSZ      pszDlgProcName,
  1226.                                   BOOL     bPaletteManagedDisplay);
  1227. BOOL EXPENTRY QueryDisplayTypePageData(PHMODULE phmodResourceMRI,
  1228.                                        PUSHORT  pusDlgId,
  1229.                                        PSZ      pszName,
  1230.                                        PUSHORT  pusHelpId,
  1231.                                        PSZ      pszDlgProcName);
  1232. MRESULT EXPENTRY ScreenDlgProc(HWND hwndDlg, USHORT msg, MPARAM mp1, MPARAM mp2);
  1233. MRESULT EXPENTRY DIF_DisplayTypeDlgProc(HWND hwndDlg, USHORT msg, MPARAM mp1, MPARAM mp2);
  1234. MRESULT EXPENTRY DMQS_DisplayTypeDlgProc(HWND hwndDlg, USHORT msg, MPARAM mp1, MPARAM mp2);
  1235. #endif
  1236. /* End            */
  1237.  
  1238. APIRET EXPENTRY QueryNumMonitors(ULONG *pulNumMonitors);
  1239. APIRET EXPENTRY GetAllMonitors(MONITORINFO *pMonitors);
  1240. APIRET EXPENTRY AddMonitorData(MONITORINFO *pNewMonitor);
  1241. APIRET EXPENTRY GetCurrentCfg(ADAPTERINFO *pAdapter,MONITORINFO *pMonitor);
  1242. APIRET EXPENTRY SetCurrentCfg(ADAPTERINFO *pAdapter,MONITORINFO *pMonitor);
  1243. /*
  1244. ** 16 entry point into the VIDEOCFG.DLL
  1245. */
  1246. APIRET VIDEOAPI VCFG16Request(PVOID pIn,ULONG function,PVOID pOut1,PVOID pOut2);
  1247. typedef APIRET (VIDEOAPI  FNCFG16REQUEST)(PVOID, ULONG, PVOID, PVOID);
  1248. typedef FNCFG16REQUEST *PFNCFG16REQUEST;
  1249. /*
  1250. ** functions exported to 16 bit
  1251. */
  1252. #define VCFG_GET_CURRENT_CONFIG 0       //pIn = NULL, pOut1 = pAdapter, pOut2 = pMonitor
  1253. #define   SVGA_DATAFNAME  "svgadata.pmi"
  1254. #define   VIDEO_CFGFNAME  "video.cfg"
  1255. #define   MONITOR_FNAME   "monitor.dif"
  1256. /* INC */
  1257.  
  1258. #ifndef INCL_DOSDEVIOCTL                //@senja: bsedev.h can't be used by vvid
  1259. #ifndef BSEDEV_INCLUDED                 //don't define if bsedev already included
  1260. #define SCREENDD_SVGA_ID                0x08    /* Get SVGA info IOCTL */
  1261. #define SCREENDD_SVGA_OEM               0x09    /* Get OEM info IOCTL */
  1262. #define SCREENDD_CATEGORY               0x80
  1263. #define SCREENDD_NAME                   "SCREEN$"
  1264.                                            /* SCREENDD_SVGA_ID */
  1265. typedef struct _OEMSVGAINFO { /* */
  1266.         USHORT AdapterType;
  1267.         USHORT ChipType;
  1268.         ULONG  Memory;
  1269. } OEMSVGAINFO;
  1270.                                            /* SCREENDD_SVGA_OEM */
  1271. typedef struct _OEMINFO {    /* */
  1272.         ULONG  OEMLength;
  1273.         USHORT Manufacturer;
  1274.         ULONG  ManufacturerData;
  1275. } OEMINFO;
  1276. #endif
  1277. #endif
  1278.