From mboxrd@z Thu Jan  1 00:00:00 1970
Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35])
 by mx.groups.io with SMTP id smtpd.web10.13463.1589549996470176044
 for <devel@edk2.groups.io>;
 Fri, 15 May 2020 06:39:56 -0700
Authentication-Results: mx.groups.io;
 dkim=missing; spf=pass (domain: hpe.com, ip: 148.163.143.35, mailfrom: prvs=04045502dd=daniel.schaefer@hpe.com)
Received: from pps.filterd (m0134425.ppops.net [127.0.0.1])
	by mx0b-002e3701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 04FDYhKm012228;
	Fri, 15 May 2020 13:39:55 GMT
Received: from g9t5009.houston.hpe.com (g9t5009.houston.hpe.com [15.241.48.73])
	by mx0b-002e3701.pphosted.com with ESMTP id 311n2cbfrp-1
	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
	Fri, 15 May 2020 13:39:55 +0000
Received: from G4W9119.americas.hpqcorp.net (exchangepmrr1.us.hpecorp.net [16.210.20.214])
	(using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
	(No client certificate requested)
	by g9t5009.houston.hpe.com (Postfix) with ESMTPS id 4FA4655;
	Fri, 15 May 2020 13:39:55 +0000 (UTC)
Received: from G9W8454.americas.hpqcorp.net (2002:10d8:a104::10d8:a104) by
 G4W9119.americas.hpqcorp.net (2002:10d2:14d6::10d2:14d6) with Microsoft SMTP
 Server (TLS) id 15.0.1497.2; Fri, 15 May 2020 13:39:55 +0000
Received: from NAM11-DM6-obe.outbound.protection.outlook.com (15.241.52.13) by
 G9W8454.americas.hpqcorp.net (16.216.161.4) with Microsoft SMTP Server (TLS)
 id 15.0.1497.2 via Frontend Transport; Fri, 15 May 2020 13:39:55 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=BLFWQugqAgGDvfV2k5f87eX3V2uMADiI4N37kiO72FAiEdCy+XIHO+voVEa2qM5KZKEq6yXi5UfXhZdVgHx83fbepXu0WHR9vw+bJaf5xRpS2BJIaOAwJ5K4rrZ5poZEuV1vRrVldlcKzKBcFO8jVO6CL1qbxnwkB9tmYzWGKNzN62KsmPnYTlCkU6iiqaB/F9Q+tYMIQUUvGNeO8/TDbZEOES6W5Whfoc380CTXvYR4qsy1r+x2Vd31WGww8ywNdsMukc80Py4p9tE5Un+fc8BJInoQ0aI5kQLIyGPlGag13IPPHWjVd+M1t3I2j4SiXM1wI4GV3hTH1D0qn9AEJg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=t4TeikhiQX8MinBv6Phrc/+I/xX8Oqh9ndk3vjdVGws=;
 b=XpfRUFuO1J9MMb08Jgb4oG2OiCdMv8wYT5V8dTvI5iADKxakE6/TCmz85qc7euMZCVwqYSxKN5ycEhv1xC7PeO08PwxlKG+yh0mJcQQN30LlCnyp4zUS9LndS3VpH4ZfcKV/n1VGzMG925x5H5QK8JahbcyPK5H8U2j0ds0uMHXZuzMGQ0KhpyM62bXGWiJZwpQbWoIj5dPH3uIEnkJA80C0O5yLNeD/wp1UPZdeZk5x2d2g+TFiupp/bZp2EA4r/ih2z5x/ZoGcQQE9ED1zw4JbUfoGmXbddosOxGT2s+1vL1lqFSlON4DOLfpiU8dl4wUWSVxIsv2q3jJG486Qxw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass
 header.d=hpe.com; arc=none
Authentication-Results: edk2.groups.io; dkim=none (message not signed)
 header.d=none;edk2.groups.io; dmarc=none action=none header.from=hpe.com;
Received: from CS1PR8401MB0726.NAMPRD84.PROD.OUTLOOK.COM
 (2a01:111:e400:750c::23) by CS1PR8401MB0726.NAMPRD84.PROD.OUTLOOK.COM
 (2a01:111:e400:750c::23) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.20; Fri, 15 May
 2020 13:39:54 +0000
Received: from CS1PR8401MB0726.NAMPRD84.PROD.OUTLOOK.COM
 ([fe80::6d01:dcc0:65e:ef77]) by CS1PR8401MB0726.NAMPRD84.PROD.OUTLOOK.COM
 ([fe80::6d01:dcc0:65e:ef77%7]) with mapi id 15.20.3000.022; Fri, 15 May 2020
 13:39:54 +0000
From: "Daniel Schaefer" <daniel.schaefer@hpe.com>
To: <devel@edk2.groups.io>
CC: Gilbert Chen <gilbert.chen@hpe.com>,
        Leif Lindholm
	<leif.lindholm@linaro.org>,
        Abner Chang <abner.chang@hpe.com>,
        Michael D
 Kinney <michael.k.kinney@intel.com>,
        Leif Lindholm <leif@nuviainc.com>
Subject: [PATCH v2 2/3] ProcessorPkg/Library: Add RiscVOpensbiLib
Date: Fri, 15 May 2020 15:39:36 +0200
Message-ID: <20200515133937.29909-3-daniel.schaefer@hpe.com>
X-Mailer: git-send-email 2.26.1
In-Reply-To: <20200515133937.29909-1-daniel.schaefer@hpe.com>
References: <20200515133937.29909-1-daniel.schaefer@hpe.com>
X-ClientProxiedBy: AM0P190CA0007.EURP190.PROD.OUTLOOK.COM
 (2603:10a6:208:190::17) To CS1PR8401MB0726.NAMPRD84.PROD.OUTLOOK.COM
 (2a01:111:e400:750c::23)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
Received: from x360-nix.fritz.box (93.215.201.203) by AM0P190CA0007.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.20 via Frontend Transport; Fri, 15 May 2020 13:39:52 +0000
X-Mailer: git-send-email 2.26.1
X-Originating-IP: [93.215.201.203]
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-HT: Tenant
X-MS-Office365-Filtering-Correlation-Id: 40f2c80e-b22f-422f-c117-08d7f8d572fd
X-MS-TrafficTypeDiagnostic: CS1PR8401MB0726:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <CS1PR8401MB0726755751FCEAD0170C45EAE0BD0@CS1PR8401MB0726.NAMPRD84.PROD.OUTLOOK.COM>
X-MS-Oob-TLC-OOBClassifiers: OLM:3826;
X-Forefront-PRVS: 04041A2886
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: dSs/gCZS+ijULREUHvZsgTCBW/Q3TZIk1Wg931MapC19HhwdCbSWgK1WTNh/xc6W05l+CR2bUXdlzyA7rlVB1JoFpak5YY0jiQIRQwc33PMFLOkU3KqOXfE3K1KHTjbfFeoLycymQ0JgUKAynVpZl7knIPL1Yi21aPSUwaH9BJ1yQ0RSWtwz7cgfu8wLHsyn/TNu+2JPR3k6vVzfyZZt+JrdUrWzR0Sx/j2ud90blYypCog5hMn00V9p/XRvb/yONWRBvj7b7pJPOtZy4WnC2KC27lv5XO/a7dwjMEzEKuL3GzxQH/8ZBjXV9G56QfI5DMvHm1BwQI2TOCKCqhWISg+cAdi5a4K1LarQ+tfDr9B28gqoeaEiyFvqmNOXXfsZottSvvPtfo42uh4XuEvZ2GAypiLn9Txpzjxua35Q0CFLrr44YVOX3b818VJuKe81CJqoKed79uL/KWM9tkLUSxayutMQ4QgRt9U1pt9/SaaRbOsPTsgReqadqcr2RGkI
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CS1PR8401MB0726.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFTY:;SFS:(376002)(396003)(346002)(366004)(39860400002)(136003)(5660300002)(2906002)(6666004)(478600001)(54906003)(316002)(1076003)(6916009)(956004)(36756003)(6506007)(6486002)(52116002)(16526019)(86362001)(26005)(2616005)(186003)(6512007)(8936002)(4326008)(66556008)(66946007)(44832011)(8676002)(66476007)(145603002);DIR:OUT;SFP:1102;
X-MS-Exchange-AntiSpam-MessageData: 7jca1d8Yvy9oeFWeYiML7JQW54y0kp/ky1rXqlGA1Dsd3Wx3R9sXu28ld/umk3zbbJjYpp3nB5Ag70gn5uSKXy4V4zYuLFOsKhq4e6As/kjasEtBgmjlSjz9gueAEOmOcRXLkRY8MfowxyKQW5/ugWYZtgpTl+KehxH7hfueOumipC+29cT5Y4dEImCZHHVtD4CyqiENJpZcm1tv8dzadqmHk7XiWaal2CKZMMBOG6YiVkE+2Rn6U25AED5OcADf8cG+8xpx4FTR9FblXNGhoXx1q0zHFq3RHQer2CLWAZY4Lw5lA4U6HcDz3H1AMRTi6ix0d/kFCO2t0+wCwn+uM/MapRPztrWEZmJuDXr4fGIcBPlii7AgySyQNuVAiAK2IcdMoTGWb7UWUYjorldpo9AfWXol0/xuzogXkKiZDlF2N99uE600TWyV+F++2abWJHJoM37Qq3SGG4dWphMPGw/fgWEvVJlVzYwm6zLTQcw8nLIdnhPelYk3XsTog1KU
X-MS-Exchange-CrossTenant-Network-Message-Id: 40f2c80e-b22f-422f-c117-08d7f8d572fd
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2020 13:39:53.9138
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 105b2061-b669-4b31-92ac-24d304d195dc
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: VqF5PuVvHvIX1eK9GG3etnDWiMCpKdhYIx2J+I8d8BLOdLp+MCdlN5CpvWxK86omS+dcjqiPFPP1u6wS0JgIqQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0726
X-OriginatorOrg: hpe.com
X-HPE-SCL: -1
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216,18.0.676
 definitions=2020-05-15_05:2020-05-15,2020-05-15 signatures=0
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0
 lowpriorityscore=0 mlxlogscore=999 mlxscore=0 adultscore=0
 priorityscore=1501 spamscore=0 clxscore=1011 suspectscore=4 bulkscore=0
 malwarescore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx
 scancount=1 engine=8.12.0-2004280000 definitions=main-2005150117
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain

From: Abner Chang <abner.chang@hpe.com>

EDK2 RISC-V OpenSBI library which pull in external source files under
RISC-V/ProcessorPkg/Library/RiscVOpensbiLib/opensbi to the build process.

Signed-off-by: Abner Chang <abner.chang@hpe.com>
Co-authored-by: Daniel Schaefer <daniel.schaefer@hpe.com>
Co-authored-by: Gilbert Chen <gilbert.chen@hpe.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

Cc: Abner Chang <abner.chang@hpe.com>
Cc: Gilbert Chen <gilbert.chen@hpe.com>
Cc: Michael D Kinney <michael.k.kinney@intel.com>
Cc: Leif Lindholm <leif@nuviainc.com>
---
 Silicon/RISC-V/ProcessorPkg/Library/RiscVOpensbiLib/RiscVOpensbiLib.inf | =
60 +++++++++++++++
 Silicon/RISC-V/ProcessorPkg/Include/IndustryStandard/RiscVOpensbi.h     | =
79 ++++++++++++++++++++
 Silicon/RISC-V/ProcessorPkg/Include/OpensbiTypes.h                      | =
73 ++++++++++++++++++
 3 files changed, 212 insertions(+)

diff --git a/Silicon/RISC-V/ProcessorPkg/Library/RiscVOpensbiLib/RiscVOpens=
biLib.inf b/Silicon/RISC-V/ProcessorPkg/Library/RiscVOpensbiLib/RiscVOpensb=
iLib.inf
new file mode 100644
index 000000000000..59dbd67d8e03
--- /dev/null
+++ b/Silicon/RISC-V/ProcessorPkg/Library/RiscVOpensbiLib/RiscVOpensbiLib.i=
nf
@@ -0,0 +1,60 @@
+## @file=0D
+# RISC-V Opensbi Library Instance.=0D
+#=0D
+#  Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All righ=
ts reserved.<BR>=0D
+#=0D
+#  SPDX-License-Identifier: BSD-2-Clause-Patent=0D
+#=0D
+##=0D
+=0D
+[Defines]=0D
+  INF_VERSION    =3D 0x0001001b=0D
+  BASE_NAME      =3D RiscVOpensbiLib=0D
+  FILE_GUID      =3D 6EF0C812-66F6-11E9-93CE-3F5D5F0DF0A7=0D
+  MODULE_TYPE    =3D BASE=0D
+  VERSION_STRING =3D 1.0=0D
+  LIBRARY_CLASS  =3D RiscVOpensbiLib=0D
+=0D
+[Sources]=0D
+  opensbi/lib/sbi/riscv_asm.c=0D
+  opensbi/lib/sbi/riscv_atomic.c=0D
+  opensbi/lib/sbi/riscv_hardfp.S=0D
+  opensbi/lib/sbi/riscv_locks.c=0D
+  opensbi/lib/sbi/sbi_console.c=0D
+  opensbi/lib/sbi/sbi_ecall.c=0D
+  opensbi/lib/sbi/sbi_ecall_vendor.c=0D
+  opensbi/lib/sbi/sbi_ecall_replace.c=0D
+  opensbi/lib/sbi/sbi_ecall_legacy.c=0D
+  opensbi/lib/sbi/sbi_ecall_base.c=0D
+  opensbi/lib/sbi/sbi_emulate_csr.c=0D
+  opensbi/lib/sbi/sbi_fifo.c=0D
+  opensbi/lib/sbi/sbi_hart.c=0D
+  opensbi/lib/sbi/sbi_hfence.S=0D
+  opensbi/lib/sbi/sbi_illegal_insn.c=0D
+  opensbi/lib/sbi/sbi_init.c=0D
+  opensbi/lib/sbi/sbi_ipi.c=0D
+  opensbi/lib/sbi/sbi_misaligned_ldst.c=0D
+  opensbi/lib/sbi/sbi_scratch.c=0D
+  opensbi/lib/sbi/sbi_string.c=0D
+  opensbi/lib/sbi/sbi_system.c=0D
+  opensbi/lib/sbi/sbi_timer.c=0D
+  opensbi/lib/sbi/sbi_tlb.c=0D
+  opensbi/lib/sbi/sbi_trap.c=0D
+  opensbi/lib/sbi/sbi_unpriv.c=0D
+  opensbi/lib/utils/sys/clint.c=0D
+  opensbi/lib/utils/irqchip/plic.c=0D
+  opensbi/lib/utils/serial/sifive-uart.c=0D
+  opensbi/lib/utils/serial/uart8250.c=0D
+=0D
+[Packages]=0D
+  EmbeddedPkg/EmbeddedPkg.dec   # For libfdt.=0D
+  MdePkg/MdePkg.dec=0D
+  Silicon/RISC-V/ProcessorPkg/RiscVProcessorPkg.dec=0D
+=0D
+[LibraryClasses]=0D
+  BaseLib=0D
+  PcdLib=0D
+  RiscVCpuLib=0D
+=0D
+=0D
+=0D
diff --git a/Silicon/RISC-V/ProcessorPkg/Include/IndustryStandard/RiscVOpen=
sbi.h b/Silicon/RISC-V/ProcessorPkg/Include/IndustryStandard/RiscVOpensbi.h
new file mode 100644
index 000000000000..c5c0bd6d9b01
--- /dev/null
+++ b/Silicon/RISC-V/ProcessorPkg/Include/IndustryStandard/RiscVOpensbi.h
@@ -0,0 +1,79 @@
+/** @file=0D
+  SBI inline function calls.=0D
+=0D
+  Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All right=
s reserved.<BR>=0D
+=0D
+  SPDX-License-Identifier: BSD-2-Clause-Patent=0D
+=0D
+**/=0D
+=0D
+#ifndef EDK2_SBI_H_=0D
+#define EDK2_SBI_H_=0D
+=0D
+#include <include/sbi/riscv_asm.h> // Reference to header file in opensbi=
=0D
+#include <RiscVImpl.h>=0D
+#include <sbi/sbi_types.h>  // Reference to header file wrapper=0D
+=0D
+#define SBI_SUCCESS                    0=0D
+#define SBI_ERR_FAILED                -1=0D
+#define SBI_ERR_NOT_SUPPORTED         -2=0D
+#define SBI_ERR_INVALID_PARAM         -3=0D
+#define SBI_ERR_DENIED                -4=0D
+#define SBI_ERR_INVALID_ADDRESS       -5=0D
+#define SBI_ERR_ALREADY_AVAILABLE     -6=0D
+=0D
+#define SBI_BASE_EXT                   0x10=0D
+#define SBI_HSM_EXT                    0x48534D=0D
+#define SBI_TIME_EXT                   0x54494D45=0D
+#define SBI_IPI_EXT                    0x735049=0D
+#define SBI_RFNC_EXT                   0x52464E43=0D
+=0D
+//=0D
+// Below two definitions should be defined in OpenSBI.=0D
+//=0D
+#define SBI_EXT_FIRMWARE_CODE_BASE_START 0x0A000000=0D
+#define SBI_EXT_FIRMWARE_CODE_BASE_END   0x0AFFFFFF=0D
+=0D
+#define SBI_GET_SPEC_VERSION_FUNC      0=0D
+#define SBI_GET_IMPL_ID_FUNC           1=0D
+#define SBI_GET_IMPL_VERSION_FUNC      2=0D
+#define SBI_PROBE_EXTENSION_FUNC       3=0D
+#define SBI_GET_MVENDORID_FUNC         4=0D
+#define SBI_GET_MARCHID_FUNC           5=0D
+#define SBI_GET_MIMPID_FUNC            6=0D
+=0D
+#define SBI_HART_START_FUNC            0=0D
+#define SBI_HART_STOP_FUNC             1=0D
+#define SBI_HART_GET_STATUS_FUNC       2=0D
+=0D
+#define RISC_V_MAX_HART_SUPPORTED 16=0D
+=0D
+typedef=0D
+VOID=0D
+(EFIAPI *RISCV_HART_SWITCH_MODE)(=0D
+  IN  UINTN   FuncArg0,=0D
+  IN  UINTN   FuncArg1,=0D
+  IN  UINTN   NextAddr,=0D
+  IN  UINTN   NextMode,=0D
+  IN  BOOLEAN NextVirt=0D
+  );=0D
+=0D
+//=0D
+// Keep the structure member in 64-bit alignment.=0D
+//=0D
+typedef struct {=0D
+    UINT64                 IsaExtensionSupported;  // The ISA extension th=
is core supported.=0D
+    RISCV_UINT128          MachineVendorId;        // Machine vendor ID=0D
+    RISCV_UINT128          MachineArchId;          // Machine Architecture=
 ID=0D
+    RISCV_UINT128          MachineImplId;          // Machine Implementati=
on ID=0D
+    RISCV_HART_SWITCH_MODE HartSwitchMode;         // OpenSBI's function t=
o switch the mode of a hart=0D
+} EFI_RISCV_FIRMWARE_CONTEXT_HART_SPECIFIC;=0D
+#define FIRMWARE_CONTEXT_HART_SPECIFIC_SIZE  (64 * 8) // This is the size =
of EFI_RISCV_FIRMWARE_CONTEXT_HART_SPECIFIC=0D
+                                                      // structure. Referr=
ed by both C code and assembly code.=0D
+=0D
+typedef struct {=0D
+  VOID            *PeiServiceTable;       // PEI Service table=0D
+  EFI_RISCV_FIRMWARE_CONTEXT_HART_SPECIFIC  *HartSpecific[RISC_V_MAX_HART_=
SUPPORTED];=0D
+} EFI_RISCV_OPENSBI_FIRMWARE_CONTEXT;=0D
+=0D
+#endif=0D
diff --git a/Silicon/RISC-V/ProcessorPkg/Include/OpensbiTypes.h b/Silicon/R=
ISC-V/ProcessorPkg/Include/OpensbiTypes.h
new file mode 100644
index 000000000000..5f3278e8461f
--- /dev/null
+++ b/Silicon/RISC-V/ProcessorPkg/Include/OpensbiTypes.h
@@ -0,0 +1,73 @@
+/** @file=0D
+  RISC-V OpesbSBI header file reference.=0D
+=0D
+  Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All right=
s reserved.<BR>=0D
+=0D
+  SPDX-License-Identifier: BSD-2-Clause-Patent=0D
+=0D
+**/=0D
+#ifndef EDK2_SBI_TYPES_H_=0D
+#define EDK2_SBI_TYPES_H_=0D
+=0D
+#include <Base.h>=0D
+=0D
+typedef INT8    s8;=0D
+typedef UINT8   u8;=0D
+typedef UINT8   uint8_t;=0D
+=0D
+typedef INT16   s16;=0D
+typedef UINT16  u16;=0D
+typedef INT16   int16_t;=0D
+typedef UINT16  uint16_t;=0D
+=0D
+typedef INT32   s32;=0D
+typedef UINT32  u32;=0D
+typedef INT32   int32_t;=0D
+typedef UINT32  uint32_t;=0D
+=0D
+typedef INT64   s64;=0D
+typedef UINT64  u64;=0D
+typedef INT64   int64_t;=0D
+typedef UINT64  uint64_t;=0D
+=0D
+#define PRILX   "016lx"=0D
+=0D
+typedef BOOLEAN  bool;=0D
+typedef unsigned long   ulong;=0D
+typedef UINT64   uintptr_t;=0D
+typedef UINT64   size_t;=0D
+typedef INT64    ssize_t;=0D
+typedef UINT64   virtual_addr_t;=0D
+typedef UINT64   virtual_size_t;=0D
+typedef UINT64   physical_addr_t;=0D
+typedef UINT64   physical_size_t;=0D
+=0D
+#define __packed        __attribute__((packed))=0D
+#define __noreturn      __attribute__((noreturn))=0D
+=0D
+#if defined(__GNUC__) || defined(__clang__)=0D
+  #define likely(x) __builtin_expect((x), 1)=0D
+  #define unlikely(x) __builtin_expect((x), 0)=0D
+#else=0D
+  #define likely(x) (x)=0D
+  #define unlikely(x) (x)=0D
+#endif=0D
+=0D
+#undef offsetof=0D
+#ifdef __compiler_offsetof=0D
+#define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE,MEMBER)=0D
+#else=0D
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)=0D
+#endif=0D
+=0D
+#define container_of(ptr, type, member) ({            \=0D
+  const typeof(((type *)0)->member) * __mptr =3D (ptr); \=0D
+  (type *)((char *)__mptr - offsetof(type, member)); })=0D
+=0D
+#define CLAMP(a, lo, hi) MIN(MAX(a, lo), hi)=0D
+#define ROUNDUP(a, b) ((((a)-1) / (b) + 1) * (b))=0D
+#define ROUNDDOWN(a, b) ((a) / (b) * (b))=0D
+=0D
+/* clang-format on */=0D
+=0D
+#endif=0D
--=20
2.26.1