| /** @file |
| Header file of Miscellaneous Routines for TlsAuthConfigDxe driver. |
| |
| Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> |
| |
| This program and the accompanying materials |
| are licensed and made available under the terms and conditions of the BSD License |
| which accompanies this distribution. The full text of the license may be found at |
| http://opensource.org/licenses/bsd-license.php |
| |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. |
| |
| **/ |
| |
| #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 |
| |