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