//C:\udk2\OvmfPkg\TestByMy\PeiTest\MyPpiPeimA\MyPpiPeimA.inf
//C:\udk2\OvmfPkg\TestByMy\PeiTest\MyPpiPeimA\MyPpiPeimA.c
#include <Uefi/UefiBaseType.h>
#include <Pi/PiPeiCis.h>
#include <Ppi/MyFirstPeiLib.h>
#include <Library/PeimEntryPoint.h>
#include <Library/DebugLib.h>
#include <Library/BaseLib.h>
#include <Library/PeiServicesLib.h>
extern EFI_GUID gMyFirstPpiGuid;
EFI_STATUS
EFIAPI
NotifiMyDriverCallBack (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc,
IN VOID *Ppi
)
{
UINTN Temp;
for(Temp = 0; Temp <= 5; Temp++) {
DEBUG ((DEBUG_INFO, "\n"));
}
DEBUG ((DEBUG_INFO, "Ppi Peim A is install!..\n"));
return EFI_SUCCESS;
}
EFI_MYPPI_STR InstallMy = {
PrintHelloMesg
};
EFI_PEI_NOTIFY_DESCRIPTOR PpiMySetNotif = {
(EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
&gMyFirstPpiGuid,
&NotifiMyDriverCallBack
};
EFI_PEI_PPI_DESCRIPTOR PpiMySet = {
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
&gMyFirstPpiGuid,
&InstallMy
};
EFI_STATUS
EFIAPI
MyPpiPeimAEntry(
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
EFI_STATUS Status;
UINTN Temp;
for(Temp = 0; Temp <= 5; Temp++) {
DEBUG ((DEBUG_INFO, "\n"));
}
DEBUG ((DEBUG_INFO, "MyPpiPeimA is Start..\n"));
Status = PeiServicesNotifyPpi (&PpiMySetNotif);
ASSERT_EFI_ERROR (Status);
Status = PeiServicesInstallPpi (&PpiMySet);
ASSERT_EFI_ERROR (Status);
DEBUG ((DEBUG_INFO, "MyPpiPeimA is End..\n"));
return Status;
}
MyPpiPeimA.inf
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = MyPpiPeimA
FILE_GUID = 2D6F6BC2-9681-8E11-8579-B57DCD006011
MODULE_TYPE = PEIM
VERSION_STRING = 1.0
ENTRY_POINT = MyPpiPeimAEntry
[Sources]
MyPpiPeimA.c
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
OvmfPkg/OvmfPkg.dec
[LibraryClasses]
PeimEntryPoint
DebugLib
BaseLib
MyFirstPeiLib
PeiServicesLib
[Ppis]
gMyFirstPpiGuid
[Depex]
TRUE
//C:\udk2\OvmfPkg\OvmfPkg.dec
[Ppis]
gMyFirstPpiGuid = { 0xE113F897, 0x75CF, 0xF630, { 0x81, 0x7F, 0xC8, 0x5A, 0x79, 0xE8, 0xAE, 0x66 } }
MyPpiPeimB.c
#include <Uefi/UefiBaseType.h>
#include <Pi/PiPeiCis.h>
#include <Ppi/MyFirstPeiLib.h>
#include <Library/PeimEntryPoint.h>
#include <Library/DebugLib.h>
#include <Library/BaseLib.h>
#include <Library/PeiServicesLib.h>
extern EFI_GUID gMyFirstPpiGuid;
EFI_STATUS
EFIAPI
MyPpiPeimBEntry(
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
EFI_STATUS Status;
UINTN Temp;
EFI_MYPPI_STR *LocatePpiMy;
for(Temp = 0; Temp <= 5; Temp++) {
DEBUG ((DEBUG_INFO, "\n"));
}
DEBUG ((DEBUG_INFO, "MyPpiPeimB is Start..\n"));
Status = PeiServicesLocatePpi (
&gMyFirstPpiGuid,
0,
NULL,
(VOID **)&LocatePpiMy
);
ASSERT_EFI_ERROR (Status);
LocatePpiMy->PrintMesg(L"My Locate PPI to printf Hello World in MyPpiPeimB ...\n");
DEBUG ((DEBUG_INFO, "MyPpiPeimB is End..\n"));
return Status;
}
MyPpiPeimB.inf
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = MyPpiPeimB
FILE_GUID = 2D6F6232-9622-8E11-8579-B57DCD006011
MODULE_TYPE = PEIM
VERSION_STRING = 1.0
ENTRY_POINT = MyPpiPeimBEntry
[Sources]
MyPpiPeimB.c
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
OvmfPkg/OvmfPkg.dec
[LibraryClasses]
PeimEntryPoint
DebugLib
BaseLib
MyFirstPeiLib
PeiServicesLib
[Ppis]
gMyFirstPpiGuid
[Depex]
gMyFirstPpiGuid
OvmfPkgX64.dsc
//C:\udk2\OvmfPkg\OvmfPkgX64.dsc
OvmfPkg/TestByMy/PeiTest/MyPpiPeimA/MyPpiPeimA.inf
OvmfPkg/TestByMy/PeiTest/MyPpiPeimB/MyPpiPeimB.inf
OvmfPkgX64.fdf
//C:\udk2\OvmfPkg\OvmfPkgX64.fdf
INF OvmfPkg/TestByMy/PeiTest/MyPpiPeimA/MyPpiPeimA.inf
INF OvmfPkg/TestByMy/PeiTest/MyPpiPeimB/MyPpiPeimB.inf