git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10895
6f19259b-4bc3-4df7-8a09-
765794883524
#ifndef __SEC_DISPATCH_TABLE_LIB_H__
#define __SEC_DISPATCH_TABLE_LIB_H__
#ifndef __SEC_DISPATCH_TABLE_LIB_H__
#define __SEC_DISPATCH_TABLE_LIB_H__
- Allow an override of the Sec PPI Dispatch Table. This table contains PPIs passed
- up from SEC to PEI. This function is responcible for allocating space for the
- overridden table.
+ Return the number of bytes that OverrideDispatchTable() will append to
+ the dispatch table.
+
+ @return Size of table in bytes OverrideDispatchTable() will return
+**/
+UINTN
+EFIAPI
+OverrideDispatchTableExtraSize (
+ VOID
+ );
+
+
+/**
+ Allow an override of the Sec PPI Dispatch Table. This table contains PPIs passed
+ up from SEC to PEI.
- @param OriginalTable SECs default PPI dispatch table
+ @param OriginalTable SECs default PPI dispatch table
+ @param OriginalTableSize Size of SECs default PPI dispatch table
+ @param NewTable New dispatch table
+ @param NewTableSize Size of of the NewTable in bytes
- @return OriginalTable or override of the table
+ @return EFI_SUCCESS table was copied
-EFI_PEI_PPI_DESCRIPTOR *
EFIAPI
OverrideDispatchTable (
EFIAPI
OverrideDispatchTable (
- IN CONST EFI_PEI_PPI_DESCRIPTOR *OriginalTable
+ IN CONST EFI_PEI_PPI_DESCRIPTOR *OriginalTable,
+ IN UINTN OriginalTableSize,
+ IN OUT EFI_PEI_PPI_DESCRIPTOR *NewTable,
+ IN UINTN NewTableSize
UnixGetTimeZone GetTimeZone;
UnixGetDayLight GetDayLight;
UnixPoll Poll;
UnixGetTimeZone GetTimeZone;
UnixGetDayLight GetDayLight;
UnixPoll Poll;
- UnixRead Read;
- UnixWrite Write;
- UnixGetenv Getenv;
- UnixOpen Open;
- UnixSeek Lseek;
- UnixFtruncate FTruncate;
- UnixClose Close;
+ UnixRead Read;
+ UnixWrite Write;
+ UnixGetenv Getenv;
+ UnixOpen Open;
+ UnixSeek Lseek;
+ UnixFtruncate FTruncate;
+ UnixClose Close;
UnixMkdir MkDir;
UnixRmDir RmDir;
UnixUnLink UnLink;
UnixMkdir MkDir;
UnixRmDir RmDir;
UnixUnLink UnLink;
--*/\r
\r
#include <PiPei.h>\r
--*/\r
\r
#include <PiPei.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/SecDispatchTableLib.h>\r
+\r
- Allow an override of the Sec PPI Dispatch Table. This table contains PPIs passed\r
- up from SEC to PEI. This function is responcible for allocating space for the \r
- overridden table.\r
+ Return the number of bytes that OverrideDispatchTable() will append to\r
+ the dispatch table.\r
+ @return Size of table in bytes OverrideDispatchTable() will return\r
- @param OriginalTable SECs default PPI dispatch table\r
+**/\r
+UINTN\r
+EFIAPI\r
+OverrideDispatchTableExtraSize (\r
+ )\r
+{\r
+ return 0;\r
+}\r
- @return OriginalTable or override of the table\r
+\r
+/**\r
+ Allow an override of the Sec PPI Dispatch Table. This table contains PPIs passed\r
+ up from SEC to PEI. \r
+\r
+ @param OriginalTable SECs default PPI dispatch table\r
+ @param OriginalTableSize Size of SECs default PPI dispatch table\r
+ @param NewTable New dispatch table\r
+ @param NewTableSize Size of of the NewTable in bytes\r
+\r
+ @return EFI_SUCCESS table was copied\r
-EFI_PEI_PPI_DESCRIPTOR *\r
EFIAPI\r
OverrideDispatchTable (\r
EFIAPI\r
OverrideDispatchTable (\r
- IN CONST EFI_PEI_PPI_DESCRIPTOR *OriginalTable\r
+ IN CONST EFI_PEI_PPI_DESCRIPTOR *OriginalTable,\r
+ IN UINTN OriginalTableSize,\r
+ IN OUT EFI_PEI_PPI_DESCRIPTOR *NewTable,\r
+ IN UINTN NewTableSize\r
- return (EFI_PEI_PPI_DESCRIPTOR *)OriginalTable;\r
+ CopyMem (NewTable, OriginalTable, OriginalTableSize);\r
+\r
+ return EFI_SUCCESS;\r
\r
[LibraryClasses]\r
BaseLib\r
\r
[LibraryClasses]\r
BaseLib\r
EFI_SEC_PEI_HAND_OFF *SecCoreData;
UINTN PeiStackSize;
EFI_PEI_PPI_DESCRIPTOR *DispatchTable;
EFI_SEC_PEI_HAND_OFF *SecCoreData;
UINTN PeiStackSize;
EFI_PEI_PPI_DESCRIPTOR *DispatchTable;
+ UINTN DispatchTableSize;
//
// Compute Top Of Memory for Stack and PEI Core Allocations
//
// Compute Top Of Memory for Stack and PEI Core Allocations
+ DispatchTableSize = sizeof (gPrivateDispatchTable);
+ DispatchTableSize += OverrideDispatchTableExtraSize ();
+
+ DispatchTable = malloc (DispatchTableSize);
+ if (DispatchTable == NULL) {
+ return;
+ }
+
//
// Allow an override for extra PPIs to be passed up to PEI
// This is an easy way to enable OS specific customizations
//
//
// Allow an override for extra PPIs to be passed up to PEI
// This is an easy way to enable OS specific customizations
//
- DispatchTable = OverrideDispatchTable (&gPrivateDispatchTable[0]);
+ OverrideDispatchTable (&gPrivateDispatchTable[0], sizeof (gPrivateDispatchTable), DispatchTable, DispatchTableSize);
//
// Transfer control to the PEI Core
//
// Transfer control to the PEI Core
# generated for it, but the binary will not be put into any firmware volume.\r
#\r
###################################################################################################\r
# generated for it, but the binary will not be put into any firmware volume.\r
#\r
###################################################################################################\r
##\r
# SEC Phase modules\r
##\r
##\r
# SEC Phase modules\r
##\r