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