Subversion Repositories HelenOS

Rev

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

  1. #ifndef _EFIPXEBC_H
  2. #define _EFIPXEBC_H
  3.  
  4. /*++
  5.  
  6. Copyright (c) 1998  Intel Corporation
  7.  
  8. Module Name:
  9.  
  10.     efipxebc.h
  11.  
  12. Abstract:
  13.  
  14.     EFI PXE Base Code Protocol
  15.  
  16.  
  17.  
  18. Revision History
  19.  
  20. --*/
  21.  
  22. //
  23. // PXE Base Code protocol
  24. //
  25.  
  26. #define EFI_PXE_BASE_CODE_PROTOCOL \
  27.     { 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
  28.  
  29. INTERFACE_DECL(_EFI_PXE_BASE_CODE);
  30.  
  31. #define DEFAULT_TTL 4
  32. #define DEFAULT_ToS 0
  33. //
  34. // Address definitions
  35. //
  36.  
  37. typedef union {
  38.     UINT32      Addr[4];
  39.     EFI_IPv4_ADDRESS    v4;
  40.     EFI_IPv6_ADDRESS    v6;
  41. } EFI_IP_ADDRESS;
  42.  
  43. typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT;
  44.  
  45. //
  46. // Packet definitions
  47. //
  48.  
  49. typedef struct {
  50.     UINT8                           BootpOpcode;
  51.     UINT8                           BootpHwType;
  52.     UINT8                           BootpHwAddrLen;
  53.     UINT8                           BootpGateHops;
  54.     UINT32                          BootpIdent;
  55.     UINT16                          BootpSeconds;
  56.     UINT16                          BootpFlags;
  57.     UINT8                           BootpCiAddr[4];
  58.     UINT8                           BootpYiAddr[4];
  59.     UINT8                           BootpSiAddr[4];
  60.     UINT8                           BootpGiAddr[4];
  61.     UINT8                           BootpHwAddr[16];
  62.     UINT8                           BootpSrvName[64];
  63.     UINT8                           BootpBootFile[128];
  64.     UINT32                          DhcpMagik;
  65.     UINT8                           DhcpOptions[56];
  66. } EFI_PXE_BASE_CODE_DHCPV4_PACKET;
  67.  
  68. // TBD in EFI v1.1
  69. //typedef struct {
  70. //    UINT8                           reserved;
  71. //} EFI_PXE_BASE_CODE_DHCPV6_PACKET;
  72.  
  73. typedef union {
  74.     UINT8                               Raw[1472];
  75.     EFI_PXE_BASE_CODE_DHCPV4_PACKET     Dhcpv4;
  76. //    EFI_PXE_BASE_CODE_DHCPV6_PACKET     Dhcpv6;
  77. } EFI_PXE_BASE_CODE_PACKET;
  78.  
  79. typedef struct {
  80.     UINT8                   Type;
  81.     UINT8                   Code;
  82.     UINT16                  Checksum;
  83.     union {
  84.         UINT32              reserved;
  85.         UINT32              Mtu;
  86.         UINT32              Pointer;
  87.         struct {
  88.             UINT16          Identifier;
  89.             UINT16          Sequence;
  90.         } Echo;
  91.     } u;
  92.     UINT8                   Data[494];
  93. } EFI_PXE_BASE_CODE_ICMP_ERROR;
  94.  
  95. typedef struct {
  96.     UINT8                   ErrorCode;
  97.     CHAR8                   ErrorString[127];
  98. } EFI_PXE_BASE_CODE_TFTP_ERROR;
  99.  
  100. //
  101. // IP Receive Filter definitions
  102. //
  103. #define EFI_PXE_BASE_CODE_MAX_IPCNT             8
  104. typedef struct {
  105.     UINT8                       Filters;
  106.     UINT8                       IpCnt;
  107.     UINT16                      reserved;
  108.     EFI_IP_ADDRESS              IpList[EFI_PXE_BASE_CODE_MAX_IPCNT];
  109. } EFI_PXE_BASE_CODE_IP_FILTER;
  110.  
  111. #define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP             0x0001
  112. #define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST              0x0002
  113. #define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS            0x0004
  114. #define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST  0x0008
  115.  
  116. //
  117. // ARP Cache definitions
  118. //
  119.  
  120. typedef struct {
  121.     EFI_IP_ADDRESS       IpAddr;
  122.     EFI_MAC_ADDRESS      MacAddr;
  123. } EFI_PXE_BASE_CODE_ARP_ENTRY;
  124.  
  125. typedef struct {
  126.     EFI_IP_ADDRESS       IpAddr;
  127.     EFI_IP_ADDRESS       SubnetMask;
  128.     EFI_IP_ADDRESS       GwAddr;
  129. } EFI_PXE_BASE_CODE_ROUTE_ENTRY;
  130.  
  131. //
  132. // UDP definitions
  133. //
  134.  
  135. #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP    0x0001
  136. #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT  0x0002
  137. #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP   0x0004
  138. #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008
  139. #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER    0x0010
  140. #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT  0x0020
  141.  
  142. //
  143. // Discover() definitions
  144. //
  145.  
  146. #define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP           0  
  147. #define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS        1
  148. #define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM           2
  149. #define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI             3
  150. #define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO          4
  151. #define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD            5
  152. #define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM            6
  153. #define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG    7
  154. #define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW         8
  155. #define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9           9
  156. #define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10          10
  157. #define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11          11
  158. #define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12         12
  159. #define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL      13
  160. #define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT         14
  161. #define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO               15
  162. #define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT             16
  163. //
  164. // 17 through 32767 are reserved
  165. // 32768 through 65279 are for vendor use
  166. // 65280 through 65534 are reserved
  167. //
  168. #define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST             65535
  169.  
  170. #define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK               0x7FFF
  171. #define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL            0x0000
  172.  
  173.  
  174. typedef struct {
  175.     UINT16                      Type;
  176.     BOOLEAN                     AcceptAnyResponse;
  177.     UINT8                       Reserved;
  178.     EFI_IP_ADDRESS              IpAddr;
  179. } EFI_PXE_BASE_CODE_SRVLIST;
  180.  
  181. typedef struct {
  182.     BOOLEAN                     UseMCast;
  183.     BOOLEAN                     UseBCast;
  184.     BOOLEAN                     UseUCast;
  185.     BOOLEAN                     MustUseList;
  186.     EFI_IP_ADDRESS              ServerMCastIp;
  187.     UINT16                      IpCnt;
  188.     EFI_PXE_BASE_CODE_SRVLIST   SrvList[1];
  189. } EFI_PXE_BASE_CODE_DISCOVER_INFO;
  190.  
  191. //
  192. // Mtftp() definitions
  193. //
  194.  
  195. typedef enum {
  196.     EFI_PXE_BASE_CODE_TFTP_FIRST,
  197.     EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE,
  198.     EFI_PXE_BASE_CODE_TFTP_READ_FILE,
  199.     EFI_PXE_BASE_CODE_TFTP_WRITE_FILE,
  200.     EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY,
  201.     EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE,
  202.     EFI_PXE_BASE_CODE_MTFTP_READ_FILE,
  203.     EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY,
  204.     EFI_PXE_BASE_CODE_MTFTP_LAST
  205. } EFI_PXE_BASE_CODE_TFTP_OPCODE;
  206.  
  207. typedef struct {
  208.     EFI_IP_ADDRESS   MCastIp;
  209.     EFI_PXE_BASE_CODE_UDP_PORT  CPort;
  210.     EFI_PXE_BASE_CODE_UDP_PORT  SPort;
  211.     UINT16                      ListenTimeout;
  212.     UINT16                      TransmitTimeout;
  213. } EFI_PXE_BASE_CODE_MTFTP_INFO;
  214.  
  215. //
  216. // PXE Base Code Mode structure
  217. //
  218.  
  219. #define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES       8
  220. #define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES     8
  221.  
  222. typedef struct {
  223.     BOOLEAN                         Started;
  224.     BOOLEAN                         Ipv6Available;
  225.     BOOLEAN                         Ipv6Supported;
  226.     BOOLEAN                         UsingIpv6;
  227.     BOOLEAN                         BisSupported;
  228.     BOOLEAN                         BisDetected;
  229.     BOOLEAN                         AutoArp;
  230.     BOOLEAN                         SendGUID;
  231.     BOOLEAN                         DhcpDiscoverValid;
  232.     BOOLEAN                         DhcpAckReceived;
  233.     BOOLEAN                         ProxyOfferReceived;
  234.     BOOLEAN                         PxeDiscoverValid;
  235.     BOOLEAN                         PxeReplyReceived;
  236.     BOOLEAN                         PxeBisReplyReceived;
  237.     BOOLEAN                         IcmpErrorReceived;
  238.     BOOLEAN                         TftpErrorReceived;
  239.     BOOLEAN                         MakeCallbacks;
  240.     UINT8                           TTL;
  241.     UINT8                           ToS;
  242.     EFI_IP_ADDRESS                  StationIp;
  243.     EFI_IP_ADDRESS                  SubnetMask;
  244.     EFI_PXE_BASE_CODE_PACKET        DhcpDiscover;
  245.     EFI_PXE_BASE_CODE_PACKET        DhcpAck;
  246.     EFI_PXE_BASE_CODE_PACKET        ProxyOffer;
  247.     EFI_PXE_BASE_CODE_PACKET        PxeDiscover;
  248.     EFI_PXE_BASE_CODE_PACKET        PxeReply;
  249.     EFI_PXE_BASE_CODE_PACKET        PxeBisReply;
  250.     EFI_PXE_BASE_CODE_IP_FILTER     IpFilter;
  251.     UINT32                          ArpCacheEntries;
  252.     EFI_PXE_BASE_CODE_ARP_ENTRY     ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES];
  253.     UINT32                          RouteTableEntries;
  254.     EFI_PXE_BASE_CODE_ROUTE_ENTRY   RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES];
  255.     EFI_PXE_BASE_CODE_ICMP_ERROR    IcmpError;
  256.     EFI_PXE_BASE_CODE_TFTP_ERROR    TftpError;
  257. } EFI_PXE_BASE_CODE_MODE;
  258.  
  259. //
  260. // PXE Base Code Interface Function definitions
  261. //
  262.  
  263. typedef
  264. EFI_STATUS
  265. (EFIAPI *EFI_PXE_BASE_CODE_START) (
  266.     IN struct _EFI_PXE_BASE_CODE    *This,
  267.     IN BOOLEAN                      UseIpv6
  268.     );
  269.  
  270. typedef
  271. EFI_STATUS
  272. (EFIAPI *EFI_PXE_BASE_CODE_STOP) (
  273.     IN struct _EFI_PXE_BASE_CODE    *This
  274.     );
  275.  
  276. typedef
  277. EFI_STATUS
  278. (EFIAPI *EFI_PXE_BASE_CODE_DHCP) (
  279.     IN struct _EFI_PXE_BASE_CODE    *This,
  280.     IN BOOLEAN                      SortOffers
  281.     );
  282.  
  283. typedef
  284. EFI_STATUS
  285. (EFIAPI *EFI_PXE_BASE_CODE_DISCOVER) (
  286.     IN struct _EFI_PXE_BASE_CODE            *This,
  287.     IN UINT16                               Type,
  288.     IN UINT16                               *Layer,
  289.     IN BOOLEAN                              UseBis,
  290.     IN OUT EFI_PXE_BASE_CODE_DISCOVER_INFO  *Info   OPTIONAL
  291.     );
  292.  
  293. typedef
  294. EFI_STATUS
  295. (EFIAPI *EFI_PXE_BASE_CODE_MTFTP) (
  296.     IN struct _EFI_PXE_BASE_CODE        *This,
  297.     IN EFI_PXE_BASE_CODE_TFTP_OPCODE    Operation,
  298.     IN OUT VOID                         *BufferPtr  OPTIONAL,
  299.     IN BOOLEAN                          Overwrite,
  300.     IN OUT UINTN                        *BufferSize,
  301.     IN UINTN                            *BlockSize  OPTIONAL,
  302.     IN EFI_IP_ADDRESS                   *ServerIp,
  303.     IN UINT8                            *Filename,
  304.     IN EFI_PXE_BASE_CODE_MTFTP_INFO     *Info       OPTIONAL,
  305.     IN BOOLEAN                          DontUseBuffer
  306.     );
  307.  
  308. typedef
  309. EFI_STATUS
  310. (EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE) (
  311.     IN struct _EFI_PXE_BASE_CODE        *This,
  312.     IN UINT16                           OpFlags,
  313.     IN EFI_IP_ADDRESS                   *DestIp,
  314.     IN EFI_PXE_BASE_CODE_UDP_PORT       *DestPort,
  315.     IN EFI_IP_ADDRESS                   *GatewayIp,  OPTIONAL
  316.     IN EFI_IP_ADDRESS                   *SrcIp,      OPTIONAL
  317.     IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *SrcPort,    OPTIONAL
  318.     IN UINTN                            *HeaderSize, OPTIONAL
  319.     IN VOID                             *HeaderPtr,  OPTIONAL
  320.     IN UINTN                            *BufferSize,
  321.     IN VOID                             *BufferPtr
  322.     );
  323.  
  324. typedef
  325. EFI_STATUS
  326. (EFIAPI *EFI_PXE_BASE_CODE_UDP_READ) (
  327.     IN struct _EFI_PXE_BASE_CODE        *This,
  328.     IN UINT16                           OpFlags,
  329.     IN OUT EFI_IP_ADDRESS               *DestIp,      OPTIONAL
  330.     IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *DestPort,    OPTIONAL
  331.     IN OUT EFI_IP_ADDRESS               *SrcIp,       OPTIONAL
  332.     IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *SrcPort,     OPTIONAL
  333.     IN UINTN                            *HeaderSize,  OPTIONAL
  334.     IN VOID                             *HeaderPtr,   OPTIONAL
  335.     IN OUT UINTN                        *BufferSize,
  336.     IN VOID                             *BufferPtr
  337.     );
  338.  
  339. typedef
  340. EFI_STATUS
  341. (EFIAPI *EFI_PXE_BASE_CODE_SET_IP_FILTER) (
  342.     IN struct _EFI_PXE_BASE_CODE    *This,
  343.     IN EFI_PXE_BASE_CODE_IP_FILTER  *NewFilter
  344.     );
  345.  
  346. typedef
  347. EFI_STATUS
  348. (EFIAPI *EFI_PXE_BASE_CODE_ARP) (
  349.     IN struct _EFI_PXE_BASE_CODE    *This,
  350.     IN EFI_IP_ADDRESS               *IpAddr,      
  351.     IN EFI_MAC_ADDRESS              *MacAddr      OPTIONAL
  352.     );
  353.  
  354. typedef
  355. EFI_STATUS
  356. (EFIAPI *EFI_PXE_BASE_CODE_SET_PARAMETERS) (
  357.     IN struct _EFI_PXE_BASE_CODE    *This,
  358.     IN BOOLEAN                      *NewAutoArp,    OPTIONAL
  359.     IN BOOLEAN                      *NewSendGUID,   OPTIONAL
  360.     IN UINT8                        *NewTTL,        OPTIONAL
  361.     IN UINT8                        *NewToS,        OPTIONAL
  362.     IN BOOLEAN                      *NewMakeCallback    OPTIONAL
  363.     );
  364.  
  365. typedef
  366. EFI_STATUS
  367. (EFIAPI *EFI_PXE_BASE_CODE_SET_STATION_IP) (
  368.     IN struct _EFI_PXE_BASE_CODE    *This,
  369.     IN EFI_IP_ADDRESS               *NewStationIp,  OPTIONAL
  370.     IN EFI_IP_ADDRESS               *NewSubnetMask  OPTIONAL
  371.     );
  372.  
  373. typedef
  374. EFI_STATUS
  375. (EFIAPI *EFI_PXE_BASE_CODE_SET_PACKETS) (
  376.     IN struct _EFI_PXE_BASE_CODE    *This,
  377.     BOOLEAN                         *NewDhcpDiscoverValid,  OPTIONAL
  378.     BOOLEAN                         *NewDhcpAckReceived,    OPTIONAL
  379.     BOOLEAN                         *NewProxyOfferReceived, OPTIONAL
  380.     BOOLEAN                         *NewPxeDiscoverValid,   OPTIONAL
  381.     BOOLEAN                         *NewPxeReplyReceived,   OPTIONAL
  382.     BOOLEAN                         *NewPxeBisReplyReceived,OPTIONAL
  383.     IN EFI_PXE_BASE_CODE_PACKET     *NewDhcpDiscover, OPTIONAL
  384.     IN EFI_PXE_BASE_CODE_PACKET     *NewDhcpAck,      OPTIONAL
  385.     IN EFI_PXE_BASE_CODE_PACKET     *NewProxyOffer,   OPTIONAL
  386.     IN EFI_PXE_BASE_CODE_PACKET     *NewPxeDiscover,  OPTIONAL
  387.     IN EFI_PXE_BASE_CODE_PACKET     *NewPxeReply,     OPTIONAL
  388.     IN EFI_PXE_BASE_CODE_PACKET     *NewPxeBisReply   OPTIONAL
  389.     );
  390.  
  391. //
  392. // PXE Base Code Protocol structure
  393. //
  394.  
  395. #define EFI_PXE_BASE_CODE_INTERFACE_REVISION    0x00010000
  396.  
  397. typedef struct _EFI_PXE_BASE_CODE {
  398.     UINT64                              Revision;
  399.     EFI_PXE_BASE_CODE_START             Start;
  400.     EFI_PXE_BASE_CODE_STOP              Stop;
  401.     EFI_PXE_BASE_CODE_DHCP              Dhcp;
  402.     EFI_PXE_BASE_CODE_DISCOVER          Discover;
  403.     EFI_PXE_BASE_CODE_MTFTP             Mtftp;
  404.     EFI_PXE_BASE_CODE_UDP_WRITE         UdpWrite;
  405.     EFI_PXE_BASE_CODE_UDP_READ          UdpRead;
  406.     EFI_PXE_BASE_CODE_SET_IP_FILTER     SetIpFilter;
  407.     EFI_PXE_BASE_CODE_ARP               Arp;
  408.     EFI_PXE_BASE_CODE_SET_PARAMETERS    SetParameters;
  409.     EFI_PXE_BASE_CODE_SET_STATION_IP    SetStationIp;
  410.     EFI_PXE_BASE_CODE_SET_PACKETS       SetPackets;
  411.     EFI_PXE_BASE_CODE_MODE              *Mode;
  412. } EFI_PXE_BASE_CODE;
  413.  
  414. //
  415. // Call Back Definitions
  416. //
  417.  
  418. #define EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL \
  419.     { 0x245dca21, 0xfb7b, 0x11d3, {0x8f, 0x01, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
  420.  
  421. //
  422. // Revision Number
  423. //
  424.  
  425. #define EFI_PXE_BASE_CODE_CALLBACK_INTERFACE_REVISION   0x00010000
  426.  
  427. INTERFACE_DECL(_EFI_PXE_BASE_CODE_CALLBACK);
  428.  
  429. typedef enum {
  430.     EFI_PXE_BASE_CODE_FUNCTION_FIRST,
  431.     EFI_PXE_BASE_CODE_FUNCTION_DHCP,
  432.     EFI_PXE_BASE_CODE_FUNCTION_DISCOVER,
  433.     EFI_PXE_BASE_CODE_FUNCTION_MTFTP,
  434.     EFI_PXE_BASE_CODE_FUNCTION_UDP_WRITE,
  435.     EFI_PXE_BASE_CODE_FUNCTION_UDP_READ,
  436.     EFI_PXE_BASE_CODE_FUNCTION_ARP,
  437.     EFI_PXE_BASE_CODE_FUNCTION_IGMP,
  438.     EFI_PXE_BASE_CODE_PXE_FUNCTION_LAST
  439. } EFI_PXE_BASE_CODE_FUNCTION;
  440.  
  441. typedef enum {
  442.     EFI_PXE_BASE_CODE_CALLBACK_STATUS_FIRST,
  443.     EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE,
  444.     EFI_PXE_BASE_CODE_CALLBACK_STATUS_ABORT,
  445.     EFI_PXE_BASE_CODE_CALLBACK_STATUS_LAST
  446. } EFI_PXE_BASE_CODE_CALLBACK_STATUS;
  447.  
  448. typedef
  449. EFI_PXE_BASE_CODE_CALLBACK_STATUS
  450. (EFIAPI *EFI_PXE_CALLBACK) (
  451.     IN struct _EFI_PXE_BASE_CODE_CALLBACK   *This,
  452.     IN EFI_PXE_BASE_CODE_FUNCTION           Function,
  453.     IN BOOLEAN                              Received,
  454.     IN UINT32                               PacketLen,
  455.     IN EFI_PXE_BASE_CODE_PACKET             *Packet     OPTIONAL
  456.     );
  457.  
  458. typedef struct _EFI_PXE_BASE_CODE_CALLBACK {
  459.     UINT64                      Revision;
  460.     EFI_PXE_CALLBACK            Callback;
  461. } EFI_PXE_BASE_CODE_CALLBACK;
  462.  
  463. #endif /* _EFIPXEBC_H */
  464.