:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / 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 NdisMiniportBlock;                                /* 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 */