From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Lhr1n-0002kq-NW for qemu-devel@nongnu.org; Thu, 12 Mar 2009 15:57:15 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Lhr1m-0002kO-UP for qemu-devel@nongnu.org; Thu, 12 Mar 2009 15:57:15 -0400 Received: from [199.232.76.173] (port=59023 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Lhr1m-0002kJ-Ps for qemu-devel@nongnu.org; Thu, 12 Mar 2009 15:57:14 -0400 Received: from savannah.gnu.org ([199.232.41.3]:49571 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Lhr1m-00037p-CD for qemu-devel@nongnu.org; Thu, 12 Mar 2009 15:57:14 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Lhr1l-00030W-Jm for qemu-devel@nongnu.org; Thu, 12 Mar 2009 19:57:13 +0000 Received: from aliguori by cvs.savannah.gnu.org with local (Exim 4.69) (envelope-from ) id 1Lhr1l-00030O-Ao for qemu-devel@nongnu.org; Thu, 12 Mar 2009 19:57:13 +0000 MIME-Version: 1.0 Errors-To: aliguori Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Anthony Liguori Message-Id: Date: Thu, 12 Mar 2009 19:57:13 +0000 Subject: [Qemu-devel] [6823] Add internal scsi generic block API (Avi Kivity) Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6823 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6823 Author: aliguori Date: 2009-03-12 19:57:12 +0000 (Thu, 12 Mar 2009) Log Message: ----------- Add internal scsi generic block API (Avi Kivity) Add an internal API for the generic block layer to send scsi generic commands to block format driver. This means block format drivers no longer need to consider overloaded nb_sectors parameters. Signed-off-by: Avi Kivity Signed-off-by: Anthony Liguori Modified Paths: -------------- trunk/block-raw-posix.c trunk/block.c trunk/block_int.h Modified: trunk/block-raw-posix.c =================================================================== --- trunk/block-raw-posix.c 2009-03-12 19:57:08 UTC (rev 6822) +++ trunk/block-raw-posix.c 2009-03-12 19:57:12 UTC (rev 6823) @@ -1179,6 +1179,32 @@ } #endif /* !linux */ +static int raw_sg_send_command(BlockDriverState *bs, void *buf, int count) +{ + return raw_pwrite(bs, -1, buf, count); +} + +static int raw_sg_recv_response(BlockDriverState *bs, void *buf, int count) +{ + return raw_pread(bs, -1, buf, count); +} + +static BlockDriverAIOCB *raw_sg_aio_read(BlockDriverState *bs, + void *buf, int count, + BlockDriverCompletionFunc *cb, + void *opaque) +{ + return raw_aio_read(bs, 0, buf, -(int64_t)count, cb, opaque); +} + +static BlockDriverAIOCB *raw_sg_aio_write(BlockDriverState *bs, + void *buf, int count, + BlockDriverCompletionFunc *cb, + void *opaque) +{ + return raw_aio_write(bs, 0, buf, -(int64_t)count, cb, opaque); +} + BlockDriver bdrv_host_device = { .format_name = "host_device", .instance_size = sizeof(BDRVRawState), @@ -1204,4 +1230,8 @@ .bdrv_set_locked = raw_set_locked, /* generic scsi device */ .bdrv_ioctl = raw_ioctl, + .bdrv_sg_send_command = raw_sg_send_command, + .bdrv_sg_recv_response = raw_sg_recv_response, + .bdrv_sg_aio_read = raw_sg_aio_read, + .bdrv_sg_aio_write = raw_sg_aio_write, }; Modified: trunk/block.c =================================================================== --- trunk/block.c 2009-03-12 19:57:08 UTC (rev 6822) +++ trunk/block.c 2009-03-12 19:57:12 UTC (rev 6823) @@ -1678,22 +1678,22 @@ int bdrv_sg_send_command(BlockDriverState *bs, void *buf, int count) { - return bdrv_pwrite(bs, -1, buf, count); + return bs->drv->bdrv_sg_send_command(bs, buf, count); } int bdrv_sg_recv_response(BlockDriverState *bs, void *buf, int count) { - return bdrv_pread(bs, -1, buf, count); + return bs->drv->bdrv_sg_recv_response(bs, buf, count); } BlockDriverAIOCB *bdrv_sg_aio_read(BlockDriverState *bs, void *buf, int count, BlockDriverCompletionFunc *cb, void *opaque) { - return bdrv_aio_read(bs, 0, buf, -(int64_t)count, cb, opaque); + return bs->drv->bdrv_sg_aio_read(bs, buf, count, cb, opaque); } BlockDriverAIOCB *bdrv_sg_aio_write(BlockDriverState *bs, void *buf, int count, BlockDriverCompletionFunc *cb, void *opaque) { - return bdrv_aio_write(bs, 0, buf, -(int64_t)count, cb, opaque); + return bs->drv->bdrv_sg_aio_write(bs, buf, count, cb, opaque); } Modified: trunk/block_int.h =================================================================== --- trunk/block_int.h 2009-03-12 19:57:08 UTC (rev 6822) +++ trunk/block_int.h 2009-03-12 19:57:12 UTC (rev 6823) @@ -84,6 +84,16 @@ /* to control generic scsi devices */ int (*bdrv_ioctl)(BlockDriverState *bs, unsigned long int req, void *buf); + int (*bdrv_sg_send_command)(BlockDriverState *bs, void *buf, int count); + int (*bdrv_sg_recv_response)(BlockDriverState *bs, void *buf, int count); + BlockDriverAIOCB *(*bdrv_sg_aio_read)(BlockDriverState *bs, + void *buf, int count, + BlockDriverCompletionFunc *cb, + void *opaque); + BlockDriverAIOCB *(*bdrv_sg_aio_write)(BlockDriverState *bs, + void *buf, int count, + BlockDriverCompletionFunc *cb, + void *opaque); BlockDriverAIOCB *free_aiocb; struct BlockDriver *next;