未验证 提交 3c30bdc5 编写于 作者: B bernard 提交者: Gitee

!573 Fixup virtio-blk with fs interface

Merge pull request !573 from GUI/rt-smart
...@@ -21,7 +21,7 @@ static void virtio_blk_rw(struct virtio_blk_device *virtio_blk_dev, rt_off_t pos ...@@ -21,7 +21,7 @@ static void virtio_blk_rw(struct virtio_blk_device *virtio_blk_dev, rt_off_t pos
int flags) int flags)
{ {
rt_uint16_t idx[3]; rt_uint16_t idx[3];
rt_size_t size = count * VIRTIO_BLK_BUF_DATA_SIZE; rt_size_t size = count * virtio_blk_dev->config->blk_size;
struct virtio_device *virtio_dev = &virtio_blk_dev->virtio_dev; struct virtio_device *virtio_dev = &virtio_blk_dev->virtio_dev;
#ifdef RT_USING_SMP #ifdef RT_USING_SMP
...@@ -45,7 +45,7 @@ static void virtio_blk_rw(struct virtio_blk_device *virtio_blk_dev, rt_off_t pos ...@@ -45,7 +45,7 @@ static void virtio_blk_rw(struct virtio_blk_device *virtio_blk_dev, rt_off_t pos
virtio_blk_dev->info[idx[0]].valid = RT_TRUE; virtio_blk_dev->info[idx[0]].valid = RT_TRUE;
virtio_blk_dev->info[idx[0]].req.type = flags; virtio_blk_dev->info[idx[0]].req.type = flags;
virtio_blk_dev->info[idx[0]].req.ioprio = 0; virtio_blk_dev->info[idx[0]].req.ioprio = 0;
virtio_blk_dev->info[idx[0]].req.sector = pos * count; virtio_blk_dev->info[idx[0]].req.sector = pos * (virtio_blk_dev->config->blk_size / 512);
flags = flags == VIRTIO_BLK_T_OUT ? 0 : VIRTQ_DESC_F_WRITE; flags = flags == VIRTIO_BLK_T_OUT ? 0 : VIRTQ_DESC_F_WRITE;
...@@ -114,7 +114,7 @@ static rt_err_t virtio_blk_control(rt_device_t dev, int cmd, void *args) ...@@ -114,7 +114,7 @@ static rt_err_t virtio_blk_control(rt_device_t dev, int cmd, void *args)
} }
geometry->bytes_per_sector = VIRTIO_BLK_BYTES_PER_SECTOR; geometry->bytes_per_sector = VIRTIO_BLK_BYTES_PER_SECTOR;
geometry->block_size = VIRTIO_BLK_BLOCK_SIZE; geometry->block_size = virtio_blk_dev->config->blk_size;
geometry->sector_count = virtio_blk_dev->config->capacity; geometry->sector_count = virtio_blk_dev->config->capacity;
} }
break; break;
......
...@@ -17,9 +17,7 @@ ...@@ -17,9 +17,7 @@
#include <virtio.h> #include <virtio.h>
#define VIRTIO_BLK_QUEUE 0 #define VIRTIO_BLK_QUEUE 0
#define VIRTIO_BLK_BUF_DATA_SIZE 512
#define VIRTIO_BLK_BYTES_PER_SECTOR 512 #define VIRTIO_BLK_BYTES_PER_SECTOR 512
#define VIRTIO_BLK_BLOCK_SIZE 512
#define VIRTIO_BLK_QUEUE_RING_SIZE 4 #define VIRTIO_BLK_QUEUE_RING_SIZE 4
#define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */
...@@ -43,10 +41,11 @@ struct virtio_blk_req ...@@ -43,10 +41,11 @@ struct virtio_blk_req
struct virtio_blk_config struct virtio_blk_config
{ {
rt_uint64_t capacity; rt_uint64_t capacity; /* The capacity (in 512-byte sectors). */
rt_uint32_t size_max; rt_uint32_t size_max; /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */
rt_uint32_t seg_max; rt_uint32_t seg_max; /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */
/* Geometry of the device (if VIRTIO_BLK_F_GEOMETRY) */
struct virtio_blk_geometry struct virtio_blk_geometry
{ {
rt_uint16_t cylinders; rt_uint16_t cylinders;
...@@ -54,7 +53,7 @@ struct virtio_blk_config ...@@ -54,7 +53,7 @@ struct virtio_blk_config
rt_uint8_t sectors; rt_uint8_t sectors;
} geometry; } geometry;
rt_uint32_t blk_size; rt_uint32_t blk_size; /* Block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
struct virtio_blk_topology struct virtio_blk_topology
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册