mirror of https://github.com/xemu-project/xemu.git
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)
|
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)
|
||||||
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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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[] = {
|
||||||
.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[] = {
|
||||||
.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[] = {
|
||||||
.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)
|
||||||
|
|
||||||
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 = {
|
||||||
.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(),
|
||||||
|
|
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 */
|
/* 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 {
|
||||||
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 {
|
||||||
|
|
Loading…
Reference in New Issue