From nobody Tue Feb 10 20:47:50 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+83063+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+83063+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1635804742; cv=none; d=zohomail.com; s=zohoarc; b=X9V2myuIIOIvoYpBQtL0oPJfQZgLuV636YevnYEPUq3oAM3S+XgkTmCMa7KZLBiQZrKQxSM3eZeTFqqXvyxDPSwmcfoproVXsWhqTkpYJeibL+/02H4R7YAsJW8sbhSCQG3+hkSqhvFRLcntr6C/A3S+3ohxdApueyFlW8cBwaA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1635804742; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=h+Q64Ea5h/dRYDb/3+yBdZh/EgN0ym8BzrrodY8v/us=; b=efd+Y77obOjSNlxQ1NTpBy8hWmQjhENF96yye1cjGbK/v3O2o7wcnypgYcHebsijvWqb5uPeYJJ38se4L9clNONFrCedhoUZnAqze/trb5EwTMnc0CdVD7Dk0AybQxMo5TE6VyKZ+FKxIA3XRafoUVQA3ky2sfdxVK0mx3LgCsI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+83063+1787277+3901457@groups.io Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1635804742532820.5333239986558; Mon, 1 Nov 2021 15:12:22 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id zbdVYY1788612xBrMW3LLg74; Mon, 01 Nov 2021 15:12:22 -0700 X-Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) by mx.groups.io with SMTP id smtpd.web11.1420.1635804741480970708 for ; Mon, 01 Nov 2021 15:12:21 -0700 X-Received: by mail-pg1-f173.google.com with SMTP id 75so18425495pga.3 for ; Mon, 01 Nov 2021 15:12:21 -0700 (PDT) X-Gm-Message-State: Dh2tjrXbGobOJJMeKBA6d8JRx1787277AA= X-Google-Smtp-Source: ABdhPJwY0w85iQSt0ODVMYfTpWgvhIxgYll6qsdgq8qTNB2h6VZD3xJcS0nxr94zUXZLHXN9JTGftQ== X-Received: by 2002:a05:6a00:1593:b0:481:1ffa:8c4a with SMTP id u19-20020a056a00159300b004811ffa8c4amr2516461pfk.80.1635804739623; Mon, 01 Nov 2021 15:12:19 -0700 (PDT) X-Received: from linbox.ba.nuviainc.com (c-174-52-16-57.hsd1.ut.comcast.net. [174.52.16.57]) by smtp.gmail.com with ESMTPSA id z10sm17028455pfh.106.2021.11.01.15.12.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Nov 2021 15:12:19 -0700 (PDT) From: "Rebecca Cran" To: devel@edk2.groups.io, Sami Mujawar , Ard Biesheuvel , Gerd Hoffmann , Samer El-Haj-Mahmoud , Leif Lindholm Cc: Rebecca Cran Subject: [edk2-devel] [PATCH v2 1/2] ArmPkg: Add SMC helper functions Date: Mon, 1 Nov 2021 16:11:52 -0600 Message-Id: <20211101221153.18620-2-rebecca@nuviainc.com> In-Reply-To: <20211101221153.18620-1-rebecca@nuviainc.com> References: <20211101221153.18620-1-rebecca@nuviainc.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: 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,rebecca@nuviainc.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1635804742; bh=4e1Xv0B3cPDrnPRR3T1p/0g4itJp5QLCrrcJ0E7fm7o=; h=Cc:Date:From:Reply-To:Subject:To; b=B0SjgAfwlCbk9gAzvfrm5WDujXpQTjtTuY3OhH1KxI2rtxwT3avuZJWVMr5nFPhxYPZ Cy+mCTSZZTtnr8o/e6Yp9HhmDXy4hc/5WtQkXe6JT8uL77x+oppIZX1wyh0DwWRcFlmzj 7nEZZG8WdQPVRGLGPc3cwExIIfNfUrDQBM4= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1635804743189100001 Content-Type: text/plain; charset="utf-8" Add functions ArmCallSmc0/1/2/3 to do SMC calls with 0, 1, 2 or 3 arguments. The functions return up to 3 values. Signed-off-by: Rebecca Cran Acked-by: Ard Biesheuvel Reviewed-by: Sami Mujawar --- ArmPkg/Include/Library/ArmSmcLib.h | 73 ++++++++++++ ArmPkg/Library/ArmSmcLib/ArmSmc.c | 122 ++++++++++++++++++++ ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf | 3 + ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.c | 85 ++++++++++++++ 4 files changed, 283 insertions(+) diff --git a/ArmPkg/Include/Library/ArmSmcLib.h b/ArmPkg/Include/Library/Ar= mSmcLib.h index ced60b3c1147..343ae7f40ad2 100644 --- a/ArmPkg/Include/Library/ArmSmcLib.h +++ b/ArmPkg/Include/Library/ArmSmcLib.h @@ -1,5 +1,6 @@ /** @file * +* Copyright (c) 2021, NUVIA Inc. All rights reserved.
* Copyright (c) 2012-2014, ARM Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent @@ -37,4 +38,76 @@ ArmCallSmc ( IN OUT ARM_SMC_ARGS *Args ); =20 +/** Trigger an SMC call with 3 arguments. + + @param Function The SMC function. + @param Arg1 Argument/result. + @param Arg2 Argument/result. + @param Arg3 Argument/result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc3 ( + IN UINTN Function, + IN OUT UINTN *Arg1, + IN OUT UINTN *Arg2, + IN OUT UINTN *Arg3 + ); + +/** Trigger an SMC call with 2 arguments. + + @param Function The SMC function. + @param Arg1 Argument/result. + @param Arg2 Argument/result. + @param Arg3 Result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc2 ( + IN UINTN Function, + IN OUT UINTN *Arg1, + IN OUT UINTN *Arg2, + OUT UINTN *Arg3 + ); + +/** Trigger an SMC call with 1 argument. + + @param Function The SMC function. + @param Arg1 Argument/result. + @param Arg2 Result. + @param Arg3 Result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc1 ( + IN UINTN Function, + IN OUT UINTN *Arg1, + OUT UINTN *Arg2, + OUT UINTN *Arg3 + ); + +/** Trigger an SMC call with 0 arguments. + + @param Function The SMC function. + @param Arg1 Result. + @param Arg2 Result. + @param Arg3 Result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc0 ( + IN UINTN Function, + OUT UINTN *Arg1, + OUT UINTN *Arg2, + OUT UINTN *Arg3 + ); + #endif // ARM_SMC_LIB_H_ diff --git a/ArmPkg/Library/ArmSmcLib/ArmSmc.c b/ArmPkg/Library/ArmSmcLib/A= rmSmc.c new file mode 100644 index 000000000000..d596003a857e --- /dev/null +++ b/ArmPkg/Library/ArmSmcLib/ArmSmc.c @@ -0,0 +1,122 @@ +/** @file + SMC helper functions. + + Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +/** Triggers an SMC call with 3 arguments. + + @param Function The SMC function. + @param Arg1 Argument/result. + @param Arg2 Argument/result. + @param Arg3 Argument/result. + + @return The SMC error code. +**/ +UINTN +ArmCallSmc3 ( + IN UINTN Function, + IN OUT UINTN *Arg1, + IN OUT UINTN *Arg2, + IN OUT UINTN *Arg3 + ) +{ + ARM_SMC_ARGS Args; + UINTN ErrorCode; + + Args.Arg0 =3D Function; + + if (Arg1 !=3D NULL) { + Args.Arg1 =3D *Arg1; + } + if (Arg2 !=3D NULL) { + Args.Arg2 =3D *Arg2; + } + if (Arg3 !=3D NULL) { + Args.Arg3 =3D *Arg3; + } + + ArmCallSmc (&Args); + + ErrorCode =3D Args.Arg0; + + if (Arg1 !=3D NULL) { + *Arg1 =3D Args.Arg1; + } + if (Arg2 !=3D NULL) { + *Arg2 =3D Args.Arg2; + } + if (Arg3 !=3D NULL) { + *Arg3 =3D Args.Arg3; + } + + return ErrorCode; +} + +/** Trigger an SMC call with 2 arguments. + + @param Function The SMC function. + @param Arg1 Argument/result. + @param Arg2 Argument/result. + @param Arg3 Result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc2 ( + IN UINTN Function, + IN OUT UINTN *Arg1, + IN OUT UINTN *Arg2, + OUT UINTN *Arg3 + ) +{ + return ArmCallSmc3 (Function, Arg1, Arg2, Arg3); +} + +/** Trigger an SMC call with 1 argument. + + @param Function The SMC function. + @param Arg1 Argument/result. + @param Arg2 Result. + @param Arg3 Result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc1 ( + IN UINTN Function, + IN OUT UINTN *Arg1, + OUT UINTN *Arg2, + OUT UINTN *Arg3 + ) +{ + return ArmCallSmc3 (Function, Arg1, Arg2, Arg3); +} + +/** Trigger an SMC call with 0 arguments. + + @param Function The SMC function. + @param Arg1 Result. + @param Arg2 Result. + @param Arg3 Result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc0 ( + IN UINTN Function, + OUT UINTN *Arg1, + OUT UINTN *Arg2, + OUT UINTN *Arg3 + ) +{ + return ArmCallSmc3 (Function, Arg1, Arg2, Arg3); +} diff --git a/ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf b/ArmPkg/Library/ArmSmc= Lib/ArmSmcLib.inf index 4f4b09f4528a..a89f9203fb7e 100644 --- a/ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf +++ b/ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf @@ -20,6 +20,9 @@ [Sources.AARCH64] AArch64/ArmSmc.S =20 +[Sources] + ArmSmc.c + [Packages] MdePkg/MdePkg.dec ArmPkg/ArmPkg.dec diff --git a/ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.c b/ArmPkg/Library/= ArmSmcLibNull/ArmSmcLibNull.c index 2d79aadaf1fa..ca1b8830a119 100644 --- a/ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.c +++ b/ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.c @@ -1,4 +1,5 @@ // +// Copyright (c) 2021, NUVIA Inc. All rights reserved. // Copyright (c) 2016, Linaro Limited. All rights reserved. // // SPDX-License-Identifier: BSD-2-Clause-Patent @@ -7,6 +8,7 @@ =20 #include #include +#include =20 VOID ArmCallSmc ( @@ -14,3 +16,86 @@ ArmCallSmc ( ) { } + +/** Triggers an SMC call with 3 arguments. + + @param Function The SMC function. + @param Arg1 Argument/result. + @param Arg2 Argument/result. + @param Arg3 Argument/result. + + @return The SMC error code. +**/ +UINTN +ArmCallSmc3 ( + IN UINTN Function, + IN OUT UINTN *Arg1, + IN OUT UINTN *Arg2, + IN OUT UINTN *Arg3 + ) +{ + return SMC_ARCH_CALL_NOT_SUPPORTED; +} + +/** Trigger an SMC call with 2 arguments. + + @param Function The SMC function. + @param Arg1 Argument/result. + @param Arg2 Argument/result. + @param Arg3 Result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc2 ( + IN UINTN Function, + IN OUT UINTN *Arg1, + IN OUT UINTN *Arg2, + OUT UINTN *Arg3 + ) +{ + return SMC_ARCH_CALL_NOT_SUPPORTED; +} + +/** Trigger an SMC call with 1 argument. + + @param Function The SMC function. + @param Arg1 Argument/result. + @param Arg2 Result. + @param Arg3 Result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc1 ( + IN UINTN Function, + IN OUT UINTN *Arg1, + OUT UINTN *Arg2, + OUT UINTN *Arg3 + ) +{ + return SMC_ARCH_CALL_NOT_SUPPORTED; +} + +/** Trigger an SMC call with 0 arguments. + + @param Function The SMC function. + @param Arg1 Result. + @param Arg2 Result. + @param Arg3 Result. + + @return The SMC error code. + +**/ +UINTN +ArmCallSmc0 ( + IN UINTN Function, + OUT UINTN *Arg1, + OUT UINTN *Arg2, + OUT UINTN *Arg3 + ) +{ + return SMC_ARCH_CALL_NOT_SUPPORTED; +} --=20 2.31.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#83063): https://edk2.groups.io/g/devel/message/83063 Mute This Topic: https://groups.io/mt/86753694/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-