X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdeModulePkg%2FCore%2FDxe%2FDxeMain.h;h=dedb84047f8e7e65e3f7e76dc7b1dba86f06b283;hb=9e945f785238fe3bb72bbc66f162b68938898c31;hp=2f7f8b5ea0a6395caf0585f1045049d1d631ce2c;hpb=54ea99a798f7d714b59503fcc21ee97878bc6492;p=mirror_edk2.git diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h b/MdeModulePkg/Core/Dxe/DxeMain.h index 2f7f8b5ea0..dedb84047f 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain.h +++ b/MdeModulePkg/Core/Dxe/DxeMain.h @@ -2,8 +2,8 @@ The internal header file includes the common header files, defines internal structure and functions used by DxeCore module. -Copyright (c) 2006 - 2009, Intel Corporation.
-All rights reserved. This program and the accompanying materials +Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
+This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php @@ -48,10 +48,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include #include +#include #include #include +#include #include #include #include @@ -61,6 +64,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include #include @@ -73,6 +77,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include +#include #include #include #include @@ -80,6 +86,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include +#include // @@ -116,7 +124,7 @@ typedef struct { EFI_EVENT Event; VOID *Registration; BOOLEAN Present; -} ARCHITECTURAL_PROTOCOL_ENTRY; +} EFI_CORE_PROTOCOL_NOTIFY_ENTRY; // // DXE Dispatcher Data structures @@ -127,6 +135,7 @@ typedef struct { UINTN Signature; LIST_ENTRY Link; // mFvHandleList EFI_HANDLE Handle; + EFI_GUID FvNameGuid; } KNOWN_HANDLE; @@ -157,6 +166,7 @@ typedef struct { BOOLEAN DepexProtocolError; EFI_HANDLE ImageHandle; + BOOLEAN IsFvImage; } EFI_CORE_DRIVER_ENTRY; @@ -194,6 +204,7 @@ extern EFI_METRONOME_ARCH_PROTOCOL *gMetronome; extern EFI_TIMER_ARCH_PROTOCOL *gTimer; extern EFI_SECURITY_ARCH_PROTOCOL *gSecurity; extern EFI_BDS_ARCH_PROTOCOL *gBds; +extern EFI_SMM_BASE2_PROTOCOL *gSmmBase2; extern EFI_TPL gEfiCurrentTpl; @@ -345,7 +356,7 @@ CoreInitializeImageServices ( **/ VOID -CoreNotifyOnArchProtocolInstallation ( +CoreNotifyOnProtocolInstallation ( VOID ); @@ -1114,8 +1125,7 @@ CoreConnectController ( @retval EFI_SUCCESS DriverImageHandle is not NULL, and on entry DriverImageHandle is not managing ControllerHandle. - @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid - EFI_HANDLE. + @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. @retval EFI_INVALID_PARAMETER DriverImageHandle is not NULL, and it is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER ChildHandle is not NULL, and it @@ -1237,7 +1247,7 @@ CoreGetMemoryMap ( @param Buffer The address to return a pointer to the allocated pool - @retval EFI_INVALID_PARAMETER PoolType not valid + @retval EFI_INVALID_PARAMETER PoolType not valid or Buffer is NULL @retval EFI_OUT_OF_RESOURCES Size exceeds max pool size or allocation failed. @retval EFI_SUCCESS Pool successfully allocated. @@ -1293,6 +1303,14 @@ CoreFreePool ( protocol for loading the file. @retval EFI_OUT_OF_RESOURCES Image was not loaded due to insufficient resources. + @retval EFI_LOAD_ERROR Image was not loaded because the image format was corrupt or not + understood. + @retval EFI_DEVICE_ERROR Image was not loaded because the device returned a read error. + @retval EFI_ACCESS_DENIED Image was not loaded because the platform policy prohibits the + image from being loaded. NULL is returned in *ImageHandle. + @retval EFI_SECURITY_VIOLATION Image was loaded and an ImageHandle was created with a + valid EFI_LOADED_IMAGE_PROTOCOL. However, the current + platform policy specifies that the image should not be started. **/ EFI_STATUS @@ -1334,7 +1352,7 @@ CoreUnloadImage ( @param ImageHandle Handle of image to be started. @param ExitDataSize Pointer of the size to ExitData @param ExitData Pointer to a pointer to a data buffer that - includes a Null-terminated Unicode string, + includes a Null-terminated string, optionally followed by additional binary data. The string is a description that the caller may use to further indicate the reason for the @@ -1391,7 +1409,7 @@ CoreExit ( /** - Creates a general-purpose event structure. + Creates an event. @param Type The type of event to create and its mode and attributes @@ -1421,7 +1439,7 @@ CoreCreateEvent ( /** - Creates a general-purpose event structure + Creates an event in a group. @param Type The type of event to create and its mode and attributes @@ -1451,7 +1469,36 @@ CoreCreateEventEx ( OUT EFI_EVENT *Event ); +/** + Creates a general-purpose event structure + + @param Type The type of event to create and its mode and + attributes + @param NotifyTpl The task priority level of event notifications + @param NotifyFunction Pointer to the events notification function + @param NotifyContext Pointer to the notification functions context; + corresponds to parameter "Context" in the + notification function + @param EventGroup GUID for EventGroup if NULL act the same as + gBS->CreateEvent(). + @param Event Pointer to the newly created event if the call + succeeds; undefined otherwise + + @retval EFI_SUCCESS The event structure was created + @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value + @retval EFI_OUT_OF_RESOURCES The event could not be allocated +**/ +EFI_STATUS +EFIAPI +CoreCreateEventInternal ( + IN UINT32 Type, + IN EFI_TPL NotifyTpl, + IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL + IN CONST VOID *NotifyContext, OPTIONAL + IN CONST EFI_GUID *EventGroup, OPTIONAL + OUT EFI_EVENT *Event + ); /** Sets the type of timer and the trigger time for a timer event. @@ -1667,8 +1714,18 @@ CoreGetMemorySpaceDescriptor ( @param Length Specified length @param Attributes Specified attributes - @retval EFI_SUCCESS Successfully set attribute of a segment of - memory space. + @retval EFI_SUCCESS The attributes were set for the memory region. + @retval EFI_INVALID_PARAMETER Length is zero. + @retval EFI_UNSUPPORTED The processor does not support one or more bytes of the memory + resource range specified by BaseAddress and Length. + @retval EFI_UNSUPPORTED The bit mask of attributes is not support for the memory resource + range specified by BaseAddress and Length. + @retval EFI_ACCESS_DEFINED The attributes for the memory resource range specified by + BaseAddress and Length cannot be modified. + @retval EFI_OUT_OF_RESOURCES There are not enough system resources to modify the attributes of + the memory resource range. + @retval EFI_NOT_AVAILABLE_YET The attributes cannot be set because CPU architectural protocol is + not available yet. **/ EFI_STATUS @@ -2241,6 +2298,7 @@ OpenSectionStream ( function returns anything other than EFI_SUCCESS, the value of *AuthenticationStatus is undefined. + @param IsFfs3Fv Indicates the FV format. @retval EFI_SUCCESS Section was retrieved successfully @retval EFI_PROTOCOL_ERROR A GUID defined section was encountered in the @@ -2271,7 +2329,8 @@ GetSection ( IN UINTN SectionInstance, IN VOID **Buffer, IN OUT UINTN *BufferSize, - OUT UINT32 *AuthenticationStatus + OUT UINT32 *AuthenticationStatus, + IN BOOLEAN IsFfs3Fv ); @@ -2370,6 +2429,19 @@ FwVolBlockDriverInit ( IN EFI_SYSTEM_TABLE *SystemTable ); +/** + + Get FVB authentication status + + @param FvbProtocol FVB protocol. + + @return Authentication status. + +**/ +UINT32 +GetFvbAuthenticationStatus ( + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbProtocol + ); /** This routine produces a firmware volume block protocol on a given @@ -2378,8 +2450,10 @@ FwVolBlockDriverInit ( @param BaseAddress base address of the firmware volume image @param Length length of the firmware volume image @param ParentHandle handle of parent firmware volume, if this image - came from an FV image file in another firmware + came from an FV image file and section in another firmware volume (ala capsules) + @param AuthenticationStatus Authentication status inherited, if this image + came from an FV image file and section in another firmware volume. @param FvProtocol Firmware volume block protocol produced. @retval EFI_VOLUME_CORRUPTED Volume corrupted. @@ -2393,6 +2467,7 @@ ProduceFVBProtocolOnBuffer ( IN EFI_PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length, IN EFI_HANDLE ParentHandle, + IN UINT32 AuthenticationStatus, OUT EFI_HANDLE *FvProtocol OPTIONAL ); @@ -2445,4 +2520,80 @@ CoreReleaseLock ( IN EFI_LOCK *Lock ); + +/** + An empty function to pass error checking of CreateEventEx (). + + @param Event Event whose notification function is being invoked. + @param Context Pointer to the notification function's context, + which is implementation-dependent. + +**/ +VOID +EFIAPI +CoreEmptyCallbackFunction ( + IN EFI_EVENT Event, + IN VOID *Context + ); + +/** + Read data from Firmware Block by FVB protocol Read. + The data may cross the multi block ranges. + + @param Fvb The FW_VOL_BLOCK_PROTOCOL instance from which to read data. + @param StartLba Pointer to StartLba. + On input, the start logical block index from which to read. + On output,the end logical block index after reading. + @param Offset Pointer to Offset + On input, offset into the block at which to begin reading. + On output, offset into the end block after reading. + @param DataSize Size of data to be read. + @param Data Pointer to Buffer that the data will be read into. + + @retval EFI_SUCCESS Successfully read data from firmware block. + @retval others +**/ +EFI_STATUS +ReadFvbData ( + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb, + IN OUT EFI_LBA *StartLba, + IN OUT UINTN *Offset, + IN UINTN DataSize, + OUT UINT8 *Data + ); + +/** + Given the supplied FW_VOL_BLOCK_PROTOCOL, allocate a buffer for output and + copy the real length volume header into it. + + @param Fvb The FW_VOL_BLOCK_PROTOCOL instance from which to + read the volume header + @param FwVolHeader Pointer to pointer to allocated buffer in which + the volume header is returned. + + @retval EFI_OUT_OF_RESOURCES No enough buffer could be allocated. + @retval EFI_SUCCESS Successfully read volume header to the allocated + buffer. + +**/ +EFI_STATUS +GetFwVolHeader ( + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb, + OUT EFI_FIRMWARE_VOLUME_HEADER **FwVolHeader + ); + +/** + Verify checksum of the firmware volume header. + + @param FvHeader Points to the firmware volume header to be checked + + @retval TRUE Checksum verification passed + @retval FALSE Checksum verification failed + +**/ +BOOLEAN +VerifyFvHeaderChecksum ( + IN EFI_FIRMWARE_VOLUME_HEADER *FvHeader + ); + #endif