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