efinet.h revision 96893
1/* $FreeBSD: head/sys/boot/efi/include/efinet.h 96893 2002-05-19 03:17:22Z marcel $ */
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#define EFI_SIMPLE_NETWORK_PROTOCOL \
20    { 0xA19832B9, 0xAC25, 0x11D3, 0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }
21
22INTERFACE_DECL(_EFI_SIMPLE_NETWORK);
23
24typedef struct {
25	/*
26	 * Total number of frames received.  Includes frames with errors and
27	 * dropped frames.
28	 */
29    UINT64  RxTotalFrames;
30
31	/* Number of valid frames received and copied into receive buffers. */
32    UINT64  RxGoodFrames;
33
34	/*
35	 * Number of frames below the minimum length for the media.
36	 * This would be <64 for ethernet.
37	 */
38    UINT64  RxUndersizeFrames;
39
40	/*
41	 * Number of frames longer than the maxminum length for the
42	 * media.  This would be >1500 for ethernet.
43	 */
44    UINT64  RxOversizeFrames;
45
46	/* Valid frames that were dropped because receive buffers were full. */
47    UINT64  RxDroppedFrames;
48
49	/* Number of valid unicast frames received and not dropped. */
50    UINT64  RxUnicastFrames;
51
52	/* Number of valid broadcast frames received and not dropped. */
53    UINT64  RxBroadcastFrames;
54
55	/* Number of valid mutlicast frames received and not dropped. */
56    UINT64  RxMulticastFrames;
57
58	/* Number of frames w/ CRC or alignment errors. */
59    UINT64  RxCrcErrorFrames;
60
61	/*
62	 * Total number of bytes received.  Includes frames with errors
63	 * and dropped frames.
64	 */
65    UINT64  RxTotalBytes;
66
67	/* Transmit statistics. */
68    UINT64  TxTotalFrames;
69    UINT64  TxGoodFrames;
70    UINT64  TxUndersizeFrames;
71    UINT64  TxOversizeFrames;
72    UINT64  TxDroppedFrames;
73    UINT64  TxUnicastFrames;
74    UINT64  TxBroadcastFrames;
75    UINT64  TxMulticastFrames;
76    UINT64  TxCrcErrorFrames;
77    UINT64  TxTotalBytes;
78
79	/* Number of collisions detection on this subnet. */
80    UINT64  Collisions;
81
82	/* Number of frames destined for unsupported protocol. */
83    UINT64  UnsupportedProtocol;
84
85} EFI_NETWORK_STATISTICS;
86
87typedef enum {
88    EfiSimpleNetworkStopped,
89    EfiSimpleNetworkStarted,
90    EfiSimpleNetworkInitialized,
91    EfiSimpleNetworkMaxState
92} EFI_SIMPLE_NETWORK_STATE;
93
94#define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST               0x01
95#define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST             0x02
96#define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST             0x04
97#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS           0x08
98#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
99
100#define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT        0x01
101#define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT       0x02
102#define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT        0x04
103#define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT       0x08
104
105#define MAX_MCAST_FILTER_CNT    16
106typedef struct {
107    UINT32                      State;
108    UINT32                      HwAddressSize;
109    UINT32                      MediaHeaderSize;
110    UINT32                      MaxPacketSize;
111    UINT32                      NvRamSize;
112    UINT32                      NvRamAccessSize;
113    UINT32                      ReceiveFilterMask;
114    UINT32                      ReceiveFilterSetting;
115    UINT32                      MaxMCastFilterCount;
116    UINT32                      MCastFilterCount;
117    EFI_MAC_ADDRESS             MCastFilter[MAX_MCAST_FILTER_CNT];
118    EFI_MAC_ADDRESS             CurrentAddress;
119    EFI_MAC_ADDRESS             BroadcastAddress;
120    EFI_MAC_ADDRESS             PermanentAddress;
121    UINT8                       IfType;
122    BOOLEAN                     MacAddressChangeable;
123    BOOLEAN                     MultipleTxSupported;
124    BOOLEAN                     MediaPresentSupported;
125    BOOLEAN                     MediaPresent;
126} EFI_SIMPLE_NETWORK_MODE;
127
128typedef
129EFI_STATUS
130(EFIAPI *EFI_SIMPLE_NETWORK_START) (
131    IN struct _EFI_SIMPLE_NETWORK  *This
132);
133
134typedef
135EFI_STATUS
136(EFIAPI *EFI_SIMPLE_NETWORK_STOP) (
137    IN struct _EFI_SIMPLE_NETWORK  *This
138);
139
140typedef
141EFI_STATUS
142(EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) (
143    IN struct _EFI_SIMPLE_NETWORK  *This,
144    IN UINTN                       ExtraRxBufferSize  OPTIONAL,
145    IN UINTN                       ExtraTxBufferSize  OPTIONAL
146);
147
148typedef
149EFI_STATUS
150(EFIAPI *EFI_SIMPLE_NETWORK_RESET) (
151    IN struct _EFI_SIMPLE_NETWORK   *This,
152    IN BOOLEAN                      ExtendedVerification
153);
154
155typedef
156EFI_STATUS
157(EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) (
158    IN struct _EFI_SIMPLE_NETWORK  *This
159);
160
161typedef
162EFI_STATUS
163(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) (
164    IN struct _EFI_SIMPLE_NETWORK   *This,
165    IN UINT32                       Enable,
166    IN UINT32                       Disable,
167    IN BOOLEAN                      ResetMCastFilter,
168    IN UINTN                        MCastFilterCnt     OPTIONAL,
169    IN EFI_MAC_ADDRESS              *MCastFilter       OPTIONAL
170);
171
172typedef
173EFI_STATUS
174(EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) (
175    IN struct _EFI_SIMPLE_NETWORK   *This,
176    IN BOOLEAN                      Reset,
177    IN EFI_MAC_ADDRESS              *New      OPTIONAL
178);
179
180typedef
181EFI_STATUS
182(EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) (
183    IN struct _EFI_SIMPLE_NETWORK   *This,
184    IN BOOLEAN                      Reset,
185    IN OUT UINTN                    *StatisticsSize   OPTIONAL,
186    OUT EFI_NETWORK_STATISTICS      *StatisticsTable  OPTIONAL
187);
188
189typedef
190EFI_STATUS
191(EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) (
192    IN struct _EFI_SIMPLE_NETWORK   *This,
193    IN BOOLEAN                      IPv6,
194    IN EFI_IP_ADDRESS               *IP,
195    OUT EFI_MAC_ADDRESS             *MAC
196);
197
198typedef
199EFI_STATUS
200(EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) (
201    IN struct _EFI_SIMPLE_NETWORK  *This,
202    IN BOOLEAN                     ReadWrite,
203    IN UINTN                       Offset,
204    IN UINTN                       BufferSize,
205    IN OUT VOID                    *Buffer
206);
207
208typedef
209EFI_STATUS
210(EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) (
211    IN struct _EFI_SIMPLE_NETWORK  *This,
212    OUT UINT32                     *InterruptStatus  OPTIONAL,
213    OUT VOID                       **TxBuf           OPTIONAL
214);
215
216typedef
217EFI_STATUS
218(EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) (
219    IN struct _EFI_SIMPLE_NETWORK   *This,
220    IN UINTN                        HeaderSize,
221    IN UINTN                        BufferSize,
222    IN VOID                         *Buffer,
223    IN EFI_MAC_ADDRESS              *SrcAddr     OPTIONAL,
224    IN EFI_MAC_ADDRESS              *DestAddr    OPTIONAL,
225    IN UINT16                       *Protocol    OPTIONAL
226);
227
228typedef
229EFI_STATUS
230(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) (
231    IN struct _EFI_SIMPLE_NETWORK   *This,
232    OUT UINTN                       *HeaderSize  OPTIONAL,
233    IN OUT UINTN                    *BufferSize,
234    OUT VOID                        *Buffer,
235    OUT EFI_MAC_ADDRESS             *SrcAddr     OPTIONAL,
236    OUT EFI_MAC_ADDRESS             *DestAddr    OPTIONAL,
237    OUT UINT16                      *Protocol    OPTIONAL
238);
239
240#define EFI_SIMPLE_NETWORK_INTERFACE_REVISION   0x00010000
241
242typedef struct _EFI_SIMPLE_NETWORK {
243    UINT64                              Revision;
244    EFI_SIMPLE_NETWORK_START            Start;
245    EFI_SIMPLE_NETWORK_STOP             Stop;
246    EFI_SIMPLE_NETWORK_INITIALIZE       Initialize;
247    EFI_SIMPLE_NETWORK_RESET            Reset;
248    EFI_SIMPLE_NETWORK_SHUTDOWN         Shutdown;
249    EFI_SIMPLE_NETWORK_RECEIVE_FILTERS  ReceiveFilters;
250    EFI_SIMPLE_NETWORK_STATION_ADDRESS  StationAddress;
251    EFI_SIMPLE_NETWORK_STATISTICS       Statistics;
252    EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC  MCastIpToMac;
253    EFI_SIMPLE_NETWORK_NVDATA           NvData;
254    EFI_SIMPLE_NETWORK_GET_STATUS       GetStatus;
255    EFI_SIMPLE_NETWORK_TRANSMIT         Transmit;
256    EFI_SIMPLE_NETWORK_RECEIVE          Receive;
257    EFI_EVENT                           WaitForPacket;
258    EFI_SIMPLE_NETWORK_MODE             *Mode;
259} EFI_SIMPLE_NETWORK;
260
261#endif /* _EFINET_H */
262