-/** @file \r
+/** @file\r
This module implements TCG EFI Protocol.\r
- \r
+\r
Caution: This module requires additional review when modified.\r
This driver will have external input - TcgDxePassThroughToTpm\r
This external input must be validated carefully to avoid security issue like\r
\r
TcgDxePassThroughToTpm() will receive untrusted input and do basic validation.\r
\r
-Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>\r
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
-This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
http://opensource.org/licenses/bsd-license.php\r
\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
//\r
// The following EFI_TCG_SERVER_ACPI_TABLE default setting is just one example,\r
// the TPM device connectes to LPC, and also defined the ACPI _UID as 0xFF,\r
-// this _UID can be changed and should match with the _UID setting of the TPM \r
-// ACPI device object \r
+// this _UID can be changed and should match with the _UID setting of the TPM\r
+// ACPI device object\r
//\r
EFI_TCG_SERVER_ACPI_TABLE mTcgServerAcpiTemplate = {\r
{\r
}\r
\r
/**\r
- This service provides EFI protocol capability information, state information \r
+ This service provides EFI protocol capability information, state information\r
about the TPM, and Event Log state information.\r
\r
@param[in] This Indicates the calling context\r
- @param[out] ProtocolCapability The callee allocates memory for a TCG_BOOT_SERVICE_CAPABILITY \r
- structure and fills in the fields with the EFI protocol \r
+ @param[out] ProtocolCapability The callee allocates memory for a TCG_BOOT_SERVICE_CAPABILITY\r
+ structure and fills in the fields with the EFI protocol\r
capability information and the current TPM state information.\r
- @param[out] TCGFeatureFlags This is a pointer to the feature flags. No feature \r
- flags are currently defined so this parameter \r
- MUST be set to 0. However, in the future, \r
- feature flags may be defined that, for example, \r
+ @param[out] TCGFeatureFlags This is a pointer to the feature flags. No feature\r
+ flags are currently defined so this parameter\r
+ MUST be set to 0. However, in the future,\r
+ feature flags may be defined that, for example,\r
enable hash algorithm agility.\r
@param[out] EventLogLocation This is a pointer to the address of the event log in memory.\r
- @param[out] EventLogLastEntry If the Event Log contains more than one entry, \r
- this is a pointer to the address of the start of \r
- the last entry in the event log in memory. \r
+ @param[out] EventLogLastEntry If the Event Log contains more than one entry,\r
+ this is a pointer to the address of the start of\r
+ the last entry in the event log in memory.\r
\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_INVALID_PARAMETER ProtocolCapability does not match TCG capability.\r
- \r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
\r
/**\r
This service abstracts the capability to do a hash operation on a data buffer.\r
- \r
+\r
@param[in] This Indicates the calling context\r
@param[in] HashData Pointer to the data buffer to be hashed\r
@param[in] HashDataLen Length of the data buffer to be hashed\r
@param[in] AlgorithmId Identification of the Algorithm to use for the hashing operation\r
@param[in, out] HashedDataLen Resultant length of the hashed data\r
- @param[in, out] HashedDataResult Resultant buffer of the hashed data \r
- \r
+ @param[in, out] HashedDataResult Resultant buffer of the hashed data\r
+\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_INVALID_PARAMETER HashDataLen is NULL.\r
@retval EFI_INVALID_PARAMETER HashDataLenResult is NULL.\r
@retval EFI_OUT_OF_RESOURCES Cannot allocate buffer of size *HashedDataLen.\r
@retval EFI_UNSUPPORTED AlgorithmId not supported.\r
@retval EFI_BUFFER_TOO_SMALL *HashedDataLen < sizeof (TCG_DIGEST).\r
- \r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
\r
if (*HashedDataResult == NULL) {\r
*HashedDataResult = AllocatePool ((UINTN) *HashedDataLen);\r
- } \r
+ }\r
\r
return TpmCommHashAll (\r
HashData,\r
Add a new entry to the Event Log.\r
\r
@param[in] TcgData TCG_DXE_DATA structure.\r
- @param[in] NewEventHdr Pointer to a TCG_PCR_EVENT_HDR data structure. \r
- @param[in] NewEventData Pointer to the new event data. \r
- \r
+ @param[in] NewEventHdr Pointer to a TCG_PCR_EVENT_HDR data structure.\r
+ @param[in] NewEventData Pointer to the new event data.\r
+\r
@retval EFI_SUCCESS The new event log entry was added.\r
@retval EFI_OUT_OF_RESOURCES No enough memory to log the new event.\r
\r
This service abstracts the capability to add an entry to the Event Log.\r
\r
@param[in] This Indicates the calling context\r
- @param[in] TCGLogData Pointer to the start of the data buffer containing \r
- the TCG_PCR_EVENT data structure. All fields in \r
+ @param[in] TCGLogData Pointer to the start of the data buffer containing\r
+ the TCG_PCR_EVENT data structure. All fields in\r
this structure are properly filled by the caller.\r
@param[in, out] EventNumber The event number of the event just logged\r
- @param[in] Flags Indicate additional flags. Only one flag has been \r
- defined at this time, which is 0x01 and means the \r
- extend operation should not be performed. All \r
- other bits are reserved. \r
- \r
+ @param[in] Flags Indicate additional flags. Only one flag has been\r
+ defined at this time, which is 0x01 and means the\r
+ extend operation should not be performed. All\r
+ other bits are reserved.\r
+\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_OUT_OF_RESOURCES Insufficient memory in the event log to complete this action.\r
- \r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
}\r
\r
TcgData = TCG_DXE_DATA_FROM_THIS (This);\r
- \r
+\r
if (TcgData->BsCap.TPMDeactivatedFlag || (!TcgData->BsCap.TPMPresentFlag)) {\r
return EFI_DEVICE_ERROR;\r
}\r
@retval EFI_INVALID_PARAMETER Invalid ordinal.\r
@retval EFI_UNSUPPORTED Current Task Priority Level >= EFI_TPL_CALLBACK.\r
@retval EFI_TIMEOUT The TIS timed-out.\r
- \r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
IN UINT8 *TpmOutputParameterBlock\r
)\r
{\r
- if (TpmInputParameterBlock == NULL || \r
- TpmOutputParameterBlock == NULL || \r
+ if (TpmInputParameterBlock == NULL ||\r
+ TpmOutputParameterBlock == NULL ||\r
TpmInputParameterBlockSize == 0 ||\r
TpmOutputParameterBlockSize == 0) {\r
return EFI_INVALID_PARAMETER;\r
and add an entry to the Event Log.\r
\r
@param[in] TcgData TCG_DXE_DATA structure.\r
- @param[in] HashData Physical address of the start of the data buffer \r
+ @param[in] HashData Physical address of the start of the data buffer\r
to be hashed, extended, and logged.\r
@param[in] HashDataLen The length, in bytes, of the buffer referenced by HashData\r
- @param[in, out] NewEventHdr Pointer to a TCG_PCR_EVENT_HDR data structure. \r
- @param[in] NewEventData Pointer to the new event data. \r
+ @param[in, out] NewEventHdr Pointer to a TCG_PCR_EVENT_HDR data structure.\r
+ @param[in] NewEventData Pointer to the new event data.\r
\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_OUT_OF_RESOURCES No enough memory to log the new event.\r
extend a specific TPM PCR with the hash result, and add an entry to the Event Log\r
\r
@param[in] This Indicates the calling context\r
- @param[in] HashData Physical address of the start of the data buffer \r
+ @param[in] HashData Physical address of the start of the data buffer\r
to be hashed, extended, and logged.\r
@param[in] HashDataLen The length, in bytes, of the buffer referenced by HashData\r
@param[in] AlgorithmId Identification of the Algorithm to use for the hashing operation\r
- @param[in, out] TCGLogData The physical address of the start of the data \r
+ @param[in, out] TCGLogData The physical address of the start of the data\r
buffer containing the TCG_PCR_EVENT data structure.\r
@param[in, out] EventNumber The event number of the event just logged.\r
- @param[out] EventLogLastEntry Physical address of the first byte of the entry \r
- just placed in the Event Log. If the Event Log was \r
- empty when this function was called then this physical \r
- address will be the same as the physical address of \r
+ @param[out] EventLogLastEntry Physical address of the first byte of the entry\r
+ just placed in the Event Log. If the Event Log was\r
+ empty when this function was called then this physical\r
+ address will be the same as the physical address of\r
the start of the Event Log.\r
\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_UNSUPPORTED AlgorithmId != TPM_ALG_SHA.\r
@retval EFI_UNSUPPORTED Current TPL >= EFI_TPL_CALLBACK.\r
@retval EFI_DEVICE_ERROR The command was unsuccessful.\r
- \r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
}\r
\r
TcgData = TCG_DXE_DATA_FROM_THIS (This);\r
- \r
+\r
if (TcgData->BsCap.TPMDeactivatedFlag || (!TcgData->BsCap.TPMPresentFlag)) {\r
return EFI_DEVICE_ERROR;\r
}\r
- \r
+\r
if (AlgorithmId != TPM_ALG_SHA) {\r
return EFI_UNSUPPORTED;\r
}\r
- \r
+\r
if (HashData == 0 && HashDataLen > 0) {\r
return EFI_INVALID_PARAMETER;\r
}\r
TCG_PCR_EVENT *TcgEvent;\r
EFI_PEI_HOB_POINTERS GuidHob;\r
EFI_PHYSICAL_ADDRESS Lasa;\r
- \r
+\r
if (PcdGet8 (PcdTpmPlatformClass) == TCG_PLATFORM_TYPE_CLIENT) {\r
Lasa = mTcgClientAcpiTemplate.Lasa;\r
- \r
+\r
Status = gBS->AllocatePages (\r
AllocateMaxAddress,\r
EfiACPIMemoryNVS,\r
}\r
mTcgClientAcpiTemplate.Lasa = Lasa;\r
//\r
- // To initialize them as 0xFF is recommended \r
+ // To initialize them as 0xFF is recommended\r
// because the OS can know the last entry for that.\r
//\r
SetMem ((VOID *)(UINTN)mTcgClientAcpiTemplate.Lasa, PcdGet32 (PcdTcgLogAreaMinLen), 0xFF);\r
mTcgClientAcpiTemplate.Laml = PcdGet32 (PcdTcgLogAreaMinLen);\r
- \r
+\r
} else {\r
Lasa = mTcgServerAcpiTemplate.Lasa;\r
- \r
+\r
Status = gBS->AllocatePages (\r
AllocateMaxAddress,\r
EfiACPIMemoryNVS,\r
}\r
mTcgServerAcpiTemplate.Lasa = Lasa;\r
//\r
- // To initialize them as 0xFF is recommended \r
+ // To initialize them as 0xFF is recommended\r
// because the OS can know the last entry for that.\r
//\r
SetMem ((VOID *)(UINTN)mTcgServerAcpiTemplate.Lasa, PcdGet32 (PcdTcgLogAreaMinLen), 0xFF);\r
}\r
\r
GuidHob.Raw = GetHobList ();\r
- while (!EFI_ERROR (Status) && \r
+ while (!EFI_ERROR (Status) &&\r
(GuidHob.Raw = GetNextGuidHob (&gTcgEventEntryHobGuid, GuidHob.Raw)) != NULL) {\r
TcgEvent = GET_GUID_HOB_DATA (GuidHob.Guid);\r
GuidHob.Raw = GET_NEXT_HOB (GuidHob);\r
/**\r
Measure and log an action string, and extend the measurement result into PCR[5].\r
\r
- @param[in] String A specific string that indicates an Action event. \r
- \r
+ @param[in] String A specific string that indicates an Action event.\r
+\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_DEVICE_ERROR The operation was unsuccessful.\r
\r
\r
if (PcdGet8 (PcdTpmPlatformClass) == TCG_PLATFORM_TYPE_SERVER) {\r
//\r
- // Tcg Server spec. \r
+ // Tcg Server spec.\r
// Measure each processor EFI_CPU_PHYSICAL_LOCATION with EV_TABLE_OF_DEVICES to PCR[1]\r
//\r
Status = GetProcessorsCpuLocation(&ProcessorLocBuf, &ProcessorNum);\r
/**\r
Measure and log Separator event, and extend the measurement result into a specific PCR.\r
\r
- @param[in] PCRIndex PCR index. \r
+ @param[in] PCRIndex PCR index.\r
\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_DEVICE_ERROR The operation was unsuccessful.\r
\r
@param[in] VarName A Null-terminated string that is the name of the vendor's variable.\r
@param[in] VendorGuid A unique identifier for the vendor.\r
- @param[out] VarSize The size of the variable data. \r
+ @param[out] VarSize The size of the variable data.\r
\r
@return A pointer to the buffer to return the contents of the variable.Otherwise NULL.\r
\r
/**\r
Measure and log an EFI variable, and extend the measurement result into a specific PCR.\r
\r
- @param[in] PCRIndex PCR Index. \r
- @param[in] EventType Event type. \r
+ @param[in] PCRIndex PCR Index.\r
+ @param[in] EventType Event type.\r
@param[in] VarName A Null-terminated string that is the name of the vendor's variable.\r
@param[in] VendorGuid A unique identifier for the vendor.\r
- @param[in] VarData The content of the variable data. \r
- @param[in] VarSize The size of the variable data. \r
- \r
+ @param[in] VarData The content of the variable data.\r
+ @param[in] VarSize The size of the variable data.\r
+\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_OUT_OF_RESOURCES Out of memory.\r
@retval EFI_DEVICE_ERROR The operation was unsuccessful.\r
\r
@param[in] VarName A Null-terminated string that is the name of the vendor's variable.\r
@param[in] VendorGuid A unique identifier for the vendor.\r
- @param[out] VarSize The size of the variable data. \r
- @param[out] VarData Pointer to the content of the variable. \r
- \r
+ @param[out] VarSize The size of the variable data.\r
+ @param[out] VarData Pointer to the content of the variable.\r
+\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_OUT_OF_RESOURCES Out of memory.\r
@retval EFI_DEVICE_ERROR The operation was unsuccessful.\r
/**\r
Install TCG ACPI Table when ACPI Table Protocol is available.\r
\r
- A system's firmware uses an ACPI table to identify the system's TCG capabilities \r
- to the Post-Boot environment. The information in this ACPI table is not guaranteed \r
- to be valid until the Host Platform transitions from pre-boot state to post-boot state. \r
+ A system's firmware uses an ACPI table to identify the system's TCG capabilities\r
+ to the Post-Boot environment. The information in this ACPI table is not guaranteed\r
+ to be valid until the Host Platform transitions from pre-boot state to post-boot state.\r
\r
@param[in] Event Event whose notification function is being invoked\r
@param[in] Context Pointer to the notification function's context\r
mTcgClientAcpiTemplate.Header.CreatorId = PcdGet32 (PcdAcpiDefaultCreatorId);\r
mTcgClientAcpiTemplate.Header.CreatorRevision = PcdGet32 (PcdAcpiDefaultCreatorRevision);\r
//\r
- // The ACPI table must be checksumed before calling the InstallAcpiTable() \r
+ // The ACPI table must be checksumed before calling the InstallAcpiTable()\r
// service of the ACPI table protocol to install it.\r
//\r
Checksum = CalculateCheckSum8 ((UINT8 *)&mTcgClientAcpiTemplate, sizeof (mTcgClientAcpiTemplate));\r
mTcgServerAcpiTemplate.Header.CreatorId = PcdGet32 (PcdAcpiDefaultCreatorId);\r
mTcgServerAcpiTemplate.Header.CreatorRevision = PcdGet32 (PcdAcpiDefaultCreatorRevision);\r
//\r
- // The ACPI table must be checksumed before calling the InstallAcpiTable() \r
+ // The ACPI table must be checksumed before calling the InstallAcpiTable()\r
// service of the ACPI table protocol to install it.\r
//\r
Checksum = CalculateCheckSum8 ((UINT8 *)&mTcgServerAcpiTemplate, sizeof (mTcgServerAcpiTemplate));\r
/**\r
Get TPM Deactivated state.\r
\r
- @param[out] TPMDeactivatedFlag Returns TPM Deactivated state. \r
+ @param[out] TPMDeactivatedFlag Returns TPM Deactivated state.\r
\r
@retval EFI_SUCCESS Operation completed successfully.\r
@retval EFI_DEVICE_ERROR The operation was unsuccessful.\r
\r
It publishes EFI TCG Protocol.\r
\r
- @param[in] ImageHandle The firmware allocated handle for the EFI image. \r
+ @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
@param[in] SystemTable A pointer to the EFI System Table.\r
- \r
+\r
@retval EFI_SUCCESS The entry point is executed successfully.\r
@retval other Some error occurs when executing this entry point.\r
\r
);\r
\r
//\r
- // Measure Exit Boot Service failed \r
+ // Measure Exit Boot Service failed\r
//\r
Status = gBS->CreateEventEx (\r
EVT_NOTIFY_SIGNAL,\r
// Install ACPI Table\r
//\r
EfiCreateProtocolNotifyEvent (&gEfiAcpiTableProtocolGuid, TPL_CALLBACK, InstallAcpiTable, NULL, &Registration);\r
- \r
+\r
return Status;\r
}\r