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.

2725 lines
66 KiB

  1. /*++ BUILD Version: 0011 // Increment this if a change has global effects
  2. Copyright (c) 1991 Microsoft Corporation
  3. Module Name:
  4. hal.h
  5. Abstract:
  6. This header file defines the Hardware Architecture Layer (HAL) interfaces
  7. that are exported by a system vendor to the NT system.
  8. Author:
  9. David N. Cutler (davec) 25-Apr-1991
  10. Revision History:
  11. --*/
  12. // begin_nthal
  13. #ifndef _HAL_
  14. #define _HAL_
  15. // begin_ntosp
  16. //
  17. // Define OEM bitmapped font check values.
  18. //
  19. #define OEM_FONT_VERSION 0x200
  20. #define OEM_FONT_TYPE 0
  21. #define OEM_FONT_ITALIC 0
  22. #define OEM_FONT_UNDERLINE 0
  23. #define OEM_FONT_STRIKEOUT 0
  24. #define OEM_FONT_CHARACTER_SET 255
  25. #define OEM_FONT_FAMILY (3 << 4)
  26. //
  27. // Define OEM bitmapped font file header structure.
  28. //
  29. // N.B. this is a packed structure.
  30. //
  31. #include "pshpack1.h"
  32. typedef struct _OEM_FONT_FILE_HEADER {
  33. USHORT Version;
  34. ULONG FileSize;
  35. UCHAR Copyright[60];
  36. USHORT Type;
  37. USHORT Points;
  38. USHORT VerticleResolution;
  39. USHORT HorizontalResolution;
  40. USHORT Ascent;
  41. USHORT InternalLeading;
  42. USHORT ExternalLeading;
  43. UCHAR Italic;
  44. UCHAR Underline;
  45. UCHAR StrikeOut;
  46. USHORT Weight;
  47. UCHAR CharacterSet;
  48. USHORT PixelWidth;
  49. USHORT PixelHeight;
  50. UCHAR Family;
  51. USHORT AverageWidth;
  52. USHORT MaximumWidth;
  53. UCHAR FirstCharacter;
  54. UCHAR LastCharacter;
  55. UCHAR DefaultCharacter;
  56. UCHAR BreakCharacter;
  57. USHORT WidthInBytes;
  58. ULONG Device;
  59. ULONG Face;
  60. ULONG BitsPointer;
  61. ULONG BitsOffset;
  62. UCHAR Filler;
  63. struct {
  64. USHORT Width;
  65. USHORT Offset;
  66. } Map[1];
  67. } OEM_FONT_FILE_HEADER, *POEM_FONT_FILE_HEADER;
  68. #include "poppack.h"
  69. // end_ntosp
  70. // begin_ntddk begin_wdm begin_ntosp
  71. //
  72. // Define the device description structure.
  73. //
  74. typedef struct _DEVICE_DESCRIPTION {
  75. ULONG Version;
  76. BOOLEAN Master;
  77. BOOLEAN ScatterGather;
  78. BOOLEAN DemandMode;
  79. BOOLEAN AutoInitialize;
  80. BOOLEAN Dma32BitAddresses;
  81. BOOLEAN IgnoreCount;
  82. BOOLEAN Reserved1; // must be false
  83. BOOLEAN Dma64BitAddresses;
  84. ULONG BusNumber; // unused for WDM
  85. ULONG DmaChannel;
  86. INTERFACE_TYPE InterfaceType;
  87. DMA_WIDTH DmaWidth;
  88. DMA_SPEED DmaSpeed;
  89. ULONG MaximumLength;
  90. ULONG DmaPort;
  91. } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
  92. //
  93. // Define the supported version numbers for the device description structure.
  94. //
  95. #define DEVICE_DESCRIPTION_VERSION 0
  96. #define DEVICE_DESCRIPTION_VERSION1 1
  97. #define DEVICE_DESCRIPTION_VERSION2 2
  98. // end_ntddk end_wdm
  99. //
  100. // Boot record disk partition table entry structure format.
  101. //
  102. typedef struct _PARTITION_DESCRIPTOR {
  103. UCHAR ActiveFlag; // Bootable or not
  104. UCHAR StartingTrack; // Not used
  105. UCHAR StartingCylinderLsb; // Not used
  106. UCHAR StartingCylinderMsb; // Not used
  107. UCHAR PartitionType; // 12 bit FAT, 16 bit FAT etc.
  108. UCHAR EndingTrack; // Not used
  109. UCHAR EndingCylinderLsb; // Not used
  110. UCHAR EndingCylinderMsb; // Not used
  111. UCHAR StartingSectorLsb0; // Hidden sectors
  112. UCHAR StartingSectorLsb1;
  113. UCHAR StartingSectorMsb0;
  114. UCHAR StartingSectorMsb1;
  115. UCHAR PartitionLengthLsb0; // Sectors in this partition
  116. UCHAR PartitionLengthLsb1;
  117. UCHAR PartitionLengthMsb0;
  118. UCHAR PartitionLengthMsb1;
  119. } PARTITION_DESCRIPTOR, *PPARTITION_DESCRIPTOR;
  120. //
  121. // Number of partition table entries
  122. //
  123. #define NUM_PARTITION_TABLE_ENTRIES 4
  124. //
  125. // Partition table record and boot signature offsets in 16-bit words.
  126. //
  127. #define PARTITION_TABLE_OFFSET (0x1be / 2)
  128. #define BOOT_SIGNATURE_OFFSET ((0x200 / 2) - 1)
  129. //
  130. // Boot record signature value.
  131. //
  132. #define BOOT_RECORD_SIGNATURE (0xaa55)
  133. //
  134. // Initial size of the Partition list structure.
  135. //
  136. #define PARTITION_BUFFER_SIZE 2048
  137. //
  138. // Partition active flag - i.e., boot indicator
  139. //
  140. #define PARTITION_ACTIVE_FLAG 0x80
  141. // end_ntosp
  142. // begin_ntddk
  143. //
  144. // The following function prototypes are for HAL routines with a prefix of Hal.
  145. //
  146. // General functions.
  147. //
  148. typedef
  149. BOOLEAN
  150. (*PHAL_RESET_DISPLAY_PARAMETERS) (
  151. IN ULONG Columns,
  152. IN ULONG Rows
  153. );
  154. DECLSPEC_DEPRECATED_DDK
  155. NTHALAPI
  156. VOID
  157. HalAcquireDisplayOwnership (
  158. IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
  159. );
  160. // end_ntddk
  161. NTHALAPI
  162. VOID
  163. HalDisplayString (
  164. PUCHAR String
  165. );
  166. NTHALAPI
  167. VOID
  168. HalQueryDisplayParameters (
  169. OUT PULONG WidthInCharacters,
  170. OUT PULONG HeightInLines,
  171. OUT PULONG CursorColumn,
  172. OUT PULONG CursorRow
  173. );
  174. NTHALAPI
  175. VOID
  176. HalSetDisplayParameters (
  177. IN ULONG CursorColumn,
  178. IN ULONG CursorRow
  179. );
  180. NTHALAPI
  181. BOOLEAN
  182. HalInitSystem (
  183. IN ULONG Phase,
  184. IN PLOADER_PARAMETER_BLOCK LoaderBlock
  185. );
  186. NTHALAPI
  187. VOID
  188. HalProcessorIdle(
  189. VOID
  190. );
  191. NTHALAPI
  192. VOID
  193. HalReportResourceUsage (
  194. VOID
  195. );
  196. NTHALAPI
  197. ULONG
  198. HalSetTimeIncrement (
  199. IN ULONG DesiredIncrement
  200. );
  201. // begin_ntosp
  202. //
  203. // Get and set environment variable values.
  204. //
  205. NTHALAPI
  206. ARC_STATUS
  207. HalGetEnvironmentVariable (
  208. IN PCHAR Variable,
  209. IN USHORT Length,
  210. OUT PCHAR Buffer
  211. );
  212. NTHALAPI
  213. ARC_STATUS
  214. HalSetEnvironmentVariable (
  215. IN PCHAR Variable,
  216. IN PCHAR Value
  217. );
  218. NTHALAPI
  219. NTSTATUS
  220. HalGetEnvironmentVariableEx (
  221. IN PWSTR VariableName,
  222. IN LPGUID VendorGuid,
  223. OUT PVOID Value,
  224. IN OUT PULONG ValueLength,
  225. OUT PULONG Attributes OPTIONAL
  226. );
  227. NTSTATUS
  228. HalSetEnvironmentVariableEx (
  229. IN PWSTR VariableName,
  230. IN LPGUID VendorGuid,
  231. IN PVOID Value,
  232. IN ULONG ValueLength,
  233. IN ULONG Attributes
  234. );
  235. NTSTATUS
  236. HalEnumerateEnvironmentVariablesEx (
  237. IN ULONG InformationClass,
  238. OUT PVOID Buffer,
  239. IN OUT PULONG BufferLength
  240. );
  241. // end_ntosp
  242. //
  243. // Cache and write buffer flush functions.
  244. //
  245. //
  246. #if defined(_IA64_) // ntddk ntifs ntndis ntosp
  247. // ntddk ntifs ntndis ntosp
  248. NTHALAPI
  249. VOID
  250. HalChangeColorPage (
  251. IN PVOID NewColor,
  252. IN PVOID OldColor,
  253. IN ULONG PageFrame
  254. );
  255. NTHALAPI
  256. VOID
  257. HalFlushDcachePage (
  258. IN PVOID Color,
  259. IN ULONG PageFrame,
  260. IN ULONG Length
  261. );
  262. // begin_ntosp
  263. NTHALAPI
  264. VOID
  265. HalFlushIoBuffers (
  266. IN PMDL Mdl,
  267. IN BOOLEAN ReadOperation,
  268. IN BOOLEAN DmaOperation
  269. );
  270. // begin_ntddk begin_ntifs begin_ntndis
  271. DECLSPEC_DEPRECATED_DDK // Use GetDmaRequirement
  272. NTHALAPI
  273. ULONG
  274. HalGetDmaAlignmentRequirement (
  275. VOID
  276. );
  277. // end_ntosp end_ntddk end_ntifs end_ntndis
  278. NTHALAPI
  279. VOID
  280. HalPurgeDcachePage (
  281. IN PVOID Color,
  282. IN ULONG PageFrame,
  283. IN ULONG Length
  284. );
  285. NTHALAPI
  286. VOID
  287. HalPurgeIcachePage (
  288. IN PVOID Color,
  289. IN ULONG PageFrame,
  290. IN ULONG Length
  291. );
  292. NTHALAPI
  293. VOID
  294. HalSweepDcache (
  295. VOID
  296. );
  297. NTHALAPI
  298. VOID
  299. HalSweepDcacheRange (
  300. IN PVOID BaseAddress,
  301. IN SIZE_T Length
  302. );
  303. NTHALAPI
  304. VOID
  305. HalSweepIcache (
  306. VOID
  307. );
  308. NTHALAPI
  309. VOID
  310. HalSweepIcacheRange (
  311. IN PVOID BaseAddress,
  312. IN SIZE_T Length
  313. );
  314. NTHALAPI
  315. VOID
  316. HalZeroPage (
  317. IN PVOID NewColor,
  318. IN PVOID OldColor,
  319. IN PFN_NUMBER PageFrame
  320. );
  321. #endif // ntddk ntifs ntndis ntosp
  322. // ntddk ntifs ntndis ntosp
  323. #if defined(_M_IX86) || defined(_M_AMD64) // ntddk ntifs ntndis ntosp
  324. // ntddk ntifs ntndis ntosp
  325. #define HalGetDmaAlignmentRequirement() 1L // ntddk ntifs ntndis ntosp
  326. NTHALAPI
  327. VOID
  328. HalHandleNMI (
  329. IN OUT PVOID NmiInformation
  330. );
  331. #if defined(_AMD64_)
  332. NTHALAPI
  333. VOID
  334. HalHandleMcheck (
  335. IN PKTRAP_FRAME TrapFrame,
  336. IN PKEXCEPTION_FRAME ExceptionFrame
  337. );
  338. #endif
  339. //
  340. // The following are temporary.
  341. //
  342. #if defined(_M_AMD64)
  343. NTHALAPI
  344. KIRQL
  345. HalSwapIrql (
  346. IN KIRQL Irql
  347. );
  348. NTHALAPI
  349. KIRQL
  350. HalGetCurrentIrql (
  351. VOID
  352. );
  353. #endif
  354. #endif // ntddk ntifs ntndis ntosp
  355. // ntddk ntifs wdm ntndis
  356. #if defined(_M_IA64)
  357. NTHALAPI
  358. VOID
  359. HalSweepCacheRange (
  360. IN PVOID BaseAddress,
  361. IN SIZE_T Length
  362. );
  363. NTHALAPI
  364. LONGLONG
  365. HalCallPal (
  366. IN ULONGLONG FunctionIndex,
  367. IN ULONGLONG Arguement1,
  368. IN ULONGLONG Arguement2,
  369. IN ULONGLONG Arguement3,
  370. OUT PULONGLONG ReturnValue0,
  371. OUT PULONGLONG ReturnValue1,
  372. OUT PULONGLONG ReturnValue2,
  373. OUT PULONGLONG ReturnValue3
  374. );
  375. #endif
  376. // begin_ntosp
  377. NTHALAPI // ntddk ntifs wdm ntndis
  378. VOID // ntddk ntifs wdm ntndis
  379. KeFlushWriteBuffer ( // ntddk ntifs wdm ntndis
  380. VOID // ntddk ntifs wdm ntndis
  381. ); // ntddk ntifs wdm ntndis
  382. // ntddk ntifs wdm ntndis
  383. #if defined(_ALPHA_)
  384. NTHALAPI
  385. PVOID
  386. HalCreateQva(
  387. IN PHYSICAL_ADDRESS PhysicalAddress,
  388. IN PVOID VirtualAddress
  389. );
  390. NTHALAPI
  391. PVOID
  392. HalDereferenceQva(
  393. PVOID Qva,
  394. INTERFACE_TYPE InterfaceType,
  395. ULONG BusNumber
  396. );
  397. #endif
  398. #if !defined(_X86_)
  399. NTHALAPI
  400. BOOLEAN
  401. HalCallBios (
  402. IN ULONG BiosCommand,
  403. IN OUT PULONG Eax,
  404. IN OUT PULONG Ebx,
  405. IN OUT PULONG Ecx,
  406. IN OUT PULONG Edx,
  407. IN OUT PULONG Esi,
  408. IN OUT PULONG Edi,
  409. IN OUT PULONG Ebp
  410. );
  411. #endif
  412. // end_ntosp
  413. //
  414. // Profiling functions.
  415. //
  416. NTHALAPI
  417. VOID
  418. HalCalibratePerformanceCounter (
  419. IN LONG volatile *Number,
  420. IN ULONGLONG NewCount
  421. );
  422. NTHALAPI
  423. ULONG_PTR
  424. HalSetProfileInterval (
  425. IN ULONG_PTR Interval
  426. );
  427. NTHALAPI
  428. VOID
  429. HalStartProfileInterrupt (
  430. KPROFILE_SOURCE ProfileSource
  431. );
  432. NTHALAPI
  433. VOID
  434. HalStopProfileInterrupt (
  435. KPROFILE_SOURCE ProfileSource
  436. );
  437. //
  438. // Timer and interrupt functions.
  439. //
  440. // begin_ntosp
  441. NTHALAPI
  442. BOOLEAN
  443. HalQueryRealTimeClock (
  444. OUT PTIME_FIELDS TimeFields
  445. );
  446. // end_ntosp
  447. NTHALAPI
  448. BOOLEAN
  449. HalSetRealTimeClock (
  450. IN PTIME_FIELDS TimeFields
  451. );
  452. #if defined(_M_IX86) || defined(_M_AMD64)
  453. NTHALAPI
  454. VOID
  455. FASTCALL
  456. HalRequestSoftwareInterrupt (
  457. KIRQL RequestIrql
  458. );
  459. ULONG
  460. FASTCALL
  461. HalSystemVectorDispatchEntry (
  462. IN ULONG Vector,
  463. OUT PKINTERRUPT_ROUTINE **FlatDispatch,
  464. OUT PKINTERRUPT_ROUTINE *NoConnection
  465. );
  466. #endif
  467. // begin_ntosp
  468. //
  469. // Firmware interface functions.
  470. //
  471. NTHALAPI
  472. VOID
  473. HalReturnToFirmware (
  474. IN FIRMWARE_REENTRY Routine
  475. );
  476. //
  477. // System interrupts functions.
  478. //
  479. NTHALAPI
  480. VOID
  481. HalDisableSystemInterrupt (
  482. IN ULONG Vector,
  483. IN KIRQL Irql
  484. );
  485. NTHALAPI
  486. BOOLEAN
  487. HalEnableSystemInterrupt (
  488. IN ULONG Vector,
  489. IN KIRQL Irql,
  490. IN KINTERRUPT_MODE InterruptMode
  491. );
  492. // begin_ntddk
  493. //
  494. // I/O driver configuration functions.
  495. //
  496. #if !defined(NO_LEGACY_DRIVERS)
  497. DECLSPEC_DEPRECATED_DDK // Use Pnp or IoReportDetectedDevice
  498. NTHALAPI
  499. NTSTATUS
  500. HalAssignSlotResources (
  501. IN PUNICODE_STRING RegistryPath,
  502. IN PUNICODE_STRING DriverClassName OPTIONAL,
  503. IN PDRIVER_OBJECT DriverObject,
  504. IN PDEVICE_OBJECT DeviceObject,
  505. IN INTERFACE_TYPE BusType,
  506. IN ULONG BusNumber,
  507. IN ULONG SlotNumber,
  508. IN OUT PCM_RESOURCE_LIST *AllocatedResources
  509. );
  510. DECLSPEC_DEPRECATED_DDK // Use Pnp or IoReportDetectedDevice
  511. NTHALAPI
  512. ULONG
  513. HalGetInterruptVector(
  514. IN INTERFACE_TYPE InterfaceType,
  515. IN ULONG BusNumber,
  516. IN ULONG BusInterruptLevel,
  517. IN ULONG BusInterruptVector,
  518. OUT PKIRQL Irql,
  519. OUT PKAFFINITY Affinity
  520. );
  521. DECLSPEC_DEPRECATED_DDK // Use IRP_MN_QUERY_INTERFACE and IRP_MN_READ_CONFIG
  522. NTHALAPI
  523. ULONG
  524. HalSetBusData(
  525. IN BUS_DATA_TYPE BusDataType,
  526. IN ULONG BusNumber,
  527. IN ULONG SlotNumber,
  528. IN PVOID Buffer,
  529. IN ULONG Length
  530. );
  531. #endif // NO_LEGACY_DRIVERS
  532. DECLSPEC_DEPRECATED_DDK // Use IRP_MN_QUERY_INTERFACE and IRP_MN_READ_CONFIG
  533. NTHALAPI
  534. ULONG
  535. HalSetBusDataByOffset(
  536. IN BUS_DATA_TYPE BusDataType,
  537. IN ULONG BusNumber,
  538. IN ULONG SlotNumber,
  539. IN PVOID Buffer,
  540. IN ULONG Offset,
  541. IN ULONG Length
  542. );
  543. DECLSPEC_DEPRECATED_DDK // Use IRP_MN_QUERY_INTERFACE and IRP_MN_READ_CONFIG
  544. NTHALAPI
  545. BOOLEAN
  546. HalTranslateBusAddress(
  547. IN INTERFACE_TYPE InterfaceType,
  548. IN ULONG BusNumber,
  549. IN PHYSICAL_ADDRESS BusAddress,
  550. IN OUT PULONG AddressSpace,
  551. OUT PPHYSICAL_ADDRESS TranslatedAddress
  552. );
  553. //
  554. // Values for AddressSpace parameter of HalTranslateBusAddress
  555. //
  556. // 0x0 - Memory space
  557. // 0x1 - Port space
  558. // 0x2 - 0x1F - Address spaces specific for Alpha
  559. // 0x2 - UserMode view of memory space
  560. // 0x3 - UserMode view of port space
  561. // 0x4 - Dense memory space
  562. // 0x5 - reserved
  563. // 0x6 - UserMode view of dense memory space
  564. // 0x7 - 0x1F - reserved
  565. //
  566. NTHALAPI
  567. PVOID
  568. HalAllocateCrashDumpRegisters(
  569. IN PADAPTER_OBJECT AdapterObject,
  570. IN OUT PULONG NumberOfMapRegisters
  571. );
  572. #if !defined(NO_LEGACY_DRIVERS)
  573. DECLSPEC_DEPRECATED_DDK // Use IRP_MN_QUERY_INTERFACE and IRP_MN_READ_CONFIG
  574. NTHALAPI
  575. ULONG
  576. HalGetBusData(
  577. IN BUS_DATA_TYPE BusDataType,
  578. IN ULONG BusNumber,
  579. IN ULONG SlotNumber,
  580. IN PVOID Buffer,
  581. IN ULONG Length
  582. );
  583. #endif // NO_LEGACY_DRIVERS
  584. DECLSPEC_DEPRECATED_DDK // Use IRP_MN_QUERY_INTERFACE and IRP_MN_READ_CONFIG
  585. NTHALAPI
  586. ULONG
  587. HalGetBusDataByOffset(
  588. IN BUS_DATA_TYPE BusDataType,
  589. IN ULONG BusNumber,
  590. IN ULONG SlotNumber,
  591. IN PVOID Buffer,
  592. IN ULONG Offset,
  593. IN ULONG Length
  594. );
  595. DECLSPEC_DEPRECATED_DDK // Use IoGetDmaAdapter
  596. NTHALAPI
  597. PADAPTER_OBJECT
  598. HalGetAdapter(
  599. IN PDEVICE_DESCRIPTION DeviceDescription,
  600. IN OUT PULONG NumberOfMapRegisters
  601. );
  602. // end_ntddk end_ntosp
  603. #if !defined(NO_LEGACY_DRIVERS)
  604. NTHALAPI
  605. NTSTATUS
  606. HalAdjustResourceList (
  607. IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *pResourceList
  608. );
  609. #endif // NO_LEGACY_DRIVERS
  610. // begin_ntddk begin_ntosp
  611. //
  612. // System beep functions.
  613. //
  614. #if !defined(NO_LEGACY_DRIVERS)
  615. DECLSPEC_DEPRECATED_DDK
  616. NTHALAPI
  617. BOOLEAN
  618. HalMakeBeep(
  619. IN ULONG Frequency
  620. );
  621. #endif // NO_LEGACY_DRIVERS
  622. //
  623. // The following function prototypes are for HAL routines with a prefix of Io.
  624. //
  625. // DMA adapter object functions.
  626. //
  627. // end_ntddk end_ntosp
  628. //
  629. // Multi-Processorfunctions.
  630. //
  631. NTHALAPI
  632. BOOLEAN
  633. HalAllProcessorsStarted (
  634. VOID
  635. );
  636. NTHALAPI
  637. VOID
  638. HalInitializeProcessor (
  639. IN ULONG Number,
  640. IN PLOADER_PARAMETER_BLOCK LoaderBlock
  641. );
  642. NTHALAPI
  643. BOOLEAN
  644. HalStartNextProcessor (
  645. IN PLOADER_PARAMETER_BLOCK LoaderBlock,
  646. IN PKPROCESSOR_STATE ProcessorState
  647. );
  648. NTHALAPI
  649. VOID
  650. HalRequestIpi (
  651. IN KAFFINITY Mask
  652. );
  653. //
  654. // The following function prototypes are for HAL routines with a prefix of Kd.
  655. //
  656. // Kernel debugger port functions.
  657. //
  658. NTHALAPI
  659. BOOLEAN
  660. KdPortInitialize (
  661. PDEBUG_PARAMETERS DebugParameters,
  662. PLOADER_PARAMETER_BLOCK LoaderBlock,
  663. BOOLEAN Initialize
  664. );
  665. NTHALAPI
  666. ULONG
  667. KdPortGetByte (
  668. OUT PUCHAR Input
  669. );
  670. NTHALAPI
  671. ULONG
  672. KdPortPollByte (
  673. OUT PUCHAR Input
  674. );
  675. NTHALAPI
  676. VOID
  677. KdPortPutByte (
  678. IN UCHAR Output
  679. );
  680. NTHALAPI
  681. VOID
  682. KdPortRestore (
  683. VOID
  684. );
  685. NTHALAPI
  686. VOID
  687. KdPortSave (
  688. VOID
  689. );
  690. //
  691. // The following function prototypes are for HAL routines with a prefix of Ke.
  692. //
  693. // begin_ntddk begin_ntifs begin_wdm begin_ntosp
  694. //
  695. // Performance counter function.
  696. //
  697. NTHALAPI
  698. LARGE_INTEGER
  699. KeQueryPerformanceCounter (
  700. OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
  701. );
  702. // begin_ntndis
  703. //
  704. // Stall processor execution function.
  705. //
  706. NTHALAPI
  707. VOID
  708. KeStallExecutionProcessor (
  709. IN ULONG MicroSeconds
  710. );
  711. // end_ntddk end_ntifs end_wdm end_ntndis end_ntosp
  712. //*****************************************************************************
  713. //
  714. // HAL BUS EXTENDERS
  715. //
  716. // Bus handlers
  717. //
  718. // begin_ntddk
  719. typedef
  720. VOID
  721. (*PDEVICE_CONTROL_COMPLETION)(
  722. IN struct _DEVICE_CONTROL_CONTEXT *ControlContext
  723. );
  724. typedef struct _DEVICE_CONTROL_CONTEXT {
  725. NTSTATUS Status;
  726. PDEVICE_HANDLER_OBJECT DeviceHandler;
  727. PDEVICE_OBJECT DeviceObject;
  728. ULONG ControlCode;
  729. PVOID Buffer;
  730. PULONG BufferLength;
  731. PVOID Context;
  732. } DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT;
  733. // end_ntddk
  734. typedef struct _HAL_DEVICE_CONTROL {
  735. //
  736. // Handler this DeviceControl is for
  737. //
  738. struct _BUS_HANDLER *Handler;
  739. struct _BUS_HANDLER *RootHandler;
  740. //
  741. // Bus specific storage for this Context
  742. //
  743. PVOID BusExtensionData;
  744. //
  745. // Reserved for HALs use
  746. //
  747. ULONG HalReserved[4];
  748. //
  749. // Reserved for BusExtneder use
  750. //
  751. ULONG BusExtenderReserved[4];
  752. //
  753. // DeviceControl Context and the CompletionRoutine
  754. //
  755. PDEVICE_CONTROL_COMPLETION CompletionRoutine;
  756. DEVICE_CONTROL_CONTEXT DeviceControl;
  757. } HAL_DEVICE_CONTROL_CONTEXT, *PHAL_DEVICE_CONTROL_CONTEXT;
  758. typedef
  759. ULONG
  760. (*PGETSETBUSDATA)(
  761. IN struct _BUS_HANDLER *BusHandler,
  762. IN struct _BUS_HANDLER *RootHandler,
  763. IN ULONG SlotNumber,
  764. IN PVOID Buffer,
  765. IN ULONG Offset,
  766. IN ULONG Length
  767. );
  768. typedef
  769. ULONG
  770. (*PGETINTERRUPTVECTOR)(
  771. IN struct _BUS_HANDLER *BusHandler,
  772. IN struct _BUS_HANDLER *RootHandler,
  773. IN ULONG BusInterruptLevel,
  774. IN ULONG BusInterruptVector,
  775. OUT PKIRQL Irql,
  776. OUT PKAFFINITY Affinity
  777. );
  778. typedef
  779. BOOLEAN
  780. (*PTRANSLATEBUSADDRESS)(
  781. IN struct _BUS_HANDLER *BusHandler,
  782. IN struct _BUS_HANDLER *RootHandler,
  783. IN PHYSICAL_ADDRESS BusAddress,
  784. IN OUT PULONG AddressSpace,
  785. OUT PPHYSICAL_ADDRESS TranslatedAddress
  786. );
  787. typedef NTSTATUS
  788. (*PADJUSTRESOURCELIST)(
  789. IN struct _BUS_HANDLER *BusHandler,
  790. IN struct _BUS_HANDLER *RootHandler,
  791. IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *pResourceList
  792. );
  793. typedef PDEVICE_HANDLER_OBJECT
  794. (*PREFERENCE_DEVICE_HANDLER)(
  795. IN struct _BUS_HANDLER *BusHandler,
  796. IN struct _BUS_HANDLER *RootHandler,
  797. IN ULONG SlotNumber
  798. );
  799. //typedef VOID
  800. //(*PDEREFERENCE_DEVICE_HANDLER)(
  801. // IN PDEVICE_HANDLER_OBJECT DeviceHandler
  802. // );
  803. typedef NTSTATUS
  804. (*PASSIGNSLOTRESOURCES)(
  805. IN struct _BUS_HANDLER *BusHandler,
  806. IN struct _BUS_HANDLER *RootHandler,
  807. IN PUNICODE_STRING RegistryPath,
  808. IN PUNICODE_STRING DriverClassName OPTIONAL,
  809. IN PDRIVER_OBJECT DriverObject,
  810. IN PDEVICE_OBJECT DeviceObject OPTIONAL,
  811. IN ULONG SlotNumber,
  812. IN OUT PCM_RESOURCE_LIST *AllocatedResources
  813. );
  814. typedef
  815. NTSTATUS
  816. (*PQUERY_BUS_SLOTS)(
  817. IN struct _BUS_HANDLER *BusHandler,
  818. IN struct _BUS_HANDLER *RootHandler,
  819. IN ULONG BufferSize,
  820. OUT PULONG SlotNumbers,
  821. OUT PULONG ReturnedLength
  822. );
  823. typedef ULONG
  824. (*PGET_SET_DEVICE_INSTANCE_DATA)(
  825. IN struct _BUS_HANDLER *BusHandler,
  826. IN struct _BUS_HANDLER *RootHandler,
  827. IN PDEVICE_HANDLER_OBJECT DeviceHandler,
  828. IN ULONG DataType,
  829. IN PVOID Buffer,
  830. IN ULONG Offset,
  831. IN ULONG Length
  832. );
  833. typedef
  834. NTSTATUS
  835. (*PDEVICE_CONTROL)(
  836. IN PHAL_DEVICE_CONTROL_CONTEXT Context
  837. );
  838. typedef
  839. NTSTATUS
  840. (*PHIBERNATEBRESUMEBUS)(
  841. IN struct _BUS_HANDLER *BusHandler,
  842. IN struct _BUS_HANDLER *RootHandler
  843. );
  844. //
  845. // Supported range structures
  846. //
  847. #define BUS_SUPPORTED_RANGE_VERSION 1
  848. typedef struct _SUPPORTED_RANGE {
  849. struct _SUPPORTED_RANGE *Next;
  850. ULONG SystemAddressSpace;
  851. LONGLONG SystemBase;
  852. LONGLONG Base;
  853. LONGLONG Limit;
  854. } SUPPORTED_RANGE, *PSUPPORTED_RANGE;
  855. typedef struct _SUPPORTED_RANGES {
  856. USHORT Version;
  857. BOOLEAN Sorted;
  858. UCHAR Reserved;
  859. ULONG NoIO;
  860. SUPPORTED_RANGE IO;
  861. ULONG NoMemory;
  862. SUPPORTED_RANGE Memory;
  863. ULONG NoPrefetchMemory;
  864. SUPPORTED_RANGE PrefetchMemory;
  865. ULONG NoDma;
  866. SUPPORTED_RANGE Dma;
  867. } SUPPORTED_RANGES, *PSUPPORTED_RANGES;
  868. //
  869. // Bus handler structure
  870. //
  871. #define BUS_HANDLER_VERSION 1
  872. typedef struct _BUS_HANDLER {
  873. //
  874. // Version of structure
  875. //
  876. ULONG Version;
  877. //
  878. // This bus handler structure is for the following bus
  879. //
  880. INTERFACE_TYPE InterfaceType;
  881. BUS_DATA_TYPE ConfigurationType;
  882. ULONG BusNumber;
  883. //
  884. // Device object for this bus extender, or NULL if it is
  885. // a hal internal bus extender
  886. //
  887. PDEVICE_OBJECT DeviceObject;
  888. //
  889. // The parent handlers for this bus
  890. //
  891. struct _BUS_HANDLER *ParentHandler;
  892. //
  893. // Bus specific strorage
  894. //
  895. PVOID BusData;
  896. //
  897. // Amount of bus specific storage needed for DeviceControl function calls
  898. //
  899. ULONG DeviceControlExtensionSize;
  900. //
  901. // Supported address ranges this bus allows
  902. //
  903. PSUPPORTED_RANGES BusAddresses;
  904. //
  905. // For future use
  906. //
  907. ULONG Reserved[4];
  908. //
  909. // Handlers for this bus
  910. //
  911. PGETSETBUSDATA GetBusData;
  912. PGETSETBUSDATA SetBusData;
  913. PADJUSTRESOURCELIST AdjustResourceList;
  914. PASSIGNSLOTRESOURCES AssignSlotResources;
  915. PGETINTERRUPTVECTOR GetInterruptVector;
  916. PTRANSLATEBUSADDRESS TranslateBusAddress;
  917. PVOID Spare1;
  918. PVOID Spare2;
  919. PVOID Spare3;
  920. PVOID Spare4;
  921. PVOID Spare5;
  922. PVOID Spare6;
  923. PVOID Spare7;
  924. PVOID Spare8;
  925. } BUS_HANDLER, *PBUS_HANDLER;
  926. VOID
  927. HalpInitBusHandler (
  928. VOID
  929. );
  930. // begin_ntosp
  931. typedef
  932. NTSTATUS
  933. (*PINSTALL_BUS_HANDLER)(
  934. IN PBUS_HANDLER Bus
  935. );
  936. typedef
  937. NTSTATUS
  938. (*pHalRegisterBusHandler)(
  939. IN INTERFACE_TYPE InterfaceType,
  940. IN BUS_DATA_TYPE AssociatedConfigurationSpace,
  941. IN ULONG BusNumber,
  942. IN INTERFACE_TYPE ParentBusType,
  943. IN ULONG ParentBusNumber,
  944. IN ULONG SizeofBusExtensionData,
  945. IN PINSTALL_BUS_HANDLER InstallBusHandlers,
  946. OUT PBUS_HANDLER *BusHandler
  947. );
  948. // end_ntosp
  949. NTSTATUS
  950. HaliRegisterBusHandler (
  951. IN INTERFACE_TYPE InterfaceType,
  952. IN BUS_DATA_TYPE AssociatedConfigurationSpace,
  953. IN ULONG BusNumber,
  954. IN INTERFACE_TYPE ParentBusType,
  955. IN ULONG ParentBusNumber,
  956. IN ULONG SizeofBusExtensionData,
  957. IN PINSTALL_BUS_HANDLER InstallBusHandlers,
  958. OUT PBUS_HANDLER *BusHandler
  959. );
  960. // begin_ntddk begin_ntosp
  961. typedef
  962. PBUS_HANDLER
  963. (FASTCALL *pHalHandlerForBus) (
  964. IN INTERFACE_TYPE InterfaceType,
  965. IN ULONG BusNumber
  966. );
  967. // end_ntddk end_ntosp
  968. PBUS_HANDLER
  969. FASTCALL
  970. HaliReferenceHandlerForBus (
  971. IN INTERFACE_TYPE InterfaceType,
  972. IN ULONG BusNumber
  973. );
  974. PBUS_HANDLER
  975. FASTCALL
  976. HaliHandlerForBus (
  977. IN INTERFACE_TYPE InterfaceType,
  978. IN ULONG BusNumber
  979. );
  980. typedef VOID
  981. (FASTCALL *pHalRefernceBusHandler) (
  982. IN PBUS_HANDLER BusHandler
  983. );
  984. VOID
  985. FASTCALL
  986. HaliDerefernceBusHandler (
  987. IN PBUS_HANDLER BusHandler
  988. );
  989. // begin_ntosp
  990. typedef
  991. PBUS_HANDLER
  992. (FASTCALL *pHalHandlerForConfigSpace) (
  993. IN BUS_DATA_TYPE ConfigSpace,
  994. IN ULONG BusNumber
  995. );
  996. // end_ntosp
  997. PBUS_HANDLER
  998. FASTCALL
  999. HaliHandlerForConfigSpace (
  1000. IN BUS_DATA_TYPE ConfigSpace,
  1001. IN ULONG BusNumber
  1002. );
  1003. // begin_ntddk begin_ntosp
  1004. typedef
  1005. VOID
  1006. (FASTCALL *pHalReferenceBusHandler) (
  1007. IN PBUS_HANDLER BusHandler
  1008. );
  1009. // end_ntddk end_ntosp
  1010. VOID
  1011. FASTCALL
  1012. HaliReferenceBusHandler (
  1013. IN PBUS_HANDLER BusHandler
  1014. );
  1015. VOID
  1016. FASTCALL
  1017. HaliDereferenceBusHandler (
  1018. IN PBUS_HANDLER BusHandler
  1019. );
  1020. NTSTATUS
  1021. HaliQueryBusSlots (
  1022. IN PBUS_HANDLER BusHandler,
  1023. IN ULONG BufferSize,
  1024. OUT PULONG SlotNumbers,
  1025. OUT PULONG ReturnedLength
  1026. );
  1027. NTSTATUS
  1028. HaliAdjustResourceListRange (
  1029. IN PSUPPORTED_RANGES SupportedRanges,
  1030. IN PSUPPORTED_RANGE InterruptRanges,
  1031. IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *pResourceList
  1032. );
  1033. VOID
  1034. HaliLocateHiberRanges (
  1035. IN PVOID MemoryMap
  1036. );
  1037. // begin_ntosp
  1038. typedef
  1039. VOID
  1040. (*pHalSetWakeEnable)(
  1041. IN BOOLEAN Enable
  1042. );
  1043. typedef
  1044. VOID
  1045. (*pHalSetWakeAlarm)(
  1046. IN ULONGLONG WakeTime,
  1047. IN PTIME_FIELDS WakeTimeFields
  1048. );
  1049. typedef
  1050. VOID
  1051. (*pHalLocateHiberRanges)(
  1052. IN PVOID MemoryMap
  1053. );
  1054. // begin_ntddk
  1055. //*****************************************************************************
  1056. // HAL Function dispatch
  1057. //
  1058. typedef enum _HAL_QUERY_INFORMATION_CLASS {
  1059. HalInstalledBusInformation,
  1060. HalProfileSourceInformation,
  1061. HalInformationClassUnused1,
  1062. HalPowerInformation,
  1063. HalProcessorSpeedInformation,
  1064. HalCallbackInformation,
  1065. HalMapRegisterInformation,
  1066. HalMcaLogInformation, // Machine Check Abort Information
  1067. HalFrameBufferCachingInformation,
  1068. HalDisplayBiosInformation,
  1069. HalProcessorFeatureInformation,
  1070. HalNumaTopologyInterface,
  1071. HalErrorInformation, // General MCA, CMC, CPE Error Information.
  1072. HalCmcLogInformation, // Processor Corrected Machine Check Information
  1073. HalCpeLogInformation, // Corrected Platform Error Information
  1074. HalQueryMcaInterface,
  1075. HalQueryAMLIIllegalIOPortAddresses,
  1076. HalQueryMaxHotPlugMemoryAddress,
  1077. HalPartitionIpiInterface,
  1078. HalPlatformInformation,
  1079. HalQueryProfileSourceList
  1080. // information levels >= 0x8000000 reserved for OEM use
  1081. } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
  1082. typedef enum _HAL_SET_INFORMATION_CLASS {
  1083. HalProfileSourceInterval,
  1084. HalProfileSourceInterruptHandler,
  1085. HalMcaRegisterDriver, // Registring Machine Check Abort driver
  1086. HalKernelErrorHandler,
  1087. HalCmcRegisterDriver, // Registring Processor Corrected Machine Check driver
  1088. HalCpeRegisterDriver, // Registring Corrected Platform Error driver
  1089. HalMcaLog,
  1090. HalCmcLog,
  1091. HalCpeLog,
  1092. HalGenerateCmcInterrupt // Used to test CMC
  1093. } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
  1094. typedef
  1095. NTSTATUS
  1096. (*pHalQuerySystemInformation)(
  1097. IN HAL_QUERY_INFORMATION_CLASS InformationClass,
  1098. IN ULONG BufferSize,
  1099. IN OUT PVOID Buffer,
  1100. OUT PULONG ReturnedLength
  1101. );
  1102. // end_ntddk
  1103. NTSTATUS
  1104. HaliQuerySystemInformation(
  1105. IN HAL_SET_INFORMATION_CLASS InformationClass,
  1106. IN ULONG BufferSize,
  1107. IN OUT PVOID Buffer,
  1108. OUT PULONG ReturnedLength
  1109. );
  1110. NTSTATUS
  1111. HaliHandlePCIConfigSpaceAccess(
  1112. IN BOOLEAN Read,
  1113. IN ULONG Addr,
  1114. IN ULONG Size,
  1115. IN OUT PULONG pData
  1116. );
  1117. //begin_ntddk
  1118. typedef
  1119. NTSTATUS
  1120. (*pHalSetSystemInformation)(
  1121. IN HAL_SET_INFORMATION_CLASS InformationClass,
  1122. IN ULONG BufferSize,
  1123. IN PVOID Buffer
  1124. );
  1125. // end_ntddk
  1126. NTSTATUS
  1127. HaliSetSystemInformation(
  1128. IN HAL_SET_INFORMATION_CLASS InformationClass,
  1129. IN ULONG BufferSize,
  1130. IN PVOID Buffer
  1131. );
  1132. // begin_ntddk
  1133. typedef
  1134. VOID
  1135. (FASTCALL *pHalExamineMBR)(
  1136. IN PDEVICE_OBJECT DeviceObject,
  1137. IN ULONG SectorSize,
  1138. IN ULONG MBRTypeIdentifier,
  1139. OUT PVOID *Buffer
  1140. );
  1141. typedef
  1142. VOID
  1143. (FASTCALL *pHalIoAssignDriveLetters)(
  1144. IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
  1145. IN PSTRING NtDeviceName,
  1146. OUT PUCHAR NtSystemPath,
  1147. OUT PSTRING NtSystemPathString
  1148. );
  1149. typedef
  1150. NTSTATUS
  1151. (FASTCALL *pHalIoReadPartitionTable)(
  1152. IN PDEVICE_OBJECT DeviceObject,
  1153. IN ULONG SectorSize,
  1154. IN BOOLEAN ReturnRecognizedPartitions,
  1155. OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer
  1156. );
  1157. typedef
  1158. NTSTATUS
  1159. (FASTCALL *pHalIoSetPartitionInformation)(
  1160. IN PDEVICE_OBJECT DeviceObject,
  1161. IN ULONG SectorSize,
  1162. IN ULONG PartitionNumber,
  1163. IN ULONG PartitionType
  1164. );
  1165. typedef
  1166. NTSTATUS
  1167. (FASTCALL *pHalIoWritePartitionTable)(
  1168. IN PDEVICE_OBJECT DeviceObject,
  1169. IN ULONG SectorSize,
  1170. IN ULONG SectorsPerTrack,
  1171. IN ULONG NumberOfHeads,
  1172. IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer
  1173. );
  1174. typedef
  1175. NTSTATUS
  1176. (*pHalQueryBusSlots)(
  1177. IN PBUS_HANDLER BusHandler,
  1178. IN ULONG BufferSize,
  1179. OUT PULONG SlotNumbers,
  1180. OUT PULONG ReturnedLength
  1181. );
  1182. typedef
  1183. NTSTATUS
  1184. (*pHalInitPnpDriver)(
  1185. VOID
  1186. );
  1187. // end_ntddk
  1188. NTSTATUS
  1189. HaliInitPnpDriver(
  1190. VOID
  1191. );
  1192. // begin_ntddk
  1193. typedef struct _PM_DISPATCH_TABLE {
  1194. ULONG Signature;
  1195. ULONG Version;
  1196. PVOID Function[1];
  1197. } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
  1198. typedef
  1199. NTSTATUS
  1200. (*pHalInitPowerManagement)(
  1201. IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
  1202. OUT PPM_DISPATCH_TABLE *PmHalDispatchTable
  1203. );
  1204. // end_ntddk
  1205. NTSTATUS
  1206. HaliInitPowerManagement(
  1207. IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
  1208. IN OUT PPM_DISPATCH_TABLE *PmHalDispatchTable
  1209. );
  1210. // begin_ntddk
  1211. typedef
  1212. struct _DMA_ADAPTER *
  1213. (*pHalGetDmaAdapter)(
  1214. IN PVOID Context,
  1215. IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
  1216. OUT PULONG NumberOfMapRegisters
  1217. );
  1218. // end_ntddk
  1219. struct _DMA_ADAPTER *
  1220. HaliGetDmaAdapter(
  1221. IN PVOID Context,
  1222. IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
  1223. OUT PULONG NumberOfMapRegisters
  1224. );
  1225. // begin_ntddk
  1226. typedef
  1227. NTSTATUS
  1228. (*pHalGetInterruptTranslator)(
  1229. IN INTERFACE_TYPE ParentInterfaceType,
  1230. IN ULONG ParentBusNumber,
  1231. IN INTERFACE_TYPE BridgeInterfaceType,
  1232. IN USHORT Size,
  1233. IN USHORT Version,
  1234. OUT PTRANSLATOR_INTERFACE Translator,
  1235. OUT PULONG BridgeBusNumber
  1236. );
  1237. // end_ntddk
  1238. NTSTATUS
  1239. HaliGetInterruptTranslator(
  1240. IN INTERFACE_TYPE ParentInterfaceType,
  1241. IN ULONG ParentBusNumber,
  1242. IN INTERFACE_TYPE BridgeInterfaceType,
  1243. IN USHORT Size,
  1244. IN USHORT Version,
  1245. OUT PTRANSLATOR_INTERFACE Translator,
  1246. OUT PULONG BridgeBusNumber
  1247. );
  1248. // begin_ntddk
  1249. typedef
  1250. BOOLEAN
  1251. (*pHalTranslateBusAddress)(
  1252. IN INTERFACE_TYPE InterfaceType,
  1253. IN ULONG BusNumber,
  1254. IN PHYSICAL_ADDRESS BusAddress,
  1255. IN OUT PULONG AddressSpace,
  1256. OUT PPHYSICAL_ADDRESS TranslatedAddress
  1257. );
  1258. typedef
  1259. NTSTATUS
  1260. (*pHalAssignSlotResources) (
  1261. IN PUNICODE_STRING RegistryPath,
  1262. IN PUNICODE_STRING DriverClassName OPTIONAL,
  1263. IN PDRIVER_OBJECT DriverObject,
  1264. IN PDEVICE_OBJECT DeviceObject,
  1265. IN INTERFACE_TYPE BusType,
  1266. IN ULONG BusNumber,
  1267. IN ULONG SlotNumber,
  1268. IN OUT PCM_RESOURCE_LIST *AllocatedResources
  1269. );
  1270. typedef
  1271. VOID
  1272. (*pHalHaltSystem) (
  1273. VOID
  1274. );
  1275. typedef
  1276. BOOLEAN
  1277. (*pHalResetDisplay) (
  1278. VOID
  1279. );
  1280. // begin_ntndis
  1281. typedef struct _MAP_REGISTER_ENTRY {
  1282. PVOID MapRegister;
  1283. BOOLEAN WriteToDevice;
  1284. } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
  1285. // end_ntndis
  1286. // end_ntddk
  1287. typedef
  1288. NTSTATUS
  1289. (*pHalAllocateMapRegisters)(
  1290. IN struct _ADAPTER_OBJECT *DmaAdapter,
  1291. IN ULONG NumberOfMapRegisters,
  1292. IN ULONG BaseAddressCount,
  1293. OUT PMAP_REGISTER_ENTRY MapRegsiterArray
  1294. );
  1295. NTSTATUS
  1296. HalAllocateMapRegisters(
  1297. IN struct _ADAPTER_OBJECT *DmaAdapter,
  1298. IN ULONG NumberOfMapRegisters,
  1299. IN ULONG BaseAddressCount,
  1300. OUT PMAP_REGISTER_ENTRY MapRegsiterArray
  1301. );
  1302. // begin_ntddk
  1303. typedef
  1304. UCHAR
  1305. (*pHalVectorToIDTEntry) (
  1306. ULONG Vector
  1307. );
  1308. typedef
  1309. BOOLEAN
  1310. (*pHalFindBusAddressTranslation) (
  1311. IN PHYSICAL_ADDRESS BusAddress,
  1312. IN OUT PULONG AddressSpace,
  1313. OUT PPHYSICAL_ADDRESS TranslatedAddress,
  1314. IN OUT PULONG_PTR Context,
  1315. IN BOOLEAN NextBus
  1316. );
  1317. typedef
  1318. NTSTATUS
  1319. (*pHalStartMirroring)(
  1320. VOID
  1321. );
  1322. typedef
  1323. NTSTATUS
  1324. (*pHalEndMirroring)(
  1325. IN ULONG PassNumber
  1326. );
  1327. typedef
  1328. NTSTATUS
  1329. (*pHalMirrorPhysicalMemory)(
  1330. IN PHYSICAL_ADDRESS PhysicalAddress,
  1331. IN LARGE_INTEGER NumberOfBytes
  1332. );
  1333. typedef
  1334. NTSTATUS
  1335. (*pHalMirrorVerify)(
  1336. IN PHYSICAL_ADDRESS PhysicalAddress,
  1337. IN LARGE_INTEGER NumberOfBytes
  1338. );
  1339. typedef struct {
  1340. UCHAR Type; //CmResourceType
  1341. BOOLEAN Valid;
  1342. UCHAR Reserved[2];
  1343. PUCHAR TranslatedAddress;
  1344. ULONG Length;
  1345. } DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS;
  1346. typedef struct {
  1347. PHYSICAL_ADDRESS Start;
  1348. PHYSICAL_ADDRESS MaxEnd;
  1349. PVOID VirtualAddress;
  1350. ULONG Length;
  1351. BOOLEAN Cached;
  1352. BOOLEAN Aligned;
  1353. } DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS;
  1354. typedef struct {
  1355. ULONG Bus;
  1356. ULONG Slot;
  1357. USHORT VendorID;
  1358. USHORT DeviceID;
  1359. UCHAR BaseClass;
  1360. UCHAR SubClass;
  1361. UCHAR ProgIf;
  1362. BOOLEAN Initialized;
  1363. DEBUG_DEVICE_ADDRESS BaseAddress[6];
  1364. DEBUG_MEMORY_REQUIREMENTS Memory;
  1365. } DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
  1366. typedef
  1367. NTSTATUS
  1368. (*pKdSetupPciDeviceForDebugging)(
  1369. IN PVOID LoaderBlock, OPTIONAL
  1370. IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
  1371. );
  1372. typedef
  1373. NTSTATUS
  1374. (*pKdReleasePciDeviceForDebugging)(
  1375. IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
  1376. );
  1377. typedef
  1378. PVOID
  1379. (*pKdGetAcpiTablePhase0)(
  1380. IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
  1381. IN ULONG Signature
  1382. );
  1383. typedef
  1384. VOID
  1385. (*pKdCheckPowerButton)(
  1386. VOID
  1387. );
  1388. typedef
  1389. VOID
  1390. (*pHalEndOfBoot)(
  1391. VOID
  1392. );
  1393. typedef
  1394. PVOID
  1395. (*pKdMapPhysicalMemory64)(
  1396. IN PHYSICAL_ADDRESS PhysicalAddress,
  1397. IN ULONG NumberPages
  1398. );
  1399. typedef
  1400. VOID
  1401. (*pKdUnmapVirtualAddress)(
  1402. IN PVOID VirtualAddress,
  1403. IN ULONG NumberPages
  1404. );
  1405. typedef struct {
  1406. ULONG Version;
  1407. pHalQuerySystemInformation HalQuerySystemInformation;
  1408. pHalSetSystemInformation HalSetSystemInformation;
  1409. pHalQueryBusSlots HalQueryBusSlots;
  1410. ULONG Spare1;
  1411. pHalExamineMBR HalExamineMBR;
  1412. pHalIoAssignDriveLetters HalIoAssignDriveLetters;
  1413. pHalIoReadPartitionTable HalIoReadPartitionTable;
  1414. pHalIoSetPartitionInformation HalIoSetPartitionInformation;
  1415. pHalIoWritePartitionTable HalIoWritePartitionTable;
  1416. pHalHandlerForBus HalReferenceHandlerForBus;
  1417. pHalReferenceBusHandler HalReferenceBusHandler;
  1418. pHalReferenceBusHandler HalDereferenceBusHandler;
  1419. pHalInitPnpDriver HalInitPnpDriver;
  1420. pHalInitPowerManagement HalInitPowerManagement;
  1421. pHalGetDmaAdapter HalGetDmaAdapter;
  1422. pHalGetInterruptTranslator HalGetInterruptTranslator;
  1423. pHalStartMirroring HalStartMirroring;
  1424. pHalEndMirroring HalEndMirroring;
  1425. pHalMirrorPhysicalMemory HalMirrorPhysicalMemory;
  1426. pHalEndOfBoot HalEndOfBoot;
  1427. pHalMirrorVerify HalMirrorVerify;
  1428. } HAL_DISPATCH, *PHAL_DISPATCH;
  1429. #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_)
  1430. extern PHAL_DISPATCH HalDispatchTable;
  1431. #define HALDISPATCH HalDispatchTable
  1432. #else
  1433. extern HAL_DISPATCH HalDispatchTable;
  1434. #define HALDISPATCH (&HalDispatchTable)
  1435. #endif
  1436. #define HAL_DISPATCH_VERSION 3
  1437. #define HalDispatchTableVersion HALDISPATCH->Version
  1438. #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
  1439. #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
  1440. #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
  1441. #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
  1442. #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
  1443. #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
  1444. #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
  1445. #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
  1446. #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
  1447. #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
  1448. #define HalStartMirroring HALDISPATCH->HalStartMirroring
  1449. #define HalEndMirroring HALDISPATCH->HalEndMirroring
  1450. #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
  1451. #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
  1452. #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
  1453. // end_ntddk
  1454. typedef struct {
  1455. ULONG Version;
  1456. pHalHandlerForBus HalHandlerForBus;
  1457. pHalHandlerForConfigSpace HalHandlerForConfigSpace;
  1458. pHalLocateHiberRanges HalLocateHiberRanges;
  1459. pHalRegisterBusHandler HalRegisterBusHandler;
  1460. pHalSetWakeEnable HalSetWakeEnable;
  1461. pHalSetWakeAlarm HalSetWakeAlarm;
  1462. pHalTranslateBusAddress HalPciTranslateBusAddress;
  1463. pHalAssignSlotResources HalPciAssignSlotResources;
  1464. pHalHaltSystem HalHaltSystem;
  1465. pHalFindBusAddressTranslation HalFindBusAddressTranslation;
  1466. pHalResetDisplay HalResetDisplay;
  1467. pHalAllocateMapRegisters HalAllocateMapRegisters;
  1468. pKdSetupPciDeviceForDebugging KdSetupPciDeviceForDebugging;
  1469. pKdReleasePciDeviceForDebugging KdReleasePciDeviceForDebugging;
  1470. pKdGetAcpiTablePhase0 KdGetAcpiTablePhase0;
  1471. pKdCheckPowerButton KdCheckPowerButton;
  1472. pHalVectorToIDTEntry HalVectorToIDTEntry;
  1473. pKdMapPhysicalMemory64 KdMapPhysicalMemory64;
  1474. pKdUnmapVirtualAddress KdUnmapVirtualAddress;
  1475. } HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH;
  1476. #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_)
  1477. extern PHAL_PRIVATE_DISPATCH HalPrivateDispatchTable;
  1478. #define HALPDISPATCH HalPrivateDispatchTable
  1479. #else
  1480. extern HAL_PRIVATE_DISPATCH HalPrivateDispatchTable;
  1481. #define HALPDISPATCH (&HalPrivateDispatchTable)
  1482. #endif
  1483. #define HAL_PRIVATE_DISPATCH_VERSION 2
  1484. #define HalRegisterBusHandler HALPDISPATCH->HalRegisterBusHandler
  1485. #define HalHandlerForBus HALPDISPATCH->HalHandlerForBus
  1486. #define HalHandlerForConfigSpace HALPDISPATCH->HalHandlerForConfigSpace
  1487. #define HalLocateHiberRanges HALPDISPATCH->HalLocateHiberRanges
  1488. #define HalSetWakeEnable HALPDISPATCH->HalSetWakeEnable
  1489. #define HalSetWakeAlarm HALPDISPATCH->HalSetWakeAlarm
  1490. #define HalHaltSystem HALPDISPATCH->HalHaltSystem
  1491. #define HalResetDisplay HALPDISPATCH->HalResetDisplay
  1492. #define HalAllocateMapRegisters HALPDISPATCH->HalAllocateMapRegisters
  1493. #define KdSetupPciDeviceForDebugging HALPDISPATCH->KdSetupPciDeviceForDebugging
  1494. #define KdReleasePciDeviceForDebugging HALPDISPATCH->KdReleasePciDeviceForDebugging
  1495. #define KdGetAcpiTablePhase0 HALPDISPATCH->KdGetAcpiTablePhase0
  1496. #define KdCheckPowerButton HALPDISPATCH->KdCheckPowerButton
  1497. #define HalVectorToIDTEntry HALPDISPATCH->HalVectorToIDTEntry
  1498. #define KdMapPhysicalMemory64 HALPDISPATCH->KdMapPhysicalMemory64
  1499. #define KdUnmapVirtualAddress HALPDISPATCH->KdUnmapVirtualAddress
  1500. // begin_ntddk
  1501. //
  1502. // HAL System Information Structures.
  1503. //
  1504. // for the information class "HalInstalledBusInformation"
  1505. typedef struct _HAL_BUS_INFORMATION{
  1506. INTERFACE_TYPE BusType;
  1507. BUS_DATA_TYPE ConfigurationType;
  1508. ULONG BusNumber;
  1509. ULONG Reserved;
  1510. } HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION;
  1511. // for the information class "HalProfileSourceInformation"
  1512. typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
  1513. KPROFILE_SOURCE Source;
  1514. BOOLEAN Supported;
  1515. ULONG Interval;
  1516. } HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
  1517. // for the information class "HalProfileSourceInformation"
  1518. typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX {
  1519. KPROFILE_SOURCE Source;
  1520. BOOLEAN Supported;
  1521. ULONG_PTR Interval;
  1522. ULONG_PTR DefInterval;
  1523. ULONG_PTR MaxInterval;
  1524. ULONG_PTR MinInterval;
  1525. } HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX;
  1526. // for the information class "HalProfileSourceInterval"
  1527. typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
  1528. KPROFILE_SOURCE Source;
  1529. ULONG_PTR Interval;
  1530. } HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
  1531. // for the information class "HalQueryProfileSourceList"
  1532. typedef struct _HAL_PROFILE_SOURCE_LIST {
  1533. KPROFILE_SOURCE Source;
  1534. PWSTR Description;
  1535. } HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST;
  1536. // for the information class "HalDispayBiosInformation"
  1537. typedef enum _HAL_DISPLAY_BIOS_INFORMATION {
  1538. HalDisplayInt10Bios,
  1539. HalDisplayEmulatedBios,
  1540. HalDisplayNoBios
  1541. } HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION;
  1542. // for the information class "HalPowerInformation"
  1543. typedef struct _HAL_POWER_INFORMATION {
  1544. ULONG TBD;
  1545. } HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION;
  1546. // for the information class "HalProcessorSpeedInformation"
  1547. typedef struct _HAL_PROCESSOR_SPEED_INFO {
  1548. ULONG ProcessorSpeed;
  1549. } HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION;
  1550. // for the information class "HalCallbackInformation"
  1551. typedef struct _HAL_CALLBACKS {
  1552. PCALLBACK_OBJECT SetSystemInformation;
  1553. PCALLBACK_OBJECT BusCheck;
  1554. } HAL_CALLBACKS, *PHAL_CALLBACKS;
  1555. // for the information class "HalProcessorFeatureInformation"
  1556. typedef struct _HAL_PROCESSOR_FEATURE {
  1557. ULONG UsableFeatureBits;
  1558. } HAL_PROCESSOR_FEATURE;
  1559. // for the information class "HalNumaTopologyInterface"
  1560. typedef ULONG HALNUMAPAGETONODE;
  1561. typedef
  1562. HALNUMAPAGETONODE
  1563. (*PHALNUMAPAGETONODE)(
  1564. IN ULONG_PTR PhysicalPageNumber
  1565. );
  1566. typedef
  1567. NTSTATUS
  1568. (*PHALNUMAQUERYPROCESSORNODE)(
  1569. IN ULONG ProcessorNumber,
  1570. OUT PUSHORT Identifier,
  1571. OUT PUCHAR Node
  1572. );
  1573. typedef struct _HAL_NUMA_TOPOLOGY_INTERFACE {
  1574. ULONG NumberOfNodes;
  1575. PHALNUMAQUERYPROCESSORNODE QueryProcessorNode;
  1576. PHALNUMAPAGETONODE PageToNode;
  1577. } HAL_NUMA_TOPOLOGY_INTERFACE;
  1578. typedef
  1579. NTSTATUS
  1580. (*PHALIOREADWRITEHANDLER)(
  1581. IN BOOLEAN fRead,
  1582. IN ULONG dwAddr,
  1583. IN ULONG dwSize,
  1584. IN OUT PULONG pdwData
  1585. );
  1586. // for the information class "HalQueryIllegalIOPortAddresses"
  1587. typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
  1588. {
  1589. ULONG BadAddrBegin;
  1590. ULONG BadAddrSize;
  1591. ULONG OSVersionTrigger;
  1592. PHALIOREADWRITEHANDLER IOHandler;
  1593. } HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST;
  1594. // end_ntosp
  1595. #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
  1596. //
  1597. // HalQueryMcaInterface
  1598. //
  1599. typedef
  1600. VOID
  1601. (*PHALMCAINTERFACELOCK)(
  1602. VOID
  1603. );
  1604. typedef
  1605. VOID
  1606. (*PHALMCAINTERFACEUNLOCK)(
  1607. VOID
  1608. );
  1609. typedef
  1610. NTSTATUS
  1611. (*PHALMCAINTERFACEREADREGISTER)(
  1612. IN UCHAR BankNumber,
  1613. IN OUT PVOID Exception
  1614. );
  1615. typedef struct _HAL_MCA_INTERFACE {
  1616. PHALMCAINTERFACELOCK Lock;
  1617. PHALMCAINTERFACEUNLOCK Unlock;
  1618. PHALMCAINTERFACEREADREGISTER ReadRegister;
  1619. } HAL_MCA_INTERFACE;
  1620. #if defined(_AMD64_)
  1621. struct _KTRAP_FRAME;
  1622. struct _KEXCEPTION_FRAME;
  1623. typedef
  1624. ERROR_SEVERITY
  1625. (*PDRIVER_EXCPTN_CALLBACK) (
  1626. IN PVOID Context,
  1627. IN struct _KTRAP_FRAME *TrapFrame,
  1628. IN struct _KEXCEPTION_FRAME *ExceptionFrame,
  1629. IN PMCA_EXCEPTION Exception
  1630. );
  1631. #endif
  1632. #if defined(_X86_) || defined(_IA64_)
  1633. typedef
  1634. #if defined(_IA64_)
  1635. ERROR_SEVERITY
  1636. #else
  1637. VOID
  1638. #endif
  1639. (*PDRIVER_EXCPTN_CALLBACK) (
  1640. IN PVOID Context,
  1641. IN PMCA_EXCEPTION BankLog
  1642. );
  1643. #endif
  1644. typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK;
  1645. //
  1646. // Structure to record the callbacks from driver
  1647. //
  1648. typedef struct _MCA_DRIVER_INFO {
  1649. PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback;
  1650. PKDEFERRED_ROUTINE DpcCallback;
  1651. PVOID DeviceContext;
  1652. } MCA_DRIVER_INFO, *PMCA_DRIVER_INFO;
  1653. // end_ntddk
  1654. // For the information class HalKernelErrorHandler
  1655. typedef enum
  1656. {
  1657. MceNotification, // An MCE realated event occured
  1658. McaAvailable, // An CPE is available for processing
  1659. CmcAvailable, // An CMC is available for processing
  1660. CpeAvailable, // An CPE is available for processing
  1661. CmcSwitchToPolledMode, // CMC Threshold exceeded - switching to polled mode
  1662. CpeSwitchToPolledMode // CPE Threshold exceeded - switching to polled mode
  1663. } KERNEL_MCE_DELIVERY_OPERATION, *PKERNEL_MCE_DELIVERY_OPERATION;
  1664. typedef BOOLEAN (*KERNEL_MCA_DELIVERY)( PVOID Reserved, KERNEL_MCE_DELIVERY_OPERATION Operation, PVOID Argument2 );
  1665. typedef BOOLEAN (*KERNEL_CMC_DELIVERY)( PVOID Reserved, KERNEL_MCE_DELIVERY_OPERATION Operation, PVOID Argument2 );
  1666. typedef BOOLEAN (*KERNEL_CPE_DELIVERY)( PVOID Reserved, KERNEL_MCE_DELIVERY_OPERATION Operation, PVOID Argument2 );
  1667. typedef BOOLEAN (*KERNEL_MCE_DELIVERY)( PVOID Reserved, KERNEL_MCE_DELIVERY_OPERATION Operation, PVOID Argument2 );
  1668. #define KERNEL_ERROR_HANDLER_VERSION 0x2
  1669. typedef struct
  1670. {
  1671. ULONG Version; // Version of this structure. Required to be 1rst field.
  1672. ULONG Padding;
  1673. KERNEL_MCA_DELIVERY KernelMcaDelivery; // Kernel callback for MCA DPC Queueing.
  1674. KERNEL_CMC_DELIVERY KernelCmcDelivery; // Kernel callback for CMC DPC Queueing.
  1675. KERNEL_CPE_DELIVERY KernelCpeDelivery; // Kernel callback for CPE DPC Queueing.
  1676. KERNEL_MCE_DELIVERY KernelMceDelivery; // Kernel callback for CME DPC Queueing.
  1677. // Includes the kernel notifications for FW
  1678. // interfaces errors.
  1679. } KERNEL_ERROR_HANDLER_INFO, *PKERNEL_ERROR_HANDLER_INFO;
  1680. // KERNEL_MCA_DELIVERY.McaType definition
  1681. #define KERNEL_MCA_UNKNOWN 0x0
  1682. #define KERNEL_MCA_PREVIOUS 0x1
  1683. #define KERNEL_MCA_CORRECTED 0x2
  1684. // KERNEL_MCE_DELIVERY.Reserved.EVENTTYPE definitions
  1685. #define KERNEL_MCE_EVENTTYPE_MCA 0x00
  1686. #define KERNEL_MCE_EVENTTYPE_INIT 0x01
  1687. #define KERNEL_MCE_EVENTTYPE_CMC 0x02
  1688. #define KERNEL_MCE_EVENTTYPE_CPE 0x03
  1689. #define KERNEL_MCE_EVENTTYPE_MASK 0xffff
  1690. #define KERNEL_MCE_EVENTTYPE( _Reserved ) ((USHORT)(ULONG_PTR)(_Reserved))
  1691. // KERNEL_MCE_DELIVERY.Reserved.OPERATION definitions
  1692. #define KERNEL_MCE_OPERATION_CLEAR_STATE_INFO 0x1
  1693. #define KERNEL_MCE_OPERATION_GET_STATE_INFO 0x2
  1694. #define KERNEL_MCE_OPERATION_MASK 0xffff
  1695. #define KERNEL_MCE_OPERATION_SHIFT 16
  1696. #define KERNEL_MCE_OPERATION( _Reserved ) \
  1697. ((USHORT)((((ULONG_PTR)(_Reserved)) >> KERNEL_MCE_OPERATION_SHIFT) & KERNEL_MCE_OPERATION_MASK))
  1698. // for information class HalErrorInformation
  1699. #define HAL_ERROR_INFO_VERSION 0x2
  1700. // begin_ntddk
  1701. typedef struct _HAL_ERROR_INFO {
  1702. ULONG Version; // Version of this structure
  1703. ULONG Reserved; //
  1704. ULONG McaMaxSize; // Maximum size of a Machine Check Abort record
  1705. ULONG McaPreviousEventsCount; // Flag indicating previous or early-boot MCA event logs.
  1706. ULONG McaCorrectedEventsCount; // Number of corrected MCA events since boot. approx.
  1707. ULONG McaKernelDeliveryFails; // Number of Kernel callback failures. approx.
  1708. ULONG McaDriverDpcQueueFails; // Number of OEM MCA Driver Dpc queueing failures. approx.
  1709. ULONG McaReserved;
  1710. ULONG CmcMaxSize; // Maximum size of a Corrected Machine Check record
  1711. ULONG CmcPollingInterval; // In units of seconds
  1712. ULONG CmcInterruptsCount; // Number of CMC interrupts. approx.
  1713. ULONG CmcKernelDeliveryFails; // Number of Kernel callback failures. approx.
  1714. ULONG CmcDriverDpcQueueFails; // Number of OEM CMC Driver Dpc queueing failures. approx.
  1715. ULONG CmcGetStateFails; // Number of failures in getting the log from FW.
  1716. ULONG CmcClearStateFails; // Number of failures in clearing the log from FW.
  1717. ULONG CmcReserved;
  1718. ULONGLONG CmcLogId; // Last seen record identifier.
  1719. ULONG CpeMaxSize; // Maximum size of a Corrected Platform Event record
  1720. ULONG CpePollingInterval; // In units of seconds
  1721. ULONG CpeInterruptsCount; // Number of CPE interrupts. approx.
  1722. ULONG CpeKernelDeliveryFails; // Number of Kernel callback failures. approx.
  1723. ULONG CpeDriverDpcQueueFails; // Number of OEM CPE Driver Dpc queueing failures. approx.
  1724. ULONG CpeGetStateFails; // Number of failures in getting the log from FW.
  1725. ULONG CpeClearStateFails; // Number of failures in clearing the log from FW.
  1726. ULONG CpeInterruptSources; // Number of SAPIC Platform Interrupt Sources
  1727. ULONGLONG CpeLogId; // Last seen record identifier.
  1728. ULONGLONG KernelReserved[4];
  1729. } HAL_ERROR_INFO, *PHAL_ERROR_INFO;
  1730. #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
  1731. #define HAL_MCE_DISABLED ((ULONG)0)
  1732. //
  1733. // Known values for HAL_ERROR_INFO.CmcPollingInterval.
  1734. //
  1735. #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
  1736. #define HAL_CMC_DISABLED HAL_MCE_DISABLED
  1737. //
  1738. // Known values for HAL_ERROR_INFO.CpePollingInterval.
  1739. //
  1740. #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
  1741. #define HAL_CPE_DISABLED HAL_MCE_DISABLED
  1742. #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
  1743. #define HAL_MCA_DISABLED HAL_MCE_DISABLED
  1744. // end_ntddk
  1745. //
  1746. // Kernel/WMI Tokens for HAL MCE Log Interfaces
  1747. //
  1748. #define McaKernelToken KernelReserved[0]
  1749. #define CmcKernelToken KernelReserved[1]
  1750. #define CpeKernelToken KernelReserved[2]
  1751. // begin_ntddk
  1752. //
  1753. // Driver Callback type for the information class "HalCmcRegisterDriver"
  1754. //
  1755. typedef
  1756. VOID
  1757. (*PDRIVER_CMC_EXCEPTION_CALLBACK) (
  1758. IN PVOID Context,
  1759. IN PCMC_EXCEPTION CmcLog
  1760. );
  1761. //
  1762. // Driver Callback type for the information class "HalCpeRegisterDriver"
  1763. //
  1764. typedef
  1765. VOID
  1766. (*PDRIVER_CPE_EXCEPTION_CALLBACK) (
  1767. IN PVOID Context,
  1768. IN PCPE_EXCEPTION CmcLog
  1769. );
  1770. //
  1771. //
  1772. // Structure to record the callbacks from driver
  1773. //
  1774. typedef struct _CMC_DRIVER_INFO {
  1775. PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback;
  1776. PKDEFERRED_ROUTINE DpcCallback;
  1777. PVOID DeviceContext;
  1778. } CMC_DRIVER_INFO, *PCMC_DRIVER_INFO;
  1779. typedef struct _CPE_DRIVER_INFO {
  1780. PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback;
  1781. PKDEFERRED_ROUTINE DpcCallback;
  1782. PVOID DeviceContext;
  1783. } CPE_DRIVER_INFO, *PCPE_DRIVER_INFO;
  1784. #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
  1785. #if defined(_IA64_)
  1786. typedef
  1787. NTSTATUS
  1788. (*HALSENDCROSSPARTITIONIPI)(
  1789. IN USHORT ProcessorID,
  1790. IN UCHAR HardwareVector
  1791. );
  1792. typedef
  1793. NTSTATUS
  1794. (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)(
  1795. OUT PULONG Vector,
  1796. OUT PKIRQL Irql,
  1797. IN OUT PKAFFINITY Affinity,
  1798. OUT PUCHAR HardwareVector
  1799. );
  1800. typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE {
  1801. HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi;
  1802. HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector;
  1803. } HAL_CROSS_PARTITION_IPI_INTERFACE;
  1804. #endif
  1805. typedef struct _HAL_PLATFORM_INFORMATION {
  1806. ULONG PlatformFlags;
  1807. } HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION;
  1808. //
  1809. // These platform flags are carried over from the IPPT table
  1810. // definition if appropriate.
  1811. //
  1812. #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
  1813. #define HAL_PLATFORM_DISABLE_PTCG 0x04L
  1814. #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
  1815. #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
  1816. #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
  1817. // begin_wdm begin_ntndis begin_ntosp
  1818. typedef struct _SCATTER_GATHER_ELEMENT {
  1819. PHYSICAL_ADDRESS Address;
  1820. ULONG Length;
  1821. ULONG_PTR Reserved;
  1822. } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
  1823. #if _MSC_VER >= 1200
  1824. #pragma warning(push)
  1825. #endif
  1826. #pragma warning(disable:4200)
  1827. typedef struct _SCATTER_GATHER_LIST {
  1828. ULONG NumberOfElements;
  1829. ULONG_PTR Reserved;
  1830. SCATTER_GATHER_ELEMENT Elements[];
  1831. } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
  1832. #if _MSC_VER >= 1200
  1833. #pragma warning(pop)
  1834. #else
  1835. #pragma warning(default:4200)
  1836. #endif
  1837. // end_ntndis
  1838. typedef struct _DMA_OPERATIONS *PDMA_OPERATIONS;
  1839. typedef struct _DMA_ADAPTER {
  1840. USHORT Version;
  1841. USHORT Size;
  1842. PDMA_OPERATIONS DmaOperations;
  1843. // Private Bus Device Driver data follows,
  1844. } DMA_ADAPTER, *PDMA_ADAPTER;
  1845. typedef VOID (*PPUT_DMA_ADAPTER)(
  1846. PDMA_ADAPTER DmaAdapter
  1847. );
  1848. typedef PVOID (*PALLOCATE_COMMON_BUFFER)(
  1849. IN PDMA_ADAPTER DmaAdapter,
  1850. IN ULONG Length,
  1851. OUT PPHYSICAL_ADDRESS LogicalAddress,
  1852. IN BOOLEAN CacheEnabled
  1853. );
  1854. typedef VOID (*PFREE_COMMON_BUFFER)(
  1855. IN PDMA_ADAPTER DmaAdapter,
  1856. IN ULONG Length,
  1857. IN PHYSICAL_ADDRESS LogicalAddress,
  1858. IN PVOID VirtualAddress,
  1859. IN BOOLEAN CacheEnabled
  1860. );
  1861. typedef NTSTATUS (*PALLOCATE_ADAPTER_CHANNEL)(
  1862. IN PDMA_ADAPTER DmaAdapter,
  1863. IN PDEVICE_OBJECT DeviceObject,
  1864. IN ULONG NumberOfMapRegisters,
  1865. IN PDRIVER_CONTROL ExecutionRoutine,
  1866. IN PVOID Context
  1867. );
  1868. typedef BOOLEAN (*PFLUSH_ADAPTER_BUFFERS)(
  1869. IN PDMA_ADAPTER DmaAdapter,
  1870. IN PMDL Mdl,
  1871. IN PVOID MapRegisterBase,
  1872. IN PVOID CurrentVa,
  1873. IN ULONG Length,
  1874. IN BOOLEAN WriteToDevice
  1875. );
  1876. typedef VOID (*PFREE_ADAPTER_CHANNEL)(
  1877. IN PDMA_ADAPTER DmaAdapter
  1878. );
  1879. typedef VOID (*PFREE_MAP_REGISTERS)(
  1880. IN PDMA_ADAPTER DmaAdapter,
  1881. PVOID MapRegisterBase,
  1882. ULONG NumberOfMapRegisters
  1883. );
  1884. typedef PHYSICAL_ADDRESS (*PMAP_TRANSFER)(
  1885. IN PDMA_ADAPTER DmaAdapter,
  1886. IN PMDL Mdl,
  1887. IN PVOID MapRegisterBase,
  1888. IN PVOID CurrentVa,
  1889. IN OUT PULONG Length,
  1890. IN BOOLEAN WriteToDevice
  1891. );
  1892. typedef ULONG (*PGET_DMA_ALIGNMENT)(
  1893. IN PDMA_ADAPTER DmaAdapter
  1894. );
  1895. typedef ULONG (*PREAD_DMA_COUNTER)(
  1896. IN PDMA_ADAPTER DmaAdapter
  1897. );
  1898. typedef VOID
  1899. (*PDRIVER_LIST_CONTROL)(
  1900. IN struct _DEVICE_OBJECT *DeviceObject,
  1901. IN struct _IRP *Irp,
  1902. IN PSCATTER_GATHER_LIST ScatterGather,
  1903. IN PVOID Context
  1904. );
  1905. typedef NTSTATUS
  1906. (*PGET_SCATTER_GATHER_LIST)(
  1907. IN PDMA_ADAPTER DmaAdapter,
  1908. IN PDEVICE_OBJECT DeviceObject,
  1909. IN PMDL Mdl,
  1910. IN PVOID CurrentVa,
  1911. IN ULONG Length,
  1912. IN PDRIVER_LIST_CONTROL ExecutionRoutine,
  1913. IN PVOID Context,
  1914. IN BOOLEAN WriteToDevice
  1915. );
  1916. typedef VOID
  1917. (*PPUT_SCATTER_GATHER_LIST)(
  1918. IN PDMA_ADAPTER DmaAdapter,
  1919. IN PSCATTER_GATHER_LIST ScatterGather,
  1920. IN BOOLEAN WriteToDevice
  1921. );
  1922. typedef NTSTATUS
  1923. (*PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
  1924. IN PDMA_ADAPTER DmaAdapter,
  1925. IN OPTIONAL PMDL Mdl,
  1926. IN PVOID CurrentVa,
  1927. IN ULONG Length,
  1928. OUT PULONG ScatterGatherListSize,
  1929. OUT OPTIONAL PULONG pNumberOfMapRegisters
  1930. );
  1931. typedef NTSTATUS
  1932. (*PBUILD_SCATTER_GATHER_LIST)(
  1933. IN PDMA_ADAPTER DmaAdapter,
  1934. IN PDEVICE_OBJECT DeviceObject,
  1935. IN PMDL Mdl,
  1936. IN PVOID CurrentVa,
  1937. IN ULONG Length,
  1938. IN PDRIVER_LIST_CONTROL ExecutionRoutine,
  1939. IN PVOID Context,
  1940. IN BOOLEAN WriteToDevice,
  1941. IN PVOID ScatterGatherBuffer,
  1942. IN ULONG ScatterGatherLength
  1943. );
  1944. typedef NTSTATUS
  1945. (*PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
  1946. IN PDMA_ADAPTER DmaAdapter,
  1947. IN PSCATTER_GATHER_LIST ScatterGather,
  1948. IN PMDL OriginalMdl,
  1949. OUT PMDL *TargetMdl
  1950. );
  1951. typedef struct _DMA_OPERATIONS {
  1952. ULONG Size;
  1953. PPUT_DMA_ADAPTER PutDmaAdapter;
  1954. PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
  1955. PFREE_COMMON_BUFFER FreeCommonBuffer;
  1956. PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
  1957. PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
  1958. PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
  1959. PFREE_MAP_REGISTERS FreeMapRegisters;
  1960. PMAP_TRANSFER MapTransfer;
  1961. PGET_DMA_ALIGNMENT GetDmaAlignment;
  1962. PREAD_DMA_COUNTER ReadDmaCounter;
  1963. PGET_SCATTER_GATHER_LIST GetScatterGatherList;
  1964. PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
  1965. PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
  1966. PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
  1967. PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
  1968. } DMA_OPERATIONS;
  1969. // end_wdm
  1970. #if defined(_WIN64)
  1971. //
  1972. // Use __inline DMA macros (hal.h)
  1973. //
  1974. #ifndef USE_DMA_MACROS
  1975. #define USE_DMA_MACROS
  1976. #endif
  1977. //
  1978. // Only PnP drivers!
  1979. //
  1980. #ifndef NO_LEGACY_DRIVERS
  1981. #define NO_LEGACY_DRIVERS
  1982. #endif
  1983. #endif // _WIN64
  1984. #if defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_))
  1985. // begin_wdm
  1986. DECLSPEC_DEPRECATED_DDK // Use AllocateCommonBuffer
  1987. FORCEINLINE
  1988. PVOID
  1989. HalAllocateCommonBuffer(
  1990. IN PDMA_ADAPTER DmaAdapter,
  1991. IN ULONG Length,
  1992. OUT PPHYSICAL_ADDRESS LogicalAddress,
  1993. IN BOOLEAN CacheEnabled
  1994. ){
  1995. PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
  1996. PVOID commonBuffer;
  1997. allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
  1998. ASSERT( allocateCommonBuffer != NULL );
  1999. commonBuffer = allocateCommonBuffer( DmaAdapter,
  2000. Length,
  2001. LogicalAddress,
  2002. CacheEnabled );
  2003. return commonBuffer;
  2004. }
  2005. DECLSPEC_DEPRECATED_DDK // Use FreeCommonBuffer
  2006. FORCEINLINE
  2007. VOID
  2008. HalFreeCommonBuffer(
  2009. IN PDMA_ADAPTER DmaAdapter,
  2010. IN ULONG Length,
  2011. IN PHYSICAL_ADDRESS LogicalAddress,
  2012. IN PVOID VirtualAddress,
  2013. IN BOOLEAN CacheEnabled
  2014. ){
  2015. PFREE_COMMON_BUFFER freeCommonBuffer;
  2016. freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
  2017. ASSERT( freeCommonBuffer != NULL );
  2018. freeCommonBuffer( DmaAdapter,
  2019. Length,
  2020. LogicalAddress,
  2021. VirtualAddress,
  2022. CacheEnabled );
  2023. }
  2024. DECLSPEC_DEPRECATED_DDK // Use AllocateAdapterChannel
  2025. FORCEINLINE
  2026. NTSTATUS
  2027. IoAllocateAdapterChannel(
  2028. IN PDMA_ADAPTER DmaAdapter,
  2029. IN PDEVICE_OBJECT DeviceObject,
  2030. IN ULONG NumberOfMapRegisters,
  2031. IN PDRIVER_CONTROL ExecutionRoutine,
  2032. IN PVOID Context
  2033. ){
  2034. PALLOCATE_ADAPTER_CHANNEL allocateAdapterChannel;
  2035. NTSTATUS status;
  2036. allocateAdapterChannel =
  2037. *(DmaAdapter)->DmaOperations->AllocateAdapterChannel;
  2038. ASSERT( allocateAdapterChannel != NULL );
  2039. status = allocateAdapterChannel( DmaAdapter,
  2040. DeviceObject,
  2041. NumberOfMapRegisters,
  2042. ExecutionRoutine,
  2043. Context );
  2044. return status;
  2045. }
  2046. DECLSPEC_DEPRECATED_DDK // Use FlushAdapterBuffers
  2047. FORCEINLINE
  2048. BOOLEAN
  2049. IoFlushAdapterBuffers(
  2050. IN PDMA_ADAPTER DmaAdapter,
  2051. IN PMDL Mdl,
  2052. IN PVOID MapRegisterBase,
  2053. IN PVOID CurrentVa,
  2054. IN ULONG Length,
  2055. IN BOOLEAN WriteToDevice
  2056. ){
  2057. PFLUSH_ADAPTER_BUFFERS flushAdapterBuffers;
  2058. BOOLEAN result;
  2059. flushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers;
  2060. ASSERT( flushAdapterBuffers != NULL );
  2061. result = flushAdapterBuffers( DmaAdapter,
  2062. Mdl,
  2063. MapRegisterBase,
  2064. CurrentVa,
  2065. Length,
  2066. WriteToDevice );
  2067. return result;
  2068. }
  2069. DECLSPEC_DEPRECATED_DDK // Use FreeAdapterChannel
  2070. FORCEINLINE
  2071. VOID
  2072. IoFreeAdapterChannel(
  2073. IN PDMA_ADAPTER DmaAdapter
  2074. ){
  2075. PFREE_ADAPTER_CHANNEL freeAdapterChannel;
  2076. freeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
  2077. ASSERT( freeAdapterChannel != NULL );
  2078. freeAdapterChannel( DmaAdapter );
  2079. }
  2080. DECLSPEC_DEPRECATED_DDK // Use FreeMapRegisters
  2081. FORCEINLINE
  2082. VOID
  2083. IoFreeMapRegisters(
  2084. IN PDMA_ADAPTER DmaAdapter,
  2085. IN PVOID MapRegisterBase,
  2086. IN ULONG NumberOfMapRegisters
  2087. ){
  2088. PFREE_MAP_REGISTERS freeMapRegisters;
  2089. freeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters;
  2090. ASSERT( freeMapRegisters != NULL );
  2091. freeMapRegisters( DmaAdapter,
  2092. MapRegisterBase,
  2093. NumberOfMapRegisters );
  2094. }
  2095. DECLSPEC_DEPRECATED_DDK // Use MapTransfer
  2096. FORCEINLINE
  2097. PHYSICAL_ADDRESS
  2098. IoMapTransfer(
  2099. IN PDMA_ADAPTER DmaAdapter,
  2100. IN PMDL Mdl,
  2101. IN PVOID MapRegisterBase,
  2102. IN PVOID CurrentVa,
  2103. IN OUT PULONG Length,
  2104. IN BOOLEAN WriteToDevice
  2105. ){
  2106. PHYSICAL_ADDRESS physicalAddress;
  2107. PMAP_TRANSFER mapTransfer;
  2108. mapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer;
  2109. ASSERT( mapTransfer != NULL );
  2110. physicalAddress = mapTransfer( DmaAdapter,
  2111. Mdl,
  2112. MapRegisterBase,
  2113. CurrentVa,
  2114. Length,
  2115. WriteToDevice );
  2116. return physicalAddress;
  2117. }
  2118. DECLSPEC_DEPRECATED_DDK // Use GetDmaAlignment
  2119. FORCEINLINE
  2120. ULONG
  2121. HalGetDmaAlignment(
  2122. IN PDMA_ADAPTER DmaAdapter
  2123. )
  2124. {
  2125. PGET_DMA_ALIGNMENT getDmaAlignment;
  2126. ULONG alignment;
  2127. getDmaAlignment = *(DmaAdapter)->DmaOperations->GetDmaAlignment;
  2128. ASSERT( getDmaAlignment != NULL );
  2129. alignment = getDmaAlignment( DmaAdapter );
  2130. return alignment;
  2131. }
  2132. DECLSPEC_DEPRECATED_DDK // Use ReadDmaCounter
  2133. FORCEINLINE
  2134. ULONG
  2135. HalReadDmaCounter(
  2136. IN PDMA_ADAPTER DmaAdapter
  2137. )
  2138. {
  2139. PREAD_DMA_COUNTER readDmaCounter;
  2140. ULONG counter;
  2141. readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter;
  2142. ASSERT( readDmaCounter != NULL );
  2143. counter = readDmaCounter( DmaAdapter );
  2144. return counter;
  2145. }
  2146. // end_wdm
  2147. #else
  2148. //
  2149. // DMA adapter object functions.
  2150. //
  2151. DECLSPEC_DEPRECATED_DDK // Use AllocateAdapterChannel
  2152. NTHALAPI
  2153. NTSTATUS
  2154. HalAllocateAdapterChannel(
  2155. IN PADAPTER_OBJECT AdapterObject,
  2156. IN PWAIT_CONTEXT_BLOCK Wcb,
  2157. IN ULONG NumberOfMapRegisters,
  2158. IN PDRIVER_CONTROL ExecutionRoutine
  2159. );
  2160. DECLSPEC_DEPRECATED_DDK // Use AllocateCommonBuffer
  2161. NTHALAPI
  2162. PVOID
  2163. HalAllocateCommonBuffer(
  2164. IN PADAPTER_OBJECT AdapterObject,
  2165. IN ULONG Length,
  2166. OUT PPHYSICAL_ADDRESS LogicalAddress,
  2167. IN BOOLEAN CacheEnabled
  2168. );
  2169. DECLSPEC_DEPRECATED_DDK // Use FreeCommonBuffer
  2170. NTHALAPI
  2171. VOID
  2172. HalFreeCommonBuffer(
  2173. IN PADAPTER_OBJECT AdapterObject,
  2174. IN ULONG Length,
  2175. IN PHYSICAL_ADDRESS LogicalAddress,
  2176. IN PVOID VirtualAddress,
  2177. IN BOOLEAN CacheEnabled
  2178. );
  2179. DECLSPEC_DEPRECATED_DDK // Use ReadDmaCounter
  2180. NTHALAPI
  2181. ULONG
  2182. HalReadDmaCounter(
  2183. IN PADAPTER_OBJECT AdapterObject
  2184. );
  2185. DECLSPEC_DEPRECATED_DDK // Use FlushAdapterBuffers
  2186. NTHALAPI
  2187. BOOLEAN
  2188. IoFlushAdapterBuffers(
  2189. IN PADAPTER_OBJECT AdapterObject,
  2190. IN PMDL Mdl,
  2191. IN PVOID MapRegisterBase,
  2192. IN PVOID CurrentVa,
  2193. IN ULONG Length,
  2194. IN BOOLEAN WriteToDevice
  2195. );
  2196. DECLSPEC_DEPRECATED_DDK // Use FreeAdapterChannel
  2197. NTHALAPI
  2198. VOID
  2199. IoFreeAdapterChannel(
  2200. IN PADAPTER_OBJECT AdapterObject
  2201. );
  2202. DECLSPEC_DEPRECATED_DDK // Use FreeMapRegisters
  2203. NTHALAPI
  2204. VOID
  2205. IoFreeMapRegisters(
  2206. IN PADAPTER_OBJECT AdapterObject,
  2207. IN PVOID MapRegisterBase,
  2208. IN ULONG NumberOfMapRegisters
  2209. );
  2210. DECLSPEC_DEPRECATED_DDK // Use MapTransfer
  2211. NTHALAPI
  2212. PHYSICAL_ADDRESS
  2213. IoMapTransfer(
  2214. IN PADAPTER_OBJECT AdapterObject,
  2215. IN PMDL Mdl,
  2216. IN PVOID MapRegisterBase,
  2217. IN PVOID CurrentVa,
  2218. IN OUT PULONG Length,
  2219. IN BOOLEAN WriteToDevice
  2220. );
  2221. #endif // USE_DMA_MACROS && (_NTDDK_ || _NTDRIVER_)
  2222. DECLSPEC_DEPRECATED_DDK
  2223. NTSTATUS
  2224. HalGetScatterGatherList ( // Use GetScatterGatherList
  2225. IN PADAPTER_OBJECT DmaAdapter,
  2226. IN PDEVICE_OBJECT DeviceObject,
  2227. IN PMDL Mdl,
  2228. IN PVOID CurrentVa,
  2229. IN ULONG Length,
  2230. IN PDRIVER_LIST_CONTROL ExecutionRoutine,
  2231. IN PVOID Context,
  2232. IN BOOLEAN WriteToDevice
  2233. );
  2234. DECLSPEC_DEPRECATED_DDK // Use PutScatterGatherList
  2235. VOID
  2236. HalPutScatterGatherList (
  2237. IN PADAPTER_OBJECT DmaAdapter,
  2238. IN PSCATTER_GATHER_LIST ScatterGather,
  2239. IN BOOLEAN WriteToDevice
  2240. );
  2241. DECLSPEC_DEPRECATED_DDK // Use PutDmaAdapter
  2242. VOID
  2243. HalPutDmaAdapter(
  2244. IN PADAPTER_OBJECT DmaAdapter
  2245. );
  2246. // end_ntddk end_ntosp
  2247. #endif // _HAL_
  2248. // end_nthal