From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=fail (domain: intel.com, ip: , mailfrom: guo.dong@intel.com) Received: from mga06.intel.com (mga06.intel.com []) by groups.io with SMTP; Tue, 07 May 2019 15:27:32 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 May 2019 15:27:31 -0700 X-ExtLoop1: 1 Received: from gdong1-mobl.amr.corp.intel.com ([10.78.24.216]) by orsmga003.jf.intel.com with ESMTP; 07 May 2019 15:27:31 -0700 From: "Guo Dong" To: devel@edk2.groups.io Cc: maurice.ma@intel.com, prince.agyeman@intel.com, benjamin.you@intel.com, guo.dong@intel.com Subject: [edk2-devel] [PATCH 1/2] Retire CorebootModulePkg from EDK2 Date: Tue, 7 May 2019 15:27:27 -0700 Message-Id: <20190507222728.28296-2-guo.dong@intel.com> X-Mailer: git-send-email 2.16.2.windows.1 In-Reply-To: <20190507222728.28296-1-guo.dong@intel.com> References: <20190507222728.28296-1-guo.dong@intel.com> Since UefiPayloadPkg in EDK2 supports Coreboot and Slim Bootloader, and I don't receive any concerns for the RFC to remove CorebootModulePkg and CorebootPayloadPkg from EDK2 (https://edk2.groups.io/g/devel/message/39126), here is the action patch to remove CorebootModulePkg. Signed-off-by: Guo Dong --- CorebootModulePkg/CbSupportDxe/CbSupportDxe.c | 158 --- CorebootModulePkg/CbSupportDxe/CbSupportDxe.h | 30 - CorebootModulePkg/CbSupportDxe/CbSupportDxe.inf | 60 -- CorebootModulePkg/CbSupportPei/CbSupportPei.c | 440 -------- CorebootModulePkg/CbSupportPei/CbSupportPei.h | 42 - CorebootModulePkg/CbSupportPei/CbSupportPei.inf | 74 -- CorebootModulePkg/CorebootModulePkg.dec | 59 -- CorebootModulePkg/Include/Coreboot.h | 249 ----- CorebootModulePkg/Include/Guid/AcpiBoardInfoGuid.h | 26 - .../Include/Guid/FrameBufferInfoGuid.h | 34 - .../Include/Guid/SystemTableInfoGuid.h | 24 - CorebootModulePkg/Include/Library/CbParseLib.h | 186 ---- .../Include/Library/CbPlatformSupportLib.h | 28 - .../BaseSerialPortLib16550.c | 1089 -------------------- .../BaseSerialPortLib16550.inf | 42 - .../BaseSerialPortLib16550.uni | 16 - CorebootModulePkg/Library/CbParseLib/CbParseLib.c | 721 ------------- .../Library/CbParseLib/CbParseLib.inf | 39 - .../CbPlatformSupportLibNull.c | 29 - .../CbPlatformSupportLibNull.inf | 29 - .../CbPlatformSupportLibNull.uni | 14 - .../SataControllerDxe/ComponentName.c | 170 --- .../SataControllerDxe/SataController.c | 1043 ------------------- .../SataControllerDxe/SataController.h | 536 ---------- .../SataControllerDxe/SataControllerDxe.inf | 43 - CorebootModulePkg/SecCore/FindPeiCore.c | 193 ---- CorebootModulePkg/SecCore/Ia32/SecEntry.asm | 72 -- CorebootModulePkg/SecCore/Ia32/SecEntry.nasm | 66 -- CorebootModulePkg/SecCore/Ia32/Stack.asm | 76 -- CorebootModulePkg/SecCore/Ia32/Stack.nasm | 72 -- CorebootModulePkg/SecCore/SecCore.inf | 57 - CorebootModulePkg/SecCore/SecMain.c | 285 ----- CorebootModulePkg/SecCore/SecMain.h | 128 --- 33 files changed, 6130 deletions(-) delete mode 100755 CorebootModulePkg/CbSupportDxe/CbSupportDxe.c delete mode 100644 CorebootModulePkg/CbSupportDxe/CbSupportDxe.h delete mode 100644 CorebootModulePkg/CbSupportDxe/CbSupportDxe.inf delete mode 100755 CorebootModulePkg/CbSupportPei/CbSupportPei.c delete mode 100644 CorebootModulePkg/CbSupportPei/CbSupportPei.h delete mode 100644 CorebootModulePkg/CbSupportPei/CbSupportPei.inf delete mode 100644 CorebootModulePkg/CorebootModulePkg.dec delete mode 100644 CorebootModulePkg/Include/Coreboot.h delete mode 100644 CorebootModulePkg/Include/Guid/AcpiBoardInfoGuid.h delete mode 100644 CorebootModulePkg/Include/Guid/FrameBufferInfoGuid.h delete mode 100644 CorebootModulePkg/Include/Guid/SystemTableInfoGuid.h delete mode 100644 CorebootModulePkg/Include/Library/CbParseLib.h delete mode 100644 CorebootModulePkg/Include/Library/CbPlatformSupportLib.h delete mode 100644 CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c delete mode 100644 CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf delete mode 100644 CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.uni delete mode 100644 CorebootModulePkg/Library/CbParseLib/CbParseLib.c delete mode 100644 CorebootModulePkg/Library/CbParseLib/CbParseLib.inf delete mode 100644 CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.c delete mode 100644 CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.inf delete mode 100644 CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.uni delete mode 100644 CorebootModulePkg/SataControllerDxe/ComponentName.c delete mode 100644 CorebootModulePkg/SataControllerDxe/SataController.c delete mode 100644 CorebootModulePkg/SataControllerDxe/SataController.h delete mode 100644 CorebootModulePkg/SataControllerDxe/SataControllerDxe.inf delete mode 100644 CorebootModulePkg/SecCore/FindPeiCore.c delete mode 100644 CorebootModulePkg/SecCore/Ia32/SecEntry.asm delete mode 100644 CorebootModulePkg/SecCore/Ia32/SecEntry.nasm delete mode 100644 CorebootModulePkg/SecCore/Ia32/Stack.asm delete mode 100644 CorebootModulePkg/SecCore/Ia32/Stack.nasm delete mode 100644 CorebootModulePkg/SecCore/SecCore.inf delete mode 100644 CorebootModulePkg/SecCore/SecMain.c delete mode 100644 CorebootModulePkg/SecCore/SecMain.h diff --git a/CorebootModulePkg/CbSupportDxe/CbSupportDxe.c b/CorebootModulePkg/CbSupportDxe/CbSupportDxe.c deleted file mode 100755 index e559e74307..0000000000 --- a/CorebootModulePkg/CbSupportDxe/CbSupportDxe.c +++ /dev/null @@ -1,158 +0,0 @@ -/** @file - This driver will report some MMIO/IO resources to dxe core, extract smbios and acpi - tables from coreboot and install. - - Copyright (c) 2014, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ -#include "CbSupportDxe.h" - -/** - Reserve MMIO/IO resource in GCD - - @param IsMMIO Flag of whether it is mmio resource or io resource. - @param GcdType Type of the space. - @param BaseAddress Base address of the space. - @param Length Length of the space. - @param Alignment Align with 2^Alignment - @param ImageHandle Handle for the image of this driver. - - @retval EFI_SUCCESS Reserve successful -**/ -EFI_STATUS -CbReserveResourceInGcd ( - IN BOOLEAN IsMMIO, - IN UINTN GcdType, - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - IN UINTN Alignment, - IN EFI_HANDLE ImageHandle - ) -{ - EFI_STATUS Status; - - if (IsMMIO) { - Status = gDS->AddMemorySpace ( - GcdType, - BaseAddress, - Length, - EFI_MEMORY_UC - ); - if (EFI_ERROR (Status)) { - DEBUG (( - EFI_D_ERROR, - "Failed to add memory space :0x%lx 0x%lx\n", - BaseAddress, - Length - )); - } - ASSERT_EFI_ERROR (Status); - Status = gDS->AllocateMemorySpace ( - EfiGcdAllocateAddress, - GcdType, - Alignment, - Length, - &BaseAddress, - ImageHandle, - NULL - ); - ASSERT_EFI_ERROR (Status); - } else { - Status = gDS->AddIoSpace ( - GcdType, - BaseAddress, - Length - ); - ASSERT_EFI_ERROR (Status); - Status = gDS->AllocateIoSpace ( - EfiGcdAllocateAddress, - GcdType, - Alignment, - Length, - &BaseAddress, - ImageHandle, - NULL - ); - ASSERT_EFI_ERROR (Status); - } - return Status; -} - - -/** - Main entry for the Coreboot Support DXE module. - - @param[in] ImageHandle The firmware allocated handle for the EFI image. - @param[in] SystemTable A pointer to the EFI System Table. - - @retval EFI_SUCCESS The entry point is executed successfully. - @retval other Some error occurs when executing this entry point. - -**/ -EFI_STATUS -EFIAPI -CbDxeEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - EFI_HOB_GUID_TYPE *GuidHob; - SYSTEM_TABLE_INFO *pSystemTableInfo; - FRAME_BUFFER_INFO *FbInfo; - - Status = EFI_SUCCESS; - // - // Report MMIO/IO Resources - // - Status = CbReserveResourceInGcd (TRUE, EfiGcdMemoryTypeMemoryMappedIo, 0xFEC00000, SIZE_4KB, 0, SystemTable); // IOAPIC - ASSERT_EFI_ERROR (Status); - - Status = CbReserveResourceInGcd (TRUE, EfiGcdMemoryTypeMemoryMappedIo, 0xFED00000, SIZE_1KB, 0, SystemTable); // HPET - ASSERT_EFI_ERROR (Status); - - // - // Find the system table information guid hob - // - GuidHob = GetFirstGuidHob (&gUefiSystemTableInfoGuid); - ASSERT (GuidHob != NULL); - pSystemTableInfo = (SYSTEM_TABLE_INFO *)GET_GUID_HOB_DATA (GuidHob); - - // - // Install Acpi Table - // - if (pSystemTableInfo->AcpiTableBase != 0 && pSystemTableInfo->AcpiTableSize != 0) { - DEBUG ((EFI_D_ERROR, "Install Acpi Table at 0x%lx, length 0x%x\n", pSystemTableInfo->AcpiTableBase, pSystemTableInfo->AcpiTableSize)); - Status = gBS->InstallConfigurationTable (&gEfiAcpiTableGuid, (VOID *)(UINTN)pSystemTableInfo->AcpiTableBase); - ASSERT_EFI_ERROR (Status); - } - - // - // Install Smbios Table - // - if (pSystemTableInfo->SmbiosTableBase != 0 && pSystemTableInfo->SmbiosTableSize != 0) { - DEBUG ((EFI_D_ERROR, "Install Smbios Table at 0x%lx, length 0x%x\n", pSystemTableInfo->SmbiosTableBase, pSystemTableInfo->SmbiosTableSize)); - Status = gBS->InstallConfigurationTable (&gEfiSmbiosTableGuid, (VOID *)(UINTN)pSystemTableInfo->SmbiosTableBase); - ASSERT_EFI_ERROR (Status); - } - - // - // Find the frame buffer information and update PCDs - // - GuidHob = GetFirstGuidHob (&gUefiFrameBufferInfoGuid); - if (GuidHob != NULL) { - FbInfo = (FRAME_BUFFER_INFO *)GET_GUID_HOB_DATA (GuidHob); - Status = PcdSet32S (PcdVideoHorizontalResolution, FbInfo->HorizontalResolution); - ASSERT_EFI_ERROR (Status); - Status = PcdSet32S (PcdVideoVerticalResolution, FbInfo->VerticalResolution); - ASSERT_EFI_ERROR (Status); - Status = PcdSet32S (PcdSetupVideoHorizontalResolution, FbInfo->HorizontalResolution); - ASSERT_EFI_ERROR (Status); - Status = PcdSet32S (PcdSetupVideoVerticalResolution, FbInfo->VerticalResolution); - ASSERT_EFI_ERROR (Status); - } - - return EFI_SUCCESS; -} - diff --git a/CorebootModulePkg/CbSupportDxe/CbSupportDxe.h b/CorebootModulePkg/CbSupportDxe/CbSupportDxe.h deleted file mode 100644 index 5548331391..0000000000 --- a/CorebootModulePkg/CbSupportDxe/CbSupportDxe.h +++ /dev/null @@ -1,30 +0,0 @@ -/** @file - The header file of Coreboot Support DXE. - -Copyright (c) 2014, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ -#ifndef __DXE_COREBOOT_SUPPORT_H__ -#define __DXE_COREBOOT_SUPPORT_H__ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#endif diff --git a/CorebootModulePkg/CbSupportDxe/CbSupportDxe.inf b/CorebootModulePkg/CbSupportDxe/CbSupportDxe.inf deleted file mode 100644 index 751832f3b6..0000000000 --- a/CorebootModulePkg/CbSupportDxe/CbSupportDxe.inf +++ /dev/null @@ -1,60 +0,0 @@ -## @file -# Coreboot Support DXE Module -# -# Report some MMIO/IO resources to dxe core, extract smbios and acpi tables from coreboot and install. -# -# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = CbSupportDxe - FILE_GUID = C68DAA4E-7AB5-41e8-A91D-5954421053F3 - MODULE_TYPE = DXE_DRIVER - VERSION_STRING = 1.0 - ENTRY_POINT = CbDxeEntryPoint - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 EBC -# - -[Sources] - CbSupportDxe.c - CbSupportDxe.h - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec - CorebootModulePkg/CorebootModulePkg.dec - -[LibraryClasses] - UefiDriverEntryPoint - UefiBootServicesTableLib - DxeServicesTableLib - DebugLib - BaseMemoryLib - UefiLib - HobLib - -[Guids] - gEfiAcpiTableGuid - gEfiSmbiosTableGuid - gUefiSystemTableInfoGuid - gUefiAcpiBoardInfoGuid - gUefiFrameBufferInfoGuid - -[Pcd] - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution - gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution - gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution - -[Depex] - TRUE diff --git a/CorebootModulePkg/CbSupportPei/CbSupportPei.c b/CorebootModulePkg/CbSupportPei/CbSupportPei.c deleted file mode 100755 index bdb2faa0b6..0000000000 --- a/CorebootModulePkg/CbSupportPei/CbSupportPei.c +++ /dev/null @@ -1,440 +0,0 @@ -/** @file - This PEIM will parse coreboot table in memory and report resource information into pei core. - This file contains the main entrypoint of the PEIM. - -Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ -#include "CbSupportPei.h" - -#define LEGACY_8259_MASK_REGISTER_MASTER 0x21 -#define LEGACY_8259_MASK_REGISTER_SLAVE 0xA1 - -EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = { - { EfiACPIReclaimMemory, FixedPcdGet32 (PcdMemoryTypeEfiACPIReclaimMemory) }, - { EfiACPIMemoryNVS, FixedPcdGet32 (PcdMemoryTypeEfiACPIMemoryNVS) }, - { EfiReservedMemoryType, FixedPcdGet32 (PcdMemoryTypeEfiReservedMemoryType) }, - { EfiRuntimeServicesData, FixedPcdGet32 (PcdMemoryTypeEfiRuntimeServicesData) }, - { EfiRuntimeServicesCode, FixedPcdGet32 (PcdMemoryTypeEfiRuntimeServicesCode) }, - { EfiMaxMemoryType, 0 } -}; - -EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { - { - EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, - &gEfiPeiMasterBootModePpiGuid, - NULL - } -}; - -/** - Create memory mapped io resource hob. - - @param MmioBase Base address of the memory mapped io range - @param MmioSize Length of the memory mapped io range - -**/ -VOID -BuildMemoryMappedIoRangeHob ( - EFI_PHYSICAL_ADDRESS MmioBase, - UINT64 MmioSize - ) -{ - BuildResourceDescriptorHob ( - EFI_RESOURCE_MEMORY_MAPPED_IO, - (EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_TESTED), - MmioBase, - MmioSize - ); - - BuildMemoryAllocationHob ( - MmioBase, - MmioSize, - EfiMemoryMappedIO - ); -} - -/** - Check the integrity of firmware volume header - - @param[in] FwVolHeader A pointer to a firmware volume header - - @retval TRUE The firmware volume is consistent - @retval FALSE The firmware volume has corrupted. - -**/ -STATIC -BOOLEAN -IsFvHeaderValid ( - IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader - ) -{ - UINT16 Checksum; - - // Skip nv storage fv - if (CompareMem (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem2Guid, sizeof(EFI_GUID)) != 0 ) { - return FALSE; - } - - if ( (FwVolHeader->Revision != EFI_FVH_REVISION) || - (FwVolHeader->Signature != EFI_FVH_SIGNATURE) || - (FwVolHeader->FvLength == ((UINTN) -1)) || - ((FwVolHeader->HeaderLength & 0x01 ) !=0) ) { - return FALSE; - } - - Checksum = CalculateCheckSum16 ((UINT16 *) FwVolHeader, FwVolHeader->HeaderLength); - if (Checksum != 0) { - DEBUG (( DEBUG_ERROR, - "ERROR - Invalid Firmware Volume Header Checksum, change 0x%04x to 0x%04x\r\n", - FwVolHeader->Checksum, - (UINT16)( Checksum + FwVolHeader->Checksum ))); - return FALSE; - } - - return TRUE; -} - -/** - Install FvInfo PPI and create fv hobs for remained fvs - -**/ -VOID -CbPeiReportRemainedFvs ( - VOID - ) -{ - UINT8* TempPtr; - UINT8* EndPtr; - - TempPtr = (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase); - EndPtr = (UINT8* )(UINTN) (PcdGet32 (PcdPayloadFdMemBase) + PcdGet32 (PcdPayloadFdMemSize)); - - for (;TempPtr < EndPtr;) { - if (IsFvHeaderValid ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)) { - if (TempPtr != (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase)) { - // Skip the PEI FV - DEBUG((EFI_D_ERROR, "Found one valid fv : 0x%lx.\n", TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength)); - - PeiServicesInstallFvInfoPpi ( - NULL, - (VOID *) (UINTN) TempPtr, - (UINT32) (UINTN) ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength, - NULL, - NULL - ); - BuildFvHob ((EFI_PHYSICAL_ADDRESS)(UINTN) TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength); - } - } - TempPtr += ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength; - } -} - -/** - Based on memory base, size and type, build resource descripter HOB. - - @param Base Memory base address. - @param Size Memory size. - @param Type Memory type. - @param Param A pointer to CB_MEM_INFO. - - @retval EFI_SUCCESS if it completed successfully. -**/ -EFI_STATUS -CbMemInfoCallback ( - UINT64 Base, - UINT64 Size, - UINT32 Type, - VOID *Param - ) -{ - CB_MEM_INFO *MemInfo; - UINTN Attribue; - - Attribue = EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_TESTED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE; - - if ((Base < 0x100000) && ((Base + Size) > 0x100000)) { - Size -= (0x100000 - Base); - Base = 0x100000; - } - - MemInfo = (CB_MEM_INFO *)Param; - if (Base >= 0x100000) { - if (Type == CB_MEM_RAM) { - if (Base < 0x100000000ULL) { - MemInfo->UsableLowMemTop = (UINT32)(Base + Size); - } else { - Attribue &= ~EFI_RESOURCE_ATTRIBUTE_TESTED; - } - BuildResourceDescriptorHob ( - EFI_RESOURCE_SYSTEM_MEMORY, - Attribue, - (EFI_PHYSICAL_ADDRESS)Base, - Size - ); - } else if (Type == CB_MEM_TABLE) { - BuildResourceDescriptorHob ( - EFI_RESOURCE_MEMORY_RESERVED, - Attribue, - (EFI_PHYSICAL_ADDRESS)Base, - Size - ); - MemInfo->SystemLowMemTop = ((UINT32)(Base + Size) + 0x0FFFFFFF) & 0xF0000000; - } else if (Type == CB_MEM_RESERVED) { - if ((MemInfo->SystemLowMemTop == 0) || (Base < MemInfo->SystemLowMemTop)) { - BuildResourceDescriptorHob ( - EFI_RESOURCE_MEMORY_RESERVED, - Attribue, - (EFI_PHYSICAL_ADDRESS)Base, - Size - ); - } - } - } - - return EFI_SUCCESS; -} - -/** - This is the entrypoint of PEIM - - @param FileHandle Handle of the file being invoked. - @param PeiServices Describes the list of possible PEI Services. - - @retval EFI_SUCCESS if it completed successfully. -**/ -EFI_STATUS -EFIAPI -CbPeiEntryPoint ( - IN EFI_PEI_FILE_HANDLE FileHandle, - IN CONST EFI_PEI_SERVICES **PeiServices - ) -{ - EFI_STATUS Status; - UINT64 LowMemorySize; - UINT64 PeiMemSize = SIZE_64MB; // 64 MB - EFI_PHYSICAL_ADDRESS PeiMemBase = 0; - UINT32 RegEax; - UINT8 PhysicalAddressBits; - VOID* pCbHeader; - VOID* pAcpiTable; - UINT32 AcpiTableSize; - VOID* pSmbiosTable; - UINT32 SmbiosTableSize; - SYSTEM_TABLE_INFO* pSystemTableInfo; - FRAME_BUFFER_INFO FbInfo; - FRAME_BUFFER_INFO* pFbInfo; - ACPI_BOARD_INFO* pAcpiBoardInfo; - UINTN PmCtrlRegBase, PmTimerRegBase, ResetRegAddress, ResetValue; - UINTN PmEvtBase; - UINTN PmGpeEnBase; - CB_MEM_INFO CbMemInfo; - - // - // Report lower 640KB of RAM. Attribute EFI_RESOURCE_ATTRIBUTE_TESTED - // is intentionally omitted to prevent erasing of the coreboot header - // record before it is processed by CbParseMemoryInfo. - // - BuildResourceDescriptorHob ( - EFI_RESOURCE_SYSTEM_MEMORY, - ( - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE - ), - (EFI_PHYSICAL_ADDRESS)(0), - (UINT64)(0xA0000) - ); - - - BuildResourceDescriptorHob ( - EFI_RESOURCE_MEMORY_RESERVED, - ( - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_TESTED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE - ), - (EFI_PHYSICAL_ADDRESS)(0xA0000), - (UINT64)(0x60000) - ); - - ZeroMem (&CbMemInfo, sizeof(CbMemInfo)); - Status = CbParseMemoryInfo (CbMemInfoCallback, (VOID *)&CbMemInfo); - if (EFI_ERROR(Status)) { - return Status; - } - - LowMemorySize = CbMemInfo.UsableLowMemTop; - DEBUG ((EFI_D_INFO, "Low memory 0x%lx\n", LowMemorySize)); - DEBUG ((EFI_D_INFO, "SystemLowMemTop 0x%x\n", CbMemInfo.SystemLowMemTop)); - - // - // Should be 64k aligned - // - PeiMemBase = (LowMemorySize - PeiMemSize) & (~(BASE_64KB - 1)); - - DEBUG((EFI_D_ERROR, "PeiMemBase: 0x%lx.\n", PeiMemBase)); - DEBUG((EFI_D_ERROR, "PeiMemSize: 0x%lx.\n", PeiMemSize)); - - Status = PeiServicesInstallPeiMemory ( - PeiMemBase, - PeiMemSize - ); - ASSERT_EFI_ERROR (Status); - - // - // Set cache on the physical memory - // - MtrrSetMemoryAttribute (BASE_1MB, LowMemorySize - BASE_1MB, CacheWriteBack); - MtrrSetMemoryAttribute (0, 0xA0000, CacheWriteBack); - - // - // Create Memory Type Information HOB - // - BuildGuidDataHob ( - &gEfiMemoryTypeInformationGuid, - mDefaultMemoryTypeInformation, - sizeof(mDefaultMemoryTypeInformation) - ); - - // - // Create Fv hob - // - CbPeiReportRemainedFvs (); - - BuildMemoryAllocationHob ( - PcdGet32 (PcdPayloadFdMemBase), - PcdGet32 (PcdPayloadFdMemSize), - EfiBootServicesData - ); - - // - // Build CPU memory space and IO space hob - // - AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL); - if (RegEax >= 0x80000008) { - AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL); - PhysicalAddressBits = (UINT8) RegEax; - } else { - PhysicalAddressBits = 36; - } - // - // Create a CPU hand-off information - // - BuildCpuHob (PhysicalAddressBits, 16); - - // - // Report Local APIC range - // - BuildMemoryMappedIoRangeHob (0xFEC80000, SIZE_512KB); - - // - // Boot mode - // - Status = PeiServicesSetBootMode (BOOT_WITH_FULL_CONFIGURATION); - ASSERT_EFI_ERROR (Status); - - Status = PeiServicesInstallPpi (mPpiBootMode); - ASSERT_EFI_ERROR (Status); - - // - // Set pcd to save the upper coreboot header in case the dxecore will - // erase 0~4k memory - // - pCbHeader = NULL; - if ((CbParseGetCbHeader (1, &pCbHeader) == RETURN_SUCCESS) - && ((UINTN)pCbHeader > BASE_4KB)) { - DEBUG((EFI_D_ERROR, "Actual Coreboot header: %p.\n", pCbHeader)); - Status = PcdSet32S (PcdCbHeaderPointer, (UINT32)(UINTN)pCbHeader); - ASSERT_EFI_ERROR (Status); - } - - // - // Create guid hob for system tables like acpi table and smbios table - // - pAcpiTable = NULL; - AcpiTableSize = 0; - pSmbiosTable = NULL; - SmbiosTableSize = 0; - Status = CbParseAcpiTable (&pAcpiTable, &AcpiTableSize); - if (EFI_ERROR (Status)) { - // ACPI table is oblidgible - DEBUG ((EFI_D_ERROR, "Failed to find the required acpi table\n")); - ASSERT (FALSE); - } - CbParseSmbiosTable (&pSmbiosTable, &SmbiosTableSize); - - pSystemTableInfo = NULL; - pSystemTableInfo = BuildGuidHob (&gUefiSystemTableInfoGuid, sizeof (SYSTEM_TABLE_INFO)); - ASSERT (pSystemTableInfo != NULL); - pSystemTableInfo->AcpiTableBase = (UINT64) (UINTN)pAcpiTable; - pSystemTableInfo->AcpiTableSize = AcpiTableSize; - pSystemTableInfo->SmbiosTableBase = (UINT64) (UINTN)pSmbiosTable; - pSystemTableInfo->SmbiosTableSize = SmbiosTableSize; - DEBUG ((EFI_D_ERROR, "Detected Acpi Table at 0x%lx, length 0x%x\n", pSystemTableInfo->AcpiTableBase, pSystemTableInfo->AcpiTableSize)); - DEBUG ((EFI_D_ERROR, "Detected Smbios Table at 0x%lx, length 0x%x\n", pSystemTableInfo->SmbiosTableBase, pSystemTableInfo->SmbiosTableSize)); - DEBUG ((EFI_D_ERROR, "Create system table info guid hob\n")); - - // - // Create guid hob for acpi board information - // - Status = CbParseFadtInfo (&PmCtrlRegBase, &PmTimerRegBase, &ResetRegAddress, &ResetValue, &PmEvtBase, &PmGpeEnBase); - ASSERT_EFI_ERROR (Status); - pAcpiBoardInfo = NULL; - pAcpiBoardInfo = BuildGuidHob (&gUefiAcpiBoardInfoGuid, sizeof (ACPI_BOARD_INFO)); - ASSERT (pAcpiBoardInfo != NULL); - pAcpiBoardInfo->PmCtrlRegBase = (UINT64)PmCtrlRegBase; - pAcpiBoardInfo->PmTimerRegBase = (UINT64)PmTimerRegBase; - pAcpiBoardInfo->ResetRegAddress = (UINT64)ResetRegAddress; - pAcpiBoardInfo->ResetValue = (UINT8)ResetValue; - pAcpiBoardInfo->PmEvtBase = (UINT64)PmEvtBase; - pAcpiBoardInfo->PmGpeEnBase = (UINT64)PmGpeEnBase; - DEBUG ((EFI_D_ERROR, "Create acpi board info guid hob\n")); - - // - // Create guid hob for frame buffer information - // - ZeroMem (&FbInfo, sizeof (FRAME_BUFFER_INFO)); - Status = CbParseFbInfo (&FbInfo); - if (!EFI_ERROR (Status)) { - pFbInfo = BuildGuidHob (&gUefiFrameBufferInfoGuid, sizeof (FRAME_BUFFER_INFO)); - ASSERT (pSystemTableInfo != NULL); - CopyMem (pFbInfo, &FbInfo, sizeof (FRAME_BUFFER_INFO)); - DEBUG ((EFI_D_ERROR, "Create frame buffer info guid hob\n")); - } - - // - // Parse platform specific information from coreboot. - // - Status = CbParsePlatformInfo (); - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_ERROR, "Error when parsing platform info, Status = %r\n", Status)); - return Status; - } - - // - // Mask off all legacy 8259 interrupt sources - // - IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0xFF); - IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0xFF); - - return EFI_SUCCESS; -} - diff --git a/CorebootModulePkg/CbSupportPei/CbSupportPei.h b/CorebootModulePkg/CbSupportPei/CbSupportPei.h deleted file mode 100644 index 2a0e897387..0000000000 --- a/CorebootModulePkg/CbSupportPei/CbSupportPei.h +++ /dev/null @@ -1,42 +0,0 @@ -/** @file - The header file of Coreboot Support PEIM. - -Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - - -#ifndef __PEI_COREBOOT_SUPPORT_H__ -#define __PEI_COREBOOT_SUPPORT_H__ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include "Coreboot.h" - -typedef struct { - UINT32 UsableLowMemTop; - UINT32 SystemLowMemTop; -} CB_MEM_INFO; - -#endif diff --git a/CorebootModulePkg/CbSupportPei/CbSupportPei.inf b/CorebootModulePkg/CbSupportPei/CbSupportPei.inf deleted file mode 100644 index 4cf6f70ead..0000000000 --- a/CorebootModulePkg/CbSupportPei/CbSupportPei.inf +++ /dev/null @@ -1,74 +0,0 @@ -## @file -# Coreboot Support PEI Module -# -# Parses coreboot table in memory and report resource information into pei core. It will install -# the memory as required. -# -# Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = CbSupportPeim - FILE_GUID = 352C6AF8-315B-4bd6-B04F-31D4ED1EBE57 - MODULE_TYPE = PEIM - VERSION_STRING = 1.0 - ENTRY_POINT = CbPeiEntryPoint - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 -# - -[Sources] - CbSupportPei.c - CbSupportPei.h - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec - CorebootModulePkg/CorebootModulePkg.dec - UefiCpuPkg/UefiCpuPkg.dec - -[LibraryClasses] - PeimEntryPoint - PeiServicesLib - BaseLib - BaseMemoryLib - DebugLib - HobLib - PcdLib - CbParseLib - MtrrLib - IoLib - CbPlatformSupportLib - -[Guids] - gEfiSmmPeiSmramMemoryReserveGuid - gEfiMemoryTypeInformationGuid - gEfiFirmwareFileSystem2Guid - gUefiSystemTableInfoGuid - gUefiFrameBufferInfoGuid - gUefiAcpiBoardInfoGuid - -[Ppis] - gEfiPeiMasterBootModePpiGuid - -[Pcd] - gUefiCorebootModulePkgTokenSpaceGuid.PcdPayloadFdMemBase - gUefiCorebootModulePkgTokenSpaceGuid.PcdPayloadFdMemSize - gUefiCorebootModulePkgTokenSpaceGuid.PcdCbHeaderPointer - gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory - gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS - gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType - gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData - gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode - -[Depex] - TRUE \ No newline at end of file diff --git a/CorebootModulePkg/CorebootModulePkg.dec b/CorebootModulePkg/CorebootModulePkg.dec deleted file mode 100644 index 79661f1da5..0000000000 --- a/CorebootModulePkg/CorebootModulePkg.dec +++ /dev/null @@ -1,59 +0,0 @@ -## @file -# Coreboot Support Package -# -# Provides drivers and definitions to support coreboot in EDKII bios. -# -# Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - DEC_SPECIFICATION = 0x00010005 - PACKAGE_NAME = CorebootModulePkg - PACKAGE_GUID = DE1750CE-FEE7-4dd1-8E9C-B7B8BAEBCF4F - PACKAGE_VERSION = 0.1 - -[Includes] - Include - -[LibraryClasses] - CbParseLib|Include/Library/CbParseLib.h - -[Guids] - # - ## Defines the token space for the Coreboot Module Package PCDs. - # - gUefiCorebootModulePkgTokenSpaceGuid = {0xe6ff49a0, 0x15df, 0x48fd, {0x9a, 0xcf, 0xd7, 0xdc, 0x27, 0x1b, 0x39, 0xd5}} - gUefiSystemTableInfoGuid = {0x16c8a6d0, 0xfe8a, 0x4082, {0xa2, 0x8, 0xcf, 0x89, 0xc4, 0x29, 0x4, 0x33}} - gUefiFrameBufferInfoGuid = {0xdc2cd8bd, 0x402c, 0x4dc4, {0x9b, 0xe0, 0xc, 0x43, 0x2b, 0x7, 0xfa, 0x34}} - gUefiAcpiBoardInfoGuid = {0xad3d31b, 0xb3d8, 0x4506, {0xae, 0x71, 0x2e, 0xf1, 0x10, 0x6, 0xd9, 0xf}} - - -[Ppis] - -[Protocols] - - -################################################################################ -# -# PCD Declarations section - list of all PCDs Declared by this Package -# Only this package should be providing the -# declaration, other packages should not. -# -################################################################################ -[PcdsFixedAtBuild, PcdsPatchableInModule] -## Indicates the base address of the payload binary in memory -gUefiCorebootModulePkgTokenSpaceGuid.PcdPayloadFdMemBase|0|UINT32|0x10000001 -## Provides the size of the payload binary in memory -gUefiCorebootModulePkgTokenSpaceGuid.PcdPayloadFdMemSize|0|UINT32|0x10000002 -## Used to help reduce fragmentation in the EFI memory map -gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory|0x08|UINT32|0x10000012 -gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS|0x04|UINT32|0x10000013 -gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType|0x04|UINT32|0x00000014 -gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|0xC0|UINT32|0x00000015 -gUefiCorebootModulePkgTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|0x80|UINT32|0x00000016 - -[PcdsDynamicEx] -gUefiCorebootModulePkgTokenSpaceGuid.PcdCbHeaderPointer|0|UINT32|0x10000003 - diff --git a/CorebootModulePkg/Include/Coreboot.h b/CorebootModulePkg/Include/Coreboot.h deleted file mode 100644 index ff384321db..0000000000 --- a/CorebootModulePkg/Include/Coreboot.h +++ /dev/null @@ -1,249 +0,0 @@ -/** @file - Coreboot PEI module include file. - - Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -/* - * This file is part of the libpayload project. - * - * Copyright (C) 2008 Advanced Micro Devices, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 THE AUTHOR OR CONTRIBUTORS 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. - */ - - -#ifndef _COREBOOT_PEI_H_INCLUDED_ -#define _COREBOOT_PEI_H_INCLUDED_ - -#if defined(_MSC_VER) -#pragma warning( disable : 4200 ) -#endif - -#define DYN_CBMEM_ALIGN_SIZE (4096) - -#define IMD_ENTRY_MAGIC (~0xC0389481) -#define CBMEM_ENTRY_MAGIC (~0xC0389479) - -struct cbmem_entry { - UINT32 magic; - UINT32 start; - UINT32 size; - UINT32 id; -}; - -struct cbmem_root { - UINT32 max_entries; - UINT32 num_entries; - UINT32 locked; - UINT32 size; - struct cbmem_entry entries[0]; -}; - -struct imd_entry { - UINT32 magic; - UINT32 start_offset; - UINT32 size; - UINT32 id; -}; - -struct imd_root { - UINT32 max_entries; - UINT32 num_entries; - UINT32 flags; - UINT32 entry_align; - UINT32 max_offset; - struct imd_entry entries[0]; -}; - -struct cbuint64 { - UINT32 lo; - UINT32 hi; -}; - -#define CB_HEADER_SIGNATURE 0x4F49424C - -struct cb_header { - UINT32 signature; - UINT32 header_bytes; - UINT32 header_checksum; - UINT32 table_bytes; - UINT32 table_checksum; - UINT32 table_entries; -}; - -struct cb_record { - UINT32 tag; - UINT32 size; -}; - -#define CB_TAG_UNUSED 0x0000 -#define CB_TAG_MEMORY 0x0001 - -struct cb_memory_range { - struct cbuint64 start; - struct cbuint64 size; - UINT32 type; -}; - -#define CB_MEM_RAM 1 -#define CB_MEM_RESERVED 2 -#define CB_MEM_ACPI 3 -#define CB_MEM_NVS 4 -#define CB_MEM_UNUSABLE 5 -#define CB_MEM_VENDOR_RSVD 6 -#define CB_MEM_TABLE 16 - -struct cb_memory { - UINT32 tag; - UINT32 size; - struct cb_memory_range map[0]; -}; - -#define CB_TAG_MAINBOARD 0x0003 - -struct cb_mainboard { - UINT32 tag; - UINT32 size; - UINT8 vendor_idx; - UINT8 part_number_idx; - UINT8 strings[0]; -}; -#define CB_TAG_VERSION 0x0004 -#define CB_TAG_EXTRA_VERSION 0x0005 -#define CB_TAG_BUILD 0x0006 -#define CB_TAG_COMPILE_TIME 0x0007 -#define CB_TAG_COMPILE_BY 0x0008 -#define CB_TAG_COMPILE_HOST 0x0009 -#define CB_TAG_COMPILE_DOMAIN 0x000a -#define CB_TAG_COMPILER 0x000b -#define CB_TAG_LINKER 0x000c -#define CB_TAG_ASSEMBLER 0x000d - -struct cb_string { - UINT32 tag; - UINT32 size; - UINT8 string[0]; -}; - -#define CB_TAG_SERIAL 0x000f - -struct cb_serial { - UINT32 tag; - UINT32 size; -#define CB_SERIAL_TYPE_IO_MAPPED 1 -#define CB_SERIAL_TYPE_MEMORY_MAPPED 2 - UINT32 type; - UINT32 baseaddr; - UINT32 baud; - UINT32 regwidth; - - // Crystal or input frequency to the chip containing the UART. - // Provide the board specific details to allow the payload to - // initialize the chip containing the UART and make independent - // decisions as to which dividers to select and their values - // to eventually arrive at the desired console baud-rate. - UINT32 input_hertz; - - // UART PCI address: bus, device, function - // 1 << 31 - Valid bit, PCI UART in use - // Bus << 20 - // Device << 15 - // Function << 12 - UINT32 uart_pci_addr; -}; - -#define CB_TAG_CONSOLE 0x00010 - -struct cb_console { - UINT32 tag; - UINT32 size; - UINT16 type; -}; - -#define CB_TAG_CONSOLE_SERIAL8250 0 -#define CB_TAG_CONSOLE_VGA 1 // OBSOLETE -#define CB_TAG_CONSOLE_BTEXT 2 // OBSOLETE -#define CB_TAG_CONSOLE_LOGBUF 3 -#define CB_TAG_CONSOLE_SROM 4 // OBSOLETE -#define CB_TAG_CONSOLE_EHCI 5 - -#define CB_TAG_FORWARD 0x00011 - -struct cb_forward { - UINT32 tag; - UINT32 size; - UINT64 forward; -}; - -#define CB_TAG_FRAMEBUFFER 0x0012 -struct cb_framebuffer { - UINT32 tag; - UINT32 size; - - UINT64 physical_address; - UINT32 x_resolution; - UINT32 y_resolution; - UINT32 bytes_per_line; - UINT8 bits_per_pixel; - UINT8 red_mask_pos; - UINT8 red_mask_size; - UINT8 green_mask_pos; - UINT8 green_mask_size; - UINT8 blue_mask_pos; - UINT8 blue_mask_size; - UINT8 reserved_mask_pos; - UINT8 reserved_mask_size; -}; - -#define CB_TAG_VDAT 0x0015 -struct cb_vdat { - UINT32 tag; - UINT32 size; /* size of the entire entry */ - UINT64 vdat_addr; - UINT32 vdat_size; -}; - -#define CB_TAG_TIMESTAMPS 0x0016 -#define CB_TAG_CBMEM_CONSOLE 0x0017 -#define CB_TAG_MRC_CACHE 0x0018 -struct cb_cbmem_tab { - UINT32 tag; - UINT32 size; - UINT64 cbmem_tab; -}; - -/* Helpful macros */ - -#define MEM_RANGE_COUNT(_rec) \ - (((_rec)->size - sizeof(*(_rec))) / sizeof((_rec)->map[0])) - -#define MEM_RANGE_PTR(_rec, _idx) \ - (void *)(((UINT8 *) (_rec)) + sizeof(*(_rec)) \ - + (sizeof((_rec)->map[0]) * (_idx))) - - -#endif // _COREBOOT_PEI_H_INCLUDED_ diff --git a/CorebootModulePkg/Include/Guid/AcpiBoardInfoGuid.h b/CorebootModulePkg/Include/Guid/AcpiBoardInfoGuid.h deleted file mode 100644 index b40cf9529d..0000000000 --- a/CorebootModulePkg/Include/Guid/AcpiBoardInfoGuid.h +++ /dev/null @@ -1,26 +0,0 @@ -/** @file - This file defines the hob structure for board related information from acpi table - - Copyright (c) 2014, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef __ACPI_BOARD_INFO_GUID_H__ -#define __ACPI_BOARD_INFO_GUID_H__ - -/// -/// Board information GUID -/// -extern EFI_GUID gUefiAcpiBoardInfoGuid; - -typedef struct { - UINT64 PmEvtBase; - UINT64 PmGpeEnBase; - UINT64 PmCtrlRegBase; - UINT64 PmTimerRegBase; - UINT64 ResetRegAddress; - UINT8 ResetValue; -} ACPI_BOARD_INFO; - -#endif diff --git a/CorebootModulePkg/Include/Guid/FrameBufferInfoGuid.h b/CorebootModulePkg/Include/Guid/FrameBufferInfoGuid.h deleted file mode 100644 index 772f0c0508..0000000000 --- a/CorebootModulePkg/Include/Guid/FrameBufferInfoGuid.h +++ /dev/null @@ -1,34 +0,0 @@ -/** @file - This file defines the hob structure for frame buffer device. - - Copyright (c) 2014, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef __FRAME_BUFFER_INFO_GUID_H__ -#define __FRAME_BUFFER_INFO_GUID_H__ - -/// -/// Frame Buffer Information GUID -/// -extern EFI_GUID gUefiFrameBufferInfoGuid; - -typedef struct { - UINT8 Position; // Position of the color - UINT8 Mask; // The number of bits expressed as a mask -} COLOR_PLACEMENT; - -typedef struct { - UINT64 LinearFrameBuffer; - UINT32 HorizontalResolution; - UINT32 VerticalResolution; - UINT32 BitsPerPixel; - UINT16 BytesPerScanLine; - COLOR_PLACEMENT Red; - COLOR_PLACEMENT Green; - COLOR_PLACEMENT Blue; - COLOR_PLACEMENT Reserved; -} FRAME_BUFFER_INFO; - -#endif diff --git a/CorebootModulePkg/Include/Guid/SystemTableInfoGuid.h b/CorebootModulePkg/Include/Guid/SystemTableInfoGuid.h deleted file mode 100644 index 8c47db429a..0000000000 --- a/CorebootModulePkg/Include/Guid/SystemTableInfoGuid.h +++ /dev/null @@ -1,24 +0,0 @@ -/** @file - This file defines the hob structure for system tables like ACPI, SMBIOS tables. - - Copyright (c) 2014, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef __SYSTEM_TABLE_INFO_GUID_H__ -#define __SYSTEM_TABLE_INFO_GUID_H__ - -/// -/// System Table Information GUID -/// -extern EFI_GUID gUefiSystemTableInfoGuid; - -typedef struct { - UINT64 AcpiTableBase; - UINT32 AcpiTableSize; - UINT64 SmbiosTableBase; - UINT32 SmbiosTableSize; -} SYSTEM_TABLE_INFO; - -#endif diff --git a/CorebootModulePkg/Include/Library/CbParseLib.h b/CorebootModulePkg/Include/Library/CbParseLib.h deleted file mode 100644 index 1312410ccc..0000000000 --- a/CorebootModulePkg/Include/Library/CbParseLib.h +++ /dev/null @@ -1,186 +0,0 @@ -/** @file - This library will parse the coreboot table in memory and extract those required - information. - - Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ -#include - -typedef RETURN_STATUS \ - (*CB_MEM_INFO_CALLBACK) (UINT64 Base, UINT64 Size, UINT32 Type, VOID *Param); - -/** - Find coreboot record with given Tag from the memory Start in 4096 - bytes range. - - @param Start The start memory to be searched in - @param Tag The tag id to be found - - @retval NULL The Tag is not found. - @retval Others The pointer to the record found. - -**/ -VOID * -EFIAPI -FindCbTag ( - IN VOID *Start, - IN UINT32 Tag - ); - -/** - Acquire the memory information from the coreboot table in memory. - - @param MemInfoCallback The callback routine - @param pParam Pointer to the callback routine parameter - - @retval RETURN_SUCCESS Successfully find out the memory information. - @retval RETURN_NOT_FOUND Failed to find the memory information. - -**/ -RETURN_STATUS -EFIAPI -CbParseMemoryInfo ( - IN CB_MEM_INFO_CALLBACK MemInfoCallback, - IN VOID *pParam - ); - -/** - Acquire the coreboot memory table with the given table id - - @param TableId Table id to be searched - @param pMemTable Pointer to the base address of the memory table - @param pMemTableSize Pointer to the size of the memory table - - @retval RETURN_SUCCESS Successfully find out the memory table. - @retval RETURN_INVALID_PARAMETER Invalid input parameters. - @retval RETURN_NOT_FOUND Failed to find the memory table. - -**/ -RETURN_STATUS -EFIAPI -CbParseCbMemTable ( - IN UINT32 TableId, - IN VOID** pMemTable, - IN UINT32* pMemTableSize - ); - -/** - Acquire the acpi table from coreboot - - @param pMemTable Pointer to the base address of the memory table - @param pMemTableSize Pointer to the size of the memory table - - @retval RETURN_SUCCESS Successfully find out the memory table. - @retval RETURN_INVALID_PARAMETER Invalid input parameters. - @retval RETURN_NOT_FOUND Failed to find the memory table. - -**/ -RETURN_STATUS -EFIAPI -CbParseAcpiTable ( - IN VOID** pMemTable, - IN UINT32* pMemTableSize - ); - -/** - Acquire the smbios table from coreboot - - @param pMemTable Pointer to the base address of the memory table - @param pMemTableSize Pointer to the size of the memory table - - @retval RETURN_SUCCESS Successfully find out the memory table. - @retval RETURN_INVALID_PARAMETER Invalid input parameters. - @retval RETURN_NOT_FOUND Failed to find the memory table. - -**/ -RETURN_STATUS -EFIAPI -CbParseSmbiosTable ( - IN VOID** pMemTable, - IN UINT32* pMemTableSize - ); - -/** - Find the required fadt information - - @param pPmCtrlReg Pointer to the address of power management control register - @param pPmTimerReg Pointer to the address of power management timer register - @param pResetReg Pointer to the address of system reset register - @param pResetValue Pointer to the value to be written to the system reset register - @param pPmEvtReg Pointer to the address of power management event register - @param pPmGpeEnReg Pointer to the address of power management GPE enable register - - @retval RETURN_SUCCESS Successfully find out all the required fadt information. - @retval RETURN_NOT_FOUND Failed to find the fadt table. - -**/ -RETURN_STATUS -EFIAPI -CbParseFadtInfo ( - IN UINTN* pPmCtrlReg, - IN UINTN* pPmTimerReg, - IN UINTN* pResetReg, - IN UINTN* pResetValue, - IN UINTN* pPmEvtReg, - IN UINTN* pPmGpeEnReg - ); - -/** - Find the serial port information - - @param pRegBase Pointer to the base address of serial port registers - @param pRegAccessType Pointer to the access type of serial port registers - @param pRegWidth Pointer to the register width in bytes - @param pBaudrate Pointer to the serial port baudrate - @param pInputHertz Pointer to the input clock frequency - @param pUartPciAddr Pointer to the UART PCI bus, dev and func address - - @retval RETURN_SUCCESS Successfully find the serial port information. - @retval RETURN_NOT_FOUND Failed to find the serial port information . - -**/ -RETURN_STATUS -EFIAPI -CbParseSerialInfo ( - OUT UINT32 *pRegBase, - OUT UINT32 *pRegAccessType, - OUT UINT32 *pRegWidth, - OUT UINT32 *pBaudrate, - OUT UINT32 *pInputHertz, - OUT UINT32 *pUartPciAddr - ); - -/** - Search for the coreboot table header - - @param Level Level of the search depth - @param HeaderPtr Pointer to the pointer of coreboot table header - - @retval RETURN_SUCCESS Successfully find the coreboot table header . - @retval RETURN_NOT_FOUND Failed to find the coreboot table header . - -**/ -RETURN_STATUS -EFIAPI -CbParseGetCbHeader ( - IN UINTN Level, - IN VOID** HeaderPtr - ); - -/** - Find the video frame buffer information - - @param pFbInfo Pointer to the FRAME_BUFFER_INFO structure - - @retval RETURN_SUCCESS Successfully find the video frame buffer information. - @retval RETURN_NOT_FOUND Failed to find the video frame buffer information . - -**/ -RETURN_STATUS -EFIAPI -CbParseFbInfo ( - IN FRAME_BUFFER_INFO* pFbInfo - ); - diff --git a/CorebootModulePkg/Include/Library/CbPlatformSupportLib.h b/CorebootModulePkg/Include/Library/CbPlatformSupportLib.h deleted file mode 100644 index fc8c5c9dc9..0000000000 --- a/CorebootModulePkg/Include/Library/CbPlatformSupportLib.h +++ /dev/null @@ -1,28 +0,0 @@ -/** @file - Coreboot Platform Support library. Platform can provide an implementation of this - library class to provide hooks that may be required for some type of - platform features. - -Copyright (c) 2016, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef __CB_PLATFORM_SUPPORT_LIB__ -#define __CB_PLATFORM_SUPPORT_LIB__ - -/** - Parse platform specific information from coreboot. - - @retval RETURN_SUCCESS The platform specific coreboot support succeeded. - @retval RETURN_DEVICE_ERROR The platform specific coreboot support could not be completed. - -**/ -EFI_STATUS -EFIAPI -CbParsePlatformInfo ( - VOID - ); - -#endif // __CB_PLATFORM_SUPPORT_LIB__ - diff --git a/CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c b/CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c deleted file mode 100644 index 0717ffc279..0000000000 --- a/CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c +++ /dev/null @@ -1,1089 +0,0 @@ -/** @file - 16550 UART Serial Port library functions - - (C) Copyright 2014 Hewlett-Packard Development Company, L.P.
- Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include -#include -#include -#include -#include -#include -#include -#include - -// -// PCI Definitions. -// -#define PCI_BRIDGE_32_BIT_IO_SPACE 0x01 - -// -// 16550 UART register offsets and bitfields -// -#define R_UART_RXBUF 0 -#define R_UART_TXBUF 0 -#define R_UART_BAUD_LOW 0 -#define R_UART_BAUD_HIGH 1 -#define R_UART_FCR 2 -#define B_UART_FCR_FIFOE BIT0 -#define B_UART_FCR_FIFO64 BIT5 -#define R_UART_LCR 3 -#define B_UART_LCR_DLAB BIT7 -#define R_UART_MCR 4 -#define B_UART_MCR_DTRC BIT0 -#define B_UART_MCR_RTS BIT1 -#define R_UART_LSR 5 -#define B_UART_LSR_RXRDY BIT0 -#define B_UART_LSR_TXRDY BIT5 -#define B_UART_LSR_TEMT BIT6 -#define R_UART_MSR 6 -#define B_UART_MSR_CTS BIT4 -#define B_UART_MSR_DSR BIT5 -#define B_UART_MSR_RI BIT6 -#define B_UART_MSR_DCD BIT7 - -// -// 4-byte structure for each PCI node in PcdSerialPciDeviceInfo -// -typedef struct { - UINT8 Device; - UINT8 Function; - UINT16 PowerManagementStatusAndControlRegister; -} PCI_UART_DEVICE_INFO; - -/** - Read an 8-bit 16550 register. If PcdSerialUseMmio is TRUE, then the value is read from - MMIO space. If PcdSerialUseMmio is FALSE, then the value is read from I/O space. The - parameter Offset is added to the base address of the 16550 registers that is specified - by PcdSerialRegisterBase. - - @param Base The base address register of UART device. - @param Offset The offset of the 16550 register to read. - - @return The value read from the 16550 register. - -**/ -UINT8 -SerialPortReadRegister ( - UINTN Base, - UINTN Offset - ) -{ - if (PcdGetBool (PcdSerialUseMmio)) { - return MmioRead8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride)); - } else { - return IoRead8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride)); - } -} - -/** - Write an 8-bit 16550 register. If PcdSerialUseMmio is TRUE, then the value is written to - MMIO space. If PcdSerialUseMmio is FALSE, then the value is written to I/O space. The - parameter Offset is added to the base address of the 16550 registers that is specified - by PcdSerialRegisterBase. - - @param Base The base address register of UART device. - @param Offset The offset of the 16550 register to write. - @param Value The value to write to the 16550 register specified by Offset. - - @return The value written to the 16550 register. - -**/ -UINT8 -SerialPortWriteRegister ( - UINTN Base, - UINTN Offset, - UINT8 Value - ) -{ - if (PcdGetBool (PcdSerialUseMmio)) { - return MmioWrite8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride), Value); - } else { - return IoWrite8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride), Value); - } -} - -/** - Update the value of an 16-bit PCI configuration register in a PCI device. If the - PCI Configuration register specified by PciAddress is already programmed with a - non-zero value, then return the current value. Otherwise update the PCI configuration - register specified by PciAddress with the value specified by Value and return the - value programmed into the PCI configuration register. All values must be masked - using the bitmask specified by Mask. - - @param PciAddress PCI Library address of the PCI Configuration register to update. - @param Value The value to program into the PCI Configuration Register. - @param Mask Bitmask of the bits to check and update in the PCI configuration register. - -**/ -UINT16 -SerialPortLibUpdatePciRegister16 ( - UINTN PciAddress, - UINT16 Value, - UINT16 Mask - ) -{ - UINT16 CurrentValue; - - CurrentValue = PciRead16 (PciAddress) & Mask; - if (CurrentValue != 0) { - return CurrentValue; - } - return PciWrite16 (PciAddress, Value & Mask); -} - -/** - Update the value of an 32-bit PCI configuration register in a PCI device. If the - PCI Configuration register specified by PciAddress is already programmed with a - non-zero value, then return the current value. Otherwise update the PCI configuration - register specified by PciAddress with the value specified by Value and return the - value programmed into the PCI configuration register. All values must be masked - using the bitmask specified by Mask. - - @param PciAddress PCI Library address of the PCI Configuration register to update. - @param Value The value to program into the PCI Configuration Register. - @param Mask Bitmask of the bits to check and update in the PCI configuration register. - - @return The Secondary bus number that is actually programed into the PCI to PCI Bridge device. - -**/ -UINT32 -SerialPortLibUpdatePciRegister32 ( - UINTN PciAddress, - UINT32 Value, - UINT32 Mask - ) -{ - UINT32 CurrentValue; - - CurrentValue = PciRead32 (PciAddress) & Mask; - if (CurrentValue != 0) { - return CurrentValue; - } - return PciWrite32 (PciAddress, Value & Mask); -} - -/** - Retrieve the I/O or MMIO base address register for the PCI UART device. - - This function assumes Root Bus Numer is Zero, and enables I/O and MMIO in PCI UART - Device if they are not already enabled. - - @return The base address register of the UART device. - -**/ -UINTN -GetSerialRegisterBase ( - VOID - ) -{ - UINTN PciLibAddress; - UINTN BusNumber; - UINTN SubordinateBusNumber; - UINT32 ParentIoBase; - UINT32 ParentIoLimit; - UINT16 ParentMemoryBase; - UINT16 ParentMemoryLimit; - UINT32 IoBase; - UINT32 IoLimit; - UINT16 MemoryBase; - UINT16 MemoryLimit; - UINTN SerialRegisterBase; - UINTN BarIndex; - UINT32 RegisterBaseMask; - PCI_UART_DEVICE_INFO *DeviceInfo; - - // - // Get PCI Device Info - // - DeviceInfo = (PCI_UART_DEVICE_INFO *) PcdGetPtr (PcdSerialPciDeviceInfo); - - // - // If PCI Device Info is empty, then assume fixed address UART and return PcdSerialRegisterBase - // - if (DeviceInfo->Device == 0xff) { - return (UINTN)PcdGet64 (PcdSerialRegisterBase); - } - - // - // Assume PCI Bus 0 I/O window is 0-64KB and MMIO windows is 0-4GB - // - ParentMemoryBase = 0 >> 16; - ParentMemoryLimit = 0xfff00000 >> 16; - ParentIoBase = 0 >> 12; - ParentIoLimit = 0xf000 >> 12; - - // - // Enable I/O and MMIO in PCI Bridge - // Assume Root Bus Numer is Zero. - // - for (BusNumber = 0; (DeviceInfo + 1)->Device != 0xff; DeviceInfo++) { - // - // Compute PCI Lib Address to PCI to PCI Bridge - // - PciLibAddress = PCI_LIB_ADDRESS (BusNumber, DeviceInfo->Device, DeviceInfo->Function, 0); - - // - // Retrieve and verify the bus numbers in the PCI to PCI Bridge - // - BusNumber = PciRead8 (PciLibAddress + PCI_BRIDGE_SECONDARY_BUS_REGISTER_OFFSET); - SubordinateBusNumber = PciRead8 (PciLibAddress + PCI_BRIDGE_SUBORDINATE_BUS_REGISTER_OFFSET); - if (BusNumber == 0 || BusNumber > SubordinateBusNumber) { - return 0; - } - - // - // Retrieve and verify the I/O or MMIO decode window in the PCI to PCI Bridge - // - if (PcdGetBool (PcdSerialUseMmio)) { - MemoryLimit = PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.MemoryLimit)) & 0xfff0; - MemoryBase = PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.MemoryBase)) & 0xfff0; - - // - // If PCI Bridge MMIO window is disabled, then return 0 - // - if (MemoryLimit < MemoryBase) { - return 0; - } - - // - // If PCI Bridge MMIO window is not in the address range decoded by the parent PCI Bridge, then return 0 - // - if (MemoryBase < ParentMemoryBase || MemoryBase > ParentMemoryLimit || MemoryLimit > ParentMemoryLimit) { - return 0; - } - ParentMemoryBase = MemoryBase; - ParentMemoryLimit = MemoryLimit; - } else { - IoLimit = PciRead8 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoLimit)); - if ((IoLimit & PCI_BRIDGE_32_BIT_IO_SPACE ) == 0) { - IoLimit = IoLimit >> 4; - } else { - IoLimit = (PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoLimitUpper16)) << 4) | (IoLimit >> 4); - } - IoBase = PciRead8 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoBase)); - if ((IoBase & PCI_BRIDGE_32_BIT_IO_SPACE ) == 0) { - IoBase = IoBase >> 4; - } else { - IoBase = (PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoBaseUpper16)) << 4) | (IoBase >> 4); - } - - // - // If PCI Bridge I/O window is disabled, then return 0 - // - if (IoLimit < IoBase) { - return 0; - } - - // - // If PCI Bridge I/O window is not in the address range decoded by the parent PCI Bridge, then return 0 - // - if (IoBase < ParentIoBase || IoBase > ParentIoLimit || IoLimit > ParentIoLimit) { - return 0; - } - ParentIoBase = IoBase; - ParentIoLimit = IoLimit; - } - } - - // - // Compute PCI Lib Address to PCI UART - // - PciLibAddress = PCI_LIB_ADDRESS (BusNumber, DeviceInfo->Device, DeviceInfo->Function, 0); - - // - // Find the first IO or MMIO BAR - // - RegisterBaseMask = 0xFFFFFFF0; - for (BarIndex = 0; BarIndex < PCI_MAX_BAR; BarIndex ++) { - SerialRegisterBase = PciRead32 (PciLibAddress + PCI_BASE_ADDRESSREG_OFFSET + BarIndex * 4); - if (PcdGetBool (PcdSerialUseMmio) && ((SerialRegisterBase & BIT0) == 0)) { - // - // MMIO BAR is found - // - RegisterBaseMask = 0xFFFFFFF0; - break; - } - - if ((!PcdGetBool (PcdSerialUseMmio)) && ((SerialRegisterBase & BIT0) != 0)) { - // - // IO BAR is found - // - RegisterBaseMask = 0xFFFFFFF8; - break; - } - } - - // - // MMIO or IO BAR is not found. - // - if (BarIndex == PCI_MAX_BAR) { - return 0; - } - - // - // Program UART BAR - // - SerialRegisterBase = SerialPortLibUpdatePciRegister32 ( - PciLibAddress + PCI_BASE_ADDRESSREG_OFFSET + BarIndex * 4, - (UINT32)PcdGet64 (PcdSerialRegisterBase), - RegisterBaseMask - ); - - // - // Verify that the UART BAR is in the address range decoded by the parent PCI Bridge - // - if (PcdGetBool (PcdSerialUseMmio)) { - if (((SerialRegisterBase >> 16) & 0xfff0) < ParentMemoryBase || ((SerialRegisterBase >> 16) & 0xfff0) > ParentMemoryLimit) { - return 0; - } - } else { - if ((SerialRegisterBase >> 12) < ParentIoBase || (SerialRegisterBase >> 12) > ParentIoLimit) { - return 0; - } - } - - // - // Enable I/O and MMIO in PCI UART Device if they are not already enabled - // - PciOr16 ( - PciLibAddress + PCI_COMMAND_OFFSET, - PcdGetBool (PcdSerialUseMmio) ? EFI_PCI_COMMAND_MEMORY_SPACE : EFI_PCI_COMMAND_IO_SPACE - ); - - // - // Force D0 state if a Power Management and Status Register is specified - // - if (DeviceInfo->PowerManagementStatusAndControlRegister != 0x00) { - if ((PciRead16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister) & (BIT0 | BIT1)) != 0x00) { - PciAnd16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister, (UINT16)~(BIT0 | BIT1)); - // - // If PCI UART was not in D0, then make sure FIFOs are enabled, but do not reset FIFOs - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_FCR, (UINT8)(PcdGet8 (PcdSerialFifoControl) & (B_UART_FCR_FIFOE | B_UART_FCR_FIFO64))); - } - } - - // - // Get PCI Device Info - // - DeviceInfo = (PCI_UART_DEVICE_INFO *) PcdGetPtr (PcdSerialPciDeviceInfo); - - // - // Enable I/O or MMIO in PCI Bridge - // Assume Root Bus Numer is Zero. - // - for (BusNumber = 0; (DeviceInfo + 1)->Device != 0xff; DeviceInfo++) { - // - // Compute PCI Lib Address to PCI to PCI Bridge - // - PciLibAddress = PCI_LIB_ADDRESS (BusNumber, DeviceInfo->Device, DeviceInfo->Function, 0); - - // - // Enable the I/O or MMIO decode windows in the PCI to PCI Bridge - // - PciOr16 ( - PciLibAddress + PCI_COMMAND_OFFSET, - PcdGetBool (PcdSerialUseMmio) ? EFI_PCI_COMMAND_MEMORY_SPACE : EFI_PCI_COMMAND_IO_SPACE - ); - - // - // Force D0 state if a Power Management and Status Register is specified - // - if (DeviceInfo->PowerManagementStatusAndControlRegister != 0x00) { - if ((PciRead16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister) & (BIT0 | BIT1)) != 0x00) { - PciAnd16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister, (UINT16)~(BIT0 | BIT1)); - } - } - - BusNumber = PciRead8 (PciLibAddress + PCI_BRIDGE_SECONDARY_BUS_REGISTER_OFFSET); - } - - return SerialRegisterBase; -} - -/** - Return whether the hardware flow control signal allows writing. - - @param SerialRegisterBase The base address register of UART device. - - @retval TRUE The serial port is writable. - @retval FALSE The serial port is not writable. -**/ -BOOLEAN -SerialPortWritable ( - UINTN SerialRegisterBase - ) -{ - if (PcdGetBool (PcdSerialUseHardwareFlowControl)) { - if (PcdGetBool (PcdSerialDetectCable)) { - // - // Wait for both DSR and CTS to be set - // DSR is set if a cable is connected. - // CTS is set if it is ok to transmit data - // - // DSR CTS Description Action - // === === ======================================== ======== - // 0 0 No cable connected. Wait - // 0 1 No cable connected. Wait - // 1 0 Cable connected, but not clear to send. Wait - // 1 1 Cable connected, and clear to send. Transmit - // - return (BOOLEAN) ((SerialPortReadRegister (SerialRegisterBase, R_UART_MSR) & (B_UART_MSR_DSR | B_UART_MSR_CTS)) == (B_UART_MSR_DSR | B_UART_MSR_CTS)); - } else { - // - // Wait for both DSR and CTS to be set OR for DSR to be clear. - // DSR is set if a cable is connected. - // CTS is set if it is ok to transmit data - // - // DSR CTS Description Action - // === === ======================================== ======== - // 0 0 No cable connected. Transmit - // 0 1 No cable connected. Transmit - // 1 0 Cable connected, but not clear to send. Wait - // 1 1 Cable connected, and clear to send. Transmit - // - return (BOOLEAN) ((SerialPortReadRegister (SerialRegisterBase, R_UART_MSR) & (B_UART_MSR_DSR | B_UART_MSR_CTS)) != (B_UART_MSR_DSR)); - } - } - - return TRUE; -} - -/** - Initialize the serial device hardware. - - If no initialization is required, then return RETURN_SUCCESS. - If the serial device was successfully initialized, then return RETURN_SUCCESS. - If the serial device could not be initialized, then return RETURN_DEVICE_ERROR. - - @retval RETURN_SUCCESS The serial device was initialized. - @retval RETURN_DEVICE_ERROR The serial device could not be initialized. - -**/ -RETURN_STATUS -EFIAPI -SerialPortInitialize ( - VOID - ) -{ - RETURN_STATUS Status; - UINTN SerialRegisterBase; - UINT32 Divisor; - UINT32 CurrentDivisor; - BOOLEAN Initialized; - - // - // Perform platform specific initialization required to enable use of the 16550 device - // at the location specified by PcdSerialUseMmio and PcdSerialRegisterBase. - // - Status = PlatformHookSerialPortInitialize (); - if (RETURN_ERROR (Status)) { - return Status; - } - - // - // Calculate divisor for baud generator - // Ref_Clk_Rate / Baud_Rate / 16 - // - Divisor = PcdGet32 (PcdSerialClockRate) / (PcdGet32 (PcdSerialBaudRate) * 16); - if ((PcdGet32 (PcdSerialClockRate) % (PcdGet32 (PcdSerialBaudRate) * 16)) >= PcdGet32 (PcdSerialBaudRate) * 8) { - Divisor++; - } - - // - // Get the base address of the serial port in either I/O or MMIO space - // - SerialRegisterBase = GetSerialRegisterBase (); - if (SerialRegisterBase ==0) { - return RETURN_DEVICE_ERROR; - } - - // - // See if the serial port is already initialized - // - Initialized = TRUE; - if ((SerialPortReadRegister (SerialRegisterBase, R_UART_LCR) & 0x3F) != (PcdGet8 (PcdSerialLineControl) & 0x3F)) { - Initialized = FALSE; - } - SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_LCR) | B_UART_LCR_DLAB)); - CurrentDivisor = SerialPortReadRegister (SerialRegisterBase, R_UART_BAUD_HIGH) << 8; - CurrentDivisor |= (UINT32) SerialPortReadRegister (SerialRegisterBase, R_UART_BAUD_LOW); - SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_LCR) & ~B_UART_LCR_DLAB)); - if (CurrentDivisor != Divisor) { - Initialized = FALSE; - } - if (Initialized) { - return RETURN_SUCCESS; - } - - // - // Wait for the serial port to be ready. - // Verify that both the transmit FIFO and the shift register are empty. - // - while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)); - - // - // Configure baud rate - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, B_UART_LCR_DLAB); - SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_HIGH, (UINT8) (Divisor >> 8)); - SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_LOW, (UINT8) (Divisor & 0xff)); - - // - // Clear DLAB and configure Data Bits, Parity, and Stop Bits. - // Strip reserved bits from PcdSerialLineControl - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, (UINT8)(PcdGet8 (PcdSerialLineControl) & 0x3F)); - - // - // Enable and reset FIFOs - // Strip reserved bits from PcdSerialFifoControl - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_FCR, 0x00); - SerialPortWriteRegister (SerialRegisterBase, R_UART_FCR, (UINT8)(PcdGet8 (PcdSerialFifoControl) & (B_UART_FCR_FIFOE | B_UART_FCR_FIFO64))); - - // - // Set RTS and DTR in Modem Control Register(MCR) - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, - EFI_SERIAL_REQUEST_TO_SEND | EFI_SERIAL_DATA_TERMINAL_READY); - - return RETURN_SUCCESS; -} - -/** - Write data from buffer to serial device. - - Writes NumberOfBytes data bytes from Buffer to the serial device. - The number of bytes actually written to the serial device is returned. - If the return value is less than NumberOfBytes, then the write operation failed. - - If Buffer is NULL, then ASSERT(). - - If NumberOfBytes is zero, then return 0. - - @param Buffer Pointer to the data buffer to be written. - @param NumberOfBytes Number of bytes to written to the serial device. - - @retval 0 NumberOfBytes is 0. - @retval >0 The number of bytes written to the serial device. - If this value is less than NumberOfBytes, then the write operation failed. - -**/ -UINTN -EFIAPI -SerialPortWrite ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes - ) -{ - UINTN SerialRegisterBase; - UINTN Result; - UINTN Index; - UINTN FifoSize; - - if (Buffer == NULL) { - return 0; - } - - SerialRegisterBase = GetSerialRegisterBase (); - if (SerialRegisterBase ==0) { - return 0; - } - - if (NumberOfBytes == 0) { - // - // Flush the hardware - // - - // - // Wait for both the transmit FIFO and shift register empty. - // - while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)); - - // - // Wait for the hardware flow control signal - // - while (!SerialPortWritable (SerialRegisterBase)); - return 0; - } - - // - // Compute the maximum size of the Tx FIFO - // - FifoSize = 1; - if ((PcdGet8 (PcdSerialFifoControl) & B_UART_FCR_FIFOE) != 0) { - if ((PcdGet8 (PcdSerialFifoControl) & B_UART_FCR_FIFO64) == 0) { - FifoSize = 16; - } else { - FifoSize = PcdGet32 (PcdSerialExtendedTxFifoSize); - } - } - - Result = NumberOfBytes; - while (NumberOfBytes != 0) { - // - // Wait for the serial port to be ready, to make sure both the transmit FIFO - // and shift register empty. - // - while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & B_UART_LSR_TEMT) == 0); - - // - // Fill then entire Tx FIFO - // - for (Index = 0; Index < FifoSize && NumberOfBytes != 0; Index++, NumberOfBytes--, Buffer++) { - // - // Wait for the hardware flow control signal - // - while (!SerialPortWritable (SerialRegisterBase)); - - // - // Write byte to the transmit buffer. - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_TXBUF, *Buffer); - } - } - return Result; -} - -/** - Reads data from a serial device into a buffer. - - @param Buffer Pointer to the data buffer to store the data read from the serial device. - @param NumberOfBytes Number of bytes to read from the serial device. - - @retval 0 NumberOfBytes is 0. - @retval >0 The number of bytes read from the serial device. - If this value is less than NumberOfBytes, then the read operation failed. - -**/ -UINTN -EFIAPI -SerialPortRead ( - OUT UINT8 *Buffer, - IN UINTN NumberOfBytes - ) -{ - UINTN SerialRegisterBase; - UINTN Result; - UINT8 Mcr; - - if (NULL == Buffer) { - return 0; - } - - SerialRegisterBase = GetSerialRegisterBase (); - if (SerialRegisterBase ==0) { - return 0; - } - - Mcr = (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_MCR) & ~B_UART_MCR_RTS); - - for (Result = 0; NumberOfBytes-- != 0; Result++, Buffer++) { - // - // Wait for the serial port to have some data. - // - while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & B_UART_LSR_RXRDY) == 0) { - if (PcdGetBool (PcdSerialUseHardwareFlowControl)) { - // - // Set RTS to let the peer send some data - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, (UINT8)(Mcr | B_UART_MCR_RTS)); - } - } - if (PcdGetBool (PcdSerialUseHardwareFlowControl)) { - // - // Clear RTS to prevent peer from sending data - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, Mcr); - } - - // - // Read byte from the receive buffer. - // - *Buffer = SerialPortReadRegister (SerialRegisterBase, R_UART_RXBUF); - } - - return Result; -} - - -/** - Polls a serial device to see if there is any data waiting to be read. - - Polls a serial device to see if there is any data waiting to be read. - If there is data waiting to be read from the serial device, then TRUE is returned. - If there is no data waiting to be read from the serial device, then FALSE is returned. - - @retval TRUE Data is waiting to be read from the serial device. - @retval FALSE There is no data waiting to be read from the serial device. - -**/ -BOOLEAN -EFIAPI -SerialPortPoll ( - VOID - ) -{ - UINTN SerialRegisterBase; - - SerialRegisterBase = GetSerialRegisterBase (); - if (SerialRegisterBase ==0) { - return FALSE; - } - - // - // Read the serial port status - // - if ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & B_UART_LSR_RXRDY) != 0) { - if (PcdGetBool (PcdSerialUseHardwareFlowControl)) { - // - // Clear RTS to prevent peer from sending data - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_MCR) & ~B_UART_MCR_RTS)); - } - return TRUE; - } - - if (PcdGetBool (PcdSerialUseHardwareFlowControl)) { - // - // Set RTS to let the peer send some data - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_MCR) | B_UART_MCR_RTS)); - } - - return FALSE; -} - -/** - Sets the control bits on a serial device. - - @param Control Sets the bits of Control that are settable. - - @retval RETURN_SUCCESS The new control bits were set on the serial device. - @retval RETURN_UNSUPPORTED The serial device does not support this operation. - @retval RETURN_DEVICE_ERROR The serial device is not functioning correctly. - -**/ -RETURN_STATUS -EFIAPI -SerialPortSetControl ( - IN UINT32 Control - ) -{ - UINTN SerialRegisterBase; - UINT8 Mcr; - - // - // First determine the parameter is invalid. - // - if ((Control & (~(EFI_SERIAL_REQUEST_TO_SEND | EFI_SERIAL_DATA_TERMINAL_READY | - EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE))) != 0) { - return RETURN_UNSUPPORTED; - } - - SerialRegisterBase = GetSerialRegisterBase (); - if (SerialRegisterBase ==0) { - return RETURN_UNSUPPORTED; - } - - // - // Read the Modem Control Register. - // - Mcr = SerialPortReadRegister (SerialRegisterBase, R_UART_MCR); - Mcr &= (~(B_UART_MCR_DTRC | B_UART_MCR_RTS)); - - if ((Control & EFI_SERIAL_DATA_TERMINAL_READY) == EFI_SERIAL_DATA_TERMINAL_READY) { - Mcr |= B_UART_MCR_DTRC; - } - - if ((Control & EFI_SERIAL_REQUEST_TO_SEND) == EFI_SERIAL_REQUEST_TO_SEND) { - Mcr |= B_UART_MCR_RTS; - } - - // - // Write the Modem Control Register. - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, Mcr); - - return RETURN_SUCCESS; -} - -/** - Retrieve the status of the control bits on a serial device. - - @param Control A pointer to return the current control signals from the serial device. - - @retval RETURN_SUCCESS The control bits were read from the serial device. - @retval RETURN_UNSUPPORTED The serial device does not support this operation. - @retval RETURN_DEVICE_ERROR The serial device is not functioning correctly. - -**/ -RETURN_STATUS -EFIAPI -SerialPortGetControl ( - OUT UINT32 *Control - ) -{ - UINTN SerialRegisterBase; - UINT8 Msr; - UINT8 Mcr; - UINT8 Lsr; - - SerialRegisterBase = GetSerialRegisterBase (); - if (SerialRegisterBase ==0) { - return RETURN_UNSUPPORTED; - } - - *Control = 0; - - // - // Read the Modem Status Register. - // - Msr = SerialPortReadRegister (SerialRegisterBase, R_UART_MSR); - - if ((Msr & B_UART_MSR_CTS) == B_UART_MSR_CTS) { - *Control |= EFI_SERIAL_CLEAR_TO_SEND; - } - - if ((Msr & B_UART_MSR_DSR) == B_UART_MSR_DSR) { - *Control |= EFI_SERIAL_DATA_SET_READY; - } - - if ((Msr & B_UART_MSR_RI) == B_UART_MSR_RI) { - *Control |= EFI_SERIAL_RING_INDICATE; - } - - if ((Msr & B_UART_MSR_DCD) == B_UART_MSR_DCD) { - *Control |= EFI_SERIAL_CARRIER_DETECT; - } - - // - // Read the Modem Control Register. - // - Mcr = SerialPortReadRegister (SerialRegisterBase, R_UART_MCR); - - if ((Mcr & B_UART_MCR_DTRC) == B_UART_MCR_DTRC) { - *Control |= EFI_SERIAL_DATA_TERMINAL_READY; - } - - if ((Mcr & B_UART_MCR_RTS) == B_UART_MCR_RTS) { - *Control |= EFI_SERIAL_REQUEST_TO_SEND; - } - - if (PcdGetBool (PcdSerialUseHardwareFlowControl)) { - *Control |= EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE; - } - - // - // Read the Line Status Register. - // - Lsr = SerialPortReadRegister (SerialRegisterBase, R_UART_LSR); - - if ((Lsr & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) == (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) { - *Control |= EFI_SERIAL_OUTPUT_BUFFER_EMPTY; - } - - if ((Lsr & B_UART_LSR_RXRDY) == 0) { - *Control |= EFI_SERIAL_INPUT_BUFFER_EMPTY; - } - - return RETURN_SUCCESS; -} - -/** - Sets the baud rate, receive FIFO depth, transmit/receive time out, parity, - data bits, and stop bits on a serial device. - - @param BaudRate The requested baud rate. A BaudRate value of 0 will use the - device's default interface speed. - On output, the value actually set. - @param ReceiveFifoDepth The requested depth of the FIFO on the receive side of the - serial interface. A ReceiveFifoDepth value of 0 will use - the device's default FIFO depth. - On output, the value actually set. - @param Timeout The requested time out for a single character in microseconds. - This timeout applies to both the transmit and receive side of the - interface. A Timeout value of 0 will use the device's default time - out value. - On output, the value actually set. - @param Parity The type of parity to use on this serial device. A Parity value of - DefaultParity will use the device's default parity value. - On output, the value actually set. - @param DataBits The number of data bits to use on the serial device. A DataBits - value of 0 will use the device's default data bit setting. - On output, the value actually set. - @param StopBits The number of stop bits to use on this serial device. A StopBits - value of DefaultStopBits will use the device's default number of - stop bits. - On output, the value actually set. - - @retval RETURN_SUCCESS The new attributes were set on the serial device. - @retval RETURN_UNSUPPORTED The serial device does not support this operation. - @retval RETURN_INVALID_PARAMETER One or more of the attributes has an unsupported value. - @retval RETURN_DEVICE_ERROR The serial device is not functioning correctly. - -**/ -RETURN_STATUS -EFIAPI -SerialPortSetAttributes ( - IN OUT UINT64 *BaudRate, - IN OUT UINT32 *ReceiveFifoDepth, - IN OUT UINT32 *Timeout, - IN OUT EFI_PARITY_TYPE *Parity, - IN OUT UINT8 *DataBits, - IN OUT EFI_STOP_BITS_TYPE *StopBits - ) -{ - UINTN SerialRegisterBase; - UINT32 SerialBaudRate; - UINTN Divisor; - UINT8 Lcr; - UINT8 LcrData; - UINT8 LcrParity; - UINT8 LcrStop; - - SerialRegisterBase = GetSerialRegisterBase (); - if (SerialRegisterBase ==0) { - return RETURN_UNSUPPORTED; - } - - // - // Check for default settings and fill in actual values. - // - if (*BaudRate == 0) { - *BaudRate = PcdGet32 (PcdSerialBaudRate); - } - SerialBaudRate = (UINT32) *BaudRate; - - if (*DataBits == 0) { - LcrData = (UINT8) (PcdGet8 (PcdSerialLineControl) & 0x3); - *DataBits = LcrData + 5; - } else { - if ((*DataBits < 5) || (*DataBits > 8)) { - return RETURN_INVALID_PARAMETER; - } - // - // Map 5..8 to 0..3 - // - LcrData = (UINT8) (*DataBits - (UINT8) 5); - } - - if (*Parity == DefaultParity) { - LcrParity = (UINT8) ((PcdGet8 (PcdSerialLineControl) >> 3) & 0x7); - switch (LcrParity) { - case 0: - *Parity = NoParity; - break; - - case 3: - *Parity = EvenParity; - break; - - case 1: - *Parity = OddParity; - break; - - case 7: - *Parity = SpaceParity; - break; - - case 5: - *Parity = MarkParity; - break; - - default: - break; - } - } else { - switch (*Parity) { - case NoParity: - LcrParity = 0; - break; - - case EvenParity: - LcrParity = 3; - break; - - case OddParity: - LcrParity = 1; - break; - - case SpaceParity: - LcrParity = 7; - break; - - case MarkParity: - LcrParity = 5; - break; - - default: - return RETURN_INVALID_PARAMETER; - } - } - - if (*StopBits == DefaultStopBits) { - LcrStop = (UINT8) ((PcdGet8 (PcdSerialLineControl) >> 2) & 0x1); - switch (LcrStop) { - case 0: - *StopBits = OneStopBit; - break; - - case 1: - if (*DataBits == 5) { - *StopBits = OneFiveStopBits; - } else { - *StopBits = TwoStopBits; - } - break; - - default: - break; - } - } else { - switch (*StopBits) { - case OneStopBit: - LcrStop = 0; - break; - - case OneFiveStopBits: - case TwoStopBits: - LcrStop = 1; - break; - - default: - return RETURN_INVALID_PARAMETER; - } - } - - // - // Calculate divisor for baud generator - // Ref_Clk_Rate / Baud_Rate / 16 - // - Divisor = PcdGet32 (PcdSerialClockRate) / (SerialBaudRate * 16); - if ((PcdGet32 (PcdSerialClockRate) % (SerialBaudRate * 16)) >= SerialBaudRate * 8) { - Divisor++; - } - - // - // Configure baud rate - // - SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, B_UART_LCR_DLAB); - SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_HIGH, (UINT8) (Divisor >> 8)); - SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_LOW, (UINT8) (Divisor & 0xff)); - - // - // Clear DLAB and configure Data Bits, Parity, and Stop Bits. - // Strip reserved bits from line control value - // - Lcr = (UINT8) ((LcrParity << 3) | (LcrStop << 2) | LcrData); - SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, (UINT8) (Lcr & 0x3F)); - - return RETURN_SUCCESS; -} - diff --git a/CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf b/CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf deleted file mode 100644 index 5dd9518d55..0000000000 --- a/CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf +++ /dev/null @@ -1,42 +0,0 @@ -## @file -# SerialPortLib instance for 16550 UART. -# -# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = BaseSerialPortLib16550 - MODULE_UNI_FILE = BaseSerialPortLib16550.uni - FILE_GUID = 9E7C00CF-355A-4d4e-BF60-0428CFF95540 - MODULE_TYPE = BASE - VERSION_STRING = 1.1 - LIBRARY_CLASS = SerialPortLib - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - -[LibraryClasses] - PcdLib - IoLib - PlatformHookLib - PciLib - -[Sources] - BaseSerialPortLib16550.c - -[Pcd] - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseHardwareFlowControl ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialDetectCable ## SOMETIMES_CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialLineControl ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialFifoControl ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialPciDeviceInfo ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialExtendedTxFifoSize ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride ## CONSUMES diff --git a/CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.uni b/CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.uni deleted file mode 100644 index e8b178d71a..0000000000 --- a/CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.uni +++ /dev/null @@ -1,16 +0,0 @@ -// /** @file -// SerialPortLib instance for 16550 UART. -// -// SerialPortLib instance for 16550 UART. -// -// Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
-// -// SPDX-License-Identifier: BSD-2-Clause-Patent -// -// **/ - - -#string STR_MODULE_ABSTRACT #language en-US "SerialPortLib instance for 16550 UART" - -#string STR_MODULE_DESCRIPTION #language en-US "SerialPortLib instance for 16550 UART." - diff --git a/CorebootModulePkg/Library/CbParseLib/CbParseLib.c b/CorebootModulePkg/Library/CbParseLib/CbParseLib.c deleted file mode 100644 index 38f31bd975..0000000000 --- a/CorebootModulePkg/Library/CbParseLib/CbParseLib.c +++ /dev/null @@ -1,721 +0,0 @@ -/** @file - This library will parse the coreboot table in memory and extract those required - information. - - Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "Coreboot.h" - - -/** - Convert a packed value from cbuint64 to a UINT64 value. - - @param val The pointer to packed data. - - @return the UNIT64 value after conversion. - -**/ -UINT64 -cb_unpack64 ( - IN struct cbuint64 val - ) -{ - return LShiftU64 (val.hi, 32) | val.lo; -} - - -/** - Returns the sum of all elements in a buffer of 16-bit values. During - calculation, the carry bits are also been added. - - @param Buffer The pointer to the buffer to carry out the sum operation. - @param Length The size, in bytes, of Buffer. - - @return Sum The sum of Buffer with carry bits included during additions. - -**/ -UINT16 -CbCheckSum16 ( - IN UINT16 *Buffer, - IN UINTN Length - ) -{ - UINT32 Sum, TmpValue; - UINTN Idx; - UINT8 *TmpPtr; - - Sum = 0; - TmpPtr = (UINT8 *)Buffer; - for(Idx = 0; Idx < Length; Idx++) { - TmpValue = TmpPtr[Idx]; - if (Idx % 2 == 1) { - TmpValue <<= 8; - } - - Sum += TmpValue; - - // Wrap - if (Sum >= 0x10000) { - Sum = (Sum + (Sum >> 16)) & 0xFFFF; - } - } - - return (UINT16)((~Sum) & 0xFFFF); -} - - -/** - Find coreboot record with given Tag from the memory Start in 4096 - bytes range. - - @param Start The start memory to be searched in - @param Tag The tag id to be found - - @retval NULL The Tag is not found. - @retval Others The pointer to the record found. - -**/ -VOID * -EFIAPI -FindCbTag ( - IN VOID *Start, - IN UINT32 Tag - ) -{ - struct cb_header *Header; - struct cb_record *Record; - UINT8 *TmpPtr; - UINT8 *TagPtr; - UINTN Idx; - UINT16 CheckSum; - - Header = NULL; - TmpPtr = (UINT8 *)Start; - for (Idx = 0; Idx < 4096; Idx += 16, TmpPtr += 16) { - Header = (struct cb_header *)TmpPtr; - if (Header->signature == CB_HEADER_SIGNATURE) { - break; - } - } - - if (Idx >= 4096) { - return NULL; - } - - if ((Header == NULL) || (Header->table_bytes == 0)) { - return NULL; - } - - // - // Check the checksum of the coreboot table header - // - CheckSum = CbCheckSum16 ((UINT16 *)Header, sizeof (*Header)); - if (CheckSum != 0) { - DEBUG ((EFI_D_ERROR, "Invalid coreboot table header checksum\n")); - return NULL; - } - - CheckSum = CbCheckSum16 ((UINT16 *)(TmpPtr + sizeof (*Header)), Header->table_bytes); - if (CheckSum != Header->table_checksum) { - DEBUG ((EFI_D_ERROR, "Incorrect checksum of all the coreboot table entries\n")); - return NULL; - } - - TagPtr = NULL; - TmpPtr += Header->header_bytes; - for (Idx = 0; Idx < Header->table_entries; Idx++) { - Record = (struct cb_record *)TmpPtr; - if (Record->tag == CB_TAG_FORWARD) { - TmpPtr = (VOID *)(UINTN)((struct cb_forward *)(UINTN)Record)->forward; - if (Tag == CB_TAG_FORWARD) { - return TmpPtr; - } else { - return FindCbTag (TmpPtr, Tag); - } - } - if (Record->tag == Tag) { - TagPtr = TmpPtr; - break; - } - TmpPtr += Record->size; - } - - return TagPtr; -} - - -/** - Find the given table with TableId from the given coreboot memory Root. - - @param Root The coreboot memory table to be searched in - @param TableId Table id to be found - @param pMemTable To save the base address of the memory table found - @param pMemTableSize To save the size of memory table found - - @retval RETURN_SUCCESS Successfully find out the memory table. - @retval RETURN_INVALID_PARAMETER Invalid input parameters. - @retval RETURN_NOT_FOUND Failed to find the memory table. - -**/ -RETURN_STATUS -EFIAPI -FindCbMemTable ( - IN struct cbmem_root *Root, - IN UINT32 TableId, - OUT VOID **pMemTable, - OUT UINT32 *pMemTableSize - ) -{ - UINTN Idx; - BOOLEAN IsImdEntry; - struct cbmem_entry *Entries; - - if ((Root == NULL) || (pMemTable == NULL)) { - return RETURN_INVALID_PARAMETER; - } - // - // Check if the entry is CBMEM or IMD - // and handle them separately - // - Entries = Root->entries; - if (Entries[0].magic == CBMEM_ENTRY_MAGIC) { - IsImdEntry = FALSE; - } else { - Entries = (struct cbmem_entry *)((struct imd_root *)Root)->entries; - if (Entries[0].magic == IMD_ENTRY_MAGIC) { - IsImdEntry = TRUE; - } else { - return RETURN_NOT_FOUND; - } - } - - for (Idx = 0; Idx < Root->num_entries; Idx++) { - if (Entries[Idx].id == TableId) { - if (IsImdEntry) { - *pMemTable = (VOID *) ((UINTN)Entries[Idx].start + (UINTN)Root); - } else { - *pMemTable = (VOID *) (UINTN)Entries[Idx].start; - } - if (pMemTableSize != NULL) { - *pMemTableSize = Entries[Idx].size; - } - - DEBUG ((EFI_D_INFO, "Find CbMemTable Id 0x%x, base %p, size 0x%x\n", - TableId, *pMemTable, Entries[Idx].size)); - return RETURN_SUCCESS; - } - } - - return RETURN_NOT_FOUND; -} - - -/** - Acquire the memory information from the coreboot table in memory. - - @param MemInfoCallback The callback routine - @param pParam Pointer to the callback routine parameter - - @retval RETURN_SUCCESS Successfully find out the memory information. - @retval RETURN_NOT_FOUND Failed to find the memory information. - -**/ -RETURN_STATUS -EFIAPI -CbParseMemoryInfo ( - IN CB_MEM_INFO_CALLBACK MemInfoCallback, - IN VOID *pParam - ) -{ - struct cb_memory *rec; - struct cb_memory_range *Range; - UINT64 Start; - UINT64 Size; - UINTN Index; - - // - // Get the coreboot memory table - // - rec = (struct cb_memory *)FindCbTag (0, CB_TAG_MEMORY); - if (rec == NULL) { - rec = (struct cb_memory *)FindCbTag ((VOID *)(UINTN)PcdGet32 (PcdCbHeaderPointer), CB_TAG_MEMORY); - } - - if (rec == NULL) { - return RETURN_NOT_FOUND; - } - - for (Index = 0; Index < MEM_RANGE_COUNT(rec); Index++) { - Range = MEM_RANGE_PTR(rec, Index); - Start = cb_unpack64(Range->start); - Size = cb_unpack64(Range->size); - DEBUG ((EFI_D_INFO, "%d. %016lx - %016lx [%02x]\n", - Index, Start, Start + Size - 1, Range->type)); - - MemInfoCallback (Start, Size, Range->type, pParam); - } - - return RETURN_SUCCESS; -} - - -/** - Acquire the coreboot memory table with the given table id - - @param TableId Table id to be searched - @param pMemTable Pointer to the base address of the memory table - @param pMemTableSize Pointer to the size of the memory table - - @retval RETURN_SUCCESS Successfully find out the memory table. - @retval RETURN_INVALID_PARAMETER Invalid input parameters. - @retval RETURN_NOT_FOUND Failed to find the memory table. - -**/ -RETURN_STATUS -EFIAPI -CbParseCbMemTable ( - IN UINT32 TableId, - OUT VOID **pMemTable, - OUT UINT32 *pMemTableSize - ) -{ - struct cb_memory *rec; - struct cb_memory_range *Range; - UINT64 Start; - UINT64 Size; - UINTN Index; - - if (pMemTable == NULL) { - return RETURN_INVALID_PARAMETER; - } - *pMemTable = NULL; - - // - // Get the coreboot memory table - // - rec = (struct cb_memory *)FindCbTag (0, CB_TAG_MEMORY); - if (rec == NULL) { - rec = (struct cb_memory *)FindCbTag ((VOID *)(UINTN)PcdGet32 (PcdCbHeaderPointer), CB_TAG_MEMORY); - } - - if (rec == NULL) { - return RETURN_NOT_FOUND; - } - - for (Index = 0; Index < MEM_RANGE_COUNT(rec); Index++) { - Range = MEM_RANGE_PTR(rec, Index); - Start = cb_unpack64(Range->start); - Size = cb_unpack64(Range->size); - - if ((Range->type == CB_MEM_TABLE) && (Start > 0x1000)) { - if (FindCbMemTable ((struct cbmem_root *)(UINTN)(Start + Size - DYN_CBMEM_ALIGN_SIZE), TableId, pMemTable, pMemTableSize) == RETURN_SUCCESS) - return RETURN_SUCCESS; - } - } - - return RETURN_NOT_FOUND; -} - - -/** - Acquire the acpi table from coreboot - - @param pMemTable Pointer to the base address of the memory table - @param pMemTableSize Pointer to the size of the memory table - - @retval RETURN_SUCCESS Successfully find out the memory table. - @retval RETURN_INVALID_PARAMETER Invalid input parameters. - @retval RETURN_NOT_FOUND Failed to find the memory table. - -**/ -RETURN_STATUS -EFIAPI -CbParseAcpiTable ( - OUT VOID **pMemTable, - OUT UINT32 *pMemTableSize - ) -{ - return CbParseCbMemTable (SIGNATURE_32 ('I', 'P', 'C', 'A'), pMemTable, pMemTableSize); -} - -/** - Acquire the smbios table from coreboot - - @param pMemTable Pointer to the base address of the memory table - @param pMemTableSize Pointer to the size of the memory table - - @retval RETURN_SUCCESS Successfully find out the memory table. - @retval RETURN_INVALID_PARAMETER Invalid input parameters. - @retval RETURN_NOT_FOUND Failed to find the memory table. - -**/ -RETURN_STATUS -EFIAPI -CbParseSmbiosTable ( - OUT VOID **pMemTable, - OUT UINT32 *pMemTableSize - ) -{ - return CbParseCbMemTable (SIGNATURE_32 ('T', 'B', 'M', 'S'), pMemTable, pMemTableSize); -} - -/** - Find the required fadt information - - @param pPmCtrlReg Pointer to the address of power management control register - @param pPmTimerReg Pointer to the address of power management timer register - @param pResetReg Pointer to the address of system reset register - @param pResetValue Pointer to the value to be written to the system reset register - @param pPmEvtReg Pointer to the address of power management event register - @param pPmGpeEnReg Pointer to the address of power management GPE enable register - - @retval RETURN_SUCCESS Successfully find out all the required fadt information. - @retval RETURN_NOT_FOUND Failed to find the fadt table. - -**/ -RETURN_STATUS -EFIAPI -CbParseFadtInfo ( - OUT UINTN *pPmCtrlReg, - OUT UINTN *pPmTimerReg, - OUT UINTN *pResetReg, - OUT UINTN *pResetValue, - OUT UINTN *pPmEvtReg, - OUT UINTN *pPmGpeEnReg - ) -{ - EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp; - EFI_ACPI_DESCRIPTION_HEADER *Rsdt; - UINT32 *Entry32; - UINTN Entry32Num; - EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt; - EFI_ACPI_DESCRIPTION_HEADER *Xsdt; - UINT64 *Entry64; - UINTN Entry64Num; - UINTN Idx; - RETURN_STATUS Status; - - Rsdp = NULL; - Status = RETURN_SUCCESS; - - Status = CbParseAcpiTable ((VOID **)&Rsdp, NULL); - if (RETURN_ERROR(Status)) { - return Status; - } - - if (Rsdp == NULL) { - return RETURN_NOT_FOUND; - } - - DEBUG ((EFI_D_INFO, "Find Rsdp at %p\n", Rsdp)); - DEBUG ((EFI_D_INFO, "Find Rsdt 0x%x, Xsdt 0x%lx\n", Rsdp->RsdtAddress, Rsdp->XsdtAddress)); - - // - // Search Rsdt First - // - Rsdt = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)(Rsdp->RsdtAddress); - if (Rsdt != NULL) { - Entry32 = (UINT32 *)(Rsdt + 1); - Entry32Num = (Rsdt->Length - sizeof(EFI_ACPI_DESCRIPTION_HEADER)) >> 2; - for (Idx = 0; Idx < Entry32Num; Idx++) { - if (*(UINT32 *)(UINTN)(Entry32[Idx]) == EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { - Fadt = (EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *)(UINTN)(Entry32[Idx]); - if (pPmCtrlReg != NULL) { - *pPmCtrlReg = Fadt->Pm1aCntBlk; - } - DEBUG ((EFI_D_INFO, "PmCtrl Reg 0x%x\n", Fadt->Pm1aCntBlk)); - - if (pPmTimerReg != NULL) { - *pPmTimerReg = Fadt->PmTmrBlk; - } - DEBUG ((EFI_D_INFO, "PmTimer Reg 0x%x\n", Fadt->PmTmrBlk)); - - if (pResetReg != NULL) { - *pResetReg = (UINTN)Fadt->ResetReg.Address; - } - DEBUG ((EFI_D_INFO, "Reset Reg 0x%lx\n", Fadt->ResetReg.Address)); - - if (pResetValue != NULL) { - *pResetValue = Fadt->ResetValue; - } - DEBUG ((EFI_D_INFO, "Reset Value 0x%x\n", Fadt->ResetValue)); - - if (pPmEvtReg != NULL) { - *pPmEvtReg = Fadt->Pm1aEvtBlk; - DEBUG ((EFI_D_INFO, "PmEvt Reg 0x%x\n", Fadt->Pm1aEvtBlk)); - } - - if (pPmGpeEnReg != NULL) { - *pPmGpeEnReg = Fadt->Gpe0Blk + Fadt->Gpe0BlkLen / 2; - DEBUG ((EFI_D_INFO, "PmGpeEn Reg 0x%x\n", *pPmGpeEnReg)); - } - - // - // Verify values for proper operation - // - ASSERT(Fadt->Pm1aCntBlk != 0); - ASSERT(Fadt->PmTmrBlk != 0); - ASSERT(Fadt->ResetReg.Address != 0); - ASSERT(Fadt->Pm1aEvtBlk != 0); - ASSERT(Fadt->Gpe0Blk != 0); - - DEBUG_CODE_BEGIN (); - BOOLEAN SciEnabled; - - // - // Check the consistency of SCI enabling - // - - // - // Get SCI_EN value - // - if (Fadt->Pm1CntLen == 4) { - SciEnabled = (IoRead32 (Fadt->Pm1aCntBlk) & BIT0)? TRUE : FALSE; - } else { - // - // if (Pm1CntLen == 2), use 16 bit IO read; - // if (Pm1CntLen != 2 && Pm1CntLen != 4), use 16 bit IO read as a fallback - // - SciEnabled = (IoRead16 (Fadt->Pm1aCntBlk) & BIT0)? TRUE : FALSE; - } - - if (!(Fadt->Flags & EFI_ACPI_5_0_HW_REDUCED_ACPI) && - (Fadt->SmiCmd == 0) && - !SciEnabled) { - // - // The ACPI enabling status is inconsistent: SCI is not enabled but ACPI - // table does not provide a means to enable it through FADT->SmiCmd - // - DEBUG ((DEBUG_ERROR, "ERROR: The ACPI enabling status is inconsistent: SCI is not" - " enabled but the ACPI table does not provide a means to enable it through FADT->SmiCmd." - " This may cause issues in OS.\n")); - ASSERT (FALSE); - } - DEBUG_CODE_END (); - return RETURN_SUCCESS; - } - } - } - - // - // Search Xsdt Second - // - Xsdt = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)(Rsdp->XsdtAddress); - if (Xsdt != NULL) { - Entry64 = (UINT64 *)(Xsdt + 1); - Entry64Num = (Xsdt->Length - sizeof(EFI_ACPI_DESCRIPTION_HEADER)) >> 3; - for (Idx = 0; Idx < Entry64Num; Idx++) { - if (*(UINT32 *)(UINTN)(Entry64[Idx]) == EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { - Fadt = (EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *)(UINTN)(Entry64[Idx]); - if (pPmCtrlReg) - *pPmCtrlReg = Fadt->Pm1aCntBlk; - DEBUG ((EFI_D_ERROR, "PmCtrl Reg 0x%x\n", Fadt->Pm1aCntBlk)); - - if (pPmTimerReg) - *pPmTimerReg = Fadt->PmTmrBlk; - DEBUG ((EFI_D_ERROR, "PmTimer Reg 0x%x\n", Fadt->PmTmrBlk)); - - if (pResetReg) - *pResetReg = (UINTN)Fadt->ResetReg.Address; - DEBUG ((EFI_D_ERROR, "Reset Reg 0x%lx\n", Fadt->ResetReg.Address)); - - if (pResetValue) - *pResetValue = Fadt->ResetValue; - DEBUG ((EFI_D_ERROR, "Reset Value 0x%x\n", Fadt->ResetValue)); - - if (pPmEvtReg != NULL) { - *pPmEvtReg = Fadt->Pm1aEvtBlk; - DEBUG ((EFI_D_INFO, "PmEvt Reg 0x%x\n", Fadt->Pm1aEvtBlk)); - } - - if (pPmGpeEnReg != NULL) { - *pPmGpeEnReg = Fadt->Gpe0Blk + Fadt->Gpe0BlkLen / 2; - DEBUG ((EFI_D_INFO, "PmGpeEn Reg 0x%x\n", *pPmGpeEnReg)); - } - return RETURN_SUCCESS; - } - } - } - - return RETURN_NOT_FOUND; -} - -/** - Find the serial port information - - @param pRegBase Pointer to the base address of serial port registers - @param pRegAccessType Pointer to the access type of serial port registers - @param pRegWidth Pointer to the register width in bytes - @param pBaudrate Pointer to the serial port baudrate - @param pInputHertz Pointer to the input clock frequency - @param pUartPciAddr Pointer to the UART PCI bus, dev and func address - - @retval RETURN_SUCCESS Successfully find the serial port information. - @retval RETURN_NOT_FOUND Failed to find the serial port information . - -**/ -RETURN_STATUS -EFIAPI -CbParseSerialInfo ( - OUT UINT32 *pRegBase, - OUT UINT32 *pRegAccessType, - OUT UINT32 *pRegWidth, - OUT UINT32 *pBaudrate, - OUT UINT32 *pInputHertz, - OUT UINT32 *pUartPciAddr - ) -{ - struct cb_serial *CbSerial; - - CbSerial = FindCbTag (0, CB_TAG_SERIAL); - if (CbSerial == NULL) { - CbSerial = FindCbTag ((VOID *)(UINTN)PcdGet32 (PcdCbHeaderPointer), CB_TAG_SERIAL); - } - - if (CbSerial == NULL) { - return RETURN_NOT_FOUND; - } - - if (pRegBase != NULL) { - *pRegBase = CbSerial->baseaddr; - } - - if (pRegWidth != NULL) { - *pRegWidth = CbSerial->regwidth; - } - - if (pRegAccessType != NULL) { - *pRegAccessType = CbSerial->type; - } - - if (pBaudrate != NULL) { - *pBaudrate = CbSerial->baud; - } - - if (pInputHertz != NULL) { - *pInputHertz = CbSerial->input_hertz; - } - - if (pUartPciAddr != NULL) { - *pUartPciAddr = CbSerial->uart_pci_addr; - } - - return RETURN_SUCCESS; -} - -/** - Search for the coreboot table header - - @param Level Level of the search depth - @param HeaderPtr Pointer to the pointer of coreboot table header - - @retval RETURN_SUCCESS Successfully find the coreboot table header . - @retval RETURN_NOT_FOUND Failed to find the coreboot table header . - -**/ -RETURN_STATUS -EFIAPI -CbParseGetCbHeader ( - IN UINTN Level, - OUT VOID **HeaderPtr - ) -{ - UINTN Index; - VOID *TempPtr; - - if (HeaderPtr == NULL) { - return RETURN_NOT_FOUND; - } - - TempPtr = NULL; - for (Index = 0; Index < Level; Index++) { - TempPtr = FindCbTag (TempPtr, CB_TAG_FORWARD); - if (TempPtr == NULL) { - break; - } - } - - if ((Index >= Level) && (TempPtr != NULL)) { - *HeaderPtr = TempPtr; - return RETURN_SUCCESS; - } - - return RETURN_NOT_FOUND; -} - -/** - Find the video frame buffer information - - @param pFbInfo Pointer to the FRAME_BUFFER_INFO structure - - @retval RETURN_SUCCESS Successfully find the video frame buffer information. - @retval RETURN_NOT_FOUND Failed to find the video frame buffer information . - -**/ -RETURN_STATUS -EFIAPI -CbParseFbInfo ( - OUT FRAME_BUFFER_INFO *pFbInfo - ) -{ - struct cb_framebuffer *CbFbRec; - - if (pFbInfo == NULL) { - return RETURN_INVALID_PARAMETER; - } - - CbFbRec = FindCbTag (0, CB_TAG_FRAMEBUFFER); - if (CbFbRec == NULL) { - CbFbRec = FindCbTag ((VOID *)(UINTN)PcdGet32 (PcdCbHeaderPointer), CB_TAG_FRAMEBUFFER); - } - - if (CbFbRec == NULL) { - return RETURN_NOT_FOUND; - } - - DEBUG ((EFI_D_INFO, "Found coreboot video frame buffer information\n")); - DEBUG ((EFI_D_INFO, "physical_address: 0x%lx\n", CbFbRec->physical_address)); - DEBUG ((EFI_D_INFO, "x_resolution: 0x%x\n", CbFbRec->x_resolution)); - DEBUG ((EFI_D_INFO, "y_resolution: 0x%x\n", CbFbRec->y_resolution)); - DEBUG ((EFI_D_INFO, "bits_per_pixel: 0x%x\n", CbFbRec->bits_per_pixel)); - DEBUG ((EFI_D_INFO, "bytes_per_line: 0x%x\n", CbFbRec->bytes_per_line)); - - DEBUG ((EFI_D_INFO, "red_mask_size: 0x%x\n", CbFbRec->red_mask_size)); - DEBUG ((EFI_D_INFO, "red_mask_pos: 0x%x\n", CbFbRec->red_mask_pos)); - DEBUG ((EFI_D_INFO, "green_mask_size: 0x%x\n", CbFbRec->green_mask_size)); - DEBUG ((EFI_D_INFO, "green_mask_pos: 0x%x\n", CbFbRec->green_mask_pos)); - DEBUG ((EFI_D_INFO, "blue_mask_size: 0x%x\n", CbFbRec->blue_mask_size)); - DEBUG ((EFI_D_INFO, "blue_mask_pos: 0x%x\n", CbFbRec->blue_mask_pos)); - DEBUG ((EFI_D_INFO, "reserved_mask_size: 0x%x\n", CbFbRec->reserved_mask_size)); - DEBUG ((EFI_D_INFO, "reserved_mask_pos: 0x%x\n", CbFbRec->reserved_mask_pos)); - - pFbInfo->LinearFrameBuffer = CbFbRec->physical_address; - pFbInfo->HorizontalResolution = CbFbRec->x_resolution; - pFbInfo->VerticalResolution = CbFbRec->y_resolution; - pFbInfo->BitsPerPixel = CbFbRec->bits_per_pixel; - pFbInfo->BytesPerScanLine = (UINT16)CbFbRec->bytes_per_line; - pFbInfo->Red.Mask = (1 << CbFbRec->red_mask_size) - 1; - pFbInfo->Red.Position = CbFbRec->red_mask_pos; - pFbInfo->Green.Mask = (1 << CbFbRec->green_mask_size) - 1; - pFbInfo->Green.Position = CbFbRec->green_mask_pos; - pFbInfo->Blue.Mask = (1 << CbFbRec->blue_mask_size) - 1; - pFbInfo->Blue.Position = CbFbRec->blue_mask_pos; - pFbInfo->Reserved.Mask = (1 << CbFbRec->reserved_mask_size) - 1; - pFbInfo->Reserved.Position = CbFbRec->reserved_mask_pos; - - return RETURN_SUCCESS; -} - diff --git a/CorebootModulePkg/Library/CbParseLib/CbParseLib.inf b/CorebootModulePkg/Library/CbParseLib/CbParseLib.inf deleted file mode 100644 index d31fc7bc61..0000000000 --- a/CorebootModulePkg/Library/CbParseLib/CbParseLib.inf +++ /dev/null @@ -1,39 +0,0 @@ -## @file -# Coreboot Table Parse Library. -# -# Copyright (c) 2014, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = CbParseLib - FILE_GUID = 49EDFC9E-5945-4386-9C0B-C9B60CD45BB1 - MODULE_TYPE = BASE - VERSION_STRING = 1.0 - LIBRARY_CLASS = CbParseLib - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 -# - -[Sources] - CbParseLib.c - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - CorebootModulePkg/CorebootModulePkg.dec - -[LibraryClasses] - BaseLib - BaseMemoryLib - IoLib - DebugLib - PcdLib - -[Pcd] - gUefiCorebootModulePkgTokenSpaceGuid.PcdCbHeaderPointer \ No newline at end of file diff --git a/CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.c b/CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.c deleted file mode 100644 index b2db9dc9c3..0000000000 --- a/CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.c +++ /dev/null @@ -1,29 +0,0 @@ -/** @file - Include all platform specific features which can be customized by IBV/OEM. - -Copyright (c) 2016, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include -#include -#include -#include - -/** - Parse platform specific information from coreboot. - - @retval RETURN_SUCCESS The platform specific coreboot support succeeded. - @retval RETURN_DEVICE_ERROR The platform specific coreboot support could not be completed. - -**/ -EFI_STATUS -EFIAPI -CbParsePlatformInfo ( - VOID - ) -{ - return EFI_SUCCESS; -} - diff --git a/CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.inf b/CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.inf deleted file mode 100644 index 91c5f1d71b..0000000000 --- a/CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.inf +++ /dev/null @@ -1,29 +0,0 @@ -## @file -# Include all platform specific features which can be customized by IBV/OEM. -# -# Copyright (c) 2016, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = CbPlatformSupportLib - MODULE_UNI_FILE = CbPlatformSupportLibNull.uni - FILE_GUID = B42AA265-00CA-4d4b-AC14-DBD5268E1BC7 - MODULE_TYPE = BASE - VERSION_STRING = 1.0 - LIBRARY_CLASS = CbPlatformSupportLib - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 EBC -# - -[Sources] - CbPlatformSupportLibNull.c - -[Packages] - MdePkg/MdePkg.dec - CorebootModulePkg/CorebootModulePkg.dec diff --git a/CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.uni b/CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.uni deleted file mode 100644 index c1f5aa3a7f..0000000000 --- a/CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.uni +++ /dev/null @@ -1,14 +0,0 @@ -// /** @file -// NULL implementation for CbPlatformSupportLib library class interfaces. -// -// Copyright (c) 2016, Intel Corporation. All rights reserved.
-// -// SPDX-License-Identifier: BSD-2-Clause-Patent -// -// **/ - - -#string STR_MODULE_ABSTRACT #language en-US "NULL implementation for CbPlatformSupportLib library class interfaces" - -#string STR_MODULE_DESCRIPTION #language en-US "NULL implementation for CbPlatformSupportLib library class interfaces." - diff --git a/CorebootModulePkg/SataControllerDxe/ComponentName.c b/CorebootModulePkg/SataControllerDxe/ComponentName.c deleted file mode 100644 index 4556d70bf3..0000000000 --- a/CorebootModulePkg/SataControllerDxe/ComponentName.c +++ /dev/null @@ -1,170 +0,0 @@ -/** @file - UEFI Component Name(2) protocol implementation for Sata Controller driver. - - Copyright (c) 2011, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include "SataController.h" - -// -/// EFI Component Name Protocol -/// -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gSataControllerComponentName = { - SataControllerComponentNameGetDriverName, - SataControllerComponentNameGetControllerName, - "eng" -}; - -// -/// EFI Component Name 2 Protocol -/// -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SataControllerComponentNameGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SataControllerComponentNameGetControllerName, - "en" -}; - -// -/// Driver Name Strings -/// -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerDriverNameTable[] = { - { - "eng;en", - (CHAR16 *)L"Sata Controller Init Driver" - }, - { - NULL, - NULL - } -}; - -/// -/// Controller Name Strings -/// -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerControllerNameTable[] = { - { - "eng;en", - (CHAR16 *)L"Sata Controller" - }, - { - NULL, - NULL - } -}; - -/** - Retrieves a Unicode string that is the user readable name of the UEFI Driver. - - @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. - @param Language A pointer to a three character ISO 639-2 language identifier. - This is the language of the driver name that that the caller - is requesting, and it must match one of the languages specified - in SupportedLanguages. The number of languages supported by a - driver is up to the driver writer. - @param DriverName A pointer to the Unicode string to return. This Unicode string - is the name of the driver specified by This in the language - specified by Language. - - @retval EFI_SUCCESS The Unicode string for the Driver specified by This - and the language specified by Language was returned - in DriverName. - @retval EFI_INVALID_PARAMETER Language is NULL. - @retval EFI_INVALID_PARAMETER DriverName is NULL. - @retval EFI_UNSUPPORTED The driver specified by This does not support the - language specified by Language. -**/ -EFI_STATUS -EFIAPI -SataControllerComponentNameGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName - ) -{ - return LookupUnicodeString2 ( - Language, - This->SupportedLanguages, - mSataControllerDriverNameTable, - DriverName, - (BOOLEAN)(This == &gSataControllerComponentName) - ); -} - -/** - Retrieves a Unicode string that is the user readable name of the controller - that is being managed by an UEFI Driver. - - @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. - @param ControllerHandle The handle of a controller that the driver specified by - This is managing. This handle specifies the controller - whose name is to be returned. - @param ChildHandle OPTIONAL The handle of the child controller to retrieve the name - of. This is an optional parameter that may be NULL. It - will be NULL for device drivers. It will also be NULL - for a bus drivers that wish to retrieve the name of the - bus controller. It will not be NULL for a bus driver - that wishes to retrieve the name of a child controller. - @param Language A pointer to a three character ISO 639-2 language - identifier. This is the language of the controller name - that that the caller is requesting, and it must match one - of the languages specified in SupportedLanguages. The - number of languages supported by a driver is up to the - driver writer. - @param ControllerName A pointer to the Unicode string to return. This Unicode - string is the name of the controller specified by - ControllerHandle and ChildHandle in the language - specified by Language from the point of view of the - driver specified by This. - - @retval EFI_SUCCESS The Unicode string for the user readable name in the - language specified by Language for the driver - specified by This was returned in DriverName. - @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. - @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid - EFI_HANDLE. - @retval EFI_INVALID_PARAMETER Language is NULL. - @retval EFI_INVALID_PARAMETER ControllerName is NULL. - @retval EFI_UNSUPPORTED The driver specified by This is not currently - managing the controller specified by - ControllerHandle and ChildHandle. - @retval EFI_UNSUPPORTED The driver specified by This does not support the - language specified by Language. -**/ -EFI_STATUS -EFIAPI -SataControllerComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName - ) -{ - EFI_STATUS Status; - - // - // Make sure this driver is currently managing ControllHandle - // - Status = EfiTestManagedDevice ( - ControllerHandle, - gSataControllerDriverBinding.DriverBindingHandle, - &gEfiPciIoProtocolGuid - ); - if (EFI_ERROR (Status)) { - return Status; - } - - if (ChildHandle != NULL) { - return EFI_UNSUPPORTED; - } - - return LookupUnicodeString2 ( - Language, - This->SupportedLanguages, - mSataControllerControllerNameTable, - ControllerName, - (BOOLEAN)(This == &gSataControllerComponentName) - ); -} diff --git a/CorebootModulePkg/SataControllerDxe/SataController.c b/CorebootModulePkg/SataControllerDxe/SataController.c deleted file mode 100644 index 77efbb0817..0000000000 --- a/CorebootModulePkg/SataControllerDxe/SataController.c +++ /dev/null @@ -1,1043 +0,0 @@ -/** @file - This driver module produces IDE_CONTROLLER_INIT protocol for Sata Controllers. - - Copyright (c) 2011, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include "SataController.h" - -/// -/// EFI_DRIVER_BINDING_PROTOCOL instance -/// -EFI_DRIVER_BINDING_PROTOCOL gSataControllerDriverBinding = { - SataControllerSupported, - SataControllerStart, - SataControllerStop, - 0xa, - NULL, - NULL -}; - -/** - Read AHCI Operation register. - - @param PciIo The PCI IO protocol instance. - @param Offset The operation register offset. - - @return The register content read. - -**/ -UINT32 -EFIAPI -AhciReadReg ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN UINT32 Offset - ) -{ - UINT32 Data; - - ASSERT (PciIo != NULL); - - Data = 0; - - PciIo->Mem.Read ( - PciIo, - EfiPciIoWidthUint32, - AHCI_BAR_INDEX, - (UINT64) Offset, - 1, - &Data - ); - - return Data; -} - -/** - Write AHCI Operation register. - - @param PciIo The PCI IO protocol instance. - @param Offset The operation register offset. - @param Data The data used to write down. - -**/ -VOID -EFIAPI -AhciWriteReg ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN UINT32 Offset, - IN UINT32 Data - ) -{ - ASSERT (PciIo != NULL); - - PciIo->Mem.Write ( - PciIo, - EfiPciIoWidthUint32, - AHCI_BAR_INDEX, - (UINT64) Offset, - 1, - &Data - ); - - return; -} - -/** - This function is used to calculate the best PIO mode supported by specific IDE device - - @param IdentifyData The identify data of specific IDE device. - @param DisPioMode Disqualified PIO modes collection. - @param SelectedMode Available PIO modes collection. - - @retval EFI_SUCCESS Best PIO modes are returned. - @retval EFI_UNSUPPORTED The device doesn't support PIO mode, - or all supported modes have been disqualified. -**/ -EFI_STATUS -CalculateBestPioMode ( - IN EFI_IDENTIFY_DATA *IdentifyData, - IN UINT16 *DisPioMode OPTIONAL, - OUT UINT16 *SelectedMode - ) -{ - UINT16 PioMode; - UINT16 AdvancedPioMode; - UINT16 Temp; - UINT16 Index; - UINT16 MinimumPioCycleTime; - - Temp = 0xff; - - PioMode = (UINT8) (((ATA5_IDENTIFY_DATA *) (&(IdentifyData->AtaData)))->pio_cycle_timing >> 8); - - // - // See whether Identify Data word 64 - 70 are valid - // - if ((IdentifyData->AtaData.field_validity & 0x02) == 0x02) { - - AdvancedPioMode = IdentifyData->AtaData.advanced_pio_modes; - DEBUG ((EFI_D_INFO, "CalculateBestPioMode: AdvancedPioMode = %x\n", AdvancedPioMode)); - - for (Index = 0; Index < 8; Index++) { - if ((AdvancedPioMode & 0x01) != 0) { - Temp = Index; - } - - AdvancedPioMode >>= 1; - } - - // - // If Temp is modified, mean the advanced_pio_modes is not zero; - // if Temp is not modified, mean there is no advanced PIO mode supported, - // the best PIO Mode is the value in pio_cycle_timing. - // - if (Temp != 0xff) { - AdvancedPioMode = (UINT16) (Temp + 3); - } else { - AdvancedPioMode = PioMode; - } - - // - // Limit the PIO mode to at most PIO4. - // - PioMode = (UINT16) MIN (AdvancedPioMode, 4); - - MinimumPioCycleTime = IdentifyData->AtaData.min_pio_cycle_time_with_flow_control; - - if (MinimumPioCycleTime <= 120) { - PioMode = (UINT16) MIN (4, PioMode); - } else if (MinimumPioCycleTime <= 180) { - PioMode = (UINT16) MIN (3, PioMode); - } else if (MinimumPioCycleTime <= 240) { - PioMode = (UINT16) MIN (2, PioMode); - } else { - PioMode = 0; - } - - // - // Degrade the PIO mode if the mode has been disqualified - // - if (DisPioMode != NULL) { - if (*DisPioMode < 2) { - return EFI_UNSUPPORTED; // no mode below ATA_PIO_MODE_BELOW_2 - } - - if (PioMode >= *DisPioMode) { - PioMode = (UINT16) (*DisPioMode - 1); - } - } - - if (PioMode < 2) { - *SelectedMode = 1; // ATA_PIO_MODE_BELOW_2; - } else { - *SelectedMode = PioMode; // ATA_PIO_MODE_2 to ATA_PIO_MODE_4; - } - - } else { - // - // Identify Data word 64 - 70 are not valid - // Degrade the PIO mode if the mode has been disqualified - // - if (DisPioMode != NULL) { - if (*DisPioMode < 2) { - return EFI_UNSUPPORTED; // no mode below ATA_PIO_MODE_BELOW_2 - } - - if (PioMode == *DisPioMode) { - PioMode--; - } - } - - if (PioMode < 2) { - *SelectedMode = 1; // ATA_PIO_MODE_BELOW_2; - } else { - *SelectedMode = 2; // ATA_PIO_MODE_2; - } - - } - - return EFI_SUCCESS; -} - -/** - This function is used to calculate the best UDMA mode supported by specific IDE device - - @param IdentifyData The identify data of specific IDE device. - @param DisUDmaMode Disqualified UDMA modes collection. - @param SelectedMode Available UDMA modes collection. - - @retval EFI_SUCCESS Best UDMA modes are returned. - @retval EFI_UNSUPPORTED The device doesn't support UDMA mode, - or all supported modes have been disqualified. -**/ -EFI_STATUS -CalculateBestUdmaMode ( - IN EFI_IDENTIFY_DATA *IdentifyData, - IN UINT16 *DisUDmaMode OPTIONAL, - OUT UINT16 *SelectedMode - ) -{ - UINT16 TempMode; - UINT16 DeviceUDmaMode; - - DeviceUDmaMode = 0; - - // - // Check whether the WORD 88 (supported UltraDMA by drive) is valid - // - if ((IdentifyData->AtaData.field_validity & 0x04) == 0x00) { - return EFI_UNSUPPORTED; - } - - DeviceUDmaMode = IdentifyData->AtaData.ultra_dma_mode; - DEBUG ((EFI_D_INFO, "CalculateBestUdmaMode: DeviceUDmaMode = %x\n", DeviceUDmaMode)); - DeviceUDmaMode &= 0x3f; - TempMode = 0; // initialize it to UDMA-0 - - while ((DeviceUDmaMode >>= 1) != 0) { - TempMode++; - } - - // - // Degrade the UDMA mode if the mode has been disqualified - // - if (DisUDmaMode != NULL) { - if (*DisUDmaMode == 0) { - *SelectedMode = 0; - return EFI_UNSUPPORTED; // no mode below ATA_UDMA_MODE_0 - } - - if (TempMode >= *DisUDmaMode) { - TempMode = (UINT16) (*DisUDmaMode - 1); - } - } - - // - // Possible returned mode is between ATA_UDMA_MODE_0 and ATA_UDMA_MODE_5 - // - *SelectedMode = TempMode; - - return EFI_SUCCESS; -} - -/** - The Entry Point of module. It follows the standard UEFI driver model. - - @param[in] ImageHandle The firmware allocated handle for the EFI image. - @param[in] SystemTable A pointer to the EFI System Table. - - @retval EFI_SUCCESS The entry point is executed successfully. - @retval other Some error occurs when executing this entry point. - -**/ -EFI_STATUS -EFIAPI -InitializeSataControllerDriver ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - - // - // Install driver model protocol(s). - // - Status = EfiLibInstallDriverBindingComponentName2 ( - ImageHandle, - SystemTable, - &gSataControllerDriverBinding, - ImageHandle, - &gSataControllerComponentName, - &gSataControllerComponentName2 - ); - ASSERT_EFI_ERROR (Status); - - return Status; -} - -/** - Supported function of Driver Binding protocol for this driver. - Test to see if this driver supports ControllerHandle. - - @param This Protocol instance pointer. - @param Controller Handle of device to test. - @param RemainingDevicePath A pointer to the device path. - it should be ignored by device driver. - - @retval EFI_SUCCESS This driver supports this device. - @retval EFI_ALREADY_STARTED This driver is already running on this device. - @retval other This driver does not support this device. - -**/ -EFI_STATUS -EFIAPI -SataControllerSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath - ) -{ - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 PciData; - - // - // Attempt to open PCI I/O Protocol - // - Status = gBS->OpenProtocol ( - Controller, - &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, - This->DriverBindingHandle, - Controller, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - return Status; - } - - // - // Now further check the PCI header: Base Class (offset 0x0B) and - // Sub Class (offset 0x0A). This controller should be an SATA controller - // - Status = PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint8, - PCI_CLASSCODE_OFFSET, - sizeof (PciData.Hdr.ClassCode), - PciData.Hdr.ClassCode - ); - if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; - } - - if (IS_PCI_IDE (&PciData) || IS_PCI_SATADPA (&PciData)) { - return EFI_SUCCESS; - } - - return EFI_UNSUPPORTED; -} - -/** - This routine is called right after the .Supported() called and - Start this driver on ControllerHandle. - - @param This Protocol instance pointer. - @param Controller Handle of device to bind driver to. - @param RemainingDevicePath A pointer to the device path. - it should be ignored by device driver. - - @retval EFI_SUCCESS This driver is added to this device. - @retval EFI_ALREADY_STARTED This driver is already running on this device. - @retval other Some error occurs when binding this driver to this device. - -**/ -EFI_STATUS -EFIAPI -SataControllerStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath - ) -{ - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 PciData; - EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; - UINT32 Data32; - UINTN ChannelDeviceCount; - - DEBUG ((EFI_D_INFO, "SataControllerStart START\n")); - - SataPrivateData = NULL; - - // - // Now test and open PCI I/O Protocol - // - Status = gBS->OpenProtocol ( - Controller, - &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, - This->DriverBindingHandle, - Controller, - EFI_OPEN_PROTOCOL_BY_DRIVER - ); - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_ERROR, "SataControllerStart error return status = %r\n", Status)); - return Status; - } - - // - // Allocate Sata Private Data structure - // - SataPrivateData = AllocateZeroPool (sizeof (EFI_SATA_CONTROLLER_PRIVATE_DATA)); - if (SataPrivateData == NULL) { - Status = EFI_OUT_OF_RESOURCES; - goto Done; - } - - // - // Initialize Sata Private Data - // - SataPrivateData->Signature = SATA_CONTROLLER_SIGNATURE; - SataPrivateData->PciIo = PciIo; - SataPrivateData->IdeInit.GetChannelInfo = IdeInitGetChannelInfo; - SataPrivateData->IdeInit.NotifyPhase = IdeInitNotifyPhase; - SataPrivateData->IdeInit.SubmitData = IdeInitSubmitData; - SataPrivateData->IdeInit.DisqualifyMode = IdeInitDisqualifyMode; - SataPrivateData->IdeInit.CalculateMode = IdeInitCalculateMode; - SataPrivateData->IdeInit.SetTiming = IdeInitSetTiming; - SataPrivateData->IdeInit.EnumAll = SATA_ENUMER_ALL; - - Status = PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint8, - PCI_CLASSCODE_OFFSET, - sizeof (PciData.Hdr.ClassCode), - PciData.Hdr.ClassCode - ); - ASSERT_EFI_ERROR (Status); - - if (IS_PCI_IDE (&PciData)) { - SataPrivateData->IdeInit.ChannelCount = IDE_MAX_CHANNEL; - SataPrivateData->DeviceCount = IDE_MAX_DEVICES; - } else if (IS_PCI_SATADPA (&PciData)) { - // - // Read Host Capability Register(CAP) to get Number of Ports(NPS) and Supports Port Multiplier(SPM) - // NPS is 0's based value indicating the maximum number of ports supported by the HBA silicon. - // A maximum of 32 ports can be supported. A value of '0h', indicating one port, is the minimum requirement. - // - Data32 = AhciReadReg (PciIo, R_AHCI_CAP); - SataPrivateData->IdeInit.ChannelCount = (UINT8) ((Data32 & B_AHCI_CAP_NPS) + 1); - SataPrivateData->DeviceCount = AHCI_MAX_DEVICES; - if ((Data32 & B_AHCI_CAP_SPM) == B_AHCI_CAP_SPM) { - SataPrivateData->DeviceCount = AHCI_MULTI_MAX_DEVICES; - } - } - - ChannelDeviceCount = (UINTN) (SataPrivateData->IdeInit.ChannelCount) * (UINTN) (SataPrivateData->DeviceCount); - SataPrivateData->DisqualifiedModes = AllocateZeroPool ((sizeof (EFI_ATA_COLLECTIVE_MODE)) * ChannelDeviceCount); - if (SataPrivateData->DisqualifiedModes == NULL) { - Status = EFI_OUT_OF_RESOURCES; - goto Done; - } - - SataPrivateData->IdentifyData = AllocateZeroPool ((sizeof (EFI_IDENTIFY_DATA)) * ChannelDeviceCount); - if (SataPrivateData->IdentifyData == NULL) { - Status = EFI_OUT_OF_RESOURCES; - goto Done; - } - - SataPrivateData->IdentifyValid = AllocateZeroPool ((sizeof (BOOLEAN)) * ChannelDeviceCount); - if (SataPrivateData->IdentifyValid == NULL) { - Status = EFI_OUT_OF_RESOURCES; - goto Done; - } - - // - // Install IDE Controller Init Protocol to this instance - // - Status = gBS->InstallMultipleProtocolInterfaces ( - &Controller, - &gEfiIdeControllerInitProtocolGuid, - &(SataPrivateData->IdeInit), - NULL - ); - -Done: - if (EFI_ERROR (Status)) { - - gBS->CloseProtocol ( - Controller, - &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, - Controller - ); - if (SataPrivateData != NULL) { - if (SataPrivateData->DisqualifiedModes != NULL) { - FreePool (SataPrivateData->DisqualifiedModes); - } - if (SataPrivateData->IdentifyData != NULL) { - FreePool (SataPrivateData->IdentifyData); - } - if (SataPrivateData->IdentifyValid != NULL) { - FreePool (SataPrivateData->IdentifyValid); - } - FreePool (SataPrivateData); - } - } - - DEBUG ((EFI_D_INFO, "SataControllerStart END status = %r\n", Status)); - - return Status; -} - -/** - Stop this driver on ControllerHandle. - - @param This Protocol instance pointer. - @param Controller Handle of device to stop driver on. - @param NumberOfChildren Not used. - @param ChildHandleBuffer Not used. - - @retval EFI_SUCCESS This driver is removed from this device. - @retval other Some error occurs when removing this driver from this device. - -**/ -EFI_STATUS -EFIAPI -SataControllerStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer - ) -{ - EFI_STATUS Status; - EFI_IDE_CONTROLLER_INIT_PROTOCOL *IdeInit; - EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; - - // - // Open the produced protocol - // - Status = gBS->OpenProtocol ( - Controller, - &gEfiIdeControllerInitProtocolGuid, - (VOID **) &IdeInit, - This->DriverBindingHandle, - Controller, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; - } - - SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (IdeInit); - ASSERT (SataPrivateData != NULL); - - // - // Uninstall the IDE Controller Init Protocol from this instance - // - Status = gBS->UninstallMultipleProtocolInterfaces ( - Controller, - &gEfiIdeControllerInitProtocolGuid, - &(SataPrivateData->IdeInit), - NULL - ); - if (EFI_ERROR (Status)) { - return Status; - } - - if (SataPrivateData != NULL) { - if (SataPrivateData->DisqualifiedModes != NULL) { - FreePool (SataPrivateData->DisqualifiedModes); - } - if (SataPrivateData->IdentifyData != NULL) { - FreePool (SataPrivateData->IdentifyData); - } - if (SataPrivateData->IdentifyValid != NULL) { - FreePool (SataPrivateData->IdentifyValid); - } - FreePool (SataPrivateData); - } - - // - // Close protocols opened by Sata Controller driver - // - return gBS->CloseProtocol ( - Controller, - &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, - Controller - ); -} - -/** - Calculate the flat array subscript of a (Channel, Device) pair. - - @param[in] SataPrivateData The private data structure corresponding to the - SATA controller that attaches the device for - which the flat array subscript is being - calculated. - - @param[in] Channel The channel (ie. port) number on the SATA - controller that the device is attached to. - - @param[in] Device The device number on the channel. - - @return The flat array subscript suitable for indexing DisqualifiedModes, - IdentifyData, and IdentifyValid. -**/ -STATIC -UINTN -FlatDeviceIndex ( - IN CONST EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData, - IN UINTN Channel, - IN UINTN Device - ) -{ - ASSERT (SataPrivateData != NULL); - ASSERT (Channel < SataPrivateData->IdeInit.ChannelCount); - ASSERT (Device < SataPrivateData->DeviceCount); - - return Channel * SataPrivateData->DeviceCount + Device; -} - -// -// Interface functions of IDE_CONTROLLER_INIT protocol -// -/** - Returns the information about the specified IDE channel. - - This function can be used to obtain information about a particular IDE channel. - The driver entity uses this information during the enumeration process. - - If Enabled is set to FALSE, the driver entity will not scan the channel. Note - that it will not prevent an operating system driver from scanning the channel. - - For most of today's controllers, MaxDevices will either be 1 or 2. For SATA - controllers, this value will always be 1. SATA configurations can contain SATA - port multipliers. SATA port multipliers behave like SATA bridges and can support - up to 16 devices on the other side. If a SATA port out of the IDE controller - is connected to a port multiplier, MaxDevices will be set to the number of SATA - devices that the port multiplier supports. Because today's port multipliers - support up to fifteen SATA devices, this number can be as large as fifteen. The IDE - bus driver is required to scan for the presence of port multipliers behind an SATA - controller and enumerate up to MaxDevices number of devices behind the port - multiplier. - - In this context, the devices behind a port multiplier constitute a channel. - - @param[in] This The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel Zero-based channel number. - @param[out] Enabled TRUE if this channel is enabled. Disabled channels - are not scanned to see if any devices are present. - @param[out] MaxDevices The maximum number of IDE devices that the bus driver - can expect on this channel. For the ATA/ATAPI - specification, version 6, this number will either be - one or two. For Serial ATA (SATA) configurations with a - port multiplier, this number can be as large as fifteen. - - @retval EFI_SUCCESS Information was returned without any errors. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - -**/ -EFI_STATUS -EFIAPI -IdeInitGetChannelInfo ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - OUT BOOLEAN *Enabled, - OUT UINT8 *MaxDevices - ) -{ - EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; - SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This); - ASSERT (SataPrivateData != NULL); - - if (Channel < This->ChannelCount) { - *Enabled = TRUE; - *MaxDevices = SataPrivateData->DeviceCount; - return EFI_SUCCESS; - } - - *Enabled = FALSE; - return EFI_INVALID_PARAMETER; -} - -/** - The notifications from the driver entity that it is about to enter a certain - phase of the IDE channel enumeration process. - - This function can be used to notify the IDE controller driver to perform - specific actions, including any chipset-specific initialization, so that the - chipset is ready to enter the next phase. Seven notification points are defined - at this time. - - More synchronization points may be added as required in the future. - - @param[in] This The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Phase The phase during enumeration. - @param[in] Channel Zero-based channel number. - - @retval EFI_SUCCESS The notification was accepted without any errors. - @retval EFI_UNSUPPORTED Phase is not supported. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_NOT_READY This phase cannot be entered at this time; for - example, an attempt was made to enter a Phase - without having entered one or more previous - Phase. - -**/ -EFI_STATUS -EFIAPI -IdeInitNotifyPhase ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase, - IN UINT8 Channel - ) -{ - return EFI_SUCCESS; -} - -/** - Submits the device information to the IDE controller driver. - - This function is used by the driver entity to pass detailed information about - a particular device to the IDE controller driver. The driver entity obtains - this information by issuing an ATA or ATAPI IDENTIFY_DEVICE command. IdentifyData - is the pointer to the response data buffer. The IdentifyData buffer is owned - by the driver entity, and the IDE controller driver must make a local copy - of the entire buffer or parts of the buffer as needed. The original IdentifyData - buffer pointer may not be valid when - - - EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() or - - EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() is called at a later point. - - The IDE controller driver may consult various fields of EFI_IDENTIFY_DATA to - compute the optimum mode for the device. These fields are not limited to the - timing information. For example, an implementation of the IDE controller driver - may examine the vendor and type/mode field to match known bad drives. - - The driver entity may submit drive information in any order, as long as it - submits information for all the devices belonging to the enumeration group - before EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() is called for any device - in that enumeration group. If a device is absent, EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() - should be called with IdentifyData set to NULL. The IDE controller driver may - not have any other mechanism to know whether a device is present or not. Therefore, - setting IdentifyData to NULL does not constitute an error condition. - EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() can be called only once for a - given (Channel, Device) pair. - - @param[in] This A pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel Zero-based channel number. - @param[in] Device Zero-based device number on the Channel. - @param[in] IdentifyData The device's response to the ATA IDENTIFY_DEVICE command. - - @retval EFI_SUCCESS The information was accepted without any errors. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_INVALID_PARAMETER Device is invalid. - -**/ -EFI_STATUS -EFIAPI -IdeInitSubmitData ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_IDENTIFY_DATA *IdentifyData - ) -{ - EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; - UINTN DeviceIndex; - - SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This); - ASSERT (SataPrivateData != NULL); - - if ((Channel >= This->ChannelCount) || (Device >= SataPrivateData->DeviceCount)) { - return EFI_INVALID_PARAMETER; - } - - DeviceIndex = FlatDeviceIndex (SataPrivateData, Channel, Device); - - // - // Make a local copy of device's IdentifyData and mark the valid flag - // - if (IdentifyData != NULL) { - CopyMem ( - &(SataPrivateData->IdentifyData[DeviceIndex]), - IdentifyData, - sizeof (EFI_IDENTIFY_DATA) - ); - - SataPrivateData->IdentifyValid[DeviceIndex] = TRUE; - } else { - SataPrivateData->IdentifyValid[DeviceIndex] = FALSE; - } - - return EFI_SUCCESS; -} - -/** - Disqualifies specific modes for an IDE device. - - This function allows the driver entity or other drivers (such as platform - drivers) to reject certain timing modes and request the IDE controller driver - to recalculate modes. This function allows the driver entity and the IDE - controller driver to negotiate the timings on a per-device basis. This function - is useful in the case of drives that lie about their capabilities. An example - is when the IDE device fails to accept the timing modes that are calculated - by the IDE controller driver based on the response to the Identify Drive command. - - If the driver entity does not want to limit the ATA timing modes and leave that - decision to the IDE controller driver, it can either not call this function for - the given device or call this function and set the Valid flag to FALSE for all - modes that are listed in EFI_ATA_COLLECTIVE_MODE. - - The driver entity may disqualify modes for a device in any order and any number - of times. - - This function can be called multiple times to invalidate multiple modes of the - same type (e.g., Programmed Input/Output [PIO] modes 3 and 4). See the ATA/ATAPI - specification for more information on PIO modes. - - For Serial ATA (SATA) controllers, this member function can be used to disqualify - a higher transfer rate mode on a given channel. For example, a platform driver - may inform the IDE controller driver to not use second-generation (Gen2) speeds - for a certain SATA drive. - - @param[in] This The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel The zero-based channel number. - @param[in] Device The zero-based device number on the Channel. - @param[in] BadModes The modes that the device does not support and that - should be disqualified. - - @retval EFI_SUCCESS The modes were accepted without any errors. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_INVALID_PARAMETER Device is invalid. - @retval EFI_INVALID_PARAMETER IdentifyData is NULL. - -**/ -EFI_STATUS -EFIAPI -IdeInitDisqualifyMode ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_ATA_COLLECTIVE_MODE *BadModes - ) -{ - EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; - UINTN DeviceIndex; - - SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This); - ASSERT (SataPrivateData != NULL); - - if ((Channel >= This->ChannelCount) || (BadModes == NULL) || (Device >= SataPrivateData->DeviceCount)) { - return EFI_INVALID_PARAMETER; - } - - DeviceIndex = FlatDeviceIndex (SataPrivateData, Channel, Device); - - // - // Record the disqualified modes per channel per device. From ATA/ATAPI spec, - // if a mode is not supported, the modes higher than it is also not supported. - // - CopyMem ( - &(SataPrivateData->DisqualifiedModes[DeviceIndex]), - BadModes, - sizeof (EFI_ATA_COLLECTIVE_MODE) - ); - - return EFI_SUCCESS; -} - -/** - Returns the information about the optimum modes for the specified IDE device. - - This function is used by the driver entity to obtain the optimum ATA modes for - a specific device. The IDE controller driver takes into account the following - while calculating the mode: - - The IdentifyData inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() - - The BadModes inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() - - The driver entity is required to call EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() - for all the devices that belong to an enumeration group before calling - EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() for any device in the same group. - - The IDE controller driver will use controller- and possibly platform-specific - algorithms to arrive at SupportedModes. The IDE controller may base its - decision on user preferences and other considerations as well. This function - may be called multiple times because the driver entity may renegotiate the mode - with the IDE controller driver using EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode(). - - The driver entity may collect timing information for various devices in any - order. The driver entity is responsible for making sure that all the dependencies - are satisfied. For example, the SupportedModes information for device A that - was previously returned may become stale after a call to - EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() for device B. - - The buffer SupportedModes is allocated by the callee because the caller does - not necessarily know the size of the buffer. The type EFI_ATA_COLLECTIVE_MODE - is defined in a way that allows for future extensibility and can be of variable - length. This memory pool should be deallocated by the caller when it is no - longer necessary. - - The IDE controller driver for a Serial ATA (SATA) controller can use this - member function to force a lower speed (first-generation [Gen1] speeds on a - second-generation [Gen2]-capable hardware). The IDE controller driver can - also allow the driver entity to stay with the speed that has been negotiated - by the physical layer. - - @param[in] This The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel A zero-based channel number. - @param[in] Device A zero-based device number on the Channel. - @param[out] SupportedModes The optimum modes for the device. - - @retval EFI_SUCCESS SupportedModes was returned. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_INVALID_PARAMETER Device is invalid. - @retval EFI_INVALID_PARAMETER SupportedModes is NULL. - @retval EFI_NOT_READY Modes cannot be calculated due to a lack of - data. This error may happen if - EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() - and EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyData() - were not called for at least one drive in the - same enumeration group. - -**/ -EFI_STATUS -EFIAPI -IdeInitCalculateMode ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes - ) -{ - EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; - EFI_IDENTIFY_DATA *IdentifyData; - BOOLEAN IdentifyValid; - EFI_ATA_COLLECTIVE_MODE *DisqualifiedModes; - UINT16 SelectedMode; - EFI_STATUS Status; - UINTN DeviceIndex; - - SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This); - ASSERT (SataPrivateData != NULL); - - if ((Channel >= This->ChannelCount) || (SupportedModes == NULL) || (Device >= SataPrivateData->DeviceCount)) { - return EFI_INVALID_PARAMETER; - } - - *SupportedModes = AllocateZeroPool (sizeof (EFI_ATA_COLLECTIVE_MODE)); - if (*SupportedModes == NULL) { - ASSERT (*SupportedModes != NULL); - return EFI_OUT_OF_RESOURCES; - } - - DeviceIndex = FlatDeviceIndex (SataPrivateData, Channel, Device); - - IdentifyData = &(SataPrivateData->IdentifyData[DeviceIndex]); - IdentifyValid = SataPrivateData->IdentifyValid[DeviceIndex]; - DisqualifiedModes = &(SataPrivateData->DisqualifiedModes[DeviceIndex]); - - // - // Make sure we've got the valid identify data of the device from SubmitData() - // - if (!IdentifyValid) { - FreePool (*SupportedModes); - return EFI_NOT_READY; - } - - Status = CalculateBestPioMode ( - IdentifyData, - (DisqualifiedModes->PioMode.Valid ? ((UINT16 *) &(DisqualifiedModes->PioMode.Mode)) : NULL), - &SelectedMode - ); - if (!EFI_ERROR (Status)) { - (*SupportedModes)->PioMode.Valid = TRUE; - (*SupportedModes)->PioMode.Mode = SelectedMode; - - } else { - (*SupportedModes)->PioMode.Valid = FALSE; - } - DEBUG ((EFI_D_INFO, "IdeInitCalculateMode: PioMode = %x\n", (*SupportedModes)->PioMode.Mode)); - - Status = CalculateBestUdmaMode ( - IdentifyData, - (DisqualifiedModes->UdmaMode.Valid ? ((UINT16 *) &(DisqualifiedModes->UdmaMode.Mode)) : NULL), - &SelectedMode - ); - - if (!EFI_ERROR (Status)) { - (*SupportedModes)->UdmaMode.Valid = TRUE; - (*SupportedModes)->UdmaMode.Mode = SelectedMode; - - } else { - (*SupportedModes)->UdmaMode.Valid = FALSE; - } - DEBUG ((EFI_D_INFO, "IdeInitCalculateMode: UdmaMode = %x\n", (*SupportedModes)->UdmaMode.Mode)); - - // - // The modes other than PIO and UDMA are not supported - // - return EFI_SUCCESS; -} - -/** - Commands the IDE controller driver to program the IDE controller hardware - so that the specified device can operate at the specified mode. - - This function is used by the driver entity to instruct the IDE controller - driver to program the IDE controller hardware to the specified modes. This - function can be called only once for a particular device. For a Serial ATA - (SATA) Advanced Host Controller Interface (AHCI) controller, no controller- - specific programming may be required. - - @param[in] This Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel Zero-based channel number. - @param[in] Device Zero-based device number on the Channel. - @param[in] Modes The modes to set. - - @retval EFI_SUCCESS The command was accepted without any errors. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_INVALID_PARAMETER Device is invalid. - @retval EFI_NOT_READY Modes cannot be set at this time due to lack of data. - @retval EFI_DEVICE_ERROR Modes cannot be set due to hardware failure. - The driver entity should not use this device. - -**/ -EFI_STATUS -EFIAPI -IdeInitSetTiming ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_ATA_COLLECTIVE_MODE *Modes - ) -{ - return EFI_SUCCESS; -} diff --git a/CorebootModulePkg/SataControllerDxe/SataController.h b/CorebootModulePkg/SataControllerDxe/SataController.h deleted file mode 100644 index 284e605337..0000000000 --- a/CorebootModulePkg/SataControllerDxe/SataController.h +++ /dev/null @@ -1,536 +0,0 @@ -/** @file - Header file for Sata Controller driver. - - Copyright (c) 2011, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _SATA_CONTROLLER_H_ -#define _SATA_CONTROLLER_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// -// Global Variables definitions -// -extern EFI_DRIVER_BINDING_PROTOCOL gSataControllerDriverBinding; -extern EFI_COMPONENT_NAME_PROTOCOL gSataControllerComponentName; -extern EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2; - -#define AHCI_BAR_INDEX 0x05 -#define R_AHCI_CAP 0x0 -#define B_AHCI_CAP_NPS (BIT4 | BIT3 | BIT2 | BIT1 | BIT0) // Number of Ports -#define B_AHCI_CAP_SPM BIT17 // Supports Port Multiplier - -/// -/// AHCI each channel can have up to 1 device -/// -#define AHCI_MAX_DEVICES 0x01 - -/// -/// AHCI each channel can have 15 devices in the presence of a multiplier -/// -#define AHCI_MULTI_MAX_DEVICES 0x0F - -/// -/// IDE supports 2 channel max -/// -#define IDE_MAX_CHANNEL 0x02 - -/// -/// IDE supports 2 devices max -/// -#define IDE_MAX_DEVICES 0x02 - -#define SATA_ENUMER_ALL FALSE - -// -// Sata Controller driver private data structure -// - -#define SATA_CONTROLLER_SIGNATURE SIGNATURE_32('S','A','T','A') - -typedef struct _EFI_SATA_CONTROLLER_PRIVATE_DATA { - // - // Standard signature used to identify Sata Controller private data - // - UINT32 Signature; - - // - // Protocol instance of IDE_CONTROLLER_INIT produced by this driver - // - EFI_IDE_CONTROLLER_INIT_PROTOCOL IdeInit; - - // - // Copy of protocol pointers used by this driver - // - EFI_PCI_IO_PROTOCOL *PciIo; - - // - // The number of devices that are supported by this channel - // - UINT8 DeviceCount; - - // - // The highest disqualified mode for each attached device, - // From ATA/ATAPI spec, if a mode is not supported, - // the modes higher than it is also not supported - // - EFI_ATA_COLLECTIVE_MODE *DisqualifiedModes; - - // - // A copy of EFI_IDENTIFY_DATA data for each attached SATA device and its flag - // - EFI_IDENTIFY_DATA *IdentifyData; - BOOLEAN *IdentifyValid; -} EFI_SATA_CONTROLLER_PRIVATE_DATA; - -#define SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS(a) CR(a, EFI_SATA_CONTROLLER_PRIVATE_DATA, IdeInit, SATA_CONTROLLER_SIGNATURE) - -// -// Driver binding functions declaration -// -/** - Supported function of Driver Binding protocol for this driver. - Test to see if this driver supports ControllerHandle. - - @param This Protocol instance pointer. - @param Controller Handle of device to test. - @param RemainingDevicePath A pointer to the device path. Should be ignored by - device driver. - - @retval EFI_SUCCESS This driver supports this device. - @retval EFI_ALREADY_STARTED This driver is already running on this device. - @retval other This driver does not support this device. - -**/ -EFI_STATUS -EFIAPI -SataControllerSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath - ) -; - -/** - This routine is called right after the .Supported() called and - Start this driver on ControllerHandle. - - @param This Protocol instance pointer. - @param Controller Handle of device to bind driver to. - @param RemainingDevicePath A pointer to the device path. Should be ignored by - device driver. - - @retval EFI_SUCCESS This driver is added to this device. - @retval EFI_ALREADY_STARTED This driver is already running on this device. - @retval other Some error occurs when binding this driver to this device. - -**/ -EFI_STATUS -EFIAPI -SataControllerStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath - ) -; - -/** - Stop this driver on ControllerHandle. - - @param This Protocol instance pointer. - @param Controller Handle of device to stop driver on. - @param NumberOfChildren Not used. - @param ChildHandleBuffer Not used. - - @retval EFI_SUCCESS This driver is removed from this device. - @retval other Some error occurs when removing this driver from this device. - -**/ -EFI_STATUS -EFIAPI -SataControllerStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer - ) -; - -// -// IDE controller init functions declaration -// -/** - Returns the information about the specified IDE channel. - - This function can be used to obtain information about a particular IDE channel. - The driver entity uses this information during the enumeration process. - - If Enabled is set to FALSE, the driver entity will not scan the channel. Note - that it will not prevent an operating system driver from scanning the channel. - - For most of today's controllers, MaxDevices will either be 1 or 2. For SATA - controllers, this value will always be 1. SATA configurations can contain SATA - port multipliers. SATA port multipliers behave like SATA bridges and can support - up to 16 devices on the other side. If a SATA port out of the IDE controller - is connected to a port multiplier, MaxDevices will be set to the number of SATA - devices that the port multiplier supports. Because today's port multipliers - support up to fifteen SATA devices, this number can be as large as fifteen. The IDE - bus driver is required to scan for the presence of port multipliers behind an SATA - controller and enumerate up to MaxDevices number of devices behind the port - multiplier. - - In this context, the devices behind a port multiplier constitute a channel. - - @param[in] This The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel Zero-based channel number. - @param[out] Enabled TRUE if this channel is enabled. Disabled channels - are not scanned to see if any devices are present. - @param[out] MaxDevices The maximum number of IDE devices that the bus driver - can expect on this channel. For the ATA/ATAPI - specification, version 6, this number will either be - one or two. For Serial ATA (SATA) configurations with a - port multiplier, this number can be as large as fifteen. - - @retval EFI_SUCCESS Information was returned without any errors. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - -**/ -EFI_STATUS -EFIAPI -IdeInitGetChannelInfo ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - OUT BOOLEAN *Enabled, - OUT UINT8 *MaxDevices - ) -; - -/** - The notifications from the driver entity that it is about to enter a certain - phase of the IDE channel enumeration process. - - This function can be used to notify the IDE controller driver to perform - specific actions, including any chipset-specific initialization, so that the - chipset is ready to enter the next phase. Seven notification points are defined - at this time. - - More synchronization points may be added as required in the future. - - @param[in] This The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Phase The phase during enumeration. - @param[in] Channel Zero-based channel number. - - @retval EFI_SUCCESS The notification was accepted without any errors. - @retval EFI_UNSUPPORTED Phase is not supported. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_NOT_READY This phase cannot be entered at this time; for - example, an attempt was made to enter a Phase - without having entered one or more previous - Phase. - -**/ -EFI_STATUS -EFIAPI -IdeInitNotifyPhase ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase, - IN UINT8 Channel - ) -; - -/** - Submits the device information to the IDE controller driver. - - This function is used by the driver entity to pass detailed information about - a particular device to the IDE controller driver. The driver entity obtains - this information by issuing an ATA or ATAPI IDENTIFY_DEVICE command. IdentifyData - is the pointer to the response data buffer. The IdentifyData buffer is owned - by the driver entity, and the IDE controller driver must make a local copy - of the entire buffer or parts of the buffer as needed. The original IdentifyData - buffer pointer may not be valid when - - - EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() or - - EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() is called at a later point. - - The IDE controller driver may consult various fields of EFI_IDENTIFY_DATA to - compute the optimum mode for the device. These fields are not limited to the - timing information. For example, an implementation of the IDE controller driver - may examine the vendor and type/mode field to match known bad drives. - - The driver entity may submit drive information in any order, as long as it - submits information for all the devices belonging to the enumeration group - before EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() is called for any device - in that enumeration group. If a device is absent, EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() - should be called with IdentifyData set to NULL. The IDE controller driver may - not have any other mechanism to know whether a device is present or not. Therefore, - setting IdentifyData to NULL does not constitute an error condition. - EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() can be called only once for a - given (Channel, Device) pair. - - @param[in] This A pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel Zero-based channel number. - @param[in] Device Zero-based device number on the Channel. - @param[in] IdentifyData The device's response to the ATA IDENTIFY_DEVICE command. - - @retval EFI_SUCCESS The information was accepted without any errors. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_INVALID_PARAMETER Device is invalid. - -**/ -EFI_STATUS -EFIAPI -IdeInitSubmitData ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_IDENTIFY_DATA *IdentifyData - ) -; - -/** - Disqualifies specific modes for an IDE device. - - This function allows the driver entity or other drivers (such as platform - drivers) to reject certain timing modes and request the IDE controller driver - to recalculate modes. This function allows the driver entity and the IDE - controller driver to negotiate the timings on a per-device basis. This function - is useful in the case of drives that lie about their capabilities. An example - is when the IDE device fails to accept the timing modes that are calculated - by the IDE controller driver based on the response to the Identify Drive command. - - If the driver entity does not want to limit the ATA timing modes and leave that - decision to the IDE controller driver, it can either not call this function for - the given device or call this function and set the Valid flag to FALSE for all - modes that are listed in EFI_ATA_COLLECTIVE_MODE. - - The driver entity may disqualify modes for a device in any order and any number - of times. - - This function can be called multiple times to invalidate multiple modes of the - same type (e.g., Programmed Input/Output [PIO] modes 3 and 4). See the ATA/ATAPI - specification for more information on PIO modes. - - For Serial ATA (SATA) controllers, this member function can be used to disqualify - a higher transfer rate mode on a given channel. For example, a platform driver - may inform the IDE controller driver to not use second-generation (Gen2) speeds - for a certain SATA drive. - - @param[in] This The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel The zero-based channel number. - @param[in] Device The zero-based device number on the Channel. - @param[in] BadModes The modes that the device does not support and that - should be disqualified. - - @retval EFI_SUCCESS The modes were accepted without any errors. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_INVALID_PARAMETER Device is invalid. - @retval EFI_INVALID_PARAMETER IdentifyData is NULL. - -**/ -EFI_STATUS -EFIAPI -IdeInitDisqualifyMode ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_ATA_COLLECTIVE_MODE *BadModes - ) -; - -/** - Returns the information about the optimum modes for the specified IDE device. - - This function is used by the driver entity to obtain the optimum ATA modes for - a specific device. The IDE controller driver takes into account the following - while calculating the mode: - - The IdentifyData inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() - - The BadModes inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() - - The driver entity is required to call EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() - for all the devices that belong to an enumeration group before calling - EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() for any device in the same group. - - The IDE controller driver will use controller- and possibly platform-specific - algorithms to arrive at SupportedModes. The IDE controller may base its - decision on user preferences and other considerations as well. This function - may be called multiple times because the driver entity may renegotiate the mode - with the IDE controller driver using EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode(). - - The driver entity may collect timing information for various devices in any - order. The driver entity is responsible for making sure that all the dependencies - are satisfied. For example, the SupportedModes information for device A that - was previously returned may become stale after a call to - EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() for device B. - - The buffer SupportedModes is allocated by the callee because the caller does - not necessarily know the size of the buffer. The type EFI_ATA_COLLECTIVE_MODE - is defined in a way that allows for future extensibility and can be of variable - length. This memory pool should be deallocated by the caller when it is no - longer necessary. - - The IDE controller driver for a Serial ATA (SATA) controller can use this - member function to force a lower speed (first-generation [Gen1] speeds on a - second-generation [Gen2]-capable hardware). The IDE controller driver can - also allow the driver entity to stay with the speed that has been negotiated - by the physical layer. - - @param[in] This The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel A zero-based channel number. - @param[in] Device A zero-based device number on the Channel. - @param[out] SupportedModes The optimum modes for the device. - - @retval EFI_SUCCESS SupportedModes was returned. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_INVALID_PARAMETER Device is invalid. - @retval EFI_INVALID_PARAMETER SupportedModes is NULL. - @retval EFI_NOT_READY Modes cannot be calculated due to a lack of - data. This error may happen if - EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() - and EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyData() - were not called for at least one drive in the - same enumeration group. - -**/ -EFI_STATUS -EFIAPI -IdeInitCalculateMode ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes - ) -; - -/** - Commands the IDE controller driver to program the IDE controller hardware - so that the specified device can operate at the specified mode. - - This function is used by the driver entity to instruct the IDE controller - driver to program the IDE controller hardware to the specified modes. This - function can be called only once for a particular device. For a Serial ATA - (SATA) Advanced Host Controller Interface (AHCI) controller, no controller- - specific programming may be required. - - @param[in] This Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. - @param[in] Channel Zero-based channel number. - @param[in] Device Zero-based device number on the Channel. - @param[in] Modes The modes to set. - - @retval EFI_SUCCESS The command was accepted without any errors. - @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount). - @retval EFI_INVALID_PARAMETER Device is invalid. - @retval EFI_NOT_READY Modes cannot be set at this time due to lack of data. - @retval EFI_DEVICE_ERROR Modes cannot be set due to hardware failure. - The driver entity should not use this device. - -**/ -EFI_STATUS -EFIAPI -IdeInitSetTiming ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_ATA_COLLECTIVE_MODE *Modes - ) -; - -// -// Forward reference declaration -// -/** - Retrieves a Unicode string that is the user readable name of the UEFI Driver. - - @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. - @param Language A pointer to a three character ISO 639-2 language identifier. - This is the language of the driver name that that the caller - is requesting, and it must match one of the languages specified - in SupportedLanguages. The number of languages supported by a - driver is up to the driver writer. - @param DriverName A pointer to the Unicode string to return. This Unicode string - is the name of the driver specified by This in the language - specified by Language. - - @retval EFI_SUCCESS The Unicode string for the Driver specified by This - and the language specified by Language was returned - in DriverName. - @retval EFI_INVALID_PARAMETER Language is NULL. - @retval EFI_INVALID_PARAMETER DriverName is NULL. - @retval EFI_UNSUPPORTED The driver specified by This does not support the - language specified by Language. -**/ -EFI_STATUS -EFIAPI -SataControllerComponentNameGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName - ) -; - -/** - Retrieves a Unicode string that is the user readable name of the controller - that is being managed by an UEFI Driver. - - @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. - @param ControllerHandle The handle of a controller that the driver specified by - This is managing. This handle specifies the controller - whose name is to be returned. - @param OPTIONAL ChildHandle The handle of the child controller to retrieve the name - of. This is an optional parameter that may be NULL. It - will be NULL for device drivers. It will also be NULL - for a bus drivers that wish to retrieve the name of the - bus controller. It will not be NULL for a bus driver - that wishes to retrieve the name of a child controller. - @param Language A pointer to a three character ISO 639-2 language - identifier. This is the language of the controller name - that that the caller is requesting, and it must match one - of the languages specified in SupportedLanguages. The - number of languages supported by a driver is up to the - driver writer. - @param ControllerName A pointer to the Unicode string to return. This Unicode - string is the name of the controller specified by - ControllerHandle and ChildHandle in the language - specified by Language from the point of view of the - driver specified by This. - - @retval EFI_SUCCESS The Unicode string for the user readable name in the - language specified by Language for the driver - specified by This was returned in DriverName. - @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. - @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid - EFI_HANDLE. - @retval EFI_INVALID_PARAMETER Language is NULL. - @retval EFI_INVALID_PARAMETER ControllerName is NULL. - @retval EFI_UNSUPPORTED The driver specified by This is not currently - managing the controller specified by - ControllerHandle and ChildHandle. - @retval EFI_UNSUPPORTED The driver specified by This does not support the - language specified by Language. -**/ -EFI_STATUS -EFIAPI -SataControllerComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName - ) -; - -#endif diff --git a/CorebootModulePkg/SataControllerDxe/SataControllerDxe.inf b/CorebootModulePkg/SataControllerDxe/SataControllerDxe.inf deleted file mode 100644 index 33d97a3a29..0000000000 --- a/CorebootModulePkg/SataControllerDxe/SataControllerDxe.inf +++ /dev/null @@ -1,43 +0,0 @@ -## @file -# -# Component description file for the Sata Controller driver. -# -# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = SataController - FILE_GUID = 8F4CD826-A5A0-4e93-9522-CFB0AB72926C - MODULE_TYPE = UEFI_DRIVER - VERSION_STRING = 1.0 - ENTRY_POINT = InitializeSataControllerDriver - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 EBC -# - -[Sources] - ComponentName.c - SataController.c - SataController.h - -[Packages] - MdePkg/MdePkg.dec - -[LibraryClasses] - UefiDriverEntryPoint - DebugLib - UefiLib - BaseLib - BaseMemoryLib - MemoryAllocationLib - UefiBootServicesTableLib - -[Protocols] - gEfiPciIoProtocolGuid - gEfiIdeControllerInitProtocolGuid diff --git a/CorebootModulePkg/SecCore/FindPeiCore.c b/CorebootModulePkg/SecCore/FindPeiCore.c deleted file mode 100644 index ff07bc24cc..0000000000 --- a/CorebootModulePkg/SecCore/FindPeiCore.c +++ /dev/null @@ -1,193 +0,0 @@ -/** @file - Locate the entry point for the PEI Core - -Copyright (c) 2013, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include -#include -#include - -#include "SecMain.h" - -/** - Find core image base. - - @param BootFirmwareVolumePtr Point to the boot firmware volume. - @param SecCoreImageBase The base address of the SEC core image. - @param PeiCoreImageBase The base address of the PEI core image. - -**/ -EFI_STATUS -EFIAPI -FindImageBase ( - IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr, - OUT EFI_PHYSICAL_ADDRESS *SecCoreImageBase, - OUT EFI_PHYSICAL_ADDRESS *PeiCoreImageBase - ) -{ - EFI_PHYSICAL_ADDRESS CurrentAddress; - EFI_PHYSICAL_ADDRESS EndOfFirmwareVolume; - EFI_FFS_FILE_HEADER *File; - UINT32 Size; - EFI_PHYSICAL_ADDRESS EndOfFile; - EFI_COMMON_SECTION_HEADER *Section; - EFI_PHYSICAL_ADDRESS EndOfSection; - - *SecCoreImageBase = 0; - *PeiCoreImageBase = 0; - - CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) BootFirmwareVolumePtr; - EndOfFirmwareVolume = CurrentAddress + BootFirmwareVolumePtr->FvLength; - - // - // Loop through the FFS files in the Boot Firmware Volume - // - for (EndOfFile = CurrentAddress + BootFirmwareVolumePtr->HeaderLength; ; ) { - - CurrentAddress = (EndOfFile + 7) & 0xfffffffffffffff8ULL; - if (CurrentAddress > EndOfFirmwareVolume) { - return EFI_NOT_FOUND; - } - - File = (EFI_FFS_FILE_HEADER*)(UINTN) CurrentAddress; - if (IS_FFS_FILE2 (File)) { - Size = FFS_FILE2_SIZE (File); - if (Size <= 0x00FFFFFF) { - return EFI_NOT_FOUND; - } - } else { - Size = FFS_FILE_SIZE (File); - if (Size < sizeof (EFI_FFS_FILE_HEADER)) { - return EFI_NOT_FOUND; - } - } - - EndOfFile = CurrentAddress + Size; - if (EndOfFile > EndOfFirmwareVolume) { - return EFI_NOT_FOUND; - } - - // - // Look for SEC Core / PEI Core files - // - if (File->Type != EFI_FV_FILETYPE_SECURITY_CORE && - File->Type != EFI_FV_FILETYPE_PEI_CORE) { - continue; - } - - // - // Loop through the FFS file sections within the FFS file - // - if (IS_FFS_FILE2 (File)) { - EndOfSection = (EFI_PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) File + sizeof (EFI_FFS_FILE_HEADER2)); - } else { - EndOfSection = (EFI_PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) File + sizeof (EFI_FFS_FILE_HEADER)); - } - for (;;) { - CurrentAddress = (EndOfSection + 3) & 0xfffffffffffffffcULL; - Section = (EFI_COMMON_SECTION_HEADER*)(UINTN) CurrentAddress; - - if (IS_SECTION2 (Section)) { - Size = SECTION2_SIZE (Section); - if (Size <= 0x00FFFFFF) { - return EFI_NOT_FOUND; - } - } else { - Size = SECTION_SIZE (Section); - if (Size < sizeof (EFI_COMMON_SECTION_HEADER)) { - return EFI_NOT_FOUND; - } - } - - EndOfSection = CurrentAddress + Size; - if (EndOfSection > EndOfFile) { - return EFI_NOT_FOUND; - } - - // - // Look for executable sections - // - if (Section->Type == EFI_SECTION_PE32 || Section->Type == EFI_SECTION_TE) { - if (File->Type == EFI_FV_FILETYPE_SECURITY_CORE) { - if (IS_SECTION2 (Section)) { - *SecCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER2)); - } else { - *SecCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER)); - } - } else { - if (IS_SECTION2 (Section)) { - *PeiCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER2)); - } else { - *PeiCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER)); - } - } - break; - } - } - - // - // Both SEC Core and PEI Core images found - // - if (*SecCoreImageBase != 0 && *PeiCoreImageBase != 0) { - return EFI_SUCCESS; - } - } -} - -/** - Find and return Pei Core entry point. - - It also find SEC and PEI Core file debug information. It will report them if - remote debug is enabled. - - @param BootFirmwareVolumePtr Point to the boot firmware volume. - @param PeiCoreEntryPoint The entry point of the PEI core. - -**/ -VOID -EFIAPI -FindAndReportEntryPoints ( - IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr, - OUT EFI_PEI_CORE_ENTRY_POINT *PeiCoreEntryPoint - ) -{ - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS SecCoreImageBase; - EFI_PHYSICAL_ADDRESS PeiCoreImageBase; - PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; - - // - // Find SEC Core and PEI Core image base - // - Status = FindImageBase (BootFirmwareVolumePtr, &SecCoreImageBase, &PeiCoreImageBase); - ASSERT_EFI_ERROR (Status); - - ZeroMem ((VOID *) &ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT)); - // - // Report SEC Core debug information when remote debug is enabled - // - ImageContext.ImageAddress = SecCoreImageBase; - ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageContext.ImageAddress); - PeCoffLoaderRelocateImageExtraAction (&ImageContext); - - // - // Report PEI Core debug information when remote debug is enabled - // - ImageContext.ImageAddress = PeiCoreImageBase; - ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageContext.ImageAddress); - PeCoffLoaderRelocateImageExtraAction (&ImageContext); - - // - // Find PEI Core entry point - // - Status = PeCoffLoaderGetEntryPoint ((VOID *) (UINTN) PeiCoreImageBase, (VOID**) PeiCoreEntryPoint); - if (EFI_ERROR (Status)) { - *PeiCoreEntryPoint = 0; - } - - return; -} - diff --git a/CorebootModulePkg/SecCore/Ia32/SecEntry.asm b/CorebootModulePkg/SecCore/Ia32/SecEntry.asm deleted file mode 100644 index ca6aea04b9..0000000000 --- a/CorebootModulePkg/SecCore/Ia32/SecEntry.asm +++ /dev/null @@ -1,72 +0,0 @@ -;------------------------------------------------------------------------------ -; -; Copyright (c) 2013, Intel Corporation. All rights reserved.
-; SPDX-License-Identifier: BSD-2-Clause-Patent -; -; Module Name: -; -; SecEntry.asm -; -; Abstract: -; -; This is the code that begins in protected mode. -; It will transfer the control to pei core. -; -;------------------------------------------------------------------------------ -#include - -.686p -.xmm -.model small, c - -EXTRN SecStartup:NEAR - -; Pcds -EXTRN PcdGet32 (PcdPayloadFdMemBase):DWORD - - .code - -; -; SecCore Entry Point -; -; Processor is in flat protected mode -; -; @param[in] EAX Initial value of the EAX register (BIST: Built-in Self Test) -; @param[in] DI 'BP': boot-strap processor, or 'AP': application processor -; @param[in] EBP Pointer to the start of the Boot Firmware Volume -; -; @return None This routine does not return -; - -_ModuleEntryPoint PROC PUBLIC - ; - ; Disable all the interrupts - ; - cli - ; - ; Construct the temporary memory at 0x80000, length 0x10000 - ; - mov esp, (BASE_512KB + SIZE_64KB) - - ; - ; Pass BFV into the PEI Core - ; - push PcdGet32 (PcdPayloadFdMemBase) - - ; - ; Pass stack base into the PEI Core - ; - push BASE_512KB - - ; - ; Pass stack size into the PEI Core - ; - push SIZE_64KB - - ; - ; Pass Control into the PEI Core - ; - call SecStartup -_ModuleEntryPoint ENDP - -END diff --git a/CorebootModulePkg/SecCore/Ia32/SecEntry.nasm b/CorebootModulePkg/SecCore/Ia32/SecEntry.nasm deleted file mode 100644 index 0a55a65e96..0000000000 --- a/CorebootModulePkg/SecCore/Ia32/SecEntry.nasm +++ /dev/null @@ -1,66 +0,0 @@ -;------------------------------------------------------------------------------ -; -; Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.
-; SPDX-License-Identifier: BSD-2-Clause-Patent -; -; Abstract: -; -; Entry point for the coreboot UEFI payload. -; -;------------------------------------------------------------------------------ - -SECTION .text - -; C Functions -extern ASM_PFX(SecStartup) - -; Pcds -extern ASM_PFX(PcdGet32 (PcdPayloadFdMemBase)) - -; -; SecCore Entry Point -; -; Processor is in flat protected mode -; -; @param[in] EAX Initial value of the EAX register (BIST: Built-in Self Test) -; @param[in] DI 'BP': boot-strap processor, or 'AP': application processor -; @param[in] EBP Pointer to the start of the Boot Firmware Volume -; -; @return None This routine does not return -; -global ASM_PFX(_ModuleEntryPoint) -ASM_PFX(_ModuleEntryPoint): - ; - ; Disable all the interrupts - ; - cli - ; - ; Construct the temporary memory at 0x80000, length 0x10000 - ; - mov esp, (BASE_512KB + SIZE_64KB) - - ; - ; Pass BFV into the PEI Core - ; - push DWORD [ASM_PFX(PcdGet32 (PcdPayloadFdMemBase))] - - ; - ; Pass stack base into the PEI Core - ; - push BASE_512KB - - ; - ; Pass stack size into the PEI Core - ; - push SIZE_64KB - - ; - ; Pass Control into the PEI Core - ; - call ASM_PFX(SecStartup) - - ; - ; Should never return - ; - jmp $ - diff --git a/CorebootModulePkg/SecCore/Ia32/Stack.asm b/CorebootModulePkg/SecCore/Ia32/Stack.asm deleted file mode 100644 index 76e1d4cd9f..0000000000 --- a/CorebootModulePkg/SecCore/Ia32/Stack.asm +++ /dev/null @@ -1,76 +0,0 @@ -;------------------------------------------------------------------------------ -; -; Copyright (c) 2013, Intel Corporation. All rights reserved.
-; SPDX-License-Identifier: BSD-2-Clause-Patent -; -; Abstract: -; -; Switch the stack from temporary memory to permanent memory. -; -;------------------------------------------------------------------------------ - - .586p - .model flat,C - .code - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; SecSwitchStack ( -; UINT32 TemporaryMemoryBase, -; UINT32 PermenentMemoryBase -; ); -;------------------------------------------------------------------------------ -SecSwitchStack PROC - ; - ; Save three register: eax, ebx, ecx - ; - push eax - push ebx - push ecx - push edx - - ; - ; !!CAUTION!! this function address's is pushed into stack after - ; migration of whole temporary memory, so need save it to permanent - ; memory at first! - ; - - mov ebx, [esp + 20] ; Save the first parameter - mov ecx, [esp + 24] ; Save the second parameter - - ; - ; Save this function's return address into permanent memory at first. - ; Then, Fixup the esp point to permanent memory - ; - mov eax, esp - sub eax, ebx - add eax, ecx - mov edx, dword ptr [esp] ; copy pushed register's value to permanent memory - mov dword ptr [eax], edx - mov edx, dword ptr [esp + 4] - mov dword ptr [eax + 4], edx - mov edx, dword ptr [esp + 8] - mov dword ptr [eax + 8], edx - mov edx, dword ptr [esp + 12] - mov dword ptr [eax + 12], edx - mov edx, dword ptr [esp + 16] ; Update this function's return address into permanent memory - mov dword ptr [eax + 16], edx - mov esp, eax ; From now, esp is pointed to permanent memory - - ; - ; Fixup the ebp point to permanent memory - ; - mov eax, ebp - sub eax, ebx - add eax, ecx - mov ebp, eax ; From now, ebp is pointed to permanent memory - - pop edx - pop ecx - pop ebx - pop eax - ret -SecSwitchStack ENDP - - END diff --git a/CorebootModulePkg/SecCore/Ia32/Stack.nasm b/CorebootModulePkg/SecCore/Ia32/Stack.nasm deleted file mode 100644 index 55fd2243c8..0000000000 --- a/CorebootModulePkg/SecCore/Ia32/Stack.nasm +++ /dev/null @@ -1,72 +0,0 @@ -;------------------------------------------------------------------------------ -; -; Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.
-; SPDX-License-Identifier: BSD-2-Clause-Patent -; -; Abstract: -; -; Switch the stack from temporary memory to permanent memory. -; -;------------------------------------------------------------------------------ - -SECTION .text - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; SecSwitchStack ( -; UINT32 TemporaryMemoryBase, -; UINT32 PermenentMemoryBase -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(SecSwitchStack) -ASM_PFX(SecSwitchStack): - ; - ; Save three register: eax, ebx, ecx - ; - push eax - push ebx - push ecx - push edx - - ; - ; !!CAUTION!! this function address's is pushed into stack after - ; migration of whole temporary memory, so need save it to permanent - ; memory at first! - ; - - mov ebx, [esp + 20] ; Save the first parameter - mov ecx, [esp + 24] ; Save the second parameter - - ; - ; Save this function's return address into permanent memory at first. - ; Then, Fixup the esp point to permanent memory - ; - mov eax, esp - sub eax, ebx - add eax, ecx - mov edx, [esp] ; copy pushed register's value to permanent memory - mov [eax], edx - mov edx, [esp + 4] - mov [eax + 4], edx - mov edx, [esp + 8] - mov [eax + 8], edx - mov edx, [esp + 12] - mov [eax + 12], edx - mov edx, [esp + 16] ; Update return address into permanent memory - mov [eax + 16], edx - mov esp, eax ; From now, esp is pointed to permanent memory - - ; - ; Fixup the ebp point to permanent memory - ; - mov eax, ebp - sub eax, ebx - add eax, ecx - mov ebp, eax ; From now, ebp is pointed to permanent memory - - pop edx - pop ecx - pop ebx - pop eax - ret diff --git a/CorebootModulePkg/SecCore/SecCore.inf b/CorebootModulePkg/SecCore/SecCore.inf deleted file mode 100644 index 900d9273a0..0000000000 --- a/CorebootModulePkg/SecCore/SecCore.inf +++ /dev/null @@ -1,57 +0,0 @@ -## @file -# This is the first module taking control from the coreboot. -# -# Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = SecCore - FILE_GUID = BA7BE337-6CFB-4dbb-B26C-21EC2FC16073 - MODULE_TYPE = SEC - VERSION_STRING = 1.0 - - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 EBC -# - -[Sources] - SecMain.c - SecMain.h - FindPeiCore.c - -[Sources.IA32] - Ia32/Stack.nasm - Ia32/SecEntry.nasm - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - UefiCpuPkg/UefiCpuPkg.dec - CorebootModulePkg/CorebootModulePkg.dec - -[LibraryClasses] - BaseMemoryLib - DebugLib - BaseLib - PcdLib - DebugAgentLib - UefiCpuLib - PeCoffGetEntryPointLib - PeCoffExtraActionLib - -[Ppis] - gEfiSecPlatformInformationPpiGuid # PPI ALWAYS_PRODUCED - gEfiTemporaryRamSupportPpiGuid # PPI ALWAYS_PRODUCED - -[Pcd] - gUefiCorebootModulePkgTokenSpaceGuid.PcdPayloadFdMemBase - gUefiCorebootModulePkgTokenSpaceGuid.PcdPayloadFdMemSize - diff --git a/CorebootModulePkg/SecCore/SecMain.c b/CorebootModulePkg/SecCore/SecMain.c deleted file mode 100644 index 9095c90a84..0000000000 --- a/CorebootModulePkg/SecCore/SecMain.c +++ /dev/null @@ -1,285 +0,0 @@ -/** @file - C functions in SEC - -Copyright (c) 2013, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - - -#include "SecMain.h" - -EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI gSecTemporaryRamSupportPpi = { - SecTemporaryRamSupport -}; - -EFI_PEI_PPI_DESCRIPTOR mPeiSecPlatformInformationPpi[] = { - { - (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), - &gEfiTemporaryRamSupportPpiGuid, - &gSecTemporaryRamSupportPpi - } -}; - -// -// These are IDT entries pointing to 10:FFFFFFE4h. -// -UINT64 mIdtEntryTemplate = 0xffff8e000010ffe4ULL; - -/** - Caller provided function to be invoked at the end of InitializeDebugAgent(). - - Entry point to the C language phase of SEC. After the SEC assembly - code has initialized some temporary memory and set up the stack, - the control is transferred to this function. - - @param[in] Context The first input parameter of InitializeDebugAgent(). - -**/ -VOID -EFIAPI -SecStartupPhase2( - IN VOID *Context - ); - - -/** - - Entry point to the C language phase of SEC. After the SEC assembly - code has initialized some temporary memory and set up the stack, - the control is transferred to this function. - - - @param SizeOfRam Size of the temporary memory available for use. - @param TempRamBase Base address of temporary ram - @param BootFirmwareVolume Base address of the Boot Firmware Volume. -**/ -VOID -EFIAPI -SecStartup ( - IN UINT32 SizeOfRam, - IN UINT32 TempRamBase, - IN VOID *BootFirmwareVolume - ) -{ - EFI_SEC_PEI_HAND_OFF SecCoreData; - IA32_DESCRIPTOR IdtDescriptor; - SEC_IDT_TABLE IdtTableInStack; - UINT32 Index; - UINT32 PeiStackSize; - - PeiStackSize = (SizeOfRam >> 1); - - ASSERT (PeiStackSize < SizeOfRam); - - // - // Process all libraries constructor function linked to SecCore. - // - ProcessLibraryConstructorList (); - - // - // Initialize floating point operating environment - // to be compliant with UEFI spec. - // - InitializeFloatingPointUnits (); - - - // |-------------------|----> - // |Idt Table | - // |-------------------| - // |PeiService Pointer | PeiStackSize - // |-------------------| - // | | - // | Stack | - // |-------------------|----> - // | | - // | | - // | Heap | PeiTemporaryRamSize - // | | - // | | - // |-------------------|----> TempRamBase - - IdtTableInStack.PeiService = 0; - for (Index = 0; Index < SEC_IDT_ENTRY_COUNT; Index ++) { - CopyMem ((VOID*)&IdtTableInStack.IdtTable[Index], (VOID*)&mIdtEntryTemplate, sizeof (UINT64)); - } - - IdtDescriptor.Base = (UINTN) &IdtTableInStack.IdtTable; - IdtDescriptor.Limit = (UINT16)(sizeof (IdtTableInStack.IdtTable) - 1); - - AsmWriteIdtr (&IdtDescriptor); - - // - // Update the base address and length of Pei temporary memory - // - SecCoreData.DataSize = (UINT16) sizeof (EFI_SEC_PEI_HAND_OFF); - SecCoreData.BootFirmwareVolumeBase = BootFirmwareVolume; - SecCoreData.BootFirmwareVolumeSize = (UINTN)(0x100000000ULL - (UINTN) BootFirmwareVolume); - SecCoreData.TemporaryRamBase = (VOID*)(UINTN) TempRamBase; - SecCoreData.TemporaryRamSize = SizeOfRam; - SecCoreData.PeiTemporaryRamBase = SecCoreData.TemporaryRamBase; - SecCoreData.PeiTemporaryRamSize = SizeOfRam - PeiStackSize; - SecCoreData.StackBase = (VOID*)(UINTN)(TempRamBase + SecCoreData.PeiTemporaryRamSize); - SecCoreData.StackSize = PeiStackSize; - - // - // Initialize Debug Agent to support source level debug in SEC/PEI phases before memory ready. - // - InitializeDebugAgent (DEBUG_AGENT_INIT_PREMEM_SEC, &SecCoreData, SecStartupPhase2); - -} - -/** - Caller provided function to be invoked at the end of InitializeDebugAgent(). - - Entry point to the C language phase of SEC. After the SEC assembly - code has initialized some temporary memory and set up the stack, - the control is transferred to this function. - - @param[in] Context The first input parameter of InitializeDebugAgent(). - -**/ -VOID -EFIAPI -SecStartupPhase2( - IN VOID *Context - ) -{ - EFI_SEC_PEI_HAND_OFF *SecCoreData; - EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint; - - SecCoreData = (EFI_SEC_PEI_HAND_OFF *) Context; - // - // Find Pei Core entry point. It will report SEC and Pei Core debug information if remote debug - // is enabled. - // - FindAndReportEntryPoints ((EFI_FIRMWARE_VOLUME_HEADER *) SecCoreData->BootFirmwareVolumeBase, &PeiCoreEntryPoint); - if (PeiCoreEntryPoint == NULL) - { - CpuDeadLoop (); - } - - // - // Transfer the control to the PEI core - // - ASSERT (PeiCoreEntryPoint != NULL); - (*PeiCoreEntryPoint) (SecCoreData, (EFI_PEI_PPI_DESCRIPTOR *)&mPeiSecPlatformInformationPpi); - - // - // Should not come here. - // - return ; -} - -/** - This service of the TEMPORARY_RAM_SUPPORT_PPI that migrates temporary RAM into - permanent memory. - - @param PeiServices Pointer to the PEI Services Table. - @param TemporaryMemoryBase Source Address in temporary memory from which the SEC or PEIM will copy the - Temporary RAM contents. - @param PermanentMemoryBase Destination Address in permanent memory into which the SEC or PEIM will copy the - Temporary RAM contents. - @param CopySize Amount of memory to migrate from temporary to permanent memory. - - @retval EFI_SUCCESS The data was successfully returned. - @retval EFI_INVALID_PARAMETER PermanentMemoryBase + CopySize > TemporaryMemoryBase when - TemporaryMemoryBase > PermanentMemoryBase. - -**/ -EFI_STATUS -EFIAPI -SecTemporaryRamSupport ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, - IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, - IN UINTN CopySize - ) -{ - IA32_DESCRIPTOR IdtDescriptor; - VOID* OldHeap; - VOID* NewHeap; - VOID* OldStack; - VOID* NewStack; - DEBUG_AGENT_CONTEXT_POSTMEM_SEC DebugAgentContext; - BOOLEAN OldStatus; - UINTN PeiStackSize; - - PeiStackSize = (CopySize >> 1); - - ASSERT (PeiStackSize < CopySize); - - // - // |-------------------|----> - // | Stack | PeiStackSize - // |-------------------|----> - // | Heap | PeiTemporaryRamSize - // |-------------------|----> TempRamBase - // - // |-------------------|----> - // | Heap | PeiTemporaryRamSize - // |-------------------|----> - // | Stack | PeiStackSize - // |-------------------|----> PermanentMemoryBase - // - - OldHeap = (VOID*)(UINTN)TemporaryMemoryBase; - NewHeap = (VOID*)((UINTN)PermanentMemoryBase + PeiStackSize); - - OldStack = (VOID*)((UINTN)TemporaryMemoryBase + CopySize - PeiStackSize); - NewStack = (VOID*)(UINTN)PermanentMemoryBase; - - DebugAgentContext.HeapMigrateOffset = (UINTN)NewHeap - (UINTN)OldHeap; - DebugAgentContext.StackMigrateOffset = (UINTN)NewStack - (UINTN)OldStack; - - OldStatus = SaveAndSetDebugTimerInterrupt (FALSE); - // - // Initialize Debug Agent to support source level debug in PEI phase after memory ready. - // It will build HOB and fix up the pointer in IDT table. - // - InitializeDebugAgent (DEBUG_AGENT_INIT_POSTMEM_SEC, (VOID *) &DebugAgentContext, NULL); - - // - // Migrate Heap - // - CopyMem (NewHeap, OldHeap, CopySize - PeiStackSize); - - // - // Migrate Stack - // - CopyMem (NewStack, OldStack, PeiStackSize); - - - // - // We need *not* fix the return address because currently, - // The PeiCore is executed in flash. - // - - // - // Rebase IDT table in permanent memory - // - AsmReadIdtr (&IdtDescriptor); - IdtDescriptor.Base = IdtDescriptor.Base - (UINTN)OldStack + (UINTN)NewStack; - - AsmWriteIdtr (&IdtDescriptor); - - - // - // Program MTRR - // - - // - // SecSwitchStack function must be invoked after the memory migration - // immediately, also we need fixup the stack change caused by new call into - // permanent memory. - // - SecSwitchStack ( - (UINT32) (UINTN) OldStack, - (UINT32) (UINTN) NewStack - ); - - SaveAndSetDebugTimerInterrupt (OldStatus); - - return EFI_SUCCESS; -} - diff --git a/CorebootModulePkg/SecCore/SecMain.h b/CorebootModulePkg/SecCore/SecMain.h deleted file mode 100644 index 624f967fec..0000000000 --- a/CorebootModulePkg/SecCore/SecMain.h +++ /dev/null @@ -1,128 +0,0 @@ -/** @file - Master header file for SecCore. - -Copyright (c) 2013, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _SEC_CORE_H_ -#define _SEC_CORE_H_ - - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - - -#define SEC_IDT_ENTRY_COUNT 34 - -typedef struct _SEC_IDT_TABLE { - // - // Reserved 8 bytes preceding IDT to store EFI_PEI_SERVICES**, since IDT base - // address should be 8-byte alignment. - // Note: For IA32, only the 4 bytes immediately preceding IDT is used to store - // EFI_PEI_SERVICES** - // - UINT64 PeiService; - UINT64 IdtTable[SEC_IDT_ENTRY_COUNT]; -} SEC_IDT_TABLE; - -/** - Switch the stack in the temporary memory to the one in the permanent memory. - - This function must be invoked after the memory migration immediately. The relative - position of the stack in the temporary and permanent memory is same. - - @param TemporaryMemoryBase Base address of the temporary memory. - @param PermenentMemoryBase Base address of the permanent memory. -**/ -VOID -EFIAPI -SecSwitchStack ( - UINT32 TemporaryMemoryBase, - UINT32 PermenentMemoryBase - ); - -/** - This service of the TEMPORARY_RAM_SUPPORT_PPI that migrates temporary RAM into - permanent memory. - - @param PeiServices Pointer to the PEI Services Table. - @param TemporaryMemoryBase Source Address in temporary memory from which the SEC or PEIM will copy the - Temporary RAM contents. - @param PermanentMemoryBase Destination Address in permanent memory into which the SEC or PEIM will copy the - Temporary RAM contents. - @param CopySize Amount of memory to migrate from temporary to permanent memory. - - @retval EFI_SUCCESS The data was successfully returned. - @retval EFI_INVALID_PARAMETER PermanentMemoryBase + CopySize > TemporaryMemoryBase when - TemporaryMemoryBase > PermanentMemoryBase. - -**/ -EFI_STATUS -EFIAPI -SecTemporaryRamSupport ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, - IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, - IN UINTN CopySize - ); - -/** - Entry point to the C language phase of SEC. After the SEC assembly - code has initialized some temporary memory and set up the stack, - the control is transferred to this function. - - @param SizeOfRam Size of the temporary memory available for use. - @param TempRamBase Base address of temporary ram - @param BootFirmwareVolume Base address of the Boot Firmware Volume. -**/ -VOID -EFIAPI -SecStartup ( - IN UINT32 SizeOfRam, - IN UINT32 TempRamBase, - IN VOID *BootFirmwareVolume - ); - -/** - Find and return Pei Core entry point. - - It also find SEC and PEI Core file debug information. It will report them if - remote debug is enabled. - - @param BootFirmwareVolumePtr Point to the boot firmware volume. - @param PeiCoreEntryPoint Point to the PEI core entry point. - -**/ -VOID -EFIAPI -FindAndReportEntryPoints ( - IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr, - OUT EFI_PEI_CORE_ENTRY_POINT *PeiCoreEntryPoint - ); - -/** - Autogenerated function that calls the library constructors for all of the module's - dependent libraries. This function must be called by the SEC Core once a stack has - been established. - -**/ -VOID -EFIAPI -ProcessLibraryConstructorList ( - VOID - ); - -#endif -- 2.16.2.windows.1