1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2026 Arm Limited 4 */ 5 #ifndef __LINUX_ARM_SMCCC_BUS_H 6 #define __LINUX_ARM_SMCCC_BUS_H 7 8 #include <linux/device.h> 9 #include <linux/device-id/arm_smccc.h> 10 #include <linux/module.h> 11 12 struct arm_smccc_device { 13 struct device dev; 14 u32 func_id; 15 }; 16 17 #define to_arm_smccc_device(d) container_of_const(d, struct arm_smccc_device, dev) 18 19 struct arm_smccc_driver { 20 struct device_driver driver; 21 22 const char *name; 23 int (*probe)(struct arm_smccc_device *sdev); 24 void (*remove)(struct arm_smccc_device *sdev); 25 const struct arm_smccc_device_id *id_table; 26 }; 27 28 #define to_arm_smccc_driver(d) \ 29 container_of_const(d, struct arm_smccc_driver, driver) 30 31 int arm_smccc_driver_register(struct arm_smccc_driver *driver, 32 struct module *owner, const char *mod_name); 33 void arm_smccc_driver_unregister(struct arm_smccc_driver *driver); 34 struct arm_smccc_device *arm_smccc_device_register(const char *name, u32 func_id); 35 void arm_smccc_device_unregister(struct arm_smccc_device *smcc_dev); 36 37 #define arm_smccc_register(driver) \ 38 arm_smccc_driver_register(driver, THIS_MODULE, KBUILD_MODNAME) 39 #define arm_smccc_unregister(driver) \ 40 arm_smccc_driver_unregister(driver) 41 42 #define module_arm_smccc_driver(__arm_smccc_driver) \ 43 module_driver(__arm_smccc_driver, arm_smccc_register, \ 44 arm_smccc_unregister) 45 46 extern const struct bus_type arm_smccc_bus_type; 47 48 #endif /* __LINUX_ARM_SMCCC_BUS_H */ 49