On Tue, 9 Nov 2021 at 12:57, Leif Lindholm <l...@nuviainc.com> wrote: > > On Mon, Nov 08, 2021 at 18:56:09 -0700, Rebecca Cran wrote: > > Could I have some reviews on this please? > > I'm all for it. It's clunky, but less clunky than the situation > without, and it improves readability at call sites. > > Ard had some reservations for v1 not actually adding any users. > Ard - do you like it any better now Rebecca's added some? >
Yeah, this is fine. TBH, I am not going to have time to look into this in detail again, so if you're both happy, then I am too. Acked-by: Ard Biesheuvel <a...@kernel.org> > > On 11/1/21 4:11 PM, Rebecca Cran wrote: > > > 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 <rebe...@nuviainc.com> > > > --- > > > 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/ArmSmcLib.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.<BR> > > > * 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 > > > ); > > > +/** 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/ArmSmc.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.<BR> > > > + > > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > > + > > > +**/ > > > + > > > +#include <Library/ArmSmcLib.h> > > > + > > > +/** 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 = Function; > > > + > > > + if (Arg1 != NULL) { > > > + Args.Arg1 = *Arg1; > > > + } > > > + if (Arg2 != NULL) { > > > + Args.Arg2 = *Arg2; > > > + } > > > + if (Arg3 != NULL) { > > > + Args.Arg3 = *Arg3; > > > + } > > > + > > > + ArmCallSmc (&Args); > > > + > > > + ErrorCode = Args.Arg0; > > > + > > > + if (Arg1 != NULL) { > > > + *Arg1 = Args.Arg1; > > > + } > > > + if (Arg2 != NULL) { > > > + *Arg2 = Args.Arg2; > > > + } > > > + if (Arg3 != NULL) { > > > + *Arg3 = 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/ArmSmcLib/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 > > > +[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 @@ > > > #include <Base.h> > > > #include <Library/ArmSmcLib.h> > > > +#include <IndustryStandard/ArmStdSmc.h> > > > 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; > > > +} -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#83508): https://edk2.groups.io/g/devel/message/83508 Mute This Topic: https://groups.io/mt/86753694/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-