/** @file Copyright (c) 2017 - 2021, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @par Glossary: - Cm or CM - Configuration Manager - Obj or OBJ - Object **/ #ifndef CONFIGURATION_MANAGER_H__ #define CONFIGURATION_MANAGER_H__ /** C array containing the compiled AML template. This symbol is defined in the auto generated C file containing the AML bytecode array. */ extern CHAR8 dsdt_aml_code[]; extern CHAR8 ssdtpci_aml_code[]; /** The configuration manager version. */ #define CONFIGURATION_MANAGER_REVISION CREATE_REVISION (1, 0) /** The OEM ID */ #define CFG_MGR_OEM_ID { 'A', 'R', 'M', 'L', 'T', 'D' } /** A helper macro for populating the GIC CPU information */ #define GICC_ENTRY( \ CPUInterfaceNumber, \ Mpidr, \ PmuIrq, \ VGicIrq, \ EnergyEfficiency \ ) { \ CPUInterfaceNumber, /* UINT32 CPUInterfaceNumber */ \ CPUInterfaceNumber, /* UINT32 AcpiProcessorUid */ \ EFI_ACPI_6_2_GIC_ENABLED, /* UINT32 Flags */ \ 0, /* UINT32 ParkingProtocolVersion */ \ PmuIrq, /* UINT32 PerformanceInterruptGsiv */ \ 0, /* UINT64 ParkedAddress */ \ FixedPcdGet64 ( \ PcdGicInterruptInterfaceBase \ ), /* UINT64 PhysicalBaseAddress */ \ 0, /* UINT64 GICV */ \ 0, /* UINT64 GICH */ \ VGicIrq, /* UINT32 VGICMaintenanceInterrupt */ \ 0, /* UINT64 GICRBaseAddress */ \ Mpidr, /* UINT64 MPIDR */ \ EnergyEfficiency /* UINT8 ProcessorPowerEfficiencyClass*/ \ } /** A function that prepares Configuration Manager Objects for returning. @param [in] This Pointer to the Configuration Manager Protocol. @param [in] CmObjectId The Configuration Manager Object ID. @param [in] Token A token for identifying the object. @param [out] CmObject Pointer to the Configuration Manager Object descriptor describing the requested Object. @retval EFI_SUCCESS Success. @retval EFI_INVALID_PARAMETER A parameter is invalid. @retval EFI_NOT_FOUND The required object information is not found. **/ typedef EFI_STATUS (*CM_OBJECT_HANDLER_PROC) ( IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, IN CONST CM_OBJECT_ID CmObjectId, IN CONST CM_OBJECT_TOKEN Token, IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject ); /** A helper macro for mapping a reference token. */ #define REFERENCE_TOKEN(Field) \ (CM_OBJECT_TOKEN)((UINT8*)&VExpressPlatRepositoryInfo + \ OFFSET_OF (EDKII_PLATFORM_REPOSITORY_INFO, Field)) /** Macro to return MPIDR for Multi Threaded Cores */ #define GET_MPID_MT(Cluster, Core, Thread) \ (((Cluster) << 16) | ((Core) << 8) | (Thread)) /** The number of CPUs */ #define PLAT_CPU_COUNT 8 /** The number of ACPI tables to install */ #define PLAT_ACPI_TABLE_COUNT 9 /** The number of platform generic timer blocks */ #define PLAT_GTBLOCK_COUNT 1 /** The number of timer frames per generic timer block */ #define PLAT_GTFRAME_COUNT 2 /** A structure describing the platform configuration manager repository information */ typedef struct PlatformRepositoryInfo { /// Configuration Manager Information CM_STD_OBJ_CONFIGURATION_MANAGER_INFO CmInfo; /// List of ACPI tables CM_STD_OBJ_ACPI_TABLE_INFO CmAcpiTableList[PLAT_ACPI_TABLE_COUNT]; /// Boot architecture information CM_ARM_BOOT_ARCH_INFO BootArchInfo; #ifdef HEADLESS_PLATFORM /// Fixed feature flag information CM_ARM_FIXED_FEATURE_FLAGS FixedFeatureFlags; #endif /// Power management profile information CM_ARM_POWER_MANAGEMENT_PROFILE_INFO PmProfileInfo; /// GIC CPU interface information CM_ARM_GICC_INFO GicCInfo[PLAT_CPU_COUNT]; /// GIC distributor information CM_ARM_GICD_INFO GicDInfo; /// GIC Redistributor information CM_ARM_GIC_REDIST_INFO GicRedistInfo; /// Generic timer information CM_ARM_GENERIC_TIMER_INFO GenericTimerInfo; /// Generic timer block information CM_ARM_GTBLOCK_INFO GTBlockInfo[PLAT_GTBLOCK_COUNT]; /// Generic timer frame information CM_ARM_GTBLOCK_TIMER_FRAME_INFO GTBlock0TimerInfo[PLAT_GTFRAME_COUNT]; /// Watchdog information CM_ARM_GENERIC_WATCHDOG_INFO Watchdog; /** Serial port information for the serial port console redirection port */ CM_ARM_SERIAL_PORT_INFO SpcrSerialPort; /// Serial port information for the DBG2 UART port CM_ARM_SERIAL_PORT_INFO DbgSerialPort; /// GIC ITS information CM_ARM_GIC_ITS_INFO GicItsInfo; // FVP RevC components /// SMMUv3 node CM_ARM_SMMUV3_NODE SmmuV3Info; /// ITS Group node CM_ARM_ITS_GROUP_NODE ItsGroupInfo; /// ITS Identifier array CM_ARM_ITS_IDENTIFIER ItsIdentifierArray[1]; /// PCI Root complex node CM_ARM_ROOT_COMPLEX_NODE RootComplexInfo; /// Array of DeviceID mapping CM_ARM_ID_MAPPING DeviceIdMapping[2]; /// PCI configuration space information CM_ARM_PCI_CONFIG_SPACE_INFO PciConfigInfo; /// System ID UINT32 SysId; } EDKII_PLATFORM_REPOSITORY_INFO; #endif // CONFIGURATION_MANAGER_H__