summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Include
diff options
context:
space:
mode:
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2008-01-16 09:04:43 +0000
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2008-01-16 09:04:43 +0000
commitb290614d493ff72fc2a4410d169314e501b7e79e (patch)
tree29942aad07199e63ad6ad7571f3fbbc76eba5fb3 /MdeModulePkg/Include
parent77aa51cd891f8fd9616aaeab3fe7e2331e5ea3ec (diff)
downloadedk2-platforms-b290614d493ff72fc2a4410d169314e501b7e79e.tar.xz
Port PlatformDriOverrideDxe into R9.
1. Add one OverrideVariableGuid in MdeModulePkg 2. Add one library PlatDriOverLib used by PlatformDriOverrideDxe. 3. Add PlatformDriOverrideDxe in MdeModulePkg git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4557 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Include')
-rw-r--r--MdeModulePkg/Include/Guid/OverrideVariable.h34
-rw-r--r--MdeModulePkg/Include/Library/PlatDriOverLib.h255
2 files changed, 289 insertions, 0 deletions
diff --git a/MdeModulePkg/Include/Guid/OverrideVariable.h b/MdeModulePkg/Include/Guid/OverrideVariable.h
new file mode 100644
index 0000000000..673813a580
--- /dev/null
+++ b/MdeModulePkg/Include/Guid/OverrideVariable.h
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 2008, 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
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ OverrideVariable.h
+
+Abstract:
+
+ Platform Override Variable Guid definitions
+
+--*/
+
+#ifndef __EFI_OVERRIDE_VARIABLE_GUID_H__
+#define __EFI_OVERRIDE_VARIABLE_GUID_H__
+
+//
+// This guid is used for a platform driver override variable
+//
+#define EFI_OVERRIDE_VARIABLE_GUID \
+ { 0x8e3d4ad5, 0xf762, 0x438a, { 0xa1, 0xc1, 0x5b, 0x9f, 0xe6, 0x8c, 0x6b, 0x15 }}
+
+extern EFI_GUID gEfiOverrideVariableGuid;
+
+
+#endif // #ifndef __EFI_OVERRIDE_VARIABLE_GUID_H__
diff --git a/MdeModulePkg/Include/Library/PlatDriOverLib.h b/MdeModulePkg/Include/Library/PlatDriOverLib.h
new file mode 100644
index 0000000000..8e6ab174d7
--- /dev/null
+++ b/MdeModulePkg/Include/Library/PlatDriOverLib.h
@@ -0,0 +1,255 @@
+/** @file
+
+Copyright (c) 2007, 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
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PlatDriOverLib.h
+
+Abstract:
+
+
+**/
+
+#ifndef _PLAT_DRI_OVER_LIB_H_
+#define _PLAT_DRI_OVER_LIB_H_
+
+#include <PiDxe.h>
+#include <Protocol/PlatformDriverOverride.h>
+#include <Protocol/DevicePath.h>
+#include <Library/BaseLib.h>
+
+#include <VariableFormat.h>
+
+/**
+ Install the Platform Driver Override Protocol, and ensure there is only one Platform Driver Override Protocol
+ in the system.
+
+ @param gPlatformDriverOverride PlatformDriverOverride protocol interface which
+ needs to be installed
+
+ @retval EFI_ALREADY_STARTED There has been a Platform Driver Override
+ Protocol in the system, cannot install it again.
+ @retval Other Returned by InstallProtocolInterface
+
+**/
+EFI_STATUS
+EFIAPI
+InstallPlatformDriverOverrideProtocol (
+ EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *gPlatformDriverOverride
+ );
+
+/**
+ Free all the mapping database memory resource and initialize the mapping list entry
+
+ @param MappingDataBase Mapping database list entry pointer
+
+ @retval EFI_INVALID_PARAMETER mapping database list entry is NULL
+ @retval EFI_SUCCESS Free success
+
+**/
+EFI_STATUS
+EFIAPI
+FreeMappingDatabase (
+ IN OUT LIST_ENTRY *MappingDataBase
+ );
+
+/**
+ Read the environment variable(s) that contain the override mappings from Controller Device Path to
+ a set of Driver Device Paths, and create the mapping database in memory with those variable info.
+ VariableLayout{
+ //
+ // NotEnd indicate whether the variable is the last one, and has no subsequent variable need to load.
+ // Each variable has MaximumVariableSize limitation, so we maybe need multi variables to store
+ // large mapping infos.
+ // The variable(s) name rule is PlatDriOver, PlatDriOver1, PlatDriOver2, ....
+ //
+ UINT32 NotEnd;
+ //
+ // The entry which contains the mapping that Controller Device Path to a set of Driver Device Paths
+ // There are often multi mapping entries in a variable.
+ //
+ UINT32 SIGNATURE; //EFI_SIGNATURE_32('p','d','o','i')
+ UINT32 DriverNum;
+ EFI_DEVICE_PATH_PROTOCOL ControllerDevicePath[];
+ EFI_DEVICE_PATH_PROTOCOL DriverDevicePath[];
+ EFI_DEVICE_PATH_PROTOCOL DriverDevicePath[];
+ EFI_DEVICE_PATH_PROTOCOL DriverDevicePath[];
+ ......
+ UINT32 SIGNATURE;
+ UINT32 DriverNum;
+ EFI_DEVICE_PATH_PROTOCOL ControllerDevicePath[];
+ EFI_DEVICE_PATH_PROTOCOL DriverDevicePath[];
+ EFI_DEVICE_PATH_PROTOCOL DriverDevicePath[];
+ EFI_DEVICE_PATH_PROTOCOL DriverDevicePath[];
+ ......
+ }
+ typedef struct _PLATFORM_OVERRIDE_ITEM{
+ UINTN Signature; //EFI_SIGNATURE_32('p','d','o','i')
+ LIST_ENTRY Link;
+ UINT32 DriverInfoNum;
+ EFI_DEVICE_PATH_PROTOCOL *ControllerDevicePath;
+ LIST_ENTRY DriverInfoList; //DRIVER_IMAGE_INFO List
+ } PLATFORM_OVERRIDE_ITEM;
+ typedef struct _DRIVER_IMAGE_INFO{
+ UINTN Signature; //EFI_SIGNATURE_32('p','d','i','i')
+ LIST_ENTRY Link;
+ EFI_HANDLE ImageHandle;
+ EFI_DEVICE_PATH_PROTOCOL *DriverImagePath;
+ BOOLEAN UnLoadable;
+ BOOLEAN UnStartable;
+ } DRIVER_IMAGE_INFO;
+
+ @param MappingDataBase Mapping database list entry pointer
+
+ @retval EFI_INVALID_PARAMETER MappingDataBase pointer is null
+ @retval EFI_NOT_FOUND Cannot find the 'PlatDriOver' NV variable
+ @retval EFI_VOLUME_CORRUPTED The found NV variable is corrupted
+ @retval EFI_SUCCESS Create the mapping database in memory
+ successfully
+
+**/
+EFI_STATUS
+EFIAPI
+InitOverridesMapping (
+ OUT LIST_ENTRY *MappingDataBase
+ );
+
+/**
+ Save the memory mapping database into NV environment variable(s)
+
+ @param MappingDataBase Mapping database list entry pointer
+
+ @retval EFI_INVALID_PARAMETER MappingDataBase pointer is null
+ @retval EFI_SUCCESS Save memory mapping database successfully
+
+**/
+EFI_STATUS
+EFIAPI
+SaveOverridesMapping (
+ IN LIST_ENTRY *MappingDataBase
+ );
+
+/**
+ Retrieves the image handle of the platform override driver for a controller in the system from the memory mapping database.
+
+ @param This A pointer to the
+ EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL instance.
+ @param ControllerHandle The device handle of the controller to check if
+ a driver override exists.
+ @param DriverImageHandle On output, a pointer to the next driver handle.
+ Passing in a pointer to NULL, will return the
+ first driver handle for ControllerHandle.
+ @param MappingDataBase MappingDataBase - Mapping database list entry
+ pointer
+ @param CallerImageHandle The caller driver's image handle, for
+ UpdateFvFileDevicePath use.
+
+ @retval EFI_INVALID_PARAMETER The handle specified by ControllerHandle is not
+ a valid handle. Or DriverImagePath is not a
+ device path that was returned on a previous call
+ to GetDriverPath().
+ @retval EFI_NOT_FOUND A driver override for ControllerHandle was not
+ found.
+ @retval EFI_UNSUPPORTED The operation is not supported.
+ @retval EFI_SUCCESS The driver override for ControllerHandle was
+ returned in DriverImagePath.
+
+**/
+EFI_STATUS
+EFIAPI
+GetDriverFromMapping (
+ IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL * This,
+ IN EFI_HANDLE ControllerHandle,
+ IN OUT EFI_HANDLE * DriverImageHandle,
+ IN LIST_ENTRY * MappingDataBase,
+ IN EFI_HANDLE CallerImageHandle
+ );
+
+EFI_STATUS
+EFIAPI
+DeleteOverridesVariables (
+ VOID
+ );
+
+/**
+ Check mapping database whether already has the mapping info which
+ records the input Controller to input DriverImage.
+ If has, the controller's total override driver number and input DriverImage's order number is return.
+
+ @param ControllerDevicePath The controller device path need to add a
+ override driver image item
+ @param DriverImageDevicePath The driver image device path need to be insert
+ @param MappingDataBase Mapping database list entry pointer
+ @param DriverInfoNum the controller's total override driver number
+ @param DriverImageNO The inserted order number
+
+ @return EFI_INVALID_PARAMETER
+ @return EFI_NOT_FOUND
+ @return EFI_SUCCESS
+
+**/
+EFI_STATUS
+EFIAPI
+CheckMapping (
+ IN EFI_DEVICE_PATH_PROTOCOL *ControllerDevicePath,
+ IN EFI_DEVICE_PATH_PROTOCOL *DriverImageDevicePath,
+ IN LIST_ENTRY * MappingDataBase,
+ OUT UINT32 *DriverInfoNum,
+ OUT UINT32 *DriverImageNO
+ );
+
+/**
+ Insert a driver image as a controller's override driver into the mapping database.
+ The driver image's order number is indicated by DriverImageNO.
+
+ @param ControllerDevicePath The controller device path need to add a
+ override driver image item
+ @param DriverImageDevicePath The driver image device path need to be insert
+ @param MappingDataBase Mapping database list entry pointer
+ @param DriverImageNO The inserted order number
+
+ @return EFI_INVALID_PARAMETER
+ @return EFI_ALREADY_STARTED
+ @return EFI_SUCCESS
+
+**/
+EFI_STATUS
+EFIAPI
+InsertDriverImage (
+ IN EFI_DEVICE_PATH_PROTOCOL *ControllerDevicePath,
+ IN EFI_DEVICE_PATH_PROTOCOL *DriverImageDevicePath,
+ IN LIST_ENTRY *MappingDataBase,
+ IN UINT32 DriverImageNO
+ );
+
+/**
+ Delete a controller's override driver from the mapping database.
+
+ @param ControllerDevicePath The controller device path need to add a
+ override driver image item
+ @param DriverImageDevicePath The driver image device path need to be insert
+ @param MappingDataBase Mapping database list entry pointer
+ @param DriverImageNO The inserted order number
+
+ @return EFI_INVALID_PARAMETER
+ @return EFI_NOT_FOUND
+ @return EFI_SUCCESS
+
+**/
+EFI_STATUS
+EFIAPI
+DeleteDriverImage (
+ IN EFI_DEVICE_PATH_PROTOCOL *ControllerDevicePath,
+ IN EFI_DEVICE_PATH_PROTOCOL *DriverImageDevicePath,
+ IN LIST_ENTRY *MappingDataBase
+ );
+
+#endif