15679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This file was extracted from the TCG Published 25679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Trusted Platform Module Library 35679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Part 3: Commands 45679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Family "2.0" 55679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Level 00 Revision 01.16 65679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// October 30, 2014 75679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 85679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "InternalRoutines.h" 95679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "NV_UndefineSpaceSpecial_fp.h" 105679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 115679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 125679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Error Returns Meaning 135679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 145679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// TPM_RC_ATTRIBUTES TPMA_NV_POLICY_DELETE is not SET in the Index referenced by 155679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// nvIndex 165679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 175679752bf24c21135884e987c4077e2f7184897Vadim BendeburyTPM_RC 185679752bf24c21135884e987c4077e2f7184897Vadim BendeburyTPM2_NV_UndefineSpaceSpecial( 195679752bf24c21135884e987c4077e2f7184897Vadim Bendebury NV_UndefineSpaceSpecial_In *in // IN: input parameter list 205679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 215679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 225679752bf24c21135884e987c4077e2f7184897Vadim Bendebury TPM_RC result; 235679752bf24c21135884e987c4077e2f7184897Vadim Bendebury NV_INDEX nvIndex; 245679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 255679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // The command needs NV update. Check if NV is available. 265679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // A TPM_RC_NV_UNAVAILABLE or TPM_RC_NV_RATE error may be returned at 275679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // this point 285679752bf24c21135884e987c4077e2f7184897Vadim Bendebury result = NvIsAvailable(); 295679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(result != TPM_RC_SUCCESS) 305679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return result; 315679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 325679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Input Validation 335679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 345679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Get NV index info 355679752bf24c21135884e987c4077e2f7184897Vadim Bendebury NvGetIndexInfo(in->nvIndex, &nvIndex); 365679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 375679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // This operation only applies when the TPMA_NV_POLICY_DELETE attribute is SET 385679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(CLEAR == nvIndex.publicArea.attributes.TPMA_NV_POLICY_DELETE) 395679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return TPM_RC_ATTRIBUTES + RC_NV_UndefineSpaceSpecial_nvIndex; 405679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 415679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Internal Data Update 425679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 435679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Call implementation dependent internal routine to delete NV index 445679752bf24c21135884e987c4077e2f7184897Vadim Bendebury NvDeleteEntity(in->nvIndex); 455679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 465679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return TPM_RC_SUCCESS; 475679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 48