123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834 |
- /** @file
- Configuration Manager Dxe
- Copyright 2020 NXP
- Copyright 2020 Puresoftware Ltd
- SPDX-License-Identifier: BSD-2-Clause-Patent
- @par Glossary:
- - Cm or CM - Configuration Manager
- - Obj or OBJ - Object
- **/
- #include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h>
- #include <IndustryStandard/SerialPortConsoleRedirectionTable.h>
- #include <Library/ArmLib.h>
- #include <Library/DebugLib.h>
- #include <Library/IoLib.h>
- #include <Library/PcdLib.h>
- #include <Library/UefiBootServicesTableLib.h>
- #include <Protocol/AcpiTable.h>
- #include <Protocol/ConfigurationManagerProtocol.h>
- /** The platform specific headers
- */
- #include "ConfigurationManager.h"
- #include <Library/SocLib.h>
- /** The platform configuration repository information.
- */
- STATIC
- FSL_PLATFORM_REPOSITORY_INFO FslPlatformRepositoryInfo = {
- /// Configuration Manager information
- { CONFIGURATION_MANAGER_REVISION, CFG_MGR_OEM_ID },
- // ACPI Table List
- {
- // FADT Table
- {
- EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
- EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_REVISION,
- CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdFadt),
- NULL,
- CFG_MGR_TABLE_ID
- },
- // GTDT Table
- {
- EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,
- EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION,
- CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdGtdt),
- NULL,
- CFG_MGR_TABLE_ID
- },
- // MADT Table
- {
- EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
- EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
- CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdMadt),
- NULL,
- CFG_MGR_TABLE_ID
- },
- // PCI MCFG Table
- {
- EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,
- EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_SPACE_ACCESS_TABLE_REVISION,
- CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdMcfg),
- NULL,
- CFG_MGR_TABLE_ID
- },
- // SPCR Table
- {
- EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,
- EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION,
- CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdSpcr),
- NULL,
- CFG_MGR_TABLE_ID
- }
- },
- // Boot architecture information
- { EFI_ACPI_6_2_ARM_PSCI_COMPLIANT }, // BootArchFlags
- // Power management profile information
- { EFI_ACPI_6_2_PM_PROFILE_ENTERPRISE_SERVER }, // PowerManagement Profile
- // Generic Timer Info
- {
- // The physical base address for the counter control frame
- TIMER_BASE_ADDRESS,
- // The physical base address for the counter read frame
- TIMER_READ_BASE_ADDRESS,
- // The secure PL1 timer interrupt
- TIMER_SEC_IT,
- // The secure PL1 timer flags
- GTDT_GTIMER_FLAGS,
- // The non-secure PL1 timer interrupt
- TIMER_NON_SEC_IT,
- // The non-secure PL1 timer flags
- GTDT_GTIMER_FLAGS,
- // The virtual timer interrupt
- TIMER_VIRT_IT,
- // The virtual timer flags
- GTDT_GTIMER_FLAGS,
- // The non-secure PL2 timer interrupt
- TIMER_HYP_IT,
- // The non-secure PL2 timer flags
- GTDT_GTIMER_FLAGS
- },
- // Generic Timer Block Information
- PLAT_TIMER_BLOCK_INFO,
- // GTDT Frames
- PLAT_TIMER_FRAME_INFO,
- // Watchdog info
- PLAT_WATCHDOG_INFO,
- // GIC CPU Interface information
- PLAT_GIC_CPU_INTERFACE,
- // GIC Distributor Info
- PLAT_GIC_DISTRIBUTOR_INFO,
- // GIC Redistributor
- PLAT_GIC_REDISTRIBUTOR_INFO,
- // GIC ITS
- PLAT_GIC_ITS_INFO,
- // MCFG Info
- PLAT_MCFG_INFO,
- // SPCR Info
- PLAT_SPCR_INFO,
- 2.0 // fsl board revision
- };
- /** Initialize the platform configuration repository.
- @param [in] This Pointer to the Configuration Manager Protocol.
- @retval EFI_SUCCESS Success
- **/
- STATIC
- EFI_STATUS
- EFIAPI
- InitializePlatformRepository (
- IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This
- )
- {
- FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo;
- UINT32 Svr;
- PlatformRepo = This->PlatRepoInfo;
- Svr = SocGetSvr ();
- if (SVR_SOC_VER(Svr) == SVR_LX2160A) {
- PlatformRepo->FslBoardRevision = SVR_MAJOR(Svr);
- DEBUG ((DEBUG_INFO, "Fsl : SoC LX2160A Rev = 0x%x\n", PlatformRepo->FslBoardRevision));
- } else {
- DEBUG ((DEBUG_INFO, "Fsl : SoC Unknown Rev = 0x%x\n", PlatformRepo->FslBoardRevision));
- }
- return EFI_SUCCESS;
- }
- /** Return PCI Configuration Info.
- @param [in] This Pointer to the Configuration Manager Protocol.
- @param [in] CmObjectId The Object ID of the CM object requested
- @param [in] Token A unique token for identifying the requested
- CM_ARM_PCI_INFO object.
- @param [in, 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.
- **/
- EFI_STATUS
- EFIAPI
- GetPciConfigInfo (
- 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
- )
- {
- FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo;
- UINT32 TotalObjCount;
- UINT32 ObjIndex;
- if ((This == NULL) || (CmObject == NULL)) {
- ASSERT (This != NULL);
- ASSERT (CmObject != NULL);
- return EFI_INVALID_PARAMETER;
- }
- PlatformRepo = This->PlatRepoInfo;
- TotalObjCount = ARRAY_SIZE (PlatformRepo->PciConfigInfo);
- for (ObjIndex = 0; ObjIndex < TotalObjCount; ObjIndex++) {
- if (Token == (CM_OBJECT_TOKEN)&PlatformRepo->PciConfigInfo[ObjIndex])
- {
- CmObject->ObjectId = CmObjectId;
- CmObject->Size = sizeof (PlatformRepo->PciConfigInfo[ObjIndex]);
- CmObject->Data = (VOID*)&PlatformRepo->PciConfigInfo[ObjIndex];
- CmObject->Count = 1;
- return EFI_SUCCESS;
- }
- }
- return EFI_NOT_FOUND;
- }
- /** Return GIC CPU Interface Info.
- @param [in] This Pointer to the Configuration Manager Protocol.
- @param [in] CmObjectId The Object ID of the CM object requested
- @param [in] Token A unique token for identifying the requested
- CM_ARM_GICC_INFO object.
- @param [in, 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.
- **/
- EFI_STATUS
- EFIAPI
- GetGicCInfo (
- 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
- )
- {
- FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo;
- if ((This == NULL) || (CmObject == NULL)) {
- ASSERT (This != NULL);
- ASSERT (CmObject != NULL);
- return EFI_INVALID_PARAMETER;
- }
- PlatformRepo = This->PlatRepoInfo;
- if (Token != (CM_OBJECT_TOKEN)&PlatformRepo->GicCInfo) {
- return EFI_NOT_FOUND;
- }
- CmObject->ObjectId = CmObjectId;
- CmObject->Size = sizeof (PlatformRepo->GicCInfo);
- CmObject->Data = (VOID*)&PlatformRepo->GicCInfo;
- CmObject->Count = ARRAY_SIZE (PlatformRepo->GicCInfo);
- return EFI_SUCCESS;
- }
- /** Return a GT Block timer frame info list.
- @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 [in, 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.
- **/
- EFI_STATUS
- EFIAPI
- GetGTBlockTimerFrameInfo (
- 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
- )
- {
- FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo;
- if ((This == NULL) || (CmObject == NULL)) {
- ASSERT (This != NULL);
- ASSERT (CmObject != NULL);
- return EFI_INVALID_PARAMETER;
- }
- PlatformRepo = This->PlatRepoInfo;
- if (Token != (CM_OBJECT_TOKEN)&PlatformRepo->GTBlock0TimerInfo) {
- return EFI_NOT_FOUND;
- }
- CmObject->ObjectId = CmObjectId;
- CmObject->Size = sizeof (PlatformRepo->GTBlock0TimerInfo);
- CmObject->Data = (VOID*)&PlatformRepo->GTBlock0TimerInfo;
- CmObject->Count = ARRAY_SIZE (PlatformRepo->GTBlock0TimerInfo);
- return EFI_SUCCESS;
- }
- /** A helper function for returning the Configuration Manager Objects.
- @param [in] CmObjectId The Configuration Manager Object ID.
- @param [in] Object Pointer to the Object(s).
- @param [in] ObjectSize Total size of the Object(s).
- @param [in] ObjectCount Number of Objects.
- @param [in, out] CmObjectDesc Pointer to the Configuration Manager Object
- descriptor describing the requested Object.
- @retval EFI_SUCCESS Success.
- **/
- STATIC
- EFI_STATUS
- EFIAPI
- HandleCmObject (
- IN CONST CM_OBJECT_ID CmObjectId,
- IN VOID * Object,
- IN CONST UINTN ObjectSize,
- IN CONST UINTN ObjectCount,
- IN OUT CM_OBJ_DESCRIPTOR * CONST CmObjectDesc
- )
- {
- CmObjectDesc->ObjectId = CmObjectId;
- CmObjectDesc->Size = ObjectSize;
- CmObjectDesc->Data = (VOID*)Object;
- CmObjectDesc->Count = ObjectCount;
- DEBUG ((
- DEBUG_INFO,
- "INFO: CmObjectId = %x, Ptr = 0x%p, Size = %d, Count = %d\n",
- CmObjectId,
- CmObjectDesc->Data,
- CmObjectDesc->Size,
- CmObjectDesc->Count
- ));
- return EFI_SUCCESS;
- }
- /** A helper function for returning the Configuration Manager Objects that
- match the token.
- @param [in] This Pointer to the Configuration Manager Protocol.
- @param [in] CmObjectId The Configuration Manager Object ID.
- @param [in] Object Pointer to the Object(s).
- @param [in] ObjectSize Total size of the Object(s).
- @param [in] ObjectCount Number of Objects.
- @param [in] Token A token identifying the object.
- @param [in] HandlerProc A handler function to search the object
- referenced by the token.
- @param [in, out] CmObjectDesc 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.
- **/
- STATIC
- EFI_STATUS
- EFIAPI
- HandleCmObjectRefByToken (
- IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This,
- IN CONST CM_OBJECT_ID CmObjectId,
- IN VOID * Object,
- IN CONST UINTN ObjectSize,
- IN CONST UINTN ObjectCount,
- IN CONST CM_OBJECT_TOKEN Token,
- IN CONST CM_OBJECT_HANDLER_PROC HandlerProc,
- IN OUT CM_OBJ_DESCRIPTOR * CONST CmObjectDesc
- )
- {
- EFI_STATUS Status;
- CmObjectDesc->ObjectId = CmObjectId;
- if (Token == CM_NULL_TOKEN) {
- CmObjectDesc->Size = ObjectSize;
- CmObjectDesc->Data = (VOID*)Object;
- CmObjectDesc->Count = ObjectCount;
- Status = EFI_SUCCESS;
- } else {
- Status = HandlerProc (This, CmObjectId, Token, CmObjectDesc);
- }
- DEBUG ((
- DEBUG_INFO,
- "INFO: Token = 0x%p, CmObjectId = %x, Ptr = 0x%p, Size = %d, Count = %d\n",
- (VOID*)Token,
- CmObjectId,
- CmObjectDesc->Data,
- CmObjectDesc->Size,
- CmObjectDesc->Count
- ));
- return Status;
- }
- /** Return a standard namespace object.
- @param [in] This Pointer to the Configuration Manager Protocol.
- @param [in] CmObjectId The Configuration Manager Object ID.
- @param [in] Token An optional token identifying the object. If
- unused this must be CM_NULL_TOKEN.
- @param [in, 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.
- **/
- EFI_STATUS
- EFIAPI
- GetStandardNameSpaceObject (
- IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This,
- IN CONST CM_OBJECT_ID CmObjectId,
- IN CONST CM_OBJECT_TOKEN Token OPTIONAL,
- IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject
- )
- {
- EFI_STATUS Status;
- FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo;
- Status = EFI_SUCCESS;
- if ((This == NULL) || (CmObject == NULL)) {
- ASSERT (This != NULL);
- ASSERT (CmObject != NULL);
- return EFI_INVALID_PARAMETER;
- }
- PlatformRepo = This->PlatRepoInfo;
- switch (GET_CM_OBJECT_ID (CmObjectId)) {
- case EStdObjCfgMgrInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->CmInfo,
- sizeof (PlatformRepo->CmInfo),
- 1,
- CmObject
- );
- break;
- case EStdObjAcpiTableList:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->CmAcpiTableList,
- sizeof (PlatformRepo->CmAcpiTableList),
- ARRAY_SIZE (PlatformRepo->CmAcpiTableList),
- CmObject
- );
- break;
- default: {
- Status = EFI_NOT_FOUND;
- DEBUG ((
- DEBUG_ERROR,
- "ERROR: Object 0x%x. Status = %r\n",
- CmObjectId,
- Status
- ));
- break;
- }
- }
- return Status;
- }
- /** Return an ARM namespace object.
- @param [in] This Pointer to the Configuration Manager Protocol.
- @param [in] CmObjectId The Configuration Manager Object ID.
- @param [in] Token An optional token identifying the object. If
- unused this must be CM_NULL_TOKEN.
- @param [in, 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.
- **/
- EFI_STATUS
- EFIAPI
- GetArmNameSpaceObject (
- IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This,
- IN CONST CM_OBJECT_ID CmObjectId,
- IN CONST CM_OBJECT_TOKEN Token OPTIONAL,
- IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject
- )
- {
- EFI_STATUS Status;
- FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo;
- Status = EFI_SUCCESS;
- if ((This == NULL) || (CmObject == NULL)) {
- ASSERT (This != NULL);
- ASSERT (CmObject != NULL);
- return EFI_INVALID_PARAMETER;
- }
- PlatformRepo = This->PlatRepoInfo;
- switch (GET_CM_OBJECT_ID (CmObjectId)) {
- case EArmObjBootArchInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->BootArchInfo,
- sizeof (PlatformRepo->BootArchInfo),
- 1,
- CmObject
- );
- break;
- case EArmObjPowerManagementProfileInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->PmProfileInfo,
- sizeof (PlatformRepo->PmProfileInfo),
- 1,
- CmObject
- );
- break;
- case EArmObjGenericTimerInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->GenericTimerInfo,
- sizeof (PlatformRepo->GenericTimerInfo),
- 1,
- CmObject
- );
- break;
- case EArmObjPlatformGenericWatchdogInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->Watchdog,
- sizeof (PlatformRepo->Watchdog),
- PLAT_WATCHDOG_COUNT,
- CmObject
- );
- break;
- case EArmObjPlatformGTBlockInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->GTBlockInfo,
- sizeof (PlatformRepo->GTBlockInfo),
- ARRAY_SIZE (PlatformRepo->GTBlockInfo),
- CmObject
- );
- break;
- case EArmObjGTBlockTimerFrameInfo:
- Status = HandleCmObjectRefByToken (
- This,
- CmObjectId,
- PlatformRepo->GTBlock0TimerInfo,
- sizeof (PlatformRepo->GTBlock0TimerInfo),
- ARRAY_SIZE (PlatformRepo->GTBlock0TimerInfo),
- Token,
- GetGTBlockTimerFrameInfo,
- CmObject
- );
- break;
- case EArmObjGicCInfo:
- Status = HandleCmObjectRefByToken (
- This,
- CmObjectId,
- PlatformRepo->GicCInfo,
- sizeof (PlatformRepo->GicCInfo),
- ARRAY_SIZE (PlatformRepo->GicCInfo),
- Token,
- GetGicCInfo,
- CmObject
- );
- break;
- case EArmObjGicDInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->GicDInfo,
- sizeof (PlatformRepo->GicDInfo),
- 1,
- CmObject
- );
- break;
- case EArmObjGicRedistributorInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->GicRedistInfo,
- sizeof (PlatformRepo->GicRedistInfo),
- PLAT_GIC_REDISTRIBUTOR_COUNT,
- CmObject
- );
- break;
- case EArmObjGicItsInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->GicItsInfo,
- sizeof (PlatformRepo->GicItsInfo),
- PLAT_GIC_ITS_COUNT,
- CmObject
- );
- break;
- case EArmObjSerialConsolePortInfo:
- Status = HandleCmObject (
- CmObjectId,
- &PlatformRepo->SpcrSerialPort,
- sizeof (PlatformRepo->SpcrSerialPort),
- 1,
- CmObject
- );
- break;
- case EArmObjPciConfigSpaceInfo:
- Status = HandleCmObjectRefByToken (
- This,
- CmObjectId,
- PlatformRepo->PciConfigInfo,
- sizeof (PlatformRepo->PciConfigInfo),
- ARRAY_SIZE (PlatformRepo->PciConfigInfo),
- Token,
- GetPciConfigInfo,
- CmObject
- );
- break;
- default: {
- Status = EFI_NOT_FOUND;
- DEBUG ((
- DEBUG_INFO,
- "INFO: Object 0x%x. Status = %r\n",
- CmObjectId,
- Status
- ));
- break;
- }
- }//switch
- return Status;
- }
- /** Return an OEM namespace object.
- @param [in] This Pointer to the Configuration Manager Protocol.
- @param [in] CmObjectId The Configuration Manager Object ID.
- @param [in] Token An optional token identifying the object. If
- unused this must be CM_NULL_TOKEN.
- @param [in, 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.
- **/
- EFI_STATUS
- EFIAPI
- GetOemNameSpaceObject (
- IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This,
- IN CONST CM_OBJECT_ID CmObjectId,
- IN CONST CM_OBJECT_TOKEN Token OPTIONAL,
- IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject
- )
- {
- EFI_STATUS Status;
- Status = EFI_SUCCESS;
- if ((This == NULL) || (CmObject == NULL)) {
- ASSERT (This != NULL);
- ASSERT (CmObject != NULL);
- return EFI_INVALID_PARAMETER;
- }
- switch (GET_CM_OBJECT_ID (CmObjectId)) {
- default: {
- Status = EFI_NOT_FOUND;
- DEBUG ((
- DEBUG_ERROR,
- "ERROR: Object 0x%x. Status = %r\n",
- CmObjectId,
- Status
- ));
- break;
- }
- }
- return Status;
- }
- /** The GetObject function defines the interface implemented by the
- Configuration Manager Protocol for returning the Configuration
- Manager Objects.
- @param [in] This Pointer to the Configuration Manager Protocol.
- @param [in] CmObjectId The Configuration Manager Object ID.
- @param [in] Token An optional token identifying the object. If
- unused this must be CM_NULL_TOKEN.
- @param [in, 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.
- **/
- EFI_STATUS
- EFIAPI
- FslPlatformGetObject (
- IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This,
- IN CONST CM_OBJECT_ID CmObjectId,
- IN CONST CM_OBJECT_TOKEN Token OPTIONAL,
- IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject
- )
- {
- EFI_STATUS Status;
- if ((This == NULL) || (CmObject == NULL)) {
- ASSERT (This != NULL);
- ASSERT (CmObject != NULL);
- return EFI_INVALID_PARAMETER;
- }
- switch (GET_CM_NAMESPACE_ID (CmObjectId)) {
- case EObjNameSpaceStandard:
- Status = GetStandardNameSpaceObject (This, CmObjectId, Token, CmObject);
- break;
- case EObjNameSpaceArm:
- Status = GetArmNameSpaceObject (This, CmObjectId, Token, CmObject);
- break;
- case EObjNameSpaceOem:
- Status = GetOemNameSpaceObject (This, CmObjectId, Token, CmObject);
- break;
- default: {
- Status = EFI_INVALID_PARAMETER;
- DEBUG ((
- DEBUG_ERROR,
- "ERROR: Unknown Namespace Object = 0x%x. Status = %r\n",
- CmObjectId,
- Status
- ));
- break;
- }
- }
- return Status;
- }
- /** The SetObject function defines the interface implemented by the
- Configuration Manager Protocol for updating the Configuration
- Manager Objects.
- @param [in] This Pointer to the Configuration Manager Protocol.
- @param [in] CmObjectId The Configuration Manager Object ID.
- @param [in] Token An optional token identifying the object. If
- unused this must be CM_NULL_TOKEN.
- @param [in] CmObject Pointer to the Configuration Manager Object
- descriptor describing the Object.
- @retval EFI_UNSUPPORTED This operation is not supported.
- **/
- EFI_STATUS
- EFIAPI
- FslPlatformSetObject (
- IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This,
- IN CONST CM_OBJECT_ID CmObjectId,
- IN CONST CM_OBJECT_TOKEN Token OPTIONAL,
- IN CM_OBJ_DESCRIPTOR * CONST CmObject
- )
- {
- return EFI_UNSUPPORTED;
- }
- /** A structure describing the configuration manager protocol interface.
- */
- STATIC
- CONST
- EDKII_CONFIGURATION_MANAGER_PROTOCOL FslConfigManagerProtocol = {
- CREATE_REVISION (1, 0),
- FslPlatformGetObject,
- FslPlatformSetObject,
- &FslPlatformRepositoryInfo
- };
- /**
- Entrypoint of Configuration Manager Dxe.
- @param ImageHandle
- @param SystemTable
- @return EFI_SUCCESS
- @return EFI_LOAD_ERROR
- @return EFI_OUT_OF_RESOURCES
- **/
- EFI_STATUS
- EFIAPI
- ConfigurationManagerDxeInitialize (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE * SystemTable
- )
- {
- EFI_STATUS Status;
- Status = gBS->InstallProtocolInterface (
- &ImageHandle,
- &gEdkiiConfigurationManagerProtocolGuid,
- EFI_NATIVE_INTERFACE,
- (VOID*)&FslConfigManagerProtocol
- );
- if (EFI_ERROR (Status)) {
- DEBUG ((
- DEBUG_ERROR,
- "ERROR: Failed to get Install Configuration Manager Protocol." \
- " Status = %r\n",
- Status
- ));
- goto error_handler;
- }
- Status = InitializePlatformRepository (
- &FslConfigManagerProtocol
- );
- if (EFI_ERROR (Status)) {
- DEBUG ((
- DEBUG_ERROR,
- "ERROR: Failed to initialize the Platform Configuration Repository." \
- " Status = %r\n",
- Status
- ));
- }
- error_handler:
- return Status;
- }
|