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