1*1370a723SSascha Wildner /** @file 2*1370a723SSascha Wildner EFI Network Interface Identifier Protocol. 3*1370a723SSascha Wildner 4*1370a723SSascha Wildner Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> 5*1370a723SSascha Wildner SPDX-License-Identifier: BSD-2-Clause-Patent 6*1370a723SSascha Wildner 7*1370a723SSascha Wildner @par Revision Reference: 8*1370a723SSascha Wildner This Protocol is introduced in EFI Specification 1.10. 9*1370a723SSascha Wildner 10*1370a723SSascha Wildner **/ 11*1370a723SSascha Wildner 12*1370a723SSascha Wildner #ifndef __EFI_NETWORK_INTERFACE_IDENTIFER_H__ 13*1370a723SSascha Wildner #define __EFI_NETWORK_INTERFACE_IDENTIFER_H__ 14*1370a723SSascha Wildner 15*1370a723SSascha Wildner // 16*1370a723SSascha Wildner // GUID retired from UEFI Specification 2.1b 17*1370a723SSascha Wildner // 18*1370a723SSascha Wildner #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID \ 19*1370a723SSascha Wildner { \ 20*1370a723SSascha Wildner 0xE18541CD, 0xF755, 0x4f73, {0x92, 0x8D, 0x64, 0x3C, 0x8A, 0x79, 0xB2, 0x29 } \ 21*1370a723SSascha Wildner } 22*1370a723SSascha Wildner 23*1370a723SSascha Wildner // 24*1370a723SSascha Wildner // GUID intruduced in UEFI Specification 2.1b 25*1370a723SSascha Wildner // 26*1370a723SSascha Wildner #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID_31 \ 27*1370a723SSascha Wildner { \ 28*1370a723SSascha Wildner 0x1ACED566, 0x76ED, 0x4218, {0xBC, 0x81, 0x76, 0x7F, 0x1F, 0x97, 0x7A, 0x89 } \ 29*1370a723SSascha Wildner } 30*1370a723SSascha Wildner 31*1370a723SSascha Wildner // 32*1370a723SSascha Wildner // Revision defined in UEFI Specification 2.4 33*1370a723SSascha Wildner // 34*1370a723SSascha Wildner #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION 0x00020000 35*1370a723SSascha Wildner 36*1370a723SSascha Wildner /// 37*1370a723SSascha Wildner /// Revision defined in EFI1.1. 38*1370a723SSascha Wildner /// 39*1370a723SSascha Wildner #define EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE_REVISION EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION 40*1370a723SSascha Wildner 41*1370a723SSascha Wildner /// 42*1370a723SSascha Wildner /// Forward reference for pure ANSI compatability. 43*1370a723SSascha Wildner /// 44*1370a723SSascha Wildner typedef struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL; 45*1370a723SSascha Wildner 46*1370a723SSascha Wildner /// 47*1370a723SSascha Wildner /// Protocol defined in EFI1.1. 48*1370a723SSascha Wildner /// 49*1370a723SSascha Wildner typedef EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE; 50*1370a723SSascha Wildner 51*1370a723SSascha Wildner /// 52*1370a723SSascha Wildner /// An optional protocol that is used to describe details about the software 53*1370a723SSascha Wildner /// layer that is used to produce the Simple Network Protocol. 54*1370a723SSascha Wildner /// 55*1370a723SSascha Wildner struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL { 56*1370a723SSascha Wildner UINT64 Revision; ///< The revision of the EFI_NETWORK_INTERFACE_IDENTIFIER protocol. 57*1370a723SSascha Wildner UINT64 Id; ///< The address of the first byte of the identifying structure for this network 58*1370a723SSascha Wildner ///< interface. This is only valid when the network interface is started 59*1370a723SSascha Wildner ///< (see Start()). When the network interface is not started, this field is set to zero. 60*1370a723SSascha Wildner UINT64 ImageAddr; ///< The address of the first byte of the identifying structure for this 61*1370a723SSascha Wildner ///< network interface. This is set to zero if there is no structure. 62*1370a723SSascha Wildner UINT32 ImageSize; ///< The size of unrelocated network interface image. 63*1370a723SSascha Wildner CHAR8 StringId[4];///< A four-character ASCII string that is sent in the class identifier field of 64*1370a723SSascha Wildner ///< option 60 in DHCP. For a Type of EfiNetworkInterfaceUndi, this field is UNDI. 65*1370a723SSascha Wildner UINT8 Type; ///< Network interface type. This will be set to one of the values 66*1370a723SSascha Wildner ///< in EFI_NETWORK_INTERFACE_TYPE. 67*1370a723SSascha Wildner UINT8 MajorVer; ///< Major version number. 68*1370a723SSascha Wildner UINT8 MinorVer; ///< Minor version number. 69*1370a723SSascha Wildner BOOLEAN Ipv6Supported; ///< TRUE if the network interface supports IPv6; otherwise FALSE. 70*1370a723SSascha Wildner UINT16 IfNum; ///< The network interface number that is being identified by this Network 71*1370a723SSascha Wildner ///< Interface Identifier Protocol. This field must be less than or 72*1370a723SSascha Wildner ///< equal to the (IFcnt | IFcntExt <<8 ) fields in the !PXE structure. 73*1370a723SSascha Wildner }; 74*1370a723SSascha Wildner 75*1370a723SSascha Wildner /// 76*1370a723SSascha Wildner ///******************************************************* 77*1370a723SSascha Wildner /// EFI_NETWORK_INTERFACE_TYPE 78*1370a723SSascha Wildner ///******************************************************* 79*1370a723SSascha Wildner /// 80*1370a723SSascha Wildner typedef enum { 81*1370a723SSascha Wildner EfiNetworkInterfaceUndi = 1 82*1370a723SSascha Wildner } EFI_NETWORK_INTERFACE_TYPE; 83*1370a723SSascha Wildner 84*1370a723SSascha Wildner /// 85*1370a723SSascha Wildner /// Forward reference for pure ANSI compatability. 86*1370a723SSascha Wildner /// 87*1370a723SSascha Wildner typedef struct undiconfig_table UNDI_CONFIG_TABLE; 88*1370a723SSascha Wildner 89*1370a723SSascha Wildner /// 90*1370a723SSascha Wildner /// The format of the configuration table for UNDI 91*1370a723SSascha Wildner /// 92*1370a723SSascha Wildner struct undiconfig_table { 93*1370a723SSascha Wildner UINT32 NumberOfInterfaces; ///< The number of NIC devices 94*1370a723SSascha Wildner ///< that this UNDI controls. 95*1370a723SSascha Wildner UINT32 reserved; 96*1370a723SSascha Wildner UNDI_CONFIG_TABLE *nextlink; ///< A pointer to the next UNDI 97*1370a723SSascha Wildner ///< configuration table. 98*1370a723SSascha Wildner /// 99*1370a723SSascha Wildner /// The length of this array is given in the NumberOfInterfaces field. 100*1370a723SSascha Wildner /// 101*1370a723SSascha Wildner struct { 102*1370a723SSascha Wildner VOID *NII_InterfacePointer; ///< Pointer to the NII interface structure. 103*1370a723SSascha Wildner VOID *DevicePathPointer; ///< Pointer to the device path for this NIC. 104*1370a723SSascha Wildner } NII_entry[1]; 105*1370a723SSascha Wildner }; 106*1370a723SSascha Wildner 107*1370a723SSascha Wildner extern EFI_GUID gEfiNetworkInterfaceIdentifierProtocolGuid; 108*1370a723SSascha Wildner extern EFI_GUID gEfiNetworkInterfaceIdentifierProtocolGuid_31; 109*1370a723SSascha Wildner 110*1370a723SSascha Wildner #endif 111