video.h 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748
  1. /*
  2. * video.h
  3. *
  4. * Video port and miniport driver interface
  5. *
  6. * This file is part of the w32api package.
  7. *
  8. * Contributors:
  9. * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10. *
  11. * THIS SOFTWARE IS NOT COPYRIGHTED
  12. *
  13. * This source code is offered for use in the public domain. You may
  14. * use, modify or distribute it freely.
  15. *
  16. * This code is distributed in the hope that it will be useful but
  17. * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18. * DISCLAIMED. This includes but is not limited to warranties of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20. *
  21. */
  22. #pragma once
  23. #define __VIDEO_H__
  24. #include "ntddvdeo.h"
  25. #include "videoagp.h"
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. #ifndef _NTOSDEF_
  30. #ifdef PAGED_CODE
  31. #undef PAGED_CODE
  32. #endif
  33. #if defined(_MSC_VER)
  34. #define ALLOC_PRAGMA 1
  35. #endif
  36. #if defined(_VIDEOPORT_)
  37. #define VPAPI
  38. #else
  39. #define VPAPI DECLSPEC_IMPORT
  40. #endif
  41. #if DBG
  42. #define PAGED_CODE() \
  43. if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) { \
  44. VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
  45. ASSERT(FALSE); \
  46. }
  47. #else
  48. #define PAGED_CODE()
  49. #endif /* DBG */
  50. ULONG
  51. NTAPI
  52. DriverEntry(
  53. PVOID Context1,
  54. PVOID Context2);
  55. #else
  56. #define VPAPI
  57. #endif /* _NTOSDEF_ */
  58. #if DBG
  59. #define VideoDebugPrint(x) VideoPortDebugPrint x
  60. #else
  61. #define VideoDebugPrint(x)
  62. #endif
  63. #define GET_VIDEO_PHYSICAL_ADDRESS(scatterList, \
  64. VirtualAddress, \
  65. InputBuffer, \
  66. pLength, \
  67. Address) \
  68. do { \
  69. ULONG_PTR byteOffset; \
  70. \
  71. byteOffset = (PCHAR) VirtualAddress - (PCHAR)InputBuffer; \
  72. while (byteOffset >= scatterList->Length) { \
  73. byteOffset -= scatterList->Length; \
  74. scatterList++; \
  75. } \
  76. *pLength = scatterList->Length - byteOffset; \
  77. Address = (ULONG_PTR) (scatterList->PhysicalAddress + byteOffset); \
  78. } while (0)
  79. #define GET_VIDEO_SCATTERGATHER(ppDma) (**(PVRB_SG **)ppDma)
  80. /* VIDEO_ACCESS_RANGE.RangePassive */
  81. #define VIDEO_RANGE_PASSIVE_DECODE 1
  82. #define VIDEO_RANGE_10_BIT_DECODE 2
  83. #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO FIELD_OFFSET(VIDEO_PORT_CONFIG_INFO, Master)
  84. #define SIZE_OF_WXP_VIDEO_PORT_CONFIG_INFO sizeof(VIDEO_PORT_CONFIG_INFO)
  85. #define SET_USER_EVENT 0x01
  86. #define SET_DISPLAY_EVENT 0x02
  87. #define EVENT_TYPE_MASK 1
  88. #define SYNCHRONIZATION_EVENT 0
  89. #define NOTIFICATION_EVENT 1
  90. #define INITIAL_EVENT_STATE_MASK 2
  91. #define INITIAL_EVENT_NOT_SIGNALED 0
  92. #define INITIAL_EVENT_SIGNALED 2
  93. #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF
  94. #define VIDEO_INVALID_CHILD_ID 0xFFFFFFFF
  95. #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, HwStartDma)
  96. #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, Reserved)
  97. #define SIZE_OF_WXP_VIDEO_HW_INITIALIZATION_DATA (SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA + sizeof(ULONG))
  98. #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
  99. #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
  100. #define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1
  101. #define VIDEO_PORT_I2C_INTERFACE_VERSION_2 2
  102. #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
  103. #define VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE_VERSION_1 1
  104. #define VIDEO_PORT_DEBUG_REPORT_INTERFACE_VERSION_1 1
  105. /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
  106. #define VIDEO_MEMORY_SPACE_MEMORY 0x00
  107. #define VIDEO_MEMORY_SPACE_IO 0x01
  108. #define VIDEO_MEMORY_SPACE_USER_MODE 0x02
  109. #define VIDEO_MEMORY_SPACE_DENSE 0x04
  110. #define VIDEO_MEMORY_SPACE_P6CACHE 0x08
  111. /* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
  112. #define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE
  113. #define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
  114. #define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME
  115. #define DEVICE_VGA_ENABLED 1
  116. /* VideoPortCheckForDeviceExistence.Flags constants */
  117. #define CDE_USE_SUBSYSTEM_IDS 0x00000001
  118. #define CDE_USE_REVISION 0x00000002
  119. #define BUGCHECK_DATA_SIZE_RESERVED 48
  120. #define VIDEO_DEBUG_REPORT_MAX_SIZE 0x8000
  121. typedef LONG VP_STATUS, *PVP_STATUS;
  122. typedef ULONG DMA_EVENT_FLAGS;
  123. typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK;
  124. typedef struct _VIDEO_DEBUG_REPORT *PVIDEO_DEBUG_REPORT;
  125. typedef struct __DMA_PARAMETERS *PDMA;
  126. typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER;
  127. typedef PVOID
  128. (NTAPI *PVIDEO_PORT_GET_PROC_ADDRESS)(
  129. IN PVOID HwDeviceExtension,
  130. IN PUCHAR FunctionName);
  131. typedef struct _VIDEO_PORT_CONFIG_INFO {
  132. ULONG Length;
  133. ULONG SystemIoBusNumber;
  134. INTERFACE_TYPE AdapterInterfaceType;
  135. ULONG BusInterruptLevel;
  136. ULONG BusInterruptVector;
  137. KINTERRUPT_MODE InterruptMode;
  138. ULONG NumEmulatorAccessEntries;
  139. PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries;
  140. ULONG_PTR EmulatorAccessEntriesContext;
  141. PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress;
  142. ULONG VdmPhysicalVideoMemoryLength;
  143. ULONG HardwareStateSize;
  144. ULONG DmaChannel;
  145. ULONG DmaPort;
  146. UCHAR DmaShareable;
  147. UCHAR InterruptShareable;
  148. BOOLEAN Master;
  149. DMA_WIDTH DmaWidth;
  150. DMA_SPEED DmaSpeed;
  151. BOOLEAN bMapBuffers;
  152. BOOLEAN NeedPhysicalAddresses;
  153. BOOLEAN DemandMode;
  154. ULONG MaximumTransferLength;
  155. ULONG NumberOfPhysicalBreaks;
  156. BOOLEAN ScatterGather;
  157. ULONG MaximumScatterGatherChunkSize;
  158. PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress;
  159. PWSTR DriverRegistryPath;
  160. ULONGLONG SystemMemorySize;
  161. } VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;
  162. typedef VP_STATUS
  163. (NTAPI *PVIDEO_HW_FIND_ADAPTER)(
  164. IN PVOID HwDeviceExtension,
  165. IN PVOID HwContext,
  166. IN PWSTR ArgumentString,
  167. IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo,
  168. OUT PUCHAR Again);
  169. typedef BOOLEAN
  170. (NTAPI *PVIDEO_HW_INITIALIZE)(
  171. IN PVOID HwDeviceExtension);
  172. typedef BOOLEAN
  173. (NTAPI *PVIDEO_HW_INTERRUPT)(
  174. IN PVOID HwDeviceExtension);
  175. typedef struct _VIDEO_ACCESS_RANGE {
  176. PHYSICAL_ADDRESS RangeStart;
  177. ULONG RangeLength;
  178. UCHAR RangeInIoSpace;
  179. UCHAR RangeVisible;
  180. UCHAR RangeShareable;
  181. UCHAR RangePassive;
  182. } VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
  183. typedef VOID
  184. (NTAPI *PVIDEO_HW_LEGACYRESOURCES)(
  185. IN ULONG VendorId,
  186. IN ULONG DeviceId,
  187. IN OUT PVIDEO_ACCESS_RANGE *LegacyResourceList,
  188. IN OUT PULONG LegacyResourceCount);
  189. typedef enum _HW_DMA_RETURN {
  190. DmaAsyncReturn,
  191. DmaSyncReturn
  192. } HW_DMA_RETURN, *PHW_DMA_RETURN;
  193. typedef HW_DMA_RETURN
  194. (NTAPI *PVIDEO_HW_START_DMA)(
  195. PVOID HwDeviceExtension,
  196. PDMA pDma);
  197. typedef struct _VP_SCATTER_GATHER_ELEMENT {
  198. PHYSICAL_ADDRESS Address;
  199. ULONG Length;
  200. ULONG_PTR Reserved;
  201. } VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT;
  202. typedef struct _VP_SCATTER_GATHER_LIST {
  203. ULONG NumberOfElements;
  204. ULONG_PTR Reserved;
  205. VP_SCATTER_GATHER_ELEMENT Elements[0];
  206. } VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST;
  207. typedef VOID
  208. (NTAPI *PEXECUTE_DMA)(
  209. IN PVOID HwDeviceExtension,
  210. IN PVP_DMA_ADAPTER VpDmaAdapter,
  211. IN PVP_SCATTER_GATHER_LIST SGList,
  212. IN PVOID Context);
  213. /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
  214. typedef struct _VIDEO_CHILD_ENUM_INFO {
  215. ULONG Size;
  216. ULONG ChildDescriptorSize;
  217. ULONG ChildIndex;
  218. ULONG ACPIHwId;
  219. PVOID ChildHwDeviceExtension;
  220. } VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO;
  221. /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
  222. typedef enum _VIDEO_CHILD_TYPE {
  223. Monitor = 1,
  224. NonPrimaryChip,
  225. VideoChip,
  226. Other
  227. } VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE;
  228. typedef VP_STATUS
  229. (NTAPI *PVIDEO_HW_GET_CHILD_DESCRIPTOR)(
  230. IN PVOID HwDeviceExtension,
  231. IN PVIDEO_CHILD_ENUM_INFO ChildEnumInfo,
  232. OUT PVIDEO_CHILD_TYPE VideoChildType,
  233. OUT PUCHAR pChildDescriptor,
  234. OUT PULONG UId,
  235. OUT PULONG pUnused);
  236. typedef VP_STATUS
  237. (NTAPI *PVIDEO_HW_POWER_SET)(
  238. IN PVOID HwDeviceExtension,
  239. IN ULONG HwId,
  240. IN PVIDEO_POWER_MANAGEMENT VideoPowerControl);
  241. typedef VP_STATUS
  242. (NTAPI *PVIDEO_HW_POWER_GET)(
  243. IN PVOID HwDeviceExtension,
  244. IN ULONG HwId,
  245. IN OUT PVIDEO_POWER_MANAGEMENT VideoPowerControl);
  246. typedef struct _QUERY_INTERFACE {
  247. CONST GUID *InterfaceType;
  248. USHORT Size;
  249. USHORT Version;
  250. PINTERFACE Interface;
  251. PVOID InterfaceSpecificData;
  252. } QUERY_INTERFACE, *PQUERY_INTERFACE;
  253. typedef VP_STATUS
  254. (NTAPI *PVIDEO_HW_QUERY_INTERFACE)(
  255. IN PVOID HwDeviceExtension,
  256. IN OUT PQUERY_INTERFACE QueryInterface);
  257. typedef VP_STATUS
  258. (NTAPI *PVIDEO_HW_CHILD_CALLBACK)(
  259. PVOID HwDeviceExtension,
  260. PVOID ChildDeviceExtension);
  261. typedef BOOLEAN
  262. (NTAPI *PVIDEO_HW_RESET_HW)(
  263. IN PVOID HwDeviceExtension,
  264. IN ULONG Columns,
  265. IN ULONG Rows);
  266. typedef struct _STATUS_BLOCK {
  267. _ANONYMOUS_UNION union {
  268. VP_STATUS Status;
  269. PVOID Pointer;
  270. } DUMMYUNIONNAME;
  271. ULONG_PTR Information;
  272. } STATUS_BLOCK, *PSTATUS_BLOCK;
  273. typedef struct _VIDEO_REQUEST_PACKET {
  274. ULONG IoControlCode;
  275. PSTATUS_BLOCK StatusBlock;
  276. PVOID InputBuffer;
  277. ULONG InputBufferLength;
  278. PVOID OutputBuffer;
  279. ULONG OutputBufferLength;
  280. } VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;
  281. typedef BOOLEAN
  282. (NTAPI *PVIDEO_HW_START_IO)(
  283. IN PVOID HwDeviceExtension,
  284. IN PVIDEO_REQUEST_PACKET RequestPacket);
  285. typedef VOID
  286. (NTAPI *PVIDEO_HW_TIMER)(
  287. IN PVOID HwDeviceExtension);
  288. typedef VOID
  289. (NTAPI *PVIDEO_WRITE_CLOCK_LINE)(
  290. PVOID HwDeviceExtension,
  291. UCHAR Data);
  292. typedef VOID
  293. (NTAPI *PVIDEO_WRITE_DATA_LINE)(
  294. PVOID HwDeviceExtension,
  295. UCHAR Data);
  296. typedef BOOLEAN
  297. (NTAPI *PVIDEO_READ_CLOCK_LINE)(
  298. PVOID HwDeviceExtension);
  299. typedef BOOLEAN
  300. (NTAPI *PVIDEO_READ_DATA_LINE)(
  301. PVOID HwDeviceExtension);
  302. typedef VOID
  303. (NTAPI *PVIDEO_WAIT_VSYNC_ACTIVE)(
  304. PVOID HwDeviceExtension);
  305. typedef struct _I2C_CALLBACKS {
  306. IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
  307. IN PVIDEO_WRITE_DATA_LINE WriteDataLine;
  308. IN PVIDEO_READ_CLOCK_LINE ReadClockLine;
  309. IN PVIDEO_READ_DATA_LINE ReadDataLine;
  310. } I2C_CALLBACKS, *PI2C_CALLBACKS;
  311. typedef BOOLEAN
  312. (NTAPI *PI2C_START)(
  313. IN PVOID HwDeviceExtension,
  314. IN PI2C_CALLBACKS I2CCallbacks);
  315. typedef BOOLEAN
  316. (NTAPI *PI2C_STOP)(
  317. IN PVOID HwDeviceExtension,
  318. IN PI2C_CALLBACKS I2CCallbacks);
  319. typedef BOOLEAN
  320. (NTAPI *PI2C_WRITE)(
  321. IN PVOID HwDeviceExtension,
  322. IN PI2C_CALLBACKS I2CCallbacks,
  323. IN PUCHAR Buffer,
  324. IN ULONG Length);
  325. typedef BOOLEAN
  326. (NTAPI *PI2C_READ)(
  327. IN PVOID HwDeviceExtension,
  328. IN PI2C_CALLBACKS I2CCallbacks,
  329. OUT PUCHAR Buffer,
  330. IN ULONG Length);
  331. typedef struct _VIDEO_I2C_CONTROL {
  332. IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
  333. IN PVIDEO_WRITE_DATA_LINE WriteDataLine;
  334. IN PVIDEO_READ_CLOCK_LINE ReadClockLine;
  335. IN PVIDEO_READ_DATA_LINE ReadDataLine;
  336. IN ULONG I2CDelay;
  337. } VIDEO_I2C_CONTROL, *PVIDEO_I2C_CONTROL;
  338. typedef BOOLEAN
  339. (NTAPI *PI2C_START_2)(
  340. IN PVOID HwDeviceExtension,
  341. IN PVIDEO_I2C_CONTROL I2CControl);
  342. typedef BOOLEAN
  343. (NTAPI *PI2C_STOP_2)(
  344. IN PVOID HwDeviceExtension,
  345. IN PVIDEO_I2C_CONTROL I2CControl);
  346. typedef BOOLEAN
  347. (NTAPI *PI2C_WRITE_2)(
  348. IN PVOID HwDeviceExtension,
  349. IN PVIDEO_I2C_CONTROL I2CControl,
  350. IN PUCHAR Buffer,
  351. IN ULONG Length);
  352. typedef BOOLEAN
  353. (NTAPI *PI2C_READ_2)(
  354. IN PVOID HwDeviceExtension,
  355. IN PVIDEO_I2C_CONTROL I2CControl,
  356. OUT PUCHAR Buffer,
  357. IN ULONG Length,
  358. IN BOOLEAN EndOfRead);
  359. typedef struct _INT10_BIOS_ARGUMENTS {
  360. ULONG Eax;
  361. ULONG Ebx;
  362. ULONG Ecx;
  363. ULONG Edx;
  364. ULONG Esi;
  365. ULONG Edi;
  366. ULONG Ebp;
  367. USHORT SegDs;
  368. USHORT SegEs;
  369. } INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS;
  370. typedef VP_STATUS
  371. (NTAPI *PINT10_CALL_BIOS)(
  372. IN PVOID Context,
  373. IN OUT PINT10_BIOS_ARGUMENTS BiosArguments);
  374. typedef VP_STATUS
  375. (NTAPI *PINT10_ALLOCATE_BUFFER)(
  376. IN PVOID Context,
  377. OUT PUSHORT Seg,
  378. OUT PUSHORT Off,
  379. IN OUT PULONG Length);
  380. typedef VP_STATUS
  381. (NTAPI *PINT10_FREE_BUFFER)(
  382. IN PVOID Context,
  383. IN USHORT Seg,
  384. IN USHORT Off);
  385. typedef VP_STATUS
  386. (NTAPI *PINT10_READ_MEMORY)(
  387. IN PVOID Context,
  388. IN USHORT Seg,
  389. IN USHORT Off,
  390. OUT PVOID Buffer,
  391. IN ULONG Length);
  392. typedef VP_STATUS
  393. (NTAPI *PINT10_WRITE_MEMORY)(
  394. IN PVOID Context,
  395. IN USHORT Seg,
  396. IN USHORT Off,
  397. IN PVOID Buffer,
  398. IN ULONG Length);
  399. typedef VP_STATUS
  400. (NTAPI *PROTECT_WC_MEMORY)(
  401. IN PVOID Context,
  402. IN PVOID HwDeviceExtension);
  403. typedef VP_STATUS
  404. (NTAPI *RESTORE_WC_MEMORY)(
  405. IN PVOID Context,
  406. IN PVOID HwDeviceExtension);
  407. typedef enum _VIDEO_DEVICE_DATA_TYPE {
  408. VpMachineData = 0,
  409. VpCmosData,
  410. VpBusData,
  411. VpControllerData,
  412. VpMonitorData
  413. } VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
  414. typedef VP_STATUS
  415. (NTAPI *PMINIPORT_QUERY_DEVICE_ROUTINE)(
  416. IN PVOID HwDeviceExtension,
  417. IN PVOID Context,
  418. IN VIDEO_DEVICE_DATA_TYPE DeviceDataType,
  419. IN PVOID Identifier,
  420. IN ULONG IdentifierLength,
  421. IN PVOID ConfigurationData,
  422. IN ULONG ConfigurationDataLength,
  423. IN OUT PVOID ComponentInformation,
  424. IN ULONG ComponentInformationLength);
  425. typedef VP_STATUS
  426. (NTAPI *PMINIPORT_GET_REGISTRY_ROUTINE)(
  427. IN PVOID HwDeviceExtension,
  428. IN PVOID Context,
  429. IN OUT PWSTR ValueName,
  430. IN OUT PVOID ValueData,
  431. IN ULONG ValueLength);
  432. typedef VOID
  433. (NTAPI *PMINIPORT_DPC_ROUTINE)(
  434. IN PVOID HwDeviceExtension,
  435. IN PVOID Context);
  436. typedef BOOLEAN
  437. (NTAPI *PMINIPORT_SYNCHRONIZE_ROUTINE)(
  438. IN PVOID Context);
  439. typedef VOID
  440. (NTAPI *PVIDEO_BUGCHECK_CALLBACK)(
  441. IN PVOID HwDeviceExtension,
  442. IN ULONG BugcheckCode,
  443. IN PUCHAR Buffer,
  444. IN ULONG BufferSize);
  445. /* VideoPortSynchronizeExecution.Priority constants */
  446. typedef enum VIDEO_SYNCHRONIZE_PRIORITY {
  447. VpLowPriority = 0,
  448. VpMediumPriority,
  449. VpHighPriority
  450. } VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
  451. /* VideoPortAllocatePool.PoolType constants */
  452. typedef enum _VP_POOL_TYPE {
  453. VpNonPagedPool = 0,
  454. VpPagedPool,
  455. VpNonPagedPoolCacheAligned = 4,
  456. VpPagedPoolCacheAligned
  457. } VP_POOL_TYPE, *PVP_POOL_TYPE;
  458. typedef enum _DMA_FLAGS {
  459. VideoPortUnlockAfterDma = 1,
  460. VideoPortKeepPagesLocked,
  461. VideoPortDmaInitOnly
  462. } DMA_FLAGS;
  463. typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA {
  464. INTERFACE_TYPE InterfaceType;
  465. ULONG BusNumber;
  466. USHORT Version;
  467. USHORT Revision;
  468. USHORT Irql;
  469. USHORT Vector;
  470. ULONG ControlBase;
  471. ULONG ControlSize;
  472. ULONG CursorBase;
  473. ULONG CursorSize;
  474. ULONG FrameBase;
  475. ULONG FrameSize;
  476. } VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA;
  477. typedef struct _VIDEO_X86_BIOS_ARGUMENTS {
  478. ULONG Eax;
  479. ULONG Ebx;
  480. ULONG Ecx;
  481. ULONG Edx;
  482. ULONG Esi;
  483. ULONG Edi;
  484. ULONG Ebp;
  485. } VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
  486. typedef enum VIDEO_DEBUG_LEVEL {
  487. Error = 0,
  488. Warn,
  489. Trace,
  490. Info
  491. } VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL;
  492. #ifndef _NTOS_
  493. typedef VP_STATUS
  494. (NTAPI *PDRIVER_IO_PORT_UCHAR)(
  495. IN ULONG_PTR Context,
  496. IN ULONG Port,
  497. IN UCHAR AccessMode,
  498. IN PUCHAR Data);
  499. typedef VP_STATUS
  500. (NTAPI *PDRIVER_IO_PORT_UCHAR_STRING)(
  501. IN ULONG_PTR Context,
  502. IN ULONG Port,
  503. IN UCHAR AccessMode,
  504. IN PUCHAR Data,
  505. IN ULONG DataLength);
  506. typedef VP_STATUS
  507. (NTAPI *PDRIVER_IO_PORT_ULONG)(
  508. IN ULONG_PTR Context,
  509. IN ULONG Port,
  510. IN UCHAR AccessMode,
  511. IN PULONG Data);
  512. typedef VP_STATUS
  513. (NTAPI *PDRIVER_IO_PORT_ULONG_STRING)(
  514. IN ULONG_PTR Context,
  515. IN ULONG Port,
  516. IN UCHAR AccessMode,
  517. IN PULONG Data,
  518. IN ULONG DataLength);
  519. typedef VP_STATUS
  520. (NTAPI *PDRIVER_IO_PORT_USHORT)(
  521. IN ULONG_PTR Context,
  522. IN ULONG Port,
  523. IN UCHAR AccessMode,
  524. IN PUSHORT Data);
  525. typedef VP_STATUS
  526. (NTAPI *PDRIVER_IO_PORT_USHORT_STRING)(
  527. IN ULONG_PTR Context,
  528. IN ULONG Port,
  529. IN UCHAR AccessMode,
  530. IN PUSHORT Data,
  531. IN ULONG DataLength);
  532. #endif /* _NTOS_ */
  533. typedef struct __VRB_SG {
  534. __int64 PhysicalAddress;
  535. ULONG Length;
  536. } VRB_SG, *PVRB_SG;
  537. typedef enum _VP_LOCK_OPERATION {
  538. VpReadAccess = 0,
  539. VpWriteAccess,
  540. VpModifyAccess
  541. } VP_LOCK_OPERATION;
  542. typedef struct _VP_DEVICE_DESCRIPTION {
  543. BOOLEAN ScatterGather;
  544. BOOLEAN Dma32BitAddresses;
  545. BOOLEAN Dma64BitAddresses;
  546. ULONG MaximumLength;
  547. } VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION;
  548. typedef struct _VIDEO_CHILD_STATE {
  549. ULONG Id;
  550. ULONG State;
  551. } VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE;
  552. typedef struct _VIDEO_CHILD_STATE_CONFIGURATION {
  553. ULONG Count;
  554. VIDEO_CHILD_STATE ChildStateArray[ANYSIZE_ARRAY];
  555. } VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION;
  556. typedef struct _VIDEO_HW_INITIALIZATION_DATA {
  557. ULONG HwInitDataSize;
  558. INTERFACE_TYPE AdapterInterfaceType;
  559. PVIDEO_HW_FIND_ADAPTER HwFindAdapter;
  560. PVIDEO_HW_INITIALIZE HwInitialize;
  561. PVIDEO_HW_INTERRUPT HwInterrupt;
  562. PVIDEO_HW_START_IO HwStartIO;
  563. ULONG HwDeviceExtensionSize;
  564. ULONG StartingDeviceNumber;
  565. PVIDEO_HW_RESET_HW HwResetHw;
  566. PVIDEO_HW_TIMER HwTimer;
  567. PVIDEO_HW_START_DMA HwStartDma;
  568. PVIDEO_HW_POWER_SET HwSetPowerState;
  569. PVIDEO_HW_POWER_GET HwGetPowerState;
  570. PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor;
  571. PVIDEO_HW_QUERY_INTERFACE HwQueryInterface;
  572. ULONG HwChildDeviceExtensionSize;
  573. PVIDEO_ACCESS_RANGE HwLegacyResourceList;
  574. ULONG HwLegacyResourceCount;
  575. PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources;
  576. BOOLEAN AllowEarlyEnumeration;
  577. ULONG Reserved;
  578. } VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA;
  579. typedef struct _I2C_FNC_TABLE {
  580. IN ULONG Size;
  581. IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
  582. IN PVIDEO_WRITE_DATA_LINE WriteDataLine;
  583. IN PVIDEO_READ_CLOCK_LINE ReadClockLine;
  584. IN PVIDEO_READ_DATA_LINE ReadDataLine;
  585. IN PVIDEO_WAIT_VSYNC_ACTIVE WaitVsync;
  586. PVOID Reserved;
  587. } I2C_FNC_TABLE, *PI2C_FNC_TABLE;
  588. typedef struct _DDC_CONTROL {
  589. IN ULONG Size;
  590. IN I2C_CALLBACKS I2CCallbacks;
  591. IN UCHAR EdidSegment;
  592. } DDC_CONTROL, *PDDC_CONTROL;
  593. /* VideoPortQueryServices.ServicesType constants */
  594. typedef enum _VIDEO_PORT_SERVICES {
  595. VideoPortServicesAGP = 1,
  596. VideoPortServicesI2C,
  597. VideoPortServicesHeadless,
  598. VideoPortServicesInt10,
  599. VideoPortServicesDebugReport,
  600. VideoPortServicesWCMemoryProtection
  601. } VIDEO_PORT_SERVICES;
  602. typedef struct _VIDEO_PORT_AGP_INTERFACE {
  603. SHORT Size;
  604. SHORT Version;
  605. PVOID Context;
  606. PINTERFACE_REFERENCE InterfaceReference;
  607. PINTERFACE_DEREFERENCE InterfaceDereference;
  608. PAGP_RESERVE_PHYSICAL AgpReservePhysical;
  609. PAGP_RELEASE_PHYSICAL AgpReleasePhysical;
  610. PAGP_COMMIT_PHYSICAL AgpCommitPhysical;
  611. PAGP_FREE_PHYSICAL AgpFreePhysical;
  612. PAGP_RESERVE_VIRTUAL AgpReserveVirtual;
  613. PAGP_RELEASE_VIRTUAL AgpReleaseVirtual;
  614. PAGP_COMMIT_VIRTUAL AgpCommitVirtual;
  615. PAGP_FREE_VIRTUAL AgpFreeVirtual;
  616. ULONGLONG AgpAllocationLimit;
  617. } VIDEO_PORT_AGP_INTERFACE, *PVIDEO_PORT_AGP_INTERFACE;
  618. typedef struct _VIDEO_PORT_AGP_INTERFACE_2 {
  619. IN USHORT Size;
  620. IN USHORT Version;
  621. OUT PVOID Context;
  622. OUT PINTERFACE_REFERENCE InterfaceReference;
  623. OUT PINTERFACE_DEREFERENCE InterfaceDereference;
  624. OUT PAGP_RESERVE_PHYSICAL AgpReservePhysical;
  625. OUT PAGP_RELEASE_PHYSICAL AgpReleasePhysical;
  626. OUT PAGP_COMMIT_PHYSICAL AgpCommitPhysical;
  627. OUT PAGP_FREE_PHYSICAL AgpFreePhysical;
  628. OUT PAGP_RESERVE_VIRTUAL AgpReserveVirtual;
  629. OUT PAGP_RELEASE_VIRTUAL AgpReleaseVirtual;
  630. OUT PAGP_COMMIT_VIRTUAL AgpCommitVirtual;
  631. OUT PAGP_FREE_VIRTUAL AgpFreeVirtual;
  632. OUT ULONGLONG AgpAllocationLimit;
  633. OUT PAGP_SET_RATE AgpSetRate;
  634. } VIDEO_PORT_AGP_INTERFACE_2, *PVIDEO_PORT_AGP_INTERFACE_2;
  635. typedef struct _VIDEO_PORT_I2C_INTERFACE {
  636. USHORT Size;
  637. USHORT Version;
  638. PVOID Context;
  639. PINTERFACE_REFERENCE InterfaceReference;
  640. PINTERFACE_DEREFERENCE InterfaceDereference;
  641. PI2C_START I2CStart;
  642. PI2C_STOP I2CStop;
  643. PI2C_WRITE I2CWrite;
  644. PI2C_READ I2CRead;
  645. } VIDEO_PORT_I2C_INTERFACE, *PVIDEO_PORT_I2C_INTERFACE;
  646. typedef struct _VIDEO_PORT_I2C_INTERFACE_2 {
  647. IN USHORT Size;
  648. IN USHORT Version;
  649. OUT PVOID Context;
  650. OUT PINTERFACE_REFERENCE InterfaceReference;
  651. OUT PINTERFACE_DEREFERENCE InterfaceDereference;
  652. OUT PI2C_START_2 I2CStart;
  653. OUT PI2C_STOP_2 I2CStop;
  654. OUT PI2C_WRITE_2 I2CWrite;
  655. OUT PI2C_READ_2 I2CRead;
  656. } VIDEO_PORT_I2C_INTERFACE_2, *PVIDEO_PORT_I2C_INTERFACE_2;
  657. typedef struct _VIDEO_PORT_INT10_INTERFACE {
  658. IN USHORT Size;
  659. IN USHORT Version;
  660. OUT PVOID Context;
  661. OUT PINTERFACE_REFERENCE InterfaceReference;
  662. OUT PINTERFACE_DEREFERENCE InterfaceDereference;
  663. OUT PINT10_ALLOCATE_BUFFER Int10AllocateBuffer;
  664. OUT PINT10_FREE_BUFFER Int10FreeBuffer;
  665. OUT PINT10_READ_MEMORY Int10ReadMemory;
  666. OUT PINT10_WRITE_MEMORY Int10WriteMemory;
  667. OUT PINT10_CALL_BIOS Int10CallBios;
  668. } VIDEO_PORT_INT10_INTERFACE, *PVIDEO_PORT_INT10_INTERFACE;
  669. typedef struct _VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE {
  670. IN USHORT Size;
  671. IN USHORT Version;
  672. OUT PVOID Context;
  673. OUT PINTERFACE_REFERENCE InterfaceReference;
  674. OUT PINTERFACE_DEREFERENCE InterfaceDereference;
  675. OUT PROTECT_WC_MEMORY VideoPortProtectWCMemory;
  676. OUT RESTORE_WC_MEMORY VideoPortRestoreWCMemory;
  677. } VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE, *PVIDEO_PORT_WCMEMORYPROTECTION_INTERFACE;
  678. typedef struct _VPOSVERSIONINFO {
  679. IN ULONG Size;
  680. OUT ULONG MajorVersion;
  681. OUT ULONG MinorVersion;
  682. OUT ULONG BuildNumber;
  683. OUT USHORT ServicePackMajor;
  684. OUT USHORT ServicePackMinor;
  685. } VPOSVERSIONINFO, *PVPOSVERSIONINFO;
  686. typedef struct _VIDEO_PORT_DEBUG_REPORT_INTERFACE {
  687. IN USHORT Size;
  688. IN USHORT Version;
  689. OUT PVOID Context;
  690. OUT PINTERFACE_REFERENCE InterfaceReference;
  691. OUT PINTERFACE_DEREFERENCE InterfaceDereference;
  692. OUT PVIDEO_DEBUG_REPORT (*DbgReportCreate)(
  693. IN PVOID HwDeviceExtension,
  694. IN ULONG ulCode,
  695. IN ULONG_PTR ulpArg1,
  696. IN ULONG_PTR ulpArg2,
  697. IN ULONG_PTR ulpArg3,
  698. IN ULONG_PTR ulpArg4
  699. );
  700. OUT BOOLEAN (*DbgReportSecondaryData)(
  701. IN OUT PVIDEO_DEBUG_REPORT pReport,
  702. IN PVOID pvData,
  703. IN ULONG ulDataSize
  704. );
  705. OUT VOID (*DbgReportComplete)(
  706. IN OUT PVIDEO_DEBUG_REPORT pReport
  707. );
  708. } VIDEO_PORT_DEBUG_REPORT_INTERFACE, *PVIDEO_PORT_DEBUG_REPORT_INTERFACE;
  709. /* Video port functions for miniports */
  710. VPAPI
  711. VP_STATUS
  712. NTAPI
  713. VideoPortAllocateBuffer(
  714. IN PVOID HwDeviceExtension,
  715. IN ULONG Size,
  716. OUT PVOID *Buffer);
  717. VPAPI
  718. VOID
  719. NTAPI
  720. VideoPortAcquireDeviceLock(
  721. IN PVOID HwDeviceExtension);
  722. VPAPI
  723. ULONG
  724. NTAPI
  725. VideoPortCompareMemory(
  726. IN PVOID Source1,
  727. IN PVOID Source2,
  728. IN SIZE_T Length);
  729. VPAPI
  730. BOOLEAN
  731. NTAPI
  732. VideoPortDDCMonitorHelper(
  733. IN PVOID HwDeviceExtension,
  734. IN PVOID DDCControl,
  735. IN OUT PUCHAR EdidBuffer,
  736. IN ULONG EdidBufferSize);
  737. VPAPI
  738. VOID
  739. __cdecl
  740. VideoPortDebugPrint(
  741. IN VIDEO_DEBUG_LEVEL DebugPrintLevel,
  742. IN PSTR DebugMessage,
  743. IN ...);
  744. VPAPI
  745. VP_STATUS
  746. NTAPI
  747. VideoPortDisableInterrupt(
  748. IN PVOID HwDeviceExtension);
  749. VPAPI
  750. VP_STATUS
  751. NTAPI
  752. VideoPortEnableInterrupt(
  753. IN PVOID HwDeviceExtension);
  754. VPAPI
  755. VP_STATUS
  756. NTAPI
  757. VideoPortEnumerateChildren(
  758. IN PVOID HwDeviceExtension,
  759. IN PVOID Reserved);
  760. VPAPI
  761. VOID
  762. NTAPI
  763. VideoPortFreeDeviceBase(
  764. IN PVOID HwDeviceExtension,
  765. IN PVOID MappedAddress);
  766. VPAPI
  767. VP_STATUS
  768. NTAPI
  769. VideoPortGetAccessRanges(
  770. IN PVOID HwDeviceExtension,
  771. IN ULONG NumRequestedResources,
  772. IN PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL,
  773. IN ULONG NumAccessRanges,
  774. OUT PVIDEO_ACCESS_RANGE AccessRanges,
  775. IN PVOID VendorId,
  776. IN PVOID DeviceId,
  777. OUT PULONG Slot);
  778. VPAPI
  779. PVOID
  780. NTAPI
  781. VideoPortGetAssociatedDeviceExtension(
  782. IN PVOID DeviceObject);
  783. VPAPI
  784. ULONG
  785. NTAPI
  786. VideoPortGetBusData(
  787. IN PVOID HwDeviceExtension,
  788. IN BUS_DATA_TYPE BusDataType,
  789. IN ULONG SlotNumber,
  790. IN OUT PVOID Buffer,
  791. IN ULONG Offset,
  792. IN ULONG Length);
  793. VPAPI
  794. UCHAR
  795. NTAPI
  796. VideoPortGetCurrentIrql(VOID);
  797. VPAPI
  798. PVOID
  799. NTAPI
  800. VideoPortGetDeviceBase(
  801. IN PVOID HwDeviceExtension,
  802. IN PHYSICAL_ADDRESS IoAddress,
  803. IN ULONG NumberOfUchars,
  804. IN UCHAR InIoSpace);
  805. VPAPI
  806. VP_STATUS
  807. NTAPI
  808. VideoPortGetDeviceData(
  809. IN PVOID HwDeviceExtension,
  810. IN VIDEO_DEVICE_DATA_TYPE DeviceDataType,
  811. IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine,
  812. IN PVOID Context);
  813. VPAPI
  814. VP_STATUS
  815. NTAPI
  816. VideoPortGetRegistryParameters(
  817. IN PVOID HwDeviceExtension,
  818. IN PWSTR ParameterName,
  819. IN UCHAR IsParameterFileName,
  820. IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine,
  821. IN PVOID Context);
  822. VPAPI
  823. PVOID
  824. NTAPI
  825. VideoPortGetRomImage(
  826. IN PVOID HwDeviceExtension,
  827. IN PVOID Unused1,
  828. IN ULONG Unused2,
  829. IN ULONG Length);
  830. VPAPI
  831. VP_STATUS
  832. NTAPI
  833. VideoPortGetVgaStatus(
  834. IN PVOID HwDeviceExtension,
  835. OUT PULONG VgaStatus);
  836. VPAPI
  837. LONG
  838. FASTCALL
  839. VideoPortInterlockedDecrement(
  840. IN PLONG Addend);
  841. VPAPI
  842. LONG
  843. FASTCALL
  844. VideoPortInterlockedExchange(
  845. IN OUT PLONG Target,
  846. IN LONG Value);
  847. VPAPI
  848. LONG
  849. FASTCALL
  850. VideoPortInterlockedIncrement(
  851. IN PLONG Addend);
  852. VPAPI
  853. ULONG
  854. NTAPI
  855. VideoPortInitialize(
  856. IN PVOID Argument1,
  857. IN PVOID Argument2,
  858. IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData,
  859. IN PVOID HwContext);
  860. VPAPI
  861. VP_STATUS
  862. NTAPI
  863. VideoPortInt10(
  864. IN PVOID HwDeviceExtension,
  865. IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments);
  866. VPAPI
  867. VOID
  868. NTAPI
  869. VideoPortLogError(
  870. IN PVOID HwDeviceExtension,
  871. IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL,
  872. IN VP_STATUS ErrorCode,
  873. IN ULONG UniqueId);
  874. VPAPI
  875. VP_STATUS
  876. NTAPI
  877. VideoPortMapBankedMemory(
  878. IN PVOID HwDeviceExtension,
  879. IN PHYSICAL_ADDRESS PhysicalAddress,
  880. IN OUT PULONG Length,
  881. PULONG InIoSpace,
  882. PVOID *VirtualAddress,
  883. ULONG BankLength,
  884. UCHAR ReadWriteBank,
  885. PBANKED_SECTION_ROUTINE BankRoutine,
  886. PVOID Context);
  887. VPAPI
  888. VP_STATUS
  889. NTAPI
  890. VideoPortMapMemory(
  891. IN PVOID HwDeviceExtension,
  892. IN PHYSICAL_ADDRESS PhysicalAddress,
  893. IN OUT PULONG Length,
  894. IN PULONG InIoSpace,
  895. IN OUT PVOID *VirtualAddress);
  896. VPAPI
  897. VOID
  898. NTAPI
  899. VideoPortMoveMemory(
  900. IN PVOID Destination,
  901. IN PVOID Source,
  902. IN ULONG Length);
  903. VPAPI
  904. LONGLONG
  905. NTAPI
  906. VideoPortQueryPerformanceCounter(
  907. IN PVOID HwDeviceExtension,
  908. OUT PLONGLONG PerformanceFrequency OPTIONAL);
  909. VPAPI
  910. VP_STATUS
  911. NTAPI
  912. VideoPortQueryServices(
  913. IN PVOID HwDeviceExtension,
  914. IN VIDEO_PORT_SERVICES ServicesType,
  915. IN OUT PINTERFACE Interface);
  916. VPAPI
  917. BOOLEAN
  918. NTAPI
  919. VideoPortQueueDpc(
  920. IN PVOID HwDeviceExtension,
  921. IN PMINIPORT_DPC_ROUTINE CallbackRoutine,
  922. IN PVOID Context);
  923. VPAPI
  924. VOID
  925. NTAPI
  926. VideoPortReadPortBufferUchar(
  927. IN PUCHAR Port,
  928. OUT PUCHAR Buffer,
  929. IN ULONG Count);
  930. VPAPI
  931. VOID
  932. NTAPI
  933. VideoPortReadPortBufferUlong(
  934. IN PULONG Port,
  935. OUT PULONG Buffer,
  936. IN ULONG Count);
  937. VPAPI
  938. VOID
  939. NTAPI
  940. VideoPortReadPortBufferUshort(
  941. IN PUSHORT Port,
  942. OUT PUSHORT Buffer,
  943. IN ULONG Count);
  944. VPAPI
  945. UCHAR
  946. NTAPI
  947. VideoPortReadPortUchar(
  948. IN PUCHAR Port);
  949. VPAPI
  950. ULONG
  951. NTAPI
  952. VideoPortReadPortUlong(
  953. IN PULONG Port);
  954. VPAPI
  955. USHORT
  956. NTAPI
  957. VideoPortReadPortUshort(
  958. IN PUSHORT Port);
  959. VPAPI
  960. VOID
  961. NTAPI
  962. VideoPortReadRegisterBufferUchar(
  963. IN PUCHAR Register,
  964. OUT PUCHAR Buffer,
  965. IN ULONG Count);
  966. VPAPI
  967. VOID
  968. NTAPI
  969. VideoPortReadRegisterBufferUlong(
  970. IN PULONG Register,
  971. OUT PULONG Buffer,
  972. IN ULONG Count);
  973. VPAPI
  974. VOID
  975. NTAPI
  976. VideoPortReadRegisterBufferUshort(
  977. IN PUSHORT Register,
  978. OUT PUSHORT Buffer,
  979. IN ULONG Count);
  980. VPAPI
  981. UCHAR
  982. NTAPI
  983. VideoPortReadRegisterUchar(
  984. IN PUCHAR Register);
  985. VPAPI
  986. ULONG
  987. NTAPI
  988. VideoPortReadRegisterUlong(
  989. IN PULONG Register);
  990. VPAPI
  991. USHORT
  992. NTAPI
  993. VideoPortReadRegisterUshort(
  994. IN PUSHORT Register);
  995. VPAPI
  996. VOID
  997. NTAPI
  998. VideoPortReleaseBuffer(
  999. IN PVOID HwDeviceExtension,
  1000. IN PVOID Buffer);
  1001. VPAPI
  1002. VOID
  1003. NTAPI
  1004. VideoPortReleaseDeviceLock(
  1005. IN PVOID HwDeviceExtension);
  1006. VPAPI
  1007. BOOLEAN
  1008. NTAPI
  1009. VideoPortScanRom(
  1010. PVOID HwDeviceExtension,
  1011. PUCHAR RomBase,
  1012. ULONG RomLength,
  1013. PUCHAR String);
  1014. VPAPI
  1015. ULONG
  1016. NTAPI
  1017. VideoPortSetBusData(
  1018. IN PVOID HwDeviceExtension,
  1019. IN BUS_DATA_TYPE BusDataType,
  1020. IN ULONG SlotNumber,
  1021. IN PVOID Buffer,
  1022. IN ULONG Offset,
  1023. IN ULONG Length);
  1024. VPAPI
  1025. VP_STATUS
  1026. NTAPI
  1027. VideoPortSetRegistryParameters(
  1028. IN PVOID HwDeviceExtension,
  1029. IN PWSTR ValueName,
  1030. IN PVOID ValueData,
  1031. IN ULONG ValueLength);
  1032. VPAPI
  1033. VP_STATUS
  1034. NTAPI
  1035. VideoPortSetTrappedEmulatorPorts(
  1036. IN PVOID HwDeviceExtension,
  1037. IN ULONG NumAccessRanges,
  1038. IN PVIDEO_ACCESS_RANGE AccessRange);
  1039. VPAPI
  1040. VOID
  1041. NTAPI
  1042. VideoPortStallExecution(
  1043. IN ULONG Microseconds);
  1044. VPAPI
  1045. VOID
  1046. NTAPI
  1047. VideoPortStartTimer(
  1048. IN PVOID HwDeviceExtension);
  1049. VPAPI
  1050. VOID
  1051. NTAPI
  1052. VideoPortStopTimer(
  1053. IN PVOID HwDeviceExtension);
  1054. VPAPI
  1055. BOOLEAN
  1056. NTAPI
  1057. VideoPortSynchronizeExecution(
  1058. IN PVOID HwDeviceExtension,
  1059. IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
  1060. IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
  1061. IN PVOID Context);
  1062. VPAPI
  1063. VP_STATUS
  1064. NTAPI
  1065. VideoPortUnmapMemory(
  1066. IN PVOID HwDeviceExtension,
  1067. IN OUT PVOID VirtualAddress,
  1068. IN HANDLE ProcessHandle);
  1069. VPAPI
  1070. VP_STATUS
  1071. NTAPI
  1072. VideoPortVerifyAccessRanges(
  1073. IN PVOID HwDeviceExtension,
  1074. IN ULONG NumAccessRanges,
  1075. IN PVIDEO_ACCESS_RANGE AccessRanges);
  1076. VPAPI
  1077. VOID
  1078. NTAPI
  1079. VideoPortWritePortBufferUchar(
  1080. IN PUCHAR Port,
  1081. IN PUCHAR Buffer,
  1082. IN ULONG Count);
  1083. VPAPI
  1084. VOID
  1085. NTAPI
  1086. VideoPortWritePortBufferUlong(
  1087. IN PULONG Port,
  1088. IN PULONG Buffer,
  1089. IN ULONG Count);
  1090. VPAPI
  1091. VOID
  1092. NTAPI
  1093. VideoPortWritePortBufferUshort(
  1094. IN PUSHORT Port,
  1095. IN PUSHORT Buffer,
  1096. IN ULONG Count);
  1097. VPAPI
  1098. VOID
  1099. NTAPI
  1100. VideoPortWritePortUchar(
  1101. IN PUCHAR Port,
  1102. IN UCHAR Value);
  1103. VPAPI
  1104. VOID
  1105. NTAPI
  1106. VideoPortWritePortUlong(
  1107. IN PULONG Port,
  1108. IN ULONG Value);
  1109. VPAPI
  1110. VOID
  1111. NTAPI
  1112. VideoPortWritePortUshort(
  1113. IN PUSHORT Port,
  1114. IN USHORT Value);
  1115. VPAPI
  1116. VOID
  1117. NTAPI
  1118. VideoPortWriteRegisterBufferUchar(
  1119. IN PUCHAR Register,
  1120. IN PUCHAR Buffer,
  1121. IN ULONG Count);
  1122. VPAPI
  1123. VOID
  1124. NTAPI
  1125. VideoPortWriteRegisterBufferUlong(
  1126. IN PULONG Register,
  1127. IN PULONG Buffer,
  1128. IN ULONG Count);
  1129. VPAPI
  1130. VOID
  1131. NTAPI
  1132. VideoPortWriteRegisterBufferUshort(
  1133. IN PUSHORT Register,
  1134. IN PUSHORT Buffer,
  1135. IN ULONG Count);
  1136. VPAPI
  1137. VOID
  1138. NTAPI
  1139. VideoPortWriteRegisterUchar(
  1140. IN PUCHAR Register,
  1141. IN UCHAR Value);
  1142. VPAPI
  1143. VOID
  1144. NTAPI
  1145. VideoPortWriteRegisterUlong(
  1146. IN PULONG Register,
  1147. IN ULONG Value);
  1148. VPAPI
  1149. VOID
  1150. NTAPI
  1151. VideoPortWriteRegisterUshort(
  1152. IN PUSHORT Register,
  1153. IN USHORT Value);
  1154. VPAPI
  1155. VOID
  1156. NTAPI
  1157. VideoPortZeroDeviceMemory(
  1158. IN PVOID Destination,
  1159. IN ULONG Length);
  1160. VPAPI
  1161. VOID
  1162. NTAPI
  1163. VideoPortZeroMemory(
  1164. IN PVOID Destination,
  1165. IN ULONG Length);
  1166. VPAPI
  1167. PVOID
  1168. NTAPI
  1169. VideoPortAllocateContiguousMemory(
  1170. IN PVOID HwDeviceExtension,
  1171. IN ULONG NumberOfBytes,
  1172. IN PHYSICAL_ADDRESS HighestAcceptableAddress);
  1173. VPAPI
  1174. PVOID
  1175. NTAPI
  1176. VideoPortGetCommonBuffer(
  1177. IN PVOID HwDeviceExtension,
  1178. IN ULONG DesiredLength,
  1179. IN ULONG Alignment,
  1180. OUT PPHYSICAL_ADDRESS LogicalAddress,
  1181. OUT PULONG pActualLength,
  1182. IN BOOLEAN CacheEnabled);
  1183. VPAPI
  1184. VOID
  1185. NTAPI
  1186. VideoPortFreeCommonBuffer(
  1187. IN PVOID HwDeviceExtension,
  1188. IN ULONG Length,
  1189. IN PVOID VirtualAddress,
  1190. IN PHYSICAL_ADDRESS LogicalAddress,
  1191. IN BOOLEAN CacheEnabled);
  1192. VPAPI
  1193. PDMA
  1194. NTAPI
  1195. VideoPortDoDma(
  1196. IN PVOID HwDeviceExtension,
  1197. IN PDMA pDma,
  1198. IN DMA_FLAGS DmaFlags);
  1199. VPAPI
  1200. BOOLEAN
  1201. NTAPI
  1202. VideoPortLockPages(
  1203. IN PVOID HwDeviceExtension,
  1204. IN OUT PVIDEO_REQUEST_PACKET pVrp,
  1205. IN OUT PEVENT pUEvent,
  1206. IN PEVENT pDisplayEvent,
  1207. IN DMA_FLAGS DmaFlags);
  1208. VPAPI
  1209. BOOLEAN
  1210. NTAPI
  1211. VideoPortUnlockPages(
  1212. IN PVOID hwDeviceExtension,
  1213. IN OUT PDMA pDma);
  1214. VPAPI
  1215. BOOLEAN
  1216. NTAPI
  1217. VideoPortSignalDmaComplete(
  1218. IN PVOID HwDeviceExtension,
  1219. IN PDMA pDmaHandle);
  1220. VPAPI
  1221. PVOID
  1222. NTAPI
  1223. VideoPortGetMdl(
  1224. IN PVOID HwDeviceExtension,
  1225. IN PDMA pDma);
  1226. VPAPI
  1227. PVOID
  1228. NTAPI
  1229. VideoPortGetDmaContext(
  1230. IN PVOID HwDeviceExtension,
  1231. IN PDMA pDma);
  1232. VPAPI
  1233. VOID
  1234. NTAPI
  1235. VideoPortSetDmaContext(
  1236. IN PVOID HwDeviceExtension,
  1237. OUT PDMA pDma,
  1238. IN PVOID InstanceContext);
  1239. VPAPI
  1240. ULONG
  1241. NTAPI
  1242. VideoPortGetBytesUsed(
  1243. IN PVOID HwDeviceExtension,
  1244. IN PDMA pDma);
  1245. VPAPI
  1246. VOID
  1247. NTAPI
  1248. VideoPortSetBytesUsed(
  1249. IN PVOID HwDeviceExtension,
  1250. IN OUT PDMA pDma,
  1251. IN ULONG BytesUsed);
  1252. VPAPI
  1253. PDMA
  1254. NTAPI
  1255. VideoPortAssociateEventsWithDmaHandle(
  1256. IN PVOID HwDeviceExtension,
  1257. IN OUT PVIDEO_REQUEST_PACKET pVrp,
  1258. IN PVOID MappedUserEvent,
  1259. IN PVOID DisplayDriverEvent);
  1260. VPAPI
  1261. PDMA
  1262. NTAPI
  1263. VideoPortMapDmaMemory(
  1264. IN PVOID HwDeviceExtension,
  1265. IN PVIDEO_REQUEST_PACKET pVrp,
  1266. IN PHYSICAL_ADDRESS BoardAddress,
  1267. IN PULONG Length,
  1268. IN PULONG InIoSpace,
  1269. IN PVOID MappedUserEvent,
  1270. IN PVOID DisplayDriverEvent,
  1271. IN OUT PVOID *VirtualAddress);
  1272. VPAPI
  1273. BOOLEAN
  1274. NTAPI
  1275. VideoPortUnmapDmaMemory(
  1276. IN PVOID HwDeviceExtension,
  1277. IN PVOID VirtualAddress,
  1278. IN HANDLE ProcessHandle,
  1279. IN PDMA BoardMemoryHandle);
  1280. VPAPI
  1281. VP_STATUS
  1282. NTAPI
  1283. VideoPortCreateSecondaryDisplay(
  1284. IN PVOID HwDeviceExtension,
  1285. IN OUT PVOID *SecondaryDeviceExtension,
  1286. IN ULONG ulFlag);
  1287. VPAPI
  1288. PVP_DMA_ADAPTER
  1289. NTAPI
  1290. VideoPortGetDmaAdapter(
  1291. IN PVOID HwDeviceExtension,
  1292. IN PVP_DEVICE_DESCRIPTION VpDeviceDescription);
  1293. VPAPI
  1294. VOID
  1295. NTAPI
  1296. VideoPortPutDmaAdapter(
  1297. IN PVOID HwDeviceExtension,
  1298. IN PVP_DMA_ADAPTER VpDmaAdapter);
  1299. VPAPI
  1300. PVOID
  1301. NTAPI
  1302. VideoPortAllocateCommonBuffer(
  1303. IN PVOID HwDeviceExtension,
  1304. IN PVP_DMA_ADAPTER VpDmaAdapter,
  1305. IN ULONG DesiredLength,
  1306. OUT PPHYSICAL_ADDRESS LogicalAddress,
  1307. IN BOOLEAN CacheEnabled,
  1308. PVOID Reserved);
  1309. VPAPI
  1310. VOID
  1311. NTAPI
  1312. VideoPortReleaseCommonBuffer(
  1313. IN PVOID HwDeviceExtension,
  1314. IN PVP_DMA_ADAPTER VpDmaAdapter,
  1315. IN ULONG Length,
  1316. IN PHYSICAL_ADDRESS LogicalAddress,
  1317. IN PVOID VirtualAddress,
  1318. IN BOOLEAN CacheEnabled);
  1319. VPAPI
  1320. PVOID
  1321. NTAPI
  1322. VideoPortLockBuffer(
  1323. IN PVOID HwDeviceExtension,
  1324. IN PVOID BaseAddress,
  1325. IN ULONG Length,
  1326. IN VP_LOCK_OPERATION Operation);
  1327. VPAPI
  1328. VOID
  1329. NTAPI
  1330. VideoPortUnLockBuffer(
  1331. IN PVOID HwDeviceExtension,
  1332. IN PVOID Mdl);
  1333. VPAPI
  1334. VP_STATUS
  1335. NTAPI
  1336. VideoPortStartDma(
  1337. IN PVOID HwDeviceExtension,
  1338. IN PVP_DMA_ADAPTER VpDmaAdapter,
  1339. IN PVOID Mdl,
  1340. IN ULONG Offset,
  1341. IN OUT PULONG pLength,
  1342. IN PEXECUTE_DMA ExecuteDmaRoutine,
  1343. IN PVOID Context,
  1344. IN BOOLEAN WriteToDevice);
  1345. VPAPI
  1346. VP_STATUS
  1347. NTAPI
  1348. VideoPortCompleteDma(
  1349. IN PVOID HwDeviceExtension,
  1350. IN PVP_DMA_ADAPTER VpDmaAdapter,
  1351. IN PVP_SCATTER_GATHER_LIST VpScatterGather,
  1352. IN BOOLEAN WriteToDevice);
  1353. VPAPI
  1354. VP_STATUS
  1355. NTAPI
  1356. VideoPortCreateEvent(
  1357. IN PVOID HwDeviceExtension,
  1358. IN ULONG EventFlag,
  1359. IN PVOID Unused,
  1360. OUT PEVENT *ppEvent);
  1361. VPAPI
  1362. VP_STATUS
  1363. NTAPI
  1364. VideoPortDeleteEvent(
  1365. IN PVOID HwDeviceExtension,
  1366. IN PEVENT pEvent);
  1367. VPAPI
  1368. LONG
  1369. NTAPI
  1370. VideoPortSetEvent(
  1371. IN PVOID HwDeviceExtension,
  1372. IN PEVENT pEvent);
  1373. VPAPI
  1374. VOID
  1375. NTAPI
  1376. VideoPortClearEvent(
  1377. IN PVOID HwDeviceExtension,
  1378. IN PEVENT pEvent);
  1379. VPAPI
  1380. LONG
  1381. NTAPI
  1382. VideoPortReadStateEvent(
  1383. IN PVOID HwDeviceExtension,
  1384. IN PEVENT pEvent);
  1385. VPAPI
  1386. VP_STATUS
  1387. NTAPI
  1388. VideoPortWaitForSingleObject(
  1389. IN PVOID HwDeviceExtension,
  1390. IN PVOID Object,
  1391. IN PLARGE_INTEGER Timeout OPTIONAL);
  1392. VPAPI
  1393. PVOID
  1394. NTAPI
  1395. VideoPortAllocatePool(
  1396. IN PVOID HwDeviceExtension,
  1397. IN VP_POOL_TYPE PoolType,
  1398. IN SIZE_T NumberOfBytes,
  1399. IN ULONG Tag);
  1400. VPAPI
  1401. VOID
  1402. NTAPI
  1403. VideoPortFreePool(
  1404. IN PVOID HwDeviceExtension,
  1405. IN PVOID Ptr);
  1406. VPAPI
  1407. VP_STATUS
  1408. NTAPI
  1409. VideoPortCreateSpinLock(
  1410. IN PVOID HwDeviceExtension,
  1411. OUT PSPIN_LOCK *SpinLock);
  1412. VPAPI
  1413. VP_STATUS
  1414. NTAPI
  1415. VideoPortDeleteSpinLock(
  1416. IN PVOID HwDeviceExtension,
  1417. IN PSPIN_LOCK SpinLock);
  1418. VPAPI
  1419. VOID
  1420. NTAPI
  1421. VideoPortAcquireSpinLock(
  1422. IN PVOID HwDeviceExtension,
  1423. IN PSPIN_LOCK SpinLock,
  1424. OUT PUCHAR OldIrql);
  1425. VPAPI
  1426. VOID
  1427. NTAPI
  1428. VideoPortAcquireSpinLockAtDpcLevel(
  1429. IN PVOID HwDeviceExtension,
  1430. IN PSPIN_LOCK SpinLock);
  1431. VPAPI
  1432. VOID
  1433. NTAPI
  1434. VideoPortReleaseSpinLock(
  1435. IN PVOID HwDeviceExtension,
  1436. IN PSPIN_LOCK SpinLock,
  1437. IN UCHAR NewIrql);
  1438. VPAPI
  1439. VOID
  1440. NTAPI
  1441. VideoPortReleaseSpinLockFromDpcLevel(
  1442. IN PVOID HwDeviceExtension,
  1443. IN PSPIN_LOCK SpinLock);
  1444. VPAPI
  1445. VOID
  1446. NTAPI
  1447. VideoPortQuerySystemTime(
  1448. OUT PLARGE_INTEGER CurrentTime);
  1449. VPAPI
  1450. BOOLEAN
  1451. NTAPI
  1452. VideoPortCheckForDeviceExistence(
  1453. IN PVOID HwDeviceExtension,
  1454. IN USHORT VendorId,
  1455. IN USHORT DeviceId,
  1456. IN UCHAR RevisionId,
  1457. IN USHORT SubVendorId,
  1458. IN USHORT SubSystemId,
  1459. IN ULONG Flags);
  1460. VPAPI
  1461. ULONG
  1462. NTAPI
  1463. VideoPortGetAssociatedDeviceID(
  1464. IN PVOID DeviceObject);
  1465. VPAPI
  1466. VP_STATUS
  1467. NTAPI
  1468. VideoPortFlushRegistry(
  1469. PVOID HwDeviceExtension);
  1470. VPAPI
  1471. VP_STATUS
  1472. NTAPI
  1473. VideoPortGetVersion(
  1474. IN PVOID HwDeviceExtension,
  1475. IN OUT PVPOSVERSIONINFO pVpOsVersionInfo);
  1476. VPAPI
  1477. BOOLEAN
  1478. NTAPI
  1479. VideoPortIsNoVesa(VOID);
  1480. VPAPI
  1481. VP_STATUS
  1482. NTAPI
  1483. VideoPortRegisterBugcheckCallback(
  1484. IN PVOID HwDeviceExtension,
  1485. IN ULONG BugcheckCode,
  1486. IN PVIDEO_BUGCHECK_CALLBACK Callback,
  1487. IN ULONG BugcheckDataSize);
  1488. VPAPI
  1489. PVIDEO_DEBUG_REPORT
  1490. NTAPI
  1491. VideoPortDbgReportCreate(
  1492. IN PVOID HwDeviceExtension,
  1493. IN ULONG ulCode,
  1494. IN ULONG_PTR ulpArg1,
  1495. IN ULONG_PTR ulpArg2,
  1496. IN ULONG_PTR ulpArg3,
  1497. IN ULONG_PTR ulpArg4);
  1498. VPAPI
  1499. BOOLEAN
  1500. NTAPI
  1501. VideoPortDbgReportSecondaryData(
  1502. IN OUT PVIDEO_DEBUG_REPORT pReport,
  1503. IN PVOID pvData,
  1504. IN ULONG ulDataSize);
  1505. VPAPI
  1506. VOID
  1507. NTAPI
  1508. VideoPortDbgReportComplete(
  1509. IN OUT PVIDEO_DEBUG_REPORT pReport);
  1510. #ifdef __cplusplus
  1511. }
  1512. #endif