X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=SecurityPkg%2FTcg%2FTcg2Smm%2FTcg2Smm.c;h=f0c92462cf921164a84b730471d5aadc7f1745b1;hb=6c7ac681f4bef931106786bae9eee141ab7503ca;hp=6eb62ae64ca3c7ec49ce158b045885c2aea81b1d;hpb=449083a3f897fd2e93355b8e0774bd3f63211b17;p=mirror_edk2.git diff --git a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c index 6eb62ae64c..f0c92462cf 100644 --- a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c +++ b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c @@ -310,15 +310,17 @@ UpdatePPVersion ( @param[in, out] Table The TPM item in ACPI table. @param[in] IrqBuffer Input new IRQ buffer. @param[in] IrqBuffserSize Input new IRQ buffer size. + @param[out] IsShortFormPkgLength If _PRS returns Short length Package(ACPI spec 20.2.4). @return patch status. **/ EFI_STATUS UpdatePossibleResource ( - EFI_ACPI_DESCRIPTION_HEADER *Table, - UINT32 *IrqBuffer, - UINT32 IrqBuffserSize + IN OUT EFI_ACPI_DESCRIPTION_HEADER *Table, + IN UINT32 *IrqBuffer, + IN UINT32 IrqBuffserSize, + OUT BOOLEAN *IsShortFormPkgLength ) { UINT8 *DataPtr; @@ -431,7 +433,7 @@ UpdatePossibleResource ( // // Notify _PRS to report short formed ResourceTemplate // - mTcgNvs->IsShortFormPkgLength = TRUE; + *IsShortFormPkgLength = TRUE; break; } @@ -503,7 +505,7 @@ UpdatePossibleResource ( // // Notify _PRS to report long formed ResourceTemplate // - mTcgNvs->IsShortFormPkgLength = FALSE; + *IsShortFormPkgLength = FALSE; break; } } @@ -543,7 +545,7 @@ UpdatePossibleResource ( // DataPtr += 2; if (DataPtr < DataEndPtr) { - SetMem(DataPtr, (UINTN)(DataEndPtr - DataPtr), AML_NOOP_OP); + SetMem(DataPtr, (UINTN)DataEndPtr - (UINTN)DataPtr, AML_NOOP_OP); } return EFI_SUCCESS; @@ -672,6 +674,9 @@ PublishAcpiTable ( UINTN TableSize; UINT32 *PossibleIrqNumBuf; UINT32 PossibleIrqNumBufSize; + BOOLEAN IsShortFormPkgLength; + + IsShortFormPkgLength = FALSE; Status = GetSectionFromFv ( &gEfiCallerIdGuid, @@ -710,7 +715,7 @@ PublishAcpiTable ( PossibleIrqNumBufSize = (UINT32)PcdGetSize(PcdTpm2PossibleIrqNumBuf); if (PossibleIrqNumBufSize <= MAX_PRS_INT_BUF_SIZE && (PossibleIrqNumBufSize % sizeof(UINT32)) == 0) { - Status = UpdatePossibleResource(Table, PossibleIrqNumBuf, PossibleIrqNumBufSize); + Status = UpdatePossibleResource(Table, PossibleIrqNumBuf, PossibleIrqNumBufSize, &IsShortFormPkgLength); DEBUG (( DEBUG_INFO, "UpdatePossibleResource status - %x. TPM2 service may not ready in OS.\n", @@ -743,7 +748,7 @@ PublishAcpiTable ( mTcgNvs = AssignOpRegion (Table, SIGNATURE_32 ('T', 'N', 'V', 'S'), (UINT16) sizeof (TCG_NVS)); ASSERT (mTcgNvs != NULL); mTcgNvs->TpmIrqNum = PcdGet32(PcdTpm2CurrentIrqNum); - mTcgNvs->IsShortFormPkgLength = FALSE; + mTcgNvs->IsShortFormPkgLength = IsShortFormPkgLength; // // Publish the TPM ACPI table. Table is re-checksumed.