Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

558 lines
19 KiB

  1. /*==========================================================================;
  2. *
  3. * Copyright (C) 1997 Microsoft Corporation. All Rights Reserved.
  4. *
  5. * File: ddkmmini.h
  6. * Content: Mini VDD support for DirectDraw
  7. *@@BEGIN_MSINTERNAL
  8. * History:
  9. * Date By Reason
  10. * ==== == ======
  11. * 31-jan-97 scottm initial implementation
  12. *@@END_MSINTERNAL
  13. *
  14. ***************************************************************************/
  15. #ifndef __DDKMMINI_INCLUDED__
  16. #define __DDKMMINI_INCLUDED__
  17. /*============================================================================
  18. *
  19. * DDHAL table filled in by the Mini VDD and called by DirectDraw
  20. *
  21. *==========================================================================*/
  22. typedef DWORD (* MINIPROC)(VOID);
  23. typedef struct _DDMINIVDDTABLE {
  24. DWORD dwMiniVDDContext;
  25. MINIPROC vddGetIRQInfo;
  26. MINIPROC vddIsOurIRQ;
  27. MINIPROC vddEnableIRQ;
  28. MINIPROC vddSkipNextField;
  29. MINIPROC vddBobNextField;
  30. MINIPROC vddSetState;
  31. MINIPROC vddLock;
  32. MINIPROC vddFlipOverlay;
  33. MINIPROC vddFlipVideoPort;
  34. MINIPROC vddGetPolarity;
  35. MINIPROC vddReserved1;
  36. MINIPROC vddGetCurrentAutoflip;
  37. MINIPROC vddGetPreviousAutoflip;
  38. MINIPROC vddTransfer;
  39. MINIPROC vddGetTransferStatus;
  40. } DDMINIVDDTABLE;
  41. typedef DDMINIVDDTABLE *LPDDMINIVDDTABLE;
  42. /*============================================================================
  43. *
  44. * MDL structure for handling pagelocked memory. This is copied from WDM.H
  45. *
  46. *==========================================================================*/
  47. typedef struct _MDL {
  48. struct _MDL *MdlNext;
  49. short MdlSize;
  50. short MdlFlags;
  51. struct _EPROCESS *Process;
  52. ULONG *lpMappedSystemVa;
  53. ULONG *lpStartVa;
  54. ULONG ByteCount;
  55. ULONG ByteOffset;
  56. } MDL;
  57. typedef MDL *PMDL;
  58. #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
  59. #define MDL_PAGES_LOCKED 0x0002
  60. #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
  61. #define MDL_ALLOCATED_FIXED_SIZE 0x0008
  62. #define MDL_PARTIAL 0x0010
  63. #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
  64. #define MDL_IO_PAGE_READ 0x0040
  65. #define MDL_WRITE_OPERATION 0x0080
  66. #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
  67. #define MDL_LOCK_HELD 0x0200
  68. #define MDL_SCATTER_GATHER_VA 0x0400
  69. #define MDL_IO_SPACE 0x0800
  70. #define MDL_NETWORK_HEADER 0x1000
  71. #define MDL_MAPPING_CAN_FAIL 0x2000
  72. #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
  73. #define MDL_64_BIT_VA 0x8000
  74. #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
  75. MDL_PAGES_LOCKED | \
  76. MDL_SOURCE_IS_NONPAGED_POOL | \
  77. MDL_PARTIAL_HAS_BEEN_MAPPED | \
  78. MDL_PARENT_MAPPED_SYSTEM_VA | \
  79. MDL_LOCK_HELD | \
  80. MDL_SYSTEM_VA | \
  81. MDL_IO_SPACE )
  82. typedef DWORD *PKEVENT;
  83. /*============================================================================
  84. *
  85. * Structures maintained by DirectDraw
  86. *
  87. *==========================================================================*/
  88. //
  89. // Data for every kernel mode surface
  90. //
  91. typedef struct _DDSURFACEDATA {
  92. DWORD dwSize; // Structure size
  93. DWORD ddsCaps; // Ring 3 creation caps
  94. DWORD dwSurfaceOffset; // Offset in frame buffer of surface
  95. DWORD fpLockPtr; // Surface lock ptr
  96. DWORD dwWidth; // Surface width
  97. DWORD dwHeight; // Surface height
  98. LONG lPitch; // Surface pitch
  99. DWORD dwOverlayFlags; // DDOVER_XX flags
  100. DWORD dwOverlayOffset; // Offset in frame buffer of overlay
  101. DWORD dwOverlaySrcWidth; // Src width of overlay
  102. DWORD dwOverlaySrcHeight; // Src height of overlay
  103. DWORD dwOverlayDestWidth; // Dest width of overlay
  104. DWORD dwOverlayDestHeight; // Dest height of overlay
  105. DWORD dwVideoPortId; // ID of video port (-1 if not connected to a video port)
  106. ULONG pInternal1; // Private
  107. ULONG pInternal2; // Private
  108. ULONG pInternal3; // Private
  109. DWORD dwFormatFlags;
  110. DWORD dwFormatFourCC;
  111. DWORD dwFormatBitCount;
  112. DWORD dwRBitMask;
  113. DWORD dwGBitMask;
  114. DWORD dwBBitMask;
  115. DWORD dwSurfInternalFlags; // Private internal flags
  116. DWORD dwIndex; // Private
  117. DWORD dwRefCnt; // Private
  118. DWORD dwDriverReserved1; // Reserved for the HAL/Mini VDD
  119. DWORD dwDriverReserved2; // Reserved for the HAL/Mini VDD
  120. DWORD dwDriverReserved3; // Reserved for the HAL/Mini VDD
  121. } DDSURFACEDATA;
  122. typedef DDSURFACEDATA * LPDDSURFACEDATA;
  123. //
  124. // Data for every kernel mode video port
  125. //
  126. typedef struct DDVIDEOPORTDATA {
  127. DWORD dwSize; // Structure size
  128. DWORD dwVideoPortId; // ID of video port (0 - MaxVideoPorts-1)
  129. DWORD dwVPFlags; // Offset in frame buffer of surface
  130. DWORD dwOriginOffset; // Start address relative to surface
  131. DWORD dwHeight; // Height of total video region (per field)
  132. DWORD dwVBIHeight; // Height of VBI region (per field)
  133. DWORD dwDriverReserved1; // Reserved for the HAL/Mini VDD
  134. DWORD dwDriverReserved2; // Reserved for the HAL/Mini VDD
  135. DWORD dwDriverReserved3; // Reserved for the HAL/Mini VDD
  136. } DDVIDEOPORTDATA;
  137. typedef DDVIDEOPORTDATA *LPDDVIDEOPORTDATA;
  138. /*============================================================================
  139. *
  140. * Structures used to communicate with the Mini VDD
  141. *
  142. *==========================================================================*/
  143. // Output from vddGetIRQInfo
  144. typedef struct _DDGETIRQINFO {
  145. DWORD dwSize;
  146. DWORD dwFlags;
  147. DWORD dwIRQNum;
  148. } DDGETIRQINFO;
  149. #define IRQINFO_HANDLED 0x01 // Mini VDD is managing IRQ
  150. #define IRQINFO_NOTHANDLED 0x02 // Mini VDD wants VDD to manage the IRQ
  151. #define IRQINFO_NODISABLEFORDOSBOX 0x04 // DDraw should not tell mini VDD to disable IRQs when DOS boxes
  152. // occur because they might still be able to operate in this mode
  153. // Input to vddEnableIRQ
  154. typedef struct _DDENABLEIRQINFO {
  155. DWORD dwSize;
  156. DWORD dwIRQSources;
  157. DWORD dwLine;
  158. DWORD IRQCallback; // Mini VDD calls this when IRQ happens if they are managing the IRQ
  159. DWORD dwContext; // Context to be specified in EBX when IRQCallback is called
  160. } DDENABLEIRQINFO;
  161. // Input to vddFlipVideoPort
  162. typedef struct _DDFLIPVIDEOPORTINFO {
  163. DWORD dwSize;
  164. DWORD lpVideoPortData;
  165. DWORD lpCurrentSurface;
  166. DWORD lpTargetSurface;
  167. DWORD dwFlipVPFlags;
  168. } DDFLIPVIDEOPORTINFO;
  169. // Input to vddFlipOverlay
  170. typedef struct _DDFLIPOVERLAYINFO {
  171. DWORD dwSize;
  172. DWORD lpCurrentSurface;
  173. DWORD lpTargetSurface;
  174. DWORD dwFlags;
  175. } DDFLIPOVERLAYINFO;
  176. // Input to vddSetState
  177. typedef struct _DDSTATEININFO {
  178. DWORD dwSize;
  179. DWORD lpSurfaceData;
  180. DWORD lpVideoPortData;
  181. } DDSTATEININFO;
  182. // Output from vddSetState
  183. typedef struct _DDSTATEOUTINFO {
  184. DWORD dwSize;
  185. DWORD dwSoftwareAutoflip;
  186. DWORD dwSurfaceIndex;
  187. DWORD dwVBISurfaceIndex;
  188. } DDSTATEOUTINFO;
  189. // Input to vddGetPolarity
  190. typedef struct _DDPOLARITYININFO {
  191. DWORD dwSize;
  192. DWORD lpVideoPortData;
  193. } DDPOLARITYININFO;
  194. // Output from vddGetPolarity
  195. typedef struct _DDPOLARITYOUTINFO {
  196. DWORD dwSize;
  197. DWORD bPolarity;
  198. } DDPOLARITYOUTINFO;
  199. // Input to vddLock
  200. typedef struct _DDLOCKININFO {
  201. DWORD dwSize;
  202. DWORD lpSurfaceData;
  203. } DDLOCKININFO;
  204. // Output from vddLock
  205. typedef struct _DDLOCKOUTINFO {
  206. DWORD dwSize;
  207. DWORD dwSurfacePtr;
  208. } DDLOCKOUTINFO;
  209. // Input to vddBobNextField
  210. typedef struct _DDBOBINFO {
  211. DWORD dwSize;
  212. DWORD lpSurface;
  213. } DDBOBINFO;
  214. // Input to vddSkipNextField
  215. typedef struct _DDSKIPINFO {
  216. DWORD dwSize;
  217. DWORD lpVideoPortData;
  218. DWORD dwSkipFlags;
  219. } DDSKIPINFO;
  220. // Input to vddSetSkipPattern
  221. typedef struct _DDSETSKIPINFO {
  222. DWORD dwSize;
  223. DWORD lpVideoPortData;
  224. DWORD dwPattern;
  225. DWORD dwPatternSize;
  226. } DDSETSKIPINFO;
  227. // Input to vddGetCurrent/PreviousAutoflip
  228. typedef struct _DDGETAUTOFLIPININFO {
  229. DWORD dwSize;
  230. DWORD lpVideoPortData;
  231. } DDGETAUTOFLIPININFO;
  232. // Output from vddGetCurrent/PreviousAutoflip
  233. typedef struct _DDGETAUTOFLIPOUTINFO {
  234. DWORD dwSize;
  235. DWORD dwSurfaceIndex;
  236. DWORD dwVBISurfaceIndex;
  237. } DDGETAUTOFLIPOUTINFO;
  238. // Input to vddTransfer
  239. typedef struct _DDTRANSFERININFO {
  240. DWORD dwSize;
  241. DWORD lpSurfaceData;
  242. DWORD dwStartLine;
  243. DWORD dwEndLine;
  244. DWORD dwTransferID;
  245. DWORD dwTransferFlags;
  246. PMDL lpDestMDL;
  247. } DDTRANSFERININFO;
  248. // Input to vddTransfer
  249. typedef struct _DDTRANSFEROUTINFO {
  250. DWORD dwSize;
  251. DWORD dwBufferPolarity;
  252. } DDTRANSFEROUTINFO;
  253. // Input to vddGetTransferStatus
  254. typedef struct _DDGETTRANSFERSTATUSOUTINFO {
  255. DWORD dwSize;
  256. DWORD dwTransferID;
  257. } DDGETTRANSFERSTATUSOUTINFO;
  258. //@@BEGIN_MSINTERNAL
  259. /*
  260. * The following IRQ flags are duplicated in DDKERNEL.H. Any changes must
  261. * be made in both places!!!
  262. */
  263. //@@END_MSINTERNAL
  264. // IRQ source flags
  265. #define DDIRQ_DISPLAY_VSYNC 0x00000001l
  266. #define DDIRQ_BUSMASTER 0x00000002l
  267. #define DDIRQ_VPORT0_VSYNC 0x00000004l
  268. #define DDIRQ_VPORT0_LINE 0x00000008l
  269. #define DDIRQ_VPORT1_VSYNC 0x00000010l
  270. #define DDIRQ_VPORT1_LINE 0x00000020l
  271. #define DDIRQ_VPORT2_VSYNC 0x00000040l
  272. #define DDIRQ_VPORT2_LINE 0x00000080l
  273. #define DDIRQ_VPORT3_VSYNC 0x00000100l
  274. #define DDIRQ_VPORT3_LINE 0x00000200l
  275. #define DDIRQ_VPORT4_VSYNC 0x00000400l
  276. #define DDIRQ_VPORT4_LINE 0x00000800l
  277. #define DDIRQ_VPORT5_VSYNC 0x00001000l
  278. #define DDIRQ_VPORT5_LINE 0x00002000l
  279. #define DDIRQ_VPORT6_VSYNC 0x00004000l
  280. #define DDIRQ_VPORT6_LINE 0x00008000l
  281. #define DDIRQ_VPORT7_VSYNC 0x00010000l
  282. #define DDIRQ_VPORT7_LINE 0x00020000l
  283. #define DDIRQ_VPORT8_VSYNC 0x00040000l
  284. #define DDIRQ_VPORT8_LINE 0x00080000l
  285. #define DDIRQ_VPORT9_VSYNC 0x00010000l
  286. #define DDIRQ_VPORT9_LINE 0x00020000l
  287. #define DDIRQ_MISCELLANOUS 0x80000000l
  288. // SkipNextField flags
  289. #define DDSKIP_SKIPNEXT 1
  290. #define DDSKIP_ENABLENEXT 2
  291. //@@BEGIN_MSINTERNAL
  292. /*
  293. * The following flip flags are duplicated in DVP.H. Any changes must
  294. * be made in both places!!!
  295. */
  296. //@@END_MSINTERNAL
  297. // Flip VP flags
  298. #define DDVPFLIP_VIDEO 0x00000001l
  299. #define DDVPFLIP_VBI 0x00000002l
  300. //@@BEGIN_MSINTERNAL
  301. /*
  302. * The following flags correspond to the DDADDBUFF_XXXX flags defined
  303. * in DDKMAPI.H. Please keep these in sync!
  304. */
  305. //@@END_MSINTERNAL
  306. #define DDTRANSFER_SYSTEMMEMORY 0x00000001
  307. #define DDTRANSFER_NONLOCALVIDMEM 0x00000002
  308. #define DDTRANSFER_INVERT 0x00000004
  309. #define DDTRANSFER_CANCEL 0x00000080
  310. #define DDTRANSFER_HALFLINES 0x00000100
  311. //@@BEGIN_MSINTERNAL
  312. #define MAX_DDKM_DEVICES 9
  313. /*
  314. * The following flags are passed to UpdateVPInfo by ring 3 DDraw
  315. */
  316. #define DDKMVP_CREATE 0x0001 // Are creating video port
  317. #define DDKMVP_RELEASE 0x0002 // Are releasing video port
  318. #define DDKMVP_UPDATE 0x0004 // Are updating the video port
  319. #define DDKMVP_ON 0x0008 // Video port is on
  320. #define DDKMVP_AUTOFLIP 0x0010 // Autoflipping should be performed in software
  321. #define DDKMVP_AUTOFLIP_VBI 0x0020 // Autoflipping VBI should be performed in software
  322. #define DDKMVP_NOIRQ 0x0040 // VP will not generate VSYNC IRQ
  323. #define DDKMVP_NOSKIP 0x0080 // VP cannot skip fields
  324. #define DDKMVP_HALFLINES 0x0100 // Due to half lines, even field data is shifted down one line
  325. /*
  326. * The following internal flags are stored in KMVPEDATA.dwInternalFlags
  327. * and maintain the internal state information.
  328. */
  329. #define DDVPIF_ON 0x0001 // The video port is on
  330. #define DDVPIF_AUTOFLIP 0x0002 // Video data is autoflipped using IRQ
  331. #define DDVPIF_AUTOFLIP_VBI 0x0004 // VBI data is autoflipped using IRQ
  332. #define DDVPIF_BOB 0x0008 // Video data using bob via the IRQ
  333. #define DDVPIF_NOIRQ 0x0010 // VP will not generate VSYNC IRQ
  334. #define DDVPIF_NOSKIP 0x0020 // VP cannot skip fields
  335. #define DDVPIF_CAPTURING 0x0040 // VP has capture buffers in queue
  336. #define DDVPIF_NEW_STATE 0x0080 // A new state change has been posted
  337. #define DDVPIF_SKIPPED_LAST 0x0100 // The previous field was skipped - VP needs restoring
  338. #define DDVPIF_SKIP_SET 0x0200 // dwStartSkip contains valid data needs restoring
  339. #define DDVPIF_NEXT_SKIP_SET 0x0400 // dwNextSkip contains valid data
  340. #define DDVPIF_FLIP_NEXT 0x0800 // This video field was not flipped due to interleaving
  341. #define DDVPIF_FLIP_NEXT_VBI 0x1000 // This VBI field was not flipped due to interleaving
  342. #define DDVPIF_VBI_INTERLEAVED 0x2000 // Is the VBI data interleaved?
  343. #define DDVPIF_HALFLINES 0x4000 // Due to half lines, even field data is shifted down one line
  344. #define DDVPIF_DISABLEAUTOFLIP 0x8000 // Overlay autolfipping is temporarily disabled
  345. /*
  346. * Device capabilities
  347. */
  348. #define DDKMDF_IN_USE 0x00000001 // Can bob while interleaved
  349. #define DDKMDF_CAN_BOB_INTERLEAVED 0x00000002 // Can bob while interleaved
  350. #define DDKMDF_CAN_BOB_NONINTERLEAVED 0x00000004 // Can bob while non-interleaved
  351. #define DDKMDF_NOSTATE 0x00000008 // No support for switching from bob/weave
  352. #define DDKMDF_TRANSITION 0x00000010 // Currently in a full-screen DOS box or res-change
  353. #define DDKMDF_STARTDOSBOX 0x00000020 // Interim flag required to make power downs behave like DOS boxes
  354. #define DDKMDF_NODISABLEIRQ 0x00000040 // DDraw should not tell mini VDD to disable IRQs when DOS boxes
  355. // occur because they might still be able to operate in this mode
  356. /*
  357. * Internal flags used to describe the VPE actions at IRQ time
  358. */
  359. #define ACTION_BOB 0x0001
  360. #define ACTION_FLIP 0x0002
  361. #define ACTION_FLIP_VBI 0x0004
  362. #define ACTION_STATE 0x0008
  363. #define ACTION_BUSMASTER 0x0010
  364. /*
  365. * Internal surface flags
  366. */
  367. #define DDKMSF_STATE_SET 0x00000001
  368. #define DDKMSF_TRANSFER 0x00000002
  369. typedef DWORD (* MINIPROC)(VOID);
  370. /*
  371. * Info about each registered event
  372. */
  373. #ifndef LPDD_NOTIFYCALLBACK
  374. typedef DWORD (FAR PASCAL *LPDD_NOTIFYCALLBACK)(DWORD dwFlags, PVOID pContext, DWORD dwParam1, DWORD dwParam2);
  375. #endif
  376. typedef struct _KMEVENTNODE {
  377. DWORD dwEvents;
  378. LPDD_NOTIFYCALLBACK pfnCallback;
  379. DWORD dwParam1;
  380. DWORD dwParam2;
  381. ULONG pContext;
  382. struct _KMEVENTNODE *lpNext;
  383. } KMEVENTNODE;
  384. typedef KMEVENTNODE *LPKMEVENTNODE;
  385. /*
  386. * Info about each allocated handle
  387. */
  388. typedef struct _KMHANDLENODE {
  389. DWORD dwHandle;
  390. LPDD_NOTIFYCALLBACK pfnCallback;
  391. ULONG pContext;
  392. struct _KMHANDLENODE *lpNext;
  393. } KMHANDLENODE;
  394. typedef KMHANDLENODE *LPKMHANDLENODE;
  395. typedef struct KMCAPTUREBUFF {
  396. DWORD dwBuffFlags;
  397. PMDL pBuffMDL;
  398. PKEVENT pBuffKEvent;
  399. ULONG *lpBuffInfo;
  400. DWORD dwInternalBuffFlags;
  401. LPDDSURFACEDATA lpBuffSurface;
  402. } KMCAPTUREBUFF;
  403. typedef KMCAPTUREBUFF *LPKMCAPTUREBUFF;
  404. #define DDBUFF_INUSE 0x0001
  405. #define DDBUFF_READY 0x0002
  406. #define DDBUFF_WAITING 0x0004
  407. /*
  408. * Info about each capture stream
  409. */
  410. #define DDKM_MAX_CAP_BUFFS 10
  411. typedef struct _KMCAPTURENODE {
  412. DWORD dwHandle;
  413. DWORD dwStartLine;
  414. DWORD dwEndLine;
  415. DWORD dwCaptureEveryNFields;
  416. DWORD dwCaptureCountDown;
  417. LPDD_NOTIFYCALLBACK pfnCaptureClose;
  418. ULONG pContext;
  419. KMCAPTUREBUFF kmcapQueue[DDKM_MAX_CAP_BUFFS];
  420. DWORD bUsed;
  421. DWORD dwTop;
  422. DWORD dwBottom;
  423. DWORD dwPrivateFlags;
  424. DWORD dwTheTransferId;
  425. struct _KMCAPTURENODE *lpNext;
  426. } KMCAPTURENODE;
  427. typedef KMCAPTURENODE *LPKMCAPTURENODE;
  428. #define DDKMCAPT_VBI 0x0001
  429. #define DDKMCAPT_VIDEO 0x0002
  430. /*
  431. * Info that is needed of each video port
  432. */
  433. typedef struct _KMVPEDATA {
  434. DDVIDEOPORTDATA ddvpData; // Video port data
  435. DWORD dwInternalFlags; // DDVPIF_xxx flags
  436. DWORD dwNumAutoflip; // Number of surfaces being autoflipped
  437. DWORD dwNumVBIAutoflip; // Number of VBI surfaces being autoflipped
  438. DWORD dwSurfaces[10]; // Surface receiving the data (up to 10 autoflipping)
  439. DWORD dwVBISurfaces[10]; // Surface receiving VBI data (up to 10 autoflipping)
  440. DWORD dwIRQCnt_VPSYNC; // VP VSYNC IRQ usage cnt
  441. DWORD dwIRQCnt_VPLine; // VP line IRQ usage cnt
  442. DWORD dwIRQLine; // Line # of line IRQ
  443. DWORD dwCurrentField; // Current field number
  444. DWORD dwStartSkip; // Next field to skip
  445. DWORD dwNextSkip; // Field to skip after dwStartSkip
  446. DWORD dwActions; // Actions required by IRQ logic
  447. DWORD dwCurrentBuffer; // Current buffer (for autoflipping)
  448. DWORD dwCurrentVBIBuffer; // Current VBI buffer (for autoflipping)
  449. DWORD dwNewState; // For handling state changes posted on a certain field
  450. DWORD dwStateStartField; // Field on which to start a new state change
  451. DWORD dwRefCnt; // Reference count
  452. LPKMHANDLENODE lpHandleList;
  453. LPKMCAPTURENODE lpCaptureList;
  454. DWORD dwCaptureCnt;
  455. } KMVPEDATA;
  456. typedef KMVPEDATA *LPKMVPEDATA;
  457. /*
  458. * Info that is needed of each VGA
  459. */
  460. typedef struct _KMSTATEDATA {
  461. DWORD dwDeviceFlags; // Device flags
  462. ULONG pContext; // Passed to Mini VDD
  463. DWORD dwListHandle; // List of surface handles
  464. LPKMVPEDATA lpVideoPort; // Array containing video port info
  465. DWORD dwHigh; // For error checking
  466. DWORD dwLow; // For error checking
  467. DWORD dwMaxVideoPorts; // Number of video ports supported by device
  468. DWORD dwNumVPInUse; // Number of video ports currently in use
  469. DWORD dwIRQHandle; // IRQ Handle (if we are managing the IRQ)
  470. DWORD dwIRQFlags; // Sources, etc.
  471. DWORD dwIRQCnt_VSYNC; // # times graphics VSYNC IRQ is requested
  472. DWORD dwEventFlags; // Which IRQs have registered notification
  473. DWORD dwIRQEvents; // Which IRQs occurred that require event notification
  474. DWORD dwRefCnt;
  475. DWORD dwDOSBoxEvent;
  476. DWORD dwCaps;
  477. DWORD dwIRQCaps;
  478. LPKMEVENTNODE lpEventList;
  479. LPKMHANDLENODE lpHandleList;
  480. MINIPROC pfnGetIRQInfo;
  481. MINIPROC pfnIsOurIRQ;
  482. MINIPROC pfnEnableIRQ;
  483. MINIPROC pfnSkipNextField;
  484. MINIPROC pfnBobNextField;
  485. MINIPROC pfnSetState;
  486. MINIPROC pfnLock;
  487. MINIPROC pfnFlipOverlay;
  488. MINIPROC pfnFlipVideoPort;
  489. MINIPROC pfnGetPolarity;
  490. MINIPROC pfnSetSkipPattern;
  491. MINIPROC pfnGetCurrentAutoflip;
  492. MINIPROC pfnGetPreviousAutoflip;
  493. MINIPROC pfnTransfer;
  494. MINIPROC pfnGetTransferStatus;
  495. } KMSTATEDATA;
  496. typedef KMSTATEDATA *LPKMSTATEDATA;
  497. //@@END_MSINTERNAL
  498. #endif