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