]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef S390_CCWGROUP_H |
2 | #define S390_CCWGROUP_H | |
3 | ||
4 | struct ccw_device; | |
5 | struct ccw_driver; | |
6 | ||
b2ffd8e9 CH |
7 | /** |
8 | * struct ccwgroup_device - ccw group device | |
b2ffd8e9 CH |
9 | * @state: online/offline state |
10 | * @count: number of attached slave devices | |
11 | * @dev: embedded device structure | |
12 | * @cdev: variable number of slave devices, allocated as needed | |
13 | */ | |
1da177e4 | 14 | struct ccwgroup_device { |
1da177e4 LT |
15 | enum { |
16 | CCWGROUP_OFFLINE, | |
17 | CCWGROUP_ONLINE, | |
18 | } state; | |
b2ffd8e9 | 19 | /* private: */ |
1da177e4 | 20 | atomic_t onoff; |
d76123eb | 21 | struct mutex reg_mutex; |
b2ffd8e9 CH |
22 | /* public: */ |
23 | unsigned int count; | |
24 | struct device dev; | |
0b60f9ea | 25 | struct work_struct ungroup_work; |
0c8c77d3 | 26 | struct ccw_device *cdev[0]; |
1da177e4 LT |
27 | }; |
28 | ||
b2ffd8e9 CH |
29 | /** |
30 | * struct ccwgroup_driver - driver for ccw group devices | |
f2962dae | 31 | * @setup: function called during device creation to setup the device |
b2ffd8e9 CH |
32 | * @remove: function called on remove |
33 | * @set_online: function called when device is set online | |
34 | * @set_offline: function called when device is set offline | |
01bc8ad1 | 35 | * @shutdown: function called when device is shut down |
7e597a21 SO |
36 | * @prepare: prepare for pm state transition |
37 | * @complete: undo work done in @prepare | |
38 | * @freeze: callback for freezing during hibernation snapshotting | |
39 | * @thaw: undo work done in @freeze | |
40 | * @restore: callback for restoring after hibernation | |
b2ffd8e9 CH |
41 | * @driver: embedded driver structure |
42 | */ | |
1da177e4 | 43 | struct ccwgroup_driver { |
f2962dae | 44 | int (*setup) (struct ccwgroup_device *); |
1da177e4 LT |
45 | void (*remove) (struct ccwgroup_device *); |
46 | int (*set_online) (struct ccwgroup_device *); | |
47 | int (*set_offline) (struct ccwgroup_device *); | |
01bc8ad1 | 48 | void (*shutdown)(struct ccwgroup_device *); |
7e597a21 SO |
49 | int (*prepare) (struct ccwgroup_device *); |
50 | void (*complete) (struct ccwgroup_device *); | |
51 | int (*freeze)(struct ccwgroup_device *); | |
52 | int (*thaw) (struct ccwgroup_device *); | |
53 | int (*restore)(struct ccwgroup_device *); | |
1da177e4 | 54 | |
b2ffd8e9 | 55 | struct device_driver driver; |
1da177e4 LT |
56 | }; |
57 | ||
58 | extern int ccwgroup_driver_register (struct ccwgroup_driver *cdriver); | |
59 | extern void ccwgroup_driver_unregister (struct ccwgroup_driver *cdriver); | |
9814fdfb SO |
60 | int ccwgroup_create_dev(struct device *root, struct ccwgroup_driver *gdrv, |
61 | int num_devices, const char *buf); | |
1da177e4 | 62 | |
683c3dce SO |
63 | extern int ccwgroup_set_online(struct ccwgroup_device *gdev); |
64 | extern int ccwgroup_set_offline(struct ccwgroup_device *gdev); | |
65 | ||
1da177e4 LT |
66 | extern int ccwgroup_probe_ccwdev(struct ccw_device *cdev); |
67 | extern void ccwgroup_remove_ccwdev(struct ccw_device *cdev); | |
68 | ||
69 | #define to_ccwgroupdev(x) container_of((x), struct ccwgroup_device, dev) | |
70 | #define to_ccwgroupdrv(x) container_of((x), struct ccwgroup_driver, driver) | |
71 | #endif |