diff options
Diffstat (limited to 'drivers/virtio')
-rw-r--r-- | drivers/virtio/virtio_ring.c | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 0f90634bcb85..0717b5b000bb 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c | |||
@@ -155,11 +155,11 @@ static int vring_add_indirect(struct vring_virtqueue *vq, | |||
155 | return head; | 155 | return head; |
156 | } | 156 | } |
157 | 157 | ||
158 | static int vring_add_buf(struct virtqueue *_vq, | 158 | int virtqueue_add_buf(struct virtqueue *_vq, |
159 | struct scatterlist sg[], | 159 | struct scatterlist sg[], |
160 | unsigned int out, | 160 | unsigned int out, |
161 | unsigned int in, | 161 | unsigned int in, |
162 | void *data) | 162 | void *data) |
163 | { | 163 | { |
164 | struct vring_virtqueue *vq = to_vvq(_vq); | 164 | struct vring_virtqueue *vq = to_vvq(_vq); |
165 | unsigned int i, avail, head, uninitialized_var(prev); | 165 | unsigned int i, avail, head, uninitialized_var(prev); |
@@ -232,8 +232,9 @@ add_head: | |||
232 | return vq->num_free ? vq->vring.num : 0; | 232 | return vq->num_free ? vq->vring.num : 0; |
233 | return vq->num_free; | 233 | return vq->num_free; |
234 | } | 234 | } |
235 | EXPORT_SYMBOL_GPL(virtqueue_add_buf); | ||
235 | 236 | ||
236 | static void vring_kick(struct virtqueue *_vq) | 237 | void virtqueue_kick(struct virtqueue *_vq) |
237 | { | 238 | { |
238 | struct vring_virtqueue *vq = to_vvq(_vq); | 239 | struct vring_virtqueue *vq = to_vvq(_vq); |
239 | START_USE(vq); | 240 | START_USE(vq); |
@@ -253,6 +254,7 @@ static void vring_kick(struct virtqueue *_vq) | |||
253 | 254 | ||
254 | END_USE(vq); | 255 | END_USE(vq); |
255 | } | 256 | } |
257 | EXPORT_SYMBOL_GPL(virtqueue_kick); | ||
256 | 258 | ||
257 | static void detach_buf(struct vring_virtqueue *vq, unsigned int head) | 259 | static void detach_buf(struct vring_virtqueue *vq, unsigned int head) |
258 | { | 260 | { |
@@ -284,7 +286,7 @@ static inline bool more_used(const struct vring_virtqueue *vq) | |||
284 | return vq->last_used_idx != vq->vring.used->idx; | 286 | return vq->last_used_idx != vq->vring.used->idx; |
285 | } | 287 | } |
286 | 288 | ||
287 | static void *vring_get_buf(struct virtqueue *_vq, unsigned int *len) | 289 | void *virtqueue_get_buf(struct virtqueue *_vq, unsigned int *len) |
288 | { | 290 | { |
289 | struct vring_virtqueue *vq = to_vvq(_vq); | 291 | struct vring_virtqueue *vq = to_vvq(_vq); |
290 | void *ret; | 292 | void *ret; |
@@ -325,15 +327,17 @@ static void *vring_get_buf(struct virtqueue *_vq, unsigned int *len) | |||
325 | END_USE(vq); | 327 | END_USE(vq); |
326 | return ret; | 328 | return ret; |
327 | } | 329 | } |
330 | EXPORT_SYMBOL_GPL(virtqueue_get_buf); | ||
328 | 331 | ||
329 | static void vring_disable_cb(struct virtqueue *_vq) | 332 | void virtqueue_disable_cb(struct virtqueue *_vq) |
330 | { | 333 | { |
331 | struct vring_virtqueue *vq = to_vvq(_vq); | 334 | struct vring_virtqueue *vq = to_vvq(_vq); |
332 | 335 | ||
333 | vq->vring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT; | 336 | vq->vring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT; |
334 | } | 337 | } |
338 | EXPORT_SYMBOL_GPL(virtqueue_disable_cb); | ||
335 | 339 | ||
336 | static bool vring_enable_cb(struct virtqueue *_vq) | 340 | bool virtqueue_enable_cb(struct virtqueue *_vq) |
337 | { | 341 | { |
338 | struct vring_virtqueue *vq = to_vvq(_vq); | 342 | struct vring_virtqueue *vq = to_vvq(_vq); |
339 | 343 | ||
@@ -351,8 +355,9 @@ static bool vring_enable_cb(struct virtqueue *_vq) | |||
351 | END_USE(vq); | 355 | END_USE(vq); |
352 | return true; | 356 | return true; |
353 | } | 357 | } |
358 | EXPORT_SYMBOL_GPL(virtqueue_enable_cb); | ||
354 | 359 | ||
355 | static void *vring_detach_unused_buf(struct virtqueue *_vq) | 360 | void *virtqueue_detach_unused_buf(struct virtqueue *_vq) |
356 | { | 361 | { |
357 | struct vring_virtqueue *vq = to_vvq(_vq); | 362 | struct vring_virtqueue *vq = to_vvq(_vq); |
358 | unsigned int i; | 363 | unsigned int i; |
@@ -375,6 +380,7 @@ static void *vring_detach_unused_buf(struct virtqueue *_vq) | |||
375 | END_USE(vq); | 380 | END_USE(vq); |
376 | return NULL; | 381 | return NULL; |
377 | } | 382 | } |
383 | EXPORT_SYMBOL_GPL(virtqueue_detach_unused_buf); | ||
378 | 384 | ||
379 | irqreturn_t vring_interrupt(int irq, void *_vq) | 385 | irqreturn_t vring_interrupt(int irq, void *_vq) |
380 | { | 386 | { |
@@ -396,15 +402,6 @@ irqreturn_t vring_interrupt(int irq, void *_vq) | |||
396 | } | 402 | } |
397 | EXPORT_SYMBOL_GPL(vring_interrupt); | 403 | EXPORT_SYMBOL_GPL(vring_interrupt); |
398 | 404 | ||
399 | static struct virtqueue_ops vring_vq_ops = { | ||
400 | .add_buf = vring_add_buf, | ||
401 | .get_buf = vring_get_buf, | ||
402 | .kick = vring_kick, | ||
403 | .disable_cb = vring_disable_cb, | ||
404 | .enable_cb = vring_enable_cb, | ||
405 | .detach_unused_buf = vring_detach_unused_buf, | ||
406 | }; | ||
407 | |||
408 | struct virtqueue *vring_new_virtqueue(unsigned int num, | 405 | struct virtqueue *vring_new_virtqueue(unsigned int num, |
409 | unsigned int vring_align, | 406 | unsigned int vring_align, |
410 | struct virtio_device *vdev, | 407 | struct virtio_device *vdev, |
@@ -429,7 +426,6 @@ struct virtqueue *vring_new_virtqueue(unsigned int num, | |||
429 | vring_init(&vq->vring, num, pages, vring_align); | 426 | vring_init(&vq->vring, num, pages, vring_align); |
430 | vq->vq.callback = callback; | 427 | vq->vq.callback = callback; |
431 | vq->vq.vdev = vdev; | 428 | vq->vq.vdev = vdev; |
432 | vq->vq.vq_ops = &vring_vq_ops; | ||
433 | vq->vq.name = name; | 429 | vq->vq.name = name; |
434 | vq->notify = notify; | 430 | vq->notify = notify; |
435 | vq->broken = false; | 431 | vq->broken = false; |