Home | History | Annotate | Line # | Download | only in inc
efinet.h revision 1.1
      1 /*	$NetBSD: efinet.h,v 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