Module Name: src Committed By: jmcneill Date: Sat Aug 7 21:20:14 UTC 2021
Modified Files: src/sys/arch/arm/arm: psci.c psci.h Log Message: arm: PSCI: Add a function to return the PSCI conduit. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/arm/psci.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/arm/psci.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/arm/psci.c diff -u src/sys/arch/arm/arm/psci.c:1.6 src/sys/arch/arm/arm/psci.c:1.7 --- src/sys/arch/arm/arm/psci.c:1.6 Fri Aug 6 19:38:53 2021 +++ src/sys/arch/arm/arm/psci.c Sat Aug 7 21:20:14 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: psci.c,v 1.6 2021/08/06 19:38:53 jmcneill Exp $ */ +/* $NetBSD: psci.c,v 1.7 2021/08/07 21:20:14 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: psci.c,v 1.6 2021/08/06 19:38:53 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: psci.c,v 1.7 2021/08/07 21:20:14 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -68,6 +68,18 @@ psci_call(register_t fid, register_t arg return psci_call_fn(fid, arg1, arg2, arg3); } +enum psci_conduit +psci_conduit(void) +{ + if (psci_call_fn == psci_call_smc) { + return PSCI_CONDUIT_SMC; + } else if (psci_call_fn == psci_call_hvc) { + return PSCI_CONDUIT_HVC; + } else { + return PSCI_CONDUIT_NONE; + } +} + uint32_t psci_version(void) { Index: src/sys/arch/arm/arm/psci.h diff -u src/sys/arch/arm/arm/psci.h:1.3 src/sys/arch/arm/arm/psci.h:1.4 --- src/sys/arch/arm/arm/psci.h:1.3 Fri Aug 6 19:38:53 2021 +++ src/sys/arch/arm/arm/psci.h Sat Aug 7 21:20:14 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: psci.h,v 1.3 2021/08/06 19:38:53 jmcneill Exp $ */ +/* $NetBSD: psci.h,v 1.4 2021/08/07 21:20:14 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca> @@ -42,6 +42,15 @@ enum psci_function { }; /* + * Possible PSCI conduits. + */ +enum psci_conduit { + PSCI_CONDUIT_NONE, + PSCI_CONDUIT_SMC, + PSCI_CONDUIT_HVC, +}; + +/* * PSCI error codes */ #define PSCI_SUCCESS 0 @@ -71,6 +80,11 @@ void psci_init(psci_fn); bool psci_available(void); /* + * Return the PSCI conduit type. + */ +enum psci_conduit psci_conduit(void); + +/* * PSCI call methods, implemented in psci.S */ int psci_call_smc(register_t, register_t, register_t, register_t);