2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS library
4 * FILE: ndis/miniport.h
5 * PURPOSE: Definitions for routines used by NDIS miniport drivers
14 typedef struct _HARDWARE_ADDRESS {
16 UCHAR Medium802_3[ETH_LENGTH_OF_ADDRESS];
18 } HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
20 /* Information about a miniport */
21 typedef struct _MINIPORT_DRIVER {
22 LIST_ENTRY ListEntry; /* Entry on global list */
23 KSPIN_LOCK Lock; /* Protecting spin lock */
24 ULONG RefCount; /* Reference count */
25 NDIS_MINIPORT_CHARACTERISTICS Chars; /* Miniport characteristics */
26 WORK_QUEUE_ITEM WorkItem; /* Work item */
27 PDRIVER_OBJECT DriverObject; /* Driver object of miniport */
28 LIST_ENTRY AdapterListHead; /* Adapters created by miniport */
29 } MINIPORT_DRIVER, *PMINIPORT_DRIVER;
31 #define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle)
33 /* Information about a logical adapter */
34 typedef struct _LOGICAL_ADAPTER {
35 NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
37 KDPC MiniportDpc; /* DPC routine for adapter */
38 BOOLEAN MiniportBusy; /* A MiniportXxx routine is executing */
39 NDIS_HANDLE MiniportAdapterBinding; /* Binding handle for current caller */
40 ULONG WorkQueueLevel; /* Number of used work item buffers */
41 NDIS_MINIPORT_WORK_ITEM WorkQueue[NDIS_MINIPORT_WORK_QUEUE_SIZE];
42 PNDIS_MINIPORT_WORK_ITEM WorkQueueHead; /* Head of work queue */
43 PNDIS_MINIPORT_WORK_ITEM WorkQueueTail; /* Tail of work queue */
45 LIST_ENTRY ListEntry; /* Entry on global list */
46 LIST_ENTRY MiniportListEntry; /* Entry on miniport driver list */
47 LIST_ENTRY ProtocolListHead; /* List of bound protocols */
48 ULONG RefCount; /* Reference count */
49 PMINIPORT_DRIVER Miniport; /* Miniport owning this adapter */
50 UNICODE_STRING DeviceName; /* Device name of this adapter */
51 ULONG Attributes; /* Attributes of adapter */
52 /* TRUE if the miniport has called NdisSetAttributes(Ex) for this adapter */
53 BOOLEAN AttributesSet;
54 PVOID QueryBuffer; /* Buffer to use for queries */
55 ULONG QueryBufferLength; /* Length of QueryBuffer */
56 ULONG MediumHeaderSize; /* Size of medium header */
57 HARDWARE_ADDRESS Address; /* Hardware address of adapter */
58 ULONG AddressLength; /* Length of hardware address */
59 PUCHAR LookaheadBuffer; /* Pointer to lookahead buffer */
60 ULONG LookaheadLength; /* Length of lookahead buffer */
61 ULONG CurLookaheadLength; /* Current (selected) length of lookahead buffer */
62 ULONG MaxLookaheadLength; /* Maximum length of lookahead buffer */
64 PNDIS_PACKET PacketQueueHead; /* Head of packet queue */
65 PNDIS_PACKET PacketQueueTail; /* Head of packet queue */
67 PNDIS_PACKET LoopPacket; /* Current packet beeing looped */
68 } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
70 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
72 extern LIST_ENTRY MiniportListHead;
73 extern KSPIN_LOCK MiniportListLock;
74 extern LIST_ENTRY AdapterListHead;
75 extern KSPIN_LOCK AdapterListLock;
86 PLOGICAL_ADAPTER Adapter,
87 NDIS_HANDLE MacReceiveContext,
89 UINT HeaderBufferSize,
90 PVOID LookaheadBuffer,
91 UINT LookaheadBufferSize,
95 MiniAdapterHasAddress(
96 PLOGICAL_ADAPTER Adapter,
101 PNDIS_STRING AdapterName);
104 MiniQueryInformation(
105 PLOGICAL_ADAPTER Adapter,
108 PULONG BytesWritten);
113 PLOGICAL_ADAPTER Adapter,
114 NDIS_WORK_ITEM_TYPE WorkItemType,
115 PVOID WorkItemContext,
116 NDIS_HANDLE Initiator);
121 PLOGICAL_ADAPTER Adapter,
122 NDIS_WORK_ITEM_TYPE *WorkItemType,
123 PVOID *WorkItemContext,
124 NDIS_HANDLE *Initiator);
128 PLOGICAL_ADAPTER Adapter,
129 PNDIS_REQUEST NdisRequest);
131 #endif /* __MINIPORT_H */