[PATCH v6 05/14] efi_api: add definitions for HTTP and IP4_CONFIG2 protocols
Ilias Apalodimas
ilias.apalodimas at linaro.org
Tue Dec 3 14:13:19 CET 2024
On Thu, 28 Nov 2024 at 16:44, Adriano Cordova <adrianox at gmail.com> wrote:
>
> Add EFI definitions for EFI_IP4_CONFIG2_PROTOCOL,
> EFI_HTTP_SERVICE_BINDING_PROTOCOL, and EFI_HTTP_PROTOCOL.
> According to UEFI spec 2.10.
>
> Signed-off-by: Adriano Cordova <adrianox at gmail.com>
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> ---
>
> (no changes since v2)
>
> include/efi_api.h | 203 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 203 insertions(+)
>
> diff --git a/include/efi_api.h b/include/efi_api.h
> index 99ee749522..61c4eda8f8 100644
> --- a/include/efi_api.h
> +++ b/include/efi_api.h
> @@ -1725,6 +1725,209 @@ struct efi_pxe_base_code_protocol {
> struct efi_pxe_mode *mode;
> };
>
> +#define EFI_IP4_CONFIG2_PROTOCOL_GUID \
> + EFI_GUID(0x5b446ed1, 0xe30b, 0x4faa, \
> + 0x87, 0x1a, 0x36, 0x54, 0xec, 0xa3, 0x60, 0x80)
> +
> +enum efi_ip4_config2_data_type {
> + EFI_IP4_CONFIG2_DATA_TYPE_INTERFACEINFO,
> + EFI_IP4_CONFIG2_DATA_TYPE_POLICY,
> + EFI_IP4_CONFIG2_DATA_TYPE_MANUAL_ADDRESS,
> + EFI_IP4_CONFIG2_DATA_TYPE_GATEWAY,
> + EFI_IP4_CONFIG2_DATA_TYPE_DNSSERVER,
> + EFI_IP4_CONFIG2_DATA_TYPE_MAXIMUM,
> +};
> +
> +struct efi_ip4_config2_protocol {
> + efi_status_t (EFIAPI * set_data)(struct efi_ip4_config2_protocol *this,
> + enum efi_ip4_config2_data_type data_type,
> + efi_uintn_t data_size,
> + void *data);
> + efi_status_t (EFIAPI * get_data)(struct efi_ip4_config2_protocol *this,
> + enum efi_ip4_config2_data_type data_type,
> + efi_uintn_t *data_size,
> + void *data);
> + efi_status_t (EFIAPI * register_data_notify)(struct efi_ip4_config2_protocol *this,
> + enum efi_ip4_config2_data_type data_type,
> + struct efi_event *event);
> + efi_status_t (EFIAPI * unregister_data_notify)(struct efi_ip4_config2_protocol *this,
> + enum efi_ip4_config2_data_type data_type,
> + struct efi_event *event);
> +};
> +
> +struct efi_ip4_route_table {
> + struct efi_ipv4_address subnet_address;
> + struct efi_ipv4_address subnet_mask;
> + struct efi_ipv4_address gateway_address;
> +};
> +
> +#define EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE 32
> +
> +struct efi_ip4_config2_interface_info {
> + u16 name[EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE];
> + u8 if_type;
> + u32 hw_address_size;
> + struct efi_mac_address hw_address;
> + struct efi_ipv4_address station_address;
> + struct efi_ipv4_address subnet_mask;
> + u32 route_table_size;
> + struct efi_ip4_route_table *route_table;
> +};
> +
> +enum efi_ip4_config2_policy {
> + EFI_IP4_CONFIG2_POLICY_STATIC,
> + EFI_IP4_CONFIG2_POLICY_DHCP,
> + EFI_IP4_CONFIG2_POLICY_MAX
> +};
> +
> +struct efi_ip4_config2_manual_address {
> + struct efi_ipv4_address address;
> + struct efi_ipv4_address subnet_mask;
> +};
> +
> +#define EFI_HTTP_SERVICE_BINDING_PROTOCOL_GUID \
> + EFI_GUID(0xbdc8e6af, 0xd9bc, 0x4379, \
> + 0xa7, 0x2a, 0xe0, 0xc4, 0xe7, 0x5d, 0xae, 0x1c)
> +
> +struct efi_service_binding_protocol {
> + efi_status_t (EFIAPI * create_child)(struct efi_service_binding_protocol *this,
> + efi_handle_t *child_handle);
> + efi_status_t (EFIAPI * destroy_child)(struct efi_service_binding_protocol *this,
> + efi_handle_t child_handle);
> +};
> +
> +#define EFI_HTTP_PROTOCOL_GUID \
> + EFI_GUID(0x7A59B29B, 0x910B, 0x4171, \
> + 0x82, 0x42, 0xA8, 0x5A, 0x0D, 0xF2, 0x5B, 0x5B)
> +
> +enum efi_http_version {
> + HTTPVERSION10,
> + HTTPVERSION11,
> + HTTPVERSIONUNSUPPORTED
> +};
> +
> +struct efi_httpv4_access_point {
> + bool use_default_address;
> + struct efi_ipv4_address local_address;
> + struct efi_ipv4_address local_subnet;
> + u16 local_port;
> +};
> +
> +union efi_http_access_point {
> + struct efi_httpv4_access_point *ipv4_node;
> + struct efi_httpv6_access_point *ipv6_node;
> +};
> +
> +struct efi_http_config_data {
> + enum efi_http_version http_version;
> + u32 timeout;
> + bool is_ipv6;
> + union efi_http_access_point access_point;
> +};
> +
> +enum efi_http_method {
> + HTTP_METHOD_GET,
> + HTTP_METHOD_POST,
> + HTTP_METHOD_PATCH,
> + HTTP_METHOD_OPTIONS,
> + HTTP_METHOD_CONNECT,
> + HTTP_METHOD_HEAD,
> + HTTP_METHOD_PUT,
> + HTTP_METHOD_DELETE,
> + HTTP_METHOD_TRACE,
> + HTTP_METHOD_MAX
> +};
> +
> +enum efi_http_status_code {
> + HTTP_STATUS_UNSUPPORTED_STATUS = 0,
> + HTTP_STATUS_100_CONTINUE,
> + HTTP_STATUS_101_SWITCHING_PROTOCOLS,
> + HTTP_STATUS_200_OK,
> + HTTP_STATUS_201_CREATED,
> + HTTP_STATUS_202_ACCEPTED,
> + HTTP_STATUS_203_NON_AUTHORITATIVE_INFORMATION,
> + HTTP_STATUS_204_NO_CONTENT,
> + HTTP_STATUS_205_RESET_CONTENT,
> + HTTP_STATUS_206_PARTIAL_CONTENT,
> + HTTP_STATUS_300_MULTIPLE_CHOICES,
> + HTTP_STATUS_301_MOVED_PERMANENTLY,
> + HTTP_STATUS_302_FOUND,
> + HTTP_STATUS_303_SEE_OTHER,
> + HTTP_STATUS_304_NOT_MODIFIED,
> + HTTP_STATUS_305_USE_PROXY,
> + HTTP_STATUS_307_TEMPORARY_REDIRECT,
> + HTTP_STATUS_400_BAD_REQUEST,
> + HTTP_STATUS_401_UNAUTHORIZED,
> + HTTP_STATUS_402_PAYMENT_REQUIRED,
> + HTTP_STATUS_403_FORBIDDEN,
> + HTTP_STATUS_404_NOT_FOUND,
> + HTTP_STATUS_405_METHOD_NOT_ALLOWED,
> + HTTP_STATUS_406_NOT_ACCEPTABLE,
> + HTTP_STATUS_407_PROXY_AUTHENTICATION_REQUIRED,
> + HTTP_STATUS_408_REQUEST_TIME_OUT,
> + HTTP_STATUS_409_CONFLICT,
> + HTTP_STATUS_410_GONE,
> + HTTP_STATUS_411_LENGTH_REQUIRED,
> + HTTP_STATUS_412_PRECONDITION_FAILED,
> + HTTP_STATUS_413_REQUEST_ENTITY_TOO_LARGE,
> + HTTP_STATUS_414_REQUEST_URI_TOO_LARGE,
> + HTTP_STATUS_415_UNSUPPORTED_MEDIA_TYPE,
> + HTTP_STATUS_416_REQUESTED_RANGE_NOT_SATISFIED,
> + HTTP_STATUS_417_EXPECTATION_FAILED,
> + HTTP_STATUS_500_INTERNAL_SERVER_ERROR,
> + HTTP_STATUS_501_NOT_IMPLEMENTED,
> + HTTP_STATUS_502_BAD_GATEWAY,
> + HTTP_STATUS_503_SERVICE_UNAVAILABLE,
> + HTTP_STATUS_504_GATEWAY_TIME_OUT,
> + HTTP_STATUS_505_HTTP_VERSION_NOT_SUPPORTED,
> + HTTP_STATUS_308_PERMANENT_REDIRECT
> +};
> +
> +struct efi_http_request_data {
> + enum efi_http_method method;
> + u16 *url;
> +};
> +
> +struct efi_http_response_data {
> + enum efi_http_status_code status_code;
> +};
> +
> +struct efi_http_header {
> + char *field_name;
> + char *field_value;
> +};
> +
> +struct efi_http_message {
> + union {
> + struct efi_http_request_data *request;
> + struct efi_http_response_data *response;
> + } data;
> + efi_uintn_t header_count;
> + struct efi_http_header *headers;
> + efi_uintn_t body_length;
> + void *body;
> +};
> +
> +struct efi_http_token {
> + struct efi_event *event;
> + efi_status_t status;
> + struct efi_http_message *message;
> +};
> +
> +struct efi_http_protocol {
> + efi_status_t (EFIAPI * get_mode_data)(struct efi_http_protocol *this,
> + struct efi_http_config_data *data);
> + efi_status_t (EFIAPI * configure)(struct efi_http_protocol *this,
> + struct efi_http_config_data *data);
> + efi_status_t (EFIAPI * request)(struct efi_http_protocol *this,
> + struct efi_http_token *token);
> + efi_status_t (EFIAPI * cancel)(struct efi_http_protocol *this,
> + struct efi_http_token *token);
> + efi_status_t (EFIAPI * response)(struct efi_http_protocol *this,
> + struct efi_http_token *token);
> + efi_status_t (EFIAPI * poll)(struct efi_http_protocol *this);
> +};
> +
> #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \
> EFI_GUID(0x964e5b22, 0x6459, 0x11d2, \
> 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
> --
> 2.43.0
>
Acked-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
More information about the U-Boot
mailing list