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