- Get NDIS (almost) compiling with msvc/ddk.
[reactos.git] / reactos / drivers / net / ndis / include / miniport.h
index 757ed51..5a6205b 100644 (file)
@@ -8,8 +8,10 @@
 #ifndef __MINIPORT_H
 #define __MINIPORT_H
 
+#include <ndis.h>
 #include <ndissys.h>
 
+struct _ADAPTER_BINDING;
 
 typedef struct _HARDWARE_ADDRESS {
     union {
@@ -18,16 +20,15 @@ typedef struct _HARDWARE_ADDRESS {
 } HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
 
 /* Information about a miniport */
-typedef struct _MINIPORT_DRIVER {
-    LIST_ENTRY                      ListEntry;          /* Entry on global list */
-    KSPIN_LOCK                      Lock;               /* Protecting spin lock */
-    ULONG                           RefCount;           /* Reference count */
-    NDIS_MINIPORT_CHARACTERISTICS   Chars;              /* Miniport characteristics */
-    WORK_QUEUE_ITEM                 WorkItem;           /* Work item */
-    PDRIVER_OBJECT                  DriverObject;       /* Driver object of miniport */
-    LIST_ENTRY                      AdapterListHead;    /* Adapters created by miniport */
-    PUNICODE_STRING                 RegistryPath;       /* SCM Registry key */
-} MINIPORT_DRIVER, *PMINIPORT_DRIVER;
+typedef struct _NDIS_M_DRIVER_BLOCK {
+    LIST_ENTRY                      ListEntry;                /* Entry on global list */
+    KSPIN_LOCK                      Lock;                     /* Protecting spin lock */
+    NDIS_MINIPORT_CHARACTERISTICS   MiniportCharacteristics;  /* Miniport characteristics */
+    WORK_QUEUE_ITEM                 WorkItem;                 /* Work item */
+    PDRIVER_OBJECT                  DriverObject;             /* Driver object of miniport */
+    LIST_ENTRY                      DeviceList;               /* Adapters created by miniport */
+    PUNICODE_STRING                 RegistryPath;             /* SCM Registry key */
+} NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
 
 /* resources allocated on behalf on the miniport */
 #define MINIPORT_RESOURCE_TYPE_MEMORY 0
@@ -51,81 +52,71 @@ typedef struct _MINIPORT_BUGCHECK_CONTEXT {
     PKBUGCHECK_CALLBACK_RECORD  CallbackRecord;
 } MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
 
-/* allocated map register list */
-typedef struct _ADAPTER_MAP_REGISTER_LIST {
-    LIST_ENTRY  ListEntry;
-    UINT        NumRegisters;
-    PVOID       MapRegister;
-} ADAPTER_MAP_REGISTER_LIST, *PADAPTER_MAP_REGISTER_LIST;
-
 /* a miniport's shared memory */
 typedef struct _MINIPORT_SHARED_MEMORY {
-    PADAPTER_OBJECT   AdapterObject;
+    PDMA_ADAPTER      AdapterObject;
     ULONG             Length;
     PHYSICAL_ADDRESS  PhysicalAddress;
     PVOID             VirtualAddress;
     BOOLEAN           Cached;
 } MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
 
-#define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle)
-
-/* detected adapters that are driverless */
-typedef struct _ORPHAN_ADATER {
-    LIST_ENTRY        ListEntry;
-    NDIS_STRING       RegistryPath;
-    INTERFACE_TYPE    BusType;
+/* A structure of WrapperConfigurationContext (not compatible with the
+   Windows one). */
+typedef struct _NDIS_WRAPPER_CONTEXT {
+    HANDLE            RegistryHandle;
+    PDEVICE_OBJECT    DeviceObject;
     ULONG             BusNumber;
-    ULONG             SlotNumber;
-} ORPHAN_ADAPTER, *PORPHAN_ADAPTER;
+} NDIS_WRAPPER_CONTEXT, *PNDIS_WRAPPER_CONTEXT;
+
+#define GET_MINIPORT_DRIVER(Handle)((PNDIS_M_DRIVER_BLOCK)Handle)
+
+#ifndef NUMBER_OF_WORK_ITEM_TYPES
+
+typedef enum _NDIS_WORK_ITEM_TYPE {
+  NdisWorkItemRequest,
+  NdisWorkItemSend,
+  NdisWorkItemReturnPackets,
+  NdisWorkItemResetRequested,
+  NdisWorkItemResetInProgress,
+  NdisWorkItemHalt,
+  NdisWorkItemSendLoopback,
+  NdisWorkItemMiniportCallback,
+  NdisMaxWorkItems
+} NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
+
+#define NUMBER_OF_WORK_ITEM_TYPES         NdisMaxWorkItems
+#define NUMBER_OF_SINGLE_WORK_ITEMS       6
+
+typedef struct _NDIS_MINIPORT_WORK_ITEM {
+    SINGLE_LIST_ENTRY  Link;
+    NDIS_WORK_ITEM_TYPE  WorkItemType;
+    PVOID  WorkItemContext;
+} NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
+
+typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
+
+typedef VOID (NTAPI *W_MINIPORT_CALLBACK)(
+  IN NDIS_HANDLE  MiniportAdapterContext,
+  IN PVOID  CallbackContext);
+#endif
 
 /* Information about a logical adapter */
-typedef struct _LOGICAL_ADAPTER 
+typedef struct _LOGICAL_ADAPTER
 {
     NDIS_MINIPORT_BLOCK         NdisMiniportBlock;      /* NDIS defined fields */
-    KDPC                        MiniportDpc;            /* DPC routine for adapter */
     BOOLEAN                     MiniportBusy;           /* A MiniportXxx routine is executing */
-    NDIS_HANDLE                 MiniportAdapterBinding; /* Binding handle for current caller */
-    ULONG                       WorkQueueLevel;         /* Number of used work item buffers */
-    NDIS_MINIPORT_WORK_ITEM     WorkQueue[NDIS_MINIPORT_WORK_QUEUE_SIZE];
     PNDIS_MINIPORT_WORK_ITEM    WorkQueueHead;          /* Head of work queue */
     PNDIS_MINIPORT_WORK_ITEM    WorkQueueTail;          /* Tail of work queue */
     LIST_ENTRY                  ListEntry;              /* Entry on global list */
     LIST_ENTRY                  MiniportListEntry;      /* Entry on miniport driver list */
     LIST_ENTRY                  ProtocolListHead;       /* List of bound protocols */
-    ULONG                       RefCount;               /* Reference count */
-    PMINIPORT_DRIVER            Miniport;               /* Miniport owning this adapter */
-    UNICODE_STRING              DeviceName;             /* Device name of this adapter */
-    ULONG                       Attributes;             /* Attributes of adapter */
-    BOOLEAN                     AttributesSet;          /* Whether NdisMSetAttributes(Ex) has been called */
-    PVOID                       QueryBuffer;            /* Buffer to use for queries */
-    ULONG                       QueryBufferLength;      /* Length of QueryBuffer */
     ULONG                       MediumHeaderSize;       /* Size of medium header */
     HARDWARE_ADDRESS            Address;                /* Hardware address of adapter */
     ULONG                       AddressLength;          /* Length of hardware address */
     PUCHAR                      LookaheadBuffer;        /* Pointer to lookahead buffer */
     ULONG                       LookaheadLength;        /* Length of lookahead buffer */
-    ULONG                       CurLookaheadLength;     /* Current (selected) length of lookahead buffer */
-    ULONG                       MaxLookaheadLength;     /* Maximum length of lookahead buffer */
-    PNDIS_PACKET                PacketQueueHead;        /* Head of packet queue */
-    PNDIS_PACKET                PacketQueueTail;        /* Head of packet queue */
-    PNDIS_PACKET                LoopPacket;             /* Current packet beeing looped */
     PMINIPORT_BUGCHECK_CONTEXT  BugcheckContext;        /* Adapter's shutdown handler */
-    UINT                        MapRegistersRequested;  /* Number of outstanding map registers requested */
-    PADAPTER_OBJECT             AdapterObject;          /* Adapter object for DMA ops */
-    ADAPTER_MAP_REGISTER_LIST   MapRegisterList;        /* List of allocated map registers */
-    KEVENT                      DmaEvent;               /* Event to support DMA register allocation */
-    KSPIN_LOCK                  DmaLock;                /* Spinlock to protect the dma list */
-    UINT                        BusNumber;              /* The bus number of the adapter  */
-    INTERFACE_TYPE              BusType;                /* The bus type of the adapter */
-    UINT                        SlotNumber;             /* The slot number of the adapter*/
-    ULONG                       Irql;                   /* The Irql assigned to the adapter */
-    ULONG                       Vector;                 /* The interrupt vector assigned to the adapter */
-    KAFFINITY                   Affinity;               /* The processor affinity of the adapter */
-    PHYSICAL_ADDRESS            BaseIoAddress;          /* The base IO address of the adapter */
-    PHYSICAL_ADDRESS            BaseMemoryAddress;      /* The base memory address of mapped memory for the adapter */
-    ULONG                       DmaChannel;             /* The DMA channel number of the adapter */
-    ULONG                       DmaPort;                /* The DMA port number of the adapter */
-    PNDIS_MINIPORT_TIMER        Timer;                  /* The timer  object of the adapter */
 } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
 
 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
@@ -166,6 +157,7 @@ MiniQueryInformation(
     PLOGICAL_ADAPTER    Adapter,
     NDIS_OID            Oid,
     ULONG               Size,
+    PVOID               Buffer,
     PULONG              BytesWritten);
 
 NDIS_STATUS
@@ -173,27 +165,25 @@ FASTCALL
 MiniQueueWorkItem(
     PLOGICAL_ADAPTER    Adapter,
     NDIS_WORK_ITEM_TYPE WorkItemType,
-    PVOID               WorkItemContext,
-    NDIS_HANDLE         Initiator);
+    PVOID               WorkItemContext);
 
 NDIS_STATUS
 FASTCALL
 MiniDequeueWorkItem(
     PLOGICAL_ADAPTER    Adapter,
     NDIS_WORK_ITEM_TYPE *WorkItemType,
-    PVOID               *WorkItemContext,
-    NDIS_HANDLE         *Initiator);
+    PVOID               *WorkItemContext);
 
 NDIS_STATUS
 MiniDoRequest(
-    PLOGICAL_ADAPTER Adapter,
+    PNDIS_MINIPORT_BLOCK Adapter,
     PNDIS_REQUEST NdisRequest);
 
-BOOLEAN 
+BOOLEAN
 NdisFindDevice(
-    UINT   VendorID, 
-    UINT   DeviceID, 
-    PUINT  BusNumber, 
+    UINT   VendorID,
+    UINT   DeviceID,
+    PUINT  BusNumber,
     PUINT  SlotNumber);
 
 VOID