- wdm.h: Define ALLOC_PRAGMA and ALLOC_DATA_PRAGMA for MSVC.
[reactos.git] / reactos / include / ddk / wdm.h
index b21aac4..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
@@ -400,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
@@ -1781,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
@@ -1864,6 +2051,10 @@ RtlExtendedLargeIntegerDivide(
 #endif\r
 \r
 #if defined(_AMD64_)\r
+\r
+#define MultiplyHigh __mulh\r
+#define UnsignedMultiplyHigh __umulh\r
+\r
 //DECLSPEC_DEPRECATED_DDK\r
 static __inline\r
 LARGE_INTEGER\r
@@ -1871,13 +2062,13 @@ NTAPI_INLINE
 RtlExtendedMagicDivide(\r
     IN LARGE_INTEGER Dividend,\r
     IN LARGE_INTEGER MagicDivisor,\r
-    IN CCHAR ShiftCount);\r
+    IN CCHAR ShiftCount)\r
 {\r
     LARGE_INTEGER ret;\r
     ULONG64 ret64;\r
     BOOLEAN Pos;\r
     Pos = (Dividend.QuadPart >= 0);\r
-    ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart\r
+    ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart,\r
                                  MagicDivisor.QuadPart);\r
     ret64 >>= ShiftCount;\r
     ret.QuadPart = Pos ? ret64 : -ret64;\r
@@ -2313,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