Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Typedefs | Enumerations | Functions
virtio.h File Reference
#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)
 
voidvirtqueue_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)
 
voidvirtqueue_detach_unused_buf (struct virtqueue *vq)
 
struct virtqueuevring_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)
 

Macro Definition Documentation

#define BIT_MASK (   nr)    (1UL << ((nr) % BITS_PER_LONG))

Definition at line 133 of file virtio.h.

#define BIT_WORD (   nr)    ((nr) / BITS_PER_LONG)

Definition at line 130 of file virtio.h.

#define BITS_PER_BYTE   8

Definition at line 131 of file virtio.h.

#define BITS_PER_LONG   (sizeof(long) * BITS_PER_BYTE)

Definition at line 132 of file virtio.h.

#define BUG_ON (   __BUG_ON_cond)    assert(!(__BUG_ON_cond))

Definition at line 27 of file virtio.h.

#define CONFIG_SMP

Definition at line 175 of file virtio.h.

#define container_of (   ptr,
  type,
  member 
)
Value:
({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})

Definition at line 104 of file virtio.h.

#define dev_err (   dev,
  format,
  ... 
)    fprintf (stderr, format, ## __VA_ARGS__)

Definition at line 123 of file virtio.h.

#define dev_warn (   dev,
  format,
  ... 
)    fprintf (stderr, format, ## __VA_ARGS__)

Definition at line 124 of file virtio.h.

#define EXPORT_SYMBOL_GPL (   __EXPORT_SYMBOL_GPL_name)
Value:
void __EXPORT_SYMBOL_GPL##__EXPORT_SYMBOL_GPL_name() { \
}

Definition at line 169 of file virtio.h.

#define likely (   x)    (__builtin_expect(!!(x), 1))

Definition at line 111 of file virtio.h.

#define list_add_tail (   a,
  b 
)    do {} while (0)

Definition at line 127 of file virtio.h.

#define list_del (   a)    do {} while (0)

Definition at line 128 of file virtio.h.

#define MODULE_LICENSE (   __MODULE_LICENSE_value)    const char *__MODULE_LICENSE_name = __MODULE_LICENSE_value

Definition at line 172 of file virtio.h.

#define offset_in_page (   p)    (((unsigned long)p) % 4096)

Definition at line 35 of file virtio.h.

#define phys_to_virt (   a)    ((void *)(unsigned long)(a))

Definition at line 31 of file virtio.h.

#define pr_debug (   format,
  ... 
)    do {} while (0)

Definition at line 121 of file virtio.h.

#define pr_err (   format,
  ... 
)    fprintf (stderr, format, ## __VA_ARGS__)

Definition at line 117 of file virtio.h.

#define sg_phys (   sg)
Value:
((sg->page_link & ~0x3) / sizeof(struct page) * 4096 + \
sg->offset)

Definition at line 36 of file virtio.h.

#define uninitialized_var (   x)    x = x

Definition at line 108 of file virtio.h.

#define unlikely (   x)    (__builtin_expect(!!(x), 0))

Definition at line 114 of file virtio.h.

#define virt_to_page (   p)
Value:
((struct page*)((virt_to_phys(p) / 4096) * \
sizeof(struct page)))

Definition at line 33 of file virtio.h.

#define virt_to_phys (   p)    ((unsigned long)p)

Definition at line 30 of file virtio.h.

#define virtio_has_feature (   dev,
  feature 
)    test_bit((feature), (dev)->features)

Definition at line 150 of file virtio.h.

Typedef Documentation

typedef unsigned long long dma_addr_t

Definition at line 14 of file virtio.h.

typedef __u16 u16

Definition at line 83 of file virtio.h.

Enumeration Type Documentation

enum gfp_t
Enumerator:
GFP_KERNEL 
GFP_ATOMIC 

Definition at line 85 of file virtio.h.

Enumerator:
IRQ_NONE 
IRQ_HANDLED 

Definition at line 89 of file virtio.h.

Function Documentation

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.

void* virtqueue_detach_unused_buf ( struct virtqueue _vq)

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.

void virtqueue_disable_cb ( struct virtqueue _vq)

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.

bool virtqueue_enable_cb ( struct virtqueue _vq)

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.

bool virtqueue_enable_cb_delayed ( struct virtqueue _vq)

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.

void* virtqueue_get_buf ( struct virtqueue _vq,
unsigned int len 
)

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.

void virtqueue_kick ( struct virtqueue vq)

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.

void vring_del_virtqueue ( struct virtqueue vq)

Definition at line 688 of file virtio_ring.c.

struct virtqueue* vring_new_virtqueue ( unsigned int  num,
unsigned int  vring_align,
struct virtio_device vdev,
bool  weak_barriers,
void pages,
void(*)(struct virtqueue *vq)  notify,
void(*)(struct virtqueue *vq)  callback,
const char name 
)
read