From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 0DACBD807AB for ; Mon, 6 Nov 2023 03:27:14 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=u9bL23eTXbj8LOINz1CdImeVC9iE+Fe+wZhA9JJDklg=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1699241233; v=1; b=ZqC+kH61duzmZGjLPCvYKXeaCb8uqx1Qw/yRPdAmnAmAonWb0+rdMAZWEFJS2NmzDNrGOMNx j3lCYdKUiHMhETRM52X/1Beq3D0UUXrUiMxUPFoc86/MzwHhEdvk01c1i7po9kVFrYNPSWlJv2H nm14rkCyWKoUVl9DGplHaqjg= X-Received: by 127.0.0.2 with SMTP id phaKYY7687511xCV7uCkzSJf; Sun, 05 Nov 2023 19:27:13 -0800 X-Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by mx.groups.io with SMTP id smtpd.web11.46480.1699241232675272865 for ; Sun, 05 Nov 2023 19:27:13 -0800 X-Received: from loongson.cn (unknown [10.2.9.245]) by gateway (Coremail) with SMTP id _____8Cx77sPXUhl+jY3AA--.49256S3; Mon, 06 Nov 2023 11:27:11 +0800 (CST) X-Received: from code-server.gen (unknown [10.2.9.245]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Bxni8OXUhlBBI6AA--.60893S2; Mon, 06 Nov 2023 11:27:10 +0800 (CST) From: "Chao Li" To: devel@edk2.groups.io Cc: Michael D Kinney , Liming Gao , Zhiguang Liu Subject: [edk2-devel] [PATCH v2 05/30] MdePkg: Add LoongArch Cpucfg function Date: Mon, 6 Nov 2023 11:27:09 +0800 Message-Id: <20231106032709.2271132-1-lichao@loongson.cn> In-Reply-To: <20231106032521.2251143-1-lichao@loongson.cn> References: <20231106032521.2251143-1-lichao@loongson.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAf8Bxni8OXUhlBBI6AA--.60893S2 X-CM-SenderInfo: xolfxt3r6o00pqjv00gofq/1tbiAQAGCGVFqihSvgAvsu X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lichao@loongson.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: MB4e4CLLLm1bNlMuxfoXSytkx7686176AA= Content-Transfer-Encoding: 8bit X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=ZqC+kH61; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=none Add LoongArch AsmCpucfg function and Cpucfg definitions. Also added Include/Register/LoongArch64/Cpucfg.h to IgnoreFiles of EccCheck. BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584 Cc: Michael D Kinney Cc: Liming Gao Cc: Zhiguang Liu Signed-off-by: Chao Li --- MdePkg/Include/Library/BaseLib.h | 12 + MdePkg/Include/Register/LoongArch64/Cpucfg.h | 565 +++++++++++++++++++ MdePkg/Library/BaseLib/BaseLib.inf | 1 + MdePkg/Library/BaseLib/LoongArch64/Cpucfg.S | 26 + MdePkg/MdePkg.ci.yaml | 3 +- 5 files changed, 606 insertions(+), 1 deletion(-) create mode 100644 MdePkg/Include/Register/LoongArch64/Cpucfg.h create mode 100644 MdePkg/Library/BaseLib/LoongArch64/Cpucfg.S diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h index 93a014cd49..3adf4d0042 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -269,6 +269,18 @@ DisableLocalInterrupts ( IN UINT16 ); +/** + Read CPUCFG register. + + @param Index Specifies the register number of the CPUCFG to read the data. + @param Data A pointer to the variable used to store the CPUCFG register value. +**/ +VOID +AsmCpucfg ( + IN UINT32 Index, + OUT UINT32 *Data + ); + #endif // defined (MDE_CPU_LOONGARCH64) // diff --git a/MdePkg/Include/Register/LoongArch64/Cpucfg.h b/MdePkg/Include/Register/LoongArch64/Cpucfg.h new file mode 100644 index 0000000000..841885dc70 --- /dev/null +++ b/MdePkg/Include/Register/LoongArch64/Cpucfg.h @@ -0,0 +1,565 @@ +/** @file + CPUCFG definitions. + + Copyright (c) 2023, Loongson Technology Corporation Limited. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef CPUCFG_H_ +#define CPUCFG_H_ + +/** + CPUCFG REG0 Information + + @code + CPUCFG_REG0_INFO_DATA + **/ +#define CPUCFG_REG0_INFO 0x0 + +/** + CPUCFG REG0 Information returned data. + #CPUCFG_REG0_INFO + **/ +typedef union { + struct { + /// + /// [Bit 31:0] Processor Identity. + /// + UINT32 PRID : 32; + } Bits; + /// + /// All bit fields as a 32-bit value + /// + UINT32 Uint32; +} CPUCFG_REG0_INFO_DATA; + +/** + CPUCFG REG1 Information + + @code + CPUCFG_REG1_INFO_DATA + **/ +#define CPUCFG_REG1_INFO 0x1 + +/** + CPUCFG REG1 Information returned data. + #CPUCFG_REG1_INFO + **/ +typedef union { + struct { + /// + /// [Bit 1:0] Architecture: + /// 2'b00 indicates the implementation of simplified LoongAarch32; + /// 2'b01 indicates the implementation of LoongAarch32; + /// 2'b10 indicates the implementation of LoongAarch64; + /// 2'b11 reserved; + /// + UINT32 ARCH : 2; + /// + /// [Bit 2] Paging mapping mode. A value of 1 indicates the processor MMU supports + /// page mapping mode. + /// + UINT32 PGMMU : 1; + /// + /// [Bit 3] A value of 1 indicates the processor supports the IOCSR instruction. + /// + UINT32 IOCSR : 1; + /// + /// [Bit 11:4] Physical address bits. The supported physical address bits PALEN value + /// minus 1. + /// + UINT32 PALEN : 8; + /// + /// [Bit 19:12] Virtual address bits. The supported virtual address bits VALEN value + /// minus 1. + /// + UINT32 VALEN : 8; + /// + /// [Bit 20] Non-aligned Memory Access. A value of 1 indicates the processor supports + /// non-aligned memory access. + /// + UINT32 UAL : 1; + /// + /// [Bit 21] Page Read Inhibit. A value of 1 indicates the processor supports page + /// attribute of "Read Inhibit". + /// + UINT32 RI : 1; + /// + /// [Bit 22] Page Execution Protection. A value of 1 indicates the processor supports + /// page attribute of "Execution Protection". + /// + UINT32 EP : 1; + /// + /// [Bit 23] A value of 1 indicates the processor supports for page attributes of RPLV. + /// + UINT32 RPLV : 1; + /// + /// [Bit 24] Huge Page. A value of 1 indicates the processor supports page attribute + /// of huge page. + /// + UINT32 HP : 1; + /// + /// [Bit 25] A value of 1 indicates that the string of processor product information + /// is recorded at address 0 of the IOCSR access space. + /// + UINT32 IOCSR_BRD : 1; + /// + /// [Bit 26] A value of 1 indicates that the external interrupt uses the message + /// interrupt mode, otherwise it is the level interrupt line mode. + /// + UINT32 MSG_INT : 1; + /// + /// [Bit 31:27] Reserved. + /// + UINT32 Reserved : 5; + } Bits; + /// + /// All bit fields as a 32-bit value + /// + UINT32 Uint32; +} CPUCFG_REG1_INFO_DATA; + +/** + CPUCFG REG2 Information + + @code + CPUCFG_REG2_INFO_DATA + **/ +#define CPUCFG_REG2_INFO 0x2 + +/** + CPUCFG REG2 Information returned data. + #CPUCFG_REG2_INFO + **/ +typedef union { + struct { + /// + /// [Bit 0] Basic Floating-Point. A value of 1 indicates the processor supports basic + /// floating-point instructions. + /// + UINT32 FP : 1; + /// + /// [Bit 1] Sigle-Precision. A value of 1 indicates the processor supports sigle-precision + /// floating-point numbers. + /// + UINT32 FP_SP : 1; + /// + /// [Bit 2] Double-Precision. A value of 1 indicates the processor supports double-precision + /// floating-point numbers. + /// + UINT32 FP_DP : 1; + /// + /// [Bit 5:3] The version number of the floating-point arithmetic standard. 1 is the initial + /// version number, indicating that it is compatible with the IEEE 754-2008 standard. + /// + UINT32 FP_ver : 3; + /// + /// [Bit 6] 128-bit Vector Extension. A value of 1 indicates the processor supports 128-bit + /// vector extension. + /// + UINT32 LSX : 1; + /// + /// [Bit 7] 256-bit Vector Extension. A value of 1 indicates the processor supports 256-bit + /// vector extension. + /// + UINT32 LASX : 1; + /// + /// [Bit 8] Complex Vector Operation Instructions. A value of 1 indicates the processor supports + /// complex vector operation instructions. + /// + UINT32 COMPLEX : 1; + /// + /// [Bit 9] Encryption And Decryption Vector Instructions. A value of 1 indicates the processor + /// supports encryption and decryption vector instructions. + /// + UINT32 CRYPTO : 1; + /// + /// [Bit 10] Virtualization Expansion. A value of 1 indicates the processor supports + /// virtualization expansion. + /// + UINT32 LVZ : 1; + /// + /// [Bit 13:11] The version number of the virtualization hardware acceleration specification. + /// 1 is the initial version number. + /// + UINT32 LVZ_ver : 3; + /// + /// [Bit 14] Constant Frequency Counter And Timer. A value of 1 indicates the processor supports + /// constant frequency counter and timer. + /// + UINT32 LLFTP : 1; + /// + /// [Bit 17:15] Constant frequency counter and timer version number. 1 is the initial version. + /// + UINT32 LLTP_ver : 3; + /// + /// [Bit 18] X86 Binary Translation Extension. A value of 1 indicates the processor supports + /// X86 binary translation extension. + /// + UINT32 LBT_X86 : 1; + /// + /// [Bit 19] ARM Binary Translation Extension. A value of 1 indicates the processor supports + /// ARM binary translation extension. + /// + UINT32 LBT_ARM : 1; + /// + /// [Bit 20] MIPS Binary Translation Extension. A value of 1 indicates the processor supports + /// MIPS binary translation extension. + /// + UINT32 LBT_MIPS : 1; + /// + /// [Bit 21] Software Page Table Walking Instruction. A value of 1 indicates the processor + /// supports software page table walking instruction. + /// + UINT32 LSPW : 1; + /// + /// [Bit 22] Atomic Memory Access Instruction. A value of 1 indicates the processor supports + /// AM* atomic memory access instruction. + /// + UINT32 LAM : 1; + /// + /// [Bit 31:23] Reserved. + /// + UINT32 Reserved : 9; + } Bits; + /// + /// All bit fields as a 32-bit value + /// + UINT32 Uint32; +} CPUCFG_REG2_INFO_DATA; + +/** + CPUCFG REG3 Information + + @code + CPUCFG_REG3_INFO_DATA + **/ +#define CPUCFG_REG3_INFO 0x3 + +/** + CPUCFG REG3 Information returned data. + #CPUCFG_REG3_INFO + **/ +typedef union { + struct { + /// + /// [Bit 0] Hardware Cache Coherent DMA. A value of 1 indicates the processor supports + /// hardware cache coherent DMA. + /// + UINT32 CCDMA : 1; + /// + /// [Bit 1] Store Fill Buffer. A value of 1 indicates the processor supports store fill + /// buffer (SFB). + /// + UINT32 SFB : 1; + /// + /// [Bit 2] Uncache Accelerate. A value of 1 indicates the processor supports uncache + /// accelerate. + /// + UINT32 UCACC : 1; + /// + /// [Bit 3] A value of 1 indicates the processor supports LL instruction to fetch exclusive + /// block function. + /// + UINT32 LLEXC : 1; + /// + /// [Bit 4] A value of 1 indicates the processor supports random delay function after SC + /// instruction. + /// + UINT32 SCDLY : 1; + /// + /// [Bit 5] A value of 1 indicates the processor supports LL automatic with dbar function. + /// + UINT32 LLDBAR : 1; + /// + /// [Bit 6] A value of 1 indicates the processor supports the hardware maintains the + /// consistency between ITLB and TLB. + /// + UINT32 ITLBT : 1; + /// + /// [Bit 7] A value of 1 indicates the processor supports the hardware maintains the data + /// consistency between ICache and DCache in one processor core. + /// + UINT32 ICACHET : 1; + /// + /// [Bit 10:8] The maximum number of directory levels supported by the page walk instruction. + /// + UINT32 SPW_LVL : 3; + /// + /// [Bit 11] A value of 1 indicates the processor supports the page walk instruction fills + /// the TLB in half when it encounters a large page. + /// + UINT32 SPW_HP_HF : 1; + /// + /// [Bit 12] Virtual Address Range. A value of 1 indicates the processor supports the software + /// configuration can be used to shorten the virtual address range. + /// + UINT32 RVA : 1; + /// + /// [Bit 16:13] The maximum configurable virtual address is shortened by -1. + /// + UINT32 RVAMAX_1 : 4; + /// + /// [Bit 31:17] Reserved. + /// + UINT32 Reserved : 15; + } Bits; + /// + /// All bit fields as a 32-bit value + /// + UINT32 Uint32; +} CPUCFG_REG3_INFO_DATA; + +/** + CPUCFG REG4 Information + + @code + CPUCFG_REG4_INFO_DATA + **/ +#define CPUCFG_REG4_INFO 0x4 + +/** + CPUCFG REG4 Information returned data. + #CPUCFG_REG4_INFO + **/ +typedef union { + struct { + /// + /// [Bit 31:0] Constant frequency timer and the crystal frequency corresponding to the clock + /// used by the timer. + /// + UINT32 CC_FREQ : 32; + } Bits; + /// + /// All bit fields as a 32-bit value + /// + UINT32 Uint32; +} CPUCFG_REG4_INFO_DATA; + +/** + CPUCFG REG5 Information + + @code + CPUCFG_REG5_INFO_DATA + **/ +#define CPUCFG_REG5_INFO 0x5 + +/** + CPUCFG REG5 Information returned data. + #CPUCFG_REG5_INFO + **/ +typedef union { + struct { + /// + /// [Bit 15:0] Constant frequency timer and the corresponding multiplication factor of the + /// clock used by the timer. + /// + UINT32 CC_MUL : 16; + /// + /// [Bit 31:16] Constant frequency timer and the division coefficient corresponding to the + /// clock used by the timer + /// + UINT32 CC_DIV : 16; + } Bits; + /// + /// All bit fields as a 32-bit value + /// + UINT32 Uint32; +} CPUCFG_REG5_INFO_DATA; + +/** + CPUCFG REG6 Information + + @code + CPUCFG_REG6_INFO_DATA + **/ +#define CPUCFG_REG6_INFO 0x6 + +/** + CPUCFG REG6 Information returned data. + #CPUCFG_REG6_INFO + **/ +typedef union { + struct { + /// + /// [Bit 0] Performance Counter. A value of 1 indicates the processor supports performance + /// counter. + /// + UINT32 PMP : 1; + /// + /// [Bit 3:1] In the performance monitor, the architecture defines the version number of the + /// event, and 1 is the initial version + /// + UINT32 PMVER : 3; + /// + /// [Bit 7:4] Number of performance monitors minus 1. + /// + UINT32 PMNUM : 4; + /// + /// [Bit 13:8] Number of bits of a performance monitor minus 1. + /// + UINT32 PMBITS : 6; + /// + /// [Bit 14] A value of 1 indicates the processor supports reading performance counter in user mode. + /// + UINT32 UPM : 1; + /// + /// [Bit 31:15] Reserved. + /// + UINT32 Reserved : 17; + } Bits; + /// + /// All bit fields as a 32-bit value + /// + UINT32 Uint32; +} CPUCFG_REG6_INFO_DATA; + +/** + CPUCFG REG16 Information + + @code + CPUCFG_REG16_INFO_DATA + **/ +#define CPUCFG_REG16_INFO 0x10 + +/** + CPUCFG REG16 Information returned data. + #CPUCFG_REG16_INFO + **/ +typedef union { + struct { + /// + /// [Bit 0] A value of 1 indicates the processor has a first-level instruction cache + /// or a first-level unified cache + /// + UINT32 L1_IU_Present : 1; + /// + /// [Bit 1] A value of 1 indicates that the cache shown by L1 IU_Present is the + /// unified cache. + /// + UINT32 L1_IU_Unify : 1; + /// + /// [Bit 2] A value of 1 indicates the processor has a first-level data cache. + /// + UINT32 L1_D_Present : 1; + /// + /// [Bit 3] A value of 1 indicates the processor has a second-level instruction cache + /// or a second-level unified cache. + /// + UINT32 L2_IU_Present : 1; + /// + /// [Bit 4] A value of 1 indicates that the cache shown by L2 IU_Present is the + /// unified cache. + /// + UINT32 L2_IU_Unify : 1; + /// + /// [Bit 5] A value of 1 indicates that the cache shown by L2 IU_Present is private + /// to each core. + /// + UINT32 L2_IU_Private : 1; + /// + /// [Bit 6] A value of 1 indicates that the cache shown by L2 IU_Present has an inclusive + /// relationship to the lower levels (L1). + /// + UINT32 L2_IU_Inclusive : 1; + /// + /// [Bit 7] A value of 1 indicates the processor has a second-level data cache. + /// + UINT32 L2_D_Present : 1; + /// + /// [Bit 8] A value of 1 indicates that the second-level data cache is private to each core. + /// + UINT32 L2_D_Private : 1; + /// + /// [Bit 9] A value of 1 indicates that the second-level data cache has a containment + /// relationship to the lower level (L1). + /// + UINT32 L2_D_Inclusive : 1; + /// + /// [Bit 10] A value of 1 indicates the processor has a three-level instruction cache + /// or a second-level unified Cache. + /// + UINT32 L3_IU_Present : 1; + /// + /// [Bit 11] A value of 1 indicates that the cache shown by L3 IU_Present is the + /// unified cache. + /// + UINT32 L3_IU_Unify : 1; + /// + /// [Bit 12] A value of 1 indicates that the cache shown by L3 IU_Present is private + /// to each core. + /// + UINT32 L3_IU_Private : 1; + /// + /// [Bit 13] A value of 1 indicates that the cache shown by L3 IU_Present has an inclusive + /// relationship to the lower levels (L1 and L2). + /// + UINT32 L3_IU_Inclusive : 1; + /// + /// [Bit 14] A value of 1 indicates the processor has a three-level data cache. + /// + UINT32 L3_D_Present : 1; + /// + /// [Bit 15] A value of 1 indicates that the three-level data cache is private to each core. + /// + UINT32 L3_D_Private : 1; + /// + /// [Bit 16] A value of 1 indicates that the three-level data cache has a containment + /// relationship to the lower level (L1 and L2). + /// + UINT32 L3_D_Inclusive : 1; + /// + /// [Bit 31:17] Reserved. + /// + UINT32 Reserved : 15; + } Bits; + /// + /// All bit fields as a 32-bit value + /// + UINT32 Uint32; +} CPUCFG_REG16_INFO_DATA; + +/** + CPUCFG REG17, REG18, REG19 and REG20 Information + + @code + CPUCFG_CACHE_INFO_DATA + **/ +#define CPUCFG_REG17_INFO 0x11 /// L1 unified cache. +#define CPUCFG_REG18_INFO 0x12 /// L1 data cache. +#define CPUCFG_REG19_INFO 0x13 /// L2 unified cache. +#define CPUCFG_REG20_INFO 0x14 /// L3 unified cache. + +/** + CPUCFG CACHE Information returned data. + #CPUCFG_REG17_INFO + #CPUCFG_REG18_INFO + #CPUCFG_REG19_INFO + #CPUCFG_REG20_INFO + **/ +typedef union { + struct { + /// + /// [Bit 15:0] Number of channels minus 1. + /// + UINT32 Way_1 : 16; + /// + /// [Bit 23:16] Log2 (number of cache rows per channel). + /// + UINT32 Index_log2 : 8; + /// + /// [Bit 30:24] Log2 (cache row bytes). + /// + UINT32 Linesize_log2 : 7; + /// + /// [Bit 31] Reserved. + /// + UINT32 Reserved : 1; + } Bits; + /// + /// All bit fields as a 32-bit value + /// + UINT32 Uint32; +} CPUCFG_CACHE_INFO_DATA; +#endif diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/BaseLib.inf index a18fe5efb4..a427aa9359 100644 --- a/MdePkg/Library/BaseLib/BaseLib.inf +++ b/MdePkg/Library/BaseLib/BaseLib.inf @@ -420,6 +420,7 @@ LoongArch64/SetJumpLongJump.S | GCC LoongArch64/SwitchStack.S | GCC LoongArch64/ExceptionBase.S | GCC + LoongArch64/Cpucfg.S | GCC [Packages] MdePkg/MdePkg.dec diff --git a/MdePkg/Library/BaseLib/LoongArch64/Cpucfg.S b/MdePkg/Library/BaseLib/LoongArch64/Cpucfg.S new file mode 100644 index 0000000000..7ed49146b4 --- /dev/null +++ b/MdePkg/Library/BaseLib/LoongArch64/Cpucfg.S @@ -0,0 +1,26 @@ +#------------------------------------------------------------------------------ +# +# AsmCpucfg for LoongArch +# +# Copyright (c) 2023, Loongson Technology Corporation Limited. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#------------------------------------------------------------------------------ + +ASM_GLOBAL ASM_PFX(AsmCpucfg) + +#/** +# Read CPUCFG register. +# +# @param a0 Specifies the register number of the CPUCFG to read the data. +# @param a1 Pointer to the variable used to store the CPUCFG register value. +# +#**/ + +ASM_PFX(AsmCpucfg): + cpucfg $t0, $a0 + stptr.d $t0, $a1, 0 + + jirl $zero, $ra, 0 + .end diff --git a/MdePkg/MdePkg.ci.yaml b/MdePkg/MdePkg.ci.yaml index 1d3d8327b1..f2d81af080 100644 --- a/MdePkg/MdePkg.ci.yaml +++ b/MdePkg/MdePkg.ci.yaml @@ -80,7 +80,8 @@ "Include/Register/Amd/SmramSaveStateMap.h", "Test/UnitTest/Library/DevicePathLib/TestDevicePathLib.c", "Test/UnitTest/Library/DevicePathLib/TestDevicePathLib.h", - "Test/UnitTest/Library/DevicePathLib/TestDevicePathStringConversions.c" + "Test/UnitTest/Library/DevicePathLib/TestDevicePathStringConversions.c", + "Include/Register/LoongArch64/Cpucfg.h" ] }, ## options defined ci/Plugin/CompilerPlugin -- 2.27.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110709): https://edk2.groups.io/g/devel/message/110709 Mute This Topic: https://groups.io/mt/102413851/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-