// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// THIS CODE IS GENERATED - DO NOT MODIFY!
#include "ActivateCredential_fp.h"
#include "Certify_fp.h"
#include "CertifyCreation_fp.h"
#include "ChangeEPS_fp.h"
#include "ChangePPS_fp.h"
#include "Clear_fp.h"
#include "ClearControl_fp.h"
#include "ClockRateAdjust_fp.h"
#include "ClockSet_fp.h"
#include "Commit_fp.h"
#include "ContextLoad_fp.h"
#include "ContextSave_fp.h"
#include "Create_fp.h"
#include "CreatePrimary_fp.h"
#include "DictionaryAttackLockReset_fp.h"
#include "DictionaryAttackParameters_fp.h"
#include "Duplicate_fp.h"
#include "ECC_Parameters_fp.h"
#include "ECDH_KeyGen_fp.h"
#include "ECDH_ZGen_fp.h"
#include "EC_Ephemeral_fp.h"
#include "EncryptDecrypt_fp.h"
#include "EventSequenceComplete_fp.h"
#include "EvictControl_fp.h"
#include "FieldUpgradeData_fp.h"
#include "FieldUpgradeStart_fp.h"
#include "FirmwareRead_fp.h"
#include "FlushContext_fp.h"
#include "GetCapability_fp.h"
#include "GetCommandAuditDigest_fp.h"
#include "GetRandom_fp.h"
#include "GetSessionAuditDigest_fp.h"
#include "GetTestResult_fp.h"
#include "GetTime_fp.h"
#include "HMAC_fp.h"
#include "HMAC_Start_fp.h"
#include "Hash_fp.h"
#include "HashSequenceStart_fp.h"
#include "HierarchyChangeAuth_fp.h"
#include "HierarchyControl_fp.h"
#include "Import_fp.h"
#include "IncrementalSelfTest_fp.h"
#include "Load_fp.h"
#include "LoadExternal_fp.h"
#include "MakeCredential_fp.h"
#include "NV_Certify_fp.h"
#include "NV_ChangeAuth_fp.h"
#include "NV_DefineSpace_fp.h"
#include "NV_Extend_fp.h"
#include "NV_GlobalWriteLock_fp.h"
#include "NV_Increment_fp.h"
#include "NV_Read_fp.h"
#include "NV_ReadLock_fp.h"
#include "NV_ReadPublic_fp.h"
#include "NV_SetBits_fp.h"
#include "NV_UndefineSpace_fp.h"
#include "NV_UndefineSpaceSpecial_fp.h"
#include "NV_Write_fp.h"
#include "NV_WriteLock_fp.h"
#include "ObjectChangeAuth_fp.h"
#include "PCR_Allocate_fp.h"
#include "PCR_Event_fp.h"
#include "PCR_Extend_fp.h"
#include "PCR_Read_fp.h"
#include "PCR_Reset_fp.h"
#include "PCR_SetAuthPolicy_fp.h"
#include "PCR_SetAuthValue_fp.h"
#include "PP_Commands_fp.h"
#include "PolicyAuthValue_fp.h"
#include "PolicyAuthorize_fp.h"
#include "PolicyCommandCode_fp.h"
#include "PolicyCounterTimer_fp.h"
#include "PolicyCpHash_fp.h"
#include "PolicyDuplicationSelect_fp.h"
#include "PolicyFidoSigned_fp.h"
#include "PolicyGetDigest_fp.h"
#include "PolicyLocality_fp.h"
#include "PolicyNV_fp.h"
#include "PolicyNameHash_fp.h"
#include "PolicyNvWritten_fp.h"
#include "PolicyOR_fp.h"
#include "PolicyPCR_fp.h"
#include "PolicyPassword_fp.h"
#include "PolicyPhysicalPresence_fp.h"
#include "PolicyRestart_fp.h"
#include "PolicySecret_fp.h"
#include "PolicySigned_fp.h"
#include "PolicyTicket_fp.h"
#include "Quote_fp.h"
#include "RSA_Decrypt_fp.h"
#include "RSA_Encrypt_fp.h"
#include "ReadClock_fp.h"
#include "ReadPublic_fp.h"
#include "Rewrap_fp.h"
#include "SelfTest_fp.h"
#include "SequenceComplete_fp.h"
#include "SequenceUpdate_fp.h"
#include "SetAlgorithmSet_fp.h"
#include "SetCommandCodeAuditStatus_fp.h"
#include "SetPrimaryPolicy_fp.h"
#include "Shutdown_fp.h"
#include "Sign_fp.h"
#include "StartAuthSession_fp.h"
#include "Startup_fp.h"
#include "StirRandom_fp.h"
#include "TestParms_fp.h"
#include "Unseal_fp.h"
#include "VerifySignature_fp.h"
#include "ZGen_2Phase_fp.h"

#include "Implementation.h"
#include "CommandDispatcher_fp.h"

TPM_RC CommandDispatcher(TPMI_ST_COMMAND_TAG tag,
                         TPM_CC command_code,
                         INT32* request_parameter_buffer_size,
                         BYTE* request_parameter_buffer_start,
                         TPM_HANDLE request_handles[],
                         UINT32* response_handle_buffer_size,
                         UINT32* response_parameter_buffer_size) {
  BYTE* request_parameter_buffer = request_parameter_buffer_start;

  if (command_code & TPM_CCE_BIT_MASK) {
    switch (command_code) {
#if IS_CCE_ENABLED(PolicyFidoSigned)
    case TPM_CCE_PolicyFidoSigned:
      return Exec_PolicyFidoSigned(tag, &request_parameter_buffer,
                              request_parameter_buffer_size, request_handles,
                              response_handle_buffer_size,
                              response_parameter_buffer_size);
#endif
    default:
      break;
    }
    return TPM_RC_COMMAND_CODE;
  }

  switch (command_code) {
#if IS_CC_ENABLED(ActivateCredential)
    case TPM_CC_ActivateCredential:
      return Exec_ActivateCredential(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Certify)
    case TPM_CC_Certify:
      return Exec_Certify(tag, &request_parameter_buffer,
                          request_parameter_buffer_size, request_handles,
                          response_handle_buffer_size,
                          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(CertifyCreation)
    case TPM_CC_CertifyCreation:
      return Exec_CertifyCreation(tag, &request_parameter_buffer,
                                  request_parameter_buffer_size,
                                  request_handles, response_handle_buffer_size,
                                  response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ChangeEPS)
    case TPM_CC_ChangeEPS:
      return Exec_ChangeEPS(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ChangePPS)
    case TPM_CC_ChangePPS:
      return Exec_ChangePPS(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Clear)
    case TPM_CC_Clear:
      return Exec_Clear(tag, &request_parameter_buffer,
                        request_parameter_buffer_size, request_handles,
                        response_handle_buffer_size,
                        response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ClearControl)
    case TPM_CC_ClearControl:
      return Exec_ClearControl(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ClockRateAdjust)
    case TPM_CC_ClockRateAdjust:
      return Exec_ClockRateAdjust(tag, &request_parameter_buffer,
                                  request_parameter_buffer_size,
                                  request_handles, response_handle_buffer_size,
                                  response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ClockSet)
    case TPM_CC_ClockSet:
      return Exec_ClockSet(tag, &request_parameter_buffer,
                           request_parameter_buffer_size, request_handles,
                           response_handle_buffer_size,
                           response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Commit)
    case TPM_CC_Commit:
      return Exec_Commit(tag, &request_parameter_buffer,
                         request_parameter_buffer_size, request_handles,
                         response_handle_buffer_size,
                         response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ContextLoad)
    case TPM_CC_ContextLoad:
      return Exec_ContextLoad(tag, &request_parameter_buffer,
                              request_parameter_buffer_size, request_handles,
                              response_handle_buffer_size,
                              response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ContextSave)
    case TPM_CC_ContextSave:
      return Exec_ContextSave(tag, &request_parameter_buffer,
                              request_parameter_buffer_size, request_handles,
                              response_handle_buffer_size,
                              response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Create)
    case TPM_CC_Create:
      return Exec_Create(tag, &request_parameter_buffer,
                         request_parameter_buffer_size, request_handles,
                         response_handle_buffer_size,
                         response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(CreatePrimary)
    case TPM_CC_CreatePrimary:
      return Exec_CreatePrimary(tag, &request_parameter_buffer,
                                request_parameter_buffer_size, request_handles,
                                response_handle_buffer_size,
                                response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(DictionaryAttackLockReset)
    case TPM_CC_DictionaryAttackLockReset:
      return Exec_DictionaryAttackLockReset(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(DictionaryAttackParameters)
    case TPM_CC_DictionaryAttackParameters:
      return Exec_DictionaryAttackParameters(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Duplicate)
    case TPM_CC_Duplicate:
      return Exec_Duplicate(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ECC_Parameters)
    case TPM_CC_ECC_Parameters:
      return Exec_ECC_Parameters(tag, &request_parameter_buffer,
                                 request_parameter_buffer_size, request_handles,
                                 response_handle_buffer_size,
                                 response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ECDH_KeyGen)
    case TPM_CC_ECDH_KeyGen:
      return Exec_ECDH_KeyGen(tag, &request_parameter_buffer,
                              request_parameter_buffer_size, request_handles,
                              response_handle_buffer_size,
                              response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ECDH_ZGen)
    case TPM_CC_ECDH_ZGen:
      return Exec_ECDH_ZGen(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(EC_Ephemeral)
    case TPM_CC_EC_Ephemeral:
      return Exec_EC_Ephemeral(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(EncryptDecrypt)
    case TPM_CC_EncryptDecrypt:
      return Exec_EncryptDecrypt(tag, &request_parameter_buffer,
                                 request_parameter_buffer_size, request_handles,
                                 response_handle_buffer_size,
                                 response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(EventSequenceComplete)
    case TPM_CC_EventSequenceComplete:
      return Exec_EventSequenceComplete(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(EvictControl)
    case TPM_CC_EvictControl:
      return Exec_EvictControl(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(FieldUpgradeData)
    case TPM_CC_FieldUpgradeData:
      return Exec_FieldUpgradeData(tag, &request_parameter_buffer,
                                   request_parameter_buffer_size,
                                   request_handles, response_handle_buffer_size,
                                   response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(FieldUpgradeStart)
    case TPM_CC_FieldUpgradeStart:
      return Exec_FieldUpgradeStart(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(FirmwareRead)
    case TPM_CC_FirmwareRead:
      return Exec_FirmwareRead(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(FlushContext)
    case TPM_CC_FlushContext:
      return Exec_FlushContext(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(GetCapability)
    case TPM_CC_GetCapability:
      return Exec_GetCapability(tag, &request_parameter_buffer,
                                request_parameter_buffer_size, request_handles,
                                response_handle_buffer_size,
                                response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(GetCommandAuditDigest)
    case TPM_CC_GetCommandAuditDigest:
      return Exec_GetCommandAuditDigest(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(GetRandom)
    case TPM_CC_GetRandom:
      return Exec_GetRandom(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(GetSessionAuditDigest)
    case TPM_CC_GetSessionAuditDigest:
      return Exec_GetSessionAuditDigest(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(GetTestResult)
    case TPM_CC_GetTestResult:
      return Exec_GetTestResult(tag, &request_parameter_buffer,
                                request_parameter_buffer_size, request_handles,
                                response_handle_buffer_size,
                                response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(GetTime)
    case TPM_CC_GetTime:
      return Exec_GetTime(tag, &request_parameter_buffer,
                          request_parameter_buffer_size, request_handles,
                          response_handle_buffer_size,
                          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(HMAC)
    case TPM_CC_HMAC:
      return Exec_HMAC(tag, &request_parameter_buffer,
                       request_parameter_buffer_size, request_handles,
                       response_handle_buffer_size,
                       response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(HMAC_Start)
    case TPM_CC_HMAC_Start:
      return Exec_HMAC_Start(tag, &request_parameter_buffer,
                             request_parameter_buffer_size, request_handles,
                             response_handle_buffer_size,
                             response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Hash)
    case TPM_CC_Hash:
      return Exec_Hash(tag, &request_parameter_buffer,
                       request_parameter_buffer_size, request_handles,
                       response_handle_buffer_size,
                       response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(HashSequenceStart)
    case TPM_CC_HashSequenceStart:
      return Exec_HashSequenceStart(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(HierarchyChangeAuth)
    case TPM_CC_HierarchyChangeAuth:
      return Exec_HierarchyChangeAuth(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(HierarchyControl)
    case TPM_CC_HierarchyControl:
      return Exec_HierarchyControl(tag, &request_parameter_buffer,
                                   request_parameter_buffer_size,
                                   request_handles, response_handle_buffer_size,
                                   response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Import)
    case TPM_CC_Import:
      return Exec_Import(tag, &request_parameter_buffer,
                         request_parameter_buffer_size, request_handles,
                         response_handle_buffer_size,
                         response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(IncrementalSelfTest)
    case TPM_CC_IncrementalSelfTest:
      return Exec_IncrementalSelfTest(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Load)
    case TPM_CC_Load:
      return Exec_Load(tag, &request_parameter_buffer,
                       request_parameter_buffer_size, request_handles,
                       response_handle_buffer_size,
                       response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(LoadExternal)
    case TPM_CC_LoadExternal:
      return Exec_LoadExternal(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(MakeCredential)
    case TPM_CC_MakeCredential:
      return Exec_MakeCredential(tag, &request_parameter_buffer,
                                 request_parameter_buffer_size, request_handles,
                                 response_handle_buffer_size,
                                 response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_Certify)
    case TPM_CC_NV_Certify:
      return Exec_NV_Certify(tag, &request_parameter_buffer,
                             request_parameter_buffer_size, request_handles,
                             response_handle_buffer_size,
                             response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_ChangeAuth)
    case TPM_CC_NV_ChangeAuth:
      return Exec_NV_ChangeAuth(tag, &request_parameter_buffer,
                                request_parameter_buffer_size, request_handles,
                                response_handle_buffer_size,
                                response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_DefineSpace)
    case TPM_CC_NV_DefineSpace:
      return Exec_NV_DefineSpace(tag, &request_parameter_buffer,
                                 request_parameter_buffer_size, request_handles,
                                 response_handle_buffer_size,
                                 response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_Extend)
    case TPM_CC_NV_Extend:
      return Exec_NV_Extend(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_GlobalWriteLock)
    case TPM_CC_NV_GlobalWriteLock:
      return Exec_NV_GlobalWriteLock(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_Increment)
    case TPM_CC_NV_Increment:
      return Exec_NV_Increment(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_Read)
    case TPM_CC_NV_Read:
      return Exec_NV_Read(tag, &request_parameter_buffer,
                          request_parameter_buffer_size, request_handles,
                          response_handle_buffer_size,
                          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_ReadLock)
    case TPM_CC_NV_ReadLock:
      return Exec_NV_ReadLock(tag, &request_parameter_buffer,
                              request_parameter_buffer_size, request_handles,
                              response_handle_buffer_size,
                              response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_ReadPublic)
    case TPM_CC_NV_ReadPublic:
      return Exec_NV_ReadPublic(tag, &request_parameter_buffer,
                                request_parameter_buffer_size, request_handles,
                                response_handle_buffer_size,
                                response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_SetBits)
    case TPM_CC_NV_SetBits:
      return Exec_NV_SetBits(tag, &request_parameter_buffer,
                             request_parameter_buffer_size, request_handles,
                             response_handle_buffer_size,
                             response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_UndefineSpace)
    case TPM_CC_NV_UndefineSpace:
      return Exec_NV_UndefineSpace(tag, &request_parameter_buffer,
                                   request_parameter_buffer_size,
                                   request_handles, response_handle_buffer_size,
                                   response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_UndefineSpaceSpecial)
    case TPM_CC_NV_UndefineSpaceSpecial:
      return Exec_NV_UndefineSpaceSpecial(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_Write)
    case TPM_CC_NV_Write:
      return Exec_NV_Write(tag, &request_parameter_buffer,
                           request_parameter_buffer_size, request_handles,
                           response_handle_buffer_size,
                           response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(NV_WriteLock)
    case TPM_CC_NV_WriteLock:
      return Exec_NV_WriteLock(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ObjectChangeAuth)
    case TPM_CC_ObjectChangeAuth:
      return Exec_ObjectChangeAuth(tag, &request_parameter_buffer,
                                   request_parameter_buffer_size,
                                   request_handles, response_handle_buffer_size,
                                   response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PCR_Allocate)
    case TPM_CC_PCR_Allocate:
      return Exec_PCR_Allocate(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PCR_Event)
    case TPM_CC_PCR_Event:
      return Exec_PCR_Event(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PCR_Extend)
    case TPM_CC_PCR_Extend:
      return Exec_PCR_Extend(tag, &request_parameter_buffer,
                             request_parameter_buffer_size, request_handles,
                             response_handle_buffer_size,
                             response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PCR_Read)
    case TPM_CC_PCR_Read:
      return Exec_PCR_Read(tag, &request_parameter_buffer,
                           request_parameter_buffer_size, request_handles,
                           response_handle_buffer_size,
                           response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PCR_Reset)
    case TPM_CC_PCR_Reset:
      return Exec_PCR_Reset(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PCR_SetAuthPolicy)
    case TPM_CC_PCR_SetAuthPolicy:
      return Exec_PCR_SetAuthPolicy(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PCR_SetAuthValue)
    case TPM_CC_PCR_SetAuthValue:
      return Exec_PCR_SetAuthValue(tag, &request_parameter_buffer,
                                   request_parameter_buffer_size,
                                   request_handles, response_handle_buffer_size,
                                   response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PP_Commands)
    case TPM_CC_PP_Commands:
      return Exec_PP_Commands(tag, &request_parameter_buffer,
                              request_parameter_buffer_size, request_handles,
                              response_handle_buffer_size,
                              response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyAuthValue)
    case TPM_CC_PolicyAuthValue:
      return Exec_PolicyAuthValue(tag, &request_parameter_buffer,
                                  request_parameter_buffer_size,
                                  request_handles, response_handle_buffer_size,
                                  response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyAuthorize)
    case TPM_CC_PolicyAuthorize:
      return Exec_PolicyAuthorize(tag, &request_parameter_buffer,
                                  request_parameter_buffer_size,
                                  request_handles, response_handle_buffer_size,
                                  response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyCommandCode)
    case TPM_CC_PolicyCommandCode:
      return Exec_PolicyCommandCode(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyCounterTimer)
    case TPM_CC_PolicyCounterTimer:
      return Exec_PolicyCounterTimer(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyCpHash)
    case TPM_CC_PolicyCpHash:
      return Exec_PolicyCpHash(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyDuplicationSelect)
    case TPM_CC_PolicyDuplicationSelect:
      return Exec_PolicyDuplicationSelect(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyGetDigest)
    case TPM_CC_PolicyGetDigest:
      return Exec_PolicyGetDigest(tag, &request_parameter_buffer,
                                  request_parameter_buffer_size,
                                  request_handles, response_handle_buffer_size,
                                  response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyLocality)
    case TPM_CC_PolicyLocality:
      return Exec_PolicyLocality(tag, &request_parameter_buffer,
                                 request_parameter_buffer_size, request_handles,
                                 response_handle_buffer_size,
                                 response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyNV)
    case TPM_CC_PolicyNV:
      return Exec_PolicyNV(tag, &request_parameter_buffer,
                           request_parameter_buffer_size, request_handles,
                           response_handle_buffer_size,
                           response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyNameHash)
    case TPM_CC_PolicyNameHash:
      return Exec_PolicyNameHash(tag, &request_parameter_buffer,
                                 request_parameter_buffer_size, request_handles,
                                 response_handle_buffer_size,
                                 response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyNvWritten)
    case TPM_CC_PolicyNvWritten:
      return Exec_PolicyNvWritten(tag, &request_parameter_buffer,
                                  request_parameter_buffer_size,
                                  request_handles, response_handle_buffer_size,
                                  response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyOR)
    case TPM_CC_PolicyOR:
      return Exec_PolicyOR(tag, &request_parameter_buffer,
                           request_parameter_buffer_size, request_handles,
                           response_handle_buffer_size,
                           response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyPCR)
    case TPM_CC_PolicyPCR:
      return Exec_PolicyPCR(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyPassword)
    case TPM_CC_PolicyPassword:
      return Exec_PolicyPassword(tag, &request_parameter_buffer,
                                 request_parameter_buffer_size, request_handles,
                                 response_handle_buffer_size,
                                 response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyPhysicalPresence)
    case TPM_CC_PolicyPhysicalPresence:
      return Exec_PolicyPhysicalPresence(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyRestart)
    case TPM_CC_PolicyRestart:
      return Exec_PolicyRestart(tag, &request_parameter_buffer,
                                request_parameter_buffer_size, request_handles,
                                response_handle_buffer_size,
                                response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicySecret)
    case TPM_CC_PolicySecret:
      return Exec_PolicySecret(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicySigned)
    case TPM_CC_PolicySigned:
      return Exec_PolicySigned(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(PolicyTicket)
    case TPM_CC_PolicyTicket:
      return Exec_PolicyTicket(tag, &request_parameter_buffer,
                               request_parameter_buffer_size, request_handles,
                               response_handle_buffer_size,
                               response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Quote)
    case TPM_CC_Quote:
      return Exec_Quote(tag, &request_parameter_buffer,
                        request_parameter_buffer_size, request_handles,
                        response_handle_buffer_size,
                        response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(RSA_Decrypt)
    case TPM_CC_RSA_Decrypt:
      return Exec_RSA_Decrypt(tag, &request_parameter_buffer,
                              request_parameter_buffer_size, request_handles,
                              response_handle_buffer_size,
                              response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(RSA_Encrypt)
    case TPM_CC_RSA_Encrypt:
      return Exec_RSA_Encrypt(tag, &request_parameter_buffer,
                              request_parameter_buffer_size, request_handles,
                              response_handle_buffer_size,
                              response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ReadClock)
    case TPM_CC_ReadClock:
      return Exec_ReadClock(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ReadPublic)
    case TPM_CC_ReadPublic:
      return Exec_ReadPublic(tag, &request_parameter_buffer,
                             request_parameter_buffer_size, request_handles,
                             response_handle_buffer_size,
                             response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Rewrap)
    case TPM_CC_Rewrap:
      return Exec_Rewrap(tag, &request_parameter_buffer,
                         request_parameter_buffer_size, request_handles,
                         response_handle_buffer_size,
                         response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(SelfTest)
    case TPM_CC_SelfTest:
      return Exec_SelfTest(tag, &request_parameter_buffer,
                           request_parameter_buffer_size, request_handles,
                           response_handle_buffer_size,
                           response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(SequenceComplete)
    case TPM_CC_SequenceComplete:
      return Exec_SequenceComplete(tag, &request_parameter_buffer,
                                   request_parameter_buffer_size,
                                   request_handles, response_handle_buffer_size,
                                   response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(SequenceUpdate)
    case TPM_CC_SequenceUpdate:
      return Exec_SequenceUpdate(tag, &request_parameter_buffer,
                                 request_parameter_buffer_size, request_handles,
                                 response_handle_buffer_size,
                                 response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(SetAlgorithmSet)
    case TPM_CC_SetAlgorithmSet:
      return Exec_SetAlgorithmSet(tag, &request_parameter_buffer,
                                  request_parameter_buffer_size,
                                  request_handles, response_handle_buffer_size,
                                  response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(SetCommandCodeAuditStatus)
    case TPM_CC_SetCommandCodeAuditStatus:
      return Exec_SetCommandCodeAuditStatus(
          tag, &request_parameter_buffer, request_parameter_buffer_size,
          request_handles, response_handle_buffer_size,
          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(SetPrimaryPolicy)
    case TPM_CC_SetPrimaryPolicy:
      return Exec_SetPrimaryPolicy(tag, &request_parameter_buffer,
                                   request_parameter_buffer_size,
                                   request_handles, response_handle_buffer_size,
                                   response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Shutdown)
    case TPM_CC_Shutdown:
      return Exec_Shutdown(tag, &request_parameter_buffer,
                           request_parameter_buffer_size, request_handles,
                           response_handle_buffer_size,
                           response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Sign)
    case TPM_CC_Sign:
      return Exec_Sign(tag, &request_parameter_buffer,
                       request_parameter_buffer_size, request_handles,
                       response_handle_buffer_size,
                       response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(StartAuthSession)
    case TPM_CC_StartAuthSession:
      return Exec_StartAuthSession(tag, &request_parameter_buffer,
                                   request_parameter_buffer_size,
                                   request_handles, response_handle_buffer_size,
                                   response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Startup)
    case TPM_CC_Startup:
      return Exec_Startup(tag, &request_parameter_buffer,
                          request_parameter_buffer_size, request_handles,
                          response_handle_buffer_size,
                          response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(StirRandom)
    case TPM_CC_StirRandom:
      return Exec_StirRandom(tag, &request_parameter_buffer,
                             request_parameter_buffer_size, request_handles,
                             response_handle_buffer_size,
                             response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(TestParms)
    case TPM_CC_TestParms:
      return Exec_TestParms(tag, &request_parameter_buffer,
                            request_parameter_buffer_size, request_handles,
                            response_handle_buffer_size,
                            response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(Unseal)
    case TPM_CC_Unseal:
      return Exec_Unseal(tag, &request_parameter_buffer,
                         request_parameter_buffer_size, request_handles,
                         response_handle_buffer_size,
                         response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(VerifySignature)
    case TPM_CC_VerifySignature:
      return Exec_VerifySignature(tag, &request_parameter_buffer,
                                  request_parameter_buffer_size,
                                  request_handles, response_handle_buffer_size,
                                  response_parameter_buffer_size);
#endif
#if IS_CC_ENABLED(ZGen_2Phase)
    case TPM_CC_ZGen_2Phase:
      return Exec_ZGen_2Phase(tag, &request_parameter_buffer,
                              request_parameter_buffer_size, request_handles,
                              response_handle_buffer_size,
                              response_parameter_buffer_size);
#endif
    default:
      return TPM_RC_COMMAND_CODE;
  }
}