Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Siyuan Fu <siyuan.fu@intel.com> Reviewed-by: Jiaxin Wu <jiaxin.wu@intel.com>
		
			
				
	
	
		
			283 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			283 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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
 | 
						|
 |