1#ifndef _LINUX_MEI_CL_BUS_H
2#define _LINUX_MEI_CL_BUS_H
3
4#include <linux/device.h>
5#include <linux/uuid.h>
6#include <linux/mod_devicetable.h>
7
8struct mei_cl_device;
9struct mei_device;
10
11typedef void (*mei_cldev_cb_t)(struct mei_cl_device *cldev);
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37struct mei_cl_device {
38 struct list_head bus_list;
39 struct mei_device *bus;
40 struct device dev;
41
42 struct mei_me_client *me_cl;
43 struct mei_cl *cl;
44 char name[MEI_CL_NAME_SIZE];
45
46 struct work_struct rx_work;
47 mei_cldev_cb_t rx_cb;
48 struct work_struct notif_work;
49 mei_cldev_cb_t notif_cb;
50
51 unsigned int do_match:1;
52 unsigned int is_added:1;
53
54 void *priv_data;
55};
56
57struct mei_cl_driver {
58 struct device_driver driver;
59 const char *name;
60
61 const struct mei_cl_device_id *id_table;
62
63 int (*probe)(struct mei_cl_device *cldev,
64 const struct mei_cl_device_id *id);
65 int (*remove)(struct mei_cl_device *cldev);
66};
67
68int __mei_cldev_driver_register(struct mei_cl_driver *cldrv,
69 struct module *owner);
70#define mei_cldev_driver_register(cldrv) \
71 __mei_cldev_driver_register(cldrv, THIS_MODULE)
72
73void mei_cldev_driver_unregister(struct mei_cl_driver *cldrv);
74
75
76
77
78
79
80
81
82
83#define module_mei_cl_driver(__mei_cldrv) \
84 module_driver(__mei_cldrv, \
85 mei_cldev_driver_register,\
86 mei_cldev_driver_unregister)
87
88ssize_t mei_cldev_send(struct mei_cl_device *cldev, u8 *buf, size_t length);
89ssize_t mei_cldev_recv(struct mei_cl_device *cldev, u8 *buf, size_t length);
90ssize_t mei_cldev_recv_nonblock(struct mei_cl_device *cldev, u8 *buf,
91 size_t length);
92
93int mei_cldev_register_rx_cb(struct mei_cl_device *cldev, mei_cldev_cb_t rx_cb);
94int mei_cldev_register_notif_cb(struct mei_cl_device *cldev,
95 mei_cldev_cb_t notif_cb);
96
97const uuid_le *mei_cldev_uuid(const struct mei_cl_device *cldev);
98u8 mei_cldev_ver(const struct mei_cl_device *cldev);
99
100void *mei_cldev_get_drvdata(const struct mei_cl_device *cldev);
101void mei_cldev_set_drvdata(struct mei_cl_device *cldev, void *data);
102
103int mei_cldev_enable(struct mei_cl_device *cldev);
104int mei_cldev_disable(struct mei_cl_device *cldev);
105bool mei_cldev_enabled(struct mei_cl_device *cldev);
106
107#endif
108