[E1000] Implement basic sending.
[reactos.git] / drivers / network / dd / e1000 / nic.h
1 /*
2 * PROJECT: ReactOS Intel PRO/1000 Driver
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Intel PRO/1000 driver definitions
5 * COPYRIGHT: Copyright 2013 Cameron Gutman (cameron.gutman@reactos.org)
6 * Copyright 2018 Mark Jansen (mark.jansen@reactos.org)
7 */
8
9 #ifndef _E1000_PCH_
10 #define _E1000_PCH_
11
12 #include <ndis.h>
13
14 #include "e1000hw.h"
15
16 #define E1000_TAG '001e'
17
18 #define MAXIMUM_FRAME_SIZE 1522
19 #define RECEIVE_BUFFER_SIZE 2048
20
21 #define DRIVER_VERSION 1
22
23
24 #define DEFAULT_INTERRUPT_MASK (E1000_IMS_LSC | E1000_IMS_TXDW)
25
26 typedef struct _E1000_ADAPTER
27 {
28 NDIS_SPIN_LOCK Lock;
29 NDIS_HANDLE AdapterHandle;
30 USHORT VendorID;
31 USHORT DeviceID;
32 USHORT SubsystemID;
33 USHORT SubsystemVendorID;
34
35 UCHAR PermanentMacAddress[IEEE_802_ADDR_LENGTH];
36 struct {
37 UCHAR MacAddress[IEEE_802_ADDR_LENGTH];
38 } MulticastList[MAXIMUM_MULTICAST_ADDRESSES];
39
40 ULONG LinkSpeedMbps;
41 ULONG MediaState;
42 ULONG PacketFilter;
43
44 /* Io Port */
45 ULONG IoPortAddress;
46 ULONG IoPortLength;
47 volatile PUCHAR IoPort;
48
49 /* NIC Memory */
50 NDIS_PHYSICAL_ADDRESS IoAddress;
51 ULONG IoLength;
52 volatile PUCHAR IoBase;
53
54 /* Interrupt */
55 ULONG InterruptVector;
56 ULONG InterruptLevel;
57 BOOLEAN InterruptShared;
58 ULONG InterruptFlags;
59
60 NDIS_MINIPORT_INTERRUPT Interrupt;
61 BOOLEAN InterruptRegistered;
62
63 ULONG InterruptMask;
64 ULONG InterruptPending;
65
66
67 /* Transmit */
68 PE1000_TRANSMIT_DESCRIPTOR TransmitDescriptors;
69 NDIS_PHYSICAL_ADDRESS TransmitDescriptorsPa;
70
71 ULONG CurrentTxDesc;
72 ULONG LastTxDesc;
73 BOOLEAN TxFull;
74
75 } E1000_ADAPTER, *PE1000_ADAPTER;
76
77
78 BOOLEAN
79 NTAPI
80 NICRecognizeHardware(
81 IN PE1000_ADAPTER Adapter);
82
83 NDIS_STATUS
84 NTAPI
85 NICInitializeAdapterResources(
86 IN PE1000_ADAPTER Adapter,
87 IN PNDIS_RESOURCE_LIST ResourceList);
88
89 NDIS_STATUS
90 NTAPI
91 NICAllocateIoResources(
92 IN PE1000_ADAPTER Adapter);
93
94 NDIS_STATUS
95 NTAPI
96 NICRegisterInterrupts(
97 IN PE1000_ADAPTER Adapter);
98
99 NDIS_STATUS
100 NTAPI
101 NICUnregisterInterrupts(
102 IN PE1000_ADAPTER Adapter);
103
104 NDIS_STATUS
105 NTAPI
106 NICReleaseIoResources(
107 IN PE1000_ADAPTER Adapter);
108
109 NDIS_STATUS
110 NTAPI
111 NICPowerOn(
112 IN PE1000_ADAPTER Adapter);
113
114 NDIS_STATUS
115 NTAPI
116 NICSoftReset(
117 IN PE1000_ADAPTER Adapter);
118
119 NDIS_STATUS
120 NTAPI
121 NICEnableTxRx(
122 IN PE1000_ADAPTER Adapter);
123
124 NDIS_STATUS
125 NTAPI
126 NICDisableTxRx(
127 IN PE1000_ADAPTER Adapter);
128
129 NDIS_STATUS
130 NTAPI
131 NICGetPermanentMacAddress(
132 IN PE1000_ADAPTER Adapter,
133 OUT PUCHAR MacAddress);
134
135 NDIS_STATUS
136 NTAPI
137 NICUpdateMulticastList(
138 IN PE1000_ADAPTER Adapter);
139
140 NDIS_STATUS
141 NTAPI
142 NICApplyPacketFilter(
143 IN PE1000_ADAPTER Adapter);
144
145 NDIS_STATUS
146 NTAPI
147 NICApplyInterruptMask(
148 IN PE1000_ADAPTER Adapter);
149
150 NDIS_STATUS
151 NTAPI
152 NICDisableInterrupts(
153 IN PE1000_ADAPTER Adapter);
154
155 ULONG
156 NTAPI
157 NICInterruptRecognized(
158 IN PE1000_ADAPTER Adapter,
159 OUT PBOOLEAN InterruptRecognized);
160
161 VOID
162 NTAPI
163 NICUpdateLinkStatus(
164 IN PE1000_ADAPTER Adapter);
165
166 NDIS_STATUS
167 NTAPI
168 NICTransmitPacket(
169 IN PE1000_ADAPTER Adapter,
170 IN ULONG PhysicalAddress,
171 IN ULONG Length);
172
173 NDIS_STATUS
174 NTAPI
175 MiniportSetInformation(
176 IN NDIS_HANDLE MiniportAdapterContext,
177 IN NDIS_OID Oid,
178 IN PVOID InformationBuffer,
179 IN ULONG InformationBufferLength,
180 OUT PULONG BytesRead,
181 OUT PULONG BytesNeeded);
182
183 NDIS_STATUS
184 NTAPI
185 MiniportQueryInformation(
186 IN NDIS_HANDLE MiniportAdapterContext,
187 IN NDIS_OID Oid,
188 IN PVOID InformationBuffer,
189 IN ULONG InformationBufferLength,
190 OUT PULONG BytesWritten,
191 OUT PULONG BytesNeeded);
192
193 VOID
194 NTAPI
195 MiniportISR(
196 OUT PBOOLEAN InterruptRecognized,
197 OUT PBOOLEAN QueueMiniportHandleInterrupt,
198 IN NDIS_HANDLE MiniportAdapterContext);
199
200 VOID
201 NTAPI
202 MiniportHandleInterrupt(
203 IN NDIS_HANDLE MiniportAdapterContext);
204
205 #endif /* _E1000_PCH_ */