mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 15:14:02 +02:00
DynamicTablesPkg: Add SSDT Serial port for DBG2
The SSDT Serial port fixup library provides interfaces to generate a SSDT Serial port table based on the serial port information. Update the DBG2 Generator to use the SSDT serial port fixup library to build a serial port definition block for the DBG2 serial port and install the SSDT table. Signed-off-by: Pierre Gondois <pierre.gondois@arm.com> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
This commit is contained in:
parent
c76028a6ff
commit
313d2ec991
@ -1,7 +1,7 @@
|
|||||||
## @file
|
## @file
|
||||||
# DBG2 Table Generator
|
# DBG2 Table Generator
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 - 2018, ARM Limited. All rights reserved.
|
# Copyright (c) 2017 - 2020, Arm Limited. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
##
|
##
|
||||||
@ -29,6 +29,7 @@
|
|||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
BaseLib
|
BaseLib
|
||||||
PL011UartLib
|
PL011UartLib
|
||||||
|
SsdtSerialPortFixupLib
|
||||||
|
|
||||||
[FixedPcd]
|
[FixedPcd]
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
|
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
/** @file
|
/** @file
|
||||||
DBG2 Table Generator
|
DBG2 Table Generator
|
||||||
|
|
||||||
Copyright (c) 2017 - 2020, ARM Limited. All rights reserved.
|
Copyright (c) 2017 - 2020, Arm Limited. All rights reserved.<BR>
|
||||||
|
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
@par Reference(s):
|
@par Reference(s):
|
||||||
@ -12,6 +13,7 @@
|
|||||||
#include <IndustryStandard/DebugPort2Table.h>
|
#include <IndustryStandard/DebugPort2Table.h>
|
||||||
#include <Library/AcpiLib.h>
|
#include <Library/AcpiLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/PL011UartLib.h>
|
#include <Library/PL011UartLib.h>
|
||||||
#include <Protocol/AcpiTable.h>
|
#include <Protocol/AcpiTable.h>
|
||||||
#include <Protocol/SerialIo.h>
|
#include <Protocol/SerialIo.h>
|
||||||
@ -20,6 +22,7 @@
|
|||||||
#include <AcpiTableGenerator.h>
|
#include <AcpiTableGenerator.h>
|
||||||
#include <ConfigurationManagerObject.h>
|
#include <ConfigurationManagerObject.h>
|
||||||
#include <ConfigurationManagerHelper.h>
|
#include <ConfigurationManagerHelper.h>
|
||||||
|
#include <Library/SsdtSerialPortFixupLib.h>
|
||||||
#include <Library/TableHelperLib.h>
|
#include <Library/TableHelperLib.h>
|
||||||
#include <Protocol/ConfigurationManagerProtocol.h>
|
#include <Protocol/ConfigurationManagerProtocol.h>
|
||||||
|
|
||||||
@ -44,17 +47,21 @@ Requirements:
|
|||||||
*/
|
*/
|
||||||
#define DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS 1
|
#define DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS 1
|
||||||
|
|
||||||
/** The index for the debug port 1 in the Debug port information list.
|
/** The index for the debug port 0 in the Debug port information list.
|
||||||
*/
|
*/
|
||||||
#define DBG_PORT_INDEX_PORT1 0
|
#define INDEX_DBG_PORT0 0
|
||||||
|
|
||||||
/** A string representing the name of the debug port 1.
|
/** A string representing the name of the debug port 0.
|
||||||
*/
|
*/
|
||||||
#define NAME_STR_PORT1 "COM1"
|
#define NAME_STR_DBG_PORT0 "COM0"
|
||||||
|
|
||||||
|
/** An UID representing the debug port 0.
|
||||||
|
*/
|
||||||
|
#define UID_DBG_PORT0 0
|
||||||
|
|
||||||
/** The length of the namespace string.
|
/** The length of the namespace string.
|
||||||
*/
|
*/
|
||||||
#define DBG2_NAMESPACESTRING_FIELD_SIZE sizeof (NAME_STR_PORT1)
|
#define DBG2_NAMESPACESTRING_FIELD_SIZE sizeof (NAME_STR_DBG_PORT0)
|
||||||
|
|
||||||
/** The PL011 UART address range length.
|
/** The PL011 UART address range length.
|
||||||
*/
|
*/
|
||||||
@ -159,7 +166,7 @@ DBG2_TABLE AcpiDbg2 = {
|
|||||||
0, // {Template}: Serial Port Subtype
|
0, // {Template}: Serial Port Subtype
|
||||||
0, // {Template}: Serial Port Base Address
|
0, // {Template}: Serial Port Base Address
|
||||||
PL011_UART_LENGTH,
|
PL011_UART_LENGTH,
|
||||||
NAME_STR_PORT1
|
NAME_STR_DBG_PORT0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -217,58 +224,115 @@ SetupDebugUart (
|
|||||||
&StopBits
|
&StopBits
|
||||||
);
|
);
|
||||||
|
|
||||||
DEBUG ((DEBUG_INFO, "Debug UART Configuration:\n"));
|
|
||||||
DEBUG ((DEBUG_INFO, "UART Base = 0x%lx\n", SerialPortInfo->BaseAddress));
|
|
||||||
DEBUG ((DEBUG_INFO, "Clock = %d\n", SerialPortInfo->Clock));
|
|
||||||
DEBUG ((DEBUG_INFO, "Baudrate = %ld\n", BaudRate));
|
|
||||||
DEBUG ((DEBUG_INFO, "Configuring Debug UART. Status = %r\n", Status));
|
|
||||||
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Construct the DBG2 ACPI table
|
/** Free any resources allocated for constructing the tables.
|
||||||
|
|
||||||
The BuildDbg2Table function is called by the Dynamic Table Manager
|
@param [in] This Pointer to the ACPI table generator.
|
||||||
to construct the DBG2 ACPI table.
|
@param [in] AcpiTableInfo Pointer to the ACPI Table Info.
|
||||||
|
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
|
||||||
|
Protocol Interface.
|
||||||
|
@param [in, out] Table Pointer to an array of pointers
|
||||||
|
to ACPI Table(s).
|
||||||
|
@param [in] TableCount Number of ACPI table(s).
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The resources were freed successfully.
|
||||||
|
@retval EFI_INVALID_PARAMETER The table pointer is NULL or invalid.
|
||||||
|
**/
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
FreeDbg2TableEx (
|
||||||
|
IN CONST ACPI_TABLE_GENERATOR * CONST This,
|
||||||
|
IN CONST CM_STD_OBJ_ACPI_TABLE_INFO * CONST AcpiTableInfo,
|
||||||
|
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,
|
||||||
|
IN OUT EFI_ACPI_DESCRIPTION_HEADER *** CONST Table,
|
||||||
|
IN CONST UINTN TableCount
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_ACPI_DESCRIPTION_HEADER ** TableList;
|
||||||
|
|
||||||
|
ASSERT (This != NULL);
|
||||||
|
ASSERT (AcpiTableInfo != NULL);
|
||||||
|
ASSERT (CfgMgrProtocol != NULL);
|
||||||
|
ASSERT (AcpiTableInfo->TableGeneratorId == This->GeneratorID);
|
||||||
|
ASSERT (AcpiTableInfo->AcpiTableSignature == This->AcpiTableSignature);
|
||||||
|
|
||||||
|
if ((Table == NULL) ||
|
||||||
|
(*Table == NULL) ||
|
||||||
|
(TableCount != 2)) {
|
||||||
|
DEBUG ((DEBUG_ERROR, "ERROR: DBG2: Invalid Table Pointer\n"));
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
TableList = *Table;
|
||||||
|
|
||||||
|
if ((TableList[1] == NULL) ||
|
||||||
|
(TableList[1]->Signature !=
|
||||||
|
EFI_ACPI_6_3_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE)) {
|
||||||
|
DEBUG ((DEBUG_ERROR, "ERROR: DBG2: Invalid SSDT table pointer.\n"));
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only need to free the SSDT table at index 1. The DBG2 table is static.
|
||||||
|
Status = FreeSsdtSerialPortTable (TableList[1]);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
// Free the table list.
|
||||||
|
FreePool (*Table);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Construct the DBG2 ACPI table and its associated SSDT table.
|
||||||
|
|
||||||
This function invokes the Configuration Manager protocol interface
|
This function invokes the Configuration Manager protocol interface
|
||||||
to get the required hardware information for generating the ACPI
|
to get the required hardware information for generating the ACPI
|
||||||
table.
|
table.
|
||||||
|
|
||||||
If this function allocates any resources then they must be freed
|
If this function allocates any resources then they must be freed
|
||||||
in the FreeXXXXTableResources function.
|
in the FreeXXXXTableResourcesEx function.
|
||||||
|
|
||||||
@param [in] This Pointer to the table generator.
|
@param [in] This Pointer to the ACPI table generator.
|
||||||
@param [in] AcpiTableInfo Pointer to the ACPI Table Info.
|
@param [in] AcpiTableInfo Pointer to the ACPI table information.
|
||||||
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
|
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
|
||||||
Protocol Interface.
|
Protocol interface.
|
||||||
@param [out] Table Pointer to the constructed ACPI Table.
|
@param [out] Table Pointer to a list of generated ACPI table(s).
|
||||||
|
@param [out] TableCount Number of generated ACPI table(s).
|
||||||
|
|
||||||
@retval EFI_SUCCESS Table generated successfully.
|
@retval EFI_SUCCESS Table generated successfully.
|
||||||
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
@retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration
|
||||||
@retval EFI_NOT_FOUND The required object was not found.
|
Manager is less than the Object size for
|
||||||
@retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration
|
the requested object.
|
||||||
Manager is less than the Object size for the
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
||||||
requested object.
|
@retval EFI_NOT_FOUND Could not find information.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES Could not allocate memory.
|
||||||
|
@retval EFI_UNSUPPORTED Unsupported configuration.
|
||||||
**/
|
**/
|
||||||
STATIC
|
STATIC
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
BuildDbg2Table (
|
BuildDbg2TableEx (
|
||||||
IN CONST ACPI_TABLE_GENERATOR * CONST This,
|
IN CONST ACPI_TABLE_GENERATOR * This,
|
||||||
IN CONST CM_STD_OBJ_ACPI_TABLE_INFO * CONST AcpiTableInfo,
|
IN CONST CM_STD_OBJ_ACPI_TABLE_INFO * CONST AcpiTableInfo,
|
||||||
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,
|
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,
|
||||||
OUT EFI_ACPI_DESCRIPTION_HEADER ** CONST Table
|
OUT EFI_ACPI_DESCRIPTION_HEADER *** Table,
|
||||||
|
OUT UINTN * CONST TableCount
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
CM_ARM_SERIAL_PORT_INFO * SerialPortInfo;
|
CM_ARM_SERIAL_PORT_INFO * SerialPortInfo;
|
||||||
|
UINT32 SerialPortCount;
|
||||||
|
EFI_ACPI_DESCRIPTION_HEADER ** TableList;
|
||||||
|
|
||||||
ASSERT (This != NULL);
|
ASSERT (This != NULL);
|
||||||
ASSERT (AcpiTableInfo != NULL);
|
ASSERT (AcpiTableInfo != NULL);
|
||||||
ASSERT (CfgMgrProtocol != NULL);
|
ASSERT (CfgMgrProtocol != NULL);
|
||||||
ASSERT (Table != NULL);
|
ASSERT (Table != NULL);
|
||||||
|
ASSERT (TableCount != NULL);
|
||||||
ASSERT (AcpiTableInfo->TableGeneratorId == This->GeneratorID);
|
ASSERT (AcpiTableInfo->TableGeneratorId == This->GeneratorID);
|
||||||
ASSERT (AcpiTableInfo->AcpiTableSignature == This->AcpiTableSignature);
|
ASSERT (AcpiTableInfo->AcpiTableSignature == This->AcpiTableSignature);
|
||||||
|
|
||||||
@ -291,7 +355,7 @@ BuildDbg2Table (
|
|||||||
CfgMgrProtocol,
|
CfgMgrProtocol,
|
||||||
CM_NULL_TOKEN,
|
CM_NULL_TOKEN,
|
||||||
&SerialPortInfo,
|
&SerialPortInfo,
|
||||||
NULL
|
&SerialPortCount
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((
|
DEBUG ((
|
||||||
@ -299,34 +363,41 @@ BuildDbg2Table (
|
|||||||
"ERROR: DBG2: Failed to get serial port information. Status = %r\n",
|
"ERROR: DBG2: Failed to get serial port information. Status = %r\n",
|
||||||
Status
|
Status
|
||||||
));
|
));
|
||||||
goto error_handler;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SerialPortInfo->BaseAddress == 0) {
|
if (SerialPortCount == 0) {
|
||||||
Status = EFI_INVALID_PARAMETER;
|
|
||||||
DEBUG ((
|
DEBUG ((
|
||||||
DEBUG_ERROR,
|
DEBUG_ERROR,
|
||||||
"ERROR: DBG2: Uart port base address is invalid. BaseAddress = 0x%lx\n",
|
"ERROR: DBG2: Serial port information not found. Status = %r\n",
|
||||||
SerialPortInfo->BaseAddress
|
EFI_NOT_FOUND
|
||||||
));
|
));
|
||||||
goto error_handler;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((SerialPortInfo->PortSubtype !=
|
// Only use the first DBG2 port information.
|
||||||
EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART) &&
|
Status = ValidateSerialPortInfo (SerialPortInfo, 1);
|
||||||
(SerialPortInfo->PortSubtype !=
|
if (EFI_ERROR (Status)) {
|
||||||
EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART_2X) &&
|
|
||||||
(SerialPortInfo->PortSubtype !=
|
|
||||||
EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART) &&
|
|
||||||
(SerialPortInfo->PortSubtype !=
|
|
||||||
EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_DCC)) {
|
|
||||||
Status = EFI_INVALID_PARAMETER;
|
|
||||||
DEBUG ((
|
DEBUG ((
|
||||||
DEBUG_ERROR,
|
DEBUG_ERROR,
|
||||||
"ERROR: DBG2: Uart port subtype is invalid. PortSubtype = 0x%x\n",
|
"ERROR: DBG2: Invalid serial port information. Status = %r\n",
|
||||||
SerialPortInfo->PortSubtype
|
Status
|
||||||
));
|
));
|
||||||
goto error_handler;
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate a table to store pointers to the DBG2 and SSDT tables.
|
||||||
|
TableList = (EFI_ACPI_DESCRIPTION_HEADER**)
|
||||||
|
AllocateZeroPool (sizeof (EFI_ACPI_DESCRIPTION_HEADER*) * 2);
|
||||||
|
if (TableList == NULL) {
|
||||||
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
|
DEBUG ((
|
||||||
|
DEBUG_ERROR,
|
||||||
|
"ERROR: DBG2: Failed to allocate memory for Table List," \
|
||||||
|
" Status = %r\n",
|
||||||
|
Status
|
||||||
|
));
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = AddAcpiHeader (
|
Status = AddAcpiHeader (
|
||||||
@ -346,11 +417,11 @@ BuildDbg2Table (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update the base address
|
// Update the base address
|
||||||
AcpiDbg2.Dbg2DeviceInfo[DBG_PORT_INDEX_PORT1].BaseAddressRegister.Address =
|
AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].BaseAddressRegister.Address =
|
||||||
SerialPortInfo->BaseAddress;
|
SerialPortInfo->BaseAddress;
|
||||||
|
|
||||||
// Update the serial port subtype
|
// Update the serial port subtype
|
||||||
AcpiDbg2.Dbg2DeviceInfo[DBG_PORT_INDEX_PORT1].Dbg2Device.PortSubtype =
|
AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].Dbg2Device.PortSubtype =
|
||||||
SerialPortInfo->PortSubtype;
|
SerialPortInfo->PortSubtype;
|
||||||
|
|
||||||
if ((SerialPortInfo->PortSubtype ==
|
if ((SerialPortInfo->PortSubtype ==
|
||||||
@ -371,9 +442,35 @@ BuildDbg2Table (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*Table = (EFI_ACPI_DESCRIPTION_HEADER*)&AcpiDbg2;
|
TableList[0] = (EFI_ACPI_DESCRIPTION_HEADER*)&AcpiDbg2;
|
||||||
|
|
||||||
|
// Build a SSDT table describing the serial port.
|
||||||
|
Status = BuildSsdtSerialPortTable (
|
||||||
|
AcpiTableInfo,
|
||||||
|
SerialPortInfo,
|
||||||
|
NAME_STR_DBG_PORT0,
|
||||||
|
UID_DBG_PORT0,
|
||||||
|
&TableList[1]
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
DEBUG ((
|
||||||
|
DEBUG_ERROR,
|
||||||
|
"ERROR: DBG2: Failed to build associated SSDT table. Status = %r\n",
|
||||||
|
Status
|
||||||
|
));
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
*TableCount = 2;
|
||||||
|
*Table = TableList;
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
|
||||||
error_handler:
|
error_handler:
|
||||||
|
if (TableList != NULL) {
|
||||||
|
FreePool (TableList);
|
||||||
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,7 +488,7 @@ ACPI_TABLE_GENERATOR Dbg2Generator = {
|
|||||||
// Generator Description
|
// Generator Description
|
||||||
L"ACPI.STD.DBG2.GENERATOR",
|
L"ACPI.STD.DBG2.GENERATOR",
|
||||||
// ACPI Table Signature
|
// ACPI Table Signature
|
||||||
EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE,
|
||||||
// ACPI Table Revision supported by this Generator
|
// ACPI Table Revision supported by this Generator
|
||||||
EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION,
|
EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION,
|
||||||
// Minimum supported ACPI Table Revision
|
// Minimum supported ACPI Table Revision
|
||||||
@ -400,16 +497,14 @@ ACPI_TABLE_GENERATOR Dbg2Generator = {
|
|||||||
TABLE_GENERATOR_CREATOR_ID_ARM,
|
TABLE_GENERATOR_CREATOR_ID_ARM,
|
||||||
// Creator Revision
|
// Creator Revision
|
||||||
DBG2_GENERATOR_REVISION,
|
DBG2_GENERATOR_REVISION,
|
||||||
// Build Table function
|
// Build table function. Use the extended version instead.
|
||||||
BuildDbg2Table,
|
|
||||||
// No additional resources are allocated by the generator.
|
|
||||||
// Hence the Free Resource function is not required.
|
|
||||||
NULL,
|
NULL,
|
||||||
// Extended build function not needed
|
// Free table function. Use the extended version instead.
|
||||||
NULL,
|
NULL,
|
||||||
// Extended build function not implemented by the generator.
|
// Extended Build table function.
|
||||||
// Hence extended free resource function is not required.
|
BuildDbg2TableEx,
|
||||||
NULL
|
// Extended free function.
|
||||||
|
FreeDbg2TableEx
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Register the Generator with the ACPI Table Factory.
|
/** Register the Generator with the ACPI Table Factory.
|
||||||
@ -433,7 +528,6 @@ AcpiDbg2LibConstructor (
|
|||||||
Status = RegisterAcpiTableGenerator (&Dbg2Generator);
|
Status = RegisterAcpiTableGenerator (&Dbg2Generator);
|
||||||
DEBUG ((DEBUG_INFO, "DBG2: Register Generator. Status = %r\n", Status));
|
DEBUG ((DEBUG_INFO, "DBG2: Register Generator. Status = %r\n", Status));
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user