1060fee10Skettenis /* $FreeBSD: head/sys/boot/efi/include/efinet.h 163898 2006-11-02 02:42:48Z marcel $ */ 2060fee10Skettenis #ifndef _EFINET_H 3060fee10Skettenis #define _EFINET_H 4060fee10Skettenis 5060fee10Skettenis 6060fee10Skettenis /*++ 7060fee10Skettenis Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved 8060fee10Skettenis This software and associated documentation (if any) is furnished 9060fee10Skettenis under a license and may only be used or copied in accordance 10060fee10Skettenis with the terms of the license. Except as permitted by such 11060fee10Skettenis license, no part of this software or documentation may be 12060fee10Skettenis reproduced, stored in a retrieval system, or transmitted in any 13060fee10Skettenis form or by any means without the express written consent of 14060fee10Skettenis Intel Corporation. 15060fee10Skettenis 16060fee10Skettenis Module Name: 17060fee10Skettenis efinet.h 18060fee10Skettenis 19060fee10Skettenis Abstract: 20060fee10Skettenis EFI Simple Network protocol 21060fee10Skettenis 22060fee10Skettenis Revision History 23060fee10Skettenis --*/ 24060fee10Skettenis 25060fee10Skettenis 26060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 27060fee10Skettenis // 28060fee10Skettenis // Simple Network Protocol 29060fee10Skettenis // 30060fee10Skettenis 31060fee10Skettenis #define EFI_SIMPLE_NETWORK_PROTOCOL \ 32*aa2a8ca5Sjsg { 0xA19832B9, 0xAC25, 0x11D3, { 0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D } } 33060fee10Skettenis 34060fee10Skettenis 35060fee10Skettenis INTERFACE_DECL(_EFI_SIMPLE_NETWORK); 36060fee10Skettenis 37060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 38060fee10Skettenis // 39060fee10Skettenis 40060fee10Skettenis typedef struct { 41060fee10Skettenis // 42060fee10Skettenis // Total number of frames received. Includes frames with errors and 43060fee10Skettenis // dropped frames. 44060fee10Skettenis // 45060fee10Skettenis UINT64 RxTotalFrames; 46060fee10Skettenis 47060fee10Skettenis // 48060fee10Skettenis // Number of valid frames received and copied into receive buffers. 49060fee10Skettenis // 50060fee10Skettenis UINT64 RxGoodFrames; 51060fee10Skettenis 52060fee10Skettenis // 53060fee10Skettenis // Number of frames below the minimum length for the media. 54060fee10Skettenis // This would be <64 for ethernet. 55060fee10Skettenis // 56060fee10Skettenis UINT64 RxUndersizeFrames; 57060fee10Skettenis 58060fee10Skettenis // 59060fee10Skettenis // Number of frames longer than the maxminum length for the 60060fee10Skettenis // media. This would be >1500 for ethernet. 61060fee10Skettenis // 62060fee10Skettenis UINT64 RxOversizeFrames; 63060fee10Skettenis 64060fee10Skettenis // 65060fee10Skettenis // Valid frames that were dropped because receive buffers were full. 66060fee10Skettenis // 67060fee10Skettenis UINT64 RxDroppedFrames; 68060fee10Skettenis 69060fee10Skettenis // 70060fee10Skettenis // Number of valid unicast frames received and not dropped. 71060fee10Skettenis // 72060fee10Skettenis UINT64 RxUnicastFrames; 73060fee10Skettenis 74060fee10Skettenis // 75060fee10Skettenis // Number of valid broadcast frames received and not dropped. 76060fee10Skettenis // 77060fee10Skettenis UINT64 RxBroadcastFrames; 78060fee10Skettenis 79060fee10Skettenis // 80060fee10Skettenis // Number of valid multicast frames received and not dropped. 81060fee10Skettenis // 82060fee10Skettenis UINT64 RxMulticastFrames; 83060fee10Skettenis 84060fee10Skettenis // 85060fee10Skettenis // Number of frames w/ CRC or alignment errors. 86060fee10Skettenis // 87060fee10Skettenis UINT64 RxCrcErrorFrames; 88060fee10Skettenis 89060fee10Skettenis // 90060fee10Skettenis // Total number of bytes received. Includes frames with errors 91060fee10Skettenis // and dropped frames. 92060fee10Skettenis // 93060fee10Skettenis UINT64 RxTotalBytes; 94060fee10Skettenis 95060fee10Skettenis // 96060fee10Skettenis // Transmit statistics. 97060fee10Skettenis // 98060fee10Skettenis UINT64 TxTotalFrames; 99060fee10Skettenis UINT64 TxGoodFrames; 100060fee10Skettenis UINT64 TxUndersizeFrames; 101060fee10Skettenis UINT64 TxOversizeFrames; 102060fee10Skettenis UINT64 TxDroppedFrames; 103060fee10Skettenis UINT64 TxUnicastFrames; 104060fee10Skettenis UINT64 TxBroadcastFrames; 105060fee10Skettenis UINT64 TxMulticastFrames; 106060fee10Skettenis UINT64 TxCrcErrorFrames; 107060fee10Skettenis UINT64 TxTotalBytes; 108060fee10Skettenis 109060fee10Skettenis // 110060fee10Skettenis // Number of collisions detection on this subnet. 111060fee10Skettenis // 112060fee10Skettenis UINT64 Collisions; 113060fee10Skettenis 114060fee10Skettenis // 115060fee10Skettenis // Number of frames destined for unsupported protocol. 116060fee10Skettenis // 117060fee10Skettenis UINT64 UnsupportedProtocol; 118060fee10Skettenis 119060fee10Skettenis } EFI_NETWORK_STATISTICS; 120060fee10Skettenis 121060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 122060fee10Skettenis // 123060fee10Skettenis 124060fee10Skettenis typedef enum { 125060fee10Skettenis EfiSimpleNetworkStopped, 126060fee10Skettenis EfiSimpleNetworkStarted, 127060fee10Skettenis EfiSimpleNetworkInitialized, 128060fee10Skettenis EfiSimpleNetworkMaxState 129060fee10Skettenis } EFI_SIMPLE_NETWORK_STATE; 130060fee10Skettenis 131060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 132060fee10Skettenis // 133060fee10Skettenis 134060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01 135060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02 136060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04 137060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08 138060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10 139060fee10Skettenis 140060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 141060fee10Skettenis // 142060fee10Skettenis 143060fee10Skettenis #define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT 0x01 144060fee10Skettenis #define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02 145060fee10Skettenis #define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT 0x04 146060fee10Skettenis #define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08 147060fee10Skettenis 148060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 149060fee10Skettenis // 150060fee10Skettenis #define MAX_MCAST_FILTER_CNT 16 151060fee10Skettenis typedef struct { 152060fee10Skettenis UINT32 State; 153060fee10Skettenis UINT32 HwAddressSize; 154060fee10Skettenis UINT32 MediaHeaderSize; 155060fee10Skettenis UINT32 MaxPacketSize; 156060fee10Skettenis UINT32 NvRamSize; 157060fee10Skettenis UINT32 NvRamAccessSize; 158060fee10Skettenis UINT32 ReceiveFilterMask; 159060fee10Skettenis UINT32 ReceiveFilterSetting; 160060fee10Skettenis UINT32 MaxMCastFilterCount; 161060fee10Skettenis UINT32 MCastFilterCount; 162060fee10Skettenis EFI_MAC_ADDRESS MCastFilter[MAX_MCAST_FILTER_CNT]; 163060fee10Skettenis EFI_MAC_ADDRESS CurrentAddress; 164060fee10Skettenis EFI_MAC_ADDRESS BroadcastAddress; 165060fee10Skettenis EFI_MAC_ADDRESS PermanentAddress; 166060fee10Skettenis UINT8 IfType; 167060fee10Skettenis BOOLEAN MacAddressChangeable; 168060fee10Skettenis BOOLEAN MultipleTxSupported; 169060fee10Skettenis BOOLEAN MediaPresentSupported; 170060fee10Skettenis BOOLEAN MediaPresent; 171060fee10Skettenis } EFI_SIMPLE_NETWORK_MODE; 172060fee10Skettenis 173060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 174060fee10Skettenis // 175060fee10Skettenis 176060fee10Skettenis typedef 177060fee10Skettenis EFI_STATUS 178060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_START) ( 179060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This 180060fee10Skettenis ); 181060fee10Skettenis 182060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 183060fee10Skettenis // 184060fee10Skettenis 185060fee10Skettenis typedef 186060fee10Skettenis EFI_STATUS 187060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_STOP) ( 188060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This 189060fee10Skettenis ); 190060fee10Skettenis 191060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 192060fee10Skettenis // 193060fee10Skettenis 194060fee10Skettenis typedef 195060fee10Skettenis EFI_STATUS 196060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) ( 197060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 198060fee10Skettenis IN UINTN ExtraRxBufferSize OPTIONAL, 199060fee10Skettenis IN UINTN ExtraTxBufferSize OPTIONAL 200060fee10Skettenis ); 201060fee10Skettenis 202060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 203060fee10Skettenis // 204060fee10Skettenis 205060fee10Skettenis typedef 206060fee10Skettenis EFI_STATUS 207060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_RESET) ( 208060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 209060fee10Skettenis IN BOOLEAN ExtendedVerification 210060fee10Skettenis ); 211060fee10Skettenis 212060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 213060fee10Skettenis // 214060fee10Skettenis 215060fee10Skettenis typedef 216060fee10Skettenis EFI_STATUS 217060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) ( 218060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This 219060fee10Skettenis ); 220060fee10Skettenis 221060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 222060fee10Skettenis // 223060fee10Skettenis 224060fee10Skettenis typedef 225060fee10Skettenis EFI_STATUS 226060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) ( 227060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 228060fee10Skettenis IN UINT32 Enable, 229060fee10Skettenis IN UINT32 Disable, 230060fee10Skettenis IN BOOLEAN ResetMCastFilter, 231060fee10Skettenis IN UINTN MCastFilterCnt OPTIONAL, 232060fee10Skettenis IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL 233060fee10Skettenis ); 234060fee10Skettenis 235060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 236060fee10Skettenis // 237060fee10Skettenis 238060fee10Skettenis typedef 239060fee10Skettenis EFI_STATUS 240060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) ( 241060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 242060fee10Skettenis IN BOOLEAN Reset, 243060fee10Skettenis IN EFI_MAC_ADDRESS *New OPTIONAL 244060fee10Skettenis ); 245060fee10Skettenis 246060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 247060fee10Skettenis // 248060fee10Skettenis 249060fee10Skettenis typedef 250060fee10Skettenis EFI_STATUS 251060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) ( 252060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 253060fee10Skettenis IN BOOLEAN Reset, 254060fee10Skettenis IN OUT UINTN *StatisticsSize OPTIONAL, 255060fee10Skettenis OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL 256060fee10Skettenis ); 257060fee10Skettenis 258060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 259060fee10Skettenis // 260060fee10Skettenis 261060fee10Skettenis typedef 262060fee10Skettenis EFI_STATUS 263060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) ( 264060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 265060fee10Skettenis IN BOOLEAN IPv6, 266060fee10Skettenis IN EFI_IP_ADDRESS *IP, 267060fee10Skettenis OUT EFI_MAC_ADDRESS *MAC 268060fee10Skettenis ); 269060fee10Skettenis 270060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 271060fee10Skettenis // 272060fee10Skettenis 273060fee10Skettenis typedef 274060fee10Skettenis EFI_STATUS 275060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) ( 276060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 277060fee10Skettenis IN BOOLEAN ReadWrite, 278060fee10Skettenis IN UINTN Offset, 279060fee10Skettenis IN UINTN BufferSize, 280060fee10Skettenis IN OUT VOID *Buffer 281060fee10Skettenis ); 282060fee10Skettenis 283060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 284060fee10Skettenis // 285060fee10Skettenis 286060fee10Skettenis typedef 287060fee10Skettenis EFI_STATUS 288060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) ( 289060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 290060fee10Skettenis OUT UINT32 *InterruptStatus OPTIONAL, 291060fee10Skettenis OUT VOID **TxBuf OPTIONAL 292060fee10Skettenis ); 293060fee10Skettenis 294060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 295060fee10Skettenis // 296060fee10Skettenis 297060fee10Skettenis typedef 298060fee10Skettenis EFI_STATUS 299060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) ( 300060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 301060fee10Skettenis IN UINTN HeaderSize, 302060fee10Skettenis IN UINTN BufferSize, 303060fee10Skettenis IN VOID *Buffer, 304060fee10Skettenis IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, 305060fee10Skettenis IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, 306060fee10Skettenis IN UINT16 *Protocol OPTIONAL 307060fee10Skettenis ); 308060fee10Skettenis 309060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 310060fee10Skettenis // 311060fee10Skettenis 312060fee10Skettenis typedef 313060fee10Skettenis EFI_STATUS 314060fee10Skettenis (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) ( 315060fee10Skettenis IN struct _EFI_SIMPLE_NETWORK *This, 316060fee10Skettenis OUT UINTN *HeaderSize OPTIONAL, 317060fee10Skettenis IN OUT UINTN *BufferSize, 318060fee10Skettenis OUT VOID *Buffer, 319060fee10Skettenis OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, 320060fee10Skettenis OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, 321060fee10Skettenis OUT UINT16 *Protocol OPTIONAL 322060fee10Skettenis ); 323060fee10Skettenis 324060fee10Skettenis /////////////////////////////////////////////////////////////////////////////// 325060fee10Skettenis // 326060fee10Skettenis 327060fee10Skettenis #define EFI_SIMPLE_NETWORK_INTERFACE_REVISION 0x00010000 328060fee10Skettenis 329060fee10Skettenis typedef struct _EFI_SIMPLE_NETWORK { 330060fee10Skettenis UINT64 Revision; 331060fee10Skettenis EFI_SIMPLE_NETWORK_START Start; 332060fee10Skettenis EFI_SIMPLE_NETWORK_STOP Stop; 333060fee10Skettenis EFI_SIMPLE_NETWORK_INITIALIZE Initialize; 334060fee10Skettenis EFI_SIMPLE_NETWORK_RESET Reset; 335060fee10Skettenis EFI_SIMPLE_NETWORK_SHUTDOWN Shutdown; 336060fee10Skettenis EFI_SIMPLE_NETWORK_RECEIVE_FILTERS ReceiveFilters; 337060fee10Skettenis EFI_SIMPLE_NETWORK_STATION_ADDRESS StationAddress; 338060fee10Skettenis EFI_SIMPLE_NETWORK_STATISTICS Statistics; 339060fee10Skettenis EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC MCastIpToMac; 340060fee10Skettenis EFI_SIMPLE_NETWORK_NVDATA NvData; 341060fee10Skettenis EFI_SIMPLE_NETWORK_GET_STATUS GetStatus; 342060fee10Skettenis EFI_SIMPLE_NETWORK_TRANSMIT Transmit; 343060fee10Skettenis EFI_SIMPLE_NETWORK_RECEIVE Receive; 344060fee10Skettenis EFI_EVENT WaitForPacket; 345060fee10Skettenis EFI_SIMPLE_NETWORK_MODE *Mode; 346060fee10Skettenis } EFI_SIMPLE_NETWORK; 347060fee10Skettenis 348060fee10Skettenis #endif /* _EFINET_H */ 349