Linux Kernel
3.7.1
|
#include <stdbool.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <linux/types.h>
#include <errno.h>
Go to the source code of this file.
Data Structures | |
struct | scatterlist |
struct | page |
struct | virtio_device |
struct | virtqueue |
Macros | |
#define | BUG_ON(__BUG_ON_cond) assert(!(__BUG_ON_cond)) |
#define | virt_to_phys(p) ((unsigned long)p) |
#define | phys_to_virt(a) ((void *)(unsigned long)(a)) |
#define | virt_to_page(p) |
#define | offset_in_page(p) (((unsigned long)p) % 4096) |
#define | sg_phys(sg) |
#define | container_of(ptr, type, member) |
#define | uninitialized_var(x) x = x |
#define | likely(x) (__builtin_expect(!!(x), 1)) |
#define | unlikely(x) (__builtin_expect(!!(x), 0)) |
#define | pr_err(format,...) fprintf (stderr, format, ## __VA_ARGS__) |
#define | pr_debug(format,...) do {} while (0) |
#define | dev_err(dev, format,...) fprintf (stderr, format, ## __VA_ARGS__) |
#define | dev_warn(dev, format,...) fprintf (stderr, format, ## __VA_ARGS__) |
#define | list_add_tail(a, b) do {} while (0) |
#define | list_del(a) do {} while (0) |
#define | BIT_WORD(nr) ((nr) / BITS_PER_LONG) |
#define | BITS_PER_BYTE 8 |
#define | BITS_PER_LONG (sizeof(long) * BITS_PER_BYTE) |
#define | BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) |
#define | virtio_has_feature(dev, feature) test_bit((feature), (dev)->features) |
#define | EXPORT_SYMBOL_GPL(__EXPORT_SYMBOL_GPL_name) |
#define | MODULE_LICENSE(__MODULE_LICENSE_value) const char *__MODULE_LICENSE_name = __MODULE_LICENSE_value |
#define | CONFIG_SMP |
Typedefs | |
typedef unsigned long long | dma_addr_t |
typedef __u16 | u16 |
Enumerations | |
enum | gfp_t { GFP_KERNEL, GFP_ATOMIC } |
enum | irqreturn_t { IRQ_NONE, IRQ_HANDLED } |
Functions | |
int | virtqueue_add_buf (struct virtqueue *vq, struct scatterlist sg[], unsigned int out_num, unsigned int in_num, void *data, gfp_t gfp) |
void | virtqueue_kick (struct virtqueue *vq) |
void * | virtqueue_get_buf (struct virtqueue *vq, unsigned int *len) |
void | virtqueue_disable_cb (struct virtqueue *vq) |
bool | virtqueue_enable_cb (struct virtqueue *vq) |
bool | virtqueue_enable_cb_delayed (struct virtqueue *vq) |
void * | virtqueue_detach_unused_buf (struct virtqueue *vq) |
struct virtqueue * | vring_new_virtqueue (unsigned int num, unsigned int vring_align, struct virtio_device *vdev, bool weak_barriers, void *pages, void(*notify)(struct virtqueue *vq), void(*callback)(struct virtqueue *vq), const char *name) |
void | vring_del_virtqueue (struct virtqueue *vq) |
#define BIT_WORD | ( | nr | ) | ((nr) / BITS_PER_LONG) |
#define BITS_PER_LONG (sizeof(long) * BITS_PER_BYTE) |
#define EXPORT_SYMBOL_GPL | ( | __EXPORT_SYMBOL_GPL_name | ) |
#define sg_phys | ( | sg | ) |
#define virt_to_page | ( | p | ) |
typedef unsigned long long dma_addr_t |
enum irqreturn_t |
int virtqueue_add_buf | ( | struct virtqueue * | _vq, |
struct scatterlist | sg[], | ||
unsigned int | out, | ||
unsigned int | in, | ||
void * | data, | ||
gfp_t | gfp | ||
) |
virtqueue_add_buf - expose buffer to other end : the struct virtqueue we're talking about. : the description of the buffer(s). : the number of sg readable by other side : the number of sg which are writable (after readable ones) : the token identifying the buffer. : how to do memory allocations (if necessary).
Caller must ensure we don't call this with other virtqueue operations at the same time (except where noted).
Returns remaining capacity of queue or a negative error (ie. ENOSPC). Note that it only really makes sense to treat all positive return values as "available": indirect buffers mean that we can put an entire sg[] array inside a single queue entry.
Definition at line 201 of file virtio_ring.c.
virtqueue_detach_unused_buf - detach first unused buffer : the struct virtqueue we're talking about.
Returns NULL or the "data" token handed to virtqueue_add_buf(). This is not valid on an active queue; it is useful only for device shutdown.
Definition at line 583 of file virtio_ring.c.
virtqueue_disable_cb - disable callbacks : the struct virtqueue we're talking about.
Note that this is not necessarily synchronous, hence unreliable and only useful as an optimization.
Unlike other operations, this need not be serialized.
Definition at line 492 of file virtio_ring.c.
virtqueue_enable_cb - restart callbacks after disable_cb. : the struct virtqueue we're talking about.
This re-enables callbacks; it returns "false" if there are pending buffers in the queue, to detect a possible race between the driver checking for more work, and enabling callbacks.
Caller must ensure we don't call this with other virtqueue operations at the same time (except where noted).
Definition at line 511 of file virtio_ring.c.
virtqueue_enable_cb_delayed - restart callbacks after disable_cb. : the struct virtqueue we're talking about.
This re-enables callbacks but hints to the other side to delay interrupts until most of the available buffers have been processed; it returns "false" if there are many pending buffers in the queue, to detect a possible race between the driver checking for more work, and enabling callbacks.
Caller must ensure we don't call this with other virtqueue operations at the same time (except where noted).
Definition at line 548 of file virtio_ring.c.
virtqueue_get_buf - get the next used buffer : the struct virtqueue we're talking about. : the length written into the buffer
If the driver wrote data into the buffer, will be set to the amount written. This means you don't need to clear the buffer beforehand to ensure there's no data leakage in the case of short writes.
Caller must ensure we don't call this with other virtqueue operations at the same time (except where noted).
Returns NULL if there are no used buffers, or the "data" token handed to virtqueue_add_buf().
Definition at line 426 of file virtio_ring.c.
virtqueue_kick - update after add_buf : the struct virtqueue
After one or more virtqueue_add_buf calls, invoke this to kick the other side.
Caller must ensure we don't call this with other virtqueue operations at the same time (except where noted).
Definition at line 373 of file virtio_ring.c.
Definition at line 688 of file virtio_ring.c.