1#ifndef S390_CCWGROUP_H 2#define S390_CCWGROUP_H 3 4struct ccw_device; 5struct ccw_driver; 6 7struct ccwgroup_device { 8 unsigned long creator_id; /* unique number of the driver */ 9 enum { 10 CCWGROUP_OFFLINE, 11 CCWGROUP_ONLINE, 12 } state; 13 atomic_t onoff; 14 struct mutex reg_mutex; 15 unsigned int count; /* number of attached slave devices */ 16 struct device dev; /* master device */ 17 struct ccw_device *cdev[0]; /* variable number, allocate as needed */ 18}; 19 20struct ccwgroup_driver { 21 struct module *owner; 22 char *name; 23 int max_slaves; 24 unsigned long driver_id; 25 26 int (*probe) (struct ccwgroup_device *); 27 void (*remove) (struct ccwgroup_device *); 28 int (*set_online) (struct ccwgroup_device *); 29 int (*set_offline) (struct ccwgroup_device *); 30 31 struct device_driver driver; /* this driver */ 32}; 33 34extern int ccwgroup_driver_register (struct ccwgroup_driver *cdriver); 35extern void ccwgroup_driver_unregister (struct ccwgroup_driver *cdriver); 36extern int ccwgroup_create (struct device *root, 37 unsigned int creator_id, 38 struct ccw_driver *gdrv, 39 int argc, char *argv[]); 40 41extern int ccwgroup_probe_ccwdev(struct ccw_device *cdev); 42extern void ccwgroup_remove_ccwdev(struct ccw_device *cdev); 43 44#define to_ccwgroupdev(x) container_of((x), struct ccwgroup_device, dev) 45#define to_ccwgroupdrv(x) container_of((x), struct ccwgroup_driver, driver) 46#endif 47