1199767fToomas Soome/* $FreeBSD$ */
2199767fToomas Soome#ifndef _EFINET_H
3199767fToomas Soome#define _EFINET_H
4199767fToomas Soome
5199767fToomas Soome
6199767fToomas Soome/*++
7199767fToomas SoomeCopyright (c)  1999 - 2002 Intel Corporation. All rights reserved
8199767fToomas SoomeThis software and associated documentation (if any) is furnished
9199767fToomas Soomeunder a license and may only be used or copied in accordance
10199767fToomas Soomewith the terms of the license. Except as permitted by such
11199767fToomas Soomelicense, no part of this software or documentation may be
12199767fToomas Soomereproduced, stored in a retrieval system, or transmitted in any
13199767fToomas Soomeform or by any means without the express written consent of
14199767fToomas SoomeIntel Corporation.
15199767fToomas Soome
16199767fToomas SoomeModule Name:
17199767fToomas Soome    efinet.h
18199767fToomas Soome
19199767fToomas SoomeAbstract:
20199767fToomas Soome    EFI Simple Network protocol
21199767fToomas Soome
22199767fToomas SoomeRevision History
23199767fToomas Soome--*/
24199767fToomas Soome
25199767fToomas Soome
26199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
27199767fToomas Soome//
28199767fToomas Soome//      Simple Network Protocol
29199767fToomas Soome//
30199767fToomas Soome
31199767fToomas Soome#define EFI_SIMPLE_NETWORK_PROTOCOL \
32199767fToomas Soome    { 0xA19832B9, 0xAC25, 0x11D3, {0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
33199767fToomas Soome
34199767fToomas Soome
35199767fToomas SoomeINTERFACE_DECL(_EFI_SIMPLE_NETWORK);
36199767fToomas Soome
37199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
38199767fToomas Soome//
39199767fToomas Soome
40199767fToomas Soometypedef struct {
41199767fToomas Soome    //
42199767fToomas Soome    // Total number of frames received.  Includes frames with errors and
43199767fToomas Soome    // dropped frames.
44199767fToomas Soome    //
45199767fToomas Soome    UINT64  RxTotalFrames;
46199767fToomas Soome
47199767fToomas Soome    //
48199767fToomas Soome    // Number of valid frames received and copied into receive buffers.
49199767fToomas Soome    //
50199767fToomas Soome    UINT64  RxGoodFrames;
51199767fToomas Soome
52199767fToomas Soome    //
53199767fToomas Soome    // Number of frames below the minimum length for the media.
54199767fToomas Soome    // This would be <64 for ethernet.
55199767fToomas Soome    //
56199767fToomas Soome    UINT64  RxUndersizeFrames;
57199767fToomas Soome
58199767fToomas Soome    //
59199767fToomas Soome    // Number of frames longer than the maxminum length for the
60199767fToomas Soome    // media.  This would be >1500 for ethernet.
61199767fToomas Soome    //
62199767fToomas Soome    UINT64  RxOversizeFrames;
63199767fToomas Soome
64199767fToomas Soome    //
65199767fToomas Soome    // Valid frames that were dropped because receive buffers were full.
66199767fToomas Soome    //
67199767fToomas Soome    UINT64  RxDroppedFrames;
68199767fToomas Soome
69199767fToomas Soome    //
70199767fToomas Soome    // Number of valid unicast frames received and not dropped.
71199767fToomas Soome    //
72199767fToomas Soome    UINT64  RxUnicastFrames;
73199767fToomas Soome
74199767fToomas Soome    //
75199767fToomas Soome    // Number of valid broadcast frames received and not dropped.
76199767fToomas Soome    //
77199767fToomas Soome    UINT64  RxBroadcastFrames;
78199767fToomas Soome
79199767fToomas Soome    //
80199767fToomas Soome    // Number of valid mutlicast frames received and not dropped.
81199767fToomas Soome    //
82199767fToomas Soome    UINT64  RxMulticastFrames;
83199767fToomas Soome
84199767fToomas Soome    //
85199767fToomas Soome    // Number of frames w/ CRC or alignment errors.
86199767fToomas Soome    //
87199767fToomas Soome    UINT64  RxCrcErrorFrames;
88199767fToomas Soome
89199767fToomas Soome    //
90199767fToomas Soome    // Total number of bytes received.  Includes frames with errors
91199767fToomas Soome    // and dropped frames.
92199767fToomas Soome    //
93199767fToomas Soome    UINT64  RxTotalBytes;
94199767fToomas Soome
95199767fToomas Soome    //
96199767fToomas Soome    // Transmit statistics.
97199767fToomas Soome    //
98199767fToomas Soome    UINT64  TxTotalFrames;
99199767fToomas Soome    UINT64  TxGoodFrames;
100199767fToomas Soome    UINT64  TxUndersizeFrames;
101199767fToomas Soome    UINT64  TxOversizeFrames;
102199767fToomas Soome    UINT64  TxDroppedFrames;
103199767fToomas Soome    UINT64  TxUnicastFrames;
104199767fToomas Soome    UINT64  TxBroadcastFrames;
105199767fToomas Soome    UINT64  TxMulticastFrames;
106199767fToomas Soome    UINT64  TxCrcErrorFrames;
107199767fToomas Soome    UINT64  TxTotalBytes;
108199767fToomas Soome
109199767fToomas Soome    //
110199767fToomas Soome    // Number of collisions detection on this subnet.
111199767fToomas Soome    //
112199767fToomas Soome    UINT64  Collisions;
113199767fToomas Soome
114199767fToomas Soome    //
115199767fToomas Soome    // Number of frames destined for unsupported protocol.
116199767fToomas Soome    //
117199767fToomas Soome    UINT64  UnsupportedProtocol;
118199767fToomas Soome
119199767fToomas Soome} EFI_NETWORK_STATISTICS;
120199767fToomas Soome
121199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
122199767fToomas Soome//
123199767fToomas Soome
124199767fToomas Soometypedef enum {
125199767fToomas Soome    EfiSimpleNetworkStopped,
126199767fToomas Soome    EfiSimpleNetworkStarted,
127199767fToomas Soome    EfiSimpleNetworkInitialized,
128199767fToomas Soome    EfiSimpleNetworkMaxState
129199767fToomas Soome} EFI_SIMPLE_NETWORK_STATE;
130199767fToomas Soome
131199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
132199767fToomas Soome//
133199767fToomas Soome
134199767fToomas Soome#define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST               0x01
135199767fToomas Soome#define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST             0x02
136199767fToomas Soome#define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST             0x04
137199767fToomas Soome#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS           0x08
138199767fToomas Soome#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
139199767fToomas Soome
140199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
141199767fToomas Soome//
142199767fToomas Soome
143199767fToomas Soome#define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT        0x01
144199767fToomas Soome#define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT       0x02
145199767fToomas Soome#define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT        0x04
146199767fToomas Soome#define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT       0x08
147199767fToomas Soome
148199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
149199767fToomas Soome//
150199767fToomas Soome#define MAX_MCAST_FILTER_CNT    16
151199767fToomas Soometypedef struct {
152199767fToomas Soome    UINT32                      State;
153199767fToomas Soome    UINT32                      HwAddressSize;
154199767fToomas Soome    UINT32                      MediaHeaderSize;
155199767fToomas Soome    UINT32                      MaxPacketSize;
156199767fToomas Soome    UINT32                      NvRamSize;
157199767fToomas Soome    UINT32                      NvRamAccessSize;
158199767fToomas Soome    UINT32                      ReceiveFilterMask;
159199767fToomas Soome    UINT32                      ReceiveFilterSetting;
160199767fToomas Soome    UINT32                      MaxMCastFilterCount;
161199767fToomas Soome    UINT32                      MCastFilterCount;
162199767fToomas Soome    EFI_MAC_ADDRESS             MCastFilter[MAX_MCAST_FILTER_CNT];
163199767fToomas Soome    EFI_MAC_ADDRESS             CurrentAddress;
164199767fToomas Soome    EFI_MAC_ADDRESS             BroadcastAddress;
165199767fToomas Soome    EFI_MAC_ADDRESS             PermanentAddress;
166199767fToomas Soome    UINT8                       IfType;
167199767fToomas Soome    BOOLEAN                     MacAddressChangeable;
168199767fToomas Soome    BOOLEAN                     MultipleTxSupported;
169199767fToomas Soome    BOOLEAN                     MediaPresentSupported;
170199767fToomas Soome    BOOLEAN                     MediaPresent;
171199767fToomas Soome} EFI_SIMPLE_NETWORK_MODE;
172199767fToomas Soome
173199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
174199767fToomas Soome//
175199767fToomas Soome
176199767fToomas Soometypedef
177199767fToomas SoomeEFI_STATUS
178199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_START) (
179199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK  *This
180199767fToomas Soome);
181199767fToomas Soome
182199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
183199767fToomas Soome//
184199767fToomas Soome
185199767fToomas Soometypedef
186199767fToomas SoomeEFI_STATUS
187199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_STOP) (
188199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK  *This
189199767fToomas Soome);
190199767fToomas Soome
191199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
192199767fToomas Soome//
193199767fToomas Soome
194199767fToomas Soometypedef
195199767fToomas SoomeEFI_STATUS
196199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) (
197199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK  *This,
198199767fToomas Soome    IN UINTN                       ExtraRxBufferSize  OPTIONAL,
199199767fToomas Soome    IN UINTN                       ExtraTxBufferSize  OPTIONAL
200199767fToomas Soome);
201199767fToomas Soome
202199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
203199767fToomas Soome//
204199767fToomas Soome
205199767fToomas Soometypedef
206199767fToomas SoomeEFI_STATUS
207199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_RESET) (
208199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK   *This,
209199767fToomas Soome    IN BOOLEAN                      ExtendedVerification
210199767fToomas Soome);
211199767fToomas Soome
212199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
213199767fToomas Soome//
214199767fToomas Soome
215199767fToomas Soometypedef
216199767fToomas SoomeEFI_STATUS
217199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) (
218199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK  *This
219199767fToomas Soome);
220199767fToomas Soome
221199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
222199767fToomas Soome//
223199767fToomas Soome
224199767fToomas Soometypedef
225199767fToomas SoomeEFI_STATUS
226199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) (
227199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK   *This,
228199767fToomas Soome    IN UINT32                       Enable,
229199767fToomas Soome    IN UINT32                       Disable,
230199767fToomas Soome    IN BOOLEAN                      ResetMCastFilter,
231199767fToomas Soome    IN UINTN                        MCastFilterCnt     OPTIONAL,
232199767fToomas Soome    IN EFI_MAC_ADDRESS              *MCastFilter       OPTIONAL
233199767fToomas Soome);
234199767fToomas Soome
235199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
236199767fToomas Soome//
237199767fToomas Soome
238199767fToomas Soometypedef
239199767fToomas SoomeEFI_STATUS
240199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) (
241199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK   *This,
242199767fToomas Soome    IN BOOLEAN                      Reset,
243199767fToomas Soome    IN EFI_MAC_ADDRESS              *New      OPTIONAL
244199767fToomas Soome);
245199767fToomas Soome
246199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
247199767fToomas Soome//
248199767fToomas Soome
249199767fToomas Soometypedef
250199767fToomas SoomeEFI_STATUS
251199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) (
252199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK   *This,
253199767fToomas Soome    IN BOOLEAN                      Reset,
254199767fToomas Soome    IN OUT UINTN                    *StatisticsSize   OPTIONAL,
255199767fToomas Soome    OUT EFI_NETWORK_STATISTICS      *StatisticsTable  OPTIONAL
256199767fToomas Soome);
257199767fToomas Soome
258199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
259199767fToomas Soome//
260199767fToomas Soome
261199767fToomas Soometypedef
262199767fToomas SoomeEFI_STATUS
263199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) (
264199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK   *This,
265199767fToomas Soome    IN BOOLEAN                      IPv6,
266199767fToomas Soome    IN EFI_IP_ADDRESS               *IP,
267199767fToomas Soome    OUT EFI_MAC_ADDRESS             *MAC
268199767fToomas Soome);
269199767fToomas Soome
270199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
271199767fToomas Soome//
272199767fToomas Soome
273199767fToomas Soometypedef
274199767fToomas SoomeEFI_STATUS
275199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) (
276199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK  *This,
277199767fToomas Soome    IN BOOLEAN                     ReadWrite,
278199767fToomas Soome    IN UINTN                       Offset,
279199767fToomas Soome    IN UINTN                       BufferSize,
280199767fToomas Soome    IN OUT VOID                    *Buffer
281199767fToomas Soome);
282199767fToomas Soome
283199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
284199767fToomas Soome//
285199767fToomas Soome
286199767fToomas Soometypedef
287199767fToomas SoomeEFI_STATUS
288199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) (
289199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK  *This,
290199767fToomas Soome    OUT UINT32                     *InterruptStatus  OPTIONAL,
291199767fToomas Soome    OUT VOID                       **TxBuf           OPTIONAL
292199767fToomas Soome);
293199767fToomas Soome
294199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
295199767fToomas Soome//
296199767fToomas Soome
297199767fToomas Soometypedef
298199767fToomas SoomeEFI_STATUS
299199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) (
300199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK   *This,
301199767fToomas Soome    IN UINTN                        HeaderSize,
302199767fToomas Soome    IN UINTN                        BufferSize,
303199767fToomas Soome    IN VOID                         *Buffer,
304199767fToomas Soome    IN EFI_MAC_ADDRESS              *SrcAddr     OPTIONAL,
305199767fToomas Soome    IN EFI_MAC_ADDRESS              *DestAddr    OPTIONAL,
306199767fToomas Soome    IN UINT16                       *Protocol    OPTIONAL
307199767fToomas Soome);
308199767fToomas Soome
309199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
310199767fToomas Soome//
311199767fToomas Soome
312199767fToomas Soometypedef
313199767fToomas SoomeEFI_STATUS
314199767fToomas Soome(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) (
315199767fToomas Soome    IN struct _EFI_SIMPLE_NETWORK   *This,
316199767fToomas Soome    OUT UINTN                       *HeaderSize  OPTIONAL,
317199767fToomas Soome    IN OUT UINTN                    *BufferSize,
318199767fToomas Soome    OUT VOID                        *Buffer,
319199767fToomas Soome    OUT EFI_MAC_ADDRESS             *SrcAddr     OPTIONAL,
320199767fToomas Soome    OUT EFI_MAC_ADDRESS             *DestAddr    OPTIONAL,
321199767fToomas Soome    OUT UINT16                      *Protocol    OPTIONAL
322199767fToomas Soome);
323199767fToomas Soome
324199767fToomas Soome///////////////////////////////////////////////////////////////////////////////
325199767fToomas Soome//
326199767fToomas Soome
327199767fToomas Soome#define EFI_SIMPLE_NETWORK_INTERFACE_REVISION   0x00010000
328199767fToomas Soome
329199767fToomas Soometypedef struct _EFI_SIMPLE_NETWORK {
330199767fToomas Soome    UINT64                              Revision;
331199767fToomas Soome    EFI_SIMPLE_NETWORK_START            Start;
332199767fToomas Soome    EFI_SIMPLE_NETWORK_STOP             Stop;
333199767fToomas Soome    EFI_SIMPLE_NETWORK_INITIALIZE       Initialize;
334199767fToomas Soome    EFI_SIMPLE_NETWORK_RESET            Reset;
335199767fToomas Soome    EFI_SIMPLE_NETWORK_SHUTDOWN         Shutdown;
336199767fToomas Soome    EFI_SIMPLE_NETWORK_RECEIVE_FILTERS  ReceiveFilters;
337199767fToomas Soome    EFI_SIMPLE_NETWORK_STATION_ADDRESS  StationAddress;
338199767fToomas Soome    EFI_SIMPLE_NETWORK_STATISTICS       Statistics;
339199767fToomas Soome    EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC  MCastIpToMac;
340199767fToomas Soome    EFI_SIMPLE_NETWORK_NVDATA           NvData;
341199767fToomas Soome    EFI_SIMPLE_NETWORK_GET_STATUS       GetStatus;
342199767fToomas Soome    EFI_SIMPLE_NETWORK_TRANSMIT         Transmit;
343199767fToomas Soome    EFI_SIMPLE_NETWORK_RECEIVE          Receive;
344199767fToomas Soome    EFI_EVENT                           WaitForPacket;
345199767fToomas Soome    EFI_SIMPLE_NETWORK_MODE             *Mode;
346199767fToomas Soome} EFI_SIMPLE_NETWORK;
347199767fToomas Soome
348199767fToomas Soome#endif /* _EFINET_H */
349