4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The internal header file includes the common header files, defines
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync internal structure and functions used by DeferImageLoadLib.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __DEFER_IMAGE_LOAD_LIB_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __DEFER_IMAGE_LOAD_LIB_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <PiDxe.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiRuntimeServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiBootServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/SecurityManagementLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/MemoryAllocationLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DevicePathLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PrintLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PcdLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/FirmwareVolume2.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/BlockIo.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/SimpleFileSystem.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/DeferredImageLoad.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/UserCredential.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/UserManager.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/DevicePathToText.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Guid/GlobalVariable.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Image type definitions.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IMAGE_UNKNOWN 0x00000001
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IMAGE_FROM_FV 0x00000002
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IMAGE_FROM_OPTION_ROM 0x00000004
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IMAGE_FROM_REMOVABLE_MEDIA 0x00000008
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IMAGE_FROM_FIXED_MEDIA 0x00000010
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The struct to save the deferred image information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *ImageDevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Image;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ImageSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN BootOption;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} DEFERRED_IMAGE_INFO;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The table to save the deferred image item.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Count; ///< deferred image count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DEFERRED_IMAGE_INFO *ImageInfo; ///< deferred image item
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} DEFERRED_IMAGE_TABLE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Returns information about a deferred image.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function returns information about a single deferred image. The deferred images are
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync numbered consecutively, starting with 0. If there is no image which corresponds to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ImageIndex, then EFI_NOT_FOUND is returned. All deferred images may be returned by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync iteratively calling this function until EFI_NOT_FOUND is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Image may be NULL and ImageSize set to 0 if the decision to defer execution was made
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync because of the location of the executable image, rather than its actual contents.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Points to this instance of the EFI_DEFERRED_IMAGE_LOAD_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ImageIndex Zero-based index of the deferred index.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] ImageDevicePath On return, points to a pointer to the device path of the image.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The device path should not be freed by the caller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Image On return, points to the first byte of the image or NULL if the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync image is not available. The image should not be freed by the caller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unless LoadImage() has been called successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] ImageSize On return, the size of the image, or 0 if the image is not available.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] BootOption On return, points to TRUE if the image was intended as a boot option
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or FALSE if it was not intended as a boot option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Image information returned successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND ImageIndex does not refer to a valid image.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ImageDevicePath is NULL or Image is NULL or ImageSize is NULL or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BootOption is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetDefferedImageInfo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEFERRED_IMAGE_LOAD_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN ImageIndex,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_DEVICE_PATH_PROTOCOL **ImageDevicePath,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID **Image,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINTN *ImageSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT BOOLEAN *BootOption
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif