-/** @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