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