1 /**
2 	Based on Protocol/SimpleNetwork.h, original notice:
3 
4 	The EFI_SIMPLE_NETWORK_PROTOCOL provides services to initialize a network interface,
5 	transmit packets, receive packets, and close a network interface.
6 	
7 	Basic network device abstraction.
8 	
9 	Rx    - Received
10 	Tx    - Transmit
11 	MCast - MultiCast
12 	...
13 	
14 	Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
15 	This program and the accompanying materials are licensed and made available under
16 	the terms and conditions of the BSD License that accompanies this distribution.
17 	The full text of the license may be found at
18 	http://opensource.org/licenses/bsd-license.php.
19 	
20 	THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
21 	WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
22 	
23 	@par Revision Reference:
24 	This Protocol is introduced in EFI Specification 1.10.
25 	
26 **/
27 module uefi.protocols.simplenetwork;
28 import uefi.base;
29 import uefi.base_type;
30 
31 public:
32 extern (C):
33 enum EFI_GUID EFI_SIMPLE_NETWORK_PROTOCOL_GUID = EFI_GUID(0xA19832B9, 0xAC25,
34         0x11D3, [0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D]);
35 alias EFI_SIMPLE_NETWORK_PROTOCOL = _EFI_SIMPLE_NETWORK_PROTOCOL;
36 /// Protocol defined in EFI1.1.
37 alias EFI_SIMPLE_NETWORK = EFI_SIMPLE_NETWORK_PROTOCOL;
38 /// Simple Network Protocol data structures.
39 struct EFI_NETWORK_STATISTICS
40 {
41     ///
42     /// Total number of frames received.  Includes frames with errors and
43     /// dropped frames.
44     ///
45     UINT64 RxTotalFrames;
46     ///
47     /// Number of valid frames received and copied into receive buffers.
48     ///
49     UINT64 RxGoodFrames;
50     ///
51     /// Number of frames below the minimum length for the media.
52     /// This would be <64 for ethernet.
53     ///
54     UINT64 RxUndersizeFrames;
55     ///
56     /// Number of frames longer than the maxminum length for the
57     /// media.  This would be >1500 for ethernet.
58     ///
59     UINT64 RxOversizeFrames;
60     ///
61     /// Valid frames that were dropped because receive buffers were full.
62     ///
63     UINT64 RxDroppedFrames;
64     ///
65     /// Number of valid unicast frames received and not dropped.
66     ///
67     UINT64 RxUnicastFrames;
68     ///
69     /// Number of valid broadcast frames received and not dropped.
70     ///
71     UINT64 RxBroadcastFrames;
72     ///
73     /// Number of valid mutlicast frames received and not dropped.
74     ///
75     UINT64 RxMulticastFrames;
76     ///
77     /// Number of frames w/ CRC or alignment errors.
78     ///
79     UINT64 RxCrcErrorFrames;
80     ///
81     /// Total number of bytes received.  Includes frames with errors
82     /// and dropped frames.
83     //
84     UINT64 RxTotalBytes;
85     ///
86     /// Transmit statistics.
87     ///
88     UINT64 TxTotalFrames;
89     UINT64 TxGoodFrames;
90     UINT64 TxUndersizeFrames;
91     UINT64 TxOversizeFrames;
92     UINT64 TxDroppedFrames;
93     UINT64 TxUnicastFrames;
94     UINT64 TxBroadcastFrames;
95     UINT64 TxMulticastFrames;
96     UINT64 TxCrcErrorFrames;
97     UINT64 TxTotalBytes;
98     ///
99     /// Number of collisions detection on this subnet.
100     ///
101     UINT64 Collisions;
102     ///
103     /// Number of frames destined for unsupported protocol.
104     ///
105     UINT64 UnsupportedProtocol;
106 }
107 /// The state of the network interface.
108 /// When an EFI_SIMPLE_NETWORK_PROTOCOL driver initializes a
109 /// network interface, the network interface is left in the EfiSimpleNetworkStopped state.
110 alias EFI_SIMPLE_NETWORK_STATE = UINT32;
111 enum : EFI_SIMPLE_NETWORK_STATE
112 {
113     EfiSimpleNetworkStopped,
114     EfiSimpleNetworkStarted,
115     EfiSimpleNetworkInitialized,
116     EfiSimpleNetworkMaxState
117 }
118 enum EFI_SIMPLE_NETWORK_RECEIVE_UNICAST = 0x01;
119 enum EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST = 0x02;
120 enum EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST = 0x04;
121 enum EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS = 0x08;
122 enum EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST = 0x10;
123 enum EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT = 0x01;
124 enum EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT = 0x02;
125 enum EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT = 0x04;
126 enum EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT = 0x08;
127 enum MAX_MCAST_FILTER_CNT = 16;
128 struct EFI_SIMPLE_NETWORK_MODE
129 {
130     ///
131     /// Reports the current state of the network interface.
132     ///
133     UINT32 State;
134     ///
135     /// The size, in bytes, of the network interface's HW address.
136     ///
137     UINT32 HwAddressSize;
138     ///
139     /// The size, in bytes, of the network interface's media header.
140     ///
141     UINT32 MediaHeaderSize;
142     ///
143     /// The maximum size, in bytes, of the packets supported by the network interface.
144     ///
145     UINT32 MaxPacketSize;
146     ///
147     /// The size, in bytes, of the NVRAM device attached to the network interface.
148     ///
149     UINT32 NvRamSize;
150     ///
151     /// The size that must be used for all NVRAM reads and writes. The
152     /// start address for NVRAM read and write operations and the total
153     /// length of those operations, must be a multiple of this value. The
154     /// legal values for this field are 0, 1, 2, 4, and 8.
155     ///
156     UINT32 NvRamAccessSize;
157     ///
158     /// The multicast receive filter settings supported by the network interface.
159     ///
160     UINT32 ReceiveFilterMask;
161     ///
162     /// The current multicast receive filter settings.
163     ///
164     UINT32 ReceiveFilterSetting;
165     ///
166     /// The maximum number of multicast address receive filters supported by the driver.
167     ///
168     UINT32 MaxMCastFilterCount;
169     ///
170     /// The current number of multicast address receive filters.
171     ///
172     UINT32 MCastFilterCount;
173     ///
174     /// Array containing the addresses of the current multicast address receive filters.
175     ///
176     EFI_MAC_ADDRESS[MAX_MCAST_FILTER_CNT] MCastFilter;
177     ///
178     /// The current HW MAC address for the network interface.
179     ///
180     EFI_MAC_ADDRESS CurrentAddress;
181     ///
182     /// The current HW MAC address for broadcast packets.
183     ///
184     EFI_MAC_ADDRESS BroadcastAddress;
185     ///
186     /// The permanent HW MAC address for the network interface.
187     ///
188     EFI_MAC_ADDRESS PermanentAddress;
189     ///
190     /// The interface type of the network interface.
191     ///
192     UINT8 IfType;
193     ///
194     /// TRUE if the HW MAC address can be changed.
195     ///
196     BOOLEAN MacAddressChangeable;
197     ///
198     /// TRUE if the network interface can transmit more than one packet at a time.
199     ///
200     BOOLEAN MultipleTxSupported;
201     ///
202     /// TRUE if the presence of media can be determined; otherwise FALSE.
203     ///
204     BOOLEAN MediaPresentSupported;
205     ///
206     /// TRUE if media are connected to the network interface; otherwise FALSE.
207     ///
208     BOOLEAN MediaPresent;
209 }
210 /**
211 	Changes the state of a network interface from "stopped" to "started".
212 	
213 	@param  This Protocol instance pointer.
214 	
215 	@retval EFI_SUCCESS           The network interface was started.
216 	@retval EFI_ALREADY_STARTED   The network interface is already in the started state.
217 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
218 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
219 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
220 	
221 **/
222 alias EFI_SIMPLE_NETWORK_START = EFI_STATUS function(EFI_SIMPLE_NETWORK_PROTOCOL* This) @nogc nothrow;
223 /**
224 	Changes the state of a network interface from "started" to "stopped".
225 	
226 	@param  This Protocol instance pointer.
227 	
228 	@retval EFI_SUCCESS           The network interface was stopped.
229 	@retval EFI_ALREADY_STARTED   The network interface is already in the stopped state.
230 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
231 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
232 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
233 	
234 **/
235 alias EFI_SIMPLE_NETWORK_STOP = EFI_STATUS function(EFI_SIMPLE_NETWORK_PROTOCOL* This) @nogc nothrow;
236 /**
237 	Resets a network adapter and allocates the transmit and receive buffers
238 	required by the network interface; optionally, also requests allocation
239 	of additional transmit and receive buffers.
240 	
241 	@param  This              The protocol instance pointer.
242 	@param  ExtraRxBufferSize The size, in bytes, of the extra receive buffer space
243 	that the driver should allocate for the network interface.
244 	Some network interfaces will not be able to use the extra
245 	buffer, and the caller will not know if it is actually
246 	being used.
247 	@param  ExtraTxBufferSize The size, in bytes, of the extra transmit buffer space
248 	that the driver should allocate for the network interface.
249 	Some network interfaces will not be able to use the extra
250 	buffer, and the caller will not know if it is actually
251 	being used.
252 	
253 	@retval EFI_SUCCESS           The network interface was initialized.
254 	@retval EFI_NOT_STARTED       The network interface has not been started.
255 	@retval EFI_OUT_OF_RESOURCES  There was not enough memory for the transmit and
256 	receive buffers.
257 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
258 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
259 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
260 	
261 **/
262 alias EFI_SIMPLE_NETWORK_INITIALIZE = EFI_STATUS function(
263     EFI_SIMPLE_NETWORK_PROTOCOL* This, UINTN ExtraRxBufferSize, UINTN ExtraTxBufferSize) @nogc nothrow;
264 /**
265 	Resets a network adapter and re-initializes it with the parameters that were
266 	provided in the previous call to Initialize().
267 	
268 	@param  This                 The protocol instance pointer.
269 	@param  ExtendedVerification Indicates that the driver may perform a more
270 	exhaustive verification operation of the device
271 	during reset.
272 	
273 	@retval EFI_SUCCESS           The network interface was reset.
274 	@retval EFI_NOT_STARTED       The network interface has not been started.
275 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
276 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
277 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
278 	
279 **/
280 alias EFI_SIMPLE_NETWORK_RESET = EFI_STATUS function(
281     EFI_SIMPLE_NETWORK_PROTOCOL* This, BOOLEAN ExtendedVerification) @nogc nothrow;
282 /**
283 	Resets a network adapter and leaves it in a state that is safe for
284 	another driver to initialize.
285 	
286 	@param  This Protocol instance pointer.
287 	
288 	@retval EFI_SUCCESS           The network interface was shutdown.
289 	@retval EFI_NOT_STARTED       The network interface has not been started.
290 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
291 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
292 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
293 	
294 **/
295 alias EFI_SIMPLE_NETWORK_SHUTDOWN = EFI_STATUS function(EFI_SIMPLE_NETWORK_PROTOCOL* This) @nogc nothrow;
296 /**
297 	Manages the multicast receive filters of a network interface.
298 	
299 	@param  This             The protocol instance pointer.
300 	@param  Enable           A bit mask of receive filters to enable on the network interface.
301 	@param  Disable          A bit mask of receive filters to disable on the network interface.
302 	@param  ResetMCastFilter Set to TRUE to reset the contents of the multicast receive
303 	filters on the network interface to their default values.
304 	@param  McastFilterCnt   Number of multicast HW MAC addresses in the new
305 	MCastFilter list. This value must be less than or equal to
306 	the MCastFilterCnt field of EFI_SIMPLE_NETWORK_MODE. This
307 	field is optional if ResetMCastFilter is TRUE.
308 	@param  MCastFilter      A pointer to a list of new multicast receive filter HW MAC
309 	addresses. This list will replace any existing multicast
310 	HW MAC address list. This field is optional if
311 	ResetMCastFilter is TRUE.
312 	
313 	@retval EFI_SUCCESS           The multicast receive filter list was updated.
314 	@retval EFI_NOT_STARTED       The network interface has not been started.
315 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
316 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
317 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
318 	
319 **/
320 alias EFI_SIMPLE_NETWORK_RECEIVE_FILTERS = EFI_STATUS function(
321     EFI_SIMPLE_NETWORK_PROTOCOL* This, UINT32 Enable, UINT32 Disable,
322     BOOLEAN ResetMCastFilter, UINTN MCastFilterCnt, EFI_MAC_ADDRESS* MCastFilter) @nogc nothrow;
323 /**
324 	Modifies or resets the current station address, if supported.
325 	
326 	@param  This  The protocol instance pointer.
327 	@param  Reset Flag used to reset the station address to the network interfaces
328 	permanent address.
329 	@param  New   The new station address to be used for the network interface.
330 	
331 	@retval EFI_SUCCESS           The network interfaces station address was updated.
332 	@retval EFI_NOT_STARTED       The network interface has not been started.
333 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
334 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
335 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
336 	
337 **/
338 alias EFI_SIMPLE_NETWORK_STATION_ADDRESS = EFI_STATUS function(
339     EFI_SIMPLE_NETWORK_PROTOCOL* This, BOOLEAN Reset, EFI_MAC_ADDRESS* New) @nogc nothrow;
340 /**
341 	Resets or collects the statistics on a network interface.
342 	
343 	@param  This            Protocol instance pointer.
344 	@param  Reset           Set to TRUE to reset the statistics for the network interface.
345 	@param  StatisticsSize  On input the size, in bytes, of StatisticsTable. On
346 	output the size, in bytes, of the resulting table of
347 	statistics.
348 	@param  StatisticsTable A pointer to the EFI_NETWORK_STATISTICS structure that
349 	contains the statistics.
350 	
351 	@retval EFI_SUCCESS           The statistics were collected from the network interface.
352 	@retval EFI_NOT_STARTED       The network interface has not been started.
353 	@retval EFI_BUFFER_TOO_SMALL  The Statistics buffer was too small. The current buffer
354 	size needed to hold the statistics is returned in
355 	StatisticsSize.
356 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
357 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
358 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
359 	
360 **/
361 alias EFI_SIMPLE_NETWORK_STATISTICS = EFI_STATUS function(
362     EFI_SIMPLE_NETWORK_PROTOCOL* This, BOOLEAN Reset, UINTN* StatisticsSize,
363     EFI_NETWORK_STATISTICS* StatisticsTable) @nogc nothrow;
364 /**
365 	Converts a multicast IP address to a multicast HW MAC address.
366 	
367 	@param  This The protocol instance pointer.
368 	@param  IPv6 Set to TRUE if the multicast IP address is IPv6 [RFC 2460]. Set
369 	to FALSE if the multicast IP address is IPv4 [RFC 791].
370 	@param  IP   The multicast IP address that is to be converted to a multicast
371 	HW MAC address.
372 	@param  MAC  The multicast HW MAC address that is to be generated from IP.
373 	
374 	@retval EFI_SUCCESS           The multicast IP address was mapped to the multicast
375 	HW MAC address.
376 	@retval EFI_NOT_STARTED       The network interface has not been started.
377 	@retval EFI_BUFFER_TOO_SMALL  The Statistics buffer was too small. The current buffer
378 	size needed to hold the statistics is returned in
379 	StatisticsSize.
380 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
381 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
382 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
383 	
384 **/
385 alias EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC = EFI_STATUS function(
386     EFI_SIMPLE_NETWORK_PROTOCOL* This, BOOLEAN IPv6, EFI_IP_ADDRESS* IP, EFI_MAC_ADDRESS* MAC) @nogc nothrow;
387 /**
388 	Performs read and write operations on the NVRAM device attached to a
389 	network interface.
390 	
391 	@param  This       The protocol instance pointer.
392 	@param  ReadWrite  TRUE for read operations, FALSE for write operations.
393 	@param  Offset     Byte offset in the NVRAM device at which to start the read or
394 	write operation. This must be a multiple of NvRamAccessSize and
395 	less than NvRamSize.
396 	@param  BufferSize The number of bytes to read or write from the NVRAM device.
397 	This must also be a multiple of NvramAccessSize.
398 	@param  Buffer     A pointer to the data buffer.
399 	
400 	@retval EFI_SUCCESS           The NVRAM access was performed.
401 	@retval EFI_NOT_STARTED       The network interface has not been started.
402 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
403 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
404 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
405 	
406 **/
407 alias EFI_SIMPLE_NETWORK_NVDATA = EFI_STATUS function(
408     EFI_SIMPLE_NETWORK_PROTOCOL* This, BOOLEAN ReadWrite, UINTN Offset,
409     UINTN BufferSize, void* Buffer) @nogc nothrow;
410 /**
411 	Reads the current interrupt status and recycled transmit buffer status from
412 	a network interface.
413 	
414 	@param  This            The protocol instance pointer.
415 	@param  InterruptStatus A pointer to the bit mask of the currently active interrupts
416 	If this is NULL, the interrupt status will not be read from
417 	the device. If this is not NULL, the interrupt status will
418 	be read from the device. When the  interrupt status is read,
419 	it will also be cleared. Clearing the transmit  interrupt
420 	does not empty the recycled transmit buffer array.
421 	@param  TxBuf           Recycled transmit buffer address. The network interface will
422 	not transmit if its internal recycled transmit buffer array
423 	is full. Reading the transmit buffer does not clear the
424 	transmit interrupt. If this is NULL, then the transmit buffer
425 	status will not be read. If there are no transmit buffers to
426 	recycle and TxBuf is not NULL, * TxBuf will be set to NULL.
427 	
428 	@retval EFI_SUCCESS           The status of the network interface was retrieved.
429 	@retval EFI_NOT_STARTED       The network interface has not been started.
430 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
431 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
432 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
433 	
434 **/
435 alias EFI_SIMPLE_NETWORK_GET_STATUS = EFI_STATUS function(
436     EFI_SIMPLE_NETWORK_PROTOCOL* This, UINT32* InterruptStatus, void** TxBuf) @nogc nothrow;
437 /**
438 	Places a packet in the transmit queue of a network interface.
439 	
440 	@param  This       The protocol instance pointer.
441 	@param  HeaderSize The size, in bytes, of the media header to be filled in by
442 	the Transmit() function. If HeaderSize is non-zero, then it
443 	must be equal to This->Mode->MediaHeaderSize and the DestAddr
444 	and Protocol parameters must not be NULL.
445 	@param  BufferSize The size, in bytes, of the entire packet (media header and
446 	data) to be transmitted through the network interface.
447 	@param  Buffer     A pointer to the packet (media header followed by data) to be
448 	transmitted. This parameter cannot be NULL. If HeaderSize is zero,
449 	then the media header in Buffer must already be filled in by the
450 	caller. If HeaderSize is non-zero, then the media header will be
451 	filled in by the Transmit() function.
452 	@param  SrcAddr    The source HW MAC address. If HeaderSize is zero, then this parameter
453 	is ignored. If HeaderSize is non-zero and SrcAddr is NULL, then
454 	This->Mode->CurrentAddress is used for the source HW MAC address.
455 	@param  DestAddr   The destination HW MAC address. If HeaderSize is zero, then this
456 	parameter is ignored.
457 	@param  Protocol   The type of header to build. If HeaderSize is zero, then this
458 	parameter is ignored. See RFC 1700, section "Ether Types", for
459 	examples.
460 	
461 	@retval EFI_SUCCESS           The packet was placed on the transmit queue.
462 	@retval EFI_NOT_STARTED       The network interface has not been started.
463 	@retval EFI_NOT_READY         The network interface is too busy to accept this transmit request.
464 	@retval EFI_BUFFER_TOO_SMALL  The BufferSize parameter is too small.
465 	@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
466 	@retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
467 	@retval EFI_UNSUPPORTED       This function is not supported by the network interface.
468 	
469 **/
470 alias EFI_SIMPLE_NETWORK_TRANSMIT = EFI_STATUS function(
471     EFI_SIMPLE_NETWORK_PROTOCOL* This, UINTN HeaderSize, UINTN BufferSize,
472     void* Buffer, EFI_MAC_ADDRESS* SrcAddr, EFI_MAC_ADDRESS* DestAddr, UINT16* Protocol) @nogc nothrow;
473 /**
474 	Receives a packet from a network interface.
475 	
476 	@param  This       The protocol instance pointer.
477 	@param  HeaderSize The size, in bytes, of the media header received on the network
478 	interface. If this parameter is NULL, then the media header size
479 	will not be returned.
480 	@param  BufferSize On entry, the size, in bytes, of Buffer. On exit, the size, in
481 	bytes, of the packet that was received on the network interface.
482 	@param  Buffer     A pointer to the data buffer to receive both the media header and
483 	the data.
484 	@param  SrcAddr    The source HW MAC address. If this parameter is NULL, the
485 	HW MAC source address will not be extracted from the media
486 	header.
487 	@param  DestAddr   The destination HW MAC address. If this parameter is NULL,
488 	the HW MAC destination address will not be extracted from the
489 	media header.
490 	@param  Protocol   The media header type. If this parameter is NULL, then the
491 	protocol will not be extracted from the media header. See
492 	RFC 1700 section "Ether Types" for examples.
493 	
494 	@retval  EFI_SUCCESS           The received data was stored in Buffer, and BufferSize has
495 	been updated to the number of bytes received.
496 	@retval  EFI_NOT_STARTED       The network interface has not been started.
497 	@retval  EFI_NOT_READY         The network interface is too busy to accept this transmit
498 	request.
499 	@retval  EFI_BUFFER_TOO_SMALL  The BufferSize parameter is too small.
500 	@retval  EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
501 	@retval  EFI_DEVICE_ERROR      The command could not be sent to the network interface.
502 	@retval  EFI_UNSUPPORTED       This function is not supported by the network interface.
503 	
504 **/
505 alias EFI_SIMPLE_NETWORK_RECEIVE = EFI_STATUS function(
506     EFI_SIMPLE_NETWORK_PROTOCOL* This, UINTN* HeaderSize, UINTN* BufferSize,
507     void* Buffer, EFI_MAC_ADDRESS* SrcAddr, EFI_MAC_ADDRESS* DestAddr, UINT16* Protocol) @nogc nothrow;
508 enum EFI_SIMPLE_NETWORK_PROTOCOL_REVISION = 0x00010000;
509 enum EFI_SIMPLE_NETWORK_INTERFACE_REVISION = EFI_SIMPLE_NETWORK_PROTOCOL_REVISION;
510 /// The EFI_SIMPLE_NETWORK_PROTOCOL protocol is used to initialize access
511 /// to a network adapter. Once the network adapter initializes,
512 /// the EFI_SIMPLE_NETWORK_PROTOCOL protocol provides services that
513 /// allow packets to be transmitted and received.
514 struct _EFI_SIMPLE_NETWORK_PROTOCOL
515 {
516     ///
517     /// Revision of the EFI_SIMPLE_NETWORK_PROTOCOL. All future revisions must
518     /// be backwards compatible. If a future version is not backwards compatible
519     /// it is not the same GUID.
520     ///
521     UINT64 Revision;
522     EFI_SIMPLE_NETWORK_START Start;
523     EFI_SIMPLE_NETWORK_STOP Stop;
524     EFI_SIMPLE_NETWORK_INITIALIZE Initialize;
525     EFI_SIMPLE_NETWORK_RESET Reset;
526     EFI_SIMPLE_NETWORK_SHUTDOWN Shutdown;
527     EFI_SIMPLE_NETWORK_RECEIVE_FILTERS ReceiveFilters;
528     EFI_SIMPLE_NETWORK_STATION_ADDRESS StationAddress;
529     EFI_SIMPLE_NETWORK_STATISTICS Statistics;
530     EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC MCastIpToMac;
531     EFI_SIMPLE_NETWORK_NVDATA NvData;
532     EFI_SIMPLE_NETWORK_GET_STATUS GetStatus;
533     EFI_SIMPLE_NETWORK_TRANSMIT Transmit;
534     EFI_SIMPLE_NETWORK_RECEIVE Receive;
535     ///
536     /// Event used with WaitForEvent() to wait for a packet to be received.
537     ///
538     EFI_EVENT WaitForPacket;
539     ///
540     /// Pointer to the EFI_SIMPLE_NETWORK_MODE data for the device.
541     ///
542     EFI_SIMPLE_NETWORK_MODE* Mode;
543 
544 }