Start removing dead code and ReactOS specific structure fields (the NDIS structures...
[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 struct _ADAPTER_BINDING;
14
15 typedef struct _HARDWARE_ADDRESS {
16 union {
17 UCHAR Medium802_3[ETH_LENGTH_OF_ADDRESS];
18 } Type;
19 } HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
20
21 /* Information about a miniport */
22 typedef struct _NDIS_M_DRIVER_BLOCK {
23 LIST_ENTRY ListEntry; /* Entry on global list */
24 KSPIN_LOCK Lock; /* Protecting spin lock */
25 NDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics; /* Miniport characteristics */
26 WORK_QUEUE_ITEM WorkItem; /* Work item */
27 PDRIVER_OBJECT DriverObject; /* Driver object of miniport */
28 LIST_ENTRY DeviceList; /* Adapters created by miniport */
29 PUNICODE_STRING RegistryPath; /* SCM Registry key */
30 } NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
31
32 /* resources allocated on behalf on the miniport */
33 #define MINIPORT_RESOURCE_TYPE_MEMORY 0
34 typedef struct _MINIPORT_RESOURCE {
35 LIST_ENTRY ListEntry;
36 ULONG ResourceType;
37 PVOID Resource;
38 } MINIPORT_RESOURCE, *PMINIPORT_RESOURCE;
39
40 /* Configuration context */
41 typedef struct _MINIPORT_CONFIGURATION_CONTEXT {
42 NDIS_HANDLE Handle;
43 LIST_ENTRY ResourceListHead;
44 KSPIN_LOCK ResourceLock;
45 } MINIPORT_CONFIGURATION_CONTEXT, *PMINIPORT_CONFIGURATION_CONTEXT;
46
47 /* Bugcheck callback context */
48 typedef struct _MINIPORT_BUGCHECK_CONTEXT {
49 PVOID DriverContext;
50 ADAPTER_SHUTDOWN_HANDLER ShutdownHandler;
51 PKBUGCHECK_CALLBACK_RECORD CallbackRecord;
52 } MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
53
54 /* a miniport's shared memory */
55 typedef struct _MINIPORT_SHARED_MEMORY {
56 PDMA_ADAPTER AdapterObject;
57 ULONG Length;
58 PHYSICAL_ADDRESS PhysicalAddress;
59 PVOID VirtualAddress;
60 BOOLEAN Cached;
61 } MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
62
63 /* A structure of WrapperConfigurationContext (not compatible with the
64 Windows one). */
65 typedef struct _NDIS_WRAPPER_CONTEXT {
66 HANDLE RegistryHandle;
67 PDEVICE_OBJECT DeviceObject;
68 ULONG BusNumber;
69 } NDIS_WRAPPER_CONTEXT, *PNDIS_WRAPPER_CONTEXT;
70
71 #define GET_MINIPORT_DRIVER(Handle)((PNDIS_M_DRIVER_BLOCK)Handle)
72
73 /* Information about a logical adapter */
74 typedef struct _LOGICAL_ADAPTER
75 {
76 NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
77 BOOLEAN MiniportBusy; /* A MiniportXxx routine is executing */
78 PNDIS_MINIPORT_WORK_ITEM WorkQueueHead; /* Head of work queue */
79 PNDIS_MINIPORT_WORK_ITEM WorkQueueTail; /* Tail of work queue */
80 LIST_ENTRY ListEntry; /* Entry on global list */
81 LIST_ENTRY MiniportListEntry; /* Entry on miniport driver list */
82 LIST_ENTRY ProtocolListHead; /* List of bound protocols */
83 PVOID QueryBuffer; /* Buffer to use for queries */
84 ULONG QueryBufferLength; /* Length of QueryBuffer */
85 ULONG MediumHeaderSize; /* Size of medium header */
86 HARDWARE_ADDRESS Address; /* Hardware address of adapter */
87 ULONG AddressLength; /* Length of hardware address */
88 PUCHAR LookaheadBuffer; /* Pointer to lookahead buffer */
89 ULONG LookaheadLength; /* Length of lookahead buffer */
90 PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */
91 } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
92
93 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
94
95 extern LIST_ENTRY MiniportListHead;
96 extern KSPIN_LOCK MiniportListLock;
97 extern LIST_ENTRY AdapterListHead;
98 extern KSPIN_LOCK AdapterListLock;
99
100
101 #ifdef DBG
102 VOID
103 MiniDisplayPacket(
104 PNDIS_PACKET Packet);
105 #endif /* DBG */
106
107 VOID
108 MiniIndicateData(
109 PLOGICAL_ADAPTER Adapter,
110 NDIS_HANDLE MacReceiveContext,
111 PVOID HeaderBuffer,
112 UINT HeaderBufferSize,
113 PVOID LookaheadBuffer,
114 UINT LookaheadBufferSize,
115 UINT PacketSize);
116
117 BOOLEAN
118 MiniAdapterHasAddress(
119 PLOGICAL_ADAPTER Adapter,
120 PNDIS_PACKET Packet);
121
122 PLOGICAL_ADAPTER
123 MiniLocateDevice(
124 PNDIS_STRING AdapterName);
125
126 NDIS_STATUS
127 MiniQueryInformation(
128 PLOGICAL_ADAPTER Adapter,
129 NDIS_OID Oid,
130 ULONG Size,
131 PULONG BytesWritten);
132
133 NDIS_STATUS
134 FASTCALL
135 MiniQueueWorkItem(
136 PLOGICAL_ADAPTER Adapter,
137 NDIS_WORK_ITEM_TYPE WorkItemType,
138 PVOID WorkItemContext);
139
140 NDIS_STATUS
141 FASTCALL
142 MiniDequeueWorkItem(
143 PLOGICAL_ADAPTER Adapter,
144 NDIS_WORK_ITEM_TYPE *WorkItemType,
145 PVOID *WorkItemContext);
146
147 NDIS_STATUS
148 MiniDoRequest(
149 PNDIS_MINIPORT_BLOCK Adapter,
150 PNDIS_REQUEST NdisRequest);
151
152 BOOLEAN
153 NdisFindDevice(
154 UINT VendorID,
155 UINT DeviceID,
156 PUINT BusNumber,
157 PUINT SlotNumber);
158
159 VOID
160 NdisStartDevices();
161
162 #endif /* __MINIPORT_H */
163
164 /* EOF */
165