00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef _QEMU_VIRTIO_BLK_H
00015 #define _QEMU_VIRTIO_BLK_H
00016
00017 #include "virtio.h"
00018 #include "block.h"
00019 #include "pci.h"
00020
00021
00022
00023
00024 #define VIRTIO_ID_BLOCK 2
00025
00026
00027 #define VIRTIO_BLK_F_BARRIER 0
00028 #define VIRTIO_BLK_F_SIZE_MAX 1
00029 #define VIRTIO_BLK_F_SEG_MAX 2
00030 #define VIRTIO_BLK_F_GEOMETRY 4
00031
00032 struct virtio_blk_config
00033 {
00034 uint64_t capacity;
00035 uint32_t size_max;
00036 uint32_t seg_max;
00037 uint16_t cylinders;
00038 uint8_t heads;
00039 uint8_t sectors;
00040 } __attribute__((packed));
00041
00042
00043 #define VIRTIO_BLK_T_IN 0
00044 #define VIRTIO_BLK_T_OUT 1
00045
00046
00047 #define VIRTIO_BLK_T_SCSI_CMD 2
00048
00049
00050 #define VIRTIO_BLK_T_BARRIER 0x80000000
00051
00052
00053 struct virtio_blk_outhdr
00054 {
00055
00056 uint32_t type;
00057
00058 uint32_t ioprio;
00059
00060 uint64_t sector;
00061 };
00062
00063 #define VIRTIO_BLK_S_OK 0
00064 #define VIRTIO_BLK_S_IOERR 1
00065 #define VIRTIO_BLK_S_UNSUPP 2
00066
00067
00068 struct virtio_blk_inhdr
00069 {
00070 unsigned char status;
00071 };
00072
00073 void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs);
00074
00075 #endif