xref: /openbsd-src/sys/stand/efi/include/efinet.h (revision aa2a8ca5e5140b61be1a50d5e92ee775499a1008)
1060fee10Skettenis /* $FreeBSD: head/sys/boot/efi/include/efinet.h 163898 2006-11-02 02:42:48Z marcel $ */
2060fee10Skettenis #ifndef _EFINET_H
3060fee10Skettenis #define _EFINET_H
4060fee10Skettenis 
5060fee10Skettenis 
6060fee10Skettenis /*++
7060fee10Skettenis Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
8060fee10Skettenis This software and associated documentation (if any) is furnished
9060fee10Skettenis under a license and may only be used or copied in accordance
10060fee10Skettenis with the terms of the license. Except as permitted by such
11060fee10Skettenis license, no part of this software or documentation may be
12060fee10Skettenis reproduced, stored in a retrieval system, or transmitted in any
13060fee10Skettenis form or by any means without the express written consent of
14060fee10Skettenis Intel Corporation.
15060fee10Skettenis 
16060fee10Skettenis Module Name:
17060fee10Skettenis     efinet.h
18060fee10Skettenis 
19060fee10Skettenis Abstract:
20060fee10Skettenis     EFI Simple Network protocol
21060fee10Skettenis 
22060fee10Skettenis Revision History
23060fee10Skettenis --*/
24060fee10Skettenis 
25060fee10Skettenis 
26060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
27060fee10Skettenis //
28060fee10Skettenis //      Simple Network Protocol
29060fee10Skettenis //
30060fee10Skettenis 
31060fee10Skettenis #define EFI_SIMPLE_NETWORK_PROTOCOL \
32*aa2a8ca5Sjsg     { 0xA19832B9, 0xAC25, 0x11D3, { 0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D } }
33060fee10Skettenis 
34060fee10Skettenis 
35060fee10Skettenis INTERFACE_DECL(_EFI_SIMPLE_NETWORK);
36060fee10Skettenis 
37060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
38060fee10Skettenis //
39060fee10Skettenis 
40060fee10Skettenis typedef struct {
41060fee10Skettenis     //
42060fee10Skettenis     // Total number of frames received.  Includes frames with errors and
43060fee10Skettenis     // dropped frames.
44060fee10Skettenis     //
45060fee10Skettenis     UINT64  RxTotalFrames;
46060fee10Skettenis 
47060fee10Skettenis     //
48060fee10Skettenis     // Number of valid frames received and copied into receive buffers.
49060fee10Skettenis     //
50060fee10Skettenis     UINT64  RxGoodFrames;
51060fee10Skettenis 
52060fee10Skettenis     //
53060fee10Skettenis     // Number of frames below the minimum length for the media.
54060fee10Skettenis     // This would be <64 for ethernet.
55060fee10Skettenis     //
56060fee10Skettenis     UINT64  RxUndersizeFrames;
57060fee10Skettenis 
58060fee10Skettenis     //
59060fee10Skettenis     // Number of frames longer than the maxminum length for the
60060fee10Skettenis     // media.  This would be >1500 for ethernet.
61060fee10Skettenis     //
62060fee10Skettenis     UINT64  RxOversizeFrames;
63060fee10Skettenis 
64060fee10Skettenis     //
65060fee10Skettenis     // Valid frames that were dropped because receive buffers were full.
66060fee10Skettenis     //
67060fee10Skettenis     UINT64  RxDroppedFrames;
68060fee10Skettenis 
69060fee10Skettenis     //
70060fee10Skettenis     // Number of valid unicast frames received and not dropped.
71060fee10Skettenis     //
72060fee10Skettenis     UINT64  RxUnicastFrames;
73060fee10Skettenis 
74060fee10Skettenis     //
75060fee10Skettenis     // Number of valid broadcast frames received and not dropped.
76060fee10Skettenis     //
77060fee10Skettenis     UINT64  RxBroadcastFrames;
78060fee10Skettenis 
79060fee10Skettenis     //
80060fee10Skettenis     // Number of valid multicast frames received and not dropped.
81060fee10Skettenis     //
82060fee10Skettenis     UINT64  RxMulticastFrames;
83060fee10Skettenis 
84060fee10Skettenis     //
85060fee10Skettenis     // Number of frames w/ CRC or alignment errors.
86060fee10Skettenis     //
87060fee10Skettenis     UINT64  RxCrcErrorFrames;
88060fee10Skettenis 
89060fee10Skettenis     //
90060fee10Skettenis     // Total number of bytes received.  Includes frames with errors
91060fee10Skettenis     // and dropped frames.
92060fee10Skettenis     //
93060fee10Skettenis     UINT64  RxTotalBytes;
94060fee10Skettenis 
95060fee10Skettenis     //
96060fee10Skettenis     // Transmit statistics.
97060fee10Skettenis     //
98060fee10Skettenis     UINT64  TxTotalFrames;
99060fee10Skettenis     UINT64  TxGoodFrames;
100060fee10Skettenis     UINT64  TxUndersizeFrames;
101060fee10Skettenis     UINT64  TxOversizeFrames;
102060fee10Skettenis     UINT64  TxDroppedFrames;
103060fee10Skettenis     UINT64  TxUnicastFrames;
104060fee10Skettenis     UINT64  TxBroadcastFrames;
105060fee10Skettenis     UINT64  TxMulticastFrames;
106060fee10Skettenis     UINT64  TxCrcErrorFrames;
107060fee10Skettenis     UINT64  TxTotalBytes;
108060fee10Skettenis 
109060fee10Skettenis     //
110060fee10Skettenis     // Number of collisions detection on this subnet.
111060fee10Skettenis     //
112060fee10Skettenis     UINT64  Collisions;
113060fee10Skettenis 
114060fee10Skettenis     //
115060fee10Skettenis     // Number of frames destined for unsupported protocol.
116060fee10Skettenis     //
117060fee10Skettenis     UINT64  UnsupportedProtocol;
118060fee10Skettenis 
119060fee10Skettenis } EFI_NETWORK_STATISTICS;
120060fee10Skettenis 
121060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
122060fee10Skettenis //
123060fee10Skettenis 
124060fee10Skettenis typedef enum {
125060fee10Skettenis     EfiSimpleNetworkStopped,
126060fee10Skettenis     EfiSimpleNetworkStarted,
127060fee10Skettenis     EfiSimpleNetworkInitialized,
128060fee10Skettenis     EfiSimpleNetworkMaxState
129060fee10Skettenis } EFI_SIMPLE_NETWORK_STATE;
130060fee10Skettenis 
131060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
132060fee10Skettenis //
133060fee10Skettenis 
134060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST               0x01
135060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST             0x02
136060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST             0x04
137060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS           0x08
138060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
139060fee10Skettenis 
140060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
141060fee10Skettenis //
142060fee10Skettenis 
143060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT        0x01
144060fee10Skettenis #define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT       0x02
145060fee10Skettenis #define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT        0x04
146060fee10Skettenis #define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT       0x08
147060fee10Skettenis 
148060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
149060fee10Skettenis //
150060fee10Skettenis #define MAX_MCAST_FILTER_CNT    16
151060fee10Skettenis typedef struct {
152060fee10Skettenis     UINT32                      State;
153060fee10Skettenis     UINT32                      HwAddressSize;
154060fee10Skettenis     UINT32                      MediaHeaderSize;
155060fee10Skettenis     UINT32                      MaxPacketSize;
156060fee10Skettenis     UINT32                      NvRamSize;
157060fee10Skettenis     UINT32                      NvRamAccessSize;
158060fee10Skettenis     UINT32                      ReceiveFilterMask;
159060fee10Skettenis     UINT32                      ReceiveFilterSetting;
160060fee10Skettenis     UINT32                      MaxMCastFilterCount;
161060fee10Skettenis     UINT32                      MCastFilterCount;
162060fee10Skettenis     EFI_MAC_ADDRESS             MCastFilter[MAX_MCAST_FILTER_CNT];
163060fee10Skettenis     EFI_MAC_ADDRESS             CurrentAddress;
164060fee10Skettenis     EFI_MAC_ADDRESS             BroadcastAddress;
165060fee10Skettenis     EFI_MAC_ADDRESS             PermanentAddress;
166060fee10Skettenis     UINT8                       IfType;
167060fee10Skettenis     BOOLEAN                     MacAddressChangeable;
168060fee10Skettenis     BOOLEAN                     MultipleTxSupported;
169060fee10Skettenis     BOOLEAN                     MediaPresentSupported;
170060fee10Skettenis     BOOLEAN                     MediaPresent;
171060fee10Skettenis } EFI_SIMPLE_NETWORK_MODE;
172060fee10Skettenis 
173060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
174060fee10Skettenis //
175060fee10Skettenis 
176060fee10Skettenis typedef
177060fee10Skettenis EFI_STATUS
178060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_START) (
179060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK  *This
180060fee10Skettenis );
181060fee10Skettenis 
182060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
183060fee10Skettenis //
184060fee10Skettenis 
185060fee10Skettenis typedef
186060fee10Skettenis EFI_STATUS
187060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_STOP) (
188060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK  *This
189060fee10Skettenis );
190060fee10Skettenis 
191060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
192060fee10Skettenis //
193060fee10Skettenis 
194060fee10Skettenis typedef
195060fee10Skettenis EFI_STATUS
196060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) (
197060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK  *This,
198060fee10Skettenis     IN UINTN                       ExtraRxBufferSize  OPTIONAL,
199060fee10Skettenis     IN UINTN                       ExtraTxBufferSize  OPTIONAL
200060fee10Skettenis );
201060fee10Skettenis 
202060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
203060fee10Skettenis //
204060fee10Skettenis 
205060fee10Skettenis typedef
206060fee10Skettenis EFI_STATUS
207060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_RESET) (
208060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK   *This,
209060fee10Skettenis     IN BOOLEAN                      ExtendedVerification
210060fee10Skettenis );
211060fee10Skettenis 
212060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
213060fee10Skettenis //
214060fee10Skettenis 
215060fee10Skettenis typedef
216060fee10Skettenis EFI_STATUS
217060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) (
218060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK  *This
219060fee10Skettenis );
220060fee10Skettenis 
221060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
222060fee10Skettenis //
223060fee10Skettenis 
224060fee10Skettenis typedef
225060fee10Skettenis EFI_STATUS
226060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) (
227060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK   *This,
228060fee10Skettenis     IN UINT32                       Enable,
229060fee10Skettenis     IN UINT32                       Disable,
230060fee10Skettenis     IN BOOLEAN                      ResetMCastFilter,
231060fee10Skettenis     IN UINTN                        MCastFilterCnt     OPTIONAL,
232060fee10Skettenis     IN EFI_MAC_ADDRESS              *MCastFilter       OPTIONAL
233060fee10Skettenis );
234060fee10Skettenis 
235060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
236060fee10Skettenis //
237060fee10Skettenis 
238060fee10Skettenis typedef
239060fee10Skettenis EFI_STATUS
240060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) (
241060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK   *This,
242060fee10Skettenis     IN BOOLEAN                      Reset,
243060fee10Skettenis     IN EFI_MAC_ADDRESS              *New      OPTIONAL
244060fee10Skettenis );
245060fee10Skettenis 
246060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
247060fee10Skettenis //
248060fee10Skettenis 
249060fee10Skettenis typedef
250060fee10Skettenis EFI_STATUS
251060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) (
252060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK   *This,
253060fee10Skettenis     IN BOOLEAN                      Reset,
254060fee10Skettenis     IN OUT UINTN                    *StatisticsSize   OPTIONAL,
255060fee10Skettenis     OUT EFI_NETWORK_STATISTICS      *StatisticsTable  OPTIONAL
256060fee10Skettenis );
257060fee10Skettenis 
258060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
259060fee10Skettenis //
260060fee10Skettenis 
261060fee10Skettenis typedef
262060fee10Skettenis EFI_STATUS
263060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) (
264060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK   *This,
265060fee10Skettenis     IN BOOLEAN                      IPv6,
266060fee10Skettenis     IN EFI_IP_ADDRESS               *IP,
267060fee10Skettenis     OUT EFI_MAC_ADDRESS             *MAC
268060fee10Skettenis );
269060fee10Skettenis 
270060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
271060fee10Skettenis //
272060fee10Skettenis 
273060fee10Skettenis typedef
274060fee10Skettenis EFI_STATUS
275060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) (
276060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK  *This,
277060fee10Skettenis     IN BOOLEAN                     ReadWrite,
278060fee10Skettenis     IN UINTN                       Offset,
279060fee10Skettenis     IN UINTN                       BufferSize,
280060fee10Skettenis     IN OUT VOID                    *Buffer
281060fee10Skettenis );
282060fee10Skettenis 
283060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
284060fee10Skettenis //
285060fee10Skettenis 
286060fee10Skettenis typedef
287060fee10Skettenis EFI_STATUS
288060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) (
289060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK  *This,
290060fee10Skettenis     OUT UINT32                     *InterruptStatus  OPTIONAL,
291060fee10Skettenis     OUT VOID                       **TxBuf           OPTIONAL
292060fee10Skettenis );
293060fee10Skettenis 
294060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
295060fee10Skettenis //
296060fee10Skettenis 
297060fee10Skettenis typedef
298060fee10Skettenis EFI_STATUS
299060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) (
300060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK   *This,
301060fee10Skettenis     IN UINTN                        HeaderSize,
302060fee10Skettenis     IN UINTN                        BufferSize,
303060fee10Skettenis     IN VOID                         *Buffer,
304060fee10Skettenis     IN EFI_MAC_ADDRESS              *SrcAddr     OPTIONAL,
305060fee10Skettenis     IN EFI_MAC_ADDRESS              *DestAddr    OPTIONAL,
306060fee10Skettenis     IN UINT16                       *Protocol    OPTIONAL
307060fee10Skettenis );
308060fee10Skettenis 
309060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
310060fee10Skettenis //
311060fee10Skettenis 
312060fee10Skettenis typedef
313060fee10Skettenis EFI_STATUS
314060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) (
315060fee10Skettenis     IN struct _EFI_SIMPLE_NETWORK   *This,
316060fee10Skettenis     OUT UINTN                       *HeaderSize  OPTIONAL,
317060fee10Skettenis     IN OUT UINTN                    *BufferSize,
318060fee10Skettenis     OUT VOID                        *Buffer,
319060fee10Skettenis     OUT EFI_MAC_ADDRESS             *SrcAddr     OPTIONAL,
320060fee10Skettenis     OUT EFI_MAC_ADDRESS             *DestAddr    OPTIONAL,
321060fee10Skettenis     OUT UINT16                      *Protocol    OPTIONAL
322060fee10Skettenis );
323060fee10Skettenis 
324060fee10Skettenis ///////////////////////////////////////////////////////////////////////////////
325060fee10Skettenis //
326060fee10Skettenis 
327060fee10Skettenis #define EFI_SIMPLE_NETWORK_INTERFACE_REVISION   0x00010000
328060fee10Skettenis 
329060fee10Skettenis typedef struct _EFI_SIMPLE_NETWORK {
330060fee10Skettenis     UINT64                              Revision;
331060fee10Skettenis     EFI_SIMPLE_NETWORK_START            Start;
332060fee10Skettenis     EFI_SIMPLE_NETWORK_STOP             Stop;
333060fee10Skettenis     EFI_SIMPLE_NETWORK_INITIALIZE       Initialize;
334060fee10Skettenis     EFI_SIMPLE_NETWORK_RESET            Reset;
335060fee10Skettenis     EFI_SIMPLE_NETWORK_SHUTDOWN         Shutdown;
336060fee10Skettenis     EFI_SIMPLE_NETWORK_RECEIVE_FILTERS  ReceiveFilters;
337060fee10Skettenis     EFI_SIMPLE_NETWORK_STATION_ADDRESS  StationAddress;
338060fee10Skettenis     EFI_SIMPLE_NETWORK_STATISTICS       Statistics;
339060fee10Skettenis     EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC  MCastIpToMac;
340060fee10Skettenis     EFI_SIMPLE_NETWORK_NVDATA           NvData;
341060fee10Skettenis     EFI_SIMPLE_NETWORK_GET_STATUS       GetStatus;
342060fee10Skettenis     EFI_SIMPLE_NETWORK_TRANSMIT         Transmit;
343060fee10Skettenis     EFI_SIMPLE_NETWORK_RECEIVE          Receive;
344060fee10Skettenis     EFI_EVENT                           WaitForPacket;
345060fee10Skettenis     EFI_SIMPLE_NETWORK_MODE             *Mode;
346060fee10Skettenis } EFI_SIMPLE_NETWORK;
347060fee10Skettenis 
348060fee10Skettenis #endif /* _EFINET_H */
349