]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg/Include: Definitions of EFI REST EX Protocol
authorAbner Chang <abner.chang@hpe.com>
Mon, 12 Oct 2020 05:53:48 +0000 (13:53 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Thu, 15 Oct 2020 01:07:24 +0000 (01:07 +0000)
Add definitions of EFI REST EX Protocol according
to UEFI spec v2.8 Section 29.7.2 EFI REST EX Protocol.

Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Signed-off-by: Siyuan Fu <siyuan.fu@intel.com>
Signed-off-by: Fan Wang <fan.wang@intel.com>
Signed-off-by: Abner Chang <abner.chang@hpe.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Nickle Wang <nickle.wang@hpe.com>
Reviewed-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
MdePkg/Include/Protocol/RestEx.h [new file with mode: 0644]
MdePkg/MdePkg.dec

diff --git a/MdePkg/Include/Protocol/RestEx.h b/MdePkg/Include/Protocol/RestEx.h
new file mode 100644 (file)
index 0000000..dc1b438
--- /dev/null
@@ -0,0 +1,390 @@
+/** @file\r
+  This file defines the EFI REST EX Protocol interface. It is\r
+  split into the following two main sections.\r
+\r
+  - REST EX Service Binding Protocol\r
+  - REST EX Protocol\r
+\r
+   Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>\r
+\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+  @par Revision Reference:\r
+  This Protocol is introduced in UEFI Specification 2.8\r
+\r
+**/\r
+\r
+#ifndef EFI_REST_EX_PROTOCOL_H_\r
+#define EFI_REST_EX_PROTOCOL_H_\r
+\r
+#include <Protocol/Http.h>\r
+\r
+//\r
+//GUID definitions\r
+//\r
+#define EFI_REST_EX_SERVICE_BINDING_PROTOCOL_GUID \\r
+  { \\r
+    0x456bbe01, 0x99d0, 0x45ea, {0xbb, 0x5f, 0x16, 0xd8, 0x4b, 0xed, 0xc5, 0x59 } \\r
+  }\r
+\r
+#define EFI_REST_EX_PROTOCOL_GUID \\r
+  { \\r
+    0x55648b91, 0xe7d, 0x40a3, {0xa9, 0xb3, 0xa8, 0x15, 0xd7, 0xea, 0xdf, 0x97 } \\r
+  }\r
+\r
+typedef struct _EFI_REST_EX_PROTOCOL EFI_REST_EX_PROTOCOL;\r
+\r
+//*******************************************************\r
+//EFI_REST_EX_SERVICE_INFO_VER\r
+//*******************************************************\r
+typedef struct {\r
+  UINT8  Major;\r
+  UINT8  Minor;\r
+} EFI_REST_EX_SERVICE_INFO_VER;\r
+\r
+//*******************************************************\r
+//EFI_REST_EX_SERVICE_INFO_HEADER\r
+//*******************************************************\r
+typedef struct {\r
+  UINT32                         Length;\r
+  EFI_REST_EX_SERVICE_INFO_VER   RestServiceInfoVer;\r
+} EFI_REST_EX_SERVICE_INFO_HEADER;\r
+\r
+//*******************************************************\r
+// EFI_REST_EX_SERVICE_TYPE\r
+//*******************************************************\r
+typedef enum {\r
+  EfiRestExServiceUnspecific = 1,\r
+  EfiRestExServiceRedfish,\r
+  EfiRestExServiceOdata,\r
+  EfiRestExServiceVendorSpecific = 0xff,\r
+  EfiRestExServiceTypeMax\r
+} EFI_REST_EX_SERVICE_TYPE;\r
+\r
+//*******************************************************\r
+// EFI_REST_EX_SERVICE_ACCESS_MODE\r
+//*******************************************************\r
+typedef enum {\r
+  EfiRestExServiceInBandAccess = 1,\r
+  EfiRestExServiceOutOfBandAccess = 2,\r
+  EfiRestExServiceModeMax\r
+} EFI_REST_EX_SERVICE_ACCESS_MODE;\r
+\r
+//*******************************************************\r
+// EFI_REST_EX_CONFIG_TYPE\r
+//*******************************************************\r
+typedef enum {\r
+  EfiRestExConfigHttp,\r
+  EfiRestExConfigUnspecific,\r
+  EfiRestExConfigTypeMax\r
+} EFI_REST_EX_CONFIG_TYPE;\r
+\r
+//*******************************************************\r
+//EFI_REST_EX_SERVICE_INFO v1.0\r
+//*******************************************************\r
+typedef struct {\r
+  EFI_REST_EX_SERVICE_INFO_HEADER  EfiRestExServiceInfoHeader;\r
+  EFI_REST_EX_SERVICE_TYPE         RestServiceType;\r
+  EFI_REST_EX_SERVICE_ACCESS_MODE  RestServiceAccessMode;\r
+  EFI_GUID                         VendorRestServiceName;\r
+  UINT32                           VendorSpecificDataLength;\r
+  UINT8                            *VendorSpecifcData;\r
+  EFI_REST_EX_CONFIG_TYPE          RestExConfigType;\r
+  UINT8                            RestExConfigDataLength;\r
+} EFI_REST_EX_SERVICE_INFO_V_1_0;\r
+\r
+//*******************************************************\r
+//EFI_REST_EX_SERVICE_INFO\r
+//*******************************************************\r
+typedef union {\r
+  EFI_REST_EX_SERVICE_INFO_HEADER EfiRestExServiceInfoHeader;\r
+  EFI_REST_EX_SERVICE_INFO_V_1_0  EfiRestExServiceInfoV10;\r
+} EFI_REST_EX_SERVICE_INFO;\r
+\r
+//*******************************************************\r
+// EFI_REST_EX_HTTP_CONFIG_DATA\r
+//*******************************************************\r
+typedef struct {\r
+  EFI_HTTP_CONFIG_DATA    HttpConfigData;\r
+  UINT32                  SendReceiveTimeout;\r
+} EFI_REST_EX_HTTP_CONFIG_DATA;\r
+\r
+//*******************************************************\r
+//EFI_REST_EX_CONFIG_DATA\r
+//*******************************************************\r
+typedef UINT8 *EFI_REST_EX_CONFIG_DATA;\r
+\r
+//*******************************************************\r
+//EFI_REST_EX_TOKEN\r
+//*******************************************************\r
+typedef struct {\r
+  EFI_EVENT         Event;\r
+  EFI_STATUS        Status;\r
+  EFI_HTTP_MESSAGE  *ResponseMessage;\r
+} EFI_REST_EX_TOKEN;\r
+\r
+/**\r
+  Provides a simple HTTP-like interface to send and receive resources from a REST service.\r
+\r
+  The SendReceive() function sends an HTTP request to this REST service, and returns a\r
+  response when the data is retrieved from the service. RequestMessage contains the HTTP\r
+  request to the REST resource identified by RequestMessage.Request.Url. The\r
+  ResponseMessage is the returned HTTP response for that request, including any HTTP\r
+  status.\r
+\r
+  @param[in]  This                Pointer to EFI_REST_EX_PROTOCOL instance for a particular\r
+                                  REST service.\r
+  @param[in]  RequestMessage      Pointer to the HTTP request data for this resource\r
+  @param[out] ResponseMessage     Pointer to the HTTP response data obtained for this requested.\r
+\r
+  @retval EFI_SUCCESS             operation succeeded.\r
+  @retval EFI_INVALID_PARAMETER   This, RequestMessage, or ResponseMessage are NULL.\r
+  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REST_SEND_RECEIVE)(\r
+  IN      EFI_REST_EX_PROTOCOL   *This,\r
+  IN      EFI_HTTP_MESSAGE       *RequestMessage,\r
+  OUT     EFI_HTTP_MESSAGE       *ResponseMessage\r
+  );\r
+\r
+/**\r
+  Obtain the current time from this REST service instance.\r
+\r
+  The GetServiceTime() function is an optional interface to obtain the current time from\r
+  this REST service instance. If this REST service does not support to retrieve the time,\r
+  this function returns EFI_UNSUPPORTED. This function must returns EFI_UNSUPPORTED if\r
+  EFI_REST_EX_SERVICE_TYPE returned in EFI_REST_EX_SERVICE_INFO from GetService() is\r
+  EFI_REST_EX_SERVICE_UNSPECIFIC.\r
+\r
+  @param[in]  This                Pointer to EFI_REST_EX_PROTOCOL instance for a particular\r
+                                  REST service.\r
+  @param[out] Time                A pointer to storage to receive a snapshot of the current time of\r
+                                  the REST service.\r
+\r
+  @retval EFI_SUCCESS             operation succeeded.\r
+  @retval EFI_INVALID_PARAMETER   This or Time are NULL.\r
+  @retval EFI_UNSUPPORTED         The RESTful service does not support returning the time.\r
+  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred.\r
+  @retval EFI_NOT_READY           The configuration of this instance is not set yet. Configure() must\r
+                                  be executed and returns successfully prior to invoke this function.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REST_GET_TIME)(\r
+  IN      EFI_REST_EX_PROTOCOL   *This,\r
+  OUT     EFI_TIME               *Time\r
+  );\r
+\r
+/**\r
+  This function returns the information of REST service provided by this EFI REST EX driver instance.\r
+\r
+  The information such as the type of REST service and the access mode of REST EX driver instance\r
+  (In-band or Out-of-band) are described in EFI_REST_EX_SERVICE_INFO structure. For the vendor-specific\r
+  REST service, vendor-specific REST service information is returned in VendorSpecifcData.\r
+  REST EX driver designer is well know what REST service this REST EX driver instance intends to\r
+  communicate with. The designer also well know this driver instance is used to talk to BMC through\r
+  specific platform mechanism or talk to REST server through UEFI HTTP protocol. REST EX driver is\r
+  responsible to fill up the correct information in EFI_REST_EX_SERVICE_INFO. EFI_REST_EX_SERVICE_INFO\r
+  is referred by EFI REST clients to pickup the proper EFI REST EX driver instance to get and set resource.\r
+  GetService() is a basic and mandatory function which must be able to use even Configure() is not invoked\r
+  in previously.\r
+\r
+  @param[in]  This                Pointer to EFI_REST_EX_PROTOCOL instance for a particular\r
+                                  REST service.\r
+  @param[out] RestExServiceInfo   Pointer to receive a pointer to EFI_REST_EX_SERVICE_INFO structure. The\r
+                                  format of EFI_REST_EX_SERVICE_INFO is version controlled for the future\r
+                                  extension. The version of EFI_REST_EX_SERVICE_INFO structure is returned\r
+                                  in the header within this structure. EFI REST client refers to the correct\r
+                                  format of structure according to the version number. The pointer to\r
+                                  EFI_REST_EX_SERVICE_INFO is a memory block allocated by EFI REST EX driver\r
+                                  instance. That is caller's responsibility to free this memory when this\r
+                                  structure is no longer needed. Refer to Related Definitions below for the\r
+                                  definitions of EFI_REST_EX_SERVICE_INFO structure.\r
+\r
+  @retval EFI_SUCCESS             EFI_REST_EX_SERVICE_INFO is returned in RestExServiceInfo. This function\r
+                                  is not supported in this REST EX Protocol driver instance.\r
+  @retval EFI_UNSUPPORTED         This function is not supported in this REST EX Protocol driver instance.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REST_EX_GET_SERVICE)(\r
+  IN   EFI_REST_EX_PROTOCOL      *This,\r
+  OUT  EFI_REST_EX_SERVICE_INFO  **RestExServiceInfo\r
+  );\r
+\r
+/**\r
+  This function returns operational configuration of current EFI REST EX child instance.\r
+\r
+  This function returns the current configuration of EFI REST EX child instance. The format of\r
+  operational configuration depends on the implementation of EFI REST EX driver instance. For\r
+  example, HTTP-aware EFI REST EX driver instance uses EFI HTTP protocol as the undying protocol\r
+  to communicate with REST service. In this case, the type of configuration is\r
+  EFI_REST_EX_CONFIG_TYPE_HTTP returned from GetService(). EFI_HTTP_CONFIG_DATA is used as EFI REST\r
+  EX configuration format and returned to EFI REST client. User has to type cast RestExConfigData\r
+  to EFI_HTTP_CONFIG_DATA. For those non HTTP-aware REST EX driver instances, the type of configuration\r
+  is EFI_REST_EX_CONFIG_TYPE_UNSPECIFIC returned from GetService(). In this case, the format of\r
+  returning data could be non industrial. Instead, the format of configuration data is system/platform\r
+  specific definition such as BMC mechanism used in EFI REST EX driver instance. EFI REST client and\r
+  EFI REST EX driver instance have to refer to the specific system /platform spec which is out of UEFI scope.\r
+\r
+  @param[in]  This                This is the EFI_REST_EX_PROTOCOL instance.\r
+  @param[out] RestExConfigData    Pointer to receive a pointer to EFI_REST_EX_CONFIG_DATA.\r
+                                  The memory allocated for configuration data should be freed\r
+                                  by caller. See Related Definitions for the details.\r
+\r
+  @retval EFI_SUCCESS             EFI_REST_EX_CONFIG_DATA is returned in successfully.\r
+  @retval EFI_UNSUPPORTED         This function is not supported in this REST EX Protocol driver instance.\r
+  @retval EFI_NOT_READY           The configuration of this instance is not set yet. Configure() must be\r
+                                  executed and returns successfully prior to invoke this function.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REST_EX_GET_MODE_DATA)(\r
+  IN  EFI_REST_EX_PROTOCOL  *This,\r
+  OUT EFI_REST_EX_CONFIG_DATA *RestExConfigData\r
+  );\r
+\r
+/**\r
+  This function is used to configure EFI REST EX child instance.\r
+\r
+  This function is used to configure the setting of underlying protocol of REST EX child\r
+  instance. The type of configuration is according to the implementation of EFI REST EX\r
+  driver instance. For example, HTTP-aware EFI REST EX driver instance uses EFI HTTP protocol\r
+  as the undying protocol to communicate with REST service. The type of configuration is\r
+  EFI_REST_EX_CONFIG_TYPE_HTTP and RestExConfigData is the same format with EFI_HTTP_CONFIG_DATA.\r
+  Akin to HTTP configuration, REST EX child instance can be configure to use different HTTP\r
+  local access point for the data transmission. Multiple REST clients may use different\r
+  configuration of HTTP to distinguish themselves, such as to use the different TCP port.\r
+  For those non HTTP-aware REST EX driver instance, the type of configuration is\r
+  EFI_REST_EX_CONFIG_TYPE_UNSPECIFIC. RestExConfigData refers to the non industrial standard.\r
+  Instead, the format of configuration data is system/platform specific definition such as BMC.\r
+  In this case, EFI REST client and EFI REST EX driver instance have to refer to the specific\r
+  system/platform spec which is out of the UEFI scope. Besides GetService()function, no other\r
+  EFI REST EX functions can be executed by this instance until Configure()is executed and returns\r
+  successfully. All other functions must returns EFI_NOT_READY if this instance is not configured\r
+  yet. Set RestExConfigData to NULL means to put EFI REST EX child instance into the unconfigured\r
+  state.\r
+\r
+  @param[in]  This                This is the EFI_REST_EX_PROTOCOL instance.\r
+  @param[in]  RestExConfigData    Pointer to EFI_REST_EX_CONFIG_DATA. See Related Definitions in\r
+                                  GetModeData() protocol interface.\r
+\r
+  @retval EFI_SUCCESS             EFI_REST_EX_CONFIG_DATA is set in successfully.\r
+  @retval EFI_DEVICE_ERROR        Configuration for this REST EX child instance is failed with the given\r
+                                  EFI_REST_EX_CONFIG_DATA.\r
+  @retval EFI_UNSUPPORTED         This function is not supported in this REST EX Protocol driver instance.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REST_EX_CONFIGURE)(\r
+  IN  EFI_REST_EX_PROTOCOL  *This,\r
+  IN  EFI_REST_EX_CONFIG_DATA RestExConfigData\r
+  );\r
+\r
+/**\r
+  This function sends REST request to REST service and signal caller's event asynchronously when\r
+  the final response is received by REST EX Protocol driver instance.\r
+\r
+  The essential design of this function is to handle asynchronous send/receive implicitly according\r
+  to REST service asynchronous request mechanism. Caller will get the notification once the response\r
+  is returned from REST service.\r
+\r
+  @param[in]  This                  This is the EFI_REST_EX_PROTOCOL instance.\r
+  @param[in]  RequestMessage        This is the HTTP request message sent to REST service. Set RequestMessage\r
+                                    to NULL to cancel the previous asynchronous request associated with the\r
+                                    corresponding RestExToken. See descriptions for the details.\r
+  @param[in]  RestExToken           REST EX token which REST EX Protocol instance uses to notify REST client\r
+                                    the status of response of asynchronous REST request. See related definition\r
+                                    of EFI_REST_EX_TOKEN.\r
+  @param[in]  TimeOutInMilliSeconds The pointer to the timeout in milliseconds which REST EX Protocol driver\r
+                                    instance refers as the duration to drop asynchronous REST request. NULL\r
+                                    pointer means no timeout for this REST request. REST EX Protocol driver\r
+                                    signals caller's event with EFI_STATUS set to EFI_TIMEOUT in RestExToken\r
+                                    if REST EX Protocol can't get the response from REST service within\r
+                                    TimeOutInMilliSeconds.\r
+\r
+  @retval EFI_SUCCESS               Asynchronous REST request is established.\r
+  @retval EFI_UNSUPPORTED           This REST EX Protocol driver instance doesn't support asynchronous request.\r
+  @retval EFI_TIMEOUT               Asynchronous REST request is not established and timeout is expired.\r
+  @retval EFI_ABORT                 Previous asynchronous REST request has been canceled.\r
+  @retval EFI_DEVICE_ERROR          Otherwise, returns EFI_DEVICE_ERROR for other errors according to HTTP Status Code.\r
+  @retval EFI_NOT_READY             The configuration of this instance is not set yet. Configure() must be executed\r
+                                    and returns successfully prior to invoke this function.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REST_EX_ASYNC_SEND_RECEIVE)(\r
+  IN      EFI_REST_EX_PROTOCOL   *This,\r
+  IN      EFI_HTTP_MESSAGE       *RequestMessage OPTIONAL,\r
+  IN      EFI_REST_EX_TOKEN      *RestExToken,\r
+  IN      UINTN                  *TimeOutInMilliSeconds OPTIONAL\r
+  );\r
+\r
+/**\r
+  This function sends REST request to a REST Event service and signals caller's event\r
+  token asynchronously when the URI resource change event is received by REST EX\r
+  Protocol driver instance.\r
+\r
+  The essential design of this function is to monitor event implicitly according to\r
+  REST service event service mechanism. Caller will get the notification if certain\r
+  resource is changed.\r
+\r
+  @param[in]  This                  This is the EFI_REST_EX_PROTOCOL instance.\r
+  @param[in]  RequestMessage        This is the HTTP request message sent to REST service. Set RequestMessage\r
+                                    to NULL to cancel the previous event service associated with the corresponding\r
+                                    RestExToken. See descriptions for the details.\r
+  @param[in]  RestExToken           REST EX token which REST EX Protocol driver instance uses to notify REST client\r
+                                    the URI resource which monitored by REST client has been changed. See the related\r
+                                    definition of EFI_REST_EX_TOKEN in EFI_REST_EX_PROTOCOL.AsyncSendReceive().\r
+\r
+  @retval EFI_SUCCESS               Asynchronous REST request is established.\r
+  @retval EFI_UNSUPPORTED           This REST EX Protocol driver instance doesn't support asynchronous request.\r
+  @retval EFI_ABORT                 Previous asynchronous REST request has been canceled or event subscription has been\r
+                                    delete from service.\r
+  @retval EFI_DEVICE_ERROR          Otherwise, returns EFI_DEVICE_ERROR for other errors according to HTTP Status Code.\r
+  @retval EFI_NOT_READY             The configuration of this instance is not set yet. Configure() must be executed\r
+                                    and returns successfully prior to invoke this function.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_REST_EX_EVENT_SERVICE)(\r
+  IN      EFI_REST_EX_PROTOCOL   *This,\r
+  IN      EFI_HTTP_MESSAGE       *RequestMessage OPTIONAL,\r
+  IN      EFI_REST_EX_TOKEN      *RestExToken\r
+);\r
+\r
+///\r
+/// EFI REST(EX) protocols are designed to support REST communication between EFI REST client\r
+/// applications/drivers and REST services. EFI REST client tool uses EFI REST(EX) protocols\r
+/// to send/receive resources to/from REST service to manage systems, configure systems or\r
+/// manipulate resources on REST service. Due to HTTP protocol is commonly used to communicate\r
+/// with REST service in practice, EFI REST(EX) protocols adopt HTTP as the message format to\r
+/// send and receive REST service resource. EFI REST(EX) driver instance abstracts EFI REST\r
+/// client functionality and provides underlying interface to communicate with REST service.\r
+/// EFI REST(EX) driver instance knows how to communicate with REST service through certain\r
+/// interface after the corresponding configuration is initialized.\r
+///\r
+struct _EFI_REST_EX_PROTOCOL {\r
+  EFI_REST_SEND_RECEIVE          SendReceive;\r
+  EFI_REST_GET_TIME              GetServiceTime;\r
+  EFI_REST_EX_GET_SERVICE        GetService;\r
+  EFI_REST_EX_GET_MODE_DATA      GetModeData;\r
+  EFI_REST_EX_CONFIGURE          Configure;\r
+  EFI_REST_EX_ASYNC_SEND_RECEIVE AyncSendReceive;\r
+  EFI_REST_EX_EVENT_SERVICE      EventService;\r
+};\r
+\r
+extern EFI_GUID gEfiRestExServiceBindingProtocolGuid;\r
+extern EFI_GUID gEfiRestExProtocolGuid;\r
+\r
+#endif\r
index 812be75fb3b28667e3bdf86209918ddafe52f8dc..5205374d62415d0cb3baebd5e1d1d3119f73bd84 100644 (file)
   ## Include/Protocol/NvdimmLabel.h\r
   gEfiNvdimmLabelProtocolGuid               = { 0xd40b6b80, 0x97d5, 0x4282, { 0xbb, 0x1d, 0x22, 0x3a, 0x16, 0x91, 0x80, 0x58 }}\r
 \r
+  #\r
+  # Protocols defined in UEFI2.8\r
+  #\r
+  ## Include/Protocol/RestEx.h\r
+  gEfiRestExProtocolGuid               = { 0x55648b91, 0xe7d, 0x40a3, { 0xa9, 0xb3, 0xa8, 0x15, 0xd7, 0xea, 0xdf, 0x97 }}\r
+  gEfiRestExServiceBindingProtocolGuid = { 0x456bbe01, 0x99d0, 0x45ea, { 0xbb, 0x5f, 0x16, 0xd8, 0x4b, 0xed, 0xc5, 0x59 }}\r
+\r
   #\r
   # Protocols defined in Shell2.0\r
   #\r