From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38477) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZxKm6-0006dV-MS for qemu-devel@nongnu.org; Fri, 13 Nov 2015 15:16:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZxKm4-00051S-3T for qemu-devel@nongnu.org; Fri, 13 Nov 2015 15:16:46 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39610) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZxKm3-00051O-US for qemu-devel@nongnu.org; Fri, 13 Nov 2015 15:16:44 -0500 From: John Snow Date: Fri, 13 Nov 2015 15:16:35 -0500 Message-Id: <1447445800-25013-2-git-send-email-jsnow@redhat.com> In-Reply-To: <1447445800-25013-1-git-send-email-jsnow@redhat.com> References: <1447445800-25013-1-git-send-email-jsnow@redhat.com> Subject: [Qemu-devel] [PULL 1/6] atapi: add byte_count_limit helper List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, jsnow@redhat.com Signed-off-by: John Snow Tested-by: Mark Cave-Ayland Message-id: 1447095959-10046-2-git-send-email-jsnow@redhat.com --- hw/ide/atapi.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c index cf0b78e..42f78fb 100644 --- a/hw/ide/atapi.c +++ b/hw/ide/atapi.c @@ -170,6 +170,17 @@ void ide_atapi_io_error(IDEState *s, int ret) } } +static uint16_t atapi_byte_count_limit(IDEState *s) +{ + uint16_t bcl; + + bcl = s->lcyl | (s->hcyl << 8); + if (bcl == 0xffff) { + return 0xfffe; + } + return bcl; +} + /* The whole ATAPI transfer logic is handled in this function */ void ide_atapi_cmd_reply_end(IDEState *s) { @@ -212,12 +223,10 @@ void ide_atapi_cmd_reply_end(IDEState *s) } else { /* a new transfer is needed */ s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO; - byte_count_limit = s->lcyl | (s->hcyl << 8); + byte_count_limit = atapi_byte_count_limit(s); #ifdef DEBUG_IDE_ATAPI printf("byte_count_limit=%d\n", byte_count_limit); #endif - if (byte_count_limit == 0xffff) - byte_count_limit--; size = s->packet_transfer_size; if (size > byte_count_limit) { /* byte count limit must be even if this case */ @@ -1272,8 +1281,7 @@ void ide_atapi_cmd(IDEState *s) * See ATA8 ACS3 section 7.17.6.49 and 7.21.5 */ if (!(atapi_cmd_table[s->io_buffer[0]].flags & NONDATA)) { /* TODO: Check IDENTIFY data word 125 for default BCL (currently 0) */ - uint16_t byte_count_limit = s->lcyl | (s->hcyl << 8); - if (!(byte_count_limit || s->atapi_dma)) { + if (!(atapi_byte_count_limit(s) || s->atapi_dma)) { /* TODO: Move abort back into core.c and make static inline again */ ide_abort_command(s); return; -- 2.4.3