Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/s390/include/asm/ccwgroup.h
10819 views
1
#ifndef S390_CCWGROUP_H
2
#define S390_CCWGROUP_H
3
4
struct ccw_device;
5
struct ccw_driver;
6
7
/**
8
* struct ccwgroup_device - ccw group device
9
* @creator_id: unique number of the driver
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
14
*/
15
struct ccwgroup_device {
16
unsigned long creator_id;
17
enum {
18
CCWGROUP_OFFLINE,
19
CCWGROUP_ONLINE,
20
} state;
21
/* private: */
22
atomic_t onoff;
23
struct mutex reg_mutex;
24
/* public: */
25
unsigned int count;
26
struct device dev;
27
struct ccw_device *cdev[0];
28
};
29
30
/**
31
* struct ccwgroup_driver - driver for ccw group devices
32
* @max_slaves: maximum number of slave devices
33
* @driver_id: unique id
34
* @probe: function called on probe
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
38
* @shutdown: function called when device is shut down
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
44
* @driver: embedded driver structure
45
*/
46
struct ccwgroup_driver {
47
int max_slaves;
48
unsigned long driver_id;
49
50
int (*probe) (struct ccwgroup_device *);
51
void (*remove) (struct ccwgroup_device *);
52
int (*set_online) (struct ccwgroup_device *);
53
int (*set_offline) (struct ccwgroup_device *);
54
void (*shutdown)(struct ccwgroup_device *);
55
int (*prepare) (struct ccwgroup_device *);
56
void (*complete) (struct ccwgroup_device *);
57
int (*freeze)(struct ccwgroup_device *);
58
int (*thaw) (struct ccwgroup_device *);
59
int (*restore)(struct ccwgroup_device *);
60
61
struct device_driver driver;
62
};
63
64
extern int ccwgroup_driver_register (struct ccwgroup_driver *cdriver);
65
extern void ccwgroup_driver_unregister (struct ccwgroup_driver *cdriver);
66
int ccwgroup_create_from_string(struct device *root, unsigned int creator_id,
67
struct ccw_driver *cdrv, int num_devices,
68
const char *buf);
69
70
extern int ccwgroup_probe_ccwdev(struct ccw_device *cdev);
71
extern void ccwgroup_remove_ccwdev(struct ccw_device *cdev);
72
73
#define to_ccwgroupdev(x) container_of((x), struct ccwgroup_device, dev)
74
#define to_ccwgroupdrv(x) container_of((x), struct ccwgroup_driver, driver)
75
#endif
76
77