| #ifndef _EFINET_H | 
 | #define _EFINET_H | 
 |  | 
 |  | 
 | /*++ | 
 | Copyright (c) 1999  Intel Corporation | 
 |  | 
 | Module Name: | 
 |     efinet.h | 
 |  | 
 | Abstract: | 
 |     EFI Simple Network protocol | 
 |  | 
 | Revision History | 
 | --*/ | 
 |  | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 | //      Simple Network Protocol | 
 | // | 
 |  | 
 | #define EFI_SIMPLE_NETWORK_PROTOCOL \ | 
 |     { 0xA19832B9, 0xAC25, 0x11D3, {0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } | 
 |  | 
 |  | 
 | INTERFACE_DECL(_EFI_SIMPLE_NETWORK); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef struct { | 
 |     // | 
 |     // Total number of frames received.  Includes frames with errors and | 
 |     // dropped frames. | 
 |     // | 
 |     UINT64  RxTotalFrames; | 
 |  | 
 |     // | 
 |     // Number of valid frames received and copied into receive buffers. | 
 |     // | 
 |     UINT64  RxGoodFrames; | 
 |  | 
 |     // | 
 |     // Number of frames below the minimum length for the media. | 
 |     // This would be <64 for ethernet. | 
 |     // | 
 |     UINT64  RxUndersizeFrames; | 
 |  | 
 |     // | 
 |     // Number of frames longer than the maxminum length for the | 
 |     // media.  This would be >1500 for ethernet. | 
 |     // | 
 |     UINT64  RxOversizeFrames; | 
 |  | 
 |     // | 
 |     // Valid frames that were dropped because receive buffers were full. | 
 |     // | 
 |     UINT64  RxDroppedFrames; | 
 |  | 
 |     // | 
 |     // Number of valid unicast frames received and not dropped. | 
 |     // | 
 |     UINT64  RxUnicastFrames; | 
 |  | 
 |     // | 
 |     // Number of valid broadcast frames received and not dropped. | 
 |     // | 
 |     UINT64  RxBroadcastFrames; | 
 |  | 
 |     // | 
 |     // Number of valid mutlicast frames received and not dropped. | 
 |     // | 
 |     UINT64  RxMulticastFrames; | 
 |  | 
 |     // | 
 |     // Number of frames w/ CRC or alignment errors. | 
 |     // | 
 |     UINT64  RxCrcErrorFrames; | 
 |  | 
 |     // | 
 |     // Total number of bytes received.  Includes frames with errors | 
 |     // and dropped frames. | 
 |     // | 
 |     UINT64  RxTotalBytes; | 
 |  | 
 |     // | 
 |     // Transmit statistics. | 
 |     // | 
 |     UINT64  TxTotalFrames; | 
 |     UINT64  TxGoodFrames; | 
 |     UINT64  TxUndersizeFrames; | 
 |     UINT64  TxOversizeFrames; | 
 |     UINT64  TxDroppedFrames; | 
 |     UINT64  TxUnicastFrames; | 
 |     UINT64  TxBroadcastFrames; | 
 |     UINT64  TxMulticastFrames; | 
 |     UINT64  TxCrcErrorFrames; | 
 |     UINT64  TxTotalBytes; | 
 |  | 
 |     // | 
 |     // Number of collisions detection on this subnet. | 
 |     // | 
 |     UINT64  Collisions; | 
 |  | 
 |     // | 
 |     // Number of frames destined for unsupported protocol. | 
 |     // | 
 |     UINT64  UnsupportedProtocol; | 
 |  | 
 | } EFI_NETWORK_STATISTICS; | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef enum { | 
 |     EfiSimpleNetworkStopped, | 
 |     EfiSimpleNetworkStarted, | 
 |     EfiSimpleNetworkInitialized, | 
 |     EfiSimpleNetworkMaxState | 
 | } EFI_SIMPLE_NETWORK_STATE; | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST               0x01 | 
 | #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST             0x02 | 
 | #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST             0x04 | 
 | #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS           0x08 | 
 | #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10 | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | #define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT        0x01 | 
 | #define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT       0x02 | 
 | #define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT        0x04 | 
 | #define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT       0x08 | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 | #define MAX_MCAST_FILTER_CNT    16 | 
 | typedef struct { | 
 |     UINT32                      State; | 
 |     UINT32                      HwAddressSize; | 
 |     UINT32                      MediaHeaderSize; | 
 |     UINT32                      MaxPacketSize; | 
 |     UINT32                      NvRamSize; | 
 |     UINT32                      NvRamAccessSize; | 
 |     UINT32                      ReceiveFilterMask; | 
 |     UINT32                      ReceiveFilterSetting; | 
 |     UINT32                      MaxMCastFilterCount; | 
 |     UINT32                      MCastFilterCount; | 
 |     EFI_MAC_ADDRESS             MCastFilter[MAX_MCAST_FILTER_CNT]; | 
 |     EFI_MAC_ADDRESS             CurrentAddress; | 
 |     EFI_MAC_ADDRESS             BroadcastAddress; | 
 |     EFI_MAC_ADDRESS             PermanentAddress; | 
 |     UINT8                       IfType; | 
 |     BOOLEAN                     MacAddressChangeable; | 
 |     BOOLEAN                     MultipleTxSupported; | 
 |     BOOLEAN                     MediaPresentSupported; | 
 |     BOOLEAN                     MediaPresent; | 
 | } EFI_SIMPLE_NETWORK_MODE; | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_START) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK  *This | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_STOP) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK  *This | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK  *This, | 
 |     IN UINTN                       ExtraRxBufferSize  OPTIONAL, | 
 |     IN UINTN                       ExtraTxBufferSize  OPTIONAL | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_RESET) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK   *This, | 
 |     IN BOOLEAN                      ExtendedVerification | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK  *This | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK   *This, | 
 |     IN UINT32                       Enable, | 
 |     IN UINT32                       Disable, | 
 |     IN BOOLEAN                      ResetMCastFilter, | 
 |     IN UINTN                        MCastFilterCnt     OPTIONAL, | 
 |     IN EFI_MAC_ADDRESS              *MCastFilter       OPTIONAL | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK   *This, | 
 |     IN BOOLEAN                      Reset, | 
 |     IN EFI_MAC_ADDRESS              *New      OPTIONAL | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK   *This, | 
 |     IN BOOLEAN                      Reset, | 
 |     IN OUT UINTN                    *StatisticsSize   OPTIONAL, | 
 |     OUT EFI_NETWORK_STATISTICS      *StatisticsTable  OPTIONAL | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK   *This, | 
 |     IN BOOLEAN                      IPv6, | 
 |     IN EFI_IP_ADDRESS               *IP, | 
 |     OUT EFI_MAC_ADDRESS             *MAC | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK  *This, | 
 |     IN BOOLEAN                     ReadWrite, | 
 |     IN UINTN                       Offset, | 
 |     IN UINTN                       BufferSize, | 
 |     IN OUT VOID                    *Buffer | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK  *This, | 
 |     OUT UINT32                     *InterruptStatus  OPTIONAL, | 
 |     OUT VOID                       **TxBuf           OPTIONAL | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK   *This, | 
 |     IN UINTN                        HeaderSize, | 
 |     IN UINTN                        BufferSize, | 
 |     IN VOID                         *Buffer, | 
 |     IN EFI_MAC_ADDRESS              *SrcAddr     OPTIONAL, | 
 |     IN EFI_MAC_ADDRESS              *DestAddr    OPTIONAL, | 
 |     IN UINT16                       *Protocol    OPTIONAL | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | typedef  | 
 | EFI_STATUS  | 
 | (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) ( | 
 |     IN struct _EFI_SIMPLE_NETWORK   *This, | 
 |     OUT UINTN                       *HeaderSize  OPTIONAL, | 
 |     IN OUT UINTN                    *BufferSize, | 
 |     OUT VOID                        *Buffer, | 
 |     OUT EFI_MAC_ADDRESS             *SrcAddr     OPTIONAL, | 
 |     OUT EFI_MAC_ADDRESS             *DestAddr    OPTIONAL, | 
 |     OUT UINT16                      *Protocol    OPTIONAL | 
 | ); | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 | // | 
 |  | 
 | #define EFI_SIMPLE_NETWORK_INTERFACE_REVISION   0x00010000 | 
 |  | 
 | typedef struct _EFI_SIMPLE_NETWORK { | 
 |     UINT64                              Revision; | 
 |     EFI_SIMPLE_NETWORK_START            Start; | 
 |     EFI_SIMPLE_NETWORK_STOP             Stop; | 
 |     EFI_SIMPLE_NETWORK_INITIALIZE       Initialize; | 
 |     EFI_SIMPLE_NETWORK_RESET            Reset; | 
 |     EFI_SIMPLE_NETWORK_SHUTDOWN         Shutdown; | 
 |     EFI_SIMPLE_NETWORK_RECEIVE_FILTERS  ReceiveFilters; | 
 |     EFI_SIMPLE_NETWORK_STATION_ADDRESS  StationAddress; | 
 |     EFI_SIMPLE_NETWORK_STATISTICS       Statistics; | 
 |     EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC  MCastIpToMac; | 
 |     EFI_SIMPLE_NETWORK_NVDATA           NvData; | 
 |     EFI_SIMPLE_NETWORK_GET_STATUS       GetStatus; | 
 |     EFI_SIMPLE_NETWORK_TRANSMIT         Transmit; | 
 |     EFI_SIMPLE_NETWORK_RECEIVE          Receive; | 
 |     EFI_EVENT                           WaitForPacket; | 
 |     EFI_SIMPLE_NETWORK_MODE             *Mode; | 
 | } EFI_SIMPLE_NETWORK; | 
 |  | 
 | #endif /* _EFINET_H */ |