- globally disable warnings for char array subscripts
[reactos.git] / include / ddk / wdm.h
index 83f6c26..739f824 100644 (file)
@@ -1,5 +1,8 @@
 #pragma once
 
+#ifndef _WDMDDK_
+#define _WDMDDK_
+
 /* Dependencies */
 #define NT_INCLUDED
 #include <excpt.h>
@@ -75,7 +78,6 @@ typedef struct _OBJECT_TYPE *POBJECT_TYPE;
 typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE;
 typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE;
 typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
-typedef struct _BUS_HANDLER *PBUS_HANDLER;
 typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; 
 typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
 typedef struct _ETHREAD *PETHREAD;
@@ -279,9 +281,11 @@ InterlockedAdd64(
  ******************************************************************************/
 
 typedef UCHAR KIRQL, *PKIRQL;
-typedef UCHAR KPROCESSOR_MODE;
+typedef CCHAR KPROCESSOR_MODE;
 typedef LONG KPRIORITY;
 
+typedef ULONG EXECUTION_STATE;
+
 typedef enum _MODE {
   KernelMode,
   UserMode,
@@ -306,6 +310,7 @@ typedef enum _MODE {
 #define PF_COMPARE_EXCHANGE128             14   
 #define PF_COMPARE64_EXCHANGE128           15   
 #define PF_CHANNELS_ENABLED                16   
+#define PF_XSAVE_ENABLED                   17   
 
 #define MAXIMUM_SUPPORTED_EXTENSION  512
 #define MAXIMUM_WAIT_OBJECTS              64
@@ -898,6 +903,28 @@ typedef struct _KTIMER {
   ULONG Period;
 } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
 
+typedef BOOLEAN
+(DDKAPI *PKSYNCHRONIZE_ROUTINE)(
+  IN PVOID  SynchronizeContext);
+
+typedef enum _POOL_TYPE {
+  NonPagedPool,
+  PagedPool,
+  NonPagedPoolMustSucceed,
+  DontUseThisType,
+  NonPagedPoolCacheAligned,
+  PagedPoolCacheAligned,
+  NonPagedPoolCacheAlignedMustS,
+  MaxPoolType,
+  NonPagedPoolSession = 32,
+  PagedPoolSession,
+  NonPagedPoolMustSucceedSession,
+  DontUseThisTypeSession,
+  NonPagedPoolCacheAlignedSession,
+  PagedPoolCacheAlignedSession,
+  NonPagedPoolCacheAlignedMustSSession
+} POOL_TYPE;
+
 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
 {
     StandardDesign,
@@ -976,17 +1003,49 @@ typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
  *                              Kernel Functions                              *
  ******************************************************************************/
 
-#if (NTDDI_VERSION >= NTDDI_WIN2K) && defined(SINGLE_GROUP_LEGACY_API)
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeEvent(
+  OUT PRKEVENT  Event,
+  IN EVENT_TYPE  Type,
+  IN BOOLEAN  State);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeClearEvent(
+  IN OUT PRKEVENT Event);
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+#if defined(SINGLE_GROUP_LEGACY_API)
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserAffinityThread(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetSystemAffinityThread(
+    IN KAFFINITY Affinity);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetTargetProcessorDpc(
+  IN PRKDPC  Dpc,
+  IN CCHAR  Number);
+
 NTKERNELAPI
 KAFFINITY
-KeQueryActiveProcessors (
+NTAPI
+KeQueryActiveProcessors(
   VOID);
 #endif
 
 #if !defined(_M_AMD64)
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
 NTKERNELAPI
 ULONGLONG
 NTAPI
@@ -998,12 +1057,7 @@ VOID
 NTAPI
 KeQuerySystemTime(
   OUT PLARGE_INTEGER  CurrentTime);
-
-#endif
-
-#endif // !_M_AMD64
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#endif /* !_M_AMD64 */
 
 NTKERNELAPI
 DECLSPEC_NORETURN
@@ -1286,6 +1340,7 @@ KeWaitForSingleObject(
 
 #if (NTDDI_VERSION >= NTDDI_WINXP)
 
+// _DECL_HAL_KE_IMPORT
 VOID
 FASTCALL
 KeAcquireInStackQueuedSpinLock (
@@ -1373,6 +1428,7 @@ KeIpiGenericCall(
 
 #endif
 
+#if defined(_X86_)
 NTKERNELAPI
 NTSTATUS
 NTAPI
@@ -1384,6 +1440,7 @@ NTSTATUS
 NTAPI
 KeRestoreFloatingPointState(
   IN PKFLOATING_SAVE  FloatSave);
+#endif
 
 #if defined(_IA64_)
 FORCEINLINE
@@ -1400,34 +1457,6 @@ NTAPI
 KeFlushWriteBuffer(VOID);
 #endif
 
-NTKERNELAPI
-VOID
-NTAPI
-KeClearEvent(
-  IN OUT PRKEVENT Event);
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K) && defined(SINGLE_GROUP_LEGACY_API)
-
-NTKERNELAPI
-VOID
-NTAPI
-KeRevertToUserAffinityThread(VOID);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeSetSystemAffinityThread(
-    IN KAFFINITY Affinity);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeSetTargetProcessorDpc(
-  IN PRKDPC  Dpc,
-  IN CCHAR  Number);
-
-#endif
-
 /*
  * VOID
  * KeFlushIoBuffers(
@@ -1580,14 +1609,6 @@ KeGetCurrentThread(
   VOID);
 #endif
 
-NTKERNELAPI
-VOID
-NTAPI
-KeInitializeEvent(
-  OUT PRKEVENT  Event,
-  IN EVENT_TYPE  Type,
-  IN BOOLEAN  State);
-
 /*
  * VOID
  * KeInitializeCallbackRecord(
@@ -1750,7 +1771,8 @@ ProbeForWrite(
 #define MEM_LARGE_PAGES  0x20000000
 #define MEM_4MB_PAGES    0x80000000
 
-#define SEC_RESERVE       0x4000000     
+#define SEC_RESERVE       0x4000000
+#define SEC_COMMIT        0x8000000
 #define SEC_LARGE_PAGES  0x80000000
 
 /* Section map options */
@@ -1773,6 +1795,7 @@ typedef struct _MDL {
     ULONG ByteCount;
     ULONG ByteOffset;
 } MDL, *PMDL;
+typedef MDL *PMDLX;
 
 typedef enum _MEMORY_CACHING_TYPE_ORIG {
   MmFrameBufferCached = 2
@@ -1976,8 +1999,9 @@ NTKERNELAPI
 VOID
 NTAPI
 MmBuildMdlForNonPagedPool(
-  IN OUT PMDL  MemoryDescriptorList);
+  IN OUT PMDLX  MemoryDescriptorList);
 
+//DECLSPEC_DEPRECATED_DDK
 NTKERNELAPI
 PMDL
 NTAPI
@@ -2016,7 +2040,7 @@ NTKERNELAPI
 LOGICAL
 NTAPI
 MmIsDriverVerifying(
-  IN PDRIVER_OBJECT  DriverObject);
+  IN struct _DRIVER_OBJECT *DriverObject);
 
 NTKERNELAPI
 PVOID
@@ -2060,7 +2084,7 @@ NTKERNELAPI
 VOID
 NTAPI
 MmProbeAndLockPages(
-  IN OUT PMDLX  MemoryDescriptorList,
+  IN OUT PMDL  MemoryDescriptorList,
   IN KPROCESSOR_MODE  AccessMode,
   IN LOCK_OPERATION  Operation);
 
@@ -2093,7 +2117,7 @@ NTKERNELAPI
 VOID
 NTAPI
 MmUnlockPages(
-  IN OUT PMDLX  MemoryDescriptorList);
+  IN OUT PMDL  MemoryDescriptorList);
 
 NTKERNELAPI
 VOID
@@ -2102,6 +2126,15 @@ MmUnmapIoSpace(
   IN PVOID  BaseAddress,
   IN SIZE_T  NumberOfBytes);
 
+NTKERNELAPI
+VOID
+NTAPI
+MmProbeAndLockProcessPages(
+  IN OUT PMDL  MemoryDescriptorList,
+  IN PEPROCESS  Process,
+  IN KPROCESSOR_MODE  AccessMode,
+  IN LOCK_OPERATION  Operation);
+
 NTKERNELAPI
 VOID
 NTAPI
@@ -2149,20 +2182,11 @@ MmMapLockedPagesWithReservedMapping(
   IN PMDL  MemoryDescriptorList,
   IN MEMORY_CACHING_TYPE  CacheType);
 
-NTKERNELAPI
-VOID
-NTAPI
-MmProbeAndLockProcessPages(
-  IN OUT PMDL  MemoryDescriptorList,
-  IN PEPROCESS  Process,
-  IN KPROCESSOR_MODE  AccessMode,
-  IN LOCK_OPERATION  Operation);
-
 NTKERNELAPI
 NTSTATUS
 NTAPI
 MmProtectMdlSystemAddress(
-  IN PMDLX  MemoryDescriptorList,
+  IN PMDL  MemoryDescriptorList,
   IN ULONG  NewProtect);
 
 NTKERNELAPI
@@ -2171,7 +2195,7 @@ NTAPI
 MmUnmapReservedMapping(
   IN PVOID  BaseAddress,
   IN ULONG  PoolTag,
-  IN PMDLX  MemoryDescriptorList);
+  IN PMDL  MemoryDescriptorList);
 
 #endif
 
@@ -2526,6 +2550,24 @@ typedef enum _DEVICE_POWER_STATE {
     PowerDeviceMaximum
 } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
 
+typedef union _POWER_STATE {
+  SYSTEM_POWER_STATE  SystemState;
+  DEVICE_POWER_STATE  DeviceState;
+} POWER_STATE, *PPOWER_STATE;
+
+typedef enum _POWER_STATE_TYPE {
+  SystemPowerState = 0,
+  DevicePowerState
+} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
+
+typedef VOID
+(DDKAPI *PREQUEST_POWER_COMPLETE)(
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN UCHAR  MinorFunction,
+  IN POWER_STATE  PowerState,
+  IN PVOID  Context,
+  IN struct _IO_STATUS_BLOCK  *IoStatus);
+
 /******************************************************************************
  *                            Power Management Support Functions              *
  ******************************************************************************/
@@ -2538,14 +2580,14 @@ NTKERNELAPI
 NTSTATUS
 NTAPI
 PoCallDriver(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN OUT PIRP  Irp);
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN OUT struct _IRP  *Irp);
 
 NTKERNELAPI
 PULONG
 NTAPI
 PoRegisterDeviceForIdleDetection(
-  IN PDEVICE_OBJECT  DeviceObject,
+  IN struct _DEVICE_OBJECT  *DeviceObject,
   IN ULONG  ConservationIdleTime,
   IN ULONG  PerformanceIdleTime,
   IN DEVICE_POWER_STATE  State);
@@ -2561,18 +2603,18 @@ NTKERNELAPI
 NTSTATUS
 NTAPI
 PoRequestPowerIrp(
-  IN PDEVICE_OBJECT  DeviceObject,
+  IN struct _DEVICE_OBJECT  *DeviceObject,
   IN UCHAR  MinorFunction,
   IN POWER_STATE  PowerState,
   IN PREQUEST_POWER_COMPLETE  CompletionFunction OPTIONAL,
   IN PVOID  Context OPTIONAL,
-  OUT PIRP  *Irp OPTIONAL);
+  OUT struct _IRP  **Irp OPTIONAL);
 
 NTKERNELAPI
 POWER_STATE
 NTAPI
 PoSetPowerState(
-  IN PDEVICE_OBJECT  DeviceObject,
+  IN struct _DEVICE_OBJECT  *DeviceObject,
   IN POWER_STATE_TYPE  Type,
   IN POWER_STATE  State);
 
@@ -2586,7 +2628,7 @@ NTKERNELAPI
 VOID
 NTAPI
 PoStartNextPowerIrp(
-  IN OUT PIRP  Irp);
+  IN OUT struct _IRP  *Irp);
 
 NTKERNELAPI
 VOID
@@ -2754,7 +2796,12 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
       ULONG Length;
     } Port;
     struct {
+#if defined(NT_PROCESSOR_GROUPS)
+      USHORT Level;
+      USHORT Group;
+#else
       ULONG Level;
+#endif
       ULONG Vector;
       KAFFINITY Affinity;
     } Interrupt;
@@ -2762,17 +2809,26 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
     struct {
       __GNU_EXTENSION union {
         struct {
+#if defined(NT_PROCESSOR_GROUPS)
+          USHORT Group;
+#else
           USHORT Reserved;
+#endif
           USHORT MessageCount;
           ULONG Vector;
           KAFFINITY Affinity;
         } Raw;
         struct {
+#if defined(NT_PROCESSOR_GROUPS)
+          USHORT Level;
+          USHORT Group;
+#else
           ULONG Level;
+#endif
           ULONG Vector;
           KAFFINITY Affinity;
         } Translated;
-      };
+      } DUMMYUNIONNAME;
     } MessageInterrupt;
 #endif
     struct {
@@ -5125,16 +5181,6 @@ typedef enum _CREATE_FILE_TYPE {
 #define IO_REPARSE                      0x0
 #define IO_REMOUNT                      0x1
 
-typedef union _POWER_STATE {
-  SYSTEM_POWER_STATE  SystemState;
-  DEVICE_POWER_STATE  DeviceState;
-} POWER_STATE, *PPOWER_STATE;
-
-typedef enum _POWER_STATE_TYPE {
-  SystemPowerState = 0,
-  DevicePowerState
-} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
-
 typedef struct _IO_STATUS_BLOCK {
   _ANONYMOUS_UNION union {
     NTSTATUS  Status;
@@ -5143,14 +5189,6 @@ typedef struct _IO_STATUS_BLOCK {
   ULONG_PTR  Information;
 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
 
-typedef VOID
-(DDKAPI *PREQUEST_POWER_COMPLETE)(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN UCHAR  MinorFunction,
-  IN POWER_STATE  PowerState,
-  IN PVOID  Context,
-  IN PIO_STATUS_BLOCK  IoStatus);
-
 typedef struct _PCI_SLOT_NUMBER {
   union {
     struct {
@@ -6703,10 +6741,6 @@ typedef VOID
   IN struct _DEVICE_OBJECT  *DeviceObject,
   IN PVOID  Context);
 
-typedef BOOLEAN
-(DDKAPI *PKSYNCHRONIZE_ROUTINE)(
-  IN PVOID  SynchronizeContext);
-
 typedef struct _IO_SECURITY_CONTEXT {
   PSECURITY_QUALITY_OF_SERVICE  SecurityQos;
   PACCESS_STATE  AccessState;
@@ -7431,6 +7465,7 @@ IoAllocateAdapterChannel(
 
 FORCEINLINE
 BOOLEAN
+NTAPI
 IoFlushAdapterBuffers(
     IN PDMA_ADAPTER DmaAdapter,
     IN PMDL Mdl,
@@ -7452,6 +7487,7 @@ IoFlushAdapterBuffers(
 
 FORCEINLINE
 VOID
+NTAPI
 IoFreeAdapterChannel(
     IN PDMA_ADAPTER DmaAdapter)
 {
@@ -7463,6 +7499,7 @@ IoFreeAdapterChannel(
 
 FORCEINLINE
 VOID
+NTAPI
 IoFreeMapRegisters(
     IN PDMA_ADAPTER DmaAdapter,
     IN PVOID MapRegisterBase,
@@ -7476,6 +7513,7 @@ IoFreeMapRegisters(
 
 FORCEINLINE
 PHYSICAL_ADDRESS
+NTAPI
 IoMapTransfer(
     IN PDMA_ADAPTER DmaAdapter,
     IN PMDL Mdl,
@@ -8668,24 +8706,6 @@ InterlockedPushEntrySList(
 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
 #endif
 
-typedef enum _POOL_TYPE {
-    NonPagedPool,
-    PagedPool,
-    NonPagedPoolMustSucceed,
-    DontUseThisType,
-    NonPagedPoolCacheAligned,
-    PagedPoolCacheAligned,
-    NonPagedPoolCacheAlignedMustS,
-    MaxPoolType,
-    NonPagedPoolSession = 32,
-    PagedPoolSession,
-    NonPagedPoolMustSucceedSession,
-    DontUseThisTypeSession,
-    NonPagedPoolCacheAlignedSession,
-    PagedPoolCacheAlignedSession,
-    NonPagedPoolCacheAlignedMustSSession
-} POOL_TYPE;
-
 typedef enum _SUITE_TYPE {
     SmallBusiness,
     Enterprise,
@@ -8839,6 +8859,10 @@ typedef struct _WORK_QUEUE_ITEM {
  *                          Executive Functions                               *
  ******************************************************************************/
 
+#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
+#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
+#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
+
 #define ExInitializeSListHead InitializeSListHead
 
 #if defined(_X86_)
@@ -10112,9 +10136,6 @@ typedef enum {
     LT_LOWEST_LATENCY
 } LATENCY_TIME;
 
-
-typedef ULONG EXECUTION_STATE;
-
 /* Constants */
 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
 #define ZwCurrentProcess() NtCurrentProcess()
@@ -10385,6 +10406,61 @@ extern volatile KSYSTEM_TIME KeTickCount;
 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
 
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+FORCEINLINE
+PVOID
+NTAPI
+HalAllocateCommonBuffer(
+  IN PADAPTER_OBJECT  AdapterObject,
+  IN ULONG  Length,
+  OUT PPHYSICAL_ADDRESS  LogicalAddress,
+  IN BOOLEAN  CacheEnabled)
+{
+  PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
+  PVOID commonBuffer;
+
+  allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
+  ASSERT( allocateCommonBuffer != NULL );
+  commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled );
+  return commonBuffer;
+}
+
+FORCEINLINE
+VOID
+NTAPI
+HalFreeCommonBuffer(
+  IN PDMA_ADAPTER DmaAdapter,
+  IN ULONG  Length,
+  IN PHYSICAL_ADDRESS  LogicalAddress,
+  IN PVOID  VirtualAddress,
+  IN BOOLEAN  CacheEnabled)
+{
+  PFREE_COMMON_BUFFER freeCommonBuffer;
+
+  freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
+  ASSERT( freeCommonBuffer != NULL );
+  freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled );
+}
+
+FORCEINLINE
+ULONG
+NTAPI
+HalReadDmaCounter(
+  IN PDMA_ADAPTER DmaAdapter)
+{
+  PREAD_DMA_COUNTER readDmaCounter;
+  ULONG counter;
+
+  readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter;
+  ASSERT( readDmaCounter != NULL );
+  counter = readDmaCounter( DmaAdapter );
+  return counter;
+}
+
+#endif
+
 #ifdef __cplusplus
 }
 #endif
+
+#endif /* !_WDMDDK_ */