eda8b48a07261be7f6e52322310e7456806712ea
[barrelfish] / include / virtio / virtio.h
1 /*
2  * Copyright (c) 2014 ETH Zurich.
3  * All rights reserved.
4  *
5  * This file is distributed under the terms in the attached LICENSE file.
6  * If you do not find this file, copies can be found by writing to:
7  * ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8  */
9
10 #ifndef VIRTIO_H
11 #define VIRTIO_H
12
13 #include <barrelfish/barrelfish.h>
14
15
16 /// defines how we map the memory frames
17 #define VIRTIO_VREGION_FLAGS_DEVICE VREGION_FLAGS_READ_WRITE
18 #define VIRTIO_VREGION_FLAGS_RING VREGION_FLAGS_READ_WRITE
19
20
21 /*
22  * Generic Feature Bits
23  */
24
25 /// Generate interrupt if queue is completely used
26 #define VIRTIO_F_NOTIFY_ON_EMPTY (1 << 24)
27
28 /// guest should never set this feature. This indicates faulty drivers
29 #define VIRTIO_F_BAD_FEATURE (1 << 30)
30
31 /// range of the transport related feature bits
32 #define VIRTIO_TRANSPORT_F_START    28
33 #define VIRTIO_TRANSPORT_F_END      32
34
35
36
37 /**
38  * \brief initializes the library for host side operation
39  *
40  * \param guest_base    base address of the guest physical memory
41  * \param guest_size    size of the guest physical memory
42  */
43 errval_t virtio_host_init(lpaddr_t guest_base,
44                           lpaddr_t guest_size);
45
46
47 /**
48  * \brief this struct represents a virtio driver
49  *
50  * This can be seen as on the guest side of the virtio channel
51  */
52 struct virtio_driver
53 {
54     void *device_config;
55
56
57 };
58
59
60 /**
61  * VirtIO Memory segment
62  */
63
64 enum virtio_buffer_state {
65
66 };
67
68 struct virtio_buffer
69 {
70     enum virtio_buffer_state state;
71
72     struct virtio_buffer_head *head;
73     struct virtio_buffer *next;
74 };
75
76 struct virtio_buffer_head
77 {
78     struct virtio_buffer *head;
79     struct virtio_buffer *tail;
80     size_t length;
81 };
82
83
84 errval_t virtio_buffer_alloc_init(struct virtio_buffer_allocator *alloc,
85                                   uint16_t nbufs);
86
87 errval_t virtio_buffer_alloc(void);
88 errval_t virtio_buffer_free(void);
89
90
91 errval_t virtio_buffer_list_reset(void);
92 errval_t virtio_buffer_list_append(void);
93
94
95
96
97
98 #endif // VIRTIO_H