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