From nobody Tue Feb 10 03:56:01 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+84752+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+84752+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1639420272; cv=none; d=zohomail.com; s=zohoarc; b=KlYtB0Gi72WPMLNtdQ3kMqzcBCgzs8sOmQ3GFjgIg+ObjTCtJnvXKrYCNI3upU4dx8Z3iBGjv2NGZstTqdgZ0fmEUOiBS70g07wvjYHPwGQBQQEjJmEkytu+sbBRVaA/+trDK4My+ww8o7/DOJck5RTlBpS3dB9zJ4AhmgoN3/c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1639420272; 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=Ubv0AgNgVtcVOs9tcm67VEelWfoZqRDlgZiMvFjbzsM=; b=H0M014LOnSp+kq5MS2y+xeiFf4cRFRh6Mh7E170xAKB8vTgl9PkJZ4v6aW2NxiYXJstD0cJz48rx/T4NMRxBns5FjJIaYdDpFmbfwGjFht2u6H2SMLPEjsW/R61RaNXcbR0bVA4wDOPEMRIDJ5dZjqEHAt/XDFZyYLLcbwqIV34= 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+84752+1787277+3901457@groups.io Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1639420272093393.4019555812848; Mon, 13 Dec 2021 10:31:12 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id vPICYY1788612x128Zf9Ezpq; Mon, 13 Dec 2021 10:31:11 -0800 X-Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) by mx.groups.io with SMTP id smtpd.web12.15278.1639420271138496566 for ; Mon, 13 Dec 2021 10:31:11 -0800 X-Received: by mail-pj1-f42.google.com with SMTP id gx15-20020a17090b124f00b001a695f3734aso14105819pjb.0 for ; Mon, 13 Dec 2021 10:31:11 -0800 (PST) X-Gm-Message-State: 9MF0ZCL13mYsKMjrUykoT6tix1787277AA= X-Google-Smtp-Source: ABdhPJxC/3cgTtUBUq6aN8F2evE0jgYDubzH1aP/J7Yav5xghrVOgSXzSjXj6wlw5dJvgYXGTLK7IA== X-Received: by 2002:a17:902:e544:b0:144:e3fa:3c2e with SMTP id n4-20020a170902e54400b00144e3fa3c2emr356836plf.17.1639420270046; Mon, 13 Dec 2021 10:31:10 -0800 (PST) X-Received: from linbox.ba.nuviainc.com ([2601:681:4300:69e:9e7b:efff:fe2b:884c]) by smtp.gmail.com with ESMTPSA id g15sm15530529pfj.144.2021.12.13.10.31.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Dec 2021 10:31:09 -0800 (PST) From: "Rebecca Cran" To: devel@edk2.groups.io, Ard Biesheuvel , Gerd Hoffmann , Samer El-Haj-Mahmoud , Leif Lindholm , nd , Sami Mujawar Cc: Rebecca Cran Subject: [edk2-devel] [PATCH v3 1/2] ArmPkg: Add SMC helper functions Date: Mon, 13 Dec 2021 11:30:55 -0700 Message-Id: <20211213183056.31444-2-rebecca@nuviainc.com> In-Reply-To: <20211213183056.31444-1-rebecca@nuviainc.com> References: <20211213183056.31444-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=1639420271; bh=zqnJM42dXuookTpE/DFsRqO3r/GWf8bzxYOgeidKOo8=; h=Cc:Date:From:Reply-To:Subject:To; b=mKRtVLmQP+Pt31j66vTxGAkoU/Ng6TBdrfzQdbfZZpGMibmuXOMT1r48YfzWEBNeCZJ uu0sZc2D3bkll1jLOMAFB+c2vYh6/yvT2PUdGJHAMF9TheXdxOlBxdhUeaoVBMhkTDces dg66QfauU+Kxj0/se6UgYVydaJgdSbBcY1g= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1639420273069100001 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 Reviewed-by: Sami Mujawar --- ArmPkg/Include/Library/ArmSmcLib.h | 73 +++++++++++ ArmPkg/Library/ArmSmcLib/ArmSmc.c | 129 ++++++++++++++++++++ ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf | 3 + ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.c | 85 +++++++++++++ 4 files changed, 290 insertions(+) diff --git a/ArmPkg/Include/Library/ArmSmcLib.h b/ArmPkg/Include/Library/Ar= mSmcLib.h index f5b45f0a8cdf..beef0175c35c 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 OPTIONAL, + IN OUT UINTN *Arg2 OPTIONAL, + IN OUT UINTN *Arg3 OPTIONAL + ); + +/** 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 OPTIONAL, + IN OUT UINTN *Arg2 OPTIONAL, + OUT UINTN *Arg3 OPTIONAL + ); + +/** 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 OPTIONAL, + OUT UINTN *Arg2 OPTIONAL, + OUT UINTN *Arg3 OPTIONAL + ); + +/** 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 OPTIONAL, + OUT UINTN *Arg2 OPTIONAL, + OUT UINTN *Arg3 OPTIONAL + ); + #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..254507e21916 --- /dev/null +++ b/ArmPkg/Library/ArmSmcLib/ArmSmc.c @@ -0,0 +1,129 @@ +/** @file + SMC helper functions. + + Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#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 OPTIONAL, + IN OUT UINTN *Arg2 OPTIONAL, + IN OUT UINTN *Arg3 OPTIONAL + ) +{ + ARM_SMC_ARGS Args; + UINTN ErrorCode; + + ZeroMem (&Args, sizeof (ARM_SMC_ARGS)); + + 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 OPTIONAL, + IN OUT UINTN *Arg2 OPTIONAL, + OUT UINTN *Arg3 OPTIONAL + ) +{ + 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 OPTIONAL, + OUT UINTN *Arg2 OPTIONAL, + OUT UINTN *Arg3 OPTIONAL + ) +{ + 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 OPTIONAL, + OUT UINTN *Arg2 OPTIONAL, + OUT UINTN *Arg3 OPTIONAL + ) +{ + 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 3c1adef8ebe6..28514e43c2de 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 OPTIONAL, + IN OUT UINTN *Arg2 OPTIONAL, + IN OUT UINTN *Arg3 OPTIONAL + ) +{ + 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 OPTIONAL, + IN OUT UINTN *Arg2 OPTIONAL, + OUT UINTN *Arg3 OPTIONAL + ) +{ + 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 OPTIONAL, + OUT UINTN *Arg2 OPTIONAL, + OUT UINTN *Arg3 OPTIONAL + ) +{ + 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 OPTIONAL, + OUT UINTN *Arg2 OPTIONAL, + OUT UINTN *Arg3 OPTIONAL + ) +{ + 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 (#84752): https://edk2.groups.io/g/devel/message/84752 Mute This Topic: https://groups.io/mt/87704309/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-