1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29#ifndef __VISORBUS_H__
30#define __VISORBUS_H__
31
32#include <linux/device.h>
33#include <linux/module.h>
34#include <linux/poll.h>
35#include <linux/kernel.h>
36#include <linux/uuid.h>
37
38#include "periodic_work.h"
39#include "channel.h"
40
41struct visor_driver;
42struct visor_device;
43extern struct bus_type visorbus_type;
44
45typedef void (*visorbus_state_complete_func) (struct visor_device *dev,
46 int status);
47struct visorchipset_state {
48 u32 created:1;
49 u32 attached:1;
50 u32 configured:1;
51 u32 running:1;
52
53
54};
55
56
57
58
59struct visor_channeltype_descriptor {
60 const uuid_le guid;
61 const char *name;
62};
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98struct visor_driver {
99 const char *name;
100 const char *version;
101 const char *vertag;
102 struct module *owner;
103 struct visor_channeltype_descriptor *channel_types;
104 int (*probe)(struct visor_device *dev);
105 void (*remove)(struct visor_device *dev);
106 void (*channel_interrupt)(struct visor_device *dev);
107 int (*pause)(struct visor_device *dev,
108 visorbus_state_complete_func complete_func);
109 int (*resume)(struct visor_device *dev,
110 visorbus_state_complete_func complete_func);
111
112
113 struct device_driver driver;
114 struct driver_attribute version_attr;
115};
116
117#define to_visor_driver(x) ((x) ? \
118 (container_of(x, struct visor_driver, driver)) : (NULL))
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154struct visor_device {
155 struct visorchannel *visorchannel;
156 uuid_le channel_type_guid;
157
158 struct device device;
159 struct list_head list_all;
160 struct periodic_work *periodic_work;
161 bool being_removed;
162 struct semaphore visordriver_callback_lock;
163 bool pausing;
164 bool resuming;
165 u32 chipset_bus_no;
166 u32 chipset_dev_no;
167 struct visorchipset_state state;
168 uuid_le inst;
169 u8 *name;
170 struct controlvm_message_header *pending_msg_hdr;
171 void *vbus_hdr_info;
172 uuid_le partition_uuid;
173};
174
175#define to_visor_device(x) container_of(x, struct visor_device, device)
176
177#ifndef STANDALONE_CLIENT
178int visorbus_register_visor_driver(struct visor_driver *);
179void visorbus_unregister_visor_driver(struct visor_driver *);
180int visorbus_read_channel(struct visor_device *dev,
181 unsigned long offset, void *dest,
182 unsigned long nbytes);
183int visorbus_write_channel(struct visor_device *dev,
184 unsigned long offset, void *src,
185 unsigned long nbytes);
186int visorbus_clear_channel(struct visor_device *dev,
187 unsigned long offset, u8 ch, unsigned long nbytes);
188void visorbus_enable_channel_interrupts(struct visor_device *dev);
189void visorbus_disable_channel_interrupts(struct visor_device *dev);
190#endif
191
192
193
194
195
196struct visorchannel *visorchannel_create(u64 physaddr,
197 unsigned long channel_bytes,
198 gfp_t gfp, uuid_le guid);
199struct visorchannel *visorchannel_create_with_lock(u64 physaddr,
200 unsigned long channel_bytes,
201 gfp_t gfp, uuid_le guid);
202void visorchannel_destroy(struct visorchannel *channel);
203int visorchannel_read(struct visorchannel *channel, ulong offset,
204 void *local, ulong nbytes);
205int visorchannel_write(struct visorchannel *channel, ulong offset,
206 void *local, ulong nbytes);
207int visorchannel_clear(struct visorchannel *channel, ulong offset,
208 u8 ch, ulong nbytes);
209bool visorchannel_signalremove(struct visorchannel *channel, u32 queue,
210 void *msg);
211bool visorchannel_signalinsert(struct visorchannel *channel, u32 queue,
212 void *msg);
213bool visorchannel_signalempty(struct visorchannel *channel, u32 queue);
214
215int visorchannel_signalqueue_slots_avail(struct visorchannel *channel,
216 u32 queue);
217int visorchannel_signalqueue_max_slots(struct visorchannel *channel, u32 queue);
218u64 visorchannel_get_physaddr(struct visorchannel *channel);
219ulong visorchannel_get_nbytes(struct visorchannel *channel);
220char *visorchannel_id(struct visorchannel *channel, char *s);
221char *visorchannel_zoneid(struct visorchannel *channel, char *s);
222u64 visorchannel_get_clientpartition(struct visorchannel *channel);
223int visorchannel_set_clientpartition(struct visorchannel *channel,
224 u64 partition_handle);
225uuid_le visorchannel_get_uuid(struct visorchannel *channel);
226char *visorchannel_uuid_id(uuid_le *guid, char *s);
227void visorchannel_debug(struct visorchannel *channel, int num_queues,
228 struct seq_file *seq, u32 off);
229void __iomem *visorchannel_get_header(struct visorchannel *channel);
230
231#define BUS_ROOT_DEVICE UINT_MAX
232struct visor_device *visorbus_get_device_by_id(u32 bus_no, u32 dev_no,
233 struct visor_device *from);
234#endif
235