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