iPXE
NetworkInterfaceIdentifier.h
Go to the documentation of this file.
00001 /** @file
00002   EFI Network Interface Identifier Protocol.
00003 
00004 Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
00005 This program and the accompanying materials are licensed and made available under
00006 the terms and conditions of the BSD License that accompanies this distribution.
00007 The full text of the license may be found at
00008 http://opensource.org/licenses/bsd-license.php.
00009 
00010 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
00011 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
00012 
00013   @par Revision Reference:
00014   This Protocol is introduced in EFI Specification 1.10.
00015 
00016 **/
00017 
00018 #ifndef __EFI_NETWORK_INTERFACE_IDENTIFER_H__
00019 #define __EFI_NETWORK_INTERFACE_IDENTIFER_H__
00020 
00021 FILE_LICENCE ( BSD3 );
00022 
00023 //
00024 // GUID retired from UEFI Specification 2.1b
00025 //
00026 #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID \
00027   { \
00028     0xE18541CD, 0xF755, 0x4f73, {0x92, 0x8D, 0x64, 0x3C, 0x8A, 0x79, 0xB2, 0x29 } \
00029   }
00030 
00031 //
00032 // GUID intruduced in UEFI Specification 2.1b
00033 //
00034 #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID_31 \
00035   { \
00036     0x1ACED566, 0x76ED, 0x4218, {0xBC, 0x81, 0x76, 0x7F, 0x1F, 0x97, 0x7A, 0x89 } \
00037   }
00038 
00039 //
00040 // Revision defined in UEFI Specification 2.4
00041 //
00042 #define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION    0x00020000
00043 
00044 
00045 ///
00046 /// Revision defined in EFI1.1.
00047 ///
00048 #define EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE_REVISION   EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION
00049 
00050 ///
00051 /// Forward reference for pure ANSI compatability.
00052 ///
00053 typedef struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL  EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL;
00054 
00055 ///
00056 /// Protocol defined in EFI1.1.
00057 ///
00058 typedef EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL   EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE;
00059 
00060 ///
00061 /// An optional protocol that is used to describe details about the software
00062 /// layer that is used to produce the Simple Network Protocol.
00063 ///
00064 struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL {
00065   UINT64    Revision;   ///< The revision of the EFI_NETWORK_INTERFACE_IDENTIFIER protocol.
00066   UINT64    Id;         ///< The address of the first byte of the identifying structure for this network
00067                         ///< interface. This is only valid when the network interface is started
00068                         ///< (see Start()). When the network interface is not started, this field is set to zero.
00069   UINT64    ImageAddr;  ///< The address of the first byte of the identifying structure for this
00070                         ///< network interface.  This is set to zero if there is no structure.
00071   UINT32    ImageSize;  ///< The size of unrelocated network interface image.
00072   CHAR8     StringId[4];///< A four-character ASCII string that is sent in the class identifier field of
00073                         ///< option 60 in DHCP. For a Type of EfiNetworkInterfaceUndi, this field is UNDI.
00074   UINT8     Type;       ///< Network interface type. This will be set to one of the values
00075                         ///< in EFI_NETWORK_INTERFACE_TYPE.
00076   UINT8     MajorVer;   ///< Major version number.
00077   UINT8     MinorVer;   ///< Minor version number.
00078   BOOLEAN   Ipv6Supported; ///< TRUE if the network interface supports IPv6; otherwise FALSE.
00079   UINT16    IfNum;      ///< The network interface number that is being identified by this Network
00080                         ///< Interface Identifier Protocol. This field must be less than or
00081                         ///< equal to the (IFcnt | IFcntExt <<8 ) fields in the !PXE structure.
00082 
00083 };
00084 
00085 ///
00086 ///*******************************************************
00087 /// EFI_NETWORK_INTERFACE_TYPE
00088 ///*******************************************************
00089 ///
00090 typedef enum {
00091   EfiNetworkInterfaceUndi = 1
00092 } EFI_NETWORK_INTERFACE_TYPE;
00093 
00094 ///
00095 /// Forward reference for pure ANSI compatability.
00096 ///
00097 typedef struct undiconfig_table  UNDI_CONFIG_TABLE;
00098 
00099 ///
00100 /// The format of the configuration table for UNDI
00101 ///
00102 struct undiconfig_table {
00103   UINT32             NumberOfInterfaces;    ///< The number of NIC devices
00104                                             ///< that this UNDI controls.
00105   UINT32             reserved;
00106   UNDI_CONFIG_TABLE  *nextlink;             ///< A pointer to the next UNDI
00107                                             ///< configuration table.
00108   ///
00109   /// The length of this array is given in the NumberOfInterfaces field.
00110   ///
00111   struct {
00112     VOID             *NII_InterfacePointer; ///< Pointer to the NII interface structure.
00113     VOID             *DevicePathPointer;    ///< Pointer to the device path for this NIC.
00114   } NII_entry[1];
00115 };
00116 
00117 extern EFI_GUID gEfiNetworkInterfaceIdentifierProtocolGuid;
00118 extern EFI_GUID gEfiNetworkInterfaceIdentifierProtocolGuid_31;
00119 
00120 #endif