Home | History | Annotate | Download | only in tpm2
      1 // This file was extracted from the TCG Published
      2 // Trusted Platform Module Library
      3 // Part 3: Commands
      4 // Family "2.0"
      5 // Level 00 Revision 01.16
      6 // October 30, 2014
      7 
      8 #include "InternalRoutines.h"
      9 #include "PCR_Allocate_fp.h"
     10 //
     11 //
     12 //     Error Returns                    Meaning
     13 //
     14 //     TPM_RC_PCR                       the allocation did not have required PCR
     15 //     TPM_RC_NV_UNAVAILABLE            NV is not accessible
     16 //     TPM_RC_NV_RATE                   NV is in a rate-limiting mode
     17 //
     18 TPM_RC
     19 TPM2_PCR_Allocate(
     20    PCR_Allocate_In       *in,                 // IN: input parameter list
     21    PCR_Allocate_Out      *out                 // OUT: output parameter list
     22    )
     23 {
     24    TPM_RC      result;
     25 
     26    // The command needs NV update. Check if NV is available.
     27    // A TPM_RC_NV_UNAVAILABLE or TPM_RC_NV_RATE error may be returned at
     28    // this point.
     29    // Note: These codes are not listed in the return values above because it is
     30    // an implementation choice to check in this routine rather than in a common
     31    // function that is called before these actions are called. These return values
     32    // are described in the Response Code section of Part 3.
     33    result = NvIsAvailable();
     34    if(result != TPM_RC_SUCCESS)
     35        return result;
     36 
     37 // Command Output
     38 
     39    // Call PCR Allocation function.
     40    result = PCRAllocate(&in->pcrAllocation, &out->maxPCR,
     41                                         &out->sizeNeeded, &out->sizeAvailable);
     42    if(result == TPM_RC_PCR)
     43        return result;
     44 
     45    //
     46    out->allocationSuccess = (result == TPM_RC_SUCCESS);
     47 
     48    // if re-configuration succeeds, set the flag to indicate PCR configuration is
     49    // going to be changed in next boot
     50    if(out->allocationSuccess == YES)
     51        g_pcrReConfig = TRUE;
     52 
     53    return TPM_RC_SUCCESS;
     54 }
     55