15679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This file was extracted from the TCG Published 25679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Trusted Platform Module Library 35679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Part 4: Supporting Routines 45679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Family "2.0" 55679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Level 00 Revision 01.16 65679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// October 30, 2014 75679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 85679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#define _SWAP_H // Preclude inclusion of unnecessary simulator header 95679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include <stdlib.h> 105679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include <stdio.h> 115679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include <stdint.h> 125679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "bool.h" 135679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "Platform.h" 145679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "ExecCommand_fp.h" 155679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "Manufacture_fp.h" 165679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "DRTM_fp.h" 175679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "_TPM_Init_fp.h" 185679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "TpmFail_fp.h" 195679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include <windows.h> 205679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "TpmTcpProtocol.h" 215679752bf24c21135884e987c4077e2f7184897Vadim Bendeburystatic BOOL s_isPowerOn = FALSE; 225679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 235679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 245679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Functions 255679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 265679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Signal_PowerOn() 275679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 285679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function processes a power-on indicataion. Amoung other things, it calls the _TPM_Init() hangler. 295679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 305679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 315679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_PowerOn( 325679752bf24c21135884e987c4077e2f7184897Vadim Bendebury BOOL isReset 335679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 345679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 355679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // if power is on and this is not a call to do TPM reset then return 365679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(s_isPowerOn && !isReset) 375679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 385679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If this is a reset but power is not on, then return 395679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(isReset && !s_isPowerOn) 405679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 415679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Pass power on signal to platform 425679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(isReset) 435679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__Signal_Reset(); 445679752bf24c21135884e987c4077e2f7184897Vadim Bendebury else 455679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__Signal_PowerOn(); 465679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Pass power on signal to TPM 475679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _TPM_Init(); 485679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Set state as power on 495679752bf24c21135884e987c4077e2f7184897Vadim Bendebury s_isPowerOn = TRUE; 505679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 515679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 525679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 535679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Signal_PowerOff() 545679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 555679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function processes the power off indication. Its primary funtion is to set a flag indicating that the next 565679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// power on indication should cause _TPM_Init() to be called. 575679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 585679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 595679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_PowerOff( 605679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 615679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 625679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 635679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 645679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Pass power off signal to platform 655679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__Signal_PowerOff(); 665679752bf24c21135884e987c4077e2f7184897Vadim Bendebury s_isPowerOn = FALSE; 675679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 685679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 695679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 705679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 715679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__ForceFailureMode() 725679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 735679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is used to debug the Failure Mode logic of the TPM. It will set a flag in the TPM code such 745679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// that the next call to TPM2_SelfTest() will result in a failure, putting the TPM into Failure Mode. 755679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 765679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 775679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__ForceFailureMode( 785679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 795679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 805679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 815679752bf24c21135884e987c4077e2f7184897Vadim Bendebury SetForceFailureMode(); 825679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 835679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 845679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 855679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Signal_PhysicalPresenceOn() 865679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 875679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is called to simulate activation of the physical presence pin. 885679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 895679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 905679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_PhysicalPresenceOn( 915679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 925679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 935679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 945679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject this signal 955679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 965679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Pass physical presence on to platform 975679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__Signal_PhysicalPresenceOn(); 985679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 995679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 1005679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1015679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1025679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Signal_PhysicalPresenceOff() 1035679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1045679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is called to simulate deactivation of the physical presence pin. 1055679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1065679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 1075679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_PhysicalPresenceOff( 1085679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 1095679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 1105679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 1115679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject this signal 1125679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 1135679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Pass physical presence off to platform 1145679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__Signal_PhysicalPresenceOff(); 1155679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 1165679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 1175679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1185679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1195679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Signal_Hash_Start() 1205679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1215679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is called to simulate a _TPM_Hash_Start() event. It will call 1225679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1235679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 1245679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_Hash_Start( 1255679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 1265679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 1275679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 1285679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject this signal 1295679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 1305679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Pass _TPM_Hash_Start signal to TPM 1315679752bf24c21135884e987c4077e2f7184897Vadim Bendebury Signal_Hash_Start(); 1325679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 1335679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 1345679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1355679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1365679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Signal_Hash_Data() 1375679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1385679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is called to simulate a _TPM_Hash_Data() event. 1395679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1405679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 1415679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_Hash_Data( 1425679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _IN_BUFFER input 1435679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 1445679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 1455679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject this signal 1465679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 1475679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Pass _TPM_Hash_Data signal to TPM 1485679752bf24c21135884e987c4077e2f7184897Vadim Bendebury Signal_Hash_Data(input.BufferSize, input.Buffer); 1495679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 1505679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 1515679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1525679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1535679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Signal_HashEnd() 1545679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1555679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is called to simulate a _TPM_Hash_End() event. 1565679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1575679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 1585679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_HashEnd( 1595679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 1605679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 1615679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 1625679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject this signal 1635679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 1645679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Pass _TPM_HashEnd signal to TPM 1655679752bf24c21135884e987c4077e2f7184897Vadim Bendebury Signal_Hash_End(); 1665679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 1675679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 1685679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1695679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Command interface Entry of a RPC call 1705679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 1715679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Send_Command( 1725679752bf24c21135884e987c4077e2f7184897Vadim Bendebury unsigned char locality, 1735679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _IN_BUFFER request, 1745679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _OUT_BUFFER *response 1755679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 1765679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 1775679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject any commands. 1785679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) { 1795679752bf24c21135884e987c4077e2f7184897Vadim Bendebury response->BufferSize = 0; 1805679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 1815679752bf24c21135884e987c4077e2f7184897Vadim Bendebury } 1825679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Set the locality of the command so that it doesn't change during the command 1835679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__LocalitySet(locality); 1845679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Do implementation-specific command dispatch 1855679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ExecuteCommand(request.BufferSize, request.Buffer, 1865679752bf24c21135884e987c4077e2f7184897Vadim Bendebury &response->BufferSize, &response->Buffer); 1875679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 1885679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 1895679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1905679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1915679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Signal_CancelOn() 1925679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1935679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is used to turn on the indication to cancel a command in process. An executing command is 1945679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// not interrupted. The command code may perodically check this indication to see if it should abort the 1955679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// current command processing and returned TPM_RC_CANCELLED. 1965679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 1975679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 1985679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_CancelOn( 1995679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 2005679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 2015679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 2025679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject this signal 2035679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 2045679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Set the platform canceling flag. 2055679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__SetCancel(); 2065679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 2075679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 2085679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2095679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2105679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Signal_CancelOff() 2115679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2125679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is used to turn off the indication to cancel a command in process. 2135679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2145679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 2155679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_CancelOff( 2165679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 2175679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 2185679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 2195679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject this signal 2205679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 2215679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Set the platform canceling flag. 2225679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__ClearCancel(); 2235679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 2245679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 2255679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2265679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2275679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2285679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Signal_NvOn() 2295679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2305679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// In a system where the NV memory used by the TPM is not within the TPM, the NV may not always be 2315679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// available. This function turns on the indicator that indicates that NV is available. 2325679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2335679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 2345679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_NvOn( 2355679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 2365679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 2375679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 2385679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject this signal 2395679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 2405679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__SetNvAvail(); 2415679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 2425679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 2435679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2445679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2455679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Signal_NvOff() 2465679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2475679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is used to set the indication that NV memory is no longer available. 2485679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2495679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 2505679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Signal_NvOff( 2515679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 2525679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 2535679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 2545679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If TPM is power off, reject this signal 2555679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(!s_isPowerOn) return; 2565679752bf24c21135884e987c4077e2f7184897Vadim Bendebury _plat__ClearNvAvail(); 2575679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 2585679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 2595679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2605679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2615679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// _rpc__Shutdown() 2625679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2635679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is used to stop the TPM simulator. 2645679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 2655679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 2665679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_rpc__Shutdown( 2675679752bf24c21135884e987c4077e2f7184897Vadim Bendebury void 2685679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 2695679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 2705679752bf24c21135884e987c4077e2f7184897Vadim Bendebury RPC_STATUS status; 2715679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Stop TPM 2725679752bf24c21135884e987c4077e2f7184897Vadim Bendebury TPM_TearDown(); 2735679752bf24c21135884e987c4077e2f7184897Vadim Bendebury status = RpcMgmtStopServerListening(NULL); 2745679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if (status != RPC_S_OK) 2755679752bf24c21135884e987c4077e2f7184897Vadim Bendebury { 2765679752bf24c21135884e987c4077e2f7184897Vadim Bendebury printf_s("RpcMgmtStopServerListening returned: 0x%x\n", status); 2775679752bf24c21135884e987c4077e2f7184897Vadim Bendebury exit(status); 2785679752bf24c21135884e987c4077e2f7184897Vadim Bendebury } 2795679752bf24c21135884e987c4077e2f7184897Vadim Bendebury status = RpcServerUnregisterIf(NULL, NULL, FALSE); 2805679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if (status != RPC_S_OK) 2815679752bf24c21135884e987c4077e2f7184897Vadim Bendebury { 2825679752bf24c21135884e987c4077e2f7184897Vadim Bendebury printf_s("RpcServerUnregisterIf returned 0x%x\n", status); 2835679752bf24c21135884e987c4077e2f7184897Vadim Bendebury exit(status); 2845679752bf24c21135884e987c4077e2f7184897Vadim Bendebury } 2855679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 286