xen/arm: Clean up 32bit arm_smccc_1_1_smc()

... before making a related copy of it.

 * Drop __constraints() so the output parameters are visible in the same block
   as they're defined.  Use PASTE() rather than opencoding it.
 * Adjust the indentation of trailing \'s for consistency.
 * Drop the newline at the end of the instruction.
 * Indent the if condition correctly.  ___res is always of type
   arm_smccc_res (declared in __declare_arg_0()), so drop the typeof().
 * Drop arm_smccc_1_0_smc() as it has no users.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
This commit is contained in:
Andrew Cooper committed 2026-09-07 11:18:11 +01:00
1 parent b128b74cf8
commit 979251a377
1 file changed
+22 -23
+22 -23
View File
@@ -56,6 +56,8 @@
#ifndef __ASSEMBLER__
#include <xen/macros.h>
extern uint32_t smccc_ver;
/* Check if this is fast call. */
@@ -115,24 +117,24 @@ struct arm_smccc_res {
* This is manual register scheduling for the asm() statement, and any other
* logic to evaluate may clobber the already-scheduled registers.
*/
#define __declare_arg_0(a0, res) \
auto __a0 = (uint32_t)(a0); \
struct arm_smccc_res *___res = (res); \
#define __declare_arg_0(a0, res) \
auto __a0 = (uint32_t)(a0); \
struct arm_smccc_res *___res = (res); \
register unsigned long arg0 ASM_REG(0) = __a0
#define __declare_arg_1(a0, a1, res) \
auto __a1 = (a1); \
__declare_arg_0(a0, res); \
#define __declare_arg_1(a0, a1, res) \
auto __a1 = (a1); \
__declare_arg_0(a0, res); \
register auto arg1 ASM_REG(1) = __a1
#define __declare_arg_2(a0, a1, a2, res) \
auto __a2 = (a2); \
__declare_arg_1(a0, a1, res); \
#define __declare_arg_2(a0, a1, a2, res) \
auto __a2 = (a2); \
__declare_arg_1(a0, a1, res); \
register auto arg2 ASM_REG(2) = __a2
#define __declare_arg_3(a0, a1, a2, a3, res) \
auto __a3 = (a3); \
__declare_arg_2(a0, a1, a2, res); \
#define __declare_arg_3(a0, a1, a2, a3, res) \
auto __a3 = (a3); \
__declare_arg_2(a0, a1, a2, res); \
register auto arg3 ASM_REG(3) = __a3
#define __declare_arg_4(a0, a1, a2, a3, a4, res) \
@@ -158,12 +160,6 @@ struct arm_smccc_res {
#define ___declare_args(count, ...) __declare_arg_ ## count(__VA_ARGS__)
#define __declare_args(count, ...) ___declare_args(count, __VA_ARGS__)
#define ___constraints(count) \
: "=r" (r0), "=r" (r1), "=r" (r2), "=r" (r3) \
: __constraint_read_ ## count \
: "memory"
#define __constraints(count) ___constraints(count)
/*
* arm_smccc_1_1_smc() - make an SMCCC v1.1 compliant SMC call
*
@@ -189,10 +185,14 @@ struct arm_smccc_res {
register unsigned long r2 ASM_REG(2); \
register unsigned long r3 ASM_REG(3); \
__declare_args(__count_args(__VA_ARGS__), __VA_ARGS__); \
asm volatile("smc #0\n" \
__constraints(__count_args(__VA_ARGS__))); \
asm volatile ( \
"smc #0" \
: "=r" (r0), "=r" (r1), "=r" (r2), "=r" (r3) \
: PASTE(__constraint_read_, \
__count_args(__VA_ARGS__)) \
: "memory" ); \
if ( ___res ) \
*___res = (typeof(*___res)){r0, r1, r2, r3}; \
*___res = (struct arm_smccc_res){ r0, r1, r2, r3 }; \
} while ( 0 )
/*
@@ -200,7 +200,6 @@ struct arm_smccc_res {
* v1.1.
*/
#ifdef CONFIG_ARM_32
#define arm_smccc_1_0_smc(...) arm_smccc_1_1_smc(__VA_ARGS__)
#define arm_smccc_smc(...) arm_smccc_1_1_smc(__VA_ARGS__)
/* Make an SMCCC v1.1 compliant SMC call with guest register state. */
@@ -217,7 +216,7 @@ static inline void arm_smccc_guest_smc(struct cpu_user_regs *regs)
regs->r3 = res.a3;
}
#else
#else /* CONFIG_ARM_64 */
void __arm_smccc_1_0_smc(register_t a0, register_t a1, register_t a2,
register_t a3, register_t a4, register_t a5,
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.