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