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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user