scsi: move request-related callbacks from SCSIDeviceInfo to SCSIReqOps
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
8dbd457488
commit
12010e7b29
@ -160,7 +160,7 @@ SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun,
|
||||
|
||||
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)
|
||||
@ -199,7 +199,7 @@ int32_t scsi_req_enqueue(SCSIRequest *req, uint8_t *buf)
|
||||
QTAILQ_INSERT_TAIL(&req->dev->requests, req, next);
|
||||
|
||||
scsi_req_ref(req);
|
||||
rc = req->dev->info->send_command(req, buf);
|
||||
rc = req->ops->send_command(req, buf);
|
||||
scsi_req_unref(req);
|
||||
return rc;
|
||||
}
|
||||
@ -673,8 +673,8 @@ SCSIRequest *scsi_req_ref(SCSIRequest *req)
|
||||
void scsi_req_unref(SCSIRequest *req)
|
||||
{
|
||||
if (--req->refcount == 0) {
|
||||
if (req->dev->info->free_req) {
|
||||
req->dev->info->free_req(req);
|
||||
if (req->ops->free_req) {
|
||||
req->ops->free_req(req);
|
||||
}
|
||||
qemu_free(req);
|
||||
}
|
||||
@ -686,9 +686,9 @@ void scsi_req_continue(SCSIRequest *req)
|
||||
{
|
||||
trace_scsi_req_continue(req->dev->id, req->lun, req->tag);
|
||||
if (req->cmd.mode == SCSI_XFER_TO_DEV) {
|
||||
req->dev->info->write_data(req);
|
||||
req->ops->write_data(req);
|
||||
} else {
|
||||
req->dev->info->read_data(req);
|
||||
req->ops->read_data(req);
|
||||
}
|
||||
}
|
||||
|
||||
@ -752,8 +752,8 @@ void scsi_req_complete(SCSIRequest *req, int status)
|
||||
|
||||
void scsi_req_cancel(SCSIRequest *req)
|
||||
{
|
||||
if (req->dev && req->dev->info->cancel_io) {
|
||||
req->dev->info->cancel_io(req);
|
||||
if (req->ops->cancel_io) {
|
||||
req->ops->cancel_io(req);
|
||||
}
|
||||
scsi_req_ref(req);
|
||||
scsi_req_dequeue(req);
|
||||
@ -765,8 +765,8 @@ void scsi_req_cancel(SCSIRequest *req)
|
||||
|
||||
void scsi_req_abort(SCSIRequest *req, int status)
|
||||
{
|
||||
if (req->dev && req->dev->info->cancel_io) {
|
||||
req->dev->info->cancel_io(req);
|
||||
if (req->ops->cancel_io) {
|
||||
req->ops->cancel_io(req);
|
||||
}
|
||||
scsi_req_complete(req, status);
|
||||
}
|
||||
|
@ -1214,6 +1214,12 @@ static int scsi_disk_initfn(SCSIDevice *dev)
|
||||
|
||||
static SCSIReqOps scsi_disk_reqops = {
|
||||
.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,
|
||||
@ -1244,12 +1250,6 @@ static SCSIDeviceInfo scsi_disk_info[] = {
|
||||
.init = scsi_hd_initfn,
|
||||
.destroy = scsi_destroy,
|
||||
.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[]) {
|
||||
DEFINE_SCSI_DISK_PROPERTIES(),
|
||||
DEFINE_PROP_BIT("removable", SCSIDiskState, removable, 0, false),
|
||||
@ -1264,12 +1264,6 @@ static SCSIDeviceInfo scsi_disk_info[] = {
|
||||
.init = scsi_cd_initfn,
|
||||
.destroy = scsi_destroy,
|
||||
.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[]) {
|
||||
DEFINE_SCSI_DISK_PROPERTIES(),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
@ -1283,12 +1277,6 @@ static SCSIDeviceInfo scsi_disk_info[] = {
|
||||
.init = scsi_disk_initfn,
|
||||
.destroy = scsi_destroy,
|
||||
.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[]) {
|
||||
DEFINE_SCSI_DISK_PROPERTIES(),
|
||||
DEFINE_PROP_BIT("removable", SCSIDiskState, removable, 0, false),
|
||||
|
@ -491,6 +491,12 @@ static int scsi_generic_initfn(SCSIDevice *dev)
|
||||
|
||||
static SCSIReqOps scsi_generic_req_ops = {
|
||||
.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,
|
||||
@ -510,12 +516,6 @@ static SCSIDeviceInfo scsi_generic_info = {
|
||||
.init = scsi_generic_initfn,
|
||||
.destroy = scsi_destroy,
|
||||
.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[]) {
|
||||
DEFINE_BLOCK_PROPERTIES(SCSIGenericState, qdev.conf),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
|
13
hw/scsi.h
13
hw/scsi.h
@ -73,6 +73,12 @@ int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num);
|
||||
/* scsi-bus.c */
|
||||
struct SCSIReqOps {
|
||||
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);
|
||||
@ -82,12 +88,7 @@ struct SCSIDeviceInfo {
|
||||
void (*destroy)(SCSIDevice *s);
|
||||
SCSIRequest *(*alloc_req)(SCSIDevice *s, uint32_t tag, uint32_t lun,
|
||||
void *hba_private);
|
||||
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);
|
||||
SCSIReqOps reqops;
|
||||
};
|
||||
|
||||
struct SCSIBusOps {
|
||||
|
Loading…
x
Reference in New Issue
Block a user