efinet.h revision 77943
1/* $FreeBSD: head/sys/boot/efi/include/efinet.h 77943 2001-06-09 16:49:51Z dfr $ */
2#ifndef _EFINET_H
3#define _EFINET_H
4
5
6/*++
7Copyright (c) 1999  Intel Corporation
8
9Module Name:
10    efinet.h
11
12Abstract:
13    EFI Simple Network protocol
14
15Revision History
16--*/
17
18
19///////////////////////////////////////////////////////////////////////////////
20//
21//      Simple Network Protocol
22//
23
24#define EFI_SIMPLE_NETWORK_PROTOCOL \
25    { 0xA19832B9, 0xAC25, 0x11D3, 0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }
26
27
28INTERFACE_DECL(_EFI_SIMPLE_NETWORK);
29
30///////////////////////////////////////////////////////////////////////////////
31//
32
33typedef 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
117typedef 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
144typedef 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
169typedef
170EFI_STATUS
171(EFIAPI *EFI_SIMPLE_NETWORK_START) (
172    IN struct _EFI_SIMPLE_NETWORK  *This
173);
174
175///////////////////////////////////////////////////////////////////////////////
176//
177
178typedef
179EFI_STATUS
180(EFIAPI *EFI_SIMPLE_NETWORK_STOP) (
181    IN struct _EFI_SIMPLE_NETWORK  *This
182);
183
184///////////////////////////////////////////////////////////////////////////////
185//
186
187typedef
188EFI_STATUS
189(EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) (
190    IN struct _EFI_SIMPLE_NETWORK  *This,
191    IN UINTN                       ExtraRxBufferSize  OPTIONAL,
192    IN UINTN                       ExtraTxBufferSize  OPTIONAL
193);
194
195///////////////////////////////////////////////////////////////////////////////
196//
197
198typedef
199EFI_STATUS
200(EFIAPI *EFI_SIMPLE_NETWORK_RESET) (
201    IN struct _EFI_SIMPLE_NETWORK   *This,
202    IN BOOLEAN                      ExtendedVerification
203);
204
205///////////////////////////////////////////////////////////////////////////////
206//
207
208typedef
209EFI_STATUS
210(EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) (
211    IN struct _EFI_SIMPLE_NETWORK  *This
212);
213
214///////////////////////////////////////////////////////////////////////////////
215//
216
217typedef
218EFI_STATUS
219(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) (
220    IN struct _EFI_SIMPLE_NETWORK   *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
231typedef
232EFI_STATUS
233(EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) (
234    IN struct _EFI_SIMPLE_NETWORK   *This,
235    IN BOOLEAN                      Reset,
236    IN EFI_MAC_ADDRESS              *New      OPTIONAL
237);
238
239///////////////////////////////////////////////////////////////////////////////
240//
241
242typedef
243EFI_STATUS
244(EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) (
245    IN struct _EFI_SIMPLE_NETWORK   *This,
246    IN BOOLEAN                      Reset,
247    IN OUT UINTN                    *StatisticsSize   OPTIONAL,
248    OUT EFI_NETWORK_STATISTICS      *StatisticsTable  OPTIONAL
249);
250
251///////////////////////////////////////////////////////////////////////////////
252//
253
254typedef
255EFI_STATUS
256(EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) (
257    IN struct _EFI_SIMPLE_NETWORK   *This,
258    IN BOOLEAN                      IPv6,
259    IN EFI_IP_ADDRESS               *IP,
260    OUT EFI_MAC_ADDRESS             *MAC
261);
262
263///////////////////////////////////////////////////////////////////////////////
264//
265
266typedef
267EFI_STATUS
268(EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) (
269    IN struct _EFI_SIMPLE_NETWORK  *This,
270    IN BOOLEAN                     ReadWrite,
271    IN UINTN                       Offset,
272    IN UINTN                       BufferSize,
273    IN OUT VOID                    *Buffer
274);
275
276///////////////////////////////////////////////////////////////////////////////
277//
278
279typedef
280EFI_STATUS
281(EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) (
282    IN struct _EFI_SIMPLE_NETWORK  *This,
283    OUT UINT32                     *InterruptStatus  OPTIONAL,
284    OUT VOID                       **TxBuf           OPTIONAL
285);
286
287///////////////////////////////////////////////////////////////////////////////
288//
289
290typedef
291EFI_STATUS
292(EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) (
293    IN struct _EFI_SIMPLE_NETWORK   *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
305typedef
306EFI_STATUS
307(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) (
308    IN struct _EFI_SIMPLE_NETWORK   *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_INTERFACE_REVISION   0x00010000
321
322typedef struct _EFI_SIMPLE_NETWORK {
323    UINT64                              Revision;
324    EFI_SIMPLE_NETWORK_START            Start;
325    EFI_SIMPLE_NETWORK_STOP             Stop;
326    EFI_SIMPLE_NETWORK_INITIALIZE       Initialize;
327    EFI_SIMPLE_NETWORK_RESET            Reset;
328    EFI_SIMPLE_NETWORK_SHUTDOWN         Shutdown;
329    EFI_SIMPLE_NETWORK_RECEIVE_FILTERS  ReceiveFilters;
330    EFI_SIMPLE_NETWORK_STATION_ADDRESS  StationAddress;
331    EFI_SIMPLE_NETWORK_STATISTICS       Statistics;
332    EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC  MCastIpToMac;
333    EFI_SIMPLE_NETWORK_NVDATA           NvData;
334    EFI_SIMPLE_NETWORK_GET_STATUS       GetStatus;
335    EFI_SIMPLE_NETWORK_TRANSMIT         Transmit;
336    EFI_SIMPLE_NETWORK_RECEIVE          Receive;
337    EFI_EVENT                           WaitForPacket;
338    EFI_SIMPLE_NETWORK_MODE             *Mode;
339} EFI_SIMPLE_NETWORK;
340
341#endif /* _EFINET_H */
342