xref: /dflybsd-src/stand/contrib/edk2/MdePkg/Include/Protocol/NetworkInterfaceIdentifier.h (revision 1370a72311f999d5cc5041717aeea26d08ad6923)
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