Subversion Repositories HelenOS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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