Basic NDIS 3.0 support
[reactos.git] / reactos / drivers / net / ndis / include / miniport.h
1 /*
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
6 */
7
8 #ifndef __MINIPORT_H
9 #define __MINIPORT_H
10
11 #include <ndissys.h>
12
13
14 typedef struct _HARDWARE_ADDRESS {
15 union {
16 UCHAR Medium802_3[ETH_LENGTH_OF_ADDRESS];
17 } Type;
18 } HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
19
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;
30
31 #define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle)
32
33 /* Information about a logical adapter */
34 typedef struct _LOGICAL_ADAPTER {
35 NDIS_MINIPORT_BLOCK; /* NDIS defined fields */
36
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 */
44
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 */
63
64 PNDIS_PACKET PacketQueueHead; /* Head of packet queue */
65 PNDIS_PACKET PacketQueueTail; /* Head of packet queue */
66
67 PNDIS_PACKET LoopPacket; /* Current packet beeing looped */
68 } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
69
70 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
71
72 extern LIST_ENTRY MiniportListHead;
73 extern KSPIN_LOCK MiniportListLock;
74 extern LIST_ENTRY AdapterListHead;
75 extern KSPIN_LOCK AdapterListLock;
76
77
78 #ifdef DBG
79 VOID
80 MiniDisplayPacket(
81 PNDIS_PACKET Packet);
82 #endif /* DBG */
83
84 VOID
85 MiniIndicateData(
86 PLOGICAL_ADAPTER Adapter,
87 NDIS_HANDLE MacReceiveContext,
88 PVOID HeaderBuffer,
89 UINT HeaderBufferSize,
90 PVOID LookaheadBuffer,
91 UINT LookaheadBufferSize,
92 UINT PacketSize);
93
94 BOOLEAN
95 MiniAdapterHasAddress(
96 PLOGICAL_ADAPTER Adapter,
97 PNDIS_PACKET Packet);
98
99 PLOGICAL_ADAPTER
100 MiniLocateDevice(
101 PNDIS_STRING AdapterName);
102
103 NDIS_STATUS
104 MiniQueryInformation(
105 PLOGICAL_ADAPTER Adapter,
106 NDIS_OID Oid,
107 ULONG Size,
108 PULONG BytesWritten);
109
110 NDIS_STATUS
111 FASTCALL
112 MiniQueueWorkItem(
113 PLOGICAL_ADAPTER Adapter,
114 NDIS_WORK_ITEM_TYPE WorkItemType,
115 PVOID WorkItemContext,
116 NDIS_HANDLE Initiator);
117
118 NDIS_STATUS
119 FASTCALL
120 MiniDequeueWorkItem(
121 PLOGICAL_ADAPTER Adapter,
122 NDIS_WORK_ITEM_TYPE *WorkItemType,
123 PVOID *WorkItemContext,
124 NDIS_HANDLE *Initiator);
125
126 NDIS_STATUS
127 MiniDoRequest(
128 PLOGICAL_ADAPTER Adapter,
129 PNDIS_REQUEST NdisRequest);
130
131 #endif /* __MINIPORT_H */
132
133 /* EOF */