mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-07-23 07:01:55 +08:00
parent
9f196b281c
commit
9fa7bcf55a
@ -165,10 +165,9 @@ nvd_completion(void *arg, const struct nvme_completion *status)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
nvd_request(struct nvd_disk *ndisk, rtems_blkdev_request *req,
|
nvd_request(struct nvd_disk *ndisk, rtems_blkdev_request *req,
|
||||||
uint32_t media_blocks_per_block)
|
uint32_t media_block_size)
|
||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
uint32_t lb_count;
|
|
||||||
uint32_t bufnum;
|
uint32_t bufnum;
|
||||||
|
|
||||||
BSD_ASSERT(req->req == RTEMS_BLKDEV_REQ_READ ||
|
BSD_ASSERT(req->req == RTEMS_BLKDEV_REQ_READ ||
|
||||||
@ -179,13 +178,15 @@ nvd_request(struct nvd_disk *ndisk, rtems_blkdev_request *req,
|
|||||||
req->status = RTEMS_SUCCESSFUL;
|
req->status = RTEMS_SUCCESSFUL;
|
||||||
bufnum = req->bufnum;
|
bufnum = req->bufnum;
|
||||||
req->bufnum |= bufnum << NVD_BUFNUM_SHIFT;
|
req->bufnum |= bufnum << NVD_BUFNUM_SHIFT;
|
||||||
lb_count = media_blocks_per_block * ndisk->lb_per_media_block;
|
|
||||||
|
|
||||||
for (i = 0; i < bufnum; ++i) {
|
for (i = 0; i < bufnum; ++i) {
|
||||||
rtems_blkdev_sg_buffer *sg;
|
rtems_blkdev_sg_buffer *sg;
|
||||||
|
uint32_t lb_count;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
sg = &req->bufs[i];
|
sg = &req->bufs[i];
|
||||||
|
lb_count = (sg->length / media_block_size) *
|
||||||
|
ndisk->lb_per_media_block;
|
||||||
|
|
||||||
if (req->req == RTEMS_BLKDEV_REQ_READ) {
|
if (req->req == RTEMS_BLKDEV_REQ_READ) {
|
||||||
error = nvme_ns_cmd_read(ndisk->ns, sg->buffer,
|
error = nvme_ns_cmd_read(ndisk->ns, sg->buffer,
|
||||||
@ -240,7 +241,7 @@ nvd_ioctl(rtems_disk_device *dd, uint32_t req, void *arg)
|
|||||||
ndisk = rtems_disk_get_driver_data(dd);
|
ndisk = rtems_disk_get_driver_data(dd);
|
||||||
|
|
||||||
if (req == RTEMS_BLKIO_REQUEST) {
|
if (req == RTEMS_BLKIO_REQUEST) {
|
||||||
return (nvd_request(ndisk, arg, dd->media_blocks_per_block));
|
return (nvd_request(ndisk, arg, dd->media_block_size));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req == RTEMS_BLKDEV_REQ_SYNC) {
|
if (req == RTEMS_BLKDEV_REQ_SYNC) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user