7 #define VIRTIO0 0x10001000
10 #define VIRTIO_MAGIC 0x74726976
11 #define VIRTIO_VERSION 0x1
12 #define VIRTIO_DEVICE_ID_INV 0x0
13 #define VIRTIO_DEVICE_ID_NET 0x1
14 #define VIRTIO_DEVICE_ID_BLK 0x2
15 #define VIRTIO_VENDOR_ID_QEMU 0x554d4551
17 #define VIRTIO_MMIO_MAGIC_VALUE 0x000
18 #define VIRTIO_MMIO_VERSION 0x004
19 #define VIRTIO_MMIO_DEVICE_ID 0x008
20 #define VIRTIO_MMIO_VENDOR_ID 0x00c
21 #define VIRTIO_MMIO_DEVICE_FEATURES 0x010
22 #define VIRTIO_MMIO_DRIVER_FEATURES 0x020
23 #define VIRTIO_MMIO_GUEST_PAGE_SIZE 0x028
24 #define VIRTIO_MMIO_QUEUE_SEL 0x030
25 #define VIRTIO_MMIO_QUEUE_NUM_MAX 0x034
26 #define VIRTIO_MMIO_QUEUE_NUM 0x038
27 #define VIRTIO_MMIO_QUEUE_PFN 0x040
28 #define VIRTIO_MMIO_QUEUE_READY 0x044
29 #define VIRTIO_MMIO_QUEUE_NOTIFY 0x050
30 #define VIRTIO_MMIO_INTERRUPT_STATUS 0x060
31 #define VIRTIO_MMIO_INTERRUPT_ACK 0x064
32 #define VIRTIO_MMIO_STATUS 0x070
33 #define VIRTIO_MMIO_QUEUE_DESC_LOW 0x080
34 #define VIRTIO_MMIO_QUEUE_DESC_HIGH 0x084
35 #define VIRTIO_MMIO_DRIVER_DESC_LOW 0x090
36 #define VIRTIO_MMIO_DRIVER_DESC_HIGH 0x094
37 #define VIRTIO_MMIO_DEVICE_DESC_LOW 0x0a0
38 #define VIRTIO_MMIO_DEVICE_DESC_HIGH 0x0a4
41 #define VIRTIO_CONFIG_S_ACKNOWLEDGE 1
42 #define VIRTIO_CONFIG_S_DRIVER 2
43 #define VIRTIO_CONFIG_S_DRIVER_OK 4
44 #define VIRTIO_CONFIG_S_FEATURES_OK 8
47 #define VIRTIO_BLK_F_RO 5
48 #define VIRTIO_BLK_F_SCSI 7
49 #define VIRTIO_BLK_F_CONFIG_WCE 11
50 #define VIRTIO_BLK_F_MQ 12
52 #define VIRTIO_BLK_T_IN 0
53 #define VIRTIO_BLK_T_OUT 1
55 #define VIRTIO_F_ANY_LAYOUT 27
56 #define VIRTIO_RING_F_INDIRECT_DESC 28
57 #define VIRTIO_RING_F_EVENT_IDX 29
59 #define VRING_DESC_F_NEXT 1
60 #define VRING_DESC_F_WRITE 2
68 #define MAXOPBLOCKS 10
69 #define LOGSIZE (MAXOPBLOCKS * 3)
70 #define NBUF (MAXOPBLOCKS * 3)
76 #define R(r) ((volatile uint32 *)(virtio_base + (r)))
#define NORMAL_PAGE_SIZE
Definition: pgtable.h:13
int disk
Definition: virtio.h:80
uint sectorno
Definition: virtio.h:82
char data[BSIZE]
Definition: virtio.h:87
sleep_lock_t lock
Definition: virtio.h:83
int valid
Definition: virtio.h:79
struct buf * prev
Definition: virtio.h:85
uint refcnt
Definition: virtio.h:84
struct buf * next
Definition: virtio.h:86
uint dev
Definition: virtio.h:81
vring_used_area_t * used
Definition: virtio.h:116
struct buf * b
Definition: virtio.h:126
uint16 * avail
Definition: virtio.h:115
char free[DESC_NUM]
Definition: virtio.h:119
uint16 used_idx
Definition: virtio.h:120
spin_lock_t vdisk_lock
Definition: virtio.h:130
char pages[2 *NORMAL_PAGE_SIZE]
Definition: virtio.h:113
vring_desc_t * desc
Definition: virtio.h:114
struct disk::@0 info[DESC_NUM]
char status
Definition: virtio.h:127
uint16 flags
Definition: virtio.h:93
uint32 len
Definition: virtio.h:92
uint16 next
Definition: virtio.h:94
uint64 addr
Definition: virtio.h:91
uint16 id
Definition: virtio.h:104
vring_used_elem_t elems[DESC_NUM]
Definition: virtio.h:105
uint16 flags
Definition: virtio.h:103
uint32 id
Definition: virtio.h:98
uint32 len
Definition: virtio.h:99
unsigned short uint16
Definition: types.h:35
unsigned int uint32
Definition: types.h:37
unsigned long long uint64
Definition: types.h:39
unsigned int uint
Definition: types.h:40
uint64 uintptr_t
Definition: types.h:47
struct buf * d_bread(uint, uint)
Definition: virtio_blk.c:274
void d_sd_read(char *buffers, uint *start_block_id, uint block_num)
Definition: virtio_blk.c:330
void d_bwrite(struct buf *)
Definition: virtio_blk.c:287
void d_sd_write(char *buffers, uint *start_block_ids, uint block_num)
Definition: virtio_blk.c:339
#define BSIZE
Definition: virtio.h:65
#define DESC_NUM
Definition: virtio.h:64
struct vring_used_elem vring_used_elem_t
struct vring_used_area vring_used_area_t
void d_virtio_disk_rw(struct buf *b, int write)
Definition: virtio_blk.c:118
struct vring_desc_t vring_desc_t
void d_binit(void)
Definition: virtio_blk.c:218
void d_virtio_disk_intr(void)
void d_virtio_disk_init(void)
void d_brelse(struct buf *)
Definition: virtio_blk.c:296