From patchwork Wed Aug 3 08:49:09 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 108053 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 99C68B7199 for ; Wed, 3 Aug 2011 18:50:08 +1000 (EST) Received: from localhost ([::1]:51273 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QoX9O-0006U3-Qh for incoming@patchwork.ozlabs.org; Wed, 03 Aug 2011 04:50:02 -0400 Received: from eggs.gnu.org ([140.186.70.92]:44606) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QoX8v-0005ck-Ua for qemu-devel@nongnu.org; Wed, 03 Aug 2011 04:49:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QoX8u-0003hR-DR for qemu-devel@nongnu.org; Wed, 03 Aug 2011 04:49:33 -0400 Received: from mail-ww0-f53.google.com ([74.125.82.53]:42749) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QoX8u-0003g6-4m for qemu-devel@nongnu.org; Wed, 03 Aug 2011 04:49:32 -0400 Received: by mail-ww0-f53.google.com with SMTP id 26so527679wwf.10 for ; Wed, 03 Aug 2011 01:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=sender:from:to:subject:date:message-id:x-mailer:in-reply-to :references; bh=7aNp8iKAN5uhoePE9ZlzoGlyBqNiPuPpU4GfXHM2f6A=; b=DAliWX5lgvVq5BjzRIlbZMuwo/vXpC7++zv+C8Uzv9nqUlfmE4wH6JMLVJz8mPZyX7 30w0IcuXAK7WZz1LOB5YcVHsiTMDNSYC3/KkvRUNeKUJ4MJBthp0Jdtn0DgHVpc58Ln6 Bv5E1ERgxqywhGqx+P9Z2ubuJKPR/KHaS1Lhw= Received: by 10.227.12.18 with SMTP id v18mr8075068wbv.89.1312361371563; Wed, 03 Aug 2011 01:49:31 -0700 (PDT) Received: from localhost.localdomain (93-34-199-31.ip51.fastwebnet.it [93.34.199.31]) by mx.google.com with ESMTPS id ff6sm485877wbb.66.2011.08.03.01.49.30 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 03 Aug 2011 01:49:31 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Wed, 3 Aug 2011 10:49:09 +0200 Message-Id: <1312361359-15445-7-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.7.6 In-Reply-To: <1312361359-15445-1-git-send-email-pbonzini@redhat.com> References: <1312361359-15445-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 74.125.82.53 Subject: [Qemu-devel] [PATCH 06/16] scsi: move request-related callbacks from SCSIDeviceInfo to SCSIReqOps X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Paolo Bonzini --- hw/scsi-bus.c | 20 ++++++++++---------- hw/scsi-disk.c | 24 ++++++------------------ hw/scsi-generic.c | 12 ++++++------ hw/scsi.h | 13 +++++++------ 4 files changed, 29 insertions(+), 40 deletions(-) diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index 4709b19..be73f29 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -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; } @@ -663,8 +663,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); } @@ -676,9 +676,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); } } @@ -742,8 +742,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); @@ -755,8 +755,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); } diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index 7483638..ceb0e0a 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -1223,6 +1223,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, @@ -1253,12 +1259,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), @@ -1273,12 +1273,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(), @@ -1292,12 +1286,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), diff --git a/hw/scsi-generic.c b/hw/scsi-generic.c index 87fb6ab..453a295 100644 --- a/hw/scsi-generic.c +++ b/hw/scsi-generic.c @@ -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(), diff --git a/hw/scsi.h b/hw/scsi.h index ee76c64..5c0e076 100644 --- a/hw/scsi.h +++ b/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 {