/** @file * * Copyright (c) 2018, Hisilicon Limited. All rights reserved. * Copyright (c) 2018, Linaro Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent * **/ #include #include #include #include #include #include #include #include #include #include "Apei.h" #include #include "Bert.h" #include "Einj.h" #include "Erst.h" #include "Hest.h" EFI_ACPI_TABLE_PROTOCOL *mAcpiTableProtocol = NULL; EFI_ACPI_SDT_PROTOCOL *mAcpiSdtProtocol = NULL; APEI_TRUSTED_FIRMWARE_STRUCTURE *mApeiTrustedfirmwareData; EFI_STATUS EFIAPI ApeiEntryPoint ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; ARM_SMC_ARGS SmcRegs = {0}; UINTN Size = sizeof (OEM_CONFIG_DATA); OEM_CONFIG_DATA SetupData; Status = gRT->GetVariable ( OEM_CONFIG_NAME, &gOemConfigGuid, NULL, &Size, &SetupData ); if (EFI_ERROR (Status)) { SetupData.EnRasSupport = 1; DEBUG ((DEBUG_ERROR, "[%a]GetVariable %r.Get default variable value\n", __FUNCTION__, Status)); } if (!SetupData.EnRasSupport) { return EFI_ABORTED; } if (PcdGet64 (PcdTrustedFirmwareEnable) == 0) { return EFI_ABORTED; } Status = gBS->LocateProtocol ( &gEfiAcpiTableProtocolGuid, NULL, (VOID**)&mAcpiTableProtocol); if (EFI_ERROR (Status)) { return Status; } Status = gBS->LocateProtocol ( &gEfiAcpiSdtProtocolGuid, NULL, (VOID**)&mAcpiSdtProtocol); if (EFI_ERROR (Status)) { return Status; } Status = gBS->AllocatePool ( EfiReservedMemoryType, sizeof (APEI_TRUSTED_FIRMWARE_STRUCTURE), (VOID**)&mApeiTrustedfirmwareData ); if (EFI_ERROR (Status)) { return Status; } gBS->SetMem ( mApeiTrustedfirmwareData, sizeof (APEI_TRUSTED_FIRMWARE_STRUCTURE), 0 ); Status = EFI_SUCCESS; Status |= OemInitBertTable (ImageHandle); Status |= OemInitHestTable (ImageHandle); Status |= OemInitErstTable (); Status |= OemInitEinjTable (); // smc call DEBUG ((DEBUG_INFO, "[%a]:[%dL]: %r\n", __FUNCTION__, __LINE__, Status)); if (Status == EFI_SUCCESS) { SmcRegs.Arg0 = PRIVATE_ARM_SMC_ID_APEI; SmcRegs.Arg1 = (UINTN)mApeiTrustedfirmwareData; ArmCallSmc (&SmcRegs); } DEBUG ((DEBUG_INFO, "Acpi Apei init done.\n")); return EFI_SUCCESS; }