mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
ArmPkg: Add ArmFfaLib used in PEIM
Add ArmFfaLib used in PEIM. Signed-off-by: Levi Yun <yeoreum.yun@arm.com>
This commit is contained in:
parent
5d1b38dd07
commit
166c3b2eb7
@ -100,6 +100,7 @@
|
||||
MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
|
||||
PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
|
||||
PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
|
||||
ArmFfaLib|ArmPkg/Library/ArmFfaLib/ArmFfaPeiLib.inf
|
||||
|
||||
[Components.common]
|
||||
ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
|
||||
@ -133,6 +134,7 @@
|
||||
ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf
|
||||
ArmPkg/Library/OpteeLib/OpteeLib.inf
|
||||
ArmPkg/Library/ArmTransferListLib/ArmTransferListLib.inf
|
||||
ArmPkg/Library/ArmFfaLib/ArmFfaPeiLib.inf
|
||||
ArmPkg/Library/ArmFfaLib/ArmFfaDxeLib.inf
|
||||
|
||||
ArmPkg/Filesystem/SemihostFs/SemihostFs.inf
|
||||
|
98
ArmPkg/Library/ArmFfaLib/ArmFfaPeiLib.c
Normal file
98
ArmPkg/Library/ArmFfaLib/ArmFfaPeiLib.c
Normal file
@ -0,0 +1,98 @@
|
||||
/** @file
|
||||
Arm Ffa library code for PEI Driver
|
||||
|
||||
Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Glossary:
|
||||
- FF-A - Firmware Framework for Arm A-profile
|
||||
|
||||
@par Reference(s):
|
||||
- Arm Firmware Framework for Arm A-Profile [https://developer.arm.com/documentation/den0077/latest]
|
||||
|
||||
**/
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <PiPei.h>
|
||||
#include <Pi/PiPeiCis.h>
|
||||
#include <Pi/PiMultiPhase.h>
|
||||
|
||||
#include <Library/ArmLib.h>
|
||||
#include <Library/ArmSmcLib.h>
|
||||
#include <Library/ArmFfaLib.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/HobLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
#include <IndustryStandard/ArmFfaSvc.h>
|
||||
|
||||
#include "ArmFfaCommon.h"
|
||||
#include "ArmFfaRxTxMap.h"
|
||||
|
||||
/**
|
||||
ArmFfaLib Constructor.
|
||||
|
||||
@param [in] FileHandle File Handle
|
||||
@param [in] PeiServices Pei Service Table
|
||||
|
||||
@retval EFI_SUCCESS Success
|
||||
@retval Others Error
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ArmFfaPeiLibConstructor (
|
||||
IN EFI_PEI_FILE_HANDLE FileHandle,
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HOB_GUID_TYPE *RxTxBufferHob;
|
||||
ARM_FFA_RX_TX_BUFFER_INFO *BufferInfo;
|
||||
|
||||
Status = ArmFfaLibCommonInit ();
|
||||
if (EFI_ERROR (Status)) {
|
||||
if (Status == EFI_UNSUPPORTED) {
|
||||
/*
|
||||
* EFI_UNSUPPORTED return from ArmFfaLibCommonInit() means
|
||||
* FF-A interface doesn't support.
|
||||
* However, It doesn't make failure of loading driver/library instance
|
||||
* (i.e) ArmPkg's MmCommunication Dxe/PEI Driver uses as well as SpmMm.
|
||||
* So If FF-A is not supported the the MmCommunication Dxe/PEI falls
|
||||
* back to SpmMm.
|
||||
* For this case, return EFI_SUCCESS.
|
||||
|
||||
*/
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
RxTxBufferHob = GetFirstGuidHob (&gArmFfaRxTxBufferInfoGuid);
|
||||
if (RxTxBufferHob == NULL) {
|
||||
Status = ArmFfaLibRxTxMap ();
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
BufferInfo = BuildGuidHob (
|
||||
&gArmFfaRxTxBufferInfoGuid,
|
||||
sizeof (ARM_FFA_RX_TX_BUFFER_INFO)
|
||||
);
|
||||
if (BufferInfo == NULL) {
|
||||
ArmFfaLibRxTxUnmap ();
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
BufferInfo->TxBufferAddr = (VOID *)(UINTN)PcdGet64 (PcdFfaTxBuffer);
|
||||
BufferInfo->TxBufferSize = PcdGet64 (PcdFfaTxRxPageCount) * EFI_PAGE_SIZE;
|
||||
BufferInfo->RxBufferAddr = (VOID *)(UINTN)PcdGet64 (PcdFfaRxBuffer);
|
||||
BufferInfo->RxBufferSize = PcdGet64 (PcdFfaTxRxPageCount) * EFI_PAGE_SIZE;
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
45
ArmPkg/Library/ArmFfaLib/ArmFfaPeiLib.inf
Normal file
45
ArmPkg/Library/ArmFfaLib/ArmFfaPeiLib.inf
Normal file
@ -0,0 +1,45 @@
|
||||
## @file
|
||||
# Provides FF-A ABI Library used in PEI Driver.
|
||||
#
|
||||
# Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = ArmFfaPeiLib
|
||||
FILE_GUID = 6e21912a-5f50-11ef-a3ae-dfe665fd4fc0
|
||||
MODULE_TYPE = PEIM
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmFfaLib|PEIM
|
||||
CONSTRUCTOR = ArmFfaPeiLibConstructor
|
||||
|
||||
[Sources]
|
||||
ArmFfaCommon.h
|
||||
ArmFfaCommon.c
|
||||
ArmFfaRxTxMap.h
|
||||
ArmFfaRxTxMap.c
|
||||
ArmFfaPeiLib.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
ArmSmcLib
|
||||
ArmSvcLib
|
||||
BaseLib
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
HobLib
|
||||
|
||||
[Pcd]
|
||||
gArmTokenSpaceGuid.PcdFfaLibConduitSmc
|
||||
gArmTokenSpaceGuid.PcdFfaTxBuffer
|
||||
gArmTokenSpaceGuid.PcdFfaRxBuffer
|
||||
gArmTokenSpaceGuid.PcdFfaTxRxPageCount
|
||||
gArmTokenSpaceGuid.PcdFfaExitBootEventRegistered
|
||||
|
||||
[Guids]
|
||||
gArmFfaRxTxBufferInfoGuid
|
Loading…
x
Reference in New Issue
Block a user