| // This file was extracted from the TCG Published |
| // Trusted Platform Module Library |
| // Part 3: Commands |
| // Family "2.0" |
| // Level 00 Revision 01.16 |
| // October 30, 2014 |
| |
| #include "InternalRoutines.h" |
| #include "PP_Commands_fp.h" |
| TPM_RC |
| TPM2_PP_Commands( |
| PP_Commands_In *in // IN: input parameter list |
| ) |
| { |
| UINT32 i; |
| |
| TPM_RC result; |
| |
| // The command needs NV update. Check if NV is available. |
| // A TPM_RC_NV_UNAVAILABLE or TPM_RC_NV_RATE error may be returned at |
| // this point |
| result = NvIsAvailable(); |
| if(result != TPM_RC_SUCCESS) return result; |
| |
| // Internal Data Update |
| |
| // Process set list |
| for(i = 0; i < in->setList.count; i++) |
| // If command is implemented, set it as PP required. If the input |
| // command is not a PP command, it will be ignored at |
| // PhysicalPresenceCommandSet(). |
| if(CommandIsImplemented(in->setList.commandCodes[i])) |
| PhysicalPresenceCommandSet(in->setList.commandCodes[i]); |
| |
| // Process clear list |
| for(i = 0; i < in->clearList.count; i++) |
| // If command is implemented, clear it as PP required. If the input |
| // command is not a PP command, it will be ignored at |
| // PhysicalPresenceCommandClear(). If the input command is |
| // TPM2_PP_Commands, it will be ignored as well |
| if(CommandIsImplemented(in->clearList.commandCodes[i])) |
| PhysicalPresenceCommandClear(in->clearList.commandCodes[i]); |
| |
| // Save the change of PP list |
| NvWriteReserved(NV_PP_LIST, &gp.ppList); |
| |
| return TPM_RC_SUCCESS; |
| } |