1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #include <linux/device.h> 3*4882a593Smuzhiyun #include <linux/mod_devicetable.h> 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun struct gio_device_id { 6*4882a593Smuzhiyun __u8 id; 7*4882a593Smuzhiyun }; 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun struct gio_device { 10*4882a593Smuzhiyun struct device dev; 11*4882a593Smuzhiyun struct resource resource; 12*4882a593Smuzhiyun unsigned int irq; 13*4882a593Smuzhiyun unsigned int slotno; 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun const char *name; 16*4882a593Smuzhiyun struct gio_device_id id; 17*4882a593Smuzhiyun unsigned id32:1; 18*4882a593Smuzhiyun unsigned gio64:1; 19*4882a593Smuzhiyun }; 20*4882a593Smuzhiyun #define to_gio_device(d) container_of(d, struct gio_device, dev) 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun struct gio_driver { 23*4882a593Smuzhiyun const char *name; 24*4882a593Smuzhiyun struct module *owner; 25*4882a593Smuzhiyun const struct gio_device_id *id_table; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun int (*probe)(struct gio_device *, const struct gio_device_id *); 28*4882a593Smuzhiyun void (*remove)(struct gio_device *); 29*4882a593Smuzhiyun void (*shutdown)(struct gio_device *); 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun struct device_driver driver; 32*4882a593Smuzhiyun }; 33*4882a593Smuzhiyun #define to_gio_driver(drv) container_of(drv, struct gio_driver, driver) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun extern struct gio_device *gio_dev_get(struct gio_device *); 36*4882a593Smuzhiyun extern void gio_dev_put(struct gio_device *); 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun extern int gio_device_register(struct gio_device *); 39*4882a593Smuzhiyun extern void gio_device_unregister(struct gio_device *); 40*4882a593Smuzhiyun extern void gio_release_dev(struct device *); 41*4882a593Smuzhiyun gio_device_free(struct gio_device * dev)42*4882a593Smuzhiyunstatic inline void gio_device_free(struct gio_device *dev) 43*4882a593Smuzhiyun { 44*4882a593Smuzhiyun gio_release_dev(&dev->dev); 45*4882a593Smuzhiyun } 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun extern int gio_register_driver(struct gio_driver *); 48*4882a593Smuzhiyun extern void gio_unregister_driver(struct gio_driver *); 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #define gio_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev) 51*4882a593Smuzhiyun #define gio_set_drvdata(_dev, data) dev_set_drvdata(&(_dev)->dev, (data)) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun extern void gio_set_master(struct gio_device *); 54