]> git.proxmox.com Git - mirror_edk2.git/blob - RedfishPkg/Include/Protocol/RedfishDiscover.h
MdePkg: use CpuPause() in CpuDeadLoop()
[mirror_edk2.git] / RedfishPkg / Include / Protocol / RedfishDiscover.h
1 /** @file
2 This file defines the EFI Redfish Discover Protocol interface.
3
4 (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
5
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #ifndef EFI_REDFISH_DISCOVER_PROTOCOL_H_
11 #define EFI_REDFISH_DISCOVER_PROTOCOL_H_
12
13 #include <IndustryStandard/Http11.h>
14 #include <Protocol/Http.h>
15 #include <Protocol/RestEx.h>
16 #include <Uefi.h>
17
18 //
19 // GUID definitions
20 //
21 #define EFI_REDFISH_DISCOVER_PROTOCOL_GUID \
22 { \
23 0x5db12509, 0x4550, 0x4347, { 0x96, 0xb3, 0x73, 0xc0, 0xff, 0x6e, 0x86, 0x9f } \
24 }
25
26 #define REDFISH_DISCOVER_TOKEN_SIGNATURE SIGNATURE_32 ('R', 'F', 'T', 'S')
27
28 typedef UINT32 EFI_REDFISH_DISCOVER_FLAG;
29 #define EFI_REDFISH_DISCOVER_HOST_INTERFACE 0x00000001 ///< Discover Redfish server reported in SMBIOS 42h.
30 #define EFI_REDFISH_DISCOVER_SSDP 0x00000002 ///< Discover Redfish server using UPnP Http search method.
31 #define EFI_REDFISH_DISCOVER_SSDP_UDP6 0x00000004 ///< Use UDP version 6.
32 #define EFI_REDFISH_DISCOVER_KEEP_ALIVE 0x00000008 ///< Keep to send UPnP Search in the duration indicated in
33 ///< EFI_REDFISH_DISCOVER_DURATION_MASK.
34 #define EFI_REDFISH_DISCOVER_RENEW 0x00000010 ///< Set this bit to indicate this function to notify the caller
35 ///< a list of all Redfish servers it found. Otherwise, this fucntion
36 ///< just notify the caller new found Redfish servers.
37 ///<
38 #define EFI_REDFISH_DISCOVER_VALIDATION 0x80000000 ///< Validate Redfish service for host interface instance.
39 #define EFI_REDFISH_DISCOVER_DURATION_MASK 0x0f000000 ///< 2 to the Power of Duration. The valid value of duration is between
40 ///< 3 to 15. The corresponding duration is 8 to 2^15 seconds.
41 ///< Duration is only valid when EFI_REDFISH_DISCOVER_KEEP_ALIVE
42 ///< is set to 1.
43 #define EFI_REDFISH_DISCOVER_DURATION_BIT_POS 8
44
45 typedef struct _EFI_REDFISH_DISCOVER_PROTOCOL EFI_REDFISH_DISCOVER_PROTOCOL;
46 typedef struct _EFI_REDFISH_DISCOVERED_INFORMATION EFI_REDFISH_DISCOVERED_INFORMATION;
47
48 typedef struct _EFI_REDFISH_DISCOVERED_INFORMATION {
49 EFI_HANDLE RedfishRestExHandle; ///< REST EX EFI handle associated with this Redfish service.
50 BOOLEAN IsUdp6; ///< Indicates it's IP versino 6.
51 EFI_IP_ADDRESS RedfishHostIpAddress; ///< IP address of Redfish service.
52 UINTN RedfishVersion; ///< Redfish service version.
53 CHAR16 *Location; ///< Redfish service location.
54 CHAR16 *Uuid; ///< Redfish service UUID.
55 CHAR16 *Os; ///< Redfish service OS.
56 CHAR16 *OSVersion; ///< Redfish service OS version.
57 CHAR16 *Product; ///< Redfish service product name.
58 CHAR16 *ProductVer; ///< Redfish service product version.
59 BOOLEAN UseHttps; ///< Using HTTPS.
60 };
61
62 typedef struct {
63 EFI_STATUS Status; ///< Status of Redfish service discovery.
64 EFI_REDFISH_DISCOVERED_INFORMATION Information; ///< Redfish service discovered.
65 } EFI_REDFISH_DISCOVERED_INSTANCE;
66
67 typedef struct {
68 UINTN NumberOfServiceFound; ///< Must be 0 when pass to Acquire ().
69 EFI_REDFISH_DISCOVERED_INSTANCE *RedfishInstances; ///< Must be NULL when pass to Acquire ().
70 } EFI_REDFISH_DISCOVERED_LIST;
71
72 typedef struct {
73 EFI_MAC_ADDRESS MacAddress; ///< MAC address of network interfase to discover Redfish service.
74 BOOLEAN IsIpv6; ///< Indicates it's IP versino 6.
75 EFI_IP_ADDRESS SubnetId; ///< Subnet ID.
76 UINT8 SubnetPrefixLength; ///< Subnet prefix-length for IPv4 and IPv6.
77 UINT16 VlanId; ///< VLAN ID.
78 } EFI_REDFISH_DISCOVER_NETWORK_INSTANCE;
79
80 typedef struct {
81 UINT32 Signature; ///< Token signature.
82 EFI_REDFISH_DISCOVERED_LIST DiscoverList; ///< The memory of EFI_REDFISH_DISCOVERED_LIST is
83 ///< allocated by Acquire() and freed when caller invoke Release().
84 EFI_EVENT Event; ///< The TPL_CALLBACK event to be notified when Redfish services
85 ///< are discovered or any errors occurred during discovery.
86 UINTN Timeout; ///< The timeout value declared in EFI_REDFISH_DISCOVERED_TOKEN
87 ///< determines the seconds to drop discover process.
88 ///< Basically, the nearby Redfish services must response in >=1
89 ///< and <= 5 seconds. The valid timeout value used to have
90 ///< asynchronous discovery is >= 1 and <= 5 seconds. Set the
91 ///< timeout to zero means to discover Redfish service synchronously.
92 ///< Event in token is created by caller to listen the Reefish services
93 ///< found by Acquire().
94 } EFI_REDFISH_DISCOVERED_TOKEN;
95
96 /**
97 This function gets the NIC list which Redfish discover protocol
98 can discover Redfish service on it.
99
100 @param[in] This EFI_REDFISH_DISCOVER_PROTOCOL instance.
101 @param[in] ImageHandle EFI Image handle request the NIC list,
102 @param[out] NumberOfNetworkInterfaces Number of NICs can do Redfish service discovery.
103 @param[out] NetworkInterfaces NIC instances. It's an array of instance. The number of entries
104 in array is indicated by NumberOfNetworkInterfaces.
105 Caller has to release the memory
106 allocated by Redfish discover protocol.
107
108 @retval EFI_SUCCESS REST EX instances of discovered Redfish are released.
109 @retval Others Fail to remove the entry
110
111 **/
112 typedef
113 EFI_STATUS
114 (EFIAPI *EFI_REDFISH_DISCOVER_NETWORK_LIST)(
115 IN EFI_REDFISH_DISCOVER_PROTOCOL *This,
116 IN EFI_HANDLE ImageHandle,
117 OUT UINTN *NumberOfNetworkInterfaces,
118 OUT EFI_REDFISH_DISCOVER_NETWORK_INSTANCE **NetworkInterfaces
119 );
120
121 /**
122 This function acquires Redfish services by discovering static Redfish setting
123 according to Redfish Host Interface or through SSDP. Returns a list of EFI
124 handles in EFI_REDFISH_DISCOVERED_LIST. Each of EFI handle has cooresponding
125 EFI REST EX instance installed on it. Each REST EX isntance is a child instance which
126 created through EFI REST EX serivce protoocl for communicating with specific
127 Redfish service.
128
129 @param[in] This EFI_REDFISH_DISCOVER_PROTOCOL instance.
130 @param[in] ImageHandle EFI image owns these Redfish service instances.
131 @param[in] TargetNetworkInterface Target NIC to do the discovery.
132 NULL means discover Redfish service on all NICs on platform.
133 @param[in] Flags Redfish service discover flags.
134 @param[in] Token EFI_REDFISH_DISCOVERED_TOKEN instance.
135 The memory of EFI_REDFISH_DISCOVERED_LIST and the strings in
136 EFI_REDFISH_DISCOVERED_INFORMATION are all allocated by Acquire()
137 and must be freed when caller invoke Release().
138
139 @retval EFI_SUCCESS REST EX instance of discovered Redfish services are returned.
140 @retval EFI_INVALID_PARAMETERS ImageHandle == NULL, Flags == 0, Token == NULL, Token->Timeout > 5,
141 or Token->Event == NULL.
142 @retval Others Fail acquire Redfish services.
143
144 **/
145 typedef
146 EFI_STATUS
147 (EFIAPI *EFI_REDFISH_DISCOVER_ACQUIRE_SERVICE)(
148 IN EFI_REDFISH_DISCOVER_PROTOCOL *This,
149 IN EFI_HANDLE ImageHandle,
150 IN EFI_REDFISH_DISCOVER_NETWORK_INSTANCE *TargetNetworkInterface,
151 IN EFI_REDFISH_DISCOVER_FLAG Flags,
152 IN EFI_REDFISH_DISCOVERED_TOKEN *Token
153 );
154
155 /**
156 This function aborts Redfish service discovery on the given network interface.
157
158 @param[in] This EFI_REDFISH_DISCOVER_PROTOCOL instance.
159 @param[in] TargetNetworkInterface Target NIC to do the discovery.
160
161 @retval EFI_SUCCESS REST EX instance of discovered Redfish services are returned.
162 @retval Others Fail to abort Redfish service discovery.
163
164 **/
165 typedef
166 EFI_STATUS
167 (EFIAPI *EFI_REDFISH_DISCOVER_ABORT_ACQUIRE)(
168 IN EFI_REDFISH_DISCOVER_PROTOCOL *This,
169 IN EFI_REDFISH_DISCOVER_NETWORK_INSTANCE *TargetNetworkInterface OPTIONAL
170 );
171
172 /**
173 This function releases Redfish services found by RedfishServiceAcquire().
174
175 @param[in] This EFI_REDFISH_DISCOVER_PROTOCOL instance.
176 @param[in] InstanceList The Redfish service to release.
177
178 @retval EFI_SUCCESS REST EX instances of discovered Redfish are released.
179 @retval Others Fail to remove the entry
180
181 **/
182 typedef
183 EFI_STATUS
184 (EFIAPI *EFI_REDFISH_DISCOVER_RELEASE_SERVICE)(
185 IN EFI_REDFISH_DISCOVER_PROTOCOL *This,
186 IN EFI_REDFISH_DISCOVERED_LIST *InstanceList
187 );
188
189 typedef struct _EFI_REDFISH_DISCOVER_PROTOCOL {
190 EFI_REDFISH_DISCOVER_NETWORK_LIST GetNetworkInterfaceList;
191 EFI_REDFISH_DISCOVER_ACQUIRE_SERVICE AcquireRedfishService;
192 EFI_REDFISH_DISCOVER_ABORT_ACQUIRE AbortAcquireRedfishService;
193 EFI_REDFISH_DISCOVER_RELEASE_SERVICE ReleaseRedfishService;
194 } EFI_REDFISH_DISCOVER_PROTOCOL;
195
196 extern EFI_GUID gEfiRestExProtocolGuid;
197 extern EFI_GUID gEfiRestExServiceBindingProtocolGuid;
198 extern EFI_GUID gEfiRedfishDiscoverProtocolGuid;
199 #endif