Files
EDK2-fork/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.h
Pierre Gondois 8c208049d4 ArmVirtPkg: Kvmtool: Advertise all serial ports
kvmtool advertises 4 serial ports. The DynamicTablesPkg advertises:
- the first port as the console port / SPCR table
- the second port as the debug port / DBG2 table
- the other ports are currently ignored

Advertise the last 2 serial port to the OS by describing them in SSDT
tables. New serial devices can be seen at:
Before patch:
$ ls /sys/devices/pnp0
00:00  00:01  00:02  power  uevent

After patch:
$ ls /sys/devices/pnp0
00:00  00:01  00:02  00:03  00:04  power  uevent

The EStdAcpiTableIdSsdtSerialPort entry is placed before the
last 3 PCI related tables as they might be dynamically removed
depending on kvmtool parameters.

Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
2025-03-18 16:23:27 +00:00

126 lines
3.5 KiB
C

/** @file
Copyright (c) 2021 - 2022, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Glossary:
- Cm or CM - Configuration Manager
- Obj or OBJ - Object
**/
#ifndef CONFIGURATION_MANAGER_H_
#define CONFIGURATION_MANAGER_H_
///
/// C array containing the compiled AML template.
/// This symbol is defined in the auto generated C file
/// containing the AML bytecode array.
///
extern CHAR8 dsdt_aml_code[];
///
/// The configuration manager version.
///
#define CONFIGURATION_MANAGER_REVISION CREATE_REVISION (1, 0)
///
/// The OEM ID
///
#define CFG_MGR_OEM_ID { 'A', 'R', 'M', 'L', 'T', 'D' }
///
/// Memory address size limit. Assume the whole address space.
///
#define MEMORY_ADDRESS_SIZE_LIMIT 64
/** A function that prepares Configuration Manager Objects for returning.
@param [in] This Pointer to the Configuration Manager Protocol.
@param [in] CmObjectId The Configuration Manager Object ID.
@param [in] Token A token for identifying the object.
@param [out] CmObject Pointer to the Configuration Manager Object
descriptor describing the requested Object.
@retval EFI_SUCCESS Success.
@retval EFI_INVALID_PARAMETER A parameter is invalid.
@retval EFI_NOT_FOUND The required object information is not found.
**/
typedef EFI_STATUS (*CM_OBJECT_HANDLER_PROC) (
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST This,
IN CONST CM_OBJECT_ID CmObjectId,
IN CONST CM_OBJECT_TOKEN Token,
IN OUT CM_OBJ_DESCRIPTOR *CONST CmObject
);
///
/// A helper macro for mapping a reference token.
///
#define REFERENCE_TOKEN(Field) \
(CM_OBJECT_TOKEN)((UINT8*)&mKvmtoolPlatRepositoryInfo + \
OFFSET_OF (EDKII_PLATFORM_REPOSITORY_INFO, Field))
///
/// The number of ACPI tables to install
///
#define PLAT_ACPI_TABLE_COUNT 11
///
/// A structure describing the platform configuration
/// manager repository information
///
typedef struct PlatformRepositoryInfo {
///
/// Configuration Manager Information.
///
CM_STD_OBJ_CONFIGURATION_MANAGER_INFO CmInfo;
///
/// List of ACPI tables
///
CM_STD_OBJ_ACPI_TABLE_INFO CmAcpiTableList[PLAT_ACPI_TABLE_COUNT];
///
/// Power management profile information
///
CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO PmProfileInfo;
///
/// ITS Group node
///
CM_ARM_ITS_GROUP_NODE ItsGroupInfo;
///
/// ITS Identifier array
///
CM_ARM_ITS_IDENTIFIER ItsIdentifierArray[1];
///
/// PCI Root complex node
///
CM_ARM_ROOT_COMPLEX_NODE RootComplexInfo;
///
/// Array of DeviceID mapping
///
CM_ARM_ID_MAPPING DeviceIdMapping[1];
///
/// Dynamic platform repository.
/// CmObj created by parsing the Kvmtool device tree are stored here.
///
DYNAMIC_PLATFORM_REPOSITORY_INFO *DynamicPlatformRepo;
///
/// Base address of the FDT.
///
VOID *FdtBase;
///
/// A handle to the FDT HwInfoParser.
///
HW_INFO_PARSER_HANDLE FdtParserHandle;
} EDKII_PLATFORM_REPOSITORY_INFO;
#endif // CONFIGURATION_MANAGER_H_