提交 12010e7b 编写于 作者: P Paolo Bonzini 提交者: Anthony Liguori

scsi: move request-related callbacks from SCSIDeviceInfo to SCSIReqOps

Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 8dbd4574
...@@ -160,7 +160,7 @@ SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun, ...@@ -160,7 +160,7 @@ SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun,
uint8_t *scsi_req_get_buf(SCSIRequest *req) uint8_t *scsi_req_get_buf(SCSIRequest *req)
{ {
return req->dev->info->get_buf(req); return req->ops->get_buf(req);
} }
int scsi_req_get_sense(SCSIRequest *req, uint8_t *buf, int len) int scsi_req_get_sense(SCSIRequest *req, uint8_t *buf, int len)
...@@ -199,7 +199,7 @@ int32_t scsi_req_enqueue(SCSIRequest *req, uint8_t *buf) ...@@ -199,7 +199,7 @@ int32_t scsi_req_enqueue(SCSIRequest *req, uint8_t *buf)
QTAILQ_INSERT_TAIL(&req->dev->requests, req, next); QTAILQ_INSERT_TAIL(&req->dev->requests, req, next);
scsi_req_ref(req); scsi_req_ref(req);
rc = req->dev->info->send_command(req, buf); rc = req->ops->send_command(req, buf);
scsi_req_unref(req); scsi_req_unref(req);
return rc; return rc;
} }
...@@ -673,8 +673,8 @@ SCSIRequest *scsi_req_ref(SCSIRequest *req) ...@@ -673,8 +673,8 @@ SCSIRequest *scsi_req_ref(SCSIRequest *req)
void scsi_req_unref(SCSIRequest *req) void scsi_req_unref(SCSIRequest *req)
{ {
if (--req->refcount == 0) { if (--req->refcount == 0) {
if (req->dev->info->free_req) { if (req->ops->free_req) {
req->dev->info->free_req(req); req->ops->free_req(req);
} }
qemu_free(req); qemu_free(req);
} }
...@@ -686,9 +686,9 @@ void scsi_req_continue(SCSIRequest *req) ...@@ -686,9 +686,9 @@ void scsi_req_continue(SCSIRequest *req)
{ {
trace_scsi_req_continue(req->dev->id, req->lun, req->tag); trace_scsi_req_continue(req->dev->id, req->lun, req->tag);
if (req->cmd.mode == SCSI_XFER_TO_DEV) { if (req->cmd.mode == SCSI_XFER_TO_DEV) {
req->dev->info->write_data(req); req->ops->write_data(req);
} else { } else {
req->dev->info->read_data(req); req->ops->read_data(req);
} }
} }
...@@ -752,8 +752,8 @@ void scsi_req_complete(SCSIRequest *req, int status) ...@@ -752,8 +752,8 @@ void scsi_req_complete(SCSIRequest *req, int status)
void scsi_req_cancel(SCSIRequest *req) void scsi_req_cancel(SCSIRequest *req)
{ {
if (req->dev && req->dev->info->cancel_io) { if (req->ops->cancel_io) {
req->dev->info->cancel_io(req); req->ops->cancel_io(req);
} }
scsi_req_ref(req); scsi_req_ref(req);
scsi_req_dequeue(req); scsi_req_dequeue(req);
...@@ -765,8 +765,8 @@ void scsi_req_cancel(SCSIRequest *req) ...@@ -765,8 +765,8 @@ void scsi_req_cancel(SCSIRequest *req)
void scsi_req_abort(SCSIRequest *req, int status) void scsi_req_abort(SCSIRequest *req, int status)
{ {
if (req->dev && req->dev->info->cancel_io) { if (req->ops->cancel_io) {
req->dev->info->cancel_io(req); req->ops->cancel_io(req);
} }
scsi_req_complete(req, status); scsi_req_complete(req, status);
} }
......
...@@ -1214,6 +1214,12 @@ static int scsi_disk_initfn(SCSIDevice *dev) ...@@ -1214,6 +1214,12 @@ static int scsi_disk_initfn(SCSIDevice *dev)
static SCSIReqOps scsi_disk_reqops = { static SCSIReqOps scsi_disk_reqops = {
.size = sizeof(SCSIDiskReq), .size = sizeof(SCSIDiskReq),
.free_req = scsi_free_request,
.send_command = scsi_send_command,
.read_data = scsi_read_data,
.write_data = scsi_write_data,
.cancel_io = scsi_cancel_io,
.get_buf = scsi_get_buf,
}; };
static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag,
...@@ -1244,12 +1250,6 @@ static SCSIDeviceInfo scsi_disk_info[] = { ...@@ -1244,12 +1250,6 @@ static SCSIDeviceInfo scsi_disk_info[] = {
.init = scsi_hd_initfn, .init = scsi_hd_initfn,
.destroy = scsi_destroy, .destroy = scsi_destroy,
.alloc_req = scsi_new_request, .alloc_req = scsi_new_request,
.free_req = scsi_free_request,
.send_command = scsi_send_command,
.read_data = scsi_read_data,
.write_data = scsi_write_data,
.cancel_io = scsi_cancel_io,
.get_buf = scsi_get_buf,
.qdev.props = (Property[]) { .qdev.props = (Property[]) {
DEFINE_SCSI_DISK_PROPERTIES(), DEFINE_SCSI_DISK_PROPERTIES(),
DEFINE_PROP_BIT("removable", SCSIDiskState, removable, 0, false), DEFINE_PROP_BIT("removable", SCSIDiskState, removable, 0, false),
...@@ -1264,12 +1264,6 @@ static SCSIDeviceInfo scsi_disk_info[] = { ...@@ -1264,12 +1264,6 @@ static SCSIDeviceInfo scsi_disk_info[] = {
.init = scsi_cd_initfn, .init = scsi_cd_initfn,
.destroy = scsi_destroy, .destroy = scsi_destroy,
.alloc_req = scsi_new_request, .alloc_req = scsi_new_request,
.free_req = scsi_free_request,
.send_command = scsi_send_command,
.read_data = scsi_read_data,
.write_data = scsi_write_data,
.cancel_io = scsi_cancel_io,
.get_buf = scsi_get_buf,
.qdev.props = (Property[]) { .qdev.props = (Property[]) {
DEFINE_SCSI_DISK_PROPERTIES(), DEFINE_SCSI_DISK_PROPERTIES(),
DEFINE_PROP_END_OF_LIST(), DEFINE_PROP_END_OF_LIST(),
...@@ -1283,12 +1277,6 @@ static SCSIDeviceInfo scsi_disk_info[] = { ...@@ -1283,12 +1277,6 @@ static SCSIDeviceInfo scsi_disk_info[] = {
.init = scsi_disk_initfn, .init = scsi_disk_initfn,
.destroy = scsi_destroy, .destroy = scsi_destroy,
.alloc_req = scsi_new_request, .alloc_req = scsi_new_request,
.free_req = scsi_free_request,
.send_command = scsi_send_command,
.read_data = scsi_read_data,
.write_data = scsi_write_data,
.cancel_io = scsi_cancel_io,
.get_buf = scsi_get_buf,
.qdev.props = (Property[]) { .qdev.props = (Property[]) {
DEFINE_SCSI_DISK_PROPERTIES(), DEFINE_SCSI_DISK_PROPERTIES(),
DEFINE_PROP_BIT("removable", SCSIDiskState, removable, 0, false), DEFINE_PROP_BIT("removable", SCSIDiskState, removable, 0, false),
......
...@@ -491,6 +491,12 @@ static int scsi_generic_initfn(SCSIDevice *dev) ...@@ -491,6 +491,12 @@ static int scsi_generic_initfn(SCSIDevice *dev)
static SCSIReqOps scsi_generic_req_ops = { static SCSIReqOps scsi_generic_req_ops = {
.size = sizeof(SCSIGenericReq), .size = sizeof(SCSIGenericReq),
.free_req = scsi_free_request,
.send_command = scsi_send_command,
.read_data = scsi_read_data,
.write_data = scsi_write_data,
.cancel_io = scsi_cancel_io,
.get_buf = scsi_get_buf,
}; };
static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun, static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun,
...@@ -510,12 +516,6 @@ static SCSIDeviceInfo scsi_generic_info = { ...@@ -510,12 +516,6 @@ static SCSIDeviceInfo scsi_generic_info = {
.init = scsi_generic_initfn, .init = scsi_generic_initfn,
.destroy = scsi_destroy, .destroy = scsi_destroy,
.alloc_req = scsi_new_request, .alloc_req = scsi_new_request,
.free_req = scsi_free_request,
.send_command = scsi_send_command,
.read_data = scsi_read_data,
.write_data = scsi_write_data,
.cancel_io = scsi_cancel_io,
.get_buf = scsi_get_buf,
.qdev.props = (Property[]) { .qdev.props = (Property[]) {
DEFINE_BLOCK_PROPERTIES(SCSIGenericState, qdev.conf), DEFINE_BLOCK_PROPERTIES(SCSIGenericState, qdev.conf),
DEFINE_PROP_END_OF_LIST(), DEFINE_PROP_END_OF_LIST(),
......
...@@ -73,6 +73,12 @@ int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num); ...@@ -73,6 +73,12 @@ int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num);
/* scsi-bus.c */ /* scsi-bus.c */
struct SCSIReqOps { struct SCSIReqOps {
size_t size; size_t size;
void (*free_req)(SCSIRequest *req);
int32_t (*send_command)(SCSIRequest *req, uint8_t *buf);
void (*read_data)(SCSIRequest *req);
void (*write_data)(SCSIRequest *req);
void (*cancel_io)(SCSIRequest *req);
uint8_t *(*get_buf)(SCSIRequest *req);
}; };
typedef int (*scsi_qdev_initfn)(SCSIDevice *dev); typedef int (*scsi_qdev_initfn)(SCSIDevice *dev);
...@@ -82,12 +88,7 @@ struct SCSIDeviceInfo { ...@@ -82,12 +88,7 @@ struct SCSIDeviceInfo {
void (*destroy)(SCSIDevice *s); void (*destroy)(SCSIDevice *s);
SCSIRequest *(*alloc_req)(SCSIDevice *s, uint32_t tag, uint32_t lun, SCSIRequest *(*alloc_req)(SCSIDevice *s, uint32_t tag, uint32_t lun,
void *hba_private); void *hba_private);
void (*free_req)(SCSIRequest *req); SCSIReqOps reqops;
int32_t (*send_command)(SCSIRequest *req, uint8_t *buf);
void (*read_data)(SCSIRequest *req);
void (*write_data)(SCSIRequest *req);
void (*cancel_io)(SCSIRequest *req);
uint8_t *(*get_buf)(SCSIRequest *req);
}; };
struct SCSIBusOps { struct SCSIBusOps {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册