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
10 struct _ADAPTER_BINDING
;
12 typedef struct _HARDWARE_ADDRESS
{
14 UCHAR Medium802_3
[ETH_LENGTH_OF_ADDRESS
];
16 } HARDWARE_ADDRESS
, *PHARDWARE_ADDRESS
;
18 /* Information about a miniport */
19 typedef struct _NDIS_M_DRIVER_BLOCK
{
20 LIST_ENTRY ListEntry
; /* Entry on global list */
21 KSPIN_LOCK Lock
; /* Protecting spin lock */
22 NDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
; /* Miniport characteristics */
23 WORK_QUEUE_ITEM WorkItem
; /* Work item */
24 PDRIVER_OBJECT DriverObject
; /* Driver object of miniport */
25 LIST_ENTRY DeviceList
; /* Adapters created by miniport */
26 PUNICODE_STRING RegistryPath
; /* SCM Registry key */
27 #if !defined(_MSC_VER) && defined(_NDIS_)
28 } NDIS_M_DRIVER_BLOCK_COMPATIBILITY_HACK_DONT_USE
;
30 } NDIS_M_DRIVER_BLOCK
, *PNDIS_M_DRIVER_BLOCK
;
33 /* There must be some defined struct to do this... */
34 typedef struct _NDIS_M_DEVICE_BLOCK
{
35 PDEVICE_OBJECT DeviceObject
;
36 PNDIS_STRING SymbolicName
;
37 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+1];
38 } NDIS_M_DEVICE_BLOCK
, *PNDIS_M_DEVICE_BLOCK
;
40 /* resources allocated on behalf on the miniport */
41 #define MINIPORT_RESOURCE_TYPE_REGISTRY_DATA 0
42 #define MINIPORT_RESOURCE_TYPE_MEMORY 1
43 typedef struct _MINIPORT_RESOURCE
{
47 } MINIPORT_RESOURCE
, *PMINIPORT_RESOURCE
;
49 /* Configuration context */
50 typedef struct _MINIPORT_CONFIGURATION_CONTEXT
{
52 LIST_ENTRY ResourceListHead
;
53 KSPIN_LOCK ResourceLock
;
54 } MINIPORT_CONFIGURATION_CONTEXT
, *PMINIPORT_CONFIGURATION_CONTEXT
;
56 /* Bugcheck callback context */
57 typedef struct _MINIPORT_BUGCHECK_CONTEXT
{
59 ADAPTER_SHUTDOWN_HANDLER ShutdownHandler
;
60 PKBUGCHECK_CALLBACK_RECORD CallbackRecord
;
61 } MINIPORT_BUGCHECK_CONTEXT
, *PMINIPORT_BUGCHECK_CONTEXT
;
63 /* a miniport's shared memory */
64 typedef struct _MINIPORT_SHARED_MEMORY
{
65 PDMA_ADAPTER AdapterObject
;
67 PHYSICAL_ADDRESS PhysicalAddress
;
70 PNDIS_MINIPORT_BLOCK Adapter
;
72 PIO_WORKITEM WorkItem
;
73 } MINIPORT_SHARED_MEMORY
, *PMINIPORT_SHARED_MEMORY
;
75 /* A structure of WrapperConfigurationContext (not compatible with the
77 typedef struct _NDIS_WRAPPER_CONTEXT
{
78 HANDLE RegistryHandle
;
79 PDEVICE_OBJECT DeviceObject
;
82 } NDIS_WRAPPER_CONTEXT
, *PNDIS_WRAPPER_CONTEXT
;
84 #define GET_MINIPORT_DRIVER(Handle)((PNDIS_M_DRIVER_BLOCK)Handle)
86 /* Information about a logical adapter */
87 typedef struct _LOGICAL_ADAPTER
89 NDIS_MINIPORT_BLOCK NdisMiniportBlock
; /* NDIS defined fields */
90 PNDIS_MINIPORT_WORK_ITEM WorkQueueHead
; /* Head of work queue */
91 PNDIS_MINIPORT_WORK_ITEM WorkQueueTail
; /* Tail of work queue */
92 LIST_ENTRY ListEntry
; /* Entry on global list */
93 LIST_ENTRY MiniportListEntry
; /* Entry on miniport driver list */
94 LIST_ENTRY ProtocolListHead
; /* List of bound protocols */
95 ULONG MediumHeaderSize
; /* Size of medium header */
96 HARDWARE_ADDRESS Address
; /* Hardware address of adapter */
97 ULONG AddressLength
; /* Length of hardware address */
98 PMINIPORT_BUGCHECK_CONTEXT BugcheckContext
; /* Adapter's shutdown handler */
99 } LOGICAL_ADAPTER
, *PLOGICAL_ADAPTER
;
101 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
103 extern LIST_ENTRY MiniportListHead
;
104 extern KSPIN_LOCK MiniportListLock
;
105 extern LIST_ENTRY AdapterListHead
;
106 extern KSPIN_LOCK AdapterListLock
;
112 PNDIS_PACKET Packet
);
117 PLOGICAL_ADAPTER Adapter
,
118 NDIS_HANDLE MacReceiveContext
,
120 UINT HeaderBufferSize
,
121 PVOID LookaheadBuffer
,
122 UINT LookaheadBufferSize
,
126 MiniAdapterHasAddress(
127 PLOGICAL_ADAPTER Adapter
,
128 PNDIS_PACKET Packet
);
132 PNDIS_STRING AdapterName
);
135 MiniQueryInformation(
136 PLOGICAL_ADAPTER Adapter
,
140 PULONG BytesWritten
);
145 PLOGICAL_ADAPTER Adapter
,
146 NDIS_WORK_ITEM_TYPE WorkItemType
,
147 PVOID WorkItemContext
,
153 PLOGICAL_ADAPTER Adapter
,
154 NDIS_WORK_ITEM_TYPE
*WorkItemType
,
155 PVOID
*WorkItemContext
);
159 PLOGICAL_ADAPTER Adapter
,
160 PNDIS_REQUEST NdisRequest
);
170 NdisStartDevices(VOID
);
175 IN PDEVICE_OBJECT DeviceObject
,
180 IN NDIS_HANDLE MiniportAdapterHandle
,
181 IN PNDIS_PACKET Packet
,
182 IN NDIS_STATUS Status
);
186 PLOGICAL_ADAPTER Adapter
,
187 NDIS_WORK_ITEM_TYPE Type
);
191 PLOGICAL_ADAPTER Adapter
);
194 MiniDoAddressingReset(
195 PLOGICAL_ADAPTER Adapter
);
198 MiniWorkItemComplete(
199 PLOGICAL_ADAPTER Adapter
,
200 NDIS_WORK_ITEM_TYPE WorkItemType
);