#ifndef EFI_PROTOCOLS_NETWORK_H #define EFI_PROTOCOLS_NETWORK_H //// // Simple Network Protocol /// #define EFI_SIMPLE_NETWORK_PROTOCOL_GUID {0xa19832b9,0xac25,0x11d3, {0x9a,0x2d,0x00,0x90,0x27,0x3f,0xc1,0x4d}} #define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000 #define MAX_MCAST_FILTER_CNT 16 // Bit Mask Values for ReceiveFilterString #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 // Interrupt Bit Mask Settings for InterruptStatus #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 typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL EFI_SIMPLE_NETWORK_PROTOCOL; typedef enum { EfiSimpleNetworkStopped, EfiSimpleNetworkStarted, EfiSimpleNetworkInitialized, EfiSimpleNetworkMaxState } EFI_SIMPLE_NETWORK_STATE; typedef struct { EFI_UINT32 State; EFI_UINT32 HwAddressSize; EFI_UINT32 MediaHeaderSize; EFI_UINT32 MaxPacketSize; EFI_UINT32 NvRamSize; EFI_UINT32 NvRamAccessSize; EFI_UINT32 ReceiveFilterMask; EFI_UINT32 ReceiveFilterSetting; EFI_UINT32 MaxMCastFilterCount; EFI_UINT32 MCastFilterCount; EFI_MAC_ADDRESS MCastFilter[MAX_MCAST_FILTER_CNT]; EFI_MAC_ADDRESS CurrentAddress; EFI_MAC_ADDRESS BroadcastAddress; EFI_MAC_ADDRESS PermanentAddress; EFI_UINT8 IfType; EFI_BOOLEAN MacAddressChangeable; EFI_BOOLEAN MultipleTxSupported; EFI_BOOLEAN MediaPresentSupported; EFI_BOOLEAN MediaPresent; } EFI_SIMPLE_NETWORK_MODE; typedef struct { EFI_UINT64 RxTotalFrames; EFI_UINT64 RxGoodFrames; EFI_UINT64 RxUndersizeFrames; EFI_UINT64 RxOversizeFrames; EFI_UINT64 RxDroppedFrames; EFI_UINT64 RxUnicastFrames; EFI_UINT64 RxBroadcastFrames; EFI_UINT64 RxMulticastFrames; EFI_UINT64 RxCrcErrorFrames; EFI_UINT64 RxTotalBytes; EFI_UINT64 TxTotalFrames; EFI_UINT64 TxGoodFrames; EFI_UINT64 TxUndersizeFrames; EFI_UINT64 TxOversizeFrames; EFI_UINT64 TxDroppedFrames; EFI_UINT64 TxUnicastFrames; EFI_UINT64 TxBroadcastFrames; EFI_UINT64 TxMulticastFrames; EFI_UINT64 TxCrcErrorFrames; EFI_UINT64 TxTotalBytes; EFI_UINT64 Collisions; EFI_UINT64 UnsupportedProtocol; EFI_UINT64 RxDuplicatedFrames; EFI_UINT64 RxDecryptErrorFrames; EFI_UINT64 TxErrorFrames; EFI_UINT64 TxRetryFrames; } EFI_NETWORK_STATISTICS; typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_START)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_STOP)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN EFI_UINTN ExtraRxBufferSize OPTIONAL, IN EFI_UINTN ExtraTxBufferSize OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_RESET)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN EFI_BOOLEAN ExtendedVerification ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN EFI_UINT32 Enable, IN EFI_UINT32 Disable, IN EFI_BOOLEAN ResetMCastFilter, IN EFI_UINTN MCastFilterCnt OPTIONAL, IN EFI_MAC_ADDRESS MCastFilter OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN EFI_BOOLEAN Reset, IN EFI_MAC_ADDRESS *New OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN EFI_BOOLEAN Reset, IN OUT EFI_UINTN *StatisticsSize OPTIONAL, OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN EFI_BOOLEAN IPv6, IN EFI_IP_ADDRESS *IP, OUT EFI_MAC_ADDRESS *MAC ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_NVDATA)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN EFI_BOOLEAN ReadWrite, IN EFI_UINTN Offset, IN EFI_UINTN BufferSize, IN OUT VOID *Buffer ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, OUT EFI_UINT32 *InterruptStatus OPTIONAL, OUT VOID **TxBuf OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN EFI_UINTN HeaderSize, IN EFI_UINTN BufferSize, IN VOID *Buffer, IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, IN EFI_UINT16 *Protocol OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, OUT EFI_UINTN *HeaderSize OPTIONAL, IN OUT EFI_UINTN *BufferSize, OUT VOID *Buffer, OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, OUT EFI_UINT16 *Protocol OPTIONAL ); typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL { EFI_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_PROTOCOL; //// // Network Interface Identifier Protocol /// #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID_31 {0x1aced566, 0x76ed, 0x4218, {0xbc, 0x81, 0x76, 0x7f, 0x1f, 0x97, 0x7a, 0x89}} #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION 0x00020000 typedef struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL; typedef enum { EfiNetworkInterfaceUndi = 1 } EFI_NETWORK_INTERFACE_TYPE; typedef struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL { EFI_UINT64 Revision; EFI_UINT64 Id; EFI_UINT64 ImageAddr; EFI_UINT32 ImageSize; CHAR8 StringId[4]; EFI_UINT8 Type; EFI_UINT8 MajorVer; EFI_UINT8 MinorVer; EFI_BOOLEAN Ipv6Supported; EFI_UINT16 IfNum; } EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL; //// // PXE Base Code Protocol /// #define EFI_PXE_BASE_CODE_PROTOCOL_GUID {0x03c4e603,0xac28,0x11d3, {0x9a,0x2d,0x00,0x90,0x27,0x3f,0xc1,0x4d}} #define EFI_PXE_BASE_CODE_PROTOCOL_REVISION 0x00010000 // Maximum ARP and Route Entries #define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES 8 #define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8 #define EFI_PXE_BASE_CODE_MAX_IPCNT 8 #define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP 0x0001 #define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST 0x0002 #define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS 0x0004 #define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008 #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP 0x0001 #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT 0x0002 #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP 0x0004 #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008 #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER 0x0010 #define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT 0x0020 #define DEFAULT_TTL 16 #define DEFAULT_ToS 0 // Bootstrap Types #define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP 0 #define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS 1 #define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM 2 #define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI 3 #define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO 4 #define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD 5 #define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM 6 #define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG 7 #define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW 8 #define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9 9 #define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10 10 #define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11 11 #define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12 12 #define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL 13 #define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT 14 #define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO 15 #define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT 16 #define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST 65535 #define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK 0x7FFF #define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL 0x0000 typedef struct _EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE_PROTOCOL; typedef EFI_UINT16 EFI_PXE_BASE_CODE_UDP_PORT; typedef enum { EFI_PXE_BASE_CODE_TFTP_FIRST, EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE, EFI_PXE_BASE_CODE_TFTP_READ_FILE, EFI_PXE_BASE_CODE_TFTP_WRITE_FILE, EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY, EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE, EFI_PXE_BASE_CODE_MTFTP_READ_FILE, EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY, EFI_PXE_BASE_CODE_MTFTP_LAST } EFI_PXE_BASE_CODE_TFTP_OPCODE; typedef struct { EFI_UINT8 Filters; EFI_UINT8 IpCnt; EFI_UINT16 Reserved; EFI_IP_ADDRESS IpList[EFI_PXE_BASE_CODE_MAX_IPCNT]; } EFI_PXE_BASE_CODE_IP_FILTER; typedef struct { EFI_UINT8 BootpOpcode; EFI_UINT8 BootpHwType; EFI_UINT8 BootpHwAddrLen; EFI_UINT8 BootpGateHops; EFI_UINT32 BootpIdent; EFI_UINT16 BootpSeconds; EFI_UINT16 BootpFlags; EFI_UINT8 BootpCiAddr[4]; EFI_UINT8 BootpYiAddr[4]; EFI_UINT8 BootpSiAddr[4]; EFI_UINT8 BootpGiAddr[4]; EFI_UINT8 BootpHwAddr[16]; EFI_UINT8 BootpSrvName[64]; EFI_UINT8 BootpBootFile[128]; EFI_UINT32 DhcpMagik; EFI_UINT8 DhcpOptions[56]; } EFI_PXE_BASE_CODE_DHCPV4_PACKET; typedef struct { EFI_UINT32 MessageType : 8; EFI_UINT32 TransactionId : 24; EFI_UINT8 DhcpOptions[1024]; } EFI_PXE_BASE_CODE_DHCPV6_PACKET; typedef union { EFI_UINT8 Raw[1472]; EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4; EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6; } EFI_PXE_BASE_CODE_PACKET; typedef struct { EFI_UINT8 Type; EFI_UINT8 Code; EFI_UINT16 Checksum; union { EFI_UINT32 reserved; EFI_UINT32 Mtu; EFI_UINT32 Pointer; struct { EFI_UINT16 Identifier; EFI_UINT16 Sequence; } Echo; } u; EFI_UINT8 Data[494]; } EFI_PXE_BASE_CODE_ICMP_ERROR; typedef struct { EFI_UINT8 ErrorCode; CHAR8 ErrorString[127]; } EFI_PXE_BASE_CODE_TFTP_ERROR; typedef struct { EFI_IP_ADDRESS IpAddr; EFI_MAC_ADDRESS MacAddr; } EFI_PXE_BASE_CODE_ARP_ENTRY; typedef struct { EFI_IP_ADDRESS IpAddr; EFI_IP_ADDRESS SubnetMask; EFI_IP_ADDRESS GwAddr; } EFI_PXE_BASE_CODE_ROUTE_ENTRY; typedef struct { EFI_UINT16 Type; EFI_BOOLEAN AcceptAnyResponse; EFI_UINT8 reserved; EFI_IP_ADDRESS IpAddr; } EFI_PXE_BASE_CODE_SRVLIST; typedef struct { EFI_BOOLEAN UseMCast; EFI_BOOLEAN UseBCast; EFI_BOOLEAN UseUCast; EFI_BOOLEAN MustUseList; EFI_IP_ADDRESS ServerMCastIp; EFI_UINT16 IpCnt; EFI_PXE_BASE_CODE_SRVLIST SrvList[1]; } EFI_PXE_BASE_CODE_DISCOVER_INFO; typedef struct { EFI_BOOLEAN Started; EFI_BOOLEAN Ipv6Available; EFI_BOOLEAN Ipv6Supported; EFI_BOOLEAN UsingIpv6; EFI_BOOLEAN BisSupported; EFI_BOOLEAN BisDetected; EFI_BOOLEAN AutoArp; EFI_BOOLEAN SendGUID; EFI_BOOLEAN DhcpDiscoverValid; EFI_BOOLEAN DhcpAckReceivd; EFI_BOOLEAN ProxyOfferReceived; EFI_BOOLEAN PxeDiscoverValid; EFI_BOOLEAN PxeReplyReceived; EFI_BOOLEAN PxeBisReplyReceived; EFI_BOOLEAN IcmpErrorReceived; EFI_BOOLEAN TftpErrorReceived; EFI_BOOLEAN MakeCallbacks; EFI_UINT8 TTL; EFI_UINT8 ToS; EFI_IP_ADDRESS StationIp; EFI_IP_ADDRESS SubnetMask; EFI_PXE_BASE_CODE_PACKET DhcpDiscover; EFI_PXE_BASE_CODE_PACKET DhcpAck; EFI_PXE_BASE_CODE_PACKET ProxyOffer; EFI_PXE_BASE_CODE_PACKET PxeDiscover; EFI_PXE_BASE_CODE_PACKET PxeReply; EFI_PXE_BASE_CODE_PACKET PxeBisReply; EFI_PXE_BASE_CODE_IP_FILTER IpFilter; EFI_UINT32 ArpCacheEntries; EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES]; EFI_UINT32 RouteTableEntries; EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES]; EFI_PXE_BASE_CODE_ICMP_ERROR IcmpError; EFI_PXE_BASE_CODE_TFTP_ERROR TftpError; } EFI_PXE_BASE_CODE_MODE; typedef struct { EFI_IP_ADDRESS MCastIp; EFI_PXE_BASE_CODE_UDP_PORT CPort; EFI_PXE_BASE_CODE_UDP_PORT SPort; EFI_UINT16 ListenTimeout; EFI_UINT16 TransmitTimeout; } EFI_PXE_BASE_CODE_MTFTP_INFO; typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_START)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_BOOLEAN UseIpv6 ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_STOP)( IN EFI_PXE_BASE_CODE_PROTOCOL *This ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_DHCP) ( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_BOOLEAN SortOffers ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_DISCOVER)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_UINT16 Type, IN EFI_UINT16 *Layer, IN EFI_BOOLEAN UseBis, IN EFI_PXE_BASE_CODE_DISCOVER_INFO *Info OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_MTFTP)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation, IN OUT VOID *BufferPtr OPTIONAL, IN EFI_BOOLEAN Overwrite, IN OUT EFI_UINT64 *BufferSize, IN EFI_UINTN *BlockSize OPTIONAL, IN EFI_IP_ADDRESS *ServerIp, IN CHAR8 *Filename OPTIONAL, IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL, IN EFI_BOOLEAN DontUseBuffer ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_UINT16 OpFlags, IN EFI_IP_ADDRESS *DestIp, IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort, IN EFI_IP_ADDRESS *GatewayIp OPTIONAL, IN EFI_IP_ADDRESS *SrcIp OPTIONAL, IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL, IN EFI_UINTN *HeaderSize OPTIONAL, IN VOID *HeaderPtr OPTIONAL, IN EFI_UINTN *BufferSize, IN VOID *BufferPtr ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_UDP_READ)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_UINT16 OpFlags, IN OUT EFI_IP_ADDRESS *DestIp OPTIONAL, IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort OPTIONAL, IN OUT EFI_IP_ADDRESS *SrcIp OPTIONAL, IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL, IN EFI_UINTN *HeaderSize OPTIONAL, IN VOID *HeaderPtr OPTIONAL, IN OUT EFI_UINTN *BufferSize, IN VOID *BufferPtr ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_SET_IP_FILTER)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_ARP)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_IP_ADDRESS *IpAddr, IN EFI_MAC_ADDRESS *MacAddr OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_SET_PARAMETERS)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_BOOLEAN *NewAutoArp OPTIONAL, IN EFI_BOOLEAN *NewSendGUID OPTIONAL, IN EFI_UINT8 *NewTTL OPTIONAL, IN EFI_UINT8 *NewToS OPTIONAL, IN EFI_BOOLEAN *NewMakeCallback OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_SET_STATION_IP)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_IP_ADDRESS *NewStationIp OPTIONAL, IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_SET_PACKETS)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_BOOLEAN *NewDhcpDiscoverValid, OPTIONAL IN EFI_BOOLEAN *NewDhcpAckReceived, OPTIONAL IN EFI_BOOLEAN *NewProxyOfferReceived, OPTIONAL IN EFI_BOOLEAN *NewPxeDiscoverValid, OPTIONAL IN EFI_BOOLEAN *NewPxeReplyReceived, OPTIONAL IN EFI_BOOLEAN *NewPxeBisReplyReceived, OPTIONAL IN EFI_PXE_BASE_CODE_PACKET *NewDhcpDiscover, OPTIONAL IN EFI_PXE_BASE_CODE_PACKET *NewDhcpAck, OPTIONAL IN EFI_PXE_BASE_CODE_PACKET *NewProxyOffer, OPTIONAL IN EFI_PXE_BASE_CODE_PACKET *NewPxeDiscover, OPTIONAL IN EFI_PXE_BASE_CODE_PACKET *NewPxeReply, OPTIONAL IN EFI_PXE_BASE_CODE_PACKET *NewPxeBisReply OPTIONAL ); typedef struct _EFI_PXE_BASE_CODE_PROTOCOL { EFI_UINT64 Revision; EFI_PXE_BASE_CODE_START Start; EFI_PXE_BASE_CODE_STOP Stop; EFI_PXE_BASE_CODE_DHCP Dhcp; EFI_PXE_BASE_CODE_DISCOVER Discover; EFI_PXE_BASE_CODE_MTFTP Mtftp; EFI_PXE_BASE_CODE_UDP_WRITE UdpWrite; EFI_PXE_BASE_CODE_UDP_READ UdpRead; EFI_PXE_BASE_CODE_SET_IP_FILTER SetIpFilter; EFI_PXE_BASE_CODE_ARP Arp; EFI_PXE_BASE_CODE_SET_PARAMETERS SetParameters; EFI_PXE_BASE_CODE_SET_STATION_IP SetStationIp; EFI_PXE_BASE_CODE_SET_PACKETS SetPackets; EFI_PXE_BASE_CODE_MODE *Mode; } EFI_PXE_BASE_CODE_PROTOCOL; //// // Boot Integrity Services Protocol /// #define EFI_BIS_PROTOCOL_GUID {0x0b64aab0,0x5429,0x11d4, {0x98,0x16,0x00,0xa0,0xc9,0x1f,0xad,0xcf}} #define BOOT_OBJECT_AUTHORIZATION_PARMSET_GUID {0xedd35e31,0x7b9,0x11d2, {0x83,0xa3,0x0,0xa0,0xc9,0x1f,0xad,0xcf}} #define BIS_CURRENT_VERSION_MAJOR BIS_VERSION_1 #define BIS_VERSION_1 1 #define BIS_ALG_DSA (41) //CSSM_ALGID_DSA #define BIS_ALG_RSA_MD5 (42) //CSSM_ALGID_MD5_WITH_RSA #define BIS_CERT_ID_DSA BIS_ALG_DSA //CSSM_ALGID_DSA #define BIS_CERT_ID_RSA_MD5 BIS_ALG_RSA_MD5 //CSSM_ALGID_MD5_WITH_RSA #define BIS_CERT_ID_MASK (0xFF7F7FFF) #define BIS_GET_SIGINFO_COUNT(BisDataPtr) ((BisDataPtr)->Length/sizeof(EFI_BIS_SIGNATURE_INFO)) #define BIS_GET_SIGINFO_ARRAY(BisDataPtr) ((EFI_BIS_SIGNATURE_INFO*)(BisDataPtr)->Data) typedef struct _EFI_BIS_PROTOCOL EFI_BIS_PROTOCOL; typedef VOID *BIS_APPLICATION_HANDLE; typedef EFI_UINT32 BIS_CERT_ID; typedef EFI_UINT16 BIS_ALG_ID; typedef struct { EFI_UINT32 Major; EFI_UINT32 Minor; } EFI_BIS_VERSION; typedef struct { EFI_UINT32 Length; EFI_UINT8 *Data; } EFI_BIS_DATA; typedef struct { BIS_CERT_ID CertificateID; BIS_ALG_ID AlgorithmID; EFI_UINT16 KeyLength; } EFI_BIS_SIGNATURE_INFO; typedef EFI_STATUS (EFIAPI *EFI_BIS_INITIALIZE)( IN EFI_BIS_PROTOCOL *This, OUT BIS_APPLICATION_HANDLE *AppHandle, IN OUT EFI_BIS_VERSION *InterfaceVersion, IN EFI_BIS_DATA *TargetAddress ); typedef EFI_STATUS (EFIAPI *EFI_BIS_SHUTDOWN)( IN BIS_APPLICATION_HANDLE AppHandle ); typedef EFI_STATUS (EFIAPI *EFI_BIS_FREE)( IN BIS_APPLICATION_HANDLE AppHandle, IN EFI_BIS_DATA *ToFree ); typedef EFI_STATUS (EFIAPI *EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_CERTIFICATE)( IN BIS_APPLICATION_HANDLE AppHandle, OUT EFI_BIS_DATA **Certificate ); typedef EFI_STATUS (EFIAPI *EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_CHECKFLAG)( IN BIS_APPLICATION_HANDLE AppHandle, OUT EFI_BOOLEAN *CheckIsRequired ); typedef EFI_STATUS (EFIAPI *EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_UPDATE_TOKEN)( IN BIS_APPLICATION_HANDLE AppHandle, OUT EFI_BIS_DATA **UpdateToken ); typedef EFI_STATUS (EFIAPI *EFI_BIS_GET_SIGNATURE_INFO)( IN BIS_APPLICATION_HANDLE AppHandle, OUT EFI_BIS_DATA **SignatureInfo ); typedef EFI_STATUS (EFIAPI *EFI_BIS_UPDATE_BOOT_OBJECT_AUTHORIZATION)( IN BIS_APPLICATION_HANDLE AppHandle, IN EFI_BIS_DATA *RequestCredential, OUT EFI_BIS_DATA **NewUpdateToken ); typedef EFI_STATUS (EFIAPI *EFI_BIS_VERIFY_BOOT_OBJECT)( IN BIS_APPLICATION_HANDLE AppHandle, IN EFI_BIS_DATA *Credentials, IN EFI_BIS_DATA *DataObject, OUT EFI_BOOLEAN *IsVerified ); typedef EFI_STATUS (EFIAPI *EFI_BIS_VERIFY_OBJECT_WITH_CREDENTIAL)( IN BIS_APPLICATION_HANDLE AppHandle, IN EFI_BIS_DATA *Credentials, IN EFI_BIS_DATA *DataObject, IN EFI_BIS_DATA *SectionName, IN EFI_BIS_DATA *AuthorityCertificate, OUT EFI_BOOLEAN *IsVerified ); typedef struct _EFI_BIS_PROTOCOL { EFI_BIS_INITIALIZE Initialize; EFI_BIS_SHUTDOWN Shutdown; EFI_BIS_FREE Free; EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_CERTIFICATE GetBootObjectAuthorizationCertificate; EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_CHECKFLAG GetBootObjectAuthorizationCheckFlag; EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_UPDATE_TOKEN GetBootObjectAuthorizationUpdateToken; EFI_BIS_GET_SIGNATURE_INFO GetSignatureInfo; EFI_BIS_UPDATE_BOOT_OBJECT_AUTHORIZATION UpdateBootObjectAuthorization; EFI_BIS_VERIFY_BOOT_OBJECT VerifyBootObject; EFI_BIS_VERIFY_OBJECT_WITH_CREDENTIAL VerifyObjectWithCredential; } EFI_BIS_PROTOCOL; //// // HTTP Boot Callback Protocol /// #define EFI_HTTP_BOOT_CALLBACK_PROTOCOL_GUID {0xba23b311,0x343d,0x11e6, {0x91,0x85,0x58,0x20,0xb1,0xd6,0x52,0x99}} typedef struct _EFI_HTTP_BOOT_CALLBACK_PROTOCOL EFI_HTTP_BOOT_CALLBACK_PROTOCOL; typedef enum { HttpBootDhcp4, HttpBootDhcp6, HttpBootHttpRequest, HttpBootHttpResponse, HttpBootHttpEntityBody, HttpBootTypeMax } EFI_HTTP_BOOT_CALLBACK_DATA_TYPE; typedef EFI_STATUS (EFIAPI *EFI_HTTP_BOOT_CALLBACK)( IN EFI_HTTP_BOOT_CALLBACK_PROTOCOL *This, IN EFI_HTTP_BOOT_CALLBACK_DATA_TYPE DataType, IN EFI_BOOLEAN Received, IN EFI_UINT32 DataLength, IN VOID *Data OPTIONAL ); typedef struct _EFI_HTTP_BOOT_CALLBACK_PROTOCOL { EFI_HTTP_BOOT_CALLBACK Callback; } EFI_HTTP_BOOT_CALLBACK_PROTOCOL; #endif /* EFI_PROTOCOLS_NETWORK_H */