--- /dev/null
+/** @file\r
+ This file defines the EFI Redfish Discover Protocol interface.\r
+\r
+ (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef EFI_REDFISH_DISCOVER_PROTOCOL_H_\r
+#define EFI_REDFISH_DISCOVER_PROTOCOL_H_\r
+\r
+#include <IndustryStandard/Http11.h>\r
+#include <Protocol/Http.h>\r
+#include <Protocol/RestEx.h>\r
+#include <Uefi.h>\r
+\r
+//\r
+// GUID definitions\r
+//\r
+#define EFI_REDFISH_DISCOVER_PROTOCOL_GUID \\r
+ { \\r
+ 0x5db12509, 0x4550, 0x4347, { 0x96, 0xb3, 0x73, 0xc0, 0xff, 0x6e, 0x86, 0x9f } \\r
+ }\r
+\r
+#define REDFISH_DISCOVER_TOKEN_SIGNATURE SIGNATURE_32 ('R', 'F', 'T', 'S')\r
+\r
+typedef UINT32 EFI_REDFISH_DISCOVER_FLAG;\r
+#define EFI_REDFISH_DISCOVER_HOST_INTERFACE 0x00000001 ///< Discover Redfish server reported in SMBIOS 42h.\r
+#define EFI_REDFISH_DISCOVER_SSDP 0x00000002 ///< Discover Redfish server using UPnP Http search method.\r
+#define EFI_REDFISH_DISCOVER_SSDP_UDP6 0x00000004 ///< Use UDP version 6.\r
+#define EFI_REDFISH_DISCOVER_KEEP_ALIVE 0x00000008 ///< Keep to send UPnP Search in the duration indicated in\r
+ ///< EFI_REDFISH_DISCOVER_DURATION_MASK.\r
+#define EFI_REDFISH_DISCOVER_RENEW 0x00000010 ///< Set this bit to indicate this function to notify the caller\r
+ ///< a list of all Redfish servers it found. Otherwise, this fucntion\r
+ ///< just notify the caller new found Redfish servers.\r
+ ///<\r
+#define EFI_REDFISH_DISCOVER_VALIDATION 0x80000000 ///< Validate Redfish service for host interface instance.\r
+#define EFI_REDFISH_DISCOVER_DURATION_MASK 0x0f000000 ///< 2 to the Power of Duration. The valid value of duration is between\r
+ ///< 3 to 15. The corresponding duration is 8 to 2^15 seconds.\r
+ ///< Duration is only valid when EFI_REDFISH_DISCOVER_KEEP_ALIVE\r
+ ///< is set to 1.\r
+#define EFI_REDFISH_DISCOVER_DURATION_BIT_POS 8\r
+\r
+typedef struct _EFI_REDFISH_DISCOVER_PROTOCOL EFI_REDFISH_DISCOVER_PROTOCOL;\r
+typedef struct _EFI_REDFISH_DISCOVERED_INFORMATION EFI_REDFISH_DISCOVERED_INFORMATION;\r
+\r
+typedef struct _EFI_REDFISH_DISCOVERED_INFORMATION {\r
+ EFI_HANDLE RedfishRestExHandle; ///< REST EX EFI handle associated with this Redfish service.\r
+ BOOLEAN IsUdp6; ///< Indicates it's IP versino 6.\r
+ EFI_IP_ADDRESS RedfishHostIpAddress; ///< IP address of Redfish service.\r
+ UINTN RedfishVersion; ///< Redfish service version.\r
+ CHAR16 *Location; ///< Redfish service location.\r
+ CHAR16 *Uuid; ///< Redfish service UUID.\r
+ CHAR16 *Os; ///< Redfish service OS.\r
+ CHAR16 *OSVersion; ///< Redfish service OS version.\r
+ CHAR16 *Product; ///< Redfish service product name.\r
+ CHAR16 *ProductVer; ///< Redfish service product version.\r
+ BOOLEAN UseHttps; ///< Using HTTPS.\r
+};\r
+\r
+typedef struct {\r
+ EFI_STATUS Status; ///< Status of Redfish service discovery.\r
+ EFI_REDFISH_DISCOVERED_INFORMATION Information; ///< Redfish service discovered.\r
+} EFI_REDFISH_DISCOVERED_INSTANCE;\r
+\r
+typedef struct {\r
+ UINTN NumberOfServiceFound; ///< Must be 0 when pass to Acquire ().\r
+ EFI_REDFISH_DISCOVERED_INSTANCE *RedfishInstances; ///< Must be NULL when pass to Acquire ().\r
+} EFI_REDFISH_DISCOVERED_LIST;\r
+\r
+typedef struct {\r
+ EFI_MAC_ADDRESS MacAddress; ///< MAC address of network interfase to discover Redfish service.\r
+ BOOLEAN IsIpv6; ///< Indicates it's IP versino 6.\r
+ EFI_IP_ADDRESS SubnetId; ///< Subnet ID.\r
+ UINT8 SubnetPrefixLength; ///< Subnet prefix-length for IPv4 and IPv6.\r
+ UINT16 VlanId; ///< VLAN ID.\r
+} EFI_REDFISH_DISCOVER_NETWORK_INSTANCE;\r
+\r
+typedef struct {\r
+ UINT32 Signature; ///< Token signature.\r
+ EFI_REDFISH_DISCOVERED_LIST DiscoverList; ///< The memory of EFI_REDFISH_DISCOVERED_LIST is\r
+ ///< allocated by Acquire() and freed when caller invoke Release().\r
+ EFI_EVENT Event; ///< The TPL_CALLBACK event to be notified when Redfish services\r
+ ///< are discovered or any errors occurred during discovery.\r
+ UINTN Timeout; ///< The timeout value declared in EFI_REDFISH_DISCOVERED_TOKEN\r
+ ///< determines the seconds to drop discover process.\r
+ ///< Basically, the nearby Redfish services must response in >=1\r
+ ///< and <= 5 seconds. The valid timeout value used to have\r
+ ///< asynchronous discovery is >= 1 and <= 5 seconds. Set the\r
+ ///< timeout to zero means to discover Redfish service synchronously.\r
+ ///< Event in token is created by caller to listen the Reefish services\r
+ ///< found by Acquire().\r
+} EFI_REDFISH_DISCOVERED_TOKEN;\r
+\r
+/**\r
+ This function gets the NIC list which Redfish discover protocol\r
+ can discover Redfish service on it.\r
+\r
+ @param[in] This EFI_REDFISH_DISCOVER_PROTOCOL instance.\r
+ @param[in] ImageHandle EFI Image handle request the NIC list,\r
+ @param[out] NumberOfNetworkInterfaces Number of NICs can do Redfish service discovery.\r
+ @param[out] NetworkInterfaces NIC instances. It's an array of instance. The number of entries\r
+ in array is indicated by NumberOfNetworkInterfaces.\r
+ Caller has to release the memory\r
+ allocated by Redfish discover protocol.\r
+\r
+ @retval EFI_SUCCESS REST EX instances of discovered Redfish are released.\r
+ @retval Others Fail to remove the entry\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REDFISH_DISCOVER_NETWORK_LIST)(\r
+ IN EFI_REDFISH_DISCOVER_PROTOCOL *This,\r
+ IN EFI_HANDLE ImageHandle,\r
+ OUT UINTN *NumberOfNetworkInterfaces,\r
+ OUT EFI_REDFISH_DISCOVER_NETWORK_INSTANCE **NetworkInterfaces\r
+);\r
+\r
+/**\r
+ This function acquires Redfish services by discovering static Redfish setting\r
+ according to Redfish Host Interface or through SSDP. Returns a list of EFI\r
+ handles in EFI_REDFISH_DISCOVERED_LIST. Each of EFI handle has cooresponding\r
+ EFI REST EX instance installed on it. Each REST EX isntance is a child instance which\r
+ created through EFI REST EX serivce protoocl for communicating with specific\r
+ Redfish service.\r
+\r
+ @param[in] This EFI_REDFISH_DISCOVER_PROTOCOL instance.\r
+ @param[in] ImageHandle EFI image owns these Redfish service instances.\r
+ @param[in] TargetNetworkInterface Target NIC to do the discovery.\r
+ NULL means discover Redfish service on all NICs on platform.\r
+ @param[in] Flags Redfish service discover flags.\r
+ @param[in] Token EFI_REDFISH_DISCOVERED_TOKEN instance.\r
+ The memory of EFI_REDFISH_DISCOVERED_LIST and the strings in\r
+ EFI_REDFISH_DISCOVERED_INFORMATION are all allocated by Acquire()\r
+ and must be freed when caller invoke Release().\r
+\r
+ @retval EFI_SUCCESS REST EX instance of discovered Redfish services are returned.\r
+ @retval EFI_INVALID_PARAMETERS ImageHandle == NULL, Flags == 0, Token == NULL, Token->Timeout > 5,\r
+ or Token->Event == NULL.\r
+ @retval Others Fail acquire Redfish services.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REDFISH_DISCOVER_ACQUIRE_SERVICE)(\r
+ IN EFI_REDFISH_DISCOVER_PROTOCOL *This,\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_REDFISH_DISCOVER_NETWORK_INSTANCE *TargetNetworkInterface,\r
+ IN EFI_REDFISH_DISCOVER_FLAG Flags,\r
+ IN EFI_REDFISH_DISCOVERED_TOKEN *Token\r
+);\r
+\r
+/**\r
+ This function aborts Redfish service discovery on the given network interface.\r
+\r
+ @param[in] This EFI_REDFISH_DISCOVER_PROTOCOL instance.\r
+ @param[in] TargetNetworkInterface Target NIC to do the discovery.\r
+\r
+ @retval EFI_SUCCESS REST EX instance of discovered Redfish services are returned.\r
+ @retval Others Fail to abort Redfish service discovery.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REDFISH_DISCOVER_ABORT_ACQUIRE)(\r
+ IN EFI_REDFISH_DISCOVER_PROTOCOL *This,\r
+ IN EFI_REDFISH_DISCOVER_NETWORK_INSTANCE *TargetNetworkInterface OPTIONAL\r
+);\r
+\r
+/**\r
+ This function releases Redfish services found by RedfishServiceAcquire().\r
+\r
+ @param[in] This EFI_REDFISH_DISCOVER_PROTOCOL instance.\r
+ @param[in] InstanceList The Redfish service to release.\r
+\r
+ @retval EFI_SUCCESS REST EX instances of discovered Redfish are released.\r
+ @retval Others Fail to remove the entry\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REDFISH_DISCOVER_RELEASE_SERVICE)(\r
+ IN EFI_REDFISH_DISCOVER_PROTOCOL *This,\r
+ IN EFI_REDFISH_DISCOVERED_LIST *InstanceList\r
+);\r
+\r
+typedef struct _EFI_REDFISH_DISCOVER_PROTOCOL {\r
+ EFI_REDFISH_DISCOVER_NETWORK_LIST GetNetworkInterfaceList;\r
+ EFI_REDFISH_DISCOVER_ACQUIRE_SERVICE AcquireRedfishService;\r
+ EFI_REDFISH_DISCOVER_ABORT_ACQUIRE AbortAcquireRedfishService;\r
+ EFI_REDFISH_DISCOVER_RELEASE_SERVICE ReleaseRedfishService;\r
+} EFI_REDFISH_DISCOVER_PROTOCOL;\r
+\r
+extern EFI_GUID gEfiRestExProtocolGuid;\r
+extern EFI_GUID gEfiRestExServiceBindingProtocolGuid;\r
+extern EFI_GUID gEfiRedfishDiscoverProtocolGuid;\r
+#endif\r