1 /* $NetBSD: efinet.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill 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_GUID \ 26 { 0xA19832B9, 0xAC25, 0x11D3, {0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } 27 28 INTERFACE_DECL(_EFI_SIMPLE_NETWORK_PROTOCOL); 29 30 /////////////////////////////////////////////////////////////////////////////// 31 // 32 33 typedef struct { 34 // 35 // Total number of frames received. Includes frames with errors and 36 // dropped frames. 37 // 38 UINT64 RxTotalFrames; 39 40 // 41 // Number of valid frames received and copied into receive buffers. 42 // 43 UINT64 RxGoodFrames; 44 45 // 46 // Number of frames below the minimum length for the media. 47 // This would be <64 for ethernet. 48 // 49 UINT64 RxUndersizeFrames; 50 51 // 52 // Number of frames longer than the maxminum length for the 53 // media. This would be >1500 for ethernet. 54 // 55 UINT64 RxOversizeFrames; 56 57 // 58 // Valid frames that were dropped because receive buffers were full. 59 // 60 UINT64 RxDroppedFrames; 61 62 // 63 // Number of valid unicast frames received and not dropped. 64 // 65 UINT64 RxUnicastFrames; 66 67 // 68 // Number of valid broadcast frames received and not dropped. 69 // 70 UINT64 RxBroadcastFrames; 71 72 // 73 // Number of valid mutlicast frames received and not dropped. 74 // 75 UINT64 RxMulticastFrames; 76 77 // 78 // Number of frames w/ CRC or alignment errors. 79 // 80 UINT64 RxCrcErrorFrames; 81 82 // 83 // Total number of bytes received. Includes frames with errors 84 // and dropped frames. 85 // 86 UINT64 RxTotalBytes; 87 88 // 89 // Transmit statistics. 90 // 91 UINT64 TxTotalFrames; 92 UINT64 TxGoodFrames; 93 UINT64 TxUndersizeFrames; 94 UINT64 TxOversizeFrames; 95 UINT64 TxDroppedFrames; 96 UINT64 TxUnicastFrames; 97 UINT64 TxBroadcastFrames; 98 UINT64 TxMulticastFrames; 99 UINT64 TxCrcErrorFrames; 100 UINT64 TxTotalBytes; 101 102 // 103 // Number of collisions detection on this subnet. 104 // 105 UINT64 Collisions; 106 107 // 108 // Number of frames destined for unsupported protocol. 109 // 110 UINT64 UnsupportedProtocol; 111 112 } EFI_NETWORK_STATISTICS; 113 114 /////////////////////////////////////////////////////////////////////////////// 115 // 116 117 typedef enum { 118 EfiSimpleNetworkStopped, 119 EfiSimpleNetworkStarted, 120 EfiSimpleNetworkInitialized, 121 EfiSimpleNetworkMaxState 122 } EFI_SIMPLE_NETWORK_STATE; 123 124 /////////////////////////////////////////////////////////////////////////////// 125 // 126 127 #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01 128 #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02 129 #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04 130 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08 131 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10 132 133 /////////////////////////////////////////////////////////////////////////////// 134 // 135 136 #define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT 0x01 137 #define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02 138 #define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT 0x04 139 #define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08 140 141 /////////////////////////////////////////////////////////////////////////////// 142 // 143 #define MAX_MCAST_FILTER_CNT 16 144 typedef struct { 145 UINT32 State; 146 UINT32 HwAddressSize; 147 UINT32 MediaHeaderSize; 148 UINT32 MaxPacketSize; 149 UINT32 NvRamSize; 150 UINT32 NvRamAccessSize; 151 UINT32 ReceiveFilterMask; 152 UINT32 ReceiveFilterSetting; 153 UINT32 MaxMCastFilterCount; 154 UINT32 MCastFilterCount; 155 EFI_MAC_ADDRESS MCastFilter[MAX_MCAST_FILTER_CNT]; 156 EFI_MAC_ADDRESS CurrentAddress; 157 EFI_MAC_ADDRESS BroadcastAddress; 158 EFI_MAC_ADDRESS PermanentAddress; 159 UINT8 IfType; 160 BOOLEAN MacAddressChangeable; 161 BOOLEAN MultipleTxSupported; 162 BOOLEAN MediaPresentSupported; 163 BOOLEAN MediaPresent; 164 } EFI_SIMPLE_NETWORK_MODE; 165 166 /////////////////////////////////////////////////////////////////////////////// 167 // 168 169 typedef 170 EFI_STATUS 171 (EFIAPI *EFI_SIMPLE_NETWORK_START) ( 172 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This 173 ); 174 175 /////////////////////////////////////////////////////////////////////////////// 176 // 177 178 typedef 179 EFI_STATUS 180 (EFIAPI *EFI_SIMPLE_NETWORK_STOP) ( 181 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This 182 ); 183 184 /////////////////////////////////////////////////////////////////////////////// 185 // 186 187 typedef 188 EFI_STATUS 189 (EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) ( 190 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 191 IN UINTN ExtraRxBufferSize OPTIONAL, 192 IN UINTN ExtraTxBufferSize OPTIONAL 193 ); 194 195 /////////////////////////////////////////////////////////////////////////////// 196 // 197 198 typedef 199 EFI_STATUS 200 (EFIAPI *EFI_SIMPLE_NETWORK_RESET) ( 201 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 202 IN BOOLEAN ExtendedVerification 203 ); 204 205 /////////////////////////////////////////////////////////////////////////////// 206 // 207 208 typedef 209 EFI_STATUS 210 (EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) ( 211 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This 212 ); 213 214 /////////////////////////////////////////////////////////////////////////////// 215 // 216 217 typedef 218 EFI_STATUS 219 (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) ( 220 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 221 IN UINT32 Enable, 222 IN UINT32 Disable, 223 IN BOOLEAN ResetMCastFilter, 224 IN UINTN MCastFilterCnt OPTIONAL, 225 IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL 226 ); 227 228 /////////////////////////////////////////////////////////////////////////////// 229 // 230 231 typedef 232 EFI_STATUS 233 (EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) ( 234 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 235 IN BOOLEAN Reset, 236 IN EFI_MAC_ADDRESS *New OPTIONAL 237 ); 238 239 /////////////////////////////////////////////////////////////////////////////// 240 // 241 242 typedef 243 EFI_STATUS 244 (EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) ( 245 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 246 IN BOOLEAN Reset, 247 IN OUT UINTN *StatisticsSize OPTIONAL, 248 OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL 249 ); 250 251 /////////////////////////////////////////////////////////////////////////////// 252 // 253 254 typedef 255 EFI_STATUS 256 (EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) ( 257 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 258 IN BOOLEAN IPv6, 259 IN EFI_IP_ADDRESS *IP, 260 OUT EFI_MAC_ADDRESS *MAC 261 ); 262 263 /////////////////////////////////////////////////////////////////////////////// 264 // 265 266 typedef 267 EFI_STATUS 268 (EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) ( 269 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 270 IN BOOLEAN ReadWrite, 271 IN UINTN Offset, 272 IN UINTN BufferSize, 273 IN OUT VOID *Buffer 274 ); 275 276 /////////////////////////////////////////////////////////////////////////////// 277 // 278 279 typedef 280 EFI_STATUS 281 (EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) ( 282 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 283 OUT UINT32 *InterruptStatus OPTIONAL, 284 OUT VOID **TxBuf OPTIONAL 285 ); 286 287 /////////////////////////////////////////////////////////////////////////////// 288 // 289 290 typedef 291 EFI_STATUS 292 (EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) ( 293 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 294 IN UINTN HeaderSize, 295 IN UINTN BufferSize, 296 IN VOID *Buffer, 297 IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, 298 IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, 299 IN UINT16 *Protocol OPTIONAL 300 ); 301 302 /////////////////////////////////////////////////////////////////////////////// 303 // 304 305 typedef 306 EFI_STATUS 307 (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) ( 308 IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, 309 OUT UINTN *HeaderSize OPTIONAL, 310 IN OUT UINTN *BufferSize, 311 OUT VOID *Buffer, 312 OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, 313 OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, 314 OUT UINT16 *Protocol OPTIONAL 315 ); 316 317 /////////////////////////////////////////////////////////////////////////////// 318 // 319 320 #define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000 321 #define EFI_SIMPLE_NETWORK_INTERFACE_REVISION EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 322 323 typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL { 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_PROTOCOL; 341 342 // Note: Because it conflicted with the EDK2 struct name, the 343 // 'EFI_SIMPLE_NETWORK_PROTOCOL' GUID definition, from older 344 // versions of gnu-efi, is now obsoleted. 345 // Use 'EFI_SIMPLE_NETWORK_PROTOCOL_GUID' instead. 346 347 typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL _EFI_SIMPLE_NETWORK; 348 typedef EFI_SIMPLE_NETWORK_PROTOCOL EFI_SIMPLE_NETWORK; 349 350 #endif /* _EFINET_H */ 351