efinet.h revision 1.1.1.1.36.1 1 /* $NetBSD: efinet.h,v 1.1.1.1.36.1 2019/06/10 22:08:35 christos Exp $ */
2
3 #ifndef _EFINET_H
4 #define _EFINET_H
5
6
7 /*++
8 Copyright (c) 1999 Intel Corporation
9
10 Module Name:
11 efinet.h
12
13 Abstract:
14 EFI Simple Network protocol
15
16 Revision History
17 --*/
18
19
20 ///////////////////////////////////////////////////////////////////////////////
21 //
22 // Simple Network Protocol
23 //
24
25 #define EFI_SIMPLE_NETWORK_PROTOCOL_GUID \
26 { 0xA19832B9, 0xAC25, 0x11D3, {0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
27
28 INTERFACE_DECL(_EFI_SIMPLE_NETWORK_PROTOCOL);
29
30 ///////////////////////////////////////////////////////////////////////////////
31 //
32
33 typedef struct {
34 //
35 // Total number of frames received. Includes frames with errors and
36 // dropped frames.
37 //
38 UINT64 RxTotalFrames;
39
40 //
41 // Number of valid frames received and copied into receive buffers.
42 //
43 UINT64 RxGoodFrames;
44
45 //
46 // Number of frames below the minimum length for the media.
47 // This would be <64 for ethernet.
48 //
49 UINT64 RxUndersizeFrames;
50
51 //
52 // Number of frames longer than the maxminum length for the
53 // media. This would be >1500 for ethernet.
54 //
55 UINT64 RxOversizeFrames;
56
57 //
58 // Valid frames that were dropped because receive buffers were full.
59 //
60 UINT64 RxDroppedFrames;
61
62 //
63 // Number of valid unicast frames received and not dropped.
64 //
65 UINT64 RxUnicastFrames;
66
67 //
68 // Number of valid broadcast frames received and not dropped.
69 //
70 UINT64 RxBroadcastFrames;
71
72 //
73 // Number of valid mutlicast frames received and not dropped.
74 //
75 UINT64 RxMulticastFrames;
76
77 //
78 // Number of frames w/ CRC or alignment errors.
79 //
80 UINT64 RxCrcErrorFrames;
81
82 //
83 // Total number of bytes received. Includes frames with errors
84 // and dropped frames.
85 //
86 UINT64 RxTotalBytes;
87
88 //
89 // Transmit statistics.
90 //
91 UINT64 TxTotalFrames;
92 UINT64 TxGoodFrames;
93 UINT64 TxUndersizeFrames;
94 UINT64 TxOversizeFrames;
95 UINT64 TxDroppedFrames;
96 UINT64 TxUnicastFrames;
97 UINT64 TxBroadcastFrames;
98 UINT64 TxMulticastFrames;
99 UINT64 TxCrcErrorFrames;
100 UINT64 TxTotalBytes;
101
102 //
103 // Number of collisions detection on this subnet.
104 //
105 UINT64 Collisions;
106
107 //
108 // Number of frames destined for unsupported protocol.
109 //
110 UINT64 UnsupportedProtocol;
111
112 } EFI_NETWORK_STATISTICS;
113
114 ///////////////////////////////////////////////////////////////////////////////
115 //
116
117 typedef enum {
118 EfiSimpleNetworkStopped,
119 EfiSimpleNetworkStarted,
120 EfiSimpleNetworkInitialized,
121 EfiSimpleNetworkMaxState
122 } EFI_SIMPLE_NETWORK_STATE;
123
124 ///////////////////////////////////////////////////////////////////////////////
125 //
126
127 #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01
128 #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02
129 #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04
130 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08
131 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
132
133 ///////////////////////////////////////////////////////////////////////////////
134 //
135
136 #define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT 0x01
137 #define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02
138 #define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT 0x04
139 #define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08
140
141 ///////////////////////////////////////////////////////////////////////////////
142 //
143 #define MAX_MCAST_FILTER_CNT 16
144 typedef struct {
145 UINT32 State;
146 UINT32 HwAddressSize;
147 UINT32 MediaHeaderSize;
148 UINT32 MaxPacketSize;
149 UINT32 NvRamSize;
150 UINT32 NvRamAccessSize;
151 UINT32 ReceiveFilterMask;
152 UINT32 ReceiveFilterSetting;
153 UINT32 MaxMCastFilterCount;
154 UINT32 MCastFilterCount;
155 EFI_MAC_ADDRESS MCastFilter[MAX_MCAST_FILTER_CNT];
156 EFI_MAC_ADDRESS CurrentAddress;
157 EFI_MAC_ADDRESS BroadcastAddress;
158 EFI_MAC_ADDRESS PermanentAddress;
159 UINT8 IfType;
160 BOOLEAN MacAddressChangeable;
161 BOOLEAN MultipleTxSupported;
162 BOOLEAN MediaPresentSupported;
163 BOOLEAN MediaPresent;
164 } EFI_SIMPLE_NETWORK_MODE;
165
166 ///////////////////////////////////////////////////////////////////////////////
167 //
168
169 typedef
170 EFI_STATUS
171 (EFIAPI *EFI_SIMPLE_NETWORK_START) (
172 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This
173 );
174
175 ///////////////////////////////////////////////////////////////////////////////
176 //
177
178 typedef
179 EFI_STATUS
180 (EFIAPI *EFI_SIMPLE_NETWORK_STOP) (
181 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This
182 );
183
184 ///////////////////////////////////////////////////////////////////////////////
185 //
186
187 typedef
188 EFI_STATUS
189 (EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) (
190 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
191 IN UINTN ExtraRxBufferSize OPTIONAL,
192 IN UINTN ExtraTxBufferSize OPTIONAL
193 );
194
195 ///////////////////////////////////////////////////////////////////////////////
196 //
197
198 typedef
199 EFI_STATUS
200 (EFIAPI *EFI_SIMPLE_NETWORK_RESET) (
201 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
202 IN BOOLEAN ExtendedVerification
203 );
204
205 ///////////////////////////////////////////////////////////////////////////////
206 //
207
208 typedef
209 EFI_STATUS
210 (EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) (
211 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This
212 );
213
214 ///////////////////////////////////////////////////////////////////////////////
215 //
216
217 typedef
218 EFI_STATUS
219 (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) (
220 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
221 IN UINT32 Enable,
222 IN UINT32 Disable,
223 IN BOOLEAN ResetMCastFilter,
224 IN UINTN MCastFilterCnt OPTIONAL,
225 IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
226 );
227
228 ///////////////////////////////////////////////////////////////////////////////
229 //
230
231 typedef
232 EFI_STATUS
233 (EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) (
234 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
235 IN BOOLEAN Reset,
236 IN EFI_MAC_ADDRESS *New OPTIONAL
237 );
238
239 ///////////////////////////////////////////////////////////////////////////////
240 //
241
242 typedef
243 EFI_STATUS
244 (EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) (
245 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
246 IN BOOLEAN Reset,
247 IN OUT UINTN *StatisticsSize OPTIONAL,
248 OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
249 );
250
251 ///////////////////////////////////////////////////////////////////////////////
252 //
253
254 typedef
255 EFI_STATUS
256 (EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) (
257 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
258 IN BOOLEAN IPv6,
259 IN EFI_IP_ADDRESS *IP,
260 OUT EFI_MAC_ADDRESS *MAC
261 );
262
263 ///////////////////////////////////////////////////////////////////////////////
264 //
265
266 typedef
267 EFI_STATUS
268 (EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) (
269 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
270 IN BOOLEAN ReadWrite,
271 IN UINTN Offset,
272 IN UINTN BufferSize,
273 IN OUT VOID *Buffer
274 );
275
276 ///////////////////////////////////////////////////////////////////////////////
277 //
278
279 typedef
280 EFI_STATUS
281 (EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) (
282 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
283 OUT UINT32 *InterruptStatus OPTIONAL,
284 OUT VOID **TxBuf OPTIONAL
285 );
286
287 ///////////////////////////////////////////////////////////////////////////////
288 //
289
290 typedef
291 EFI_STATUS
292 (EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) (
293 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
294 IN UINTN HeaderSize,
295 IN UINTN BufferSize,
296 IN VOID *Buffer,
297 IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
298 IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
299 IN UINT16 *Protocol OPTIONAL
300 );
301
302 ///////////////////////////////////////////////////////////////////////////////
303 //
304
305 typedef
306 EFI_STATUS
307 (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) (
308 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This,
309 OUT UINTN *HeaderSize OPTIONAL,
310 IN OUT UINTN *BufferSize,
311 OUT VOID *Buffer,
312 OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
313 OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
314 OUT UINT16 *Protocol OPTIONAL
315 );
316
317 ///////////////////////////////////////////////////////////////////////////////
318 //
319
320 #define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000
321 #define EFI_SIMPLE_NETWORK_INTERFACE_REVISION EFI_SIMPLE_NETWORK_PROTOCOL_REVISION
322
323 typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL {
324 UINT64 Revision;
325 EFI_SIMPLE_NETWORK_START Start;
326 EFI_SIMPLE_NETWORK_STOP Stop;
327 EFI_SIMPLE_NETWORK_INITIALIZE Initialize;
328 EFI_SIMPLE_NETWORK_RESET Reset;
329 EFI_SIMPLE_NETWORK_SHUTDOWN Shutdown;
330 EFI_SIMPLE_NETWORK_RECEIVE_FILTERS ReceiveFilters;
331 EFI_SIMPLE_NETWORK_STATION_ADDRESS StationAddress;
332 EFI_SIMPLE_NETWORK_STATISTICS Statistics;
333 EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC MCastIpToMac;
334 EFI_SIMPLE_NETWORK_NVDATA NvData;
335 EFI_SIMPLE_NETWORK_GET_STATUS GetStatus;
336 EFI_SIMPLE_NETWORK_TRANSMIT Transmit;
337 EFI_SIMPLE_NETWORK_RECEIVE Receive;
338 EFI_EVENT WaitForPacket;
339 EFI_SIMPLE_NETWORK_MODE *Mode;
340 } EFI_SIMPLE_NETWORK_PROTOCOL;
341
342 // Note: Because it conflicted with the EDK2 struct name, the
343 // 'EFI_SIMPLE_NETWORK_PROTOCOL' GUID definition, from older
344 // versions of gnu-efi, is now obsoleted.
345 // Use 'EFI_SIMPLE_NETWORK_PROTOCOL_GUID' instead.
346
347 typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL _EFI_SIMPLE_NETWORK;
348 typedef EFI_SIMPLE_NETWORK_PROTOCOL EFI_SIMPLE_NETWORK;
349
350 #endif /* _EFINET_H */
351