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 "ClearControl_fp.h"
10 //
11 //
12 //     Error Returns                   Meaning
13 //
14 //     TPM_RC_AUTH_FAIL                authorization is not properly given
15 //
16 TPM_RC
TPM2_ClearControl(ClearControl_In * in)17 TPM2_ClearControl(
18    ClearControl_In       *in                 // IN: input parameter list
19    )
20 {
21    TPM_RC      result;
22 
23    // The command needs NV update. Check if NV is available.
24    // A TPM_RC_NV_UNAVAILABLE or TPM_RC_NV_RATE error may be returned at
25    // this point
26    result = NvIsAvailable();
27    if(result != TPM_RC_SUCCESS) return result;
28 
29 // Input Validation
30 
31    // LockoutAuth may be used to set disableLockoutClear to TRUE but not to FALSE
32    if(in->auth == TPM_RH_LOCKOUT && in->disable == NO)
33        return TPM_RC_AUTH_FAIL;
34 
35 // Internal Data Update
36 
37    if(in->disable == YES)
38        gp.disableClear = TRUE;
39    else
40        gp.disableClear = FALSE;
41 
42    // Record the change to NV
43    NvWriteReserved(NV_DISABLE_CLEAR, &gp.disableClear);
44 
45    return TPM_RC_SUCCESS;
46 }
47