]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - 6/sys/boot/efi/include/efinet.h
merge fix for boot-time hang on centos' xen
[FreeBSD/FreeBSD.git] / 6 / sys / boot / efi / include / efinet.h
1 /* $FreeBSD$ */
2 #ifndef _EFINET_H
3 #define _EFINET_H
4
5
6 /*++
7 Copyright (c) 1999  Intel Corporation
8
9 Module Name:
10     efinet.h
11
12 Abstract:
13     EFI Simple Network protocol
14
15 Revision History
16 --*/
17
18
19 #define EFI_SIMPLE_NETWORK_PROTOCOL \
20     { 0xA19832B9, 0xAC25, 0x11D3, 0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }
21
22 INTERFACE_DECL(_EFI_SIMPLE_NETWORK);
23
24 typedef struct {
25         /*
26          * Total number of frames received.  Includes frames with errors and
27          * dropped frames.
28          */
29     UINT64  RxTotalFrames;
30
31         /* Number of valid frames received and copied into receive buffers. */
32     UINT64  RxGoodFrames;
33
34         /*
35          * Number of frames below the minimum length for the media.
36          * This would be <64 for ethernet.
37          */
38     UINT64  RxUndersizeFrames;
39
40         /*
41          * Number of frames longer than the maxminum length for the
42          * media.  This would be >1500 for ethernet.
43          */
44     UINT64  RxOversizeFrames;
45
46         /* Valid frames that were dropped because receive buffers were full. */
47     UINT64  RxDroppedFrames;
48
49         /* Number of valid unicast frames received and not dropped. */
50     UINT64  RxUnicastFrames;
51
52         /* Number of valid broadcast frames received and not dropped. */
53     UINT64  RxBroadcastFrames;
54
55         /* Number of valid mutlicast frames received and not dropped. */
56     UINT64  RxMulticastFrames;
57
58         /* Number of frames w/ CRC or alignment errors. */
59     UINT64  RxCrcErrorFrames;
60
61         /*
62          * Total number of bytes received.  Includes frames with errors
63          * and dropped frames.
64          */
65     UINT64  RxTotalBytes;
66
67         /* Transmit statistics. */
68     UINT64  TxTotalFrames;
69     UINT64  TxGoodFrames;
70     UINT64  TxUndersizeFrames;
71     UINT64  TxOversizeFrames;
72     UINT64  TxDroppedFrames;
73     UINT64  TxUnicastFrames;
74     UINT64  TxBroadcastFrames;
75     UINT64  TxMulticastFrames;
76     UINT64  TxCrcErrorFrames;
77     UINT64  TxTotalBytes;
78
79         /* Number of collisions detection on this subnet. */
80     UINT64  Collisions;
81
82         /* Number of frames destined for unsupported protocol. */
83     UINT64  UnsupportedProtocol;
84
85 } EFI_NETWORK_STATISTICS;
86
87 typedef enum {
88     EfiSimpleNetworkStopped,
89     EfiSimpleNetworkStarted,
90     EfiSimpleNetworkInitialized,
91     EfiSimpleNetworkMaxState
92 } EFI_SIMPLE_NETWORK_STATE;
93
94 #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST               0x01
95 #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST             0x02
96 #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST             0x04
97 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS           0x08
98 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
99
100 #define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT        0x01
101 #define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT       0x02
102 #define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT        0x04
103 #define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT       0x08
104
105 #define MAX_MCAST_FILTER_CNT    16
106 typedef struct {
107     UINT32                      State;
108     UINT32                      HwAddressSize;
109     UINT32                      MediaHeaderSize;
110     UINT32                      MaxPacketSize;
111     UINT32                      NvRamSize;
112     UINT32                      NvRamAccessSize;
113     UINT32                      ReceiveFilterMask;
114     UINT32                      ReceiveFilterSetting;
115     UINT32                      MaxMCastFilterCount;
116     UINT32                      MCastFilterCount;
117     EFI_MAC_ADDRESS             MCastFilter[MAX_MCAST_FILTER_CNT];
118     EFI_MAC_ADDRESS             CurrentAddress;
119     EFI_MAC_ADDRESS             BroadcastAddress;
120     EFI_MAC_ADDRESS             PermanentAddress;
121     UINT8                       IfType;
122     BOOLEAN                     MacAddressChangeable;
123     BOOLEAN                     MultipleTxSupported;
124     BOOLEAN                     MediaPresentSupported;
125     BOOLEAN                     MediaPresent;
126 } EFI_SIMPLE_NETWORK_MODE;
127
128 typedef 
129 EFI_STATUS 
130 (EFIAPI *EFI_SIMPLE_NETWORK_START) (
131     IN struct _EFI_SIMPLE_NETWORK  *This
132 );
133
134 typedef 
135 EFI_STATUS 
136 (EFIAPI *EFI_SIMPLE_NETWORK_STOP) (
137     IN struct _EFI_SIMPLE_NETWORK  *This
138 );
139
140 typedef 
141 EFI_STATUS 
142 (EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) (
143     IN struct _EFI_SIMPLE_NETWORK  *This,
144     IN UINTN                       ExtraRxBufferSize  OPTIONAL,
145     IN UINTN                       ExtraTxBufferSize  OPTIONAL
146 );
147
148 typedef 
149 EFI_STATUS 
150 (EFIAPI *EFI_SIMPLE_NETWORK_RESET) (
151     IN struct _EFI_SIMPLE_NETWORK   *This,
152     IN BOOLEAN                      ExtendedVerification
153 );
154
155 typedef 
156 EFI_STATUS 
157 (EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) (
158     IN struct _EFI_SIMPLE_NETWORK  *This
159 );
160
161 typedef 
162 EFI_STATUS 
163 (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) (
164     IN struct _EFI_SIMPLE_NETWORK   *This,
165     IN UINT32                       Enable,
166     IN UINT32                       Disable,
167     IN BOOLEAN                      ResetMCastFilter,
168     IN UINTN                        MCastFilterCnt     OPTIONAL,
169     IN EFI_MAC_ADDRESS              *MCastFilter       OPTIONAL
170 );
171
172 typedef 
173 EFI_STATUS 
174 (EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) (
175     IN struct _EFI_SIMPLE_NETWORK   *This,
176     IN BOOLEAN                      Reset,
177     IN EFI_MAC_ADDRESS              *New      OPTIONAL
178 );
179
180 typedef 
181 EFI_STATUS 
182 (EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) (
183     IN struct _EFI_SIMPLE_NETWORK   *This,
184     IN BOOLEAN                      Reset,
185     IN OUT UINTN                    *StatisticsSize   OPTIONAL,
186     OUT EFI_NETWORK_STATISTICS      *StatisticsTable  OPTIONAL
187 );
188
189 typedef 
190 EFI_STATUS 
191 (EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) (
192     IN struct _EFI_SIMPLE_NETWORK   *This,
193     IN BOOLEAN                      IPv6,
194     IN EFI_IP_ADDRESS               *IP,
195     OUT EFI_MAC_ADDRESS             *MAC
196 );
197
198 typedef 
199 EFI_STATUS 
200 (EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) (
201     IN struct _EFI_SIMPLE_NETWORK  *This,
202     IN BOOLEAN                     ReadWrite,
203     IN UINTN                       Offset,
204     IN UINTN                       BufferSize,
205     IN OUT VOID                    *Buffer
206 );
207
208 typedef 
209 EFI_STATUS 
210 (EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) (
211     IN struct _EFI_SIMPLE_NETWORK  *This,
212     OUT UINT32                     *InterruptStatus  OPTIONAL,
213     OUT VOID                       **TxBuf           OPTIONAL
214 );
215
216 typedef 
217 EFI_STATUS 
218 (EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) (
219     IN struct _EFI_SIMPLE_NETWORK   *This,
220     IN UINTN                        HeaderSize,
221     IN UINTN                        BufferSize,
222     IN VOID                         *Buffer,
223     IN EFI_MAC_ADDRESS              *SrcAddr     OPTIONAL,
224     IN EFI_MAC_ADDRESS              *DestAddr    OPTIONAL,
225     IN UINT16                       *Protocol    OPTIONAL
226 );
227
228 typedef 
229 EFI_STATUS 
230 (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) (
231     IN struct _EFI_SIMPLE_NETWORK   *This,
232     OUT UINTN                       *HeaderSize  OPTIONAL,
233     IN OUT UINTN                    *BufferSize,
234     OUT VOID                        *Buffer,
235     OUT EFI_MAC_ADDRESS             *SrcAddr     OPTIONAL,
236     OUT EFI_MAC_ADDRESS             *DestAddr    OPTIONAL,
237     OUT UINT16                      *Protocol    OPTIONAL
238 );
239
240 #define EFI_SIMPLE_NETWORK_INTERFACE_REVISION   0x00010000
241
242 typedef struct _EFI_SIMPLE_NETWORK {
243     UINT64                              Revision;
244     EFI_SIMPLE_NETWORK_START            Start;
245     EFI_SIMPLE_NETWORK_STOP             Stop;
246     EFI_SIMPLE_NETWORK_INITIALIZE       Initialize;
247     EFI_SIMPLE_NETWORK_RESET            Reset;
248     EFI_SIMPLE_NETWORK_SHUTDOWN         Shutdown;
249     EFI_SIMPLE_NETWORK_RECEIVE_FILTERS  ReceiveFilters;
250     EFI_SIMPLE_NETWORK_STATION_ADDRESS  StationAddress;
251     EFI_SIMPLE_NETWORK_STATISTICS       Statistics;
252     EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC  MCastIpToMac;
253     EFI_SIMPLE_NETWORK_NVDATA           NvData;
254     EFI_SIMPLE_NETWORK_GET_STATUS       GetStatus;
255     EFI_SIMPLE_NETWORK_TRANSMIT         Transmit;
256     EFI_SIMPLE_NETWORK_RECEIVE          Receive;
257     EFI_EVENT                           WaitForPacket;
258     EFI_SIMPLE_NETWORK_MODE             *Mode;
259 } EFI_SIMPLE_NETWORK;
260
261 #endif /* _EFINET_H */