xref: /netbsd-src/sys/external/bsd/gnu-efi/dist/inc/efinet.h (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
1 /*	$NetBSD: efinet.h,v 1.1.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