1 /** @file 2 The header file of HII Config Access protocol implementation of TCG 3 configuration module. 4 5 Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR> 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #ifndef __TCG_CONFIG_IMPL_H__ 17 #define __TCG_CONFIG_IMPL_H__ 18 19 #include <Uefi.h> 20 21 #include <Protocol/HiiConfigAccess.h> 22 #include <Protocol/HiiConfigRouting.h> 23 #include <Protocol/TcgService.h> 24 25 #include <Library/BaseLib.h> 26 #include <Library/BaseMemoryLib.h> 27 #include <Library/DebugLib.h> 28 #include <Library/MemoryAllocationLib.h> 29 #include <Library/UefiBootServicesTableLib.h> 30 #include <Library/UefiRuntimeServicesTableLib.h> 31 #include <Library/UefiHiiServicesLib.h> 32 #include <Library/UefiLib.h> 33 #include <Library/HiiLib.h> 34 #include <Library/DevicePathLib.h> 35 #include <Library/PcdLib.h> 36 #include <Library/PrintLib.h> 37 #include <Library/Tpm12DeviceLib.h> 38 39 #include <Guid/MdeModuleHii.h> 40 41 #include "TcgConfigNvData.h" 42 43 // 44 // Tool generated IFR binary data and String package data 45 // 46 extern UINT8 TcgConfigBin[]; 47 extern UINT8 TcgConfigDxeStrings[]; 48 49 /// 50 /// HII specific Vendor Device Path definition. 51 /// 52 typedef struct { 53 VENDOR_DEVICE_PATH VendorDevicePath; 54 EFI_DEVICE_PATH_PROTOCOL End; 55 } HII_VENDOR_DEVICE_PATH; 56 57 typedef struct { 58 UINTN Signature; 59 60 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess; 61 EFI_HII_HANDLE HiiHandle; 62 EFI_HANDLE DriverHandle; 63 64 TCG_CONFIGURATION *Configuration; 65 EFI_TCG_PROTOCOL *TcgProtocol; 66 } TCG_CONFIG_PRIVATE_DATA; 67 68 extern TCG_CONFIG_PRIVATE_DATA mTcgConfigPrivateDateTemplate; 69 70 #define TCG_CONFIG_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('T', 'C', 'G', 'D') 71 #define TCG_CONFIG_PRIVATE_DATA_FROM_THIS(a) CR (a, TCG_CONFIG_PRIVATE_DATA, ConfigAccess, TCG_CONFIG_PRIVATE_DATA_SIGNATURE) 72 73 74 /** 75 This function publish the TCG configuration Form for TPM device. 76 77 @param[in, out] PrivateData Points to TCG configuration private data. 78 79 @retval EFI_SUCCESS HII Form is installed for this network device. 80 @retval EFI_OUT_OF_RESOURCES Not enough resource for HII Form installation. 81 @retval Others Other errors as indicated. 82 83 **/ 84 EFI_STATUS 85 InstallTcgConfigForm ( 86 IN OUT TCG_CONFIG_PRIVATE_DATA *PrivateData 87 ); 88 89 /** 90 This function removes TCG configuration Form. 91 92 @param[in, out] PrivateData Points to TCG configuration private data. 93 94 **/ 95 VOID 96 UninstallTcgConfigForm ( 97 IN OUT TCG_CONFIG_PRIVATE_DATA *PrivateData 98 ); 99 100 /** 101 This function allows a caller to extract the current configuration for one 102 or more named elements from the target driver. 103 104 @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL. 105 @param[in] Request A null-terminated Unicode string in 106 <ConfigRequest> format. 107 @param[out] Progress On return, points to a character in the Request 108 string. Points to the string's null terminator if 109 request was successful. Points to the most recent 110 '&' before the first failing name/value pair (or 111 the beginning of the string if the failure is in 112 the first name/value pair) if the request was not 113 successful. 114 @param[out] Results A null-terminated Unicode string in 115 <ConfigAltResp> format which has all values filled 116 in for the names in the Request string. String to 117 be allocated by the called function. 118 119 @retval EFI_SUCCESS The Results is filled with the requested values. 120 @retval EFI_OUT_OF_RESOURCES Not enough memory to store the results. 121 @retval EFI_INVALID_PARAMETER Request is illegal syntax, or unknown name. 122 @retval EFI_NOT_FOUND Routing data doesn't match any storage in this 123 driver. 124 125 **/ 126 EFI_STATUS 127 EFIAPI 128 TcgExtractConfig ( 129 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, 130 IN CONST EFI_STRING Request, 131 OUT EFI_STRING *Progress, 132 OUT EFI_STRING *Results 133 ); 134 135 /** 136 This function processes the results of changes in configuration. 137 138 @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL. 139 @param[in] Configuration A null-terminated Unicode string in <ConfigResp> 140 format. 141 @param[out] Progress A pointer to a string filled in with the offset of 142 the most recent '&' before the first failing 143 name/value pair (or the beginning of the string if 144 the failure is in the first name/value pair) or 145 the terminating NULL if all was successful. 146 147 @retval EFI_SUCCESS The Results is processed successfully. 148 @retval EFI_INVALID_PARAMETER Configuration is NULL. 149 @retval EFI_NOT_FOUND Routing data doesn't match any storage in this 150 driver. 151 152 **/ 153 EFI_STATUS 154 EFIAPI 155 TcgRouteConfig ( 156 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, 157 IN CONST EFI_STRING Configuration, 158 OUT EFI_STRING *Progress 159 ); 160 161 /** 162 This function processes the results of changes in configuration. 163 164 @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL. 165 @param[in] Action Specifies the type of action taken by the browser. 166 @param[in] QuestionId A unique value which is sent to the original 167 exporting driver so that it can identify the type 168 of data to expect. 169 @param[in] Type The type of value for the question. 170 @param[in] Value A pointer to the data being sent to the original 171 exporting driver. 172 @param[out] ActionRequest On return, points to the action requested by the 173 callback function. 174 175 @retval EFI_SUCCESS The callback successfully handled the action. 176 @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the 177 variable and its data. 178 @retval EFI_DEVICE_ERROR The variable could not be saved. 179 @retval EFI_UNSUPPORTED The specified Action is not supported by the 180 callback. 181 182 **/ 183 EFI_STATUS 184 EFIAPI 185 TcgCallback ( 186 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, 187 IN EFI_BROWSER_ACTION Action, 188 IN EFI_QUESTION_ID QuestionId, 189 IN UINT8 Type, 190 IN EFI_IFR_TYPE_VALUE *Value, 191 OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest 192 ); 193 194 #endif 195