mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-25 14:44:28 +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
|
MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
|
||||||
PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
|
PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
|
||||||
PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
|
PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
|
||||||
|
ArmFfaLib|ArmPkg/Library/ArmFfaLib/ArmFfaPeiLib.inf
|
||||||
|
|
||||||
[Components.common]
|
[Components.common]
|
||||||
ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
|
ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
|
||||||
@ -133,6 +134,7 @@
|
|||||||
ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf
|
ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf
|
||||||
ArmPkg/Library/OpteeLib/OpteeLib.inf
|
ArmPkg/Library/OpteeLib/OpteeLib.inf
|
||||||
ArmPkg/Library/ArmTransferListLib/ArmTransferListLib.inf
|
ArmPkg/Library/ArmTransferListLib/ArmTransferListLib.inf
|
||||||
|
ArmPkg/Library/ArmFfaLib/ArmFfaPeiLib.inf
|
||||||
ArmPkg/Library/ArmFfaLib/ArmFfaDxeLib.inf
|
ArmPkg/Library/ArmFfaLib/ArmFfaDxeLib.inf
|
||||||
|
|
||||||
ArmPkg/Filesystem/SemihostFs/SemihostFs.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