From: andrewfish Date: Mon, 20 Sep 2010 21:04:07 +0000 (+0000) Subject: Finish spliting SecDispatchTableLib into two functions so it can be a BaseLib X-Git-Tag: edk2-stable201903~15528 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=69cf40e09aabb26527cc38f96060c026eeba97ab Finish spliting SecDispatchTableLib into two functions so it can be a BaseLib git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10895 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/UnixPkg/Include/Library/SecDispatchTableLib.h b/UnixPkg/Include/Library/SecDispatchTableLib.h index 6cebb58b9b..9e220073f4 100644 --- a/UnixPkg/Include/Library/SecDispatchTableLib.h +++ b/UnixPkg/Include/Library/SecDispatchTableLib.h @@ -17,21 +17,40 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #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 * +EFI_STATUS 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 ); diff --git a/UnixPkg/Include/Protocol/UnixThunk.h b/UnixPkg/Include/Protocol/UnixThunk.h index 689e32fd7d..12d07f9311 100644 --- a/UnixPkg/Include/Protocol/UnixThunk.h +++ b/UnixPkg/Include/Protocol/UnixThunk.h @@ -373,13 +373,13 @@ typedef struct _EFI_UNIX_THUNK_PROTOCOL { 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; diff --git a/UnixPkg/Library/SecDispatchTableLib/SecDispatchTableLib.c b/UnixPkg/Library/SecDispatchTableLib/SecDispatchTableLib.c index da3d182f1e..924547d6b4 100644 --- a/UnixPkg/Library/SecDispatchTableLib/SecDispatchTableLib.c +++ b/UnixPkg/Library/SecDispatchTableLib/SecDispatchTableLib.c @@ -14,23 +14,48 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. --*/ #include +#include +#include + /** - 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 - @param OriginalTable SECs default PPI dispatch table +**/ +UINTN +EFIAPI +OverrideDispatchTableExtraSize ( + ) +{ + return 0; +} - @return OriginalTable or override of the table + +/** + 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 OriginalTableSize Size of SECs default PPI dispatch table + @param NewTable New dispatch table + @param NewTableSize Size of of the NewTable in bytes + + @return EFI_SUCCESS table was copied **/ -EFI_PEI_PPI_DESCRIPTOR * +EFI_STATUS 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 ) { - return (EFI_PEI_PPI_DESCRIPTOR *)OriginalTable; + CopyMem (NewTable, OriginalTable, OriginalTableSize); + + return EFI_SUCCESS; } diff --git a/UnixPkg/Library/SecDispatchTableLib/SecDispatchTableLib.inf b/UnixPkg/Library/SecDispatchTableLib/SecDispatchTableLib.inf index 858a14012d..2900fdbb6a 100644 --- a/UnixPkg/Library/SecDispatchTableLib/SecDispatchTableLib.inf +++ b/UnixPkg/Library/SecDispatchTableLib/SecDispatchTableLib.inf @@ -38,5 +38,6 @@ [LibraryClasses] BaseLib + BaseMemoryLib diff --git a/UnixPkg/Sec/SecMain.c b/UnixPkg/Sec/SecMain.c index b2046b6a75..06dbccb18e 100644 --- a/UnixPkg/Sec/SecMain.c +++ b/UnixPkg/Sec/SecMain.c @@ -544,6 +544,7 @@ Returns: 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 @@ -597,11 +598,19 @@ Returns: return ; } + 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 // - DispatchTable = OverrideDispatchTable (&gPrivateDispatchTable[0]); + OverrideDispatchTable (&gPrivateDispatchTable[0], sizeof (gPrivateDispatchTable), DispatchTable, DispatchTableSize); // // Transfer control to the PEI Core diff --git a/UnixPkg/UnixPkg.dsc b/UnixPkg/UnixPkg.dsc index 50a95942a1..c76ea25c79 100644 --- a/UnixPkg/UnixPkg.dsc +++ b/UnixPkg/UnixPkg.dsc @@ -223,7 +223,7 @@ # generated for it, but the binary will not be put into any firmware volume. # ################################################################################################### -[Components.common] +[Components] ## # SEC Phase modules ##