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