Sync all bug fixes between EDK1.04 and EDK1.06 into EdkCompatibilityPkg.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11094 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -23,6 +23,81 @@ Abstract:
|
||||
#include "EdkIIGlueDxe.h"
|
||||
#include "Common/EdkIIGlueDependencies.h"
|
||||
|
||||
//
|
||||
// Check definitions in .inf file to determine __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__
|
||||
//
|
||||
// __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__
|
||||
// 1: only install ComponentName, DriverConfiguration and DriverDiagnostics
|
||||
// 2: only install ComponentName2, DriverConfiguration2 and DriverDiagnostics2
|
||||
// 3: install all including ComponentName, DriverConfiguration, DriverDiagnostics AND
|
||||
// ComponentName2, DriverConfiguration2 and DriverDiagnostics2
|
||||
// 4: install automatically according to EFI_SPECIFICATION_VERSION:
|
||||
// if EFI_SPECIFICATION_VERSION < 0x00020000: only install ComponentName, DriverConfiguration and DriverDiagnostics
|
||||
// if EFI_SPECIFICATION_VERSION >= 0x00020000: only install ComponentName2, DriverConfiguration2 and DriverDiagnostics2
|
||||
//
|
||||
#ifdef __EDKII_GLUE_DRIVER_MODEL_VERSION_1_DEFINED__
|
||||
#undef __EDKII_GLUE_DRIVER_MODEL_VERSION_1_DEFINED__
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DRIVER_MODEL_VERSION_2_DEFINED__
|
||||
#undef __EDKII_GLUE_DRIVER_MODEL_VERSION_2_DEFINED__
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__
|
||||
#undef __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__
|
||||
#endif
|
||||
|
||||
#if defined(__EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__) || defined(__EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__) || defined(__EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__)
|
||||
#define __EDKII_GLUE_DRIVER_MODEL_VERSION_1_DEFINED__
|
||||
#endif
|
||||
|
||||
#if defined(__EDKII_GLUE_COMPONENT_NAME2_PROTOCOL_INSTANCE__) || defined(__EDKII_GLUE_DRIVER_CONFIGURATION2_PROTOCOL_INSTANCE__) || defined(__EDKII_GLUE_DRIVER_DIAGNOSTICS2_PROTOCOL_INSTANCE__)
|
||||
#define __EDKII_GLUE_DRIVER_MODEL_VERSION_2_DEFINED__
|
||||
#endif
|
||||
|
||||
#if defined(__EDKII_GLUE_DRIVER_MODEL_VERSION_1_DEFINED__) && !defined(__EDKII_GLUE_DRIVER_MODEL_VERSION_2_DEFINED__) && !defined(__EDKII_GLUE_DRIVER_MODEL_AUTO_SELECT_PROTOCOLS_BY_EFI_VERSION__)
|
||||
#define __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ 1
|
||||
#endif
|
||||
|
||||
#if !defined(__EDKII_GLUE_DRIVER_MODEL_VERSION_1_DEFINED__) && defined(__EDKII_GLUE_DRIVER_MODEL_VERSION_2_DEFINED__) && !defined(__EDKII_GLUE_DRIVER_MODEL_AUTO_SELECT_PROTOCOLS_BY_EFI_VERSION__)
|
||||
#define __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ 2
|
||||
#endif
|
||||
|
||||
#if defined(__EDKII_GLUE_DRIVER_MODEL_VERSION_1_DEFINED__) && defined(__EDKII_GLUE_DRIVER_MODEL_VERSION_2_DEFINED__) && !defined(__EDKII_GLUE_DRIVER_MODEL_AUTO_SELECT_PROTOCOLS_BY_EFI_VERSION__)
|
||||
#define __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ 3
|
||||
#endif
|
||||
|
||||
//
|
||||
// To use Auto-Select, it must be:
|
||||
// 1. both Protocol and Protocol2 are defined
|
||||
// 2. The Protocol and Protocol2 must use same names, for example, gDriverControllerName as __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__ and __EDKII_GLUE_COMPONENT_NAME2_PROTOCOL_INSTANCE__
|
||||
//
|
||||
#if defined(__EDKII_GLUE_DRIVER_MODEL_AUTO_SELECT_PROTOCOLS_BY_EFI_VERSION__)
|
||||
#if !(defined(__EDKII_GLUE_DRIVER_MODEL_VERSION_1_DEFINED__) && defined(__EDKII_GLUE_DRIVER_MODEL_VERSION_2_DEFINED__))
|
||||
#error "To use Auto-Select please define both Protocol and Protocol2 instances"
|
||||
#endif
|
||||
#define __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ 4
|
||||
#endif
|
||||
|
||||
#if (__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 4)
|
||||
#undef __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__
|
||||
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
|
||||
#define __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ 2
|
||||
#else
|
||||
#define __EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if (__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 1)
|
||||
UINT8 _gEdkIIGlueDriverModelProtocolSelection = 1;
|
||||
#elif (__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 2)
|
||||
UINT8 _gEdkIIGlueDriverModelProtocolSelection = 2;
|
||||
#elif (__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 3)
|
||||
UINT8 _gEdkIIGlueDriverModelProtocolSelection = 3;
|
||||
#else
|
||||
UINT8 _gEdkIIGlueDriverModelProtocolSelection = 0;
|
||||
#endif
|
||||
|
||||
STATIC EFI_EVENT _mDriverExitBootServicesNotifyEvent;
|
||||
|
||||
//
|
||||
@@ -31,27 +106,38 @@ STATIC EFI_EVENT _mDriverExitBootServicesNotifyEvent;
|
||||
// In case where multiple Driver Model protocols need to be installed in a single driver,
|
||||
// manually edit this file and compile/link the modified file with the driver.
|
||||
//
|
||||
|
||||
#ifdef __EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__
|
||||
#if defined(__EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__)
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL __EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__;
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__
|
||||
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__;
|
||||
#else
|
||||
#if (__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 1) || (__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 3)
|
||||
#if defined(__EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__)
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__
|
||||
#if defined(__EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__)
|
||||
extern EFI_DRIVER_CONFIGURATION_PROTOCOL __EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__
|
||||
#if defined(__EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__)
|
||||
extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL __EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__;
|
||||
#endif
|
||||
|
||||
#if (__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 2) || (__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 3)
|
||||
#if defined(__EDKII_GLUE_COMPONENT_NAME2_PROTOCOL_INSTANCE__)
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL __EDKII_GLUE_COMPONENT_NAME2_PROTOCOL_INSTANCE__;
|
||||
#endif
|
||||
|
||||
#if defined(__EDKII_GLUE_DRIVER_CONFIGURATION2_PROTOCOL_INSTANCE__)
|
||||
extern EFI_DRIVER_CONFIGURATION2_PROTOCOL __EDKII_GLUE_DRIVER_CONFIGURATION2_PROTOCOL_INSTANCE__;
|
||||
#endif
|
||||
|
||||
#if defined(__EDKII_GLUE_DRIVER_DIAGNOSTICS2_PROTOCOL_INSTANCE__)
|
||||
extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL __EDKII_GLUE_DRIVER_DIAGNOSTICS2_PROTOCOL_INSTANCE__;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED const EFI_DRIVER_MODEL_PROTOCOL_LIST _gDriverModelProtocolList[] = {
|
||||
{
|
||||
#ifdef __EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__
|
||||
@@ -60,23 +146,41 @@ GLOBAL_REMOVE_IF_UNREFERENCED const EFI_DRIVER_MODEL_PROTOCOL_LIST _gDriverMode
|
||||
NULL,
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__
|
||||
#if defined(__EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__) && !(__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 2)
|
||||
&__EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__
|
||||
#if defined(__EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__) && !(__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 2)
|
||||
&__EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__
|
||||
#if defined(__EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__) && !(__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 2)
|
||||
&__EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
|
||||
#if defined(__EDKII_GLUE_COMPONENT_NAME2_PROTOCOL_INSTANCE__) && !(__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 1)
|
||||
&__EDKII_GLUE_COMPONENT_NAME2_PROTOCOL_INSTANCE__,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
|
||||
#if defined(__EDKII_GLUE_DRIVER_CONFIGURATION2_PROTOCOL_INSTANCE__) && !(__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 1)
|
||||
&__EDKII_GLUE_DRIVER_CONFIGURATION2_PROTOCOL_INSTANCE__,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
|
||||
#if defined(__EDKII_GLUE_DRIVER_DIAGNOSTICS2_PROTOCOL_INSTANCE__) && !(__EDKII_GLUE_DRIVER_MODEL_PROTOCOL_SELECTION__ == 1)
|
||||
&__EDKII_GLUE_DRIVER_DIAGNOSTICS2_PROTOCOL_INSTANCE__,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
@@ -249,15 +353,15 @@ ProcessLibraryConstructorList (
|
||||
// NOTE: the constructors must be called according to dependency order
|
||||
//
|
||||
// UefiBootServicesTableLib UefiBootServicesTableLibConstructor()
|
||||
// UefiRuntimeServicesTableLib UefiRuntimeServicesTableLibConstructor()
|
||||
// DxeServicesTableLib DxeServicesTableLibConstructor()
|
||||
// DxeIoLibCpuIo IoLibConstructor()
|
||||
// DxeSalLib DxeSalLibConstructor(), IPF only
|
||||
// EdkDxeRuntimeDriverLib RuntimeDriverLibConstruct()
|
||||
// DxeHobLib HobLibConstructor()
|
||||
// UefiDriverModelLib UefiDriverModelLibConstructor()
|
||||
// DxeSmbusLib SmbusLibConstructor()
|
||||
// DxeServicesTableLib DxeServicesTableLibConstructor()
|
||||
// UefiRuntimeServicesTableLib UefiRuntimeServicesTableLibConstructor()
|
||||
// SmmRuntimeDxeReportStatusCodeLib ReportStatusCodeLibConstruct()
|
||||
// UefiDriverModelLib UefiDriverModelLibConstructor()
|
||||
// DxeHobLib HobLibConstructor()
|
||||
// DxeSmbusLib SmbusLibConstructor()
|
||||
//
|
||||
|
||||
#ifdef __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__
|
||||
@@ -265,6 +369,16 @@ ProcessLibraryConstructorList (
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__
|
||||
Status = UefiRuntimeServicesTableLibConstructor (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DXE_SERVICES_TABLE_LIB__
|
||||
Status = DxeServicesTableLibConstructor (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DXE_IO_LIB_CPU_IO__
|
||||
Status = IoLibConstructor (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
@@ -280,8 +394,8 @@ ProcessLibraryConstructorList (
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__
|
||||
Status = UefiRuntimeServicesTableLibConstructor (ImageHandle, SystemTable);
|
||||
#ifdef __EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__
|
||||
Status = ReportStatusCodeLibConstruct (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
@@ -290,16 +404,6 @@ ProcessLibraryConstructorList (
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DXE_SERVICES_TABLE_LIB__
|
||||
Status = DxeServicesTableLibConstructor (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__
|
||||
Status = ReportStatusCodeLibConstruct (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DXE_HOB_LIB__
|
||||
Status = HobLibConstructor (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
@@ -83,23 +83,18 @@ ProcessLibraryConstructorList (
|
||||
// here
|
||||
//
|
||||
// UefiBootServicesTableLib UefiBootServicesTableLibConstructor()
|
||||
// UefiRuntimeServicesTableLib UefiRuntimeServicesTableLibConstructor()
|
||||
// DxeServicesTableLib DxeServicesTableLibConstructor()
|
||||
// DxeIoLibCpuIo IoLibConstructor
|
||||
// SmmRuntimeDxeReportStatusCodeLib ReportStatusCodeLibConstruct()
|
||||
// DxeHobLib HobLibConstructor()
|
||||
// DxeSmbusLib SmbusLibConstructor()
|
||||
// DxeServicesTableLib DxeServicesTableLibConstructor()
|
||||
// UefiRuntimeServicesTableLib UefiRuntimeServicesTableLibConstructor()
|
||||
// SmmRuntimeDxeReportStatusCodeLib ReportStatusCodeLibConstruct()
|
||||
// check here: check lib usage
|
||||
|
||||
#ifdef __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__
|
||||
Status = UefiBootServicesTableLibConstructor (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DXE_IO_LIB_CPU_IO__
|
||||
Status = IoLibConstructor (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__
|
||||
Status = UefiRuntimeServicesTableLibConstructor (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
@@ -110,6 +105,11 @@ ProcessLibraryConstructorList (
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_DXE_IO_LIB_CPU_IO__
|
||||
Status = IoLibConstructor (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
#endif
|
||||
|
||||
#ifdef __EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__
|
||||
Status = ReportStatusCodeLibConstruct (ImageHandle, SystemTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
@@ -320,16 +320,28 @@ _ModuleEntryPoint (
|
||||
EFI_DEVICE_PATH_PROTOCOL *ImageDevicePath;
|
||||
EFI_HANDLE Handle;
|
||||
|
||||
//
|
||||
// Call constructor for all libraries
|
||||
//
|
||||
ProcessLibraryConstructorList (ImageHandle, SystemTable);
|
||||
|
||||
//
|
||||
// Cache a pointer to the Boot Services Table
|
||||
//
|
||||
mBS = SystemTable->BootServices;
|
||||
|
||||
//
|
||||
// Initialize gBS as ASSERT needs it
|
||||
// Both DxeReportStatusCodeLib and SmmRuntimeDxeReportStatusCodeLib implementations
|
||||
// Can handle this cleanly before lib constructors are called.
|
||||
//
|
||||
gBS = mBS;
|
||||
|
||||
//
|
||||
// Retrieve the Loaded Image Protocol
|
||||
//
|
||||
Status = mBS->HandleProtocol (
|
||||
ImageHandle,
|
||||
&gEfiLoadedImageProtocolGuid,
|
||||
(VOID*)&LoadedImage
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
// Retrieve SMM Base Protocol
|
||||
//
|
||||
@@ -349,27 +361,6 @@ _ModuleEntryPoint (
|
||||
//
|
||||
//
|
||||
if (!InSmm) {
|
||||
//
|
||||
// Retrieve the Loaded Image Protocol
|
||||
//
|
||||
Status = mBS->HandleProtocol (
|
||||
ImageHandle,
|
||||
&gEfiLoadedImageProtocolGuid,
|
||||
(VOID*)&LoadedImage
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
// Install the unload handler
|
||||
//
|
||||
Status = mBS->HandleProtocol (
|
||||
ImageHandle,
|
||||
&gEfiLoadedImageProtocolGuid,
|
||||
(VOID **)&LoadedImage
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
LoadedImage->Unload = _DriverUnloadHandler;
|
||||
|
||||
//
|
||||
// Retrieve the Device Path Protocol from the DeviceHandle tha this driver was loaded from
|
||||
//
|
||||
@@ -391,18 +382,34 @@ _ModuleEntryPoint (
|
||||
//
|
||||
Status = SmmBase->Register (SmmBase, CompleteFilePath, NULL, 0, &Handle, FALSE);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
} else {
|
||||
|
||||
//
|
||||
// Call the list of driver entry points
|
||||
//
|
||||
#ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__
|
||||
Status = (__EDKII_GLUE_MODULE_ENTRY_POINT__ (ImageHandle, SystemTable));
|
||||
#else
|
||||
Status = EFI_SUCCESS;
|
||||
#endif
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Call constructor for all libraries
|
||||
//
|
||||
ProcessLibraryConstructorList (ImageHandle, SystemTable);
|
||||
|
||||
//
|
||||
// Install the unload handler
|
||||
//
|
||||
Status = mBS->HandleProtocol (
|
||||
ImageHandle,
|
||||
&gEfiLoadedImageProtocolGuid,
|
||||
(VOID **)&LoadedImage
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
LoadedImage->Unload = _DriverUnloadHandler;
|
||||
|
||||
//
|
||||
// Call the list of driver entry points
|
||||
//
|
||||
#ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__
|
||||
Status = (__EDKII_GLUE_MODULE_ENTRY_POINT__ (ImageHandle, SystemTable));
|
||||
#else
|
||||
Status = EFI_SUCCESS;
|
||||
#endif
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
ProcessLibraryDestructorList (ImageHandle, SystemTable);
|
||||
}
|
||||
|
@@ -332,6 +332,15 @@ Abstract:
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// DxeServicesTableLib
|
||||
//
|
||||
#ifdef __EDKII_GLUE_DXE_SERVICES_TABLE_LIB__
|
||||
#ifndef __EDKII_GLUE_UEFI_LIB__
|
||||
#define __EDKII_GLUE_UEFI_LIB__
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// UefiLib
|
||||
//
|
||||
@@ -489,15 +498,6 @@ Abstract:
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// DxeServicesTableLib
|
||||
//
|
||||
#ifdef __EDKII_GLUE_DXE_SERVICES_TABLE_LIB__
|
||||
#ifndef __EDKII_GLUE_UEFI_LIB__
|
||||
#define __EDKII_GLUE_UEFI_LIB__
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// BasePrintLib
|
||||
//
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -33,10 +33,15 @@ Abstract:
|
||||
// 0x6000 - support EBC. Feb, 2007
|
||||
// 0x7000 - size reduction, Jun, 2007
|
||||
// 0x7100 - backward compatibility supported, Jun, 2007
|
||||
// 0x8000 - Driver model protocols2 supported, May, 2008
|
||||
// 0x9000 - add SmmRuntimeDxeReportStatusCodeLib and OemHookStatusCodeLibNull, Feb, 2009
|
||||
// 0x9100 - change to use unique member RT variable names in various library instances, June, 2009
|
||||
// 0x9200 - Update LEGACY_BOOT and READY_TO_BOOT event handling in UefiLib, July, 2009
|
||||
// 0x9300 - Remove OemHookStatusCodeLibNull. SmmRuntimeDxeReportStatusCodeLib uses SMM StatusCode Protocol, Oct, 2009
|
||||
//
|
||||
// For reference only, don't change the value
|
||||
//
|
||||
#define EDKII_GLUE_LIBRARY_VERSION 0x7100
|
||||
#define EDKII_GLUE_LIBRARY_VERSION 0x9300
|
||||
|
||||
|
||||
//
|
||||
@@ -120,7 +125,9 @@ Abstract:
|
||||
// This value is FSB Clock frequency. Its unit is Hz and its
|
||||
// default value is 200000000, that means FSB frequency is 200Mhz.
|
||||
//
|
||||
#ifndef EDKII_GLUE_FSBClock
|
||||
#define EDKII_GLUE_FSBClock 200000000
|
||||
#endif
|
||||
|
||||
//
|
||||
// post code property mask
|
||||
@@ -142,7 +149,9 @@ Abstract:
|
||||
// The base address of IPF IO Block
|
||||
//
|
||||
#ifdef MDE_CPU_IPF
|
||||
#ifndef EDKII_GLUE_IoBlockBaseAddressForIpf
|
||||
#define EDKII_GLUE_IoBlockBaseAddressForIpf 0x0ffffc000000
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2007, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -173,4 +173,6 @@ Abstract:
|
||||
#include "Library/EdkIIGlueUefiLib.h"
|
||||
#include "Library/EdkIIGlueUefiRuntimeServicesTableLib.h"
|
||||
|
||||
extern UINT8 _gEdkIIGlueDriverModelProtocolSelection;
|
||||
|
||||
#endif
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2007, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -34,15 +34,14 @@ Abstract:
|
||||
// Data structure that declares pointers to the Driver Model
|
||||
// Protocols.
|
||||
//
|
||||
typedef struct {
|
||||
const EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
|
||||
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
|
||||
const EFI_COMPONENT_NAME2_PROTOCOL *ComponentName;
|
||||
#else
|
||||
const EFI_COMPONENT_NAME_PROTOCOL *ComponentName;
|
||||
#endif
|
||||
const EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration;
|
||||
const EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics;
|
||||
typedef struct {
|
||||
const EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
|
||||
const EFI_COMPONENT_NAME_PROTOCOL *ComponentName;
|
||||
const EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration;
|
||||
const EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics;
|
||||
const EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2;
|
||||
const EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2;
|
||||
const EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2;
|
||||
} EFI_DRIVER_MODEL_PROTOCOL_LIST;
|
||||
|
||||
//
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -585,13 +585,6 @@ EfiCreateEventReadyToBootEx (
|
||||
/**
|
||||
Initialize a Firmware Volume (FV) Media Device Path node.
|
||||
|
||||
Tiano extended the EFI 1.10 device path nodes. Tiano does not own this enum
|
||||
so as we move to UEFI 2.0 support we must use a mechanism that conforms with
|
||||
the UEFI 2.0 specification to define the FV device path. An UEFI GUIDed
|
||||
device path is defined for Tiano extensions of device path. If the code
|
||||
is compiled to conform with the UEFI 2.0 specification use the new device path
|
||||
else use the old form for backwards compatability.
|
||||
|
||||
@param FvDevicePathNode Pointer to a FV device path node to initialize
|
||||
@param NameGuid FV file name to use in FvDevicePathNode
|
||||
|
||||
@@ -606,15 +599,6 @@ GlueEfiInitializeFwVolDevicepathNode (
|
||||
/**
|
||||
Check to see if the Firmware Volume (FV) Media Device Path is valid
|
||||
|
||||
Tiano extended the EFI 1.10 device path nodes. Tiano does not own this enum
|
||||
so as we move to UEFI 2.0 support we must use a mechanism that conforms with
|
||||
the UEFI 2.0 specification to define the FV device path. An UEFI GUIDed
|
||||
device path is defined for Tiano extensions of device path. If the code
|
||||
is compiled to conform with the UEFI 2.0 specification use the new device path
|
||||
else use the old form for backwards compatability. The return value to this
|
||||
function points to a location in FvDevicePathNode and it does not allocate
|
||||
new memory for the GUID pointer that is returned.
|
||||
|
||||
@param FvDevicePathNode Pointer to FV device path to check.
|
||||
|
||||
@retval NULL FvDevicePathNode is not valid.
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -51,7 +51,7 @@ GlueCompareMem (
|
||||
IN UINTN Length
|
||||
)
|
||||
{
|
||||
if (Length == 0) {
|
||||
if (Length == 0 || DestinationBuffer == SourceBuffer) {
|
||||
return 0;
|
||||
}
|
||||
ASSERT (DestinationBuffer != NULL);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -29,7 +29,7 @@ Abstract:
|
||||
STATIC EFI_EVENT mEfiVirtualNotifyEvent;
|
||||
STATIC BOOLEAN mEfiGoneVirtual = FALSE;
|
||||
STATIC BOOLEAN mEfiAtRuntime = FALSE;
|
||||
EFI_RUNTIME_SERVICES *mRT;
|
||||
EFI_RUNTIME_SERVICES *mRTEdkDxeRuntimeDriverLib;
|
||||
|
||||
/**
|
||||
Set AtRuntime flag as TRUE after ExitBootServices
|
||||
@@ -44,6 +44,11 @@ RuntimeDriverExitBootServices (
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
//
|
||||
// Clear out BootService globals
|
||||
//
|
||||
gBS = NULL;
|
||||
|
||||
mEfiAtRuntime = TRUE;
|
||||
}
|
||||
|
||||
@@ -76,7 +81,7 @@ RuntimeLibVirtualNotifyEvent (
|
||||
//
|
||||
// Update global for Runtime Services Table and IO
|
||||
//
|
||||
EfiConvertPointer (0, (VOID **) &mRT);
|
||||
EfiConvertPointer (0, (VOID **) &mRTEdkDxeRuntimeDriverLib);
|
||||
|
||||
mEfiGoneVirtual = TRUE;
|
||||
}
|
||||
@@ -99,8 +104,8 @@ RuntimeDriverLibConstruct (
|
||||
EFI_STATUS Status;
|
||||
|
||||
ASSERT (SystemTable != NULL);
|
||||
mRT = SystemTable->RuntimeServices;
|
||||
ASSERT (mRT != NULL);
|
||||
mRTEdkDxeRuntimeDriverLib = SystemTable->RuntimeServices;
|
||||
ASSERT (mRTEdkDxeRuntimeDriverLib != NULL);
|
||||
|
||||
//
|
||||
// Register SetVirtualAddressMap () notify function
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -50,11 +50,11 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
mRT->ResetSystem (ResetType, ResetStatus, DataSize, ResetData);
|
||||
mRTEdkDxeRuntimeDriverLib->ResetSystem (ResetType, ResetStatus, DataSize, ResetData);
|
||||
}
|
||||
|
||||
//
|
||||
// The following functions hide the mRT local global from the call to
|
||||
// The following functions hide the mRTEdkDxeRuntimeDriverLib local global from the call to
|
||||
// runtime service in the EFI system table.
|
||||
//
|
||||
EFI_STATUS
|
||||
@@ -82,7 +82,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->GetTime (Time, Capabilities);
|
||||
return mRTEdkDxeRuntimeDriverLib->GetTime (Time, Capabilities);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
@@ -106,7 +106,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->SetTime (Time);
|
||||
return mRTEdkDxeRuntimeDriverLib->SetTime (Time);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
@@ -134,7 +134,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->GetWakeupTime (Enabled, Pending, Time);
|
||||
return mRTEdkDxeRuntimeDriverLib->GetWakeupTime (Enabled, Pending, Time);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
@@ -161,7 +161,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->SetWakeupTime (Enable, Time);
|
||||
return mRTEdkDxeRuntimeDriverLib->SetWakeupTime (Enable, Time);
|
||||
}
|
||||
|
||||
|
||||
@@ -199,7 +199,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->GetVariable (VariableName, VendorGuid, Attributes, DataSize, Data);
|
||||
return mRTEdkDxeRuntimeDriverLib->GetVariable (VariableName, VendorGuid, Attributes, DataSize, Data);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
@@ -232,7 +232,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->GetNextVariableName (VariableNameSize, VariableName, VendorGuid);
|
||||
return mRTEdkDxeRuntimeDriverLib->GetNextVariableName (VariableNameSize, VariableName, VendorGuid);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
@@ -265,7 +265,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->SetVariable (VariableName, VendorGuid, Attributes, DataSize, Data);
|
||||
return mRTEdkDxeRuntimeDriverLib->SetVariable (VariableName, VendorGuid, Attributes, DataSize, Data);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
@@ -289,7 +289,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->GetNextHighMonotonicCount (HighCount);
|
||||
return mRTEdkDxeRuntimeDriverLib->GetNextHighMonotonicCount (HighCount);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
@@ -316,7 +316,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->ConvertPointer (DebugDisposition, Address);
|
||||
return mRTEdkDxeRuntimeDriverLib->ConvertPointer (DebugDisposition, Address);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
@@ -399,7 +399,7 @@ EfiSetVirtualAddressMap (
|
||||
IN CONST EFI_MEMORY_DESCRIPTOR *VirtualMap
|
||||
)
|
||||
{
|
||||
return mRT->SetVirtualAddressMap (
|
||||
return mRTEdkDxeRuntimeDriverLib->SetVirtualAddressMap (
|
||||
MemoryMapSize,
|
||||
DescriptorSize,
|
||||
DescriptorVersion,
|
||||
@@ -417,7 +417,7 @@ EfiUpdateCapsule (
|
||||
)
|
||||
{
|
||||
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
|
||||
return mRT->UpdateCapsule (
|
||||
return mRTEdkDxeRuntimeDriverLib->UpdateCapsule (
|
||||
CapsuleHeaderArray,
|
||||
CapsuleCount,
|
||||
ScatterGatherList
|
||||
@@ -437,7 +437,7 @@ EfiQueryCapsuleCapabilities (
|
||||
)
|
||||
{
|
||||
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
|
||||
return mRT->QueryCapsuleCapabilities (
|
||||
return mRTEdkDxeRuntimeDriverLib->QueryCapsuleCapabilities (
|
||||
CapsuleHeaderArray,
|
||||
CapsuleCount,
|
||||
MaximumCapsuleSize,
|
||||
@@ -459,7 +459,7 @@ EfiQueryVariableInfo (
|
||||
)
|
||||
{
|
||||
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
|
||||
return mRT->QueryVariableInfo (
|
||||
return mRTEdkDxeRuntimeDriverLib->QueryVariableInfo (
|
||||
Attributes,
|
||||
MaximumVariableStorageSize,
|
||||
RemainingVariableStorageSize,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -26,7 +26,7 @@ Abstract:
|
||||
// Driver Lib Module Globals
|
||||
//
|
||||
static EFI_EVENT mEfiVirtualNotifyEvent;
|
||||
EFI_RUNTIME_SERVICES *mRT;
|
||||
EFI_RUNTIME_SERVICES *mRTEdkDxeRuntimeDriverLib;
|
||||
|
||||
VOID
|
||||
EFIAPI
|
||||
@@ -95,7 +95,7 @@ Returns:
|
||||
//
|
||||
// Update global for Runtime Services Table
|
||||
//
|
||||
EfiConvertPointer (0, (VOID **) &mRT);
|
||||
EfiConvertPointer (0, (VOID **) &mRTEdkDxeRuntimeDriverLib);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
@@ -126,7 +126,7 @@ Returns:
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
mRT = SystemTable->RuntimeServices;
|
||||
mRTEdkDxeRuntimeDriverLib = SystemTable->RuntimeServices;
|
||||
|
||||
//
|
||||
// Register SetVirtualAddressMap () notify function
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -70,7 +70,7 @@ Returns:
|
||||
|
||||
|
||||
//
|
||||
// The following functions hide the mRT local global from the call to
|
||||
// The following functions hide the mRTEdkDxeRuntimeDriverLib local global from the call to
|
||||
// runtime service in the EFI system table.
|
||||
//
|
||||
EFI_STATUS
|
||||
@@ -415,7 +415,7 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
return mRT->ConvertPointer (DebugDisposition, Address);
|
||||
return mRTEdkDxeRuntimeDriverLib->ConvertPointer (DebugDisposition, Address);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -25,6 +25,6 @@ Abstract:
|
||||
|
||||
#include "EdkIIGlueDxe.h"
|
||||
|
||||
extern EFI_RUNTIME_SERVICES *mRT;
|
||||
extern EFI_RUNTIME_SERVICES *mRTEdkDxeRuntimeDriverLib;
|
||||
|
||||
#endif //__RUNTIMELIBINTERNAL_H__
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -22,13 +22,6 @@ Abstract:
|
||||
|
||||
#include "EdkIIGlueUefi.h"
|
||||
|
||||
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
|
||||
#define EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID gEfiComponentName2ProtocolGuid
|
||||
#define EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME2_PROTOCOL
|
||||
#else
|
||||
#define EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID gEfiComponentNameProtocolGuid
|
||||
#define EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME_PROTOCOL
|
||||
#endif
|
||||
|
||||
/**
|
||||
The constructor function installs the standard EFI Driver Model Protocols.
|
||||
@@ -46,7 +39,7 @@ UefiDriverModelLibConstructor (
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status = EFI_UNSUPPORTED;
|
||||
EFI_HANDLE DriverBindingHandle;
|
||||
EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
|
||||
|
||||
@@ -60,16 +53,17 @@ UefiDriverModelLibConstructor (
|
||||
// EdkIIGlueLib: _gDriverModelProtocolListEntries is always 1
|
||||
//
|
||||
|
||||
//
|
||||
// The Driver Binding Protocol must never be NULL
|
||||
//
|
||||
ASSERT(_gDriverModelProtocolList[0].DriverBinding != NULL);
|
||||
//
|
||||
// The Driver Binding Protocol must never be NULL
|
||||
//
|
||||
ASSERT(_gDriverModelProtocolList[0].DriverBinding != NULL);
|
||||
|
||||
//
|
||||
// Check for all 8 possible combinations of the ComponentName, DriverConfiguration, and DriverDiagnostics Protocol
|
||||
// These are all checks against const pointers, so the optimizing compiler will only select one of the
|
||||
// calls to InstallMultipleProtocolInterfaces()
|
||||
//
|
||||
//
|
||||
// Check for all 8 possible combinations of the ComponentName, DriverConfiguration, and DriverDiagnostics Protocol
|
||||
// These are all checks against const pointers, so the optimizing compiler will only select one of the
|
||||
// calls to InstallMultipleProtocolInterfaces()
|
||||
//
|
||||
if ((_gEdkIIGlueDriverModelProtocolSelection == 1) || (_gEdkIIGlueDriverModelProtocolSelection == 3)) {
|
||||
if (_gDriverModelProtocolList[0].DriverDiagnostics == NULL) {
|
||||
if (_gDriverModelProtocolList[0].DriverConfiguration == NULL) {
|
||||
if (_gDriverModelProtocolList[0].ComponentName == NULL) {
|
||||
@@ -82,7 +76,7 @@ UefiDriverModelLibConstructor (
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID, (EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
@@ -98,7 +92,7 @@ UefiDriverModelLibConstructor (
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID, (EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,
|
||||
NULL
|
||||
);
|
||||
@@ -117,7 +111,7 @@ UefiDriverModelLibConstructor (
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID, (EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,
|
||||
NULL
|
||||
);
|
||||
@@ -135,7 +129,7 @@ UefiDriverModelLibConstructor (
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID, (EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,
|
||||
&gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,
|
||||
NULL
|
||||
@@ -143,18 +137,95 @@ UefiDriverModelLibConstructor (
|
||||
}
|
||||
}
|
||||
}
|
||||
} // selection == 1 or 3
|
||||
|
||||
//
|
||||
// ASSERT if the call to InstallMultipleProtocolInterfaces() failed
|
||||
//
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
if ((_gEdkIIGlueDriverModelProtocolSelection == 2) || (_gEdkIIGlueDriverModelProtocolSelection == 3)) {
|
||||
if (_gDriverModelProtocolList[0].DriverDiagnostics2== NULL) {
|
||||
if (_gDriverModelProtocolList[0].DriverConfiguration2== NULL) {
|
||||
if (_gDriverModelProtocolList[0].ComponentName2== NULL) {
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
NULL
|
||||
);
|
||||
} else {
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,
|
||||
NULL
|
||||
);
|
||||
} else {
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,
|
||||
&gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (_gDriverModelProtocolList[0].DriverConfiguration2 == NULL) {
|
||||
if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,
|
||||
NULL
|
||||
);
|
||||
} else {
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,
|
||||
&gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,
|
||||
&gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,
|
||||
NULL
|
||||
);
|
||||
} else {
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,
|
||||
&gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,
|
||||
&gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // selection == 2 or 3
|
||||
|
||||
//
|
||||
// Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
|
||||
//
|
||||
DriverBinding = (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding;
|
||||
DriverBinding->ImageHandle = ImageHandle;
|
||||
DriverBinding->DriverBindingHandle = DriverBindingHandle;
|
||||
//
|
||||
// ASSERT if the call to InstallMultipleProtocolInterfaces() failed
|
||||
//
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
// Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
|
||||
//
|
||||
DriverBinding = (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding;
|
||||
DriverBinding->ImageHandle = ImageHandle;
|
||||
DriverBinding->DriverBindingHandle = DriverBindingHandle;
|
||||
|
||||
|
||||
return EFI_SUCCESS;
|
||||
@@ -176,7 +247,7 @@ UefiDriverModelLibDestructor (
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status = EFI_UNSUPPORTED;
|
||||
EFI_HANDLE DriverBindingHandle;
|
||||
|
||||
//
|
||||
@@ -184,21 +255,22 @@ UefiDriverModelLibDestructor (
|
||||
// EdkIIGlueLib: _gDriverModelProtocolListEntries is always 1
|
||||
//
|
||||
|
||||
//
|
||||
// The Driver Binding Protocol must never be NULL
|
||||
//
|
||||
ASSERT(_gDriverModelProtocolList[0].DriverBinding != NULL);
|
||||
//
|
||||
// The Driver Binding Protocol must never be NULL
|
||||
//
|
||||
ASSERT(_gDriverModelProtocolList[0].DriverBinding != NULL);
|
||||
|
||||
//
|
||||
// Retrieve the DriverBindingHandle from the Driver Binding Protocol
|
||||
//
|
||||
DriverBindingHandle = _gDriverModelProtocolList[0].DriverBinding->DriverBindingHandle;
|
||||
//
|
||||
// Retrieve the DriverBindingHandle from the Driver Binding Protocol
|
||||
//
|
||||
DriverBindingHandle = _gDriverModelProtocolList[0].DriverBinding->DriverBindingHandle;
|
||||
|
||||
//
|
||||
// Check for all 8 possible combinations of the ComponentName, DriverConfiguration, and DriverDiagnostics Protocol
|
||||
// These are all checks against const pointers, so the optimizing compiler will only select one of the
|
||||
// calls to InstallMultipleProtocolInterfaces()
|
||||
//
|
||||
//
|
||||
// Check for all 8 possible combinations of the ComponentName, DriverConfiguration, and DriverDiagnostics Protocol
|
||||
// These are all checks against const pointers, so the optimizing compiler will only select one of the
|
||||
// calls to InstallMultipleProtocolInterfaces()
|
||||
//
|
||||
if ((_gEdkIIGlueDriverModelProtocolSelection == 1) || (_gEdkIIGlueDriverModelProtocolSelection == 3)) {
|
||||
if (_gDriverModelProtocolList[0].DriverDiagnostics == NULL) {
|
||||
if (_gDriverModelProtocolList[0].DriverConfiguration == NULL) {
|
||||
if (_gDriverModelProtocolList[0].ComponentName == NULL) {
|
||||
@@ -211,7 +283,7 @@ UefiDriverModelLibDestructor (
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID, (EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
@@ -227,7 +299,7 @@ UefiDriverModelLibDestructor (
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID, (EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,
|
||||
NULL
|
||||
);
|
||||
@@ -246,7 +318,7 @@ UefiDriverModelLibDestructor (
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID, (EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,
|
||||
NULL
|
||||
);
|
||||
@@ -264,7 +336,7 @@ UefiDriverModelLibDestructor (
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL_GUID, (EDKII_GLUE_SELECTED_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,
|
||||
&gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,
|
||||
&gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,
|
||||
NULL
|
||||
@@ -272,11 +344,88 @@ UefiDriverModelLibDestructor (
|
||||
}
|
||||
}
|
||||
}
|
||||
} // selection == 1 or 3
|
||||
|
||||
//
|
||||
// ASSERT if the call to UninstallMultipleProtocolInterfaces() failed
|
||||
//
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
if ((_gEdkIIGlueDriverModelProtocolSelection == 2) || (_gEdkIIGlueDriverModelProtocolSelection == 3)) {
|
||||
if (_gDriverModelProtocolList[0].DriverDiagnostics2 == NULL) {
|
||||
if (_gDriverModelProtocolList[0].DriverConfiguration2 == NULL) {
|
||||
if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
NULL
|
||||
);
|
||||
} else {
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,
|
||||
NULL
|
||||
);
|
||||
} else {
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,
|
||||
&gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (_gDriverModelProtocolList[0].DriverConfiguration2 == NULL) {
|
||||
if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,
|
||||
NULL
|
||||
);
|
||||
} else {
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,
|
||||
&gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,
|
||||
&gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,
|
||||
NULL
|
||||
);
|
||||
} else {
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
&DriverBindingHandle,
|
||||
&gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,
|
||||
&gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,
|
||||
&gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,
|
||||
&gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // selection == 2 or 3
|
||||
|
||||
//
|
||||
// ASSERT if the call to UninstallMultipleProtocolInterfaces() failed
|
||||
//
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -16,32 +16,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#include "Library/EdkIIGlueMemoryAllocationLib.h"
|
||||
|
||||
|
||||
/**
|
||||
Compare whether two names of languages are identical.
|
||||
|
||||
@param Language1 Name of language 1.
|
||||
@param Language2 Name of language 2.
|
||||
|
||||
@retval TRUE Language 1 and language 2 are the same.
|
||||
@retval FALSE Language 1 and language 2 are not the same.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
BOOLEAN
|
||||
CompareIso639LanguageCode (
|
||||
IN CONST CHAR8 *Language1,
|
||||
IN CONST CHAR8 *Language2
|
||||
)
|
||||
{
|
||||
UINT32 Name1;
|
||||
UINT32 Name2;
|
||||
|
||||
Name1 = ReadUnaligned24 ((CONST UINT32 *) Language1);
|
||||
Name2 = ReadUnaligned24 ((CONST UINT32 *) Language2);
|
||||
|
||||
return (BOOLEAN) (Name1 == Name2);
|
||||
}
|
||||
|
||||
/**
|
||||
This function searches the list of configuration tables stored in the EFI System
|
||||
Table for a table with a GUID that matches TableGuid. If a match is found,
|
||||
@@ -509,6 +483,130 @@ EfiTestChildHandle (
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Tests whether a language code has format of ISO639-2.
|
||||
|
||||
@param Languages The language code to be tested.
|
||||
|
||||
@retval TRUE Language code format is ISO 639-2.
|
||||
@retval FALSE Language code format is not ISO639-2.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
BOOLEAN
|
||||
IsIso639LanguageCode (
|
||||
IN CONST CHAR8 *Languages
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
|
||||
//
|
||||
// Find out format of Languages
|
||||
//
|
||||
for (Index = 0; Languages[Index] != 0 && Languages[Index] != ';' && Languages[Index] != '-'; Index++);
|
||||
if (Languages[Index] != 0) {
|
||||
//
|
||||
// RFC4646 language code
|
||||
//
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
// No ';' and '-', it's either ISO639-2 code (list) or single RFC4646 code
|
||||
//
|
||||
if (Index == 2) {
|
||||
//
|
||||
// Single RFC4646 language code without country code, e.g. "en"
|
||||
//
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
// Languages in format of ISO639-2
|
||||
//
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
Compare the first language instance of two language codes, either could be a
|
||||
single language code or a language code list. This function assume Language1
|
||||
and Language2 has the same language code format, i.e. either ISO639-2 or RFC4646.
|
||||
|
||||
@param Language1 The first language code to be tested.
|
||||
@param Language2 The second language code to be tested.
|
||||
|
||||
@retval TRUE Language code match.
|
||||
@retval FALSE Language code mismatch.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
BOOLEAN
|
||||
CompareLanguageCode (
|
||||
IN CONST CHAR8 *Language1,
|
||||
IN CONST CHAR8 *Language2
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
|
||||
//
|
||||
// Compare first two bytes of language tag
|
||||
//
|
||||
if ((Language1[0] != Language2[0]) || (Language1[1] != Language2[1])) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (IsIso639LanguageCode (Language1)) {
|
||||
//
|
||||
// ISO639-2 language code, compare the third byte of language tag
|
||||
//
|
||||
return (BOOLEAN) ((Language1[2] == Language2[2]) ? TRUE : FALSE);
|
||||
}
|
||||
|
||||
//
|
||||
// RFC4646 language code
|
||||
//
|
||||
for (Index = 0; Language1[Index] != 0 && Language1[Index] != ';'; Index++);
|
||||
if ((AsciiStrnCmp (Language1, Language2, Index) == 0) && (Language2[Index] == 0 || Language2[Index] == ';')) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Step to next language code of a language code list.
|
||||
|
||||
@param Languages The language code list to traverse.
|
||||
|
||||
@return Pointer to next language code or NULL terminator if it's the last one.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
CONST
|
||||
CHAR8 *
|
||||
NextSupportedLanguage (
|
||||
IN CONST CHAR8 *Languages
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
|
||||
if (IsIso639LanguageCode (Languages)) {
|
||||
//
|
||||
// ISO639-2 language code
|
||||
//
|
||||
return (Languages + 3);
|
||||
}
|
||||
|
||||
//
|
||||
// Search in RFC4646 language code list
|
||||
//
|
||||
for (Index = 0; Languages[Index] != 0 && Languages[Index] != ';'; Index++);
|
||||
if (Languages[Index] == ';') {
|
||||
Index++;
|
||||
}
|
||||
return (Languages + Index);
|
||||
}
|
||||
|
||||
/**
|
||||
This function looks up a Unicode string in UnicodeStringTable. If Language is
|
||||
a member of SupportedLanguages and a Unicode string is found in UnicodeStringTable
|
||||
@@ -566,13 +664,13 @@ LookupUnicodeString (
|
||||
// Make sure Language is in the set of Supported Languages
|
||||
//
|
||||
while (*SupportedLanguages != 0) {
|
||||
if (CompareIso639LanguageCode (Language, SupportedLanguages)) {
|
||||
if (CompareLanguageCode (Language, SupportedLanguages)) {
|
||||
|
||||
//
|
||||
// Search the Unicode String Table for the matching Language specifier
|
||||
//
|
||||
while (UnicodeStringTable->Language != NULL) {
|
||||
if (CompareIso639LanguageCode (Language, UnicodeStringTable->Language)) {
|
||||
if (CompareLanguageCode (Language, UnicodeStringTable->Language)) {
|
||||
|
||||
//
|
||||
// A matching string was found, so return it
|
||||
@@ -587,7 +685,7 @@ LookupUnicodeString (
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
SupportedLanguages += 3;
|
||||
SupportedLanguages = NextSupportedLanguage (SupportedLanguages);
|
||||
}
|
||||
|
||||
return EFI_UNSUPPORTED;
|
||||
@@ -664,7 +762,7 @@ AddUnicodeString (
|
||||
// Make sure Language is a member of SupportedLanguages
|
||||
//
|
||||
while (*SupportedLanguages != 0) {
|
||||
if (CompareIso639LanguageCode (Language, SupportedLanguages)) {
|
||||
if (CompareLanguageCode (Language, SupportedLanguages)) {
|
||||
|
||||
//
|
||||
// Determine the size of the Unicode String Table by looking for a NULL Language entry
|
||||
@@ -673,7 +771,7 @@ AddUnicodeString (
|
||||
if (*UnicodeStringTable != NULL) {
|
||||
OldUnicodeStringTable = *UnicodeStringTable;
|
||||
while (OldUnicodeStringTable->Language != NULL) {
|
||||
if (CompareIso639LanguageCode (Language, OldUnicodeStringTable->Language)) {
|
||||
if (CompareLanguageCode (Language, OldUnicodeStringTable->Language)) {
|
||||
return EFI_ALREADY_STARTED;
|
||||
}
|
||||
|
||||
@@ -707,7 +805,7 @@ AddUnicodeString (
|
||||
//
|
||||
// Allocate space for a copy of the Language specifier
|
||||
//
|
||||
NewUnicodeStringTable[NumberOfEntries].Language = AllocateCopyPool (3, Language);
|
||||
NewUnicodeStringTable[NumberOfEntries].Language = AllocateCopyPool (AsciiStrSize (Language), Language);
|
||||
if (NewUnicodeStringTable[NumberOfEntries].Language == NULL) {
|
||||
(gBS->FreePool) (NewUnicodeStringTable);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
@@ -753,7 +851,7 @@ AddUnicodeString (
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
SupportedLanguages += 3;
|
||||
SupportedLanguages = NextSupportedLanguage (SupportedLanguages);
|
||||
}
|
||||
|
||||
return EFI_UNSUPPORTED;
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2007, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -67,7 +67,7 @@ GlueEfiCreateEventLegacyBoot (
|
||||
{
|
||||
return EfiCreateEventLegacyBootEx (
|
||||
EFI_TPL_CALLBACK,
|
||||
InternalEmptyFuntion,
|
||||
NULL,
|
||||
NULL,
|
||||
LegacyBootEvent
|
||||
);
|
||||
@@ -101,29 +101,50 @@ EfiCreateEventLegacyBootEx (
|
||||
OUT EFI_EVENT *LegacyBootEvent
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
UINT32 EventType;
|
||||
EFI_EVENT_NOTIFY WorkerNotifyFunction;
|
||||
|
||||
ASSERT (LegacyBootEvent != NULL);
|
||||
|
||||
#if (EFI_SPECIFICATION_VERSION < 0x00020000)
|
||||
|
||||
if (NotifyFunction == NULL) {
|
||||
EventType = EFI_EVENT_SIGNAL_LEGACY_BOOT | EFI_EVENT_NOTIFY_SIGNAL_ALL;
|
||||
} else {
|
||||
EventType = EFI_EVENT_SIGNAL_LEGACY_BOOT;
|
||||
}
|
||||
WorkerNotifyFunction = NotifyFunction;
|
||||
|
||||
//
|
||||
// prior to UEFI 2.0 use Tiano extension to EFI
|
||||
//
|
||||
Status = gBS->CreateEvent (
|
||||
EFI_EVENT_SIGNAL_LEGACY_BOOT | EFI_EVENT_NOTIFY_SIGNAL_ALL,
|
||||
EventType,
|
||||
NotifyTpl,
|
||||
NotifyFunction,
|
||||
WorkerNotifyFunction,
|
||||
NotifyContext,
|
||||
LegacyBootEvent
|
||||
);
|
||||
#else
|
||||
|
||||
EventType = EVENT_NOTIFY_SIGNAL;
|
||||
if (NotifyFunction == NULL) {
|
||||
//
|
||||
// CreatEventEx will check NotifyFunction is NULL or not
|
||||
//
|
||||
WorkerNotifyFunction = InternalEmptyFuntion;
|
||||
} else {
|
||||
WorkerNotifyFunction = NotifyFunction;
|
||||
}
|
||||
|
||||
//
|
||||
// For UEFI 2.0 and the future use an Event Group
|
||||
//
|
||||
Status = gBS->CreateEventEx (
|
||||
EVENT_NOTIFY_SIGNAL,
|
||||
EventType,
|
||||
NotifyTpl,
|
||||
NotifyFunction,
|
||||
WorkerNotifyFunction,
|
||||
NotifyContext,
|
||||
&gEfiEventLegacyBootGuid,
|
||||
LegacyBootEvent
|
||||
@@ -157,7 +178,7 @@ GlueEfiCreateEventReadyToBoot (
|
||||
{
|
||||
return EfiCreateEventReadyToBootEx (
|
||||
EFI_TPL_CALLBACK,
|
||||
InternalEmptyFuntion,
|
||||
NULL,
|
||||
NULL,
|
||||
ReadyToBootEvent
|
||||
);
|
||||
@@ -191,29 +212,51 @@ EfiCreateEventReadyToBootEx (
|
||||
OUT EFI_EVENT *ReadyToBootEvent
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
UINT32 EventType;
|
||||
EFI_EVENT_NOTIFY WorkerNotifyFunction;
|
||||
|
||||
ASSERT (ReadyToBootEvent != NULL);
|
||||
|
||||
#if (EFI_SPECIFICATION_VERSION < 0x00020000)
|
||||
#if (EFI_SPECIFICATION_VERSION < 0x00020000)
|
||||
|
||||
if (NotifyFunction == NULL) {
|
||||
EventType = EFI_EVENT_SIGNAL_READY_TO_BOOT | EFI_EVENT_NOTIFY_SIGNAL_ALL;
|
||||
} else {
|
||||
EventType = EFI_EVENT_SIGNAL_READY_TO_BOOT;
|
||||
}
|
||||
WorkerNotifyFunction = NotifyFunction;
|
||||
|
||||
//
|
||||
// prior to UEFI 2.0 use Tiano extension to EFI
|
||||
//
|
||||
Status = gBS->CreateEvent (
|
||||
EFI_EVENT_SIGNAL_READY_TO_BOOT | EFI_EVENT_NOTIFY_SIGNAL_ALL,
|
||||
EventType,
|
||||
NotifyTpl,
|
||||
NotifyFunction,
|
||||
WorkerNotifyFunction,
|
||||
NotifyContext,
|
||||
ReadyToBootEvent
|
||||
);
|
||||
#else
|
||||
|
||||
EventType = EVENT_NOTIFY_SIGNAL;
|
||||
|
||||
if (NotifyFunction == NULL) {
|
||||
//
|
||||
// CreatEventEx will check NotifyFunction is NULL or not
|
||||
//
|
||||
WorkerNotifyFunction = InternalEmptyFuntion;
|
||||
} else {
|
||||
WorkerNotifyFunction = NotifyFunction;
|
||||
}
|
||||
|
||||
//
|
||||
// For UEFI 2.0 and the future use an Event Group
|
||||
//
|
||||
Status = gBS->CreateEventEx (
|
||||
EVENT_NOTIFY_SIGNAL,
|
||||
EventType,
|
||||
NotifyTpl,
|
||||
NotifyFunction,
|
||||
WorkerNotifyFunction,
|
||||
NotifyContext,
|
||||
&gEfiEventReadyToBootGuid,
|
||||
ReadyToBootEvent
|
||||
@@ -274,15 +317,6 @@ EfiSignalEventLegacyBoot (
|
||||
/**
|
||||
Check to see if the Firmware Volume (FV) Media Device Path is valid
|
||||
|
||||
Tiano extended the EFI 1.10 device path nodes. Tiano does not own this enum
|
||||
so as we move to UEFI 2.0 support we must use a mechanism that conforms with
|
||||
the UEFI 2.0 specification to define the FV device path. An UEFI GUIDed
|
||||
device path is defined for PIWG extensions of device path. If the code
|
||||
is compiled to conform with the UEFI 2.0 specification use the new device path
|
||||
else use the old form for backwards compatability. The return value to this
|
||||
function points to a location in FvDevicePathNode and it does not allocate
|
||||
new memory for the GUID pointer that is returned.
|
||||
|
||||
@param FvDevicePathNode Pointer to FV device path to check.
|
||||
|
||||
@retval NULL FvDevicePathNode is not valid.
|
||||
@@ -297,11 +331,6 @@ GlueEfiGetNameGuidFromFwVolDevicePathNode (
|
||||
{
|
||||
ASSERT (FvDevicePathNode != NULL);
|
||||
|
||||
//
|
||||
// EFI Specification extension on Media Device Path. MEDIA_FW_VOL_FILEPATH_DEVICE_PATH is adopted by UEFI later and added in UEFI2.10.
|
||||
// In EdkCompatibility Package, we only support MEDIA_FW_VOL_FILEPATH_DEVICE_PATH that complies with
|
||||
// EFI 1.10 and UEFI 2.10.
|
||||
//
|
||||
if (DevicePathType (&FvDevicePathNode->Header) == MEDIA_DEVICE_PATH &&
|
||||
DevicePathSubType (&FvDevicePathNode->Header) == MEDIA_FV_FILEPATH_DP) {
|
||||
return (EFI_GUID *) &FvDevicePathNode->NameGuid;
|
||||
@@ -314,13 +343,6 @@ GlueEfiGetNameGuidFromFwVolDevicePathNode (
|
||||
/**
|
||||
Initialize a Firmware Volume (FV) Media Device Path node.
|
||||
|
||||
Tiano extended the EFI 1.10 device path nodes. Tiano does not own this enum
|
||||
so as we move to UEFI 2.0 support we must use a mechanism that conforms with
|
||||
the UEFI 2.0 specification to define the FV device path. An UEFI GUIDed
|
||||
device path is defined for PIWG extensions of device path. If the code
|
||||
is compiled to conform with the UEFI 2.0 specification use the new device path
|
||||
else use the old form for backwards compatability.
|
||||
|
||||
@param FvDevicePathNode Pointer to a FV device path node to initialize
|
||||
@param NameGuid FV file name to use in FvDevicePathNode
|
||||
|
||||
@@ -335,16 +357,10 @@ GlueEfiInitializeFwVolDevicepathNode (
|
||||
ASSERT (FvDevicePathNode != NULL);
|
||||
ASSERT (NameGuid != NULL);
|
||||
|
||||
//
|
||||
// EFI Specification extension on Media Device Path. MEDIA_FW_VOL_FILEPATH_DEVICE_PATH is adopted by UEFI later and added in UEFI2.10.
|
||||
// In EdkCompatibility Package, we only support MEDIA_FW_VOL_FILEPATH_DEVICE_PATH that complies with
|
||||
// EFI 1.10 and UEFI 2.10.
|
||||
//
|
||||
FvDevicePathNode->Header.Type = MEDIA_DEVICE_PATH;
|
||||
FvDevicePathNode->Header.SubType = MEDIA_FV_FILEPATH_DP;
|
||||
SetDevicePathNodeLength (&FvDevicePathNode->Header, sizeof (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH));
|
||||
|
||||
CopyGuid (&FvDevicePathNode->NameGuid, NameGuid);
|
||||
|
||||
CopyGuid (&FvDevicePathNode->NameGuid, NameGuid);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user