mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-27 16:58:09 +01:00
277 lines
11 KiB
C
277 lines
11 KiB
C
|
/** @file
|
||
|
Header file of Miscellaneous Routines for TlsAuthConfigDxe driver.
|
||
|
|
||
|
Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
|
||
|
|
||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||
|
|
||
|
**/
|
||
|
|
||
|
#ifndef __TLS_AUTH_CONFIG_IMPL_H__
|
||
|
#define __TLS_AUTH_CONFIG_IMPL_H__
|
||
|
|
||
|
#include <Uefi.h>
|
||
|
|
||
|
#include <Protocol/HiiConfigAccess.h>
|
||
|
#include <Protocol/SimpleFileSystem.h>
|
||
|
|
||
|
//
|
||
|
// Libraries
|
||
|
//
|
||
|
#include <Library/UefiBootServicesTableLib.h>
|
||
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
||
|
#include <Library/MemoryAllocationLib.h>
|
||
|
#include <Library/BaseMemoryLib.h>
|
||
|
#include <Library/BaseLib.h>
|
||
|
#include <Library/UefiLib.h>
|
||
|
#include <Library/DebugLib.h>
|
||
|
#include <Library/DevicePathLib.h>
|
||
|
#include <Library/HiiLib.h>
|
||
|
#include <Library/UefiHiiServicesLib.h>
|
||
|
#include <Library/FileExplorerLib.h>
|
||
|
#include <Library/PrintLib.h>
|
||
|
|
||
|
#include <Guid/MdeModuleHii.h>
|
||
|
#include <Guid/ImageAuthentication.h>
|
||
|
#include <Guid/TlsAuthentication.h>
|
||
|
|
||
|
|
||
|
//
|
||
|
// Include files with function prototypes
|
||
|
//
|
||
|
#include "TlsAuthConfigNvData.h"
|
||
|
|
||
|
extern UINT8 TlsAuthConfigDxeStrings[];
|
||
|
extern UINT8 TlsAuthConfigVfrBin[];
|
||
|
|
||
|
#define TLS_AUTH_CONFIG_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('T', 'A', 'C', 'D')
|
||
|
#define TLS_AUTH_CONFIG_PRIVATE_FROM_THIS(a) CR (a, TLS_AUTH_CONFIG_PRIVATE_DATA, ConfigAccess, TLS_AUTH_CONFIG_PRIVATE_DATA_SIGNATURE)
|
||
|
|
||
|
#define TLS_AUTH_CONFIG_VAR_BASE_ATTR (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)
|
||
|
|
||
|
typedef struct _TLS_AUTH_CONFIG_PRIVATE_DATA TLS_AUTH_CONFIG_PRIVATE_DATA;
|
||
|
typedef struct _TLS_AUTH_CONFIG_FILE_CONTEXT TLS_AUTH_CONFIG_FILE_CONTEXT;
|
||
|
|
||
|
///
|
||
|
/// HII specific Vendor Device Path definition.
|
||
|
///
|
||
|
typedef struct {
|
||
|
VENDOR_DEVICE_PATH VendorDevicePath;
|
||
|
EFI_DEVICE_PATH_PROTOCOL End;
|
||
|
} HII_VENDOR_DEVICE_PATH;
|
||
|
|
||
|
struct _TLS_AUTH_CONFIG_FILE_CONTEXT {
|
||
|
EFI_FILE_HANDLE FHandle;
|
||
|
UINT16 *FileName;
|
||
|
};
|
||
|
|
||
|
struct _TLS_AUTH_CONFIG_PRIVATE_DATA {
|
||
|
UINTN Signature;
|
||
|
|
||
|
EFI_HANDLE DriverHandle;
|
||
|
EFI_HII_HANDLE RegisteredHandle;
|
||
|
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
|
||
|
TLS_AUTH_CONFIG_IFR_NVDATA TlsAuthConfigNvData;
|
||
|
|
||
|
TLS_AUTH_CONFIG_FILE_CONTEXT *FileContext;
|
||
|
|
||
|
EFI_GUID *CertGuid;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
Unload the configuration form, this includes: delete all the configuration
|
||
|
entries, uninstall the form callback protocol, and free the resources used.
|
||
|
The form will only be unload completely when both IP4 and IP6 stack are stopped.
|
||
|
|
||
|
@param[in] Private Pointer to the driver private data.
|
||
|
|
||
|
@retval EFI_SUCCESS The configuration form is unloaded.
|
||
|
@retval Others Failed to unload the form.
|
||
|
|
||
|
**/
|
||
|
EFI_STATUS
|
||
|
TlsAuthConfigFormUnload (
|
||
|
IN TLS_AUTH_CONFIG_PRIVATE_DATA *Private
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
Initialize the configuration form.
|
||
|
|
||
|
@param[in] Private Pointer to the driver private data.
|
||
|
|
||
|
@retval EFI_SUCCESS The configuration form is initialized.
|
||
|
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
|
||
|
|
||
|
**/
|
||
|
EFI_STATUS
|
||
|
TlsAuthConfigFormInit (
|
||
|
IN TLS_AUTH_CONFIG_PRIVATE_DATA *Private
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
|
||
|
This function allows the caller to request the current
|
||
|
configuration for one or more named elements. The resulting
|
||
|
string is in <ConfigAltResp> format. Any and all alternative
|
||
|
configuration strings shall also be appended to the end of the
|
||
|
current configuration string. If they are, they must appear
|
||
|
after the current configuration. They must contain the same
|
||
|
routing (GUID, NAME, PATH) as the current configuration string.
|
||
|
They must have an additional description indicating the type of
|
||
|
alternative configuration the string represents,
|
||
|
"ALTCFG=<StringToken>". That <StringToken> (when
|
||
|
converted from Hex UNICODE to binary) is a reference to a
|
||
|
string in the associated string pack.
|
||
|
|
||
|
@param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
|
||
|
|
||
|
@param Request A null-terminated Unicode string in
|
||
|
<ConfigRequest> format. Note that this
|
||
|
includes the routing information as well as
|
||
|
the configurable name / value pairs. It is
|
||
|
invalid for this string to be in
|
||
|
<MultiConfigRequest> format.
|
||
|
If a NULL is passed in for the Request field,
|
||
|
all of the settings being abstracted by this function
|
||
|
will be returned in the Results field. In addition,
|
||
|
if a ConfigHdr is passed in with no request elements,
|
||
|
all of the settings being abstracted for that particular
|
||
|
ConfigHdr reference will be returned in the Results Field.
|
||
|
|
||
|
@param Progress On return, points to a character in the
|
||
|
Request string. Points to the string's null
|
||
|
terminator if request was successful. Points
|
||
|
to the most recent "&" before the first
|
||
|
failing name / value pair (or the beginning
|
||
|
of the string if the failure is in the first
|
||
|
name / value pair) if the request was not
|
||
|
successful.
|
||
|
|
||
|
@param Results A null-terminated Unicode string in
|
||
|
<MultiConfigAltResp> format which has all values
|
||
|
filled in for the names in the Request string.
|
||
|
String to be allocated by the called function.
|
||
|
|
||
|
@retval EFI_SUCCESS The Results string is filled with the
|
||
|
values corresponding to all requested
|
||
|
names.
|
||
|
|
||
|
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the
|
||
|
parts of the results that must be
|
||
|
stored awaiting possible future
|
||
|
protocols.
|
||
|
|
||
|
@retval EFI_NOT_FOUND Routing data doesn't match any
|
||
|
known driver. Progress set to the
|
||
|
first character in the routing header.
|
||
|
Note: There is no requirement that the
|
||
|
driver validate the routing data. It
|
||
|
must skip the <ConfigHdr> in order to
|
||
|
process the names.
|
||
|
|
||
|
@retval EFI_INVALID_PARAMETER Illegal syntax. Progress set
|
||
|
to most recent "&" before the
|
||
|
error or the beginning of the
|
||
|
string.
|
||
|
|
||
|
@retval EFI_INVALID_PARAMETER Unknown name. Progress points
|
||
|
to the & before the name in
|
||
|
question.
|
||
|
|
||
|
**/
|
||
|
EFI_STATUS
|
||
|
EFIAPI
|
||
|
TlsAuthConfigAccessExtractConfig (
|
||
|
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
||
|
IN CONST EFI_STRING Request,
|
||
|
OUT EFI_STRING *Progress,
|
||
|
OUT EFI_STRING *Results
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
|
||
|
This function applies changes in a driver's configuration.
|
||
|
Input is a Configuration, which has the routing data for this
|
||
|
driver followed by name / value configuration pairs. The driver
|
||
|
must apply those pairs to its configurable storage. If the
|
||
|
driver's configuration is stored in a linear block of data
|
||
|
and the driver's name / value pairs are in <BlockConfig>
|
||
|
format, it may use the ConfigToBlock helper function (above) to
|
||
|
simplify the job.
|
||
|
|
||
|
@param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
|
||
|
|
||
|
@param Configuration A null-terminated Unicode string in
|
||
|
<ConfigString> format.
|
||
|
|
||
|
@param Progress A pointer to a string filled in with the
|
||
|
offset of the most recent '&' before the
|
||
|
first failing name / value pair (or the
|
||
|
beginn ing of the string if the failure
|
||
|
is in the first name / value pair) or
|
||
|
the terminating NULL if all was
|
||
|
successful.
|
||
|
|
||
|
@retval EFI_SUCCESS The results have been distributed or are
|
||
|
awaiting distribution.
|
||
|
|
||
|
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the
|
||
|
parts of the results that must be
|
||
|
stored awaiting possible future
|
||
|
protocols.
|
||
|
|
||
|
@retval EFI_INVALID_PARAMETERS Passing in a NULL for the
|
||
|
Results parameter would result
|
||
|
in this type of error.
|
||
|
|
||
|
@retval EFI_NOT_FOUND Target for the specified routing data
|
||
|
was not found
|
||
|
|
||
|
**/
|
||
|
EFI_STATUS
|
||
|
EFIAPI
|
||
|
TlsAuthConfigAccessRouteConfig (
|
||
|
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
||
|
IN CONST EFI_STRING Configuration,
|
||
|
OUT EFI_STRING *Progress
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
|
||
|
This function is called to provide results data to the driver.
|
||
|
This data consists of a unique key that is used to identify
|
||
|
which data is either being passed back or being asked for.
|
||
|
|
||
|
@param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
|
||
|
@param Action Specifies the type of action taken by the browser.
|
||
|
@param QuestionId A unique value which is sent to the original
|
||
|
exporting driver so that it can identify the type
|
||
|
of data to expect. The format of the data tends to
|
||
|
vary based on the opcode that generated the callback.
|
||
|
@param Type The type of value for the question.
|
||
|
@param Value A pointer to the data being sent to the original
|
||
|
exporting driver.
|
||
|
@param ActionRequest On return, points to the action requested by the
|
||
|
callback function.
|
||
|
|
||
|
@retval EFI_SUCCESS The callback successfully handled the action.
|
||
|
@retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the
|
||
|
variable and its data.
|
||
|
@retval EFI_DEVICE_ERROR The variable could not be saved.
|
||
|
@retval EFI_UNSUPPORTED The specified Action is not supported by the
|
||
|
callback.
|
||
|
**/
|
||
|
EFI_STATUS
|
||
|
EFIAPI
|
||
|
TlsAuthConfigAccessCallback (
|
||
|
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
||
|
IN EFI_BROWSER_ACTION Action,
|
||
|
IN EFI_QUESTION_ID QuestionId,
|
||
|
IN UINT8 Type,
|
||
|
IN OUT EFI_IFR_TYPE_VALUE *Value,
|
||
|
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|