- wdm.h: Define ALLOC_PRAGMA and ALLOC_DATA_PRAGMA for MSVC.
[reactos.git] / reactos / include / ddk / wdm.h
index 6889a2c..8a590a5 100644 (file)
 #include <guiddef.h>\r
 #endif /* GUID_DEFINED */\r
 \r
-#ifdef __GNUC__\r
 #include "intrin.h"\r
-#endif\r
 \r
 #ifdef __cplusplus\r
 extern "C" {\r
 #endif\r
 \r
-#ifdef _NTOSKRNL_\r
-/* HACKHACKHACK!!! We shouldn't include this header from ntoskrnl! */\r
-#define NTKERNELAPI\r
-#else\r
 #define NTKERNELAPI DECLSPEC_IMPORT\r
+\r
+#ifdef _WIN64\r
+#define PORT_MAXIMUM_MESSAGE_LENGTH 512\r
+#else\r
+#define PORT_MAXIMUM_MESSAGE_LENGTH 256\r
+#endif\r
+\r
+\r
+#if defined(_MSC_VER)\r
+\r
+//\r
+// Indicate if #pragma alloc_text() is supported\r
+//\r
+#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)\r
+#define ALLOC_PRAGMA 1\r
 #endif\r
 \r
+//\r
+// Indicate if #pragma data_seg() is supported\r
+//\r
+#if defined(_M_IX86) || defined(_M_AMD64)\r
+#define ALLOC_DATA_PRAGMA 1\r
+#endif\r
+\r
+#endif\r
+\r
+\r
 /* Simple types */\r
 typedef UCHAR KPROCESSOR_MODE;\r
 typedef LONG KPRIORITY;\r
@@ -71,7 +90,100 @@ typedef int CM_RESOURCE_TYPE;
 #define CmResourceTypePcCardConfig       130\r
 #define CmResourceTypeMfCardConfig       131\r
 \r
-\r
+typedef enum _INTERFACE_TYPE {\r
+  InterfaceTypeUndefined = -1,\r
+  Internal,\r
+  Isa,\r
+  Eisa,\r
+  MicroChannel,\r
+  TurboChannel,\r
+  PCIBus,\r
+  VMEBus,\r
+  NuBus,\r
+  PCMCIABus,\r
+  CBus,\r
+  MPIBus,\r
+  MPSABus,\r
+  ProcessorInternal,\r
+  InternalPowerBus,\r
+  PNPISABus,\r
+  PNPBus,\r
+  MaximumInterfaceType\r
+} INTERFACE_TYPE, *PINTERFACE_TYPE;\r
+\r
+/* IO_RESOURCE_DESCRIPTOR.Option */\r
+\r
+#define IO_RESOURCE_PREFERRED             0x01\r
+#define IO_RESOURCE_DEFAULT               0x02\r
+#define IO_RESOURCE_ALTERNATIVE           0x08\r
+\r
+typedef struct _IO_RESOURCE_DESCRIPTOR {\r
+  UCHAR  Option;\r
+  UCHAR  Type;\r
+  UCHAR  ShareDisposition;\r
+  UCHAR  Spare1;\r
+  USHORT  Flags;\r
+  USHORT  Spare2;\r
+  union {\r
+    struct {\r
+      ULONG  Length;\r
+      ULONG  Alignment;\r
+      PHYSICAL_ADDRESS  MinimumAddress;\r
+      PHYSICAL_ADDRESS  MaximumAddress;\r
+    } Port;\r
+    struct {\r
+      ULONG  Length;\r
+      ULONG  Alignment;\r
+      PHYSICAL_ADDRESS  MinimumAddress;\r
+      PHYSICAL_ADDRESS  MaximumAddress;\r
+    } Memory;\r
+    struct {\r
+      ULONG  MinimumVector;\r
+      ULONG  MaximumVector;\r
+    } Interrupt;\r
+    struct {\r
+      ULONG  MinimumChannel;\r
+      ULONG  MaximumChannel;\r
+    } Dma;\r
+    struct {\r
+      ULONG  Length;\r
+      ULONG  Alignment;\r
+      PHYSICAL_ADDRESS  MinimumAddress;\r
+      PHYSICAL_ADDRESS  MaximumAddress;\r
+    } Generic;\r
+    struct {\r
+      ULONG  Data[3];\r
+    } DevicePrivate;\r
+    struct {\r
+      ULONG  Length;\r
+      ULONG  MinBusNumber;\r
+      ULONG  MaxBusNumber;\r
+      ULONG  Reserved;\r
+    } BusNumber;\r
+    struct {\r
+      ULONG  Priority;\r
+      ULONG  Reserved1;\r
+      ULONG  Reserved2;\r
+    } ConfigData;\r
+  } u;\r
+} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;\r
+\r
+typedef struct _IO_RESOURCE_LIST {\r
+  USHORT  Version;\r
+  USHORT  Revision;\r
+  ULONG  Count;\r
+  IO_RESOURCE_DESCRIPTOR  Descriptors[1];\r
+} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;\r
+\r
+typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {\r
+  ULONG  ListSize;\r
+  INTERFACE_TYPE  InterfaceType;\r
+  ULONG  BusNumber;\r
+  ULONG  SlotNumber;\r
+  ULONG  Reserved[3];\r
+  ULONG  AlternativeLists;\r
+  IO_RESOURCE_LIST  List[1];\r
+} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;\r
 \r
 //\r
 // Global debug flag\r
@@ -79,6 +191,81 @@ typedef int CM_RESOURCE_TYPE;
 extern ULONG NtGlobalFlag;\r
 \r
 \r
+#include <pshpack4.h>\r
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {\r
+  UCHAR Type;\r
+  UCHAR ShareDisposition;\r
+  USHORT Flags;\r
+  union {\r
+    struct {\r
+      PHYSICAL_ADDRESS Start;\r
+      ULONG Length;\r
+    } Generic;\r
+    struct {\r
+      PHYSICAL_ADDRESS Start;\r
+      ULONG Length;\r
+    } Port;\r
+    struct {\r
+      ULONG Level;\r
+      ULONG Vector;\r
+      KAFFINITY Affinity;\r
+    } Interrupt;\r
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)\r
+    struct {\r
+      union {\r
+        struct {\r
+          USHORT Reserved;\r
+          USHORT MessageCount;\r
+          ULONG Vector;\r
+          KAFFINITY Affinity;\r
+        } Raw;\r
+        struct {\r
+          ULONG Level;\r
+          ULONG Vector;\r
+          KAFFINITY Affinity;\r
+        } Translated;\r
+      };\r
+    } MessageInterrupt;\r
+#endif\r
+    struct {\r
+      PHYSICAL_ADDRESS Start;\r
+      ULONG Length;\r
+    } Memory;\r
+    struct {\r
+      ULONG Channel;\r
+      ULONG Port;\r
+      ULONG Reserved1;\r
+    } Dma;\r
+    struct {\r
+      ULONG Data[3];\r
+    } DevicePrivate;\r
+    struct {\r
+      ULONG Start;\r
+      ULONG Length;\r
+      ULONG Reserved;\r
+    } BusNumber;\r
+    struct {\r
+      ULONG DataSize;\r
+      ULONG Reserved1;\r
+      ULONG Reserved2;\r
+    } DeviceSpecificData;\r
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)\r
+    struct {\r
+      PHYSICAL_ADDRESS Start;\r
+      ULONG Length40;\r
+    } Memory40;\r
+    struct {\r
+      PHYSICAL_ADDRESS Start;\r
+      ULONG Length48;\r
+    } Memory48;\r
+    struct {\r
+      PHYSICAL_ADDRESS Start;\r
+      ULONG Length64;\r
+    } Memory64;\r
+#endif\r
+  } u;\r
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;\r
+#include <poppack.h>\r
 \r
 //\r
 // Section map options\r
@@ -292,7 +479,7 @@ InterlockedExchangeAdd(
 /*\r
  * PVOID\r
  * InterlockedExchangePointer(\r
- *   IN OUT PVOID VOLATILE  *Target,\r
+ *   IN OUT PVOID volatile  *Target,\r
  *   IN PVOID  Value)\r
  */\r
 #define InterlockedExchangePointer(Target, Value) \\r
@@ -355,13 +542,6 @@ InterlockedAdd64(
     return InterlockedExchangeAdd64(Addend, Value) + Value;\r
 }\r
 //#endif\r
-#define BitScanForward _BitScanForward\r
-#define BitScanReverse _BitScanReverse\r
-#endif\r
-\r
-#ifdef _M_AMD64\r
-#define InterlockedBitTestAndSet64 _interlockedbittestandset64\r
-#define InterlockedBitTestAndReset64 _interlockedbittestandreset64\r
 #endif\r
 \r
 #endif /* !__INTERLOCKED_DECLARED */\r
@@ -407,13 +587,13 @@ typedef union _SLIST_HEADER {
         ULONGLONG Reserved:59;\r
         ULONGLONG Region:3;\r
     } Header8;\r
+    struct {\r
         ULONGLONG Depth:16;\r
         ULONGLONG Sequence:48;\r
         ULONGLONG HeaderType:1;\r
         ULONGLONG Init:1;\r
         ULONGLONG Reserved:2;\r
         ULONGLONG NextEntry:60;\r
-    struct {\r
     } Header16;\r
 } SLIST_HEADER, *PSLIST_HEADER;\r
 #else\r
@@ -1788,8 +1968,8 @@ RtlEnlargedUnsignedDivide(
     IN OUT PULONG Remainder)\r
 {\r
     if (Remainder)\r
-        *Remainder = Dividend.QuadPart % Divisor;\r
-    return Dividend.QuadPart / Divisor;\r
+        *Remainder = (ULONG)(Dividend.QuadPart % Divisor);\r
+    return (ULONG)(Dividend.QuadPart / Divisor);\r
 }\r
 \r
 //DECLSPEC_DEPRECATED_DDK\r
@@ -2324,6 +2504,8 @@ typedef struct _EX_RUNDOWN_REF {
     };\r
 } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;\r
 \r
+typedef struct _EX_RUNDOWN_REF_CACHE_AWARE  *PEX_RUNDOWN_REF_CACHE_AWARE;\r
+\r
 typedef enum _WORK_QUEUE_TYPE {\r
   CriticalWorkQueue,\r
   DelayedWorkQueue,\r