#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 { UINT32 State; UINT32 HwAddressSize; UINT32 MediaHeaderSize; UINT32 MaxPacketSize; UINT32 NvRamSize; UINT32 NvRamAccessSize; UINT32 ReceiveFilterMask; UINT32 ReceiveFilterSetting; UINT32 MaxMCastFilterCount; UINT32 MCastFilterCount; EFI_MAC_ADDRESS MCastFilter[MAX_MCAST_FILTER_CNT]; EFI_MAC_ADDRESS CurrentAddress; EFI_MAC_ADDRESS BroadcastAddress; EFI_MAC_ADDRESS PermanentAddress; UINT8 IfType; BOOLEAN MacAddressChangeable; BOOLEAN MultipleTxSupported; BOOLEAN MediaPresentSupported; BOOLEAN MediaPresent; } EFI_SIMPLE_NETWORK_MODE; typedef struct { UINT64 RxTotalFrames; UINT64 RxGoodFrames; UINT64 RxUndersizeFrames; UINT64 RxOversizeFrames; UINT64 RxDroppedFrames; UINT64 RxUnicastFrames; UINT64 RxBroadcastFrames; UINT64 RxMulticastFrames; UINT64 RxCrcErrorFrames; UINT64 RxTotalBytes; UINT64 TxTotalFrames; UINT64 TxGoodFrames; UINT64 TxUndersizeFrames; UINT64 TxOversizeFrames; UINT64 TxDroppedFrames; UINT64 TxUnicastFrames; UINT64 TxBroadcastFrames; UINT64 TxMulticastFrames; UINT64 TxCrcErrorFrames; UINT64 TxTotalBytes; UINT64 Collisions; UINT64 UnsupportedProtocol; UINT64 RxDuplicatedFrames; UINT64 RxDecryptErrorFrames; UINT64 TxErrorFrames; 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 UINTN ExtraRxBufferSize OPTIONAL, IN UINTN ExtraTxBufferSize OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_RESET)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN 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 UINT32 Enable, IN UINT32 Disable, IN BOOLEAN ResetMCastFilter, IN 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 BOOLEAN Reset, IN EFI_MAC_ADDRESS *New OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN BOOLEAN Reset, IN OUT 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 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 BOOLEAN ReadWrite, IN UINTN Offset, IN UINTN BufferSize, IN OUT VOID *Buffer ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, OUT UINT32 *InterruptStatus OPTIONAL, OUT VOID **TxBuf OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, IN UINTN HeaderSize, IN UINTN BufferSize, IN VOID *Buffer, IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, IN UINT16 *Protocol OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE)( IN EFI_SIMPLE_NETWORK_PROTOCOL *This, OUT UINTN *HeaderSize OPTIONAL, IN OUT UINTN *BufferSize, OUT VOID *Buffer, OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, OUT UINT16 *Protocol OPTIONAL ); typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL { 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 { UINT64 Revision; UINT64 Id; UINT64 ImageAddr; UINT32 ImageSize; CHAR8 StringId[4]; UINT8 Type; UINT8 MajorVer; UINT8 MinorVer; BOOLEAN Ipv6Supported; 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 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 { UINT8 Filters; UINT8 IpCnt; UINT16 Reserved; EFI_IP_ADDRESS IpList[EFI_PXE_BASE_CODE_MAX_IPCNT]; } EFI_PXE_BASE_CODE_IP_FILTER; typedef struct { UINT8 BootpOpcode; UINT8 BootpHwType; UINT8 BootpHwAddrLen; UINT8 BootpGateHops; UINT32 BootpIdent; UINT16 BootpSeconds; UINT16 BootpFlags; UINT8 BootpCiAddr[4]; UINT8 BootpYiAddr[4]; UINT8 BootpSiAddr[4]; UINT8 BootpGiAddr[4]; UINT8 BootpHwAddr[16]; UINT8 BootpSrvName[64]; UINT8 BootpBootFile[128]; UINT32 DhcpMagik; UINT8 DhcpOptions[56]; } EFI_PXE_BASE_CODE_DHCPV4_PACKET; typedef struct { UINT32 MessageType : 8; UINT32 TransactionId : 24; UINT8 DhcpOptions[1024]; } EFI_PXE_BASE_CODE_DHCPV6_PACKET; typedef union { UINT8 Raw[1472]; EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4; EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6; } EFI_PXE_BASE_CODE_PACKET; typedef struct { UINT8 Type; UINT8 Code; UINT16 Checksum; union { UINT32 reserved; UINT32 Mtu; UINT32 Pointer; struct { UINT16 Identifier; UINT16 Sequence; } Echo; } u; UINT8 Data[494]; } EFI_PXE_BASE_CODE_ICMP_ERROR; typedef struct { 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 { UINT16 Type; BOOLEAN AcceptAnyResponse; UINT8 reserved; EFI_IP_ADDRESS IpAddr; } EFI_PXE_BASE_CODE_SRVLIST; typedef struct { BOOLEAN UseMCast; BOOLEAN UseBCast; BOOLEAN UseUCast; BOOLEAN MustUseList; EFI_IP_ADDRESS ServerMCastIp; UINT16 IpCnt; EFI_PXE_BASE_CODE_SRVLIST SrvList[1]; } EFI_PXE_BASE_CODE_DISCOVER_INFO; typedef struct { BOOLEAN Started; BOOLEAN Ipv6Available; BOOLEAN Ipv6Supported; BOOLEAN UsingIpv6; BOOLEAN BisSupported; BOOLEAN BisDetected; BOOLEAN AutoArp; BOOLEAN SendGUID; BOOLEAN DhcpDiscoverValid; BOOLEAN DhcpAckReceivd; BOOLEAN ProxyOfferReceived; BOOLEAN PxeDiscoverValid; BOOLEAN PxeReplyReceived; BOOLEAN PxeBisReplyReceived; BOOLEAN IcmpErrorReceived; BOOLEAN TftpErrorReceived; BOOLEAN MakeCallbacks; UINT8 TTL; 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; UINT32 ArpCacheEntries; EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES]; 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; UINT16 ListenTimeout; 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 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 BOOLEAN SortOffers ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_DISCOVER)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN UINT16 Type, IN UINT16 *Layer, IN 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 BOOLEAN Overwrite, IN OUT UINT64 *BufferSize, IN UINTN *BlockSize OPTIONAL, IN EFI_IP_ADDRESS *ServerIp, IN CHAR8 *Filename OPTIONAL, IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL, IN BOOLEAN DontUseBuffer ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN 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 UINTN *HeaderSize OPTIONAL, IN VOID *HeaderPtr OPTIONAL, IN UINTN *BufferSize, IN VOID *BufferPtr ); typedef EFI_STATUS (EFIAPI *EFI_PXE_BASE_CODE_UDP_READ)( IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN 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 UINTN *HeaderSize OPTIONAL, IN VOID *HeaderPtr OPTIONAL, IN OUT 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 BOOLEAN *NewAutoArp OPTIONAL, IN BOOLEAN *NewSendGUID OPTIONAL, IN UINT8 *NewTTL OPTIONAL, IN UINT8 *NewToS OPTIONAL, IN 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 BOOLEAN *NewDhcpDiscoverValid, OPTIONAL IN BOOLEAN *NewDhcpAckReceived, OPTIONAL IN BOOLEAN *NewProxyOfferReceived, OPTIONAL IN BOOLEAN *NewPxeDiscoverValid, OPTIONAL IN BOOLEAN *NewPxeReplyReceived, OPTIONAL IN 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 { 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 UINT32 BIS_CERT_ID; typedef UINT16 BIS_ALG_ID; typedef struct { UINT32 Major; UINT32 Minor; } EFI_BIS_VERSION; typedef struct { UINT32 Length; UINT8 *Data; } EFI_BIS_DATA; typedef struct { BIS_CERT_ID CertificateID; BIS_ALG_ID AlgorithmID; 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 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 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 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 BOOLEAN Received, IN 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 */