/* $NoKeywords:$ */
/**
 * @file
 *
 * Install of CPU specific services support
 *
 * This file generates the CPU specific services tables.
 *
 * @xrefitem bom "File Content Label" "Release Content"
 * @e project:      AGESA
 * @e sub-project:  Include
 * @e \$Revision: 85962 $   @e \$Date: 2013-01-14 20:12:29 -0600 (Mon, 14 Jan 2013) $
 */
/*****************************************************************************
 *
 * Copyright (c) 2008 - 2013, Advanced Micro Devices, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of Advanced Micro Devices, Inc. nor the names of
 *       its contributors may be used to endorse or promote products derived
 *       from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 ***************************************************************************/


/*

NOTE:

1. This file is designed to be included multiple times in one file. So there's no includsion guard like below.

#ifndef _OPTION_CPU_FAMILY_SERVICE_INSTALL_DEFAULT_H_
#define _OPTION_CPU_FAMILY_SERVICE_INSTALL_DEFAULT_H_
#endif // _OPTION_CPU_FAMILY_SERVICE_INSTALL_DEFAULT_H_


2. This file is designed to be included in below form.

//
// 1st family model specific definitions
//
#include "OptionCpuSpecificServicesInstallReset.h"
#define CpuSrvcTableName                                        cpuFamilyModelServices
// Put your service definitions "CpuSrvc<ServiceName>" here.
#define CpuSrvcDisablePstate                                    cpuF1stM1stDisablePstate
#include "OptionCpuSpecificServicesInstall.h"
INSTALL_CPU_SPECIFIC_SERVICES_TABLE (CpuSrvcTableName);

//
// 2nd family model specific definitions
//
#include "OptionCpuSpecificServicesInstallReset.h"
#define CpuSrvcTableName                                        cpuFamilyModelServices
// Put your service definitions "CpuSrvc<ServiceName>" here.
#define CpuSrvcDisablePstate                                    cpuF2ndM2ndDisablePstate
#include "OptionCpuSpecificServicesInstall.h"
INSTALL_CPU_SPECIFIC_SERVICES_TABLE (CpuSrvcTableName);


Example of CPU specific services definitions:

NOTE: Members with type casting should use OvrdDfltCpuSrvc<ServiceName> instead due to automatical "extern" limitation.

#define CpuSrvcRevision                                        (UINT16)                                           Revision
#define CpuSrvcDisablePstate                                   (PF_CPU_DISABLE_PSTATE)                            DisablePstate
#define CpuSrvcTransitionPstate                                (PF_CPU_TRANSITION_PSTATE)                         TransitionPstate
#define CpuSrvcGetProcIddMax                                   (PF_CPU_GET_IDD_MAX)                               GetProcIddMax
#define CpuSrvcGetTscRate                                      (PF_CPU_GET_TSC_RATE)                              GetTscRate
#define CpuSrvcGetCurrentNbFrequency                           (PF_CPU_GET_NB_FREQ)                               GetCurrentNbFrequency
#define CpuSrvcGetMinMaxNbFrequency                            (PF_CPU_GET_MIN_MAX_NB_FREQ)                       GetMinMaxNbFrequency
#define CpuSrvcGetNbPstateInfo                                 (PF_CPU_GET_NB_PSTATE_INFO)                        GetNbPstateInfo
#define CpuSrvcIsNbCofInitNeeded                               (PF_CPU_IS_NBCOF_INIT_NEEDED)                      IsNbCofInitNeeded
#define CpuSrvcGetNbIddMax                                     (PF_CPU_GET_NB_IDD_MAX)                            GetNbIddMax
#define CpuSrvcLaunchApCore                                    (PF_CPU_AP_INITIAL_LAUNCH)                         LaunchApCore
#define CpuSrvcGetNumberOfPhysicalCores                        (PF_CPU_NUMBER_OF_PHYSICAL_CORES)                  GetNumberOfPhysicalCores
#define CpuSrvcGetApMailboxFromHardware                        (PF_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE)          GetApMailboxFromHardware
#define CpuSrvcSetApCoreNumber                                 (PF_CPU_SET_AP_CORE_NUMBER)                        SetApCoreNumber
#define CpuSrvcGetApCoreNumber                                 (PF_CPU_GET_AP_CORE_NUMBER)                        GetApCoreNumber
#define CpuSrvcTransferApCoreNumber                            (PF_CPU_TRANSFER_AP_CORE_NUMBER)                   TransferApCoreNumber
#define CpuSrvcGetStoredNodeNumber                             (PF_CPU_GET_STORED_NODE_NUMBER)                    GetStoredNodeNumber
#define CpuSrvcCoreIdPositionInInitialApicId                   (PF_CORE_ID_POSITION_IN_INITIAL_APIC_ID)           CoreIdPositionInInitialApicId
#define CpuSrvcSaveFeatures                                    (PF_CPU_SAVE_FEATURES)                             SaveFeatures
#define CpuSrvcWriteFeatures                                   (PF_CPU_WRITE_FEATURES)                            WriteFeatures
#define CpuSrvcSetWarmResetFlag                                (PF_CPU_SET_WARM_RESET_FLAG)                       SetWarmResetFlag
#define CpuSrvcGetWarmResetFlag                                (PF_CPU_GET_WARM_RESET_FLAG)                       GetWarmResetFlag
#define CpuSrvcGetBrandString1                                 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY)                 GetBrandString1
#define CpuSrvcGetBrandString2                                 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY)                 GetBrandString2
#define CpuSrvcGetMicroCodePatchesStruct                       (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY)                 GetMicroCodePatchesStruct
#define CpuSrvcGetMicrocodeEquivalenceTable                    (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY)                 GetMicrocodeEquivalenceTable
#define CpuSrvcGetCacheInfo                                    (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY)                 GetCacheInfo
#define CpuSrvcGetSysPmTableStruct                             (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY)                 GetSysPmTableStruct
#define CpuSrvcGetWheaInitData                                 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY)                 GetWheaInitData
#define CpuSrvcGetPlatformTypeSpecificInfo                     (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO)           GetPlatformTypeSpecificInfo
#define CpuSrvcIsNbPstateEnabled                               (PF_IS_NB_PSTATE_ENABLED)                          IsNbPstateEnabled
#define CpuSrvcNextLinkHasHtPhyFeats                           (PF_NEXT_LINK_HAS_HTFPY_FEATS)                     NextLinkHasHtPhyFeats
#define CpuSrvcSetHtPhyRegister                                (PF_SET_HT_PHY_REGISTER)                           SetHtPhyRegister
#define CpuSrvcGetNextHtLinkFeatures                           (PF_GET_NEXT_HT_LINK_FEATURES)                     GetNextHtLinkFeatures
#define CpuSrvcRegisterTableList                               (REGISTER_TABLE **)                                RegisterTableList
#define CpuSrvcTableEntryTypeDescriptors                       (TABLE_ENTRY_TYPE_DESCRIPTOR *)                    TableEntryTypeDescriptors
#define CpuSrvcPackageLinkMap                                  (PACKAGE_HTLINK_MAP)                               PackageLinkMap
#define CpuSrvcComputeUnitMap                                  (COMPUTE_UNIT_MAP *)                               ComputeUnitMap
#define CpuSrvcInitCacheDisabled                               (FAMILY_CACHE_INIT_POLICY)                         InitCacheDisabled
#define CpuSrvcGetEarlyBeforeApLaunchInitOnCoreTable           (PF_GET_EARLY_INIT_TABLE)                          GetEarlyInitBeforeApLaunchOnCoreTable
#define CpuSrvcGetEarlyAfterApLaunchInitOnCoreTable            (PF_GET_EARLY_INIT_TABLE)                          GetEarlyInitAfterApLaunchOnCoreTable
#define CpuSrvcPatchLoaderIsSharedByCU                         (BOOLEAN)                                          TRUE

  USAGE MODEL:

  //
  // If BUILD_CONFIG_SWITCH = TRUE
  //   If override service is defined, use it as the final service definition.
  //   If override service is not define, use default service (DlftCpuSrvc) as the final service definition.
  //
  // If BUILD_CONFIG_SWITCH = FALSE
  //   Use default assert service (AssertCpuSrvc) as the final service definition for making a assertion when unsupported service is called.
  //
  // "extern" will be used for function pointer (exclude data) type serive members automatically when CpuSrvc<ServiceName> is defined.
  //

// Member: (MEMBER_TYPE) ServiceName
#if BUILD_CONFIG_SWITCH == TRUE
  #ifdef CpuSrvcServiceName
    #define FinalCpuSrvcServiceName           CpuSrvcServiceName
    extern  MEMBER_TYPE                       FinalCpuSrvcServiceName;
  #else
    #define FinalCpuSrvcServiceName           DfltCpuSrvcServiceName
    #pragma message( STRING_MACRO_DEFAULT_USED(CpuSrvcServiceName) )
  #endif
#else
  #define FinalCpuSrvcServiceName           DfltAssertCpuSrvcServiceName
  #pragma message( STRING_MACRO_DEFAULT_ASSERT_USED(CpuSrvcServiceName) )
#endif

*/


#define STRING2(x)                                #x
#define STRING(x)                                 STRING2(x)
#define CAT_STRING(a, b)                          a##b
#define STRING_ARROW                              " --> "

//
// Verbose control for messaging CPU services at build time
//
#ifndef VERBOSE_CPU_SERVICES
  #define VERBOSE_CPU_SERVICES                    1 // 0 - disable messaging, 1 - enable debugging.
#endif

#if VERBOSE_CPU_SERVICES
  #define STRING_MACRO_VALUE(Name)                " " #Name " = " STRING(Name)
  #define STRING_OVERRIDE_MACRO_VALUE(Name)       "  OVERRIDE: " #Name " : " STRING(Name) STRING_ARROW STRING(Ovrd##Name)
  #define STRING_MACRO_DEFAULT_USED(Name)         "  NOT DEFINED: "  #Name STRING_ARROW " DEFAULT: " STRING(FinalDflt##Name)
  #define STRING_MACRO_DEFAULT_ASSERT_USED(Name)  "  DISABLED: " #Name ", assertion is used."

  #define STRING_SEPARATOR1                       "-----------------------------------------------------------------------------------------------"
  #define STRING_SEPARATOR2                       "==============================================================================================="
  #define STRING_SEPARATOR_POUND                  "###############################################################################################"
#else // VERBOSE_CPU_SERVICES
  #define STRING_MACRO_VALUE(Name)                NULL_STRING
  #define STRING_OVERRIDE_MACRO_VALUE(Name)       NULL_STRING
  #define STRING_MACRO_DEFAULT_USED(Name)         NULL_STRING
  #define STRING_MACRO_DEFAULT_ASSERT_USED(Name)  NULL_STRING


  #define NULL_STRING                             ""
  #define STRING_SEPARATOR1                       NULL_STRING
  #define STRING_SEPARATOR2                       NULL_STRING
  #define STRING_SEPARATOR_POUND                  NULL_STRING
#endif // VERBOSE_CPU_SERVICES

//
// Handle override definitions on DfltAssertCpuSrvc<ServiceName>
//

#ifdef OvrdDfltAssertCpuSrvcRevision
  #define FinalDfltAssertCpuSrvcRevision                              OvrdDfltAssertCpuSrvcRevision
#else
  #define FinalDfltAssertCpuSrvcRevision                              DfltAssertCpuSrvcRevision
#endif

#ifdef OvrdDfltAssertCpuSrvcDisablePstate
  #define FinalDfltAssertCpuSrvcDisablePstate                         OvrdDfltAssertCpuSrvcDisablePstate
#else
  #define FinalDfltAssertCpuSrvcDisablePstate                         DfltAssertCpuSrvcDisablePstate
#endif

#ifdef OvrdDfltAssertCpuSrvcTransitionPstate
  #define FinalDfltAssertCpuSrvcTransitionPstate                      OvrdDfltAssertCpuSrvcTransitionPstate
#else
  #define FinalDfltAssertCpuSrvcTransitionPstate                      DfltAssertCpuSrvcTransitionPstate
#endif

#ifdef OvrdDfltAssertCpuSrvcGetProcIddMax
  #define FinalDfltAssertCpuSrvcGetProcIddMax                         OvrdDfltAssertCpuSrvcGetProcIddMax
#else
  #define FinalDfltAssertCpuSrvcGetProcIddMax                         DfltAssertCpuSrvcGetProcIddMax
#endif

#ifdef OvrdDfltAssertCpuSrvcGetTscRate
  #define FinalDfltAssertCpuSrvcGetTscRate                            OvrdDfltAssertCpuSrvcGetTscRate
#else
  #define FinalDfltAssertCpuSrvcGetTscRate                            DfltAssertCpuSrvcGetTscRate
#endif

#ifdef OvrdDfltAssertCpuSrvcGetCurrentNbFrequency
  #define FinalDfltAssertCpuSrvcGetCurrentNbFrequency                 OvrdDfltAssertCpuSrvcGetCurrentNbFrequency
#else
  #define FinalDfltAssertCpuSrvcGetCurrentNbFrequency                 DfltAssertCpuSrvcGetCurrentNbFrequency
#endif

#ifdef OvrdDfltAssertCpuSrvcGetMinMaxNbFrequency
  #define FinalDfltAssertCpuSrvcGetMinMaxNbFrequency                  OvrdDfltAssertCpuSrvcGetMinMaxNbFrequency
#else
  #define FinalDfltAssertCpuSrvcGetMinMaxNbFrequency                  DfltAssertCpuSrvcGetMinMaxNbFrequency
#endif

#ifdef OvrdDfltAssertCpuSrvcGetNbPstateInfo
  #define FinalDfltAssertCpuSrvcGetNbPstateInfo                       OvrdDfltAssertCpuSrvcGetNbPstateInfo
#else
  #define FinalDfltAssertCpuSrvcGetNbPstateInfo                       DfltAssertCpuSrvcGetNbPstateInfo
#endif

#ifdef OvrdDfltAssertCpuSrvcIsNbCofInitNeeded
  #define FinalDfltAssertCpuSrvcIsNbCofInitNeeded                     OvrdDfltAssertCpuSrvcIsNbCofInitNeeded
#else
  #define FinalDfltAssertCpuSrvcIsNbCofInitNeeded                     DfltAssertCpuSrvcIsNbCofInitNeeded
#endif

#ifdef OvrdDfltAssertCpuSrvcGetNbIddMax
  #define FinalDfltAssertCpuSrvcGetNbIddMax                           OvrdDfltAssertCpuSrvcGetNbIddMax
#else
  #define FinalDfltAssertCpuSrvcGetNbIddMax                           DfltAssertCpuSrvcGetNbIddMax
#endif

#ifdef OvrdDfltAssertCpuSrvcLaunchApCore
  #define FinalDfltAssertCpuSrvcLaunchApCore                          OvrdDfltAssertCpuSrvcLaunchApCore
#else
  #define FinalDfltAssertCpuSrvcLaunchApCore                          DfltAssertCpuSrvcLaunchApCore
#endif

#ifdef OvrdDfltAssertCpuSrvcGetNumberOfPhysicalCores
  #define FinalDfltAssertCpuSrvcGetNumberOfPhysicalCores              OvrdDfltAssertCpuSrvcGetNumberOfPhysicalCores
#else
  #define FinalDfltAssertCpuSrvcGetNumberOfPhysicalCores              DfltAssertCpuSrvcGetNumberOfPhysicalCores
#endif

#ifdef OvrdDfltAssertCpuSrvcGetApMailboxFromHardware
  #define FinalDfltAssertCpuSrvcGetApMailboxFromHardware              OvrdDfltAssertCpuSrvcGetApMailboxFromHardware
#else
  #define FinalDfltAssertCpuSrvcGetApMailboxFromHardware              DfltAssertCpuSrvcGetApMailboxFromHardware
#endif

#ifdef OvrdDfltAssertCpuSrvcSetApCoreNumber
  #define FinalDfltAssertCpuSrvcSetApCoreNumber                       OvrdDfltAssertCpuSrvcSetApCoreNumber
#else
  #define FinalDfltAssertCpuSrvcSetApCoreNumber                       DfltAssertCpuSrvcSetApCoreNumber
#endif

#ifdef OvrdDfltAssertCpuSrvcGetApCoreNumber
  #define FinalDfltAssertCpuSrvcGetApCoreNumber                       OvrdDfltAssertCpuSrvcGetApCoreNumber
#else
  #define FinalDfltAssertCpuSrvcGetApCoreNumber                       DfltAssertCpuSrvcGetApCoreNumber
#endif

#ifdef OvrdDfltAssertCpuSrvcTransferApCoreNumber
  #define FinalDfltAssertCpuSrvcTransferApCoreNumber                  OvrdDfltAssertCpuSrvcTransferApCoreNumber
#else
  #define FinalDfltAssertCpuSrvcTransferApCoreNumber                  DfltAssertCpuSrvcTransferApCoreNumber
#endif

#ifdef OvrdDfltAssertCpuSrvcGetStoredNodeNumber
  #define FinalDfltAssertCpuSrvcGetStoredNodeNumber                   OvrdDfltAssertCpuSrvcGetStoredNodeNumber
#else
  #define FinalDfltAssertCpuSrvcGetStoredNodeNumber                   DfltAssertCpuSrvcGetStoredNodeNumber
#endif

#ifdef OvrdDfltAssertCpuSrvcCoreIdPositionInInitialApicId
  #define FinalDfltAssertCpuSrvcCoreIdPositionInInitialApicId         OvrdDfltAssertCpuSrvcCoreIdPositionInInitialApicId
#else
  #define FinalDfltAssertCpuSrvcCoreIdPositionInInitialApicId         DfltAssertCpuSrvcCoreIdPositionInInitialApicId
#endif

#ifdef OvrdDfltAssertCpuSrvcSaveFeatures
  #define FinalDfltAssertCpuSrvcSaveFeatures                          OvrdDfltAssertCpuSrvcSaveFeatures
#else
  #define FinalDfltAssertCpuSrvcSaveFeatures                          DfltAssertCpuSrvcSaveFeatures
#endif

#ifdef OvrdDfltAssertCpuSrvcWriteFeatures
  #define FinalDfltAssertCpuSrvcWriteFeatures                         OvrdDfltAssertCpuSrvcWriteFeatures
#else
  #define FinalDfltAssertCpuSrvcWriteFeatures                         DfltAssertCpuSrvcWriteFeatures
#endif

#ifdef OvrdDfltAssertCpuSrvcSetWarmResetFlag
  #define FinalDfltAssertCpuSrvcSetWarmResetFlag                      OvrdDfltAssertCpuSrvcSetWarmResetFlag
#else
  #define FinalDfltAssertCpuSrvcSetWarmResetFlag                      DfltAssertCpuSrvcSetWarmResetFlag
#endif

#ifdef OvrdDfltAssertCpuSrvcGetWarmResetFlag
  #define FinalDfltAssertCpuSrvcGetWarmResetFlag                      OvrdDfltAssertCpuSrvcGetWarmResetFlag
#else
  #define FinalDfltAssertCpuSrvcGetWarmResetFlag                      DfltAssertCpuSrvcGetWarmResetFlag
#endif

#ifdef OvrdDfltAssertCpuSrvcGetBrandString1
  #define FinalDfltAssertCpuSrvcGetBrandString1                       OvrdDfltAssertCpuSrvcGetBrandString1
#else
  #define FinalDfltAssertCpuSrvcGetBrandString1                       DfltAssertCpuSrvcGetBrandString1
#endif

#ifdef OvrdDfltAssertCpuSrvcGetBrandString2
  #define FinalDfltAssertCpuSrvcGetBrandString2                       OvrdDfltAssertCpuSrvcGetBrandString2
#else
  #define FinalDfltAssertCpuSrvcGetBrandString2                       DfltAssertCpuSrvcGetBrandString2
#endif

#ifdef OvrdDfltAssertCpuSrvcGetMicroCodePatchesStruct
  #define FinalDfltAssertCpuSrvcGetMicroCodePatchesStruct             OvrdDfltAssertCpuSrvcGetMicroCodePatchesStruct
#else
  #define FinalDfltAssertCpuSrvcGetMicroCodePatchesStruct             DfltAssertCpuSrvcGetMicroCodePatchesStruct
#endif

#ifdef OvrdDfltAssertCpuSrvcGetMicrocodeEquivalenceTable
  #define FinalDfltAssertCpuSrvcGetMicrocodeEquivalenceTable          OvrdDfltAssertCpuSrvcGetMicrocodeEquivalenceTable
#else
  #define FinalDfltAssertCpuSrvcGetMicrocodeEquivalenceTable          DfltAssertCpuSrvcGetMicrocodeEquivalenceTable
#endif

#ifdef OvrdDfltAssertCpuSrvcGetCacheInfo
  #define FinalDfltAssertCpuSrvcGetCacheInfo                          OvrdDfltAssertCpuSrvcGetCacheInfo
#else
  #define FinalDfltAssertCpuSrvcGetCacheInfo                          DfltAssertCpuSrvcGetCacheInfo
#endif

#ifdef OvrdDfltAssertCpuSrvcGetSysPmTableStruct
  #define FinalDfltAssertCpuSrvcGetSysPmTableStruct                   OvrdDfltAssertCpuSrvcGetSysPmTableStruct
#else
  #define FinalDfltAssertCpuSrvcGetSysPmTableStruct                   DfltAssertCpuSrvcGetSysPmTableStruct
#endif

#ifdef OvrdDfltAssertCpuSrvcGetWheaInitData
  #define FinalDfltAssertCpuSrvcGetWheaInitData                       OvrdDfltAssertCpuSrvcGetWheaInitData
#else
  #define FinalDfltAssertCpuSrvcGetWheaInitData                       DfltAssertCpuSrvcGetWheaInitData
#endif

#ifdef OvrdDfltAssertCpuSrvcGetPlatformTypeSpecificInfo
  #define FinalDfltAssertCpuSrvcGetPlatformTypeSpecificInfo           OvrdDfltAssertCpuSrvcGetPlatformTypeSpecificInfo
#else
  #define FinalDfltAssertCpuSrvcGetPlatformTypeSpecificInfo           DfltAssertCpuSrvcGetPlatformTypeSpecificInfo
#endif

#ifdef OvrdDfltAssertCpuSrvcIsNbPstateEnabled
  #define FinalDfltAssertCpuSrvcIsNbPstateEnabled                     OvrdDfltAssertCpuSrvcIsNbPstateEnabled
#else
  #define FinalDfltAssertCpuSrvcIsNbPstateEnabled                     DfltAssertCpuSrvcIsNbPstateEnabled
#endif

#ifdef OvrdDfltAssertCpuSrvcNextLinkHasHtPhyFeats
  #define FinalDfltAssertCpuSrvcNextLinkHasHtPhyFeats                 OvrdDfltAssertCpuSrvcNextLinkHasHtPhyFeats
#else
  #define FinalDfltAssertCpuSrvcNextLinkHasHtPhyFeats                 DfltAssertCpuSrvcNextLinkHasHtPhyFeats
#endif

#ifdef OvrdDfltAssertCpuSrvcSetHtPhyRegister
  #define FinalDfltAssertCpuSrvcSetHtPhyRegister                      OvrdDfltAssertCpuSrvcSetHtPhyRegister
#else
  #define FinalDfltAssertCpuSrvcSetHtPhyRegister                      DfltAssertCpuSrvcSetHtPhyRegister
#endif

#ifdef OvrdDfltAssertCpuSrvcGetNextHtLinkFeatures
  #define FinalDfltAssertCpuSrvcGetNextHtLinkFeatures                 OvrdDfltAssertCpuSrvcGetNextHtLinkFeatures
#else
  #define FinalDfltAssertCpuSrvcGetNextHtLinkFeatures                 DfltAssertCpuSrvcGetNextHtLinkFeatures
#endif

#ifdef OvrdDfltAssertCpuSrvcRegisterTableList
  #define FinalDfltAssertCpuSrvcRegisterTableList                     OvrdDfltAssertCpuSrvcRegisterTableList
#else
  #define FinalDfltAssertCpuSrvcRegisterTableList                     DfltAssertCpuSrvcRegisterTableList
#endif

#ifdef OvrdDfltAssertCpuSrvcTableEntryTypeDescriptors
  #define FinalDfltAssertCpuSrvcTableEntryTypeDescriptors             OvrdDfltAssertCpuSrvcTableEntryTypeDescriptors
#else
  #define FinalDfltAssertCpuSrvcTableEntryTypeDescriptors             DfltAssertCpuSrvcTableEntryTypeDescriptors
#endif

#ifdef OvrdDfltAssertCpuSrvcPackageLinkMap
  #define FinalDfltAssertCpuSrvcPackageLinkMap                        OvrdDfltAssertCpuSrvcPackageLinkMap
#else
  #define FinalDfltAssertCpuSrvcPackageLinkMap                        DfltAssertCpuSrvcPackageLinkMap
#endif

#ifdef OvrdDfltAssertCpuSrvcComputeUnitMap
  #define FinalDfltAssertCpuSrvcComputeUnitMap                        OvrdDfltAssertCpuSrvcComputeUnitMap
#else
  #define FinalDfltAssertCpuSrvcComputeUnitMap                        DfltAssertCpuSrvcComputeUnitMap
#endif

#ifdef OvrdDfltAssertCpuSrvcInitCacheDisabled
  #define FinalDfltAssertCpuSrvcInitCacheDisabled                     OvrdDfltAssertCpuSrvcInitCacheDisabled
#else
  #define FinalDfltAssertCpuSrvcInitCacheDisabled                     DfltAssertCpuSrvcInitCacheDisabled
#endif

#ifdef OvrdDfltAssertCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
  #define FinalDfltAssertCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable OvrdDfltAssertCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
#else
  #define FinalDfltAssertCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable DfltAssertCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
#endif

#ifdef OvrdDfltAssertCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
  #define FinalDfltAssertCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable  OvrdDfltAssertCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
#else
  #define FinalDfltAssertCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable  DfltAssertCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
#endif

#ifdef OvrdDfltAssertCpuSrvcPatchLoaderIsSharedByCU
  #define FinalDfltAssertCpuSrvcPatchLoaderIsSharedByCU               OvrdDfltAssertCpuSrvcPatchLoaderIsSharedByCU
#else
  #define FinalDfltAssertCpuSrvcPatchLoaderIsSharedByCU               DfltAssertCpuSrvcPatchLoaderIsSharedByCU
#endif

//
// Handle override definitions on DfltCpuSrvc<ServiceName>
//

#ifdef OvrdDfltCpuSrvcRevision
  #define FinalDfltCpuSrvcRevision                                    OvrdDfltCpuSrvcRevision
#else
  #define FinalDfltCpuSrvcRevision                                    DfltCpuSrvcRevision
#endif

#ifdef OvrdDfltCpuSrvcDisablePstate
  #define FinalDfltCpuSrvcDisablePstate                               OvrdDfltCpuSrvcDisablePstate
#else
  #define FinalDfltCpuSrvcDisablePstate                               DfltCpuSrvcDisablePstate
#endif

#ifdef OvrdDfltCpuSrvcTransitionPstate
  #define FinalDfltCpuSrvcTransitionPstate                            OvrdDfltCpuSrvcTransitionPstate
#else
  #define FinalDfltCpuSrvcTransitionPstate                            DfltCpuSrvcTransitionPstate
#endif

#ifdef OvrdDfltCpuSrvcGetProcIddMax
  #define FinalDfltCpuSrvcGetProcIddMax                               OvrdDfltCpuSrvcGetProcIddMax
#else
  #define FinalDfltCpuSrvcGetProcIddMax                               DfltCpuSrvcGetProcIddMax
#endif

#ifdef OvrdDfltCpuSrvcGetTscRate
  #define FinalDfltCpuSrvcGetTscRate                                  OvrdDfltCpuSrvcGetTscRate
#else
  #define FinalDfltCpuSrvcGetTscRate                                  DfltCpuSrvcGetTscRate
#endif

#ifdef OvrdDfltCpuSrvcGetCurrentNbFrequency
  #define FinalDfltCpuSrvcGetCurrentNbFrequency                       OvrdDfltCpuSrvcGetCurrentNbFrequency
#else
  #define FinalDfltCpuSrvcGetCurrentNbFrequency                       DfltCpuSrvcGetCurrentNbFrequency
#endif

#ifdef OvrdDfltCpuSrvcGetMinMaxNbFrequency
  #define FinalDfltCpuSrvcGetMinMaxNbFrequency                        OvrdDfltCpuSrvcGetMinMaxNbFrequency
#else
  #define FinalDfltCpuSrvcGetMinMaxNbFrequency                        DfltCpuSrvcGetMinMaxNbFrequency
#endif

#ifdef OvrdDfltCpuSrvcGetNbPstateInfo
  #define FinalDfltCpuSrvcGetNbPstateInfo                             OvrdDfltCpuSrvcGetNbPstateInfo
#else
  #define FinalDfltCpuSrvcGetNbPstateInfo                             DfltCpuSrvcGetNbPstateInfo
#endif

#ifdef OvrdDfltCpuSrvcIsNbCofInitNeeded
  #define FinalDfltCpuSrvcIsNbCofInitNeeded                           OvrdDfltCpuSrvcIsNbCofInitNeeded
#else
  #define FinalDfltCpuSrvcIsNbCofInitNeeded                           DfltCpuSrvcIsNbCofInitNeeded
#endif

#ifdef OvrdDfltCpuSrvcGetNbIddMax
  #define FinalDfltCpuSrvcGetNbIddMax                                 OvrdDfltCpuSrvcGetNbIddMax
#else
  #define FinalDfltCpuSrvcGetNbIddMax                                 DfltCpuSrvcGetNbIddMax
#endif

#ifdef OvrdDfltCpuSrvcLaunchApCore
  #define FinalDfltCpuSrvcLaunchApCore                                OvrdDfltCpuSrvcLaunchApCore
#else
  #define FinalDfltCpuSrvcLaunchApCore                                DfltCpuSrvcLaunchApCore
#endif

#ifdef OvrdDfltCpuSrvcGetNumberOfPhysicalCores
  #define FinalDfltCpuSrvcGetNumberOfPhysicalCores                    OvrdDfltCpuSrvcGetNumberOfPhysicalCores
#else
  #define FinalDfltCpuSrvcGetNumberOfPhysicalCores                    DfltCpuSrvcGetNumberOfPhysicalCores
#endif

#ifdef OvrdDfltCpuSrvcGetApMailboxFromHardware
  #define FinalDfltCpuSrvcGetApMailboxFromHardware                    OvrdDfltCpuSrvcGetApMailboxFromHardware
#else
  #define FinalDfltCpuSrvcGetApMailboxFromHardware                    DfltCpuSrvcGetApMailboxFromHardware
#endif

#ifdef OvrdDfltCpuSrvcSetApCoreNumber
  #define FinalDfltCpuSrvcSetApCoreNumber                             OvrdDfltCpuSrvcSetApCoreNumber
#else
  #define FinalDfltCpuSrvcSetApCoreNumber                             DfltCpuSrvcSetApCoreNumber
#endif

#ifdef OvrdDfltCpuSrvcGetApCoreNumber
  #define FinalDfltCpuSrvcGetApCoreNumber                             OvrdDfltCpuSrvcGetApCoreNumber
#else
  #define FinalDfltCpuSrvcGetApCoreNumber                             DfltCpuSrvcGetApCoreNumber
#endif

#ifdef OvrdDfltCpuSrvcTransferApCoreNumber
  #define FinalDfltCpuSrvcTransferApCoreNumber                        OvrdDfltCpuSrvcTransferApCoreNumber
#else
  #define FinalDfltCpuSrvcTransferApCoreNumber                        DfltCpuSrvcTransferApCoreNumber
#endif

#ifdef OvrdDfltCpuSrvcGetStoredNodeNumber
  #define FinalDfltCpuSrvcGetStoredNodeNumber                         OvrdDfltCpuSrvcGetStoredNodeNumber
#else
  #define FinalDfltCpuSrvcGetStoredNodeNumber                         DfltCpuSrvcGetStoredNodeNumber
#endif

#ifdef OvrdDfltCpuSrvcCoreIdPositionInInitialApicId
  #define FinalDfltCpuSrvcCoreIdPositionInInitialApicId               OvrdDfltCpuSrvcCoreIdPositionInInitialApicId
#else
  #define FinalDfltCpuSrvcCoreIdPositionInInitialApicId               DfltCpuSrvcCoreIdPositionInInitialApicId
#endif

#ifdef OvrdDfltCpuSrvcSaveFeatures
  #define FinalDfltCpuSrvcSaveFeatures                                OvrdDfltCpuSrvcSaveFeatures
#else
  #define FinalDfltCpuSrvcSaveFeatures                                DfltCpuSrvcSaveFeatures
#endif

#ifdef OvrdDfltCpuSrvcWriteFeatures
  #define FinalDfltCpuSrvcWriteFeatures                               OvrdDfltCpuSrvcWriteFeatures
#else
  #define FinalDfltCpuSrvcWriteFeatures                               DfltCpuSrvcWriteFeatures
#endif

#ifdef OvrdDfltCpuSrvcSetWarmResetFlag
  #define FinalDfltCpuSrvcSetWarmResetFlag                            OvrdDfltCpuSrvcSetWarmResetFlag
#else
  #define FinalDfltCpuSrvcSetWarmResetFlag                            DfltCpuSrvcSetWarmResetFlag
#endif

#ifdef OvrdDfltCpuSrvcGetWarmResetFlag
  #define FinalDfltCpuSrvcGetWarmResetFlag                            OvrdDfltCpuSrvcGetWarmResetFlag
#else
  #define FinalDfltCpuSrvcGetWarmResetFlag                            DfltCpuSrvcGetWarmResetFlag
#endif

#ifdef OvrdDfltCpuSrvcGetBrandString1
  #define FinalDfltCpuSrvcGetBrandString1                             OvrdDfltCpuSrvcGetBrandString1
#else
  #define FinalDfltCpuSrvcGetBrandString1                             DfltCpuSrvcGetBrandString1
#endif

#ifdef OvrdDfltCpuSrvcGetBrandString2
  #define FinalDfltCpuSrvcGetBrandString2                             OvrdDfltCpuSrvcGetBrandString2
#else
  #define FinalDfltCpuSrvcGetBrandString2                             DfltCpuSrvcGetBrandString2
#endif

#ifdef OvrdDfltCpuSrvcGetMicroCodePatchesStruct
  #define FinalDfltCpuSrvcGetMicroCodePatchesStruct                   OvrdDfltCpuSrvcGetMicroCodePatchesStruct
#else
  #define FinalDfltCpuSrvcGetMicroCodePatchesStruct                   DfltCpuSrvcGetMicroCodePatchesStruct
#endif

#ifdef OvrdDfltCpuSrvcGetMicrocodeEquivalenceTable
  #define FinalDfltCpuSrvcGetMicrocodeEquivalenceTable                OvrdDfltCpuSrvcGetMicrocodeEquivalenceTable
#else
  #define FinalDfltCpuSrvcGetMicrocodeEquivalenceTable                DfltCpuSrvcGetMicrocodeEquivalenceTable
#endif

#ifdef OvrdDfltCpuSrvcGetCacheInfo
  #define FinalDfltCpuSrvcGetCacheInfo                                OvrdDfltCpuSrvcGetCacheInfo
#else
  #define FinalDfltCpuSrvcGetCacheInfo                                DfltCpuSrvcGetCacheInfo
#endif

#ifdef OvrdDfltCpuSrvcGetSysPmTableStruct
  #define FinalDfltCpuSrvcGetSysPmTableStruct                         OvrdDfltCpuSrvcGetSysPmTableStruct
#else
  #define FinalDfltCpuSrvcGetSysPmTableStruct                         DfltCpuSrvcGetSysPmTableStruct
#endif

#ifdef OvrdDfltCpuSrvcGetWheaInitData
  #define FinalDfltCpuSrvcGetWheaInitData                             OvrdDfltCpuSrvcGetWheaInitData
#else
  #define FinalDfltCpuSrvcGetWheaInitData                             DfltCpuSrvcGetWheaInitData
#endif

#ifdef OvrdDfltCpuSrvcGetPlatformTypeSpecificInfo
  #define FinalDfltCpuSrvcGetPlatformTypeSpecificInfo                 OvrdDfltCpuSrvcGetPlatformTypeSpecificInfo
#else
  #define FinalDfltCpuSrvcGetPlatformTypeSpecificInfo                 DfltCpuSrvcGetPlatformTypeSpecificInfo
#endif

#ifdef OvrdDfltCpuSrvcIsNbPstateEnabled
  #define FinalDfltCpuSrvcIsNbPstateEnabled                           OvrdDfltCpuSrvcIsNbPstateEnabled
#else
  #define FinalDfltCpuSrvcIsNbPstateEnabled                           DfltCpuSrvcIsNbPstateEnabled
#endif

#ifdef OvrdDfltCpuSrvcNextLinkHasHtPhyFeats
  #define FinalDfltCpuSrvcNextLinkHasHtPhyFeats                       OvrdDfltCpuSrvcNextLinkHasHtPhyFeats
#else
  #define FinalDfltCpuSrvcNextLinkHasHtPhyFeats                       DfltCpuSrvcNextLinkHasHtPhyFeats
#endif

#ifdef OvrdDfltCpuSrvcSetHtPhyRegister
  #define FinalDfltCpuSrvcSetHtPhyRegister                            OvrdDfltCpuSrvcSetHtPhyRegister
#else
  #define FinalDfltCpuSrvcSetHtPhyRegister                            DfltCpuSrvcSetHtPhyRegister
#endif

#ifdef OvrdDfltCpuSrvcGetNextHtLinkFeatures
  #define FinalDfltCpuSrvcGetNextHtLinkFeatures                       OvrdDfltCpuSrvcGetNextHtLinkFeatures
#else
  #define FinalDfltCpuSrvcGetNextHtLinkFeatures                       DfltCpuSrvcGetNextHtLinkFeatures
#endif

#ifdef OvrdDfltCpuSrvcRegisterTableList
  #define FinalDfltCpuSrvcRegisterTableList                           OvrdDfltCpuSrvcRegisterTableList
#else
  #define FinalDfltCpuSrvcRegisterTableList                           DfltCpuSrvcRegisterTableList
#endif

#ifdef OvrdDfltCpuSrvcTableEntryTypeDescriptors
  #define FinalDfltCpuSrvcTableEntryTypeDescriptors                   OvrdDfltCpuSrvcTableEntryTypeDescriptors
#else
  #define FinalDfltCpuSrvcTableEntryTypeDescriptors                   DfltCpuSrvcTableEntryTypeDescriptors
#endif

#ifdef OvrdDfltCpuSrvcPackageLinkMap
  #define FinalDfltCpuSrvcPackageLinkMap                              OvrdDfltCpuSrvcPackageLinkMap
#else
  #define FinalDfltCpuSrvcPackageLinkMap                              DfltCpuSrvcPackageLinkMap
#endif

#ifdef OvrdDfltCpuSrvcComputeUnitMap
  #define FinalDfltCpuSrvcComputeUnitMap                              OvrdDfltCpuSrvcComputeUnitMap
#else
  #define FinalDfltCpuSrvcComputeUnitMap                              DfltCpuSrvcComputeUnitMap
#endif

#ifdef OvrdDfltCpuSrvcInitCacheDisabled
  #define FinalDfltCpuSrvcInitCacheDisabled                           OvrdDfltCpuSrvcInitCacheDisabled
#else
  #define FinalDfltCpuSrvcInitCacheDisabled                           DfltCpuSrvcInitCacheDisabled
#endif

#ifdef OvrdDfltCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
  #define FinalDfltCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable       OvrdDfltCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
#else
  #define FinalDfltCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable       DfltCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
#endif

#ifdef OvrdDfltCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
  #define FinalDfltCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable        OvrdDfltCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
#else
  #define FinalDfltCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable        DfltCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
#endif

#ifdef OvrdDfltCpuSrvcPatchLoaderIsSharedByCU
  #define FinalDfltCpuSrvcPatchLoaderIsSharedByCU                     OvrdDfltCpuSrvcPatchLoaderIsSharedByCU
#else
  #define FinalDfltCpuSrvcPatchLoaderIsSharedByCU                     DfltCpuSrvcPatchLoaderIsSharedByCU
#endif


//
// Make final service definition with considerations of below:
// 1. Common build config swich control
// 2. Override service definition
//

// Member: (UINT16) Revision
#ifdef CpuSrvcRevision
  #define FinalCpuSrvcRevision                                CpuSrvcRevision
#else
  #define FinalCpuSrvcRevision                                FinalDfltCpuSrvcRevision
#endif

// Member: (PF_CPU_DISABLE_PSTATE) DisablePstate
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcDisablePstate
    #define FinalCpuSrvcDisablePstate                           CpuSrvcDisablePstate
    #ifndef EXTERN_FINALCPUSRVCDISABLEPSTATE
    #define EXTERN_FINALCPUSRVCDISABLEPSTATE
        extern  F_CPU_DISABLE_PSTATE                                FinalCpuSrvcDisablePstate;
    #endif
  #else
    #define FinalCpuSrvcDisablePstate                           FinalDfltCpuSrvcDisablePstate
  #endif
#else
  #define FinalCpuSrvcDisablePstate                           FinalDfltAssertCpuSrvcDisablePstate
#endif

// Member: (PF_CPU_TRANSITION_PSTATE) TransitionPstate
#if (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_POST == TRUE) || (AGESA_ENTRY_INIT_LATE == TRUE)
  #ifdef CpuSrvcTransitionPstate
    #define FinalCpuSrvcTransitionPstate                        CpuSrvcTransitionPstate
    #ifndef EXTERN_FINALCPUSRVCTRANSITIONPSTATE
    #define EXTERN_FINALCPUSRVCTRANSITIONPSTATE
        extern  F_CPU_TRANSITION_PSTATE                             FinalCpuSrvcTransitionPstate;
    #endif
  #else
    #define FinalCpuSrvcTransitionPstate                        FinalDfltCpuSrvcTransitionPstate
  #endif
#else
  #define FinalCpuSrvcTransitionPstate                        FinalDfltAssertCpuSrvcTransitionPstate
#endif

// Member: (PF_CPU_GET_IDD_MAX) GetProcIddMax
#if (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_POST == TRUE)
  #ifdef CpuSrvcGetProcIddMax
    #define FinalCpuSrvcGetProcIddMax                           CpuSrvcGetProcIddMax
    extern  F_CPU_GET_IDD_MAX                                   FinalCpuSrvcGetProcIddMax;
  #else
    #define FinalCpuSrvcGetProcIddMax                           FinalDfltCpuSrvcGetProcIddMax
  #endif
#else
  #define FinalCpuSrvcGetProcIddMax                           FinalDfltAssertCpuSrvcGetProcIddMax
#endif

// Member: (PF_CPU_GET_TSC_RATE) GetTscRate
#if (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_LATE == TRUE)
  #ifdef CpuSrvcGetTscRate
    #define FinalCpuSrvcGetTscRate                              CpuSrvcGetTscRate
    #ifndef EXTERN_FINALCPUSRVCGETTSCRATE
    #define EXTERN_FINALCPUSRVCGETTSCRATE
        extern  F_CPU_GET_TSC_RATE                                  FinalCpuSrvcGetTscRate;
    #endif
  #else
    #define FinalCpuSrvcGetTscRate                              FinalDfltCpuSrvcGetTscRate
  #endif
#else
  #define FinalCpuSrvcGetTscRate                              FinalDfltAssertCpuSrvcGetTscRate
#endif

// Member: (PF_CPU_GET_NB_FREQ) GetCurrentNbFrequency
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcGetCurrentNbFrequency
    #define FinalCpuSrvcGetCurrentNbFrequency                   CpuSrvcGetCurrentNbFrequency
    extern  F_CPU_GET_NB_FREQ                                   FinalCpuSrvcGetCurrentNbFrequency;
  #else
    #define FinalCpuSrvcGetCurrentNbFrequency                   FinalDfltCpuSrvcGetCurrentNbFrequency
  #endif
#else
  #define FinalCpuSrvcGetCurrentNbFrequency                   FinalDfltAssertCpuSrvcGetCurrentNbFrequency
#endif


// Member: (PF_CPU_GET_MIN_MAX_NB_FREQ) GetMinMaxNbFrequency
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcGetMinMaxNbFrequency
    #define FinalCpuSrvcGetMinMaxNbFrequency                    CpuSrvcGetMinMaxNbFrequency
    extern  F_CPU_GET_MIN_MAX_NB_FREQ                           FinalCpuSrvcGetMinMaxNbFrequency;
  #else
    #define FinalCpuSrvcGetMinMaxNbFrequency                    FinalDfltCpuSrvcGetMinMaxNbFrequency
  #endif
#else
  #define FinalCpuSrvcGetMinMaxNbFrequency                    FinalDfltAssertCpuSrvcGetMinMaxNbFrequency
#endif

// Member: (PF_CPU_GET_NB_PSTATE_INFO) GetNbPstateInfo
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcGetNbPstateInfo
    #define FinalCpuSrvcGetNbPstateInfo                         CpuSrvcGetNbPstateInfo
    extern  F_CPU_GET_NB_PSTATE_INFO                            FinalCpuSrvcGetNbPstateInfo;
  #else
    #define FinalCpuSrvcGetNbPstateInfo                         FinalDfltCpuSrvcGetNbPstateInfo
  #endif
#else
  #define FinalCpuSrvcGetNbPstateInfo                         FinalDfltAssertCpuSrvcGetNbPstateInfo
#endif

// Member: (PF_CPU_IS_NBCOF_INIT_NEEDED) IsNbCofInitNeeded
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcIsNbCofInitNeeded
    #define FinalCpuSrvcIsNbCofInitNeeded                       CpuSrvcIsNbCofInitNeeded
    extern  F_CPU_IS_NBCOF_INIT_NEEDED                          FinalCpuSrvcIsNbCofInitNeeded;
  #else
    #define FinalCpuSrvcIsNbCofInitNeeded                       FinalDfltCpuSrvcIsNbCofInitNeeded
  #endif
#else
  #define FinalCpuSrvcIsNbCofInitNeeded                       FinalDfltAssertCpuSrvcIsNbCofInitNeeded
#endif

// Member:    (PF_CPU_GET_NB_IDD_MAX) GetNbIddMax
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcGetNbIddMax
    #define FinalCpuSrvcGetNbIddMax                             CpuSrvcGetNbIddMax
    extern  F_CPU_GET_NB_IDD_MAX                                FinalCpuSrvcGetNbIddMax;
  #else
    #define FinalCpuSrvcGetNbIddMax                             FinalDfltCpuSrvcGetNbIddMax
  #endif
#else
  #define FinalCpuSrvcGetNbIddMax                             FinalDfltAssertCpuSrvcGetNbIddMax
#endif

// Member:  (PF_CPU_AP_INITIAL_LAUNCH) LaunchApCore
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcLaunchApCore
    #define FinalCpuSrvcLaunchApCore                            CpuSrvcLaunchApCore
    #ifndef EXTERN_FINALCPUSRVCLAUNCHAPCORE
    #define EXTERN_FINALCPUSRVCLAUNCHAPCORE
        extern  F_CPU_AP_INITIAL_LAUNCH                             FinalCpuSrvcLaunchApCore;
    #endif
  #else
    #define FinalCpuSrvcLaunchApCore                            FinalDfltCpuSrvcLaunchApCore
  #endif
#else
  #define FinalCpuSrvcLaunchApCore                            FinalDfltAssertCpuSrvcLaunchApCore
#endif

// Member:(PF_CPU_NUMBER_OF_PHYSICAL_CORES) GetNumberOfPhysicalCores
#if (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_LATE == TRUE)
  #ifdef CpuSrvcGetNumberOfPhysicalCores
    #define FinalCpuSrvcGetNumberOfPhysicalCores                CpuSrvcGetNumberOfPhysicalCores
    extern  F_CPU_NUMBER_OF_PHYSICAL_CORES                      FinalCpuSrvcGetNumberOfPhysicalCores;
  #else
    #define FinalCpuSrvcGetNumberOfPhysicalCores                FinalDfltCpuSrvcGetNumberOfPhysicalCores
  #endif
#else
  #define FinalCpuSrvcGetNumberOfPhysicalCores                FinalDfltAssertCpuSrvcGetNumberOfPhysicalCores
#endif

// Member: (PF_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE) GetApMailboxFromHardware
#if (AGESA_ENTRY_INIT_RESET == TRUE) || (AGESA_ENTRY_INIT_EARLY == TRUE)
  #ifdef CpuSrvcGetApMailboxFromHardware
    #define FinalCpuSrvcGetApMailboxFromHardware                CpuSrvcGetApMailboxFromHardware
    extern  F_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE              FinalCpuSrvcGetApMailboxFromHardware;
  #else
    #define FinalCpuSrvcGetApMailboxFromHardware                FinalDfltCpuSrvcGetApMailboxFromHardware
  #endif
#else
  #define FinalCpuSrvcGetApMailboxFromHardware                FinalDfltAssertCpuSrvcGetApMailboxFromHardware
#endif

// Member: (PF_CPU_SET_AP_CORE_NUMBER) SetApCoreNumber
#if (AGESA_ENTRY_INIT_RESET == TRUE) || (AGESA_ENTRY_INIT_EARLY == TRUE)
  #ifdef CpuSrvcSetApCoreNumber
    #define FinalCpuSrvcSetApCoreNumber                         CpuSrvcSetApCoreNumber
    extern  F_CPU_SET_AP_CORE_NUMBER                            FinalCpuSrvcSetApCoreNumber;
  #else
    #define FinalCpuSrvcSetApCoreNumber                         FinalDfltCpuSrvcSetApCoreNumber
  #endif
#else
  #define FinalCpuSrvcSetApCoreNumber                         FinalDfltAssertCpuSrvcSetApCoreNumber
#endif

// Member: (PF_CPU_GET_AP_CORE_NUMBER) GetApCoreNumber
#if (AGESA_ENTRY_INIT_RESET == TRUE) || (AGESA_ENTRY_INIT_EARLY == TRUE) || \
    (AGESA_ENTRY_INIT_POST == TRUE) || (AGESA_ENTRY_INIT_LATE == TRUE)
  #ifdef CpuSrvcGetApCoreNumber
    #define FinalCpuSrvcGetApCoreNumber                         CpuSrvcGetApCoreNumber
    extern  F_CPU_GET_AP_CORE_NUMBER                            FinalCpuSrvcGetApCoreNumber;
  #else
    #define FinalCpuSrvcGetApCoreNumber                         FinalDfltCpuSrvcGetApCoreNumber
  #endif
#else
  #define FinalCpuSrvcGetApCoreNumber                         FinalDfltAssertCpuSrvcGetApCoreNumber
#endif

// Member: (PF_CPU_TRANSFER_AP_CORE_NUMBER) TransferApCoreNumber
#if (AGESA_ENTRY_INIT_RESET == TRUE) || (AGESA_ENTRY_INIT_EARLY == TRUE)
  #ifdef CpuSrvcTransferApCoreNumber
    #define FinalCpuSrvcTransferApCoreNumber                    CpuSrvcTransferApCoreNumber
    extern  F_CPU_TRANSFER_AP_CORE_NUMBER                       FinalCpuSrvcTransferApCoreNumber;
  #else
    #define FinalCpuSrvcTransferApCoreNumber                    FinalDfltCpuSrvcTransferApCoreNumber
  #endif
#else
  #define FinalCpuSrvcTransferApCoreNumber                    FinalDfltAssertCpuSrvcTransferApCoreNumber
#endif

// Member: (PF_CPU_GET_STORED_NODE_NUMBER) GetStoredNodeNumber
#if (AGESA_ENTRY_INIT_RESET == TRUE) || (AGESA_ENTRY_INIT_EARLY == TRUE) || \
    (AGESA_ENTRY_INIT_ENV == TRUE) || (AGESA_ENTRY_INIT_MID == TRUE) || (AGESA_ENTRY_INIT_POST == TRUE) || \
    (AGESA_ENTRY_INIT_LATE == TRUE) || (AGESA_ENTRY_INIT_S3SAVE == TRUE) || (AGESA_ENTRY_INIT_RESUME == TRUE) || \
    (AGESA_ENTRY_INIT_LATE_RESTORE == TRUE) || (AGESA_ENTRY_INIT_GENERAL_SERVICES == TRUE)
  #ifdef CpuSrvcGetStoredNodeNumber
    #define FinalCpuSrvcGetStoredNodeNumber                     CpuSrvcGetStoredNodeNumber
    extern  F_CPU_GET_STORED_NODE_NUMBER                        FinalCpuSrvcGetStoredNodeNumber;
  #else
    #define FinalCpuSrvcGetStoredNodeNumber                     FinalDfltCpuSrvcGetStoredNodeNumber
  #endif
#else
  #define FinalCpuSrvcGetStoredNodeNumber                     FinalDfltAssertCpuSrvcGetStoredNodeNumber
#endif

// Member: (PF_CORE_ID_POSITION_IN_INITIAL_APIC_ID) CoreIdPositionInInitialApicId
#if (AGESA_ENTRY_INIT_RESET == TRUE) || (AGESA_ENTRY_INIT_EARLY == TRUE) || \
    (AGESA_ENTRY_INIT_POST == TRUE) || (AGESA_ENTRY_INIT_GENERAL_SERVICES == TRUE)
  #ifdef CpuSrvcCoreIdPositionInInitialApicId
    #define FinalCpuSrvcCoreIdPositionInInitialApicId           CpuSrvcCoreIdPositionInInitialApicId
    #ifndef EXTERN_FINALCPUSRVCCOREIDPOSITIONININITIALAPICID
    #define EXTERN_FINALCPUSRVCCOREIDPOSITIONININITIALAPICID
        extern  F_CORE_ID_POSITION_IN_INITIAL_APIC_ID               FinalCpuSrvcCoreIdPositionInInitialApicId;
    #endif
  #else
    #define FinalCpuSrvcCoreIdPositionInInitialApicId           FinalDfltCpuSrvcoreIdPositionInInitialApicId
  #endif
#else
  #define FinalCpuSrvcCoreIdPositionInInitialApicId           FinalDfltAssertCpuSrvcCoreIdPositionInInitialApicId
#endif

// Member: (PF_CPU_SAVE_FEATURES) SaveFeatures
#if (AGESA_ENTRY_INIT_POST == TRUE)
  #ifdef CpuSrvcSaveFeatures
    #define FinalCpuSrvcSaveFeatures                            CpuSrvcSaveFeatures
    extern  F_CPU_SAVE_FEATURES                                 FinalCpuSrvcSaveFeatures;
  #else
    #define FinalCpuSrvcSaveFeatures                            FinalDfltCpuSrvcSaveFeatures
  #endif
#else
  #define FinalCpuSrvcSaveFeatures                            FinalDfltAssertCpuSrvcSaveFeatures
#endif

// Member: (PF_CPU_WRITE_FEATURES) WriteFeatures
#if (AGESA_ENTRY_INIT_POST == TRUE)
  #ifdef CpuSrvcWriteFeatures
    #define FinalCpuSrvcWriteFeatures                           CpuSrvcWriteFeatures
    extern  F_CPU_WRITE_FEATURES                                FinalCpuSrvcWriteFeatures;
  #else
    #define FinalCpuSrvcWriteFeatures                           FinalDfltCpuSrvcWriteFeatures
  #endif
#else
  #define FinalCpuSrvcWriteFeatures                           FinalDfltAssertCpuSrvcWriteFeatures
#endif

// Member: (PF_CPU_SET_WARM_RESET_FLAG) SetWarmResetFlag
#if (AGESA_ENTRY_INIT_RESET == TRUE) || (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_POST == TRUE)
  #ifdef CpuSrvcSetWarmResetFlag
    #define FinalCpuSrvcSetWarmResetFlag                        CpuSrvcSetWarmResetFlag
    #ifndef EXTERN_FINALCPUSRVCSETWARMRESETFLAG
    #define EXTERN_FINALCPUSRVCSETWARMRESETFLAG
        extern  F_CPU_SET_WARM_RESET_FLAG                           FinalCpuSrvcSetWarmResetFlag;
    #endif
  #else
    #define FinalCpuSrvcSetWarmResetFlag                        FinalDfltCpuSrvcSetWarmResetFlag
  #endif
#else
  #define FinalCpuSrvcSetWarmResetFlag                        FinalDfltAssertCpuSrvcSetWarmResetFlag
#endif

// Member: (PF_CPU_GET_WARM_RESET_FLAG) GetWarmResetFlag
#if (AGESA_ENTRY_INIT_RESET == TRUE) || (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_POST == TRUE)
  #ifdef CpuSrvcGetWarmResetFlag
    #define FinalCpuSrvcGetWarmResetFlag                        CpuSrvcGetWarmResetFlag
    #ifndef EXTERN_FINALCPUSRVCGETWARMRESETFLAG
    #define EXTERN_FINALCPUSRVCGETWARMRESETFLAG
        extern  F_CPU_GET_WARM_RESET_FLAG                           FinalCpuSrvcGetWarmResetFlag;
    #endif
  #else
    #define FinalCpuSrvcGetWarmResetFlag                        FinalDfltCpuSrvcGetWarmResetFlag
  #endif
#else
  #define FinalCpuSrvcGetWarmResetFlag                        FinalDfltAssertCpuSrvcGetWarmResetFlag
#endif

// Member: (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) GetBrandString1
#if (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_LATE == TRUE)
  #ifdef CpuSrvcGetBrandString1
    #define FinalCpuSrvcGetBrandString1                         CpuSrvcGetBrandString1
    extern  F_CPU_GET_FAMILY_SPECIFIC_ARRAY                     FinalCpuSrvcGetBrandString1;
  #else
    #define FinalCpuSrvcGetBrandString1                         FinalDfltCpuSrvcGetBrandString1
  #endif
#else
  #define FinalCpuSrvcGetBrandString1                         FinalDfltAssertCpuSrvcGetBrandString1
#endif

// Member: (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) GetBrandString2
#if (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_LATE == TRUE)
  #ifdef CpuSrvcGetBrandString2
    #define FinalCpuSrvcGetBrandString2                         CpuSrvcGetBrandString2
    extern  F_CPU_GET_FAMILY_SPECIFIC_ARRAY                     FinalCpuSrvcGetBrandString2;
  #else
    #define FinalCpuSrvcGetBrandString2                         FinalDfltCpuSrvcGetBrandString2
  #endif
#else
  #define FinalCpuSrvcGetBrandString2                         FinalDfltAssertCpuSrvcGetBrandString2
#endif

// Member: (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) GetMicroCodePatchesStruct
#if (AGESA_ENTRY_INIT_EARLY == TRUE)
  #ifdef CpuSrvcGetMicroCodePatchesStruct
    #define FinalCpuSrvcGetMicroCodePatchesStruct               CpuSrvcGetMicroCodePatchesStruct
    #ifndef EXTERN_FINALCPUSRVCGETMICROCODEPATCHESSTRUCT
    #define EXTERN_FINALCPUSRVCGETMICROCODEPATCHESSTRUCT
        extern  F_CPU_GET_FAMILY_SPECIFIC_ARRAY                     FinalCpuSrvcGetMicroCodePatchesStruct;
    #endif
  #else
    #define FinalCpuSrvcGetMicroCodePatchesStruct               FinalDfltCpuSrvcGetMicroCodePatchesStruct
  #endif
#else
  #define FinalCpuSrvcGetMicroCodePatchesStruct               FinalDfltAssertCpuSrvcGetMicroCodePatchesStruct
#endif

// Member: (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) GetMicrocodeEquivalenceTable
#if (AGESA_ENTRY_INIT_EARLY == TRUE)
  #ifdef CpuSrvcGetMicrocodeEquivalenceTable
    #define FinalCpuSrvcGetMicrocodeEquivalenceTable            CpuSrvcGetMicrocodeEquivalenceTable
    #ifndef EXTERN_FINALCPUSRVCGETMICROCODEEQUIVALENCETABLE
    #define EXTERN_FINALCPUSRVCGETMICROCODEEQUIVALENCETABLE
        extern  F_CPU_GET_FAMILY_SPECIFIC_ARRAY                     FinalCpuSrvcGetMicrocodeEquivalenceTable;
    #endif
  #else
    #define FinalCpuSrvcGetMicrocodeEquivalenceTable            FinalDfltCpuSrvcGetMicrocodeEquivalenceTable
  #endif
#else
  #define FinalCpuSrvcGetMicrocodeEquivalenceTable            FinalDfltAssertCpuSrvcGetMicrocodeEquivalenceTable
#endif

// Member: (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) GetCacheInfo
#if (AGESA_ENTRY_INIT_RESET == TRUE) || (AGESA_ENTRY_INIT_EARLY == TRUE)
  #ifdef CpuSrvcGetCacheInfo
    #define FinalCpuSrvcGetCacheInfo                            CpuSrvcGetCacheInfo
    extern  F_CPU_GET_FAMILY_SPECIFIC_ARRAY                     FinalCpuSrvcGetCacheInfo;
  #else
    #define FinalCpuSrvcGetCacheInfo                            FinalDfltCpuSrvcGetCacheInfo
  #endif
#else
  #define FinalCpuSrvcGetCacheInfo                            FinalDfltAssertCpuSrvcGetCacheInfo
#endif

// Member: (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) GetSysPmTableStruct
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcGetSysPmTableStruct
    #define FinalCpuSrvcGetSysPmTableStruct                     CpuSrvcGetSysPmTableStruct
    extern  F_CPU_GET_FAMILY_SPECIFIC_ARRAY                     FinalCpuSrvcGetSysPmTableStruct;
  #else
    #define FinalCpuSrvcGetSysPmTableStruct                     FinalDfltCpuSrvcGetSysPmTableStruct
  #endif
#else
  #define FinalCpuSrvcGetSysPmTableStruct                     FinalDfltAssertCpuSrvcGetSysPmTableStruct
#endif

// Member: (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) GetWheaInitData
#if AGESA_ENTRY_INIT_LATE == TRUE
  #ifdef CpuSrvcGetWheaInitData
    #define FinalCpuSrvcGetWheaInitData                         CpuSrvcGetWheaInitData
    #ifndef EXTERN_FINALCPUSRVCGETWHEAINITDATA
    #define EXTERN_FINALCPUSRVCGETWHEAINITDATA
        extern  F_CPU_GET_FAMILY_SPECIFIC_ARRAY                     FinalCpuSrvcGetWheaInitData;
    #endif
  #else
    #define FinalCpuSrvcGetWheaInitData                         FinalDfltCpuSrvcGetWheaInitData
  #endif
#else
  #define FinalCpuSrvcGetWheaInitData                         FinalDfltAssertCpuSrvcGetWheaInitData
#endif

// Member: (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO) GetPlatformTypeSpecificInfo
#if (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_LATE == TRUE)
  #ifdef CpuSrvcGetPlatformTypeSpecificInfo
    #define FinalCpuSrvcGetPlatformTypeSpecificInfo             CpuSrvcGetPlatformTypeSpecificInfo
    extern  F_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO               FinalCpuSrvcGetPlatformTypeSpecificInfo;
  #else
    #define FinalCpuSrvcGetPlatformTypeSpecificInfo             FinalDfltCpuSrvcGetPlatformTypeSpecificInfo
  #endif
#else
  #define FinalCpuSrvcGetPlatformTypeSpecificInfo             FinalDfltAssertCpuSrvcGetPlatformTypeSpecificInfo
#endif

// Member: (PF_IS_NB_PSTATE_ENABLED) IsNbPstateEnabled
#if (AGESA_ENTRY_INIT_EARLY == TRUE) || (AGESA_ENTRY_INIT_POST == TRUE)
  #ifdef CpuSrvcIsNbPstateEnabled
    #define FinalCpuSrvcIsNbPstateEnabled                       CpuSrvcIsNbPstateEnabled
    extern  F_IS_NB_PSTATE_ENABLED                              FinalCpuSrvcIsNbPstateEnabled;
  #else
    #define FinalCpuSrvcIsNbPstateEnabled                       FinalDfltCpuSrvcIsNbPstateEnabled
  #endif
#else
  #define FinalCpuSrvcIsNbPstateEnabled                       FinalDfltAssertCpuSrvcIsNbPstateEnabled
#endif

// Member: (PF_NEXT_LINK_HAS_HTFPY_FEATS) NextLinkHasHtPhyFeats
#if BASE_FAMILY_HT_PCI == TRUE
  #ifdef CpuSrvcNextLinkHasHtPhyFeats
    #define FinalCpuSrvcNextLinkHasHtPhyFeats                   CpuSrvcNextLinkHasHtPhyFeats
    extern  F_NEXT_LINK_HAS_HTPHY_FEATS                         FinalCpuSrvcNextLinkHasHtPhyFeats;
  #else
    #define FinalCpuSrvcNextLinkHasHtPhyFeats                   FinalDfltCpuSrvcNextLinkHasHtPhyFeats
  #endif
#else
  #define FinalCpuSrvcNextLinkHasHtPhyFeats                   FinalDfltAssertCpuSrvcNextLinkHasHtPhyFeats
#endif

// Member: (PF_SET_HT_PHY_REGISTER) SetHtPhyRegister
#if BASE_FAMILY_HT_PCI == TRUE
  #ifdef CpuSrvcSetHtPhyRegister
    #define FinalCpuSrvcSetHtPhyRegister                        CpuSrvcSetHtPhyRegister
    extern  F_SET_HT_PHY_REGISTER                               FinalCpuSrvcSetHtPhyRegister;
  #else
    #define FinalCpuSrvcSetHtPhyRegister                        FinalDfltCpuSrvcSetHtPhyRegister
  #endif
#else
  #define FinalCpuSrvcSetHtPhyRegister                        FinalDfltAssertCpuSrvcSetHtPhyRegister
#endif

// Member: (PF_GET_NEXT_HT_LINK_FEATURES) GetNextHtLinkFeatures
#if BASE_FAMILY_PCI == TRUE
  #ifdef CpuSrvcGetNextHtLinkFeatures
    #define FinalCpuSrvcGetNextHtLinkFeatures                   CpuSrvcGetNextHtLinkFeatures
    extern  F_GET_NEXT_HT_LINK_FEATURES                         FinalCpuSrvcGetNextHtLinkFeatures;
  #else
    #define FinalCpuSrvcGetNextHtLinkFeatures                   FinalDfltCpuSrvcGetNextHtLinkFeatures
  #endif
#else
  #define FinalCpuSrvcGetNextHtLinkFeatures                   FinalDfltAssertCpuSrvcGetNextHtLinkFeatures
#endif

// Member: (REGISTER_TABLE **) RegisterTableList
#if USES_REGISTER_TABLES == TRUE // (AGESA_ENTRY_INIT_EARLY == TRUE)
  #ifdef CpuSrvcRegisterTableList
    #define FinalCpuSrvcRegisterTableList                       CpuSrvcRegisterTableList
  #else
    #define FinalCpuSrvcRegisterTableList                       FinalDfltCpuSrvcRegisterTableList
  #endif
#else
  #define FinalCpuSrvcRegisterTableList                       FinalDfltAssertCpuSrvcRegisterTableList
#endif

// Member: (TABLE_ENTRY_TYPE_DESCRIPTOR *) TableEntryTypeDescriptors
#if USES_REGISTER_TABLES == TRUE // (AGESA_ENTRY_INIT_EARLY == TRUE)
  #ifdef CpuSrvcTableEntryTypeDescriptors
    #define FinalCpuSrvcTableEntryTypeDescriptors               CpuSrvcTableEntryTypeDescriptors
  #else
    #define FinalCpuSrvcTableEntryTypeDescriptors               FinalDfltCpuSrvcTableEntryTypeDescriptors
  #endif
#else
  #define FinalCpuSrvcTableEntryTypeDescriptors               FinalDfltAssertCpuSrvcTableEntryTypeDescriptors
#endif

// Member: (PACKAGE_HTLINK_MAP) PackageLinkMap
#if MODEL_SPECIFIC_HT_PCI == TRUE
  #ifdef CpuSrvcPackageLinkMap
    #define FinalCpuSrvcPackageLinkMap                          CpuSrvcPackageLinkMap
  #else
    #define FinalCpuSrvcPackageLinkMap                          FinalDfltCpuSrvcPackageLinkMap
  #endif
#else
  #define FinalCpuSrvcPackageLinkMap                          FinalDfltAssertCpuSrvcPackageLinkMap
#endif

// Member: (COMPUTE_UNIT_MAP *) ComputeUnitMap
#ifdef CpuSrvcComputeUnitMap
  #define FinalCpuSrvcComputeUnitMap                            CpuSrvcComputeUnitMap
#else
  #define FinalCpuSrvcComputeUnitMap                            FinalDfltCpuSrvcComputeUnitMap
#endif

// Member: (FAMILY_CACHE_INIT_POLICY) InitCacheDisabled
#ifdef CpuSrvcInitCacheDisabled
  #define FinalCpuSrvcInitCacheDisabled                         CpuSrvcInitCacheDisabled
#else
  #define FinalCpuSrvcInitCacheDisabled                         FinalDfltCpuSrvcInitCacheDisabled
#endif

// Member: (PF_GET_EARLY_INIT_TABLE) GetEarlyInitBeforeApLaunchOnCoreTable
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
    #define FinalCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable                 CpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
    extern  F_GET_EARLY_INIT_TABLE                              FinalCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable;
  #else
    #define FinalCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable                 FinalDfltCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
  #endif
#else
  #define FinalCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable                   FinalDfltAssertCpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable
#endif

// Member: (PF_GET_EARLY_INIT_TABLE) GetEarlyInitAfterApLaunchOnCoreTable
#if AGESA_ENTRY_INIT_EARLY == TRUE
  #ifdef CpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
    #define FinalCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable                 CpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
    extern  F_GET_EARLY_INIT_TABLE                              FinalCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable;
  #else
    #define FinalCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable                 FinalDfltCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
  #endif
#else
  #define FinalCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable                   FinalDfltAssertCpuSrvcGetEarlyInitAfterApLaunchOnCoreTable
#endif

// Member: (BOOLEAN) PatchLoaderIsSharedByCU
#if (AGESA_ENTRY_INIT_EARLY == TRUE)
  #ifdef CpuSrvcPatchLoaderIsSharedByCU
    #define FinalCpuSrvcPatchLoaderIsSharedByCU                 CpuSrvcPatchLoaderIsSharedByCU
  #else
    #define FinalCpuSrvcPatchLoaderIsSharedByCU                 FinalDfltCpuSrvcPatchLoaderIsSharedByCU
  #endif
#else
  #define FinalCpuSrvcPatchLoaderIsSharedByCU                 FinalDfltAssertCpuSrvcPatchLoaderIsSharedByCU
#endif

//
// NOTE: All CPU family specific service members should be all defined now.
//

//
// Define CPU specific services installation macro
//
#ifndef _INSTALL_CPU_SPECIFIC_SERVICES_TABLE_NAME_
  #define _INSTALL_CPU_SPECIFIC_SERVICES_TABLE_NAME_

  #define INSTALL_CPU_SPECIFIC_SERVICES_TABLE_NAME(MacroPrefix, TableName) \
  CONST CPU_SPECIFIC_SERVICES ROMDATA TableName =           \
  {                                                         \
    MacroPrefix##CpuSrvcRevision,                           \
    MacroPrefix##CpuSrvcDisablePstate,                      \
    MacroPrefix##CpuSrvcTransitionPstate,                   \
    MacroPrefix##CpuSrvcGetProcIddMax,                      \
    MacroPrefix##CpuSrvcGetTscRate,                         \
    MacroPrefix##CpuSrvcGetCurrentNbFrequency,              \
    MacroPrefix##CpuSrvcGetMinMaxNbFrequency,               \
    MacroPrefix##CpuSrvcGetNbPstateInfo,                    \
    MacroPrefix##CpuSrvcIsNbCofInitNeeded,                  \
    MacroPrefix##CpuSrvcGetNbIddMax,                        \
    MacroPrefix##CpuSrvcLaunchApCore,                       \
    MacroPrefix##CpuSrvcGetNumberOfPhysicalCores,           \
    MacroPrefix##CpuSrvcGetApMailboxFromHardware,           \
    MacroPrefix##CpuSrvcSetApCoreNumber,                    \
    MacroPrefix##CpuSrvcGetApCoreNumber,                    \
    MacroPrefix##CpuSrvcTransferApCoreNumber,               \
    MacroPrefix##CpuSrvcGetStoredNodeNumber,                \
    MacroPrefix##CpuSrvcCoreIdPositionInInitialApicId,      \
    MacroPrefix##CpuSrvcSaveFeatures,                       \
    MacroPrefix##CpuSrvcWriteFeatures,                      \
    MacroPrefix##CpuSrvcSetWarmResetFlag,                   \
    MacroPrefix##CpuSrvcGetWarmResetFlag,                   \
    MacroPrefix##CpuSrvcGetBrandString1,                    \
    MacroPrefix##CpuSrvcGetBrandString2,                    \
    MacroPrefix##CpuSrvcGetMicroCodePatchesStruct,          \
    MacroPrefix##CpuSrvcGetMicrocodeEquivalenceTable,       \
    MacroPrefix##CpuSrvcGetCacheInfo,                       \
    MacroPrefix##CpuSrvcGetSysPmTableStruct,                \
    MacroPrefix##CpuSrvcGetWheaInitData,                    \
    MacroPrefix##CpuSrvcGetPlatformTypeSpecificInfo,        \
    MacroPrefix##CpuSrvcIsNbPstateEnabled,                  \
    MacroPrefix##CpuSrvcNextLinkHasHtPhyFeats,              \
    MacroPrefix##CpuSrvcSetHtPhyRegister,                   \
    MacroPrefix##CpuSrvcGetNextHtLinkFeatures,              \
    MacroPrefix##CpuSrvcRegisterTableList,                  \
    MacroPrefix##CpuSrvcTableEntryTypeDescriptors,          \
    MacroPrefix##CpuSrvcPackageLinkMap,                     \
    MacroPrefix##CpuSrvcComputeUnitMap,                     \
    MacroPrefix##CpuSrvcInitCacheDisabled,                  \
    MacroPrefix##CpuSrvcGetEarlyInitBeforeApLaunchOnCoreTable, \
    MacroPrefix##CpuSrvcGetEarlyInitAfterApLaunchOnCoreTable, \
    MacroPrefix##CpuSrvcPatchLoaderIsSharedByCU             \
  }
#endif // _INSTALL_CPU_SPECIFIC_SERVICES_TABLE_NAME_

#ifndef _INSTALL_CPU_SPECIFIC_SERVICES_TABLE_
  #define _INSTALL_CPU_SPECIFIC_SERVICES_TABLE_

  #define INSTALL_CPU_SPECIFIC_SERVICES_TABLE(TableName) \
            INSTALL_CPU_SPECIFIC_SERVICES_TABLE_NAME (Final, TableName)
#endif // _INSTALL_CPU_SPECIFIC_SERVICES_TABLE_

//
// Message out the final table definitions
//