From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614895974; cv=none; d=zohomail.com; s=zohoarc; b=lILdhSXY3rZzVCshkJKqbFhFoXytohmvOqRuk1WndCDfN9SIMyI2sZ3MVQ/UcQLVJffsaw60hCZfpATg86VBKZumNgHiD5Jo9lRybGxSJKt471VBFZsM54xuD0dmflhQKdyTGhTbtDCUDwyWr6kbybmbXfZbrA1XkBb5eC4+hOU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614895974; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Xbk2qcvZKa5PkqTm++eA/m67Y583sdBPDwOd8Hc91kM=; b=KkbQzUXb4Dcc3g41NW/a/PAmoSW2bu5cls0XQfZyKYx3qfphrkrhEEP69gUuoC2dvq41JvJPie5Inz0QKncqPRiC4Zk8UQGepgosrU+8HUe1BfI9kNVtiyfPS8mx/x56bSwW/nWVK4I8Ewex2jyAzADfwpHRWTBMvJzxn+J+QVw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161489597466265.32988531454293; Thu, 4 Mar 2021 14:12:54 -0800 (PST) Received: from localhost ([::1]:56694 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwDF-0005r7-4C for importer@patchew.org; Thu, 04 Mar 2021 17:12:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53122) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwBr-0004Yz-NI for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:27 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39902 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwBl-0005Oq-MI for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:25 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwBf-0008MJ-0e; Thu, 04 Mar 2021 22:11:18 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:22 +0000 Message-Id: <20210304221103.6369-2-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 01/42] esp: checkpatch fixes X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 52 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 93d9c9c7b9..6bb4025d2a 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -241,8 +241,9 @@ static void handle_satn(ESPState *s) } s->pdma_cb =3D satn_pdma_cb; len =3D get_cmd(s, buf, sizeof(buf)); - if (len) + if (len) { do_cmd(s, buf); + } } =20 static void s_without_satn_pdma_cb(ESPState *s) @@ -398,8 +399,8 @@ static void esp_do_dma(ESPState *s) * handle_ti_cmd() with do_cmd !=3D NULL (see the assert()) */ trace_esp_do_dma(s->cmdlen, len); - assert (s->cmdlen <=3D sizeof(s->cmdbuf) && - len <=3D sizeof(s->cmdbuf) - s->cmdlen); + assert(s->cmdlen <=3D sizeof(s->cmdbuf) && + len <=3D sizeof(s->cmdbuf) - s->cmdlen); if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, &s->cmdbuf[s->cmdlen], len); } else { @@ -445,15 +446,18 @@ static void esp_do_dma(ESPState *s) s->dma_left -=3D len; s->async_buf +=3D len; s->async_len -=3D len; - if (to_device) + if (to_device) { s->ti_size +=3D len; - else + } else { s->ti_size -=3D len; + } if (s->async_len =3D=3D 0) { scsi_req_continue(s->current_req); - /* If there is still data to be read from the device then - complete the DMA operation immediately. Otherwise defer - until the scsi layer has completed. */ + /* + * If there is still data to be read from the device then + * complete the DMA operation immediately. Otherwise defer + * until the scsi layer has completed. + */ if (to_device || s->dma_left !=3D 0 || s->ti_size =3D=3D 0) { return; } @@ -490,7 +494,8 @@ void esp_command_complete(SCSIRequest *req, size_t resi= d) ESPState *s =3D req->hba_private; =20 if (s->rregs[ESP_RSTAT] & STAT_INT) { - /* Defer handling command complete until the previous + /* + * Defer handling command complete until the previous * interrupt has been handled. */ trace_esp_command_complete_deferred(); @@ -512,8 +517,10 @@ void esp_transfer_data(SCSIRequest *req, uint32_t len) if (s->dma_left) { esp_do_dma(s); } else if (s->dma_counter !=3D 0 && s->ti_size <=3D 0) { - /* If this was the last part of a DMA transfer then the - completion interrupt is deferred to here. */ + /* + * If this was the last part of a DMA transfer then the + * completion interrupt is deferred to here. + */ esp_dma_done(s); } } @@ -530,17 +537,18 @@ static void handle_ti(ESPState *s) dmalen =3D s->rregs[ESP_TCLO]; dmalen |=3D s->rregs[ESP_TCMID] << 8; dmalen |=3D s->rregs[ESP_TCHI] << 16; - if (dmalen=3D=3D0) { - dmalen=3D0x10000; + if (dmalen =3D=3D 0) { + dmalen =3D 0x10000; } s->dma_counter =3D dmalen; =20 - if (s->do_cmd) + if (s->do_cmd) { minlen =3D (dmalen < ESP_CMDBUF_SZ) ? dmalen : ESP_CMDBUF_SZ; - else if (s->ti_size < 0) + } else if (s->ti_size < 0) { minlen =3D (dmalen < -s->ti_size) ? dmalen : -s->ti_size; - else + } else { minlen =3D (dmalen < s->ti_size) ? dmalen : s->ti_size; + } trace_esp_handle_ti(minlen); if (s->dma) { s->dma_left =3D minlen; @@ -605,8 +613,10 @@ uint64_t esp_reg_read(ESPState *s, uint32_t saddr) } break; case ESP_RINTR: - /* Clear sequence step, interrupt register and all status bits - except TC */ + /* + * Clear sequence step, interrupt register and all status bits + * except TC + */ old_val =3D s->rregs[ESP_RINTR]; s->rregs[ESP_RINTR] =3D 0; s->rregs[ESP_RSTAT] &=3D ~STAT_TC; @@ -664,13 +674,13 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint6= 4_t val) } else { s->dma =3D 0; } - switch(val & CMD_CMD) { + switch (val & CMD_CMD) { case CMD_NOP: trace_esp_mem_writeb_cmd_nop(val); break; case CMD_FLUSH: trace_esp_mem_writeb_cmd_flush(val); - //s->ti_size =3D 0; + /*s->ti_size =3D 0;*/ s->rregs[ESP_RINTR] =3D INTR_FC; s->rregs[ESP_RSEQ] =3D 0; s->rregs[ESP_RFLAGS] =3D 0; @@ -786,7 +796,7 @@ static const VMStateDescription vmstate_esp_pdma =3D { }; =20 const VMStateDescription vmstate_esp =3D { - .name =3D"esp", + .name =3D "esp", .version_id =3D 4, .minimum_version_id =3D 3, .fields =3D (VMStateField[]) { --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896042; cv=none; d=zohomail.com; s=zohoarc; b=bOecvircTfBUVyR5pgXuzc+dXXv544xUGv7VoiCyT/iOsOK4nfSVYu2Gdbp0lP62yyvR99/UCvZUqmweqn6x8K7WRkEtcsq1pieYjE7MhZrTz5Z5OkRgYvp+J8WyH4pquzIhlf0fQ1AR4ZDIItp67SQBzMCH8TIS8+U0BNw44SE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896042; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=FYqHS4bRSTlPr4fma3vAQAKoLDdc/1N9vOGvc2phV5Q=; b=We9CEtwRrJKqIo4g6pMkaASqKj3cReCwHFFWCgwJScoDJ0MlXIR1mHvHJZ+if9o+Bjqk7nPy6zsbb8q0k7x3R312L6lFlqUEsZFIp2PsRotqaz9w9BPcTlG7mcKkXaTM8M+WM7YJoEQB8hmIEXkRCqnnujOuELR3YBNB3bA2Lzg= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896042450685.2847483118309; Thu, 4 Mar 2021 14:14:02 -0800 (PST) Received: from localhost ([::1]:33140 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwEL-0007up-DD for importer@patchew.org; Thu, 04 Mar 2021 17:14:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53152) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwBt-0004bZ-CH for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:29 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39912 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwBp-0005Uf-IA for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:29 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwBi-0008MJ-SW; Thu, 04 Mar 2021 22:11:23 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:23 +0000 Message-Id: <20210304221103.6369-3-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 02/42] esp: rename existing ESP QOM type to SYSBUS_ESP X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" The existing ESP QOM type currently represents a sysbus device with an embe= dded ESP state. Rename the type to SYSBUS_ESP accordingly. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/dma/sparc32_dma.c | 4 ++-- hw/m68k/q800.c | 4 ++-- hw/mips/jazz.c | 4 ++-- hw/scsi/esp.c | 8 ++++---- hw/sparc/sun4m.c | 2 +- include/hw/scsi/esp.h | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/hw/dma/sparc32_dma.c b/hw/dma/sparc32_dma.c index b643b413c5..03bc500878 100644 --- a/hw/dma/sparc32_dma.c +++ b/hw/dma/sparc32_dma.c @@ -295,13 +295,13 @@ static void sparc32_espdma_device_init(Object *obj) memory_region_init_io(&s->iomem, OBJECT(s), &dma_mem_ops, s, "espdma-mmio", DMA_SIZE); =20 - object_initialize_child(obj, "esp", &es->esp, TYPE_ESP); + object_initialize_child(obj, "esp", &es->esp, TYPE_SYSBUS_ESP); } =20 static void sparc32_espdma_device_realize(DeviceState *dev, Error **errp) { ESPDMADeviceState *es =3D SPARC32_ESPDMA_DEVICE(dev); - SysBusESPState *sysbus =3D ESP(&es->esp); + SysBusESPState *sysbus =3D SYSBUS_ESP(&es->esp); ESPState *esp =3D &sysbus->esp; =20 esp->dma_memory_read =3D espdma_memory_read; diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index d4eca46767..4d2e866eec 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -350,8 +350,8 @@ static void q800_init(MachineState *machine) =20 /* SCSI */ =20 - dev =3D qdev_new(TYPE_ESP); - sysbus_esp =3D ESP(dev); + dev =3D qdev_new(TYPE_SYSBUS_ESP); + sysbus_esp =3D SYSBUS_ESP(dev); esp =3D &sysbus_esp->esp; esp->dma_memory_read =3D NULL; esp->dma_memory_write =3D NULL; diff --git a/hw/mips/jazz.c b/hw/mips/jazz.c index 83c8086062..1a0888a0fd 100644 --- a/hw/mips/jazz.c +++ b/hw/mips/jazz.c @@ -328,8 +328,8 @@ static void mips_jazz_init(MachineState *machine, } =20 /* SCSI adapter */ - dev =3D qdev_new(TYPE_ESP); - sysbus_esp =3D ESP(dev); + dev =3D qdev_new(TYPE_SYSBUS_ESP); + sysbus_esp =3D SYSBUS_ESP(dev); esp =3D &sysbus_esp->esp; esp->dma_memory_read =3D rc4030_dma_read; esp->dma_memory_write =3D rc4030_dma_write; diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 6bb4025d2a..93312a68d9 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -938,7 +938,7 @@ static const struct SCSIBusInfo esp_scsi_info =3D { =20 static void sysbus_esp_gpio_demux(void *opaque, int irq, int level) { - SysBusESPState *sysbus =3D ESP(opaque); + SysBusESPState *sysbus =3D SYSBUS_ESP(opaque); ESPState *s =3D &sysbus->esp; =20 switch (irq) { @@ -954,7 +954,7 @@ static void sysbus_esp_gpio_demux(void *opaque, int irq= , int level) static void sysbus_esp_realize(DeviceState *dev, Error **errp) { SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); - SysBusESPState *sysbus =3D ESP(dev); + SysBusESPState *sysbus =3D SYSBUS_ESP(dev); ESPState *s =3D &sysbus->esp; =20 sysbus_init_irq(sbd, &s->irq); @@ -976,7 +976,7 @@ static void sysbus_esp_realize(DeviceState *dev, Error = **errp) =20 static void sysbus_esp_hard_reset(DeviceState *dev) { - SysBusESPState *sysbus =3D ESP(dev); + SysBusESPState *sysbus =3D SYSBUS_ESP(dev); esp_hard_reset(&sysbus->esp); } =20 @@ -1001,7 +1001,7 @@ static void sysbus_esp_class_init(ObjectClass *klass,= void *data) } =20 static const TypeInfo sysbus_esp_info =3D { - .name =3D TYPE_ESP, + .name =3D TYPE_SYSBUS_ESP, .parent =3D TYPE_SYS_BUS_DEVICE, .instance_size =3D sizeof(SysBusESPState), .class_init =3D sysbus_esp_class_init, diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 38ca1e33c7..312e2afaf9 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -334,7 +334,7 @@ static void *sparc32_dma_init(hwaddr dma_base, OBJECT(dma), "espdma")); sysbus_connect_irq(SYS_BUS_DEVICE(espdma), 0, espdma_irq); =20 - esp =3D ESP(object_resolve_path_component(OBJECT(espdma), "esp")); + esp =3D SYSBUS_ESP(object_resolve_path_component(OBJECT(espdma), "esp"= )); =20 ledma =3D SPARC32_LEDMA_DEVICE(object_resolve_path_component( OBJECT(dma), "ledma")); diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index d8a6263c13..8a0740e953 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -65,8 +65,8 @@ struct ESPState { void (*pdma_cb)(ESPState *s); }; =20 -#define TYPE_ESP "esp" -OBJECT_DECLARE_SIMPLE_TYPE(SysBusESPState, ESP) +#define TYPE_SYSBUS_ESP "sysbus-esp" +OBJECT_DECLARE_SIMPLE_TYPE(SysBusESPState, SYSBUS_ESP) =20 struct SysBusESPState { /*< private >*/ --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896206; cv=none; d=zohomail.com; s=zohoarc; b=JZhuQF7LCxkLH5eS4YmEefyirKyjSgZ3ngbHsq5ej+ip9Z3apUboyMZVFv0D2U59CzWaVPla75JYtHVwR2ouOUs7zxb6XWm21IUlZ/rmz7rdFGVzyA0t8RwpcfzN8cuvgH9a2kdTVoh1a3qCS7McW2fzo3r8hdrpWSSjyLNi2V0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896206; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=neCwaY0J6x1vFz3OKNZ7RlpIDmg6UrQxZHb6hU1rf/Y=; b=BLyio1F3y+bICVwISx1kTC1/ABA+/rFpFvnljiwyORG7LNyw2RyavcA03ECbuQP+8iBWqAFiqaDq6dtkHcTVKayBX8YaENVPqo0QpSuhfzr5FF8HK0HI46gwBn3YHgCLOf6ab1y2a637S2OITI2KRFGYbbe8RrywOoYzYj1J1Lg= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896206004786.3887300328826; Thu, 4 Mar 2021 14:16:46 -0800 (PST) Received: from localhost ([::1]:41924 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwGy-0003S8-IK for importer@patchew.org; Thu, 04 Mar 2021 17:16:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53184) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwBw-0004j0-O5 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:32 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39922 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwBu-0005Yx-GJ for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:32 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwBn-0008MJ-Sy; Thu, 04 Mar 2021 22:11:28 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:24 +0000 Message-Id: <20210304221103.6369-4-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 03/42] esp: QOMify the internal ESP device state X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Make this new QOM device state a child device of both the sysbus-esp and es= p-pci implementations. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp-pci.c | 50 ++++++++++++++++++++++++++++++++----------- hw/scsi/esp.c | 47 ++++++++++++++++++++++++++++++++++------ include/hw/scsi/esp.h | 5 +++++ 3 files changed, 82 insertions(+), 20 deletions(-) diff --git a/hw/scsi/esp-pci.c b/hw/scsi/esp-pci.c index 4d7c2cab56..27a0d36e0b 100644 --- a/hw/scsi/esp-pci.c +++ b/hw/scsi/esp-pci.c @@ -79,8 +79,10 @@ struct PCIESPState { =20 static void esp_pci_handle_idle(PCIESPState *pci, uint32_t val) { + ESPState *s =3D ESP(&pci->esp); + trace_esp_pci_dma_idle(val); - esp_dma_enable(&pci->esp, 0, 0); + esp_dma_enable(s, 0, 0); } =20 static void esp_pci_handle_blast(PCIESPState *pci, uint32_t val) @@ -91,14 +93,18 @@ static void esp_pci_handle_blast(PCIESPState *pci, uint= 32_t val) =20 static void esp_pci_handle_abort(PCIESPState *pci, uint32_t val) { + ESPState *s =3D ESP(&pci->esp); + trace_esp_pci_dma_abort(val); - if (pci->esp.current_req) { - scsi_req_cancel(pci->esp.current_req); + if (s->current_req) { + scsi_req_cancel(s->current_req); } } =20 static void esp_pci_handle_start(PCIESPState *pci, uint32_t val) { + ESPState *s =3D ESP(&pci->esp); + trace_esp_pci_dma_start(val); =20 pci->dma_regs[DMA_WBC] =3D pci->dma_regs[DMA_STC]; @@ -109,7 +115,7 @@ static void esp_pci_handle_start(PCIESPState *pci, uint= 32_t val) | DMA_STAT_DONE | DMA_STAT_ABORT | DMA_STAT_ERROR | DMA_STAT_PWDN); =20 - esp_dma_enable(&pci->esp, 0, 1); + esp_dma_enable(s, 0, 1); } =20 static void esp_pci_dma_write(PCIESPState *pci, uint32_t saddr, uint32_t v= al) @@ -155,11 +161,12 @@ static void esp_pci_dma_write(PCIESPState *pci, uint3= 2_t saddr, uint32_t val) =20 static uint32_t esp_pci_dma_read(PCIESPState *pci, uint32_t saddr) { + ESPState *s =3D ESP(&pci->esp); uint32_t val; =20 val =3D pci->dma_regs[saddr]; if (saddr =3D=3D DMA_STAT) { - if (pci->esp.rregs[ESP_RSTAT] & STAT_INT) { + if (s->rregs[ESP_RSTAT] & STAT_INT) { val |=3D DMA_STAT_SCSIINT; } if (!(pci->sbac & SBAC_STATUS)) { @@ -176,6 +183,7 @@ static void esp_pci_io_write(void *opaque, hwaddr addr, uint64_t val, unsigned int size) { PCIESPState *pci =3D opaque; + ESPState *s =3D ESP(&pci->esp); =20 if (size < 4 || addr & 3) { /* need to upgrade request: we only support 4-bytes accesses */ @@ -183,7 +191,7 @@ static void esp_pci_io_write(void *opaque, hwaddr addr, int shift; =20 if (addr < 0x40) { - current =3D pci->esp.wregs[addr >> 2]; + current =3D s->wregs[addr >> 2]; } else if (addr < 0x60) { current =3D pci->dma_regs[(addr - 0x40) >> 2]; } else if (addr < 0x74) { @@ -203,7 +211,7 @@ static void esp_pci_io_write(void *opaque, hwaddr addr, =20 if (addr < 0x40) { /* SCSI core reg */ - esp_reg_write(&pci->esp, addr >> 2, val); + esp_reg_write(s, addr >> 2, val); } else if (addr < 0x60) { /* PCI DMA CCB */ esp_pci_dma_write(pci, (addr - 0x40) >> 2, val); @@ -220,11 +228,12 @@ static uint64_t esp_pci_io_read(void *opaque, hwaddr = addr, unsigned int size) { PCIESPState *pci =3D opaque; + ESPState *s =3D ESP(&pci->esp); uint32_t ret; =20 if (addr < 0x40) { /* SCSI core reg */ - ret =3D esp_reg_read(&pci->esp, addr >> 2); + ret =3D esp_reg_read(s, addr >> 2); } else if (addr < 0x60) { /* PCI DMA CCB */ ret =3D esp_pci_dma_read(pci, (addr - 0x40) >> 2); @@ -306,7 +315,9 @@ static const MemoryRegionOps esp_pci_io_ops =3D { static void esp_pci_hard_reset(DeviceState *dev) { PCIESPState *pci =3D PCI_ESP(dev); - esp_hard_reset(&pci->esp); + ESPState *s =3D ESP(&pci->esp); + + esp_hard_reset(s); pci->dma_regs[DMA_CMD] &=3D ~(DMA_CMD_DIR | DMA_CMD_INTE_D | DMA_CMD_I= NTE_P | DMA_CMD_MDL | DMA_CMD_DIAG | DMA_CMD_MASK); pci->dma_regs[DMA_WBC] &=3D ~0xffff; @@ -353,9 +364,13 @@ static void esp_pci_scsi_realize(PCIDevice *dev, Error= **errp) { PCIESPState *pci =3D PCI_ESP(dev); DeviceState *d =3D DEVICE(dev); - ESPState *s =3D &pci->esp; + ESPState *s =3D ESP(&pci->esp); uint8_t *pci_conf; =20 + if (!qdev_realize(DEVICE(s), NULL, errp)) { + return; + } + pci_conf =3D dev->config; =20 /* Interrupt pin A */ @@ -374,11 +389,19 @@ static void esp_pci_scsi_realize(PCIDevice *dev, Erro= r **errp) scsi_bus_new(&s->bus, sizeof(s->bus), d, &esp_pci_scsi_info, NULL); } =20 -static void esp_pci_scsi_uninit(PCIDevice *d) +static void esp_pci_scsi_exit(PCIDevice *d) { PCIESPState *pci =3D PCI_ESP(d); + ESPState *s =3D ESP(&pci->esp); + + qemu_free_irq(s->irq); +} + +static void esp_pci_init(Object *obj) +{ + PCIESPState *pci =3D PCI_ESP(obj); =20 - qemu_free_irq(pci->esp.irq); + object_initialize_child(obj, "esp", &pci->esp, TYPE_ESP); } =20 static void esp_pci_class_init(ObjectClass *klass, void *data) @@ -387,7 +410,7 @@ static void esp_pci_class_init(ObjectClass *klass, void= *data) PCIDeviceClass *k =3D PCI_DEVICE_CLASS(klass); =20 k->realize =3D esp_pci_scsi_realize; - k->exit =3D esp_pci_scsi_uninit; + k->exit =3D esp_pci_scsi_exit; k->vendor_id =3D PCI_VENDOR_ID_AMD; k->device_id =3D PCI_DEVICE_ID_AMD_SCSI; k->revision =3D 0x10; @@ -401,6 +424,7 @@ static void esp_pci_class_init(ObjectClass *klass, void= *data) static const TypeInfo esp_pci_info =3D { .name =3D TYPE_AM53C974_DEVICE, .parent =3D TYPE_PCI_DEVICE, + .instance_init =3D esp_pci_init, .instance_size =3D sizeof(PCIESPState), .class_init =3D esp_pci_class_init, .interfaces =3D (InterfaceInfo[]) { diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 93312a68d9..6f8a1d1224 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -827,20 +827,22 @@ static void sysbus_esp_mem_write(void *opaque, hwaddr= addr, uint64_t val, unsigned int size) { SysBusESPState *sysbus =3D opaque; + ESPState *s =3D ESP(&sysbus->esp); uint32_t saddr; =20 saddr =3D addr >> sysbus->it_shift; - esp_reg_write(&sysbus->esp, saddr, val); + esp_reg_write(s, saddr, val); } =20 static uint64_t sysbus_esp_mem_read(void *opaque, hwaddr addr, unsigned int size) { SysBusESPState *sysbus =3D opaque; + ESPState *s =3D ESP(&sysbus->esp); uint32_t saddr; =20 saddr =3D addr >> sysbus->it_shift; - return esp_reg_read(&sysbus->esp, saddr); + return esp_reg_read(s, saddr); } =20 static const MemoryRegionOps sysbus_esp_mem_ops =3D { @@ -854,7 +856,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr = addr, uint64_t val, unsigned int size) { SysBusESPState *sysbus =3D opaque; - ESPState *s =3D &sysbus->esp; + ESPState *s =3D ESP(&sysbus->esp); uint32_t dmalen; uint8_t *buf =3D get_pdma_buf(s); =20 @@ -891,7 +893,7 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hwad= dr addr, unsigned int size) { SysBusESPState *sysbus =3D opaque; - ESPState *s =3D &sysbus->esp; + ESPState *s =3D ESP(&sysbus->esp); uint8_t *buf =3D get_pdma_buf(s); uint64_t val =3D 0; =20 @@ -939,7 +941,7 @@ static const struct SCSIBusInfo esp_scsi_info =3D { static void sysbus_esp_gpio_demux(void *opaque, int irq, int level) { SysBusESPState *sysbus =3D SYSBUS_ESP(opaque); - ESPState *s =3D &sysbus->esp; + ESPState *s =3D ESP(&sysbus->esp); =20 switch (irq) { case 0: @@ -955,7 +957,11 @@ static void sysbus_esp_realize(DeviceState *dev, Error= **errp) { SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); SysBusESPState *sysbus =3D SYSBUS_ESP(dev); - ESPState *s =3D &sysbus->esp; + ESPState *s =3D ESP(&sysbus->esp); + + if (!qdev_realize(DEVICE(s), NULL, errp)) { + return; + } =20 sysbus_init_irq(sbd, &s->irq); sysbus_init_irq(sbd, &s->irq_data); @@ -977,7 +983,16 @@ static void sysbus_esp_realize(DeviceState *dev, Error= **errp) static void sysbus_esp_hard_reset(DeviceState *dev) { SysBusESPState *sysbus =3D SYSBUS_ESP(dev); - esp_hard_reset(&sysbus->esp); + ESPState *s =3D ESP(&sysbus->esp); + + esp_hard_reset(s); +} + +static void sysbus_esp_init(Object *obj) +{ + SysBusESPState *sysbus =3D SYSBUS_ESP(obj); + + object_initialize_child(obj, "esp", &sysbus->esp, TYPE_ESP); } =20 static const VMStateDescription vmstate_sysbus_esp_scsi =3D { @@ -1003,13 +1018,31 @@ static void sysbus_esp_class_init(ObjectClass *klas= s, void *data) static const TypeInfo sysbus_esp_info =3D { .name =3D TYPE_SYSBUS_ESP, .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_init =3D sysbus_esp_init, .instance_size =3D sizeof(SysBusESPState), .class_init =3D sysbus_esp_class_init, }; =20 +static void esp_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + /* internal device for sysbusesp/pciespscsi, not user-creatable */ + dc->user_creatable =3D false; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +} + +static const TypeInfo esp_info =3D { + .name =3D TYPE_ESP, + .parent =3D TYPE_DEVICE, + .instance_size =3D sizeof(ESPState), + .class_init =3D esp_class_init, +}; + static void esp_register_types(void) { type_register_static(&sysbus_esp_info); + type_register_static(&esp_info); } =20 type_init(esp_register_types) diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 8a0740e953..af23f813cb 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -22,7 +22,12 @@ enum pdma_origin_id { ASYNC, }; =20 +#define TYPE_ESP "esp" +OBJECT_DECLARE_SIMPLE_TYPE(ESPState, ESP) + struct ESPState { + DeviceState parent_obj; + uint8_t rregs[ESP_REGS]; uint8_t wregs[ESP_REGS]; qemu_irq irq; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896094; cv=none; d=zohomail.com; s=zohoarc; b=ltXoYJ1+CjStL+Cn7z4G34YvLJJLzjy1Ej9wvF3fjmVDIR1CF1JIdH7KLZfD5HhxkdzixLcWs45++k1sHg1DZy13B95G1bt+hyFhN+2GSHlNi+wu5WwqZRqrigKhVPQR9rVW9YdoWQrM8wgxw4eZEE58Jq322vvlD6Uk1jmRWD0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896094; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=mw5CsSBXmzvQUWTwcvUpAb3YrAqqVQEngOkBaKkFVwg=; b=IW/8N06Bd4z0F8ZrrAfiBJo1u9FV2oLQg6KrgAGakbMaVfFYKCYiMLhh0HOodWtVfHc9+SPdOEHY3X10MobJxhOcTWfqC65oknYtezeQC+JuP5soRcJhw1OUtcWXhvBtJ9eq8Wp1TAN2ro9QacsahEp9l9K3zAtnK4fuWksM0/Y= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896094527456.40022691404033; Thu, 4 Mar 2021 14:14:54 -0800 (PST) Received: from localhost ([::1]:37098 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwFB-0001Fr-Cs for importer@patchew.org; Thu, 04 Mar 2021 17:14:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53222) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwC4-0004yR-2a for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:40 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39934 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwC1-0005c8-NN for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:39 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwBt-0008MJ-Gy; Thu, 04 Mar 2021 22:11:35 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:25 +0000 Message-Id: <20210304221103.6369-5-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 04/42] esp: add vmstate_esp version to embedded ESPState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" The QOM object representing ESPState is currently embedded within both the SYSBUS_ESP and PCI_ESP devices with migration state handled by embedding vmstate_esp within each device using VMSTATE_STRUCT. Since the vmstate_esp fields are embedded directly within the migration stream, the incoming vmstate_esp version_id is lost. The only version infor= mation available is that from vmstate_sysbus_esp_scsi and vmstate_esp_pci_scsi, but those versions represent their respective devices and not that of the under= lying ESPState. Resolve this by adding a new version-dependent field in vmstate_sysbus_esp_= scsi and vmstate_esp_pci_scsi which stores the vmstate_esp version_id field with= in ESPState to be used to allow migration from older QEMU versions. Finally bump the vmstate_esp version to 5 to cover the upcoming ESPState ch= anges within this patch series. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp-pci.c | 3 ++- hw/scsi/esp.c | 23 +++++++++++++++++++++-- include/hw/scsi/esp.h | 2 ++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/hw/scsi/esp-pci.c b/hw/scsi/esp-pci.c index 27a0d36e0b..c3d3dab05e 100644 --- a/hw/scsi/esp-pci.c +++ b/hw/scsi/esp-pci.c @@ -330,11 +330,12 @@ static void esp_pci_hard_reset(DeviceState *dev) =20 static const VMStateDescription vmstate_esp_pci_scsi =3D { .name =3D "pciespscsi", - .version_id =3D 1, + .version_id =3D 2, .minimum_version_id =3D 1, .fields =3D (VMStateField[]) { VMSTATE_PCI_DEVICE(parent_obj, PCIESPState), VMSTATE_BUFFER_UNSAFE(dma_regs, PCIESPState, 0, 8 * sizeof(uint32_= t)), + VMSTATE_UINT8_V(esp.mig_version_id, PCIESPState, 2), VMSTATE_STRUCT(esp, PCIESPState, 0, vmstate_esp, ESPState), VMSTATE_END_OF_LIST() } diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 6f8a1d1224..f65c675872 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -795,10 +795,28 @@ static const VMStateDescription vmstate_esp_pdma =3D { } }; =20 +static int esp_pre_save(void *opaque) +{ + ESPState *s =3D ESP(opaque); + + s->mig_version_id =3D vmstate_esp.version_id; + return 0; +} + +static int esp_post_load(void *opaque, int version_id) +{ + ESPState *s =3D ESP(opaque); + + s->mig_version_id =3D vmstate_esp.version_id; + return 0; +} + const VMStateDescription vmstate_esp =3D { .name =3D "esp", - .version_id =3D 4, + .version_id =3D 5, .minimum_version_id =3D 3, + .pre_save =3D esp_pre_save, + .post_load =3D esp_post_load, .fields =3D (VMStateField[]) { VMSTATE_BUFFER(rregs, ESPState), VMSTATE_BUFFER(wregs, ESPState), @@ -997,9 +1015,10 @@ static void sysbus_esp_init(Object *obj) =20 static const VMStateDescription vmstate_sysbus_esp_scsi =3D { .name =3D "sysbusespscsi", - .version_id =3D 1, + .version_id =3D 2, .minimum_version_id =3D 1, .fields =3D (VMStateField[]) { + VMSTATE_UINT8_V(esp.mig_version_id, SysBusESPState, 2), VMSTATE_STRUCT(esp, SysBusESPState, 0, vmstate_esp, ESPState), VMSTATE_END_OF_LIST() } diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index af23f813cb..9d149cbc9f 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -68,6 +68,8 @@ struct ESPState { uint32_t pdma_start; uint32_t pdma_cur; void (*pdma_cb)(ESPState *s); + + uint8_t mig_version_id; }; =20 #define TYPE_SYSBUS_ESP "sysbus-esp" --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896231; cv=none; d=zohomail.com; s=zohoarc; b=OSdsLwImfj2iEYlvY4HkQn4QrptuqKGGhh1ms3ix7vYzA4ca3g+pYn41ErLehb0qxUPaz6GcuF53my2G/5ceefHEdQGcmm+5l3jAUtnbEUAXJ/iZXE7DCFNeSpzNpvndxDF+C/WUILDnvrCPNGINrw2TcrJAe//ln/6D26Mv8gc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896231; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=polJVqssDq1lJCnTbcOZ1l0Q9aN/IB8sVO9oXTWCTXE=; b=ApPp6TBPwb7JvLb9JE2cLp/ndhqidWLllyqdRcheVFPpp8j3aFWyWPrXPm4hKFIs8OKRQnPCTgEznwtWMwbjgBsAeyo3o+cx3Bti2OoyCXJGzPwBV8tOkMnEL7tkuND4dddlalCp4839ZcS6sL88n8ToQ6syE7ot61bqkNESHLU= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896231127559.1885454054575; Thu, 4 Mar 2021 14:17:11 -0800 (PST) Received: from localhost ([::1]:44380 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwHO-0004UD-0e for importer@patchew.org; Thu, 04 Mar 2021 17:17:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53252) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwC8-000587-Ku for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:44 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39942 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwC7-0005eS-3s for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:44 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwC0-0008MJ-5U; Thu, 04 Mar 2021 22:11:41 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:26 +0000 Message-Id: <20210304221103.6369-6-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 05/42] esp: add trace event when receiving a TI command X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" This enables us to determine whether the command being issued is for a DMA = or a non-DMA transfer. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 1 + hw/scsi/trace-events | 1 + 2 files changed, 2 insertions(+) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index f65c675872..73700550f2 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -697,6 +697,7 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_= t val) } break; case CMD_TI: + trace_esp_mem_writeb_cmd_ti(val); handle_ti(s); break; case CMD_ICCS: diff --git a/hw/scsi/trace-events b/hw/scsi/trace-events index 9788661bfd..6269547266 100644 --- a/hw/scsi/trace-events +++ b/hw/scsi/trace-events @@ -189,6 +189,7 @@ esp_mem_writeb_cmd_selatn(uint32_t val) "Select with AT= N (0x%2.2x)" esp_mem_writeb_cmd_selatns(uint32_t val) "Select with ATN & stop (0x%2.2x)" esp_mem_writeb_cmd_ensel(uint32_t val) "Enable selection (0x%2.2x)" esp_mem_writeb_cmd_dissel(uint32_t val) "Disable selection (0x%2.2x)" +esp_mem_writeb_cmd_ti(uint32_t val) "Transfer Information (0x%2.2x)" =20 # esp-pci.c esp_pci_error_invalid_dma_direction(void) "invalid DMA transfer direction" --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896012; cv=none; d=zohomail.com; s=zohoarc; b=Nk5d0j4HkEoKIR8RzNnTEx2KJ1Ug9JJR6+2c5xpVQxnQjGEciq5U8IAEHrqcqya+DOYIaMakYuXkkPGEgvGEyFFKMJwedr54nq+i1sQ0P0NAaKlft79iA+h69I6KBCzuD+d/K5wLTuOX2JTzrOuM3rxQCBmkW0U4yliQW4F3U2k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896012; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+J8pmkjcJPmWqOzGaT4CjIuAbvk9IpTXekBszwlUgUM=; b=j144PZ26hawWXlFVA6hU1r/F+U/gkoxh89Rl32GMAj6u7iylWDGtDm3BJAcGe1EiFop/xA+B9WVgHysdvkTvVQTdk4pbqbAwH0tJcc31W0haZAnHTkmiO5zw059br2wd3M+MKW2sTTPowhs7msG8RbM/GXBitUY0B7pKSQ4eH5k= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896012200490.3206181344815; Thu, 4 Mar 2021 14:13:32 -0800 (PST) Received: from localhost ([::1]:59870 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwDr-0007Gx-3Y for importer@patchew.org; Thu, 04 Mar 2021 17:13:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53286) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCF-0005Gc-6S for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:51 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39954 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCD-0005h9-0I for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:50 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwC6-0008MJ-0A; Thu, 04 Mar 2021 22:11:46 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:27 +0000 Message-Id: <20210304221103.6369-7-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 06/42] esp: fix esp_reg_read() trace event X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Move the trace event to the end of the function so that it correctly reports the returned value if it doesn't come directly from the rregs array. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 73700550f2..16c1853577 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -594,9 +594,8 @@ static void parent_esp_reset(ESPState *s, int irq, int = level) =20 uint64_t esp_reg_read(ESPState *s, uint32_t saddr) { - uint32_t old_val; + uint32_t val; =20 - trace_esp_mem_readb(saddr, s->rregs[saddr]); switch (saddr) { case ESP_FIFO: if ((s->rregs[ESP_RSTAT] & STAT_PIO_MASK) =3D=3D 0) { @@ -611,13 +610,14 @@ uint64_t esp_reg_read(ESPState *s, uint32_t saddr) s->ti_rptr =3D 0; s->ti_wptr =3D 0; } + val =3D s->rregs[ESP_FIFO]; break; case ESP_RINTR: /* * Clear sequence step, interrupt register and all status bits * except TC */ - old_val =3D s->rregs[ESP_RINTR]; + val =3D s->rregs[ESP_RINTR]; s->rregs[ESP_RINTR] =3D 0; s->rregs[ESP_RSTAT] &=3D ~STAT_TC; s->rregs[ESP_RSEQ] =3D SEQ_CD; @@ -626,16 +626,22 @@ uint64_t esp_reg_read(ESPState *s, uint32_t saddr) esp_report_command_complete(s, s->deferred_status); s->deferred_complete =3D false; } - return old_val; + break; case ESP_TCHI: /* Return the unique id if the value has never been written */ if (!s->tchi_written) { - return s->chip_id; + val =3D s->chip_id; + } else { + val =3D s->rregs[saddr]; } + break; default: + val =3D s->rregs[saddr]; break; } - return s->rregs[saddr]; + + trace_esp_mem_readb(saddr, val); + return val; } =20 void esp_reg_write(ESPState *s, uint32_t saddr, uint64_t val) --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896174; cv=none; d=zohomail.com; s=zohoarc; b=fl4dYGA9d+oVEmSPv0LavT+H2oCok8WeiSBxtqO0NIyXnRDtDbmch09JwwSppv6OtufQkMpuiiYpHEKFnT9J3UzeFypxMlEGNdCUyJE6uV4kFzQhsYYp/LmKiakuOIWAX0IHLsGLZKI6QN6p3uc201IKd/cwBDPvl9hM3LjHXig= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896174; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ihPfgLr+9x+LESJivh4SCb+uNk8WTyE+PxGyL6ZJ4+8=; b=FOdBiNweHtMZ08EO6TPakd3nVjtY3kdYPsbWTQKMWDf8qt2ittRmuThdYXFLN6XUVBrLow37y9Phb1UH3XynFFnCHUb7EbUJBIo5Se9mbEZWUIPLrXAkS5sfXUur6w0/Y57wupWv8343ESHPUwywI1Sqz4I537C1cZkHXToT0UQ= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896174260100.79416147265852; Thu, 4 Mar 2021 14:16:14 -0800 (PST) Received: from localhost ([::1]:40252 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwGT-0002bO-7t for importer@patchew.org; Thu, 04 Mar 2021 17:16:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53308) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCK-0005Jl-I4 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:56 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39962 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCG-0005iU-QJ for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:56 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCA-0008MJ-TJ; Thu, 04 Mar 2021 22:11:51 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:28 +0000 Message-Id: <20210304221103.6369-8-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 07/42] esp: add PDMA trace events X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" This will become more useful later when trying to debug mixed FIFO and PDMA requests. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 6 ++++++ hw/scsi/trace-events | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 16c1853577..e0676ae790 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -63,11 +63,13 @@ static void esp_lower_irq(ESPState *s) static void esp_raise_drq(ESPState *s) { qemu_irq_raise(s->irq_data); + trace_esp_raise_drq(); } =20 static void esp_lower_drq(ESPState *s) { qemu_irq_lower(s->irq_data); + trace_esp_lower_drq(); } =20 void esp_dma_enable(ESPState *s, int irq, int level) @@ -885,6 +887,8 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr = addr, uint32_t dmalen; uint8_t *buf =3D get_pdma_buf(s); =20 + trace_esp_pdma_write(size); + dmalen =3D s->rregs[ESP_TCLO]; dmalen |=3D s->rregs[ESP_TCMID] << 8; dmalen |=3D s->rregs[ESP_TCHI] << 16; @@ -922,6 +926,8 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hwad= dr addr, uint8_t *buf =3D get_pdma_buf(s); uint64_t val =3D 0; =20 + trace_esp_pdma_read(size); + if (s->pdma_len =3D=3D 0) { return 0; } diff --git a/hw/scsi/trace-events b/hw/scsi/trace-events index 6269547266..1c331fb189 100644 --- a/hw/scsi/trace-events +++ b/hw/scsi/trace-events @@ -159,8 +159,12 @@ esp_error_unhandled_command(uint32_t val) "unhandled c= ommand (0x%2.2x)" esp_error_invalid_write(uint32_t val, uint32_t addr) "invalid write of 0x%= 02x at [0x%x]" esp_raise_irq(void) "Raise IRQ" esp_lower_irq(void) "Lower IRQ" +esp_raise_drq(void) "Raise DREQ" +esp_lower_drq(void) "Lower DREQ" esp_dma_enable(void) "Raise enable" esp_dma_disable(void) "Lower enable" +esp_pdma_read(int size) "pDMA read %u bytes" +esp_pdma_write(int size) "pDMA write %u bytes" esp_get_cmd(uint32_t dmalen, int target) "len %d target %d" esp_do_busid_cmd(uint8_t busid) "busid 0x%x" esp_handle_satn_stop(uint32_t cmdlen) "cmdlen %d" --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896281; cv=none; d=zohomail.com; s=zohoarc; b=R2uKfklnYw9ufWDuc6oecl7rwHcBJbjxZQNuuoanlkqS8QRCOg/a/rw5b6oPymMj9ng+O89mdvCmyIanMn58MKKkw7t6Wg5vn0W+559fjfznJAOByCADApgCLkf6E72iasoEdNLoiU4lKUiDuDIlf2s6A2F/RRHBcEd8KMc9sXE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896281; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=W3raaSTX+xDbuDyJLrhWLDnAy3GcNBfMRpkA4uUABYw=; b=GcXi9T9w4b0+EeqVShvHdmeEEDew/dRH5tFN/7dvnnnGO0K+73XK/d6SX1Sm7m/xcjwJ/PRpFGp7AsJPOXKhvPtn00xfMBUmrah00Ihy/fa1DRJ8O48kas91NazPLU7ISXfRJ1Qa0KZe4ig4UlqGmslCBXDy0K3ITeMMfgFd2Cg= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896281109804.3421109359153; Thu, 4 Mar 2021 14:18:01 -0800 (PST) Received: from localhost ([::1]:45690 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwIB-00050w-SJ for importer@patchew.org; Thu, 04 Mar 2021 17:17:59 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53330) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCL-0005Mn-U2 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:57 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39970 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCK-0005kI-Ee for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:11:57 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCF-0008MJ-F0; Thu, 04 Mar 2021 22:11:55 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:29 +0000 Message-Id: <20210304221103.6369-9-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 08/42] esp: determine transfer direction directly from SCSI phase X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" The transfer direction is currently determined by checking the sign of ti_s= ize but as this series progresses ti_size can be zero at the end of the transfe= r. Use the SCSI phase to determine the transfer direction as used in other SCSI controller implementations. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index e0676ae790..5365523f6b 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -356,7 +356,7 @@ static void esp_dma_done(ESPState *s) =20 static void do_dma_pdma_cb(ESPState *s) { - int to_device =3D (s->ti_size < 0); + int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); int len =3D s->pdma_cur - s->pdma_start; if (s->do_cmd) { s->ti_size =3D 0; @@ -392,7 +392,7 @@ static void do_dma_pdma_cb(ESPState *s) static void esp_do_dma(ESPState *s) { uint32_t len; - int to_device; + int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); =20 len =3D s->dma_left; if (s->do_cmd) { @@ -425,7 +425,6 @@ static void esp_do_dma(ESPState *s) if (len > s->async_len) { len =3D s->async_len; } - to_device =3D (s->ti_size < 0); if (to_device) { if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, s->async_buf, len); --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896386; cv=none; d=zohomail.com; s=zohoarc; b=GC3/b9uRACrQs1zgtTWrdDECz4dEFumzIaRSGQYJCBLjDNVWCMJIe8ffJVEw4rNp/hV4cnFXsxe+cw/VVWpSkesmm8KGxBFGX4fbu2UocoFICSBkj07vD3tiA8qH6C0W4/oM2KFKGjfqqUbGVafdLdyIvCC++BbfrQ8LVLXFThs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896386; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Zt9QFXjz1p1BC/rCkEfcC8WvCZPf0rYYzrua+DNQKlk=; b=Dhdbc1ulFiPLRx3snHTQB+lzSw2t3M+v1n+mUEYCI2os/wm2dSUi3kB9XB3lZ43e2I7by3tyVDeUbvSKwI4rQedXBu0XfOPY9hld1nydSxxxvF/iptIYRpMZrSF0b2enSZVMi1VwkH+2PKY3MLvdqGHbE6obd8uv8JhVvfVpVSw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896386295425.8207646790796; Thu, 4 Mar 2021 14:19:46 -0800 (PST) Received: from localhost ([::1]:52792 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwJt-00082l-9X for importer@patchew.org; Thu, 04 Mar 2021 17:19:45 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53354) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCR-0005Yc-GR for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:06 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39980 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCP-0005mb-AB for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:03 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCJ-0008MJ-8Y; Thu, 04 Mar 2021 22:11:59 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:30 +0000 Message-Id: <20210304221103.6369-10-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 09/42] esp: introduce esp_get_tc() and esp_set_tc() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" These functions simplify reading and writing the TC register value without = having to manually shift each individual 8-bit value. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 5365523f6b..dd94f7b47b 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -98,6 +98,24 @@ void esp_request_cancelled(SCSIRequest *req) } } =20 +static uint32_t esp_get_tc(ESPState *s) +{ + uint32_t dmalen; + + dmalen =3D s->rregs[ESP_TCLO]; + dmalen |=3D s->rregs[ESP_TCMID] << 8; + dmalen |=3D s->rregs[ESP_TCHI] << 16; + + return dmalen; +} + +static void esp_set_tc(ESPState *s, uint32_t dmalen) +{ + s->rregs[ESP_TCLO] =3D dmalen; + s->rregs[ESP_TCMID] =3D dmalen >> 8; + s->rregs[ESP_TCHI] =3D dmalen >> 16; +} + static void set_pdma(ESPState *s, enum pdma_origin_id origin, uint32_t index, uint32_t len) { @@ -157,9 +175,7 @@ static uint32_t get_cmd(ESPState *s, uint8_t *buf, uint= 8_t buflen) =20 target =3D s->wregs[ESP_WBUSID] & BUSID_DID; if (s->dma) { - dmalen =3D s->rregs[ESP_TCLO]; - dmalen |=3D s->rregs[ESP_TCMID] << 8; - dmalen |=3D s->rregs[ESP_TCHI] << 16; + dmalen =3D esp_get_tc(s); if (dmalen > buflen) { return 0; } @@ -348,9 +364,7 @@ static void esp_dma_done(ESPState *s) s->rregs[ESP_RINTR] =3D INTR_BS; s->rregs[ESP_RSEQ] =3D 0; s->rregs[ESP_RFLAGS] =3D 0; - s->rregs[ESP_TCLO] =3D 0; - s->rregs[ESP_TCMID] =3D 0; - s->rregs[ESP_TCHI] =3D 0; + esp_set_tc(s, 0); esp_raise_irq(s); } =20 @@ -535,9 +549,7 @@ static void handle_ti(ESPState *s) return; } =20 - dmalen =3D s->rregs[ESP_TCLO]; - dmalen |=3D s->rregs[ESP_TCMID] << 8; - dmalen |=3D s->rregs[ESP_TCHI] << 16; + dmalen =3D esp_get_tc(s); if (dmalen =3D=3D 0) { dmalen =3D 0x10000; } @@ -888,9 +900,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr = addr, =20 trace_esp_pdma_write(size); =20 - dmalen =3D s->rregs[ESP_TCLO]; - dmalen |=3D s->rregs[ESP_TCMID] << 8; - dmalen |=3D s->rregs[ESP_TCHI] << 16; + dmalen =3D esp_get_tc(s); if (dmalen =3D=3D 0 || s->pdma_len =3D=3D 0) { return; } @@ -907,9 +917,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr = addr, dmalen -=3D 2; break; } - s->rregs[ESP_TCLO] =3D dmalen & 0xff; - s->rregs[ESP_TCMID] =3D dmalen >> 8; - s->rregs[ESP_TCHI] =3D dmalen >> 16; + esp_set_tc(s, dmalen); if (s->pdma_len =3D=3D 0 && s->pdma_cb) { esp_lower_drq(s); s->pdma_cb(s); --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896324; cv=none; d=zohomail.com; s=zohoarc; b=BM1Tdg0vjmuAAdovA4tBHNV+PKA0px/8wjiRmc5QbWZWvP+KqkAYqKXSyMJIbNEcHyZBm3XVoGy7NNwCveTucv/YWVhDMvBklOF/IPyNheWlLYYzffDrD0KnHS2ApGGsS0L1qx1dsVtUQOaw/uHvwn1pOZZvryIrTeY1P3KkQQA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896324; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=dS40BtMenTR43u2JvdSY7ZoEa74/EnBcbiOfKxf+48U=; b=jHneKhZvInNeVSMZ6i1n+zNca939c/MHsUMr2OaRQ4g+KKNF879hvVFEW4Gczami/ZVWsTyDAok1o7pwLk+DfYXZ8qJUIVf431cZDy0eDKNVq88c18mIYNnweHmBRSSXr3ZStps7NI9wHiN66x6VW5PVP+YAHB6b7OADH+9GajY= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896324639212.72793321030326; Thu, 4 Mar 2021 14:18:44 -0800 (PST) Received: from localhost ([::1]:48670 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwIt-0006HF-HA for importer@patchew.org; Thu, 04 Mar 2021 17:18:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53368) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCX-0005eB-V5 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:09 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:39996 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCW-0005pr-Ci for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:09 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCN-0008MJ-V1; Thu, 04 Mar 2021 22:12:06 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:31 +0000 Message-Id: <20210304221103.6369-11-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 10/42] esp: introduce esp_get_stc() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" This function simplifies reading the STC register value without having to m= anually shift each individual 8-bit value. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index dd94f7b47b..125bdea32a 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -116,6 +116,17 @@ static void esp_set_tc(ESPState *s, uint32_t dmalen) s->rregs[ESP_TCHI] =3D dmalen >> 16; } =20 +static uint32_t esp_get_stc(ESPState *s) +{ + uint32_t dmalen; + + dmalen =3D s->wregs[ESP_TCLO]; + dmalen |=3D s->wregs[ESP_TCMID] << 8; + dmalen |=3D s->wregs[ESP_TCHI] << 16; + + return dmalen; +} + static void set_pdma(ESPState *s, enum pdma_origin_id origin, uint32_t index, uint32_t len) { @@ -687,9 +698,7 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_= t val) if (val & CMD_DMA) { s->dma =3D 1; /* Reload DMA counter. */ - s->rregs[ESP_TCLO] =3D s->wregs[ESP_TCLO]; - s->rregs[ESP_TCMID] =3D s->wregs[ESP_TCMID]; - s->rregs[ESP_TCHI] =3D s->wregs[ESP_TCHI]; + esp_set_tc(s, esp_get_stc(s)); } else { s->dma =3D 0; } --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896344; cv=none; d=zohomail.com; s=zohoarc; b=IHdENwMKs/xwQwIAcauDLr5VxuEYIfNGt1iPjDqbdkBMPS8UmYhyFO9EnYVlGAEQ1vuq0QfH+zCY7xJlwCubQwKsENlx2OpzZUr0ENM0JuueraCOAWUK9NPQ2yaYQi7PlLLVVtNsYteH+46DhQGS2/uLx70IjA0ugoXiPwpOTdc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896344; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ojYeKUP1rSdIYE18VK3LyrbLhAJ9FmyRCMTWhHj+ttE=; b=JMH5lTmbKlfbOdXtDD9Gmmg9IA1ofPKNRoN8afzwLjwFKWOIQU38hxmuin2C4oGPZuxmIar5WJcEr1Q7aKOIBJKqGS5kw6oN708NP9/ZA2QrR0LHTrzYktaIayXGXU8caR6fZf3ES4GMqH9xb9raU7ZgeKwHRFdB1v/9NxS4hJA= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896344145900.0577713831788; Thu, 4 Mar 2021 14:19:04 -0800 (PST) Received: from localhost ([::1]:50470 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwJB-000744-6M for importer@patchew.org; Thu, 04 Mar 2021 17:19:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53388) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCc-0005hp-FI for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:14 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40002 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCa-0005qk-WD for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:14 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCU-0008MJ-Hg; Thu, 04 Mar 2021 22:12:11 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:32 +0000 Message-Id: <20210304221103.6369-12-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 11/42] esp: apply transfer length adjustment when STC is zero at TC load time X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Perform the length adjustment whereby a value of 0 in the STC represents a transfer length of 0x10000 at the point where the TC is loaded at the start of a DMA command rather than just when a TI (Transfer Information) command is executed. This better matches the description as given in the datasheet. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 125bdea32a..349067eb6a 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -561,9 +561,6 @@ static void handle_ti(ESPState *s) } =20 dmalen =3D esp_get_tc(s); - if (dmalen =3D=3D 0) { - dmalen =3D 0x10000; - } s->dma_counter =3D dmalen; =20 if (s->do_cmd) { @@ -698,7 +695,11 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64= _t val) if (val & CMD_DMA) { s->dma =3D 1; /* Reload DMA counter. */ - esp_set_tc(s, esp_get_stc(s)); + if (esp_get_stc(s) =3D=3D 0) { + esp_set_tc(s, 0x10000); + } else { + esp_set_tc(s, esp_get_stc(s)); + } } else { s->dma =3D 0; } --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896418; cv=none; d=zohomail.com; s=zohoarc; b=Zur2nzdGIsUd+tU3wdpI563+au9uVuI/X4ik6klgLSo1LDQQ+tDe5mTkuzDzEs8TA0QFdm/YDGIwNYAw/at972pXrG3obDUeaBcw5Wxfn6HSfIvPrulyxIgYMdIHCeYo17fRwmkcDbvZ0G7q3oIAQApXhhoRnfFt3MBO4VzOJ58= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896418; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7aS3jiPRzsnMzd70xdcz1gfSZolGsLiUx9ioA8fJxL4=; b=CxFpjJJU2OGk8ieo1G6jz6wWbsSITcKy3pRtviLailXKnjCMkq4sou8Yic8vbWSVXskKeLDtg0xDhDrfbbpfGg3/OP/JrhJhA8WfOg3uhEqjyYlttev2cz6gN0ukCEZ2GcxgtqDyXrfeJl3LAmrKYyAcbvD5qfLElxbdrs/QR1o= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896418260385.6390397047845; Thu, 4 Mar 2021 14:20:18 -0800 (PST) Received: from localhost ([::1]:54288 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwKP-0000Io-6t for importer@patchew.org; Thu, 04 Mar 2021 17:20:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53422) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCi-0005p8-7I for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:20 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40014 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCf-0005tD-Ns for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:19 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCZ-0008MJ-GY; Thu, 04 Mar 2021 22:12:16 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:33 +0000 Message-Id: <20210304221103.6369-13-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 12/42] esp: remove dma_counter from ESPState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" The value of dma_counter is set once at the start of the transfer and remai= ns the same until the transfer is complete. This allows the check in esp_trans= fer_data to be simplified since dma_left will always be non-zero until the transfer = is completed. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 4 +--- include/hw/scsi/esp.h | 3 --- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 349067eb6a..15c4c33052 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -229,7 +229,6 @@ static void do_busid_cmd(ESPState *s, uint8_t *buf, uin= t8_t busid) if (datalen !=3D 0) { s->rregs[ESP_RSTAT] =3D STAT_TC; s->dma_left =3D 0; - s->dma_counter =3D 0; if (datalen > 0) { s->rregs[ESP_RSTAT] |=3D STAT_DI; } else { @@ -542,7 +541,7 @@ void esp_transfer_data(SCSIRequest *req, uint32_t len) s->async_buf =3D scsi_req_get_buf(req); if (s->dma_left) { esp_do_dma(s); - } else if (s->dma_counter !=3D 0 && s->ti_size <=3D 0) { + } else if (s->ti_size <=3D 0) { /* * If this was the last part of a DMA transfer then the * completion interrupt is deferred to here. @@ -561,7 +560,6 @@ static void handle_ti(ESPState *s) } =20 dmalen =3D esp_get_tc(s); - s->dma_counter =3D dmalen; =20 if (s->do_cmd) { minlen =3D (dmalen < ESP_CMDBUF_SZ) ? dmalen : ESP_CMDBUF_SZ; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 9d149cbc9f..ff1372947b 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -50,9 +50,6 @@ struct ESPState { =20 /* The amount of data left in the current DMA transfer. */ uint32_t dma_left; - /* The size of the current DMA transfer. Zero if no transfer is in - progress. */ - uint32_t dma_counter; int dma_enabled; =20 uint32_t async_len; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896492; cv=none; d=zohomail.com; s=zohoarc; b=dznS9HShttfG+rLLWKP65g7j3GCMl+Z6AdOs/NhjuldWlPyrKZP7kqi9qxctnGlUn2Hw8BWXX5GEOzNHI77zW0+NodS7Ibayn605NJMwQVcQz+SZkihIXNXMW/4TKzlOUtEO7MARmoHRePINlztuiaKrhr9Rg5gTDgbYhfYo2Ng= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896492; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=e30aCoDqBOEwAZDmno/V5A6OIl77TE5XD/VtLZYRNQo=; b=e0+Pjk6gTPRquzRzzlLmAeEeCuqKEe60rGvkUNzXdJ7S1JiNVy2cgNQcZblRe2oKPmirh60DJd9dOckGNTRaqN89TOkUHDJ6IZvb2F95n4GH6c8pkRLVnRuIXLOsRx3MDDTiTh3VLgeEVxVKwNHD0aLmbAucHEyw4K4gg9Ffpa4= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896492454716.6607921250728; Thu, 4 Mar 2021 14:21:32 -0800 (PST) Received: from localhost ([::1]:57270 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwLb-0001ir-An for importer@patchew.org; Thu, 04 Mar 2021 17:21:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53448) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCn-0005xc-63 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:25 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40024 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCk-0005wS-Mb for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:24 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCe-0008MJ-Dt; Thu, 04 Mar 2021 22:12:21 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:34 +0000 Message-Id: <20210304221103.6369-14-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 13/42] esp: remove dma_left from ESPState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" The ESP device already keeps track of the remaining bytes left to transfer = via its TC (transfer counter) register which is decremented for each byte that is transferred across the SCSI bus. Switch the transfer logic to use the value of TC instead of dma_left and th= en remove dma_left completely, adding logic to the vmstate_esp post_load() fun= ction to transfer the old dma_left value to the TC register during migration from older versions. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 47 ++++++++++++++++++++++++++++--------------- include/hw/scsi/esp.h | 5 +++-- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 15c4c33052..92fea6a8c4 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -228,7 +228,7 @@ static void do_busid_cmd(ESPState *s, uint8_t *buf, uin= t8_t busid) s->ti_size =3D datalen; if (datalen !=3D 0) { s->rregs[ESP_RSTAT] =3D STAT_TC; - s->dma_left =3D 0; + esp_set_tc(s, 0); if (datalen > 0) { s->rregs[ESP_RSTAT] |=3D STAT_DI; } else { @@ -382,6 +382,7 @@ static void do_dma_pdma_cb(ESPState *s) { int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); int len =3D s->pdma_cur - s->pdma_start; + if (s->do_cmd) { s->ti_size =3D 0; s->cmdlen =3D 0; @@ -389,7 +390,6 @@ static void do_dma_pdma_cb(ESPState *s) do_cmd(s, s->cmdbuf); return; } - s->dma_left -=3D len; s->async_buf +=3D len; s->async_len -=3D len; if (to_device) { @@ -404,7 +404,7 @@ static void do_dma_pdma_cb(ESPState *s) * complete the DMA operation immediately. Otherwise defer * until the scsi layer has completed. */ - if (to_device || s->dma_left !=3D 0 || s->ti_size =3D=3D 0) { + if (to_device || esp_get_tc(s) !=3D 0 || s->ti_size =3D=3D 0) { return; } } @@ -418,7 +418,7 @@ static void esp_do_dma(ESPState *s) uint32_t len; int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); =20 - len =3D s->dma_left; + len =3D esp_get_tc(s); if (s->do_cmd) { /* * handle_ti_cmd() case: esp_do_dma() is called only from @@ -468,7 +468,7 @@ static void esp_do_dma(ESPState *s) return; } } - s->dma_left -=3D len; + esp_set_tc(s, esp_get_tc(s) - len); s->async_buf +=3D len; s->async_len -=3D len; if (to_device) { @@ -483,7 +483,7 @@ static void esp_do_dma(ESPState *s) * complete the DMA operation immediately. Otherwise defer * until the scsi layer has completed. */ - if (to_device || s->dma_left !=3D 0 || s->ti_size =3D=3D 0) { + if (to_device || esp_get_tc(s) !=3D 0 || s->ti_size =3D=3D 0) { return; } } @@ -499,7 +499,6 @@ static void esp_report_command_complete(ESPState *s, ui= nt32_t status) trace_esp_command_complete_unexpected(); } s->ti_size =3D 0; - s->dma_left =3D 0; s->async_len =3D 0; if (status) { trace_esp_command_complete_fail(); @@ -534,12 +533,13 @@ void esp_command_complete(SCSIRequest *req, size_t re= sid) void esp_transfer_data(SCSIRequest *req, uint32_t len) { ESPState *s =3D req->hba_private; + uint32_t dmalen =3D esp_get_tc(s); =20 assert(!s->do_cmd); - trace_esp_transfer_data(s->dma_left, s->ti_size); + trace_esp_transfer_data(dmalen, s->ti_size); s->async_len =3D len; s->async_buf =3D scsi_req_get_buf(req); - if (s->dma_left) { + if (dmalen) { esp_do_dma(s); } else if (s->ti_size <=3D 0) { /* @@ -570,7 +570,6 @@ static void handle_ti(ESPState *s) } trace_esp_handle_ti(minlen); if (s->dma) { - s->dma_left =3D minlen; s->rregs[ESP_RSTAT] &=3D ~STAT_TC; esp_do_dma(s); } else if (s->do_cmd) { @@ -823,6 +822,14 @@ static const VMStateDescription vmstate_esp_pdma =3D { } }; =20 +static bool esp_is_before_version_5(void *opaque, int version_id) +{ + ESPState *s =3D ESP(opaque); + + version_id =3D MIN(version_id, s->mig_version_id); + return version_id < 5; +} + static int esp_pre_save(void *opaque) { ESPState *s =3D ESP(opaque); @@ -835,6 +842,12 @@ static int esp_post_load(void *opaque, int version_id) { ESPState *s =3D ESP(opaque); =20 + version_id =3D MIN(version_id, s->mig_version_id); + + if (version_id < 5) { + esp_set_tc(s, s->mig_dma_left); + } + s->mig_version_id =3D vmstate_esp.version_id; return 0; } @@ -860,7 +873,7 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_BUFFER_START_MIDDLE_V(cmdbuf, ESPState, 16, 4), VMSTATE_UINT32(cmdlen, ESPState), VMSTATE_UINT32(do_cmd, ESPState), - VMSTATE_UINT32(dma_left, ESPState), + VMSTATE_UINT32_TEST(mig_dma_left, ESPState, esp_is_before_version_= 5), VMSTATE_END_OF_LIST() }, .subsections =3D (const VMStateDescription * []) { @@ -903,12 +916,11 @@ static void sysbus_esp_pdma_write(void *opaque, hwadd= r addr, { SysBusESPState *sysbus =3D opaque; ESPState *s =3D ESP(&sysbus->esp); - uint32_t dmalen; + uint32_t dmalen =3D esp_get_tc(s); uint8_t *buf =3D get_pdma_buf(s); =20 trace_esp_pdma_write(size); =20 - dmalen =3D esp_get_tc(s); if (dmalen =3D=3D 0 || s->pdma_len =3D=3D 0) { return; } @@ -938,27 +950,30 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hw= addr addr, { SysBusESPState *sysbus =3D opaque; ESPState *s =3D ESP(&sysbus->esp); + uint32_t dmalen =3D esp_get_tc(s); uint8_t *buf =3D get_pdma_buf(s); uint64_t val =3D 0; =20 trace_esp_pdma_read(size); =20 - if (s->pdma_len =3D=3D 0) { + if (dmalen =3D=3D 0 || s->pdma_len =3D=3D 0) { return 0; } switch (size) { case 1: val =3D buf[s->pdma_cur++]; s->pdma_len--; + dmalen--; break; case 2: val =3D buf[s->pdma_cur++]; val =3D (val << 8) | buf[s->pdma_cur++]; s->pdma_len -=3D 2; + dmalen -=3D 2; break; } - - if (s->pdma_len =3D=3D 0 && s->pdma_cb) { + esp_set_tc(s, dmalen); + if (dmalen =3D=3D 0 || (s->pdma_len =3D=3D 0 && s->pdma_cb)) { esp_lower_drq(s); s->pdma_cb(s); s->pdma_cb =3D NULL; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index ff1372947b..ff50c9e7d8 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -48,8 +48,6 @@ struct ESPState { uint32_t cmdlen; uint32_t do_cmd; =20 - /* The amount of data left in the current DMA transfer. */ - uint32_t dma_left; int dma_enabled; =20 uint32_t async_len; @@ -67,6 +65,9 @@ struct ESPState { void (*pdma_cb)(ESPState *s); =20 uint8_t mig_version_id; + + /* Legacy fields for vmstate_esp version < 5 */ + uint32_t mig_dma_left; }; =20 #define TYPE_SYSBUS_ESP "sysbus-esp" --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896590; cv=none; d=zohomail.com; s=zohoarc; b=C2LCqKELWDAdTflU17O88Hvw1ozwWmxe5ha43y8RbAZHZe+Q4fL0u3NB/fD/xNwtiiyYPG47HTPHw2uxCytqnaeA4YkSXB/8QtCOj5uOUbkquG5FbfYiFJK9oYmr0I22M/ElAp9ulylq8w1g1zau0eIv9QPUbsszMYSdgfjWUlA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896590; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=PonmsOW9FGJ4jBcGzxjkr31XQxJgUTr+92/aQTI7IWY=; b=MiA+38Re6FSkIJ8ecmuUrkF6J6bHXXSQGW7AM1ejgphlTSXh2fNvb3b6kO+y3v+Ee3tlEVkwRPM5M3//8OaEd/urjQ2LlWl8VDoOVpfmuQZnUcnfkG53VN+mq9Zaljn0AXONnTMhHhn0nSAU21LXHRS6gghi3DGiJ4OWsXY8CBs= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896590113355.57122850750284; Thu, 4 Mar 2021 14:23:10 -0800 (PST) Received: from localhost ([::1]:37474 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwNA-0005Jz-UI for importer@patchew.org; Thu, 04 Mar 2021 17:23:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53460) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCr-0005z6-1q for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:29 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40034 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCp-0005yO-4J for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:28 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCj-0008MJ-Bi; Thu, 04 Mar 2021 22:12:25 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:35 +0000 Message-Id: <20210304221103.6369-15-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 14/42] esp: remove minlen restriction in handle_ti X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" The limiting of DMA transfers to the maximum size of the available data is = already handled by esp_do_dma() and do_dma_pdma_cb(). Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 92fea6a8c4..07d57cb791 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -552,7 +552,7 @@ void esp_transfer_data(SCSIRequest *req, uint32_t len) =20 static void handle_ti(ESPState *s) { - uint32_t dmalen, minlen; + uint32_t dmalen; =20 if (s->dma && !s->dma_enabled) { s->dma_cb =3D handle_ti; @@ -560,16 +560,8 @@ static void handle_ti(ESPState *s) } =20 dmalen =3D esp_get_tc(s); - - if (s->do_cmd) { - minlen =3D (dmalen < ESP_CMDBUF_SZ) ? dmalen : ESP_CMDBUF_SZ; - } else if (s->ti_size < 0) { - minlen =3D (dmalen < -s->ti_size) ? dmalen : -s->ti_size; - } else { - minlen =3D (dmalen < s->ti_size) ? dmalen : s->ti_size; - } - trace_esp_handle_ti(minlen); if (s->dma) { + trace_esp_handle_ti(dmalen); s->rregs[ESP_RSTAT] &=3D ~STAT_TC; esp_do_dma(s); } else if (s->do_cmd) { --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896734; cv=none; d=zohomail.com; s=zohoarc; b=GNwsJylKZN2TgOGqCXfxcIrEQwou06S8IAOT7b9o+bqCZ8gDemEF6Ej5+TrcoeFbEPbfTBa09iymDjP4HEn9IfA+PCQ9nWh+J7TcyaKIex8s9boWixGDqWqOTL0mZLyixA6tL/hB3IQuqXkRWhDZ+EPieQ4f25h3CWUVjB9St2w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896734; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=eRMhauowV4wjYbCGtILKGwD5G2TLLA+IuqT1X2TObG4=; b=TsX8XFvF20fhZwYpk/Zlc+YFlgkKd+1wyiQv6sVMI2XCRaz/Q8do0aQUtzQwk/wDwjOMrahaGm8QmM7mK8XsE4txTUHH0FOuAPBG2rHwjHmMWWEfzQyZdwPcxCD/xuROJRzxlcnof1egOwuTTCpvPWGMAvF4+RAdrV/qGcA5pXg= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896734394403.0818866059916; Thu, 4 Mar 2021 14:25:34 -0800 (PST) Received: from localhost ([::1]:46046 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwPV-0000ep-BB for importer@patchew.org; Thu, 04 Mar 2021 17:25:33 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53486) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCy-00061s-NM for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:36 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40044 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwCv-00060J-GG for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:36 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCn-0008MJ-TW; Thu, 04 Mar 2021 22:12:32 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:36 +0000 Message-Id: <20210304221103.6369-16-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 15/42] esp: introduce esp_pdma_read() and esp_pdma_write() functions X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 07d57cb791..0fafc866a4 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -151,6 +151,20 @@ static uint8_t *get_pdma_buf(ESPState *s) return NULL; } =20 +static uint8_t esp_pdma_read(ESPState *s) +{ + uint8_t *buf =3D get_pdma_buf(s); + + return buf[s->pdma_cur++]; +} + +static void esp_pdma_write(ESPState *s, uint8_t val) +{ + uint8_t *buf =3D get_pdma_buf(s); + + buf[s->pdma_cur++] =3D val; +} + static int get_cmd_cb(ESPState *s) { int target; @@ -909,7 +923,6 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr = addr, SysBusESPState *sysbus =3D opaque; ESPState *s =3D ESP(&sysbus->esp); uint32_t dmalen =3D esp_get_tc(s); - uint8_t *buf =3D get_pdma_buf(s); =20 trace_esp_pdma_write(size); =20 @@ -918,13 +931,13 @@ static void sysbus_esp_pdma_write(void *opaque, hwadd= r addr, } switch (size) { case 1: - buf[s->pdma_cur++] =3D val; + esp_pdma_write(s, val); s->pdma_len--; dmalen--; break; case 2: - buf[s->pdma_cur++] =3D val >> 8; - buf[s->pdma_cur++] =3D val; + esp_pdma_write(s, val >> 8); + esp_pdma_write(s, val); s->pdma_len -=3D 2; dmalen -=3D 2; break; @@ -943,7 +956,6 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hwad= dr addr, SysBusESPState *sysbus =3D opaque; ESPState *s =3D ESP(&sysbus->esp); uint32_t dmalen =3D esp_get_tc(s); - uint8_t *buf =3D get_pdma_buf(s); uint64_t val =3D 0; =20 trace_esp_pdma_read(size); @@ -953,13 +965,13 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hw= addr addr, } switch (size) { case 1: - val =3D buf[s->pdma_cur++]; + val =3D esp_pdma_read(s); s->pdma_len--; dmalen--; break; case 2: - val =3D buf[s->pdma_cur++]; - val =3D (val << 8) | buf[s->pdma_cur++]; + val =3D esp_pdma_read(s); + val =3D (val << 8) | esp_pdma_read(s); s->pdma_len -=3D 2; dmalen -=3D 2; break; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896920; cv=none; d=zohomail.com; s=zohoarc; b=Z4GxUrfMlCjgexN8i8RujN+9h5u14URoVHg4RmWlU5K5j/tjy5r0eADsmVE4FOsuDi67LZTuwWZNbTX68uD+9fNjVBv5UJ85ZtTHK4uEi7H5x7zeTuOWsMMVe9wp2ZPBakVr63rWqgw14Q+cZyUx6tJLJ6GygafCNFnnCXH7Mbg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896920; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9sW3nudtHf3a4ZPSOu3lX27j/IU1Ifx9Xz7U74xjmSc=; b=eah0lOwyWA2Rw9gvPs5YDvYYIouFtp0ZN6xi0HiHh0T1S8vNQpU/z6eil2yT9cVKEYcCzRADkV7+B5HJblA+/CalrqMTrcnFfbXoWkvhWSJZ7hgDH5OOgxBObwMkRdwNpL1UxSiVbHz2/eZ8C+5ZOLwXBWZx/Loh2nJypUrdI6s= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161489692071316.45060139403006; Thu, 4 Mar 2021 14:28:40 -0800 (PST) Received: from localhost ([::1]:54274 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwSS-0004Hs-QK for importer@patchew.org; Thu, 04 Mar 2021 17:28:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53498) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwD3-00069u-7t for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:41 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40054 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwD1-00062r-PX for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:40 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwCu-0008MJ-9b; Thu, 04 Mar 2021 22:12:38 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:37 +0000 Message-Id: <20210304221103.6369-17-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 16/42] esp: use pdma_origin directly in esp_pdma_read()/esp_pdma_write() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" This is the first step in removing get_pdma_buf() from esp.c. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 0fafc866a4..58be98f047 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -153,16 +153,38 @@ static uint8_t *get_pdma_buf(ESPState *s) =20 static uint8_t esp_pdma_read(ESPState *s) { - uint8_t *buf =3D get_pdma_buf(s); - - return buf[s->pdma_cur++]; + switch (s->pdma_origin) { + case PDMA: + return s->pdma_buf[s->pdma_cur++]; + case TI: + return s->ti_buf[s->pdma_cur++]; + case CMD: + return s->cmdbuf[s->pdma_cur++]; + case ASYNC: + return s->async_buf[s->pdma_cur++]; + default: + g_assert_not_reached(); + } } =20 static void esp_pdma_write(ESPState *s, uint8_t val) { - uint8_t *buf =3D get_pdma_buf(s); - - buf[s->pdma_cur++] =3D val; + switch (s->pdma_origin) { + case PDMA: + s->pdma_buf[s->pdma_cur++] =3D val; + break; + case TI: + s->ti_buf[s->pdma_cur++] =3D val; + break; + case CMD: + s->cmdbuf[s->pdma_cur++] =3D val; + break; + case ASYNC: + s->async_buf[s->pdma_cur++] =3D val; + break; + default: + g_assert_not_reached(); + } } =20 static int get_cmd_cb(ESPState *s) --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896535; cv=none; d=zohomail.com; s=zohoarc; b=fL/8bhnUQx4qI4FEPsF2ZOr4DGt+5CGB6vEZwk36yxTLXrDEl38GV3J8/qoIO3Sti24eBoAB8iz6kU0MSJ3Zra/U9imAwmIjjwbBjGkQS5sb1LQ1gWnPAafSiZymTyUEBxNzxT/vs+xOTRDOykm4g5gQGomGtPMdWZfpI76cbuA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896535; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=JCxRDNzpLuRDXD0iIYkd5eiIrfbJzFEIYoQv70+ko/w=; b=AD73CPN7Dc85iXxdhMz63REgc4qa0Adbp7PmSm2gK3fB95/vp9YjqUH2hb9l3wiZuGXNNRHtTU4SNt+7r9jsl+h6r84EjGpFW7jbSdgvFbwwmIX2bJqPt0KPn3Y+8vALfVMLuV7viD24+9ZbKC1s7/vGylOMFFCXPYC9ndN3huU= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896535837700.4704498607726; Thu, 4 Mar 2021 14:22:15 -0800 (PST) Received: from localhost ([::1]:32890 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwMI-0003Nk-IJ for importer@patchew.org; Thu, 04 Mar 2021 17:22:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53534) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDA-0006SZ-9H for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:48 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40064 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwD8-00065g-Dx for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:48 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwD0-0008MJ-Gq; Thu, 04 Mar 2021 22:12:44 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:38 +0000 Message-Id: <20210304221103.6369-18-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 17/42] esp: move pdma_len and TC logic into esp_pdma_read()/esp_pdma_write() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 58be98f047..b8d1ec41e9 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -153,22 +153,45 @@ static uint8_t *get_pdma_buf(ESPState *s) =20 static uint8_t esp_pdma_read(ESPState *s) { + uint32_t dmalen =3D esp_get_tc(s); + uint8_t val; + + if (dmalen =3D=3D 0 || s->pdma_len =3D=3D 0) { + return 0; + } + switch (s->pdma_origin) { case PDMA: - return s->pdma_buf[s->pdma_cur++]; + val =3D s->pdma_buf[s->pdma_cur++]; + break; case TI: - return s->ti_buf[s->pdma_cur++]; + val =3D s->ti_buf[s->pdma_cur++]; + break; case CMD: - return s->cmdbuf[s->pdma_cur++]; + val =3D s->cmdbuf[s->pdma_cur++]; + break; case ASYNC: - return s->async_buf[s->pdma_cur++]; + val =3D s->async_buf[s->pdma_cur++]; + break; default: g_assert_not_reached(); } + + s->pdma_len--; + dmalen--; + esp_set_tc(s, dmalen); + + return val; } =20 static void esp_pdma_write(ESPState *s, uint8_t val) { + uint32_t dmalen =3D esp_get_tc(s); + + if (dmalen =3D=3D 0 || s->pdma_len =3D=3D 0) { + return; + } + switch (s->pdma_origin) { case PDMA: s->pdma_buf[s->pdma_cur++] =3D val; @@ -185,6 +208,10 @@ static void esp_pdma_write(ESPState *s, uint8_t val) default: g_assert_not_reached(); } + + s->pdma_len--; + dmalen--; + esp_set_tc(s, dmalen); } =20 static int get_cmd_cb(ESPState *s) @@ -944,27 +971,18 @@ static void sysbus_esp_pdma_write(void *opaque, hwadd= r addr, { SysBusESPState *sysbus =3D opaque; ESPState *s =3D ESP(&sysbus->esp); - uint32_t dmalen =3D esp_get_tc(s); =20 trace_esp_pdma_write(size); =20 - if (dmalen =3D=3D 0 || s->pdma_len =3D=3D 0) { - return; - } switch (size) { case 1: esp_pdma_write(s, val); - s->pdma_len--; - dmalen--; break; case 2: esp_pdma_write(s, val >> 8); esp_pdma_write(s, val); - s->pdma_len -=3D 2; - dmalen -=3D 2; break; } - esp_set_tc(s, dmalen); if (s->pdma_len =3D=3D 0 && s->pdma_cb) { esp_lower_drq(s); s->pdma_cb(s); @@ -988,17 +1006,13 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, h= waddr addr, switch (size) { case 1: val =3D esp_pdma_read(s); - s->pdma_len--; - dmalen--; break; case 2: val =3D esp_pdma_read(s); val =3D (val << 8) | esp_pdma_read(s); - s->pdma_len -=3D 2; - dmalen -=3D 2; break; } - esp_set_tc(s, dmalen); + dmalen =3D esp_get_tc(s); if (dmalen =3D=3D 0 || (s->pdma_len =3D=3D 0 && s->pdma_cb)) { esp_lower_drq(s); s->pdma_cb(s); --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897032; cv=none; d=zohomail.com; s=zohoarc; b=ZNL9hYlb+kgvAzBcp23YUcLHzp4CO0EEaiFLVLYuobLrOjodAg2lVQuGxAC+L8C4W2y9NxyVK7pId8ZmDT0Y7WE5w2szQhXa+P7r3aRQm2q3zA7V5kkPR6PiJYlsypjPLJ1C6dP8ZmKbUIAOQD5Z6v0vKJI8znVSVH8HJpkiz7M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897032; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZpLqXYqnbZ/uIa+jHGolVJxlNmBhQSbJ7SgWRpishtM=; b=FHnBfZ5ts9AzBXkaKkat60sU/r8sHJGwaHqj/c0WxS/2usaFgKwTvM+gcROBK0jcJA9M6xaEAVs1u3CA4Vi8KhLTNl8qe4gdJefHsoIs8hzhnS1MJF0XC7nO8vgFySrYpNrIYJPVg72eQmivHy9Ot73gh8/x6FNNuO6funZNhsc= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897032824638.5992379681608; Thu, 4 Mar 2021 14:30:32 -0800 (PST) Received: from localhost ([::1]:34394 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwUJ-0007ji-HR for importer@patchew.org; Thu, 04 Mar 2021 17:30:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDF-0006dS-38 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:53 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40074 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDD-00067Q-98 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:52 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwD7-0008MJ-0m; Thu, 04 Mar 2021 22:12:49 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:39 +0000 Message-Id: <20210304221103.6369-19-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 18/42] esp: accumulate SCSI commands for PDMA transfers in cmdbuf instead of pdma_buf X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" ESP SCSI commands are already accumulated in cmdbuf and so there is no need= to keep a separate pdma_buf buffer. Accumulate SCSI commands for PDMA transfer= s in cmdbuf instead of pdma_buf so update cmdlen accordingly and change pdma_ori= gin for PDMA transfers to CMD which allows the PDMA origin to be removed. This commit also removes a stray memcpy() from get_cmd() which is a no-op b= ecause cmdlen is always zero at the start of a command. Notionally the removal of pdma_buf from vmstate_esp_pdma also breaks migrat= ion compatibility for the PDMA subsection until its complete removal by the end= of the series. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 56 +++++++++++++++++++------------------------ include/hw/scsi/esp.h | 2 -- 2 files changed, 25 insertions(+), 33 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index b8d1ec41e9..66caa95815 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -139,8 +139,6 @@ static void set_pdma(ESPState *s, enum pdma_origin_id o= rigin, static uint8_t *get_pdma_buf(ESPState *s) { switch (s->pdma_origin) { - case PDMA: - return s->pdma_buf; case TI: return s->ti_buf; case CMD: @@ -161,14 +159,12 @@ static uint8_t esp_pdma_read(ESPState *s) } =20 switch (s->pdma_origin) { - case PDMA: - val =3D s->pdma_buf[s->pdma_cur++]; - break; case TI: val =3D s->ti_buf[s->pdma_cur++]; break; case CMD: - val =3D s->cmdbuf[s->pdma_cur++]; + val =3D s->cmdbuf[s->cmdlen++]; + s->pdma_cur++; break; case ASYNC: val =3D s->async_buf[s->pdma_cur++]; @@ -193,14 +189,12 @@ static void esp_pdma_write(ESPState *s, uint8_t val) } =20 switch (s->pdma_origin) { - case PDMA: - s->pdma_buf[s->pdma_cur++] =3D val; - break; case TI: s->ti_buf[s->pdma_cur++] =3D val; break; case CMD: - s->cmdbuf[s->pdma_cur++] =3D val; + s->cmdbuf[s->cmdlen++] =3D val; + s->pdma_cur++; break; case ASYNC: s->async_buf[s->pdma_cur++] =3D val; @@ -256,8 +250,7 @@ static uint32_t get_cmd(ESPState *s, uint8_t *buf, uint= 8_t buflen) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, buf, dmalen); } else { - memcpy(s->pdma_buf, buf, dmalen); - set_pdma(s, PDMA, 0, dmalen); + set_pdma(s, CMD, 0, dmalen); esp_raise_drq(s); return 0; } @@ -316,24 +309,24 @@ static void satn_pdma_cb(ESPState *s) if (get_cmd_cb(s) < 0) { return; } - if (s->pdma_cur !=3D s->pdma_start) { - do_cmd(s, get_pdma_buf(s) + s->pdma_start); + s->do_cmd =3D 0; + if (s->cmdlen) { + do_cmd(s, s->cmdbuf); } } =20 static void handle_satn(ESPState *s) { - uint8_t buf[32]; - int len; - if (s->dma && !s->dma_enabled) { s->dma_cb =3D handle_satn; return; } s->pdma_cb =3D satn_pdma_cb; - len =3D get_cmd(s, buf, sizeof(buf)); - if (len) { - do_cmd(s, buf); + s->cmdlen =3D get_cmd(s, s->cmdbuf, sizeof(s->cmdbuf)); + if (s->cmdlen) { + do_cmd(s, s->cmdbuf); + } else { + s->do_cmd =3D 1; } } =20 @@ -342,24 +335,24 @@ static void s_without_satn_pdma_cb(ESPState *s) if (get_cmd_cb(s) < 0) { return; } - if (s->pdma_cur !=3D s->pdma_start) { + s->do_cmd =3D 0; + if (s->cmdlen) { do_busid_cmd(s, get_pdma_buf(s) + s->pdma_start, 0); } } =20 static void handle_s_without_atn(ESPState *s) { - uint8_t buf[32]; - int len; - if (s->dma && !s->dma_enabled) { s->dma_cb =3D handle_s_without_atn; return; } s->pdma_cb =3D s_without_satn_pdma_cb; - len =3D get_cmd(s, buf, sizeof(buf)); - if (len) { - do_busid_cmd(s, buf, 0); + s->cmdlen =3D get_cmd(s, s->cmdbuf, sizeof(s->cmdbuf)); + if (s->cmdlen) { + do_busid_cmd(s, s->cmdbuf, 0); + } else { + s->do_cmd =3D 1; } } =20 @@ -368,7 +361,7 @@ static void satn_stop_pdma_cb(ESPState *s) if (get_cmd_cb(s) < 0) { return; } - s->cmdlen =3D s->pdma_cur - s->pdma_start; + s->do_cmd =3D 0; if (s->cmdlen) { trace_esp_handle_satn_stop(s->cmdlen); s->do_cmd =3D 1; @@ -394,6 +387,8 @@ static void handle_satn_stop(ESPState *s) s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; esp_raise_irq(s); + } else { + s->do_cmd =3D 1; } } =20 @@ -864,11 +859,10 @@ static bool esp_pdma_needed(void *opaque) =20 static const VMStateDescription vmstate_esp_pdma =3D { .name =3D "esp/pdma", - .version_id =3D 1, - .minimum_version_id =3D 1, + .version_id =3D 2, + .minimum_version_id =3D 2, .needed =3D esp_pdma_needed, .fields =3D (VMStateField[]) { - VMSTATE_BUFFER(pdma_buf, ESPState), VMSTATE_INT32(pdma_origin, ESPState), VMSTATE_UINT32(pdma_len, ESPState), VMSTATE_UINT32(pdma_start, ESPState), diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index ff50c9e7d8..600d0c31ab 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -16,7 +16,6 @@ typedef void (*ESPDMAMemoryReadWriteFunc)(void *opaque, u= int8_t *buf, int len); typedef struct ESPState ESPState; =20 enum pdma_origin_id { - PDMA, TI, CMD, ASYNC, @@ -57,7 +56,6 @@ struct ESPState { ESPDMAMemoryReadWriteFunc dma_memory_write; void *dma_opaque; void (*dma_cb)(ESPState *s); - uint8_t pdma_buf[32]; int pdma_origin; uint32_t pdma_len; uint32_t pdma_start; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897221; cv=none; d=zohomail.com; s=zohoarc; b=KF+3vJXMazdWyeCycNwKqT23Olm3zlVtm81Y+D3S/WaVb6GhvBNskI2oD28iBEYzcDFvum0dSy1Q81Sr1wNtCZm8eMqoZPiQbnaLm5m0RRg2xmw7TezLHTy89lwqqrC+81AFq1DZjq5InJhTjNQSxDSB+mFaHUVq8zG4y7ti5+8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897221; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=fzHaUvJyVIL+jtonxu/bAH/GvB5p3lyJ3YEBX1m/r5Q=; b=TEMIaadnnnAZyvY2ISVa8HyrptPm2pdOQ55jm5jsOkcXKWdxTh6F/+I4ZWqPGf7LBim5RB/xHsmNg26iTLXaQNq+v3rmHBpeAYXaK93OJPqBCAmvRx0ZtX7qhxxFjBc2s09iMhLdGFvqOK6LWbGCoz4Wu8mFH0QQNAkrAmaIvfU= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897221166325.2152485615321; Thu, 4 Mar 2021 14:33:41 -0800 (PST) Received: from localhost ([::1]:42710 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwXM-0002uQ-69 for importer@patchew.org; Thu, 04 Mar 2021 17:33:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53614) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDK-0006ja-7l for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:58 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40084 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDI-000695-3t for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:12:58 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwDB-0008MJ-UD; Thu, 04 Mar 2021 22:12:54 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:40 +0000 Message-Id: <20210304221103.6369-20-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 19/42] esp: remove buf parameter from do_cmd() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Now that all SCSI commands are accumulated in cmdbuf, remove the buf parame= ter from do_cmd() since this always points to cmdbuf. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 66caa95815..8ebf5e8d4b 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -297,8 +297,9 @@ static void do_busid_cmd(ESPState *s, uint8_t *buf, uin= t8_t busid) esp_raise_irq(s); } =20 -static void do_cmd(ESPState *s, uint8_t *buf) +static void do_cmd(ESPState *s) { + uint8_t *buf =3D s->cmdbuf; uint8_t busid =3D buf[0]; =20 do_busid_cmd(s, &buf[1], busid); @@ -311,7 +312,7 @@ static void satn_pdma_cb(ESPState *s) } s->do_cmd =3D 0; if (s->cmdlen) { - do_cmd(s, s->cmdbuf); + do_cmd(s); } } =20 @@ -324,7 +325,7 @@ static void handle_satn(ESPState *s) s->pdma_cb =3D satn_pdma_cb; s->cmdlen =3D get_cmd(s, s->cmdbuf, sizeof(s->cmdbuf)); if (s->cmdlen) { - do_cmd(s, s->cmdbuf); + do_cmd(s); } else { s->do_cmd =3D 1; } @@ -445,7 +446,7 @@ static void do_dma_pdma_cb(ESPState *s) s->ti_size =3D 0; s->cmdlen =3D 0; s->do_cmd =3D 0; - do_cmd(s, s->cmdbuf); + do_cmd(s); return; } s->async_buf +=3D len; @@ -497,7 +498,7 @@ static void esp_do_dma(ESPState *s) s->ti_size =3D 0; s->cmdlen =3D 0; s->do_cmd =3D 0; - do_cmd(s, s->cmdbuf); + do_cmd(s); return; } if (s->async_len =3D=3D 0) { @@ -627,7 +628,7 @@ static void handle_ti(ESPState *s) s->ti_size =3D 0; s->cmdlen =3D 0; s->do_cmd =3D 0; - do_cmd(s, s->cmdbuf); + do_cmd(s); } } =20 --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896506; cv=none; d=zohomail.com; s=zohoarc; b=X2PbpUNs3mYqqVIXAdqVHgG3vpNu9SY6fqE8MhayI8448MDGE1kYDXI9fzETJd0WUvsONvLR3OjsZVfmJD9AVrwB/gm+SLf7ekfB/8N+lJ1aUKltA3D7T2T/Y4Nbr4s+j7xnZqLRwewJ0vW/V/5929HaL8bXmopkAVu9lyAoNSk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896506; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=2Eqk3T4NcbvO6ZMY3UMKNMnENzBOMnWn4kOreUC1UiI=; b=BfKad7CS43S1rkyNP5txusuGxnPp6Pf74+dIfg+pc8lPswyFnxP2cOiDJr8S4OqNfn1aqFONIw7WOK716s+TakLOT86nL2Z5xk4DnhuoigR3FBKvI27ULfHMKhBUaPUXtOi25FTQCIRGW7WGnO9Nxgm7G2kdU/eaTnAS3HGjSSU= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16148965064351001.2350030105428; Thu, 4 Mar 2021 14:21:46 -0800 (PST) Received: from localhost ([::1]:58810 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwLp-0002Qc-Df for importer@patchew.org; Thu, 04 Mar 2021 17:21:45 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53640) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDP-0006oD-07 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:03 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40096 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDN-0006Bi-2r for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:02 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwDG-0008MJ-TE; Thu, 04 Mar 2021 22:12:59 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:41 +0000 Message-Id: <20210304221103.6369-21-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 20/42] esp: remove the buf and buflen parameters from get_cmd() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Now that all SCSI commands are accumulated in cmdbuf, remove the buf and bu= flen parameters from get_cmd() since these always reference cmdbuf and ESP_CMDBU= F_SZ respectively. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 8ebf5e8d4b..44fddf082c 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -236,15 +236,16 @@ static int get_cmd_cb(ESPState *s) return 0; } =20 -static uint32_t get_cmd(ESPState *s, uint8_t *buf, uint8_t buflen) +static uint32_t get_cmd(ESPState *s) { + uint8_t *buf =3D s->cmdbuf; uint32_t dmalen; int target; =20 target =3D s->wregs[ESP_WBUSID] & BUSID_DID; if (s->dma) { dmalen =3D esp_get_tc(s); - if (dmalen > buflen) { + if (dmalen > ESP_CMDBUF_SZ) { return 0; } if (s->dma_memory_read) { @@ -323,7 +324,7 @@ static void handle_satn(ESPState *s) return; } s->pdma_cb =3D satn_pdma_cb; - s->cmdlen =3D get_cmd(s, s->cmdbuf, sizeof(s->cmdbuf)); + s->cmdlen =3D get_cmd(s); if (s->cmdlen) { do_cmd(s); } else { @@ -349,7 +350,7 @@ static void handle_s_without_atn(ESPState *s) return; } s->pdma_cb =3D s_without_satn_pdma_cb; - s->cmdlen =3D get_cmd(s, s->cmdbuf, sizeof(s->cmdbuf)); + s->cmdlen =3D get_cmd(s); if (s->cmdlen) { do_busid_cmd(s, s->cmdbuf, 0); } else { @@ -380,7 +381,7 @@ static void handle_satn_stop(ESPState *s) return; } s->pdma_cb =3D satn_stop_pdma_cb; - s->cmdlen =3D get_cmd(s, s->cmdbuf, sizeof(s->cmdbuf)); + s->cmdlen =3D get_cmd(s); if (s->cmdlen) { trace_esp_handle_satn_stop(s->cmdlen); s->do_cmd =3D 1; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896648; cv=none; d=zohomail.com; s=zohoarc; b=CPHcIWrnbZZDdbqQxocp+yiaiI3+VcM+2UwGInRiJfqsS+TPqD20S1ZNG/189TM+k3EnctZRbsAhTiwrZW+yuGWdAtbNhljQ9d4QYXdkw9kTjuUVVXkB96FNv+cryjFuqBRhJkyTm14H/un/u6Wg8TOUwaxho2fPbk7P/1iI4z8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896648; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gGSOiaK8CxIQJOVaSpcjk54Jco8M/NT4BDwBvyH30j4=; b=mgtyEstgfzH7uPXasMuodFbI5E9O4tIgdreDIPbS4edUhan21L6zpiUITOME5Fj+hG3MmCuvhDXxsRM0zqfosJS1RJrjluhgvpXLKsAYOQjcJoCtbRkgHf7zunJU2x/p3p48uhBpx2EpXeSL/d4Wq5lDsEa9rzlEuiQ2hTKQrOw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161489664897542.71542725948564; Thu, 4 Mar 2021 14:24:08 -0800 (PST) Received: from localhost ([::1]:41160 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwO7-0006uK-M5 for importer@patchew.org; Thu, 04 Mar 2021 17:24:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53680) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDU-00073o-I5 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:08 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40106 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDS-0006ES-Sh for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:08 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwDM-0008MJ-1d; Thu, 04 Mar 2021 22:13:05 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:42 +0000 Message-Id: <20210304221103.6369-22-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 21/42] esp: remove redundant pdma_start from ESPState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Now that PDMA SCSI commands are accumulated in cmdbuf in the same way as no= rmal commands, the existing logic for locating the start of the SCSI command in cmdbuf via cmdlen can be used. This enables the PDMA-specific pdma_start and also get_pdma_buf() to be removed. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 19 ++----------------- include/hw/scsi/esp.h | 1 - 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 44fddf082c..38c05e97c3 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -131,24 +131,10 @@ static void set_pdma(ESPState *s, enum pdma_origin_id= origin, uint32_t index, uint32_t len) { s->pdma_origin =3D origin; - s->pdma_start =3D index; s->pdma_cur =3D index; s->pdma_len =3D len; } =20 -static uint8_t *get_pdma_buf(ESPState *s) -{ - switch (s->pdma_origin) { - case TI: - return s->ti_buf; - case CMD: - return s->cmdbuf; - case ASYNC: - return s->async_buf; - } - return NULL; -} - static uint8_t esp_pdma_read(ESPState *s) { uint32_t dmalen =3D esp_get_tc(s); @@ -339,7 +325,7 @@ static void s_without_satn_pdma_cb(ESPState *s) } s->do_cmd =3D 0; if (s->cmdlen) { - do_busid_cmd(s, get_pdma_buf(s) + s->pdma_start, 0); + do_busid_cmd(s, s->cmdbuf, 0); } } =20 @@ -441,7 +427,7 @@ static void esp_dma_done(ESPState *s) static void do_dma_pdma_cb(ESPState *s) { int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); - int len =3D s->pdma_cur - s->pdma_start; + int len =3D s->pdma_cur; =20 if (s->do_cmd) { s->ti_size =3D 0; @@ -867,7 +853,6 @@ static const VMStateDescription vmstate_esp_pdma =3D { .fields =3D (VMStateField[]) { VMSTATE_INT32(pdma_origin, ESPState), VMSTATE_UINT32(pdma_len, ESPState), - VMSTATE_UINT32(pdma_start, ESPState), VMSTATE_UINT32(pdma_cur, ESPState), VMSTATE_END_OF_LIST() } diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 600d0c31ab..55b0aee762 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -58,7 +58,6 @@ struct ESPState { void (*dma_cb)(ESPState *s); int pdma_origin; uint32_t pdma_len; - uint32_t pdma_start; uint32_t pdma_cur; void (*pdma_cb)(ESPState *s); =20 --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896574; cv=none; d=zohomail.com; s=zohoarc; b=dOY3AkMO4++pr+Qvzis/wi5mO20DGmH4ggLwRhMFWRJ9EGBYdh+EVOEfIjhSvgFghNP9RPM+IGtxbad2PUvuhV2nR9OBYlIMMOhHjr+ZMkSi4TNSF5q3crm3PIZtMDzEFJEQ4BS0knfCIujEs6fxQQYoG/pi4d1A5764Vtakke8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896574; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=x7v/I9f5f8ZOApn6lxBANwVUSyFYcYvy7OAN2Z0LgN4=; b=eH/r7J62n8SjiACDqKxk6Ysu4sasaxvZWzyehhZA6PMl4jze+ClApdwGyjvIyXdukXcMEPtMnlQx86eRsTb5InvsoyHr87FInhaI2TTaZqK8sVWWngfQTdinJSoQBiKty3GR27DwibPw3JYtu4MKtLT+/eBrN0DZccRSbcwcnGE= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896574075263.93150929281524; Thu, 4 Mar 2021 14:22:54 -0800 (PST) Received: from localhost ([::1]:35838 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwMu-0004dr-OU for importer@patchew.org; Thu, 04 Mar 2021 17:22:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53726) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDb-0007Lw-0I for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:15 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40114 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDZ-0006Gr-7m for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:14 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwDR-0008MJ-Ej; Thu, 04 Mar 2021 22:13:11 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:43 +0000 Message-Id: <20210304221103.6369-23-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 22/42] esp: move PDMA length adjustments into esp_pdma_read()/esp_pdma_write() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Here the updates to async_len and ti_size are moved into the corresponding esp_pdma_read()/esp_pdma_write() function to eliminate the reference to pdma_cur in do_dma_pdma_cb(). Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 38c05e97c3..bb3a9cd5e3 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -153,12 +153,18 @@ static uint8_t esp_pdma_read(ESPState *s) s->pdma_cur++; break; case ASYNC: - val =3D s->async_buf[s->pdma_cur++]; + val =3D s->async_buf[0]; + if (s->async_len > 0) { + s->async_len--; + s->async_buf++; + } + s->pdma_cur++; break; default: g_assert_not_reached(); } =20 + s->ti_size--; s->pdma_len--; dmalen--; esp_set_tc(s, dmalen); @@ -183,12 +189,18 @@ static void esp_pdma_write(ESPState *s, uint8_t val) s->pdma_cur++; break; case ASYNC: - s->async_buf[s->pdma_cur++] =3D val; + s->async_buf[0] =3D val; + if (s->async_len > 0) { + s->async_len--; + s->async_buf++; + } + s->pdma_cur++; break; default: g_assert_not_reached(); } =20 + s->ti_size++; s->pdma_len--; dmalen--; esp_set_tc(s, dmalen); @@ -427,7 +439,6 @@ static void esp_dma_done(ESPState *s) static void do_dma_pdma_cb(ESPState *s) { int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); - int len =3D s->pdma_cur; =20 if (s->do_cmd) { s->ti_size =3D 0; @@ -436,13 +447,6 @@ static void do_dma_pdma_cb(ESPState *s) do_cmd(s); return; } - s->async_buf +=3D len; - s->async_len -=3D len; - if (to_device) { - s->ti_size +=3D len; - } else { - s->ti_size -=3D len; - } if (s->async_len =3D=3D 0) { scsi_req_continue(s->current_req); /* --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896708; cv=none; d=zohomail.com; s=zohoarc; b=Spi2gfPV3DaJYbuzJd8+Qa33CphKpSm7/HvCH/Ibs/uCXyVDtI3KCZe6hXabGFTBlLy7fnBufScnTAz3MpTuhBo2mqnP4K51B3DC1cwvUtv+GT6Dwrtfx4k+WUv81IpfwKmP5hIzPwPOnlU08qxXczGe6Dr+49XYeLv8HR9LQnY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896708; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=DM6iGwzt3VSierIAMGw3alM3Bb/84prQXADmLzo/kns=; b=l6y5s4QbuOk8XyEfBnNvfLvG+JGDKx8FwG14SixRYXFrQL+XLR781jXmgP8qiiaHfYOCdKi2i5rElOGDJ8njW7P9ra7+4uMabBjoF41IlWE2QaSB8YH+GGe9xr+CioyeaBj33D/YDC/R6BSACtY2R1i3GFAKSh3//1Nb9hEwG/Y= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896708667965.9448912880365; Thu, 4 Mar 2021 14:25:08 -0800 (PST) Received: from localhost ([::1]:44248 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwP5-0008G4-KW for importer@patchew.org; Thu, 04 Mar 2021 17:25:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDh-0007f7-Rj for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:21 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40130 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDg-0006KA-3V for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:21 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwDY-0008MJ-81; Thu, 04 Mar 2021 22:13:18 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:44 +0000 Message-Id: <20210304221103.6369-24-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 23/42] esp: use ti_wptr/ti_rptr to manage the current FIFO position for PDMA X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" This eliminates the last user of the PDMA-specific pdma_cur variable which = can now be removed. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 23 ++++++++--------------- include/hw/scsi/esp.h | 1 - 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index bb3a9cd5e3..7bf2ec9c94 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -127,11 +127,9 @@ static uint32_t esp_get_stc(ESPState *s) return dmalen; } =20 -static void set_pdma(ESPState *s, enum pdma_origin_id origin, - uint32_t index, uint32_t len) +static void set_pdma(ESPState *s, enum pdma_origin_id origin, uint32_t len) { s->pdma_origin =3D origin; - s->pdma_cur =3D index; s->pdma_len =3D len; } =20 @@ -146,11 +144,10 @@ static uint8_t esp_pdma_read(ESPState *s) =20 switch (s->pdma_origin) { case TI: - val =3D s->ti_buf[s->pdma_cur++]; + val =3D s->ti_buf[s->ti_rptr++]; break; case CMD: val =3D s->cmdbuf[s->cmdlen++]; - s->pdma_cur++; break; case ASYNC: val =3D s->async_buf[0]; @@ -158,7 +155,6 @@ static uint8_t esp_pdma_read(ESPState *s) s->async_len--; s->async_buf++; } - s->pdma_cur++; break; default: g_assert_not_reached(); @@ -182,11 +178,10 @@ static void esp_pdma_write(ESPState *s, uint8_t val) =20 switch (s->pdma_origin) { case TI: - s->ti_buf[s->pdma_cur++] =3D val; + s->ti_buf[s->ti_wptr++] =3D val; break; case CMD: s->cmdbuf[s->cmdlen++] =3D val; - s->pdma_cur++; break; case ASYNC: s->async_buf[0] =3D val; @@ -194,7 +189,6 @@ static void esp_pdma_write(ESPState *s, uint8_t val) s->async_len--; s->async_buf++; } - s->pdma_cur++; break; default: g_assert_not_reached(); @@ -249,7 +243,7 @@ static uint32_t get_cmd(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, buf, dmalen); } else { - set_pdma(s, CMD, 0, dmalen); + set_pdma(s, CMD, dmalen); esp_raise_drq(s); return 0; } @@ -412,7 +406,7 @@ static void write_response(ESPState *s) s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; } else { - set_pdma(s, TI, 0, 2); + set_pdma(s, TI, 2); s->pdma_cb =3D write_response_pdma_cb; esp_raise_drq(s); return; @@ -480,7 +474,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, &s->cmdbuf[s->cmdlen], len); } else { - set_pdma(s, CMD, s->cmdlen, len); + set_pdma(s, CMD, len); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; @@ -503,7 +497,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, s->async_buf, len); } else { - set_pdma(s, ASYNC, 0, len); + set_pdma(s, ASYNC, len); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; @@ -512,7 +506,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_write) { s->dma_memory_write(s->dma_opaque, s->async_buf, len); } else { - set_pdma(s, ASYNC, 0, len); + set_pdma(s, ASYNC, len); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; @@ -857,7 +851,6 @@ static const VMStateDescription vmstate_esp_pdma =3D { .fields =3D (VMStateField[]) { VMSTATE_INT32(pdma_origin, ESPState), VMSTATE_UINT32(pdma_len, ESPState), - VMSTATE_UINT32(pdma_cur, ESPState), VMSTATE_END_OF_LIST() } }; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 55b0aee762..26bd015cf4 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -58,7 +58,6 @@ struct ESPState { void (*dma_cb)(ESPState *s); int pdma_origin; uint32_t pdma_len; - uint32_t pdma_cur; void (*pdma_cb)(ESPState *s); =20 uint8_t mig_version_id; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896902; cv=none; d=zohomail.com; s=zohoarc; b=M6ekM+2FUV+uBtibHXG3IPD2RU1vEOH/2PaPu+32arorE7b8Dk2j8NEQS1/vDBDuzYHhblDFbvxuRKDtUUxO9FYQcBu5xHvybJ56tGECyWp7wskNh5/+Xs2a5dTVc/8rx6TajiHAaRjWiah6K0sW0+cwBJtsvh9z786Oewp3Eug= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896902; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=oF835FkM6/cAvrWoTM9Ec7JM6keWoVEK/681dYed91Y=; b=ANGWGSOqpqE2xqVhbheUsWKo3K0OBGgvgMANn8wcc/fDBR9+MiLniZ+adUh8Pc0EzcFgovajtFKzvRzComykGVhje4W1J2RO6Eb1eW5VkuftKFMNhlXRBZ0zUWkpEohjK9OsAJyOpNwnE/JeLiqu0mKmwfeOnZ7GnNLPizsZJow= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16148969025731005.1489901239406; Thu, 4 Mar 2021 14:28:22 -0800 (PST) Received: from localhost ([::1]:52632 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwSD-0003bk-6d for importer@patchew.org; Thu, 04 Mar 2021 17:28:21 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53770) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDp-0007zE-29 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:29 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40136 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDm-0006No-1x for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:28 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwDe-0008MJ-MD; Thu, 04 Mar 2021 22:13:24 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:45 +0000 Message-Id: <20210304221103.6369-25-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 24/42] esp: use in-built TC to determine PDMA transfer length X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Real hardware simply counts down using the in-built TC to determine when the the PDMA request is complete. Use the TC to determine the PDMA transfer len= gth which then enables us to remove the redundant pdma_len variable. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 28 +++++++++++++--------------- include/hw/scsi/esp.h | 1 - 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 7bf2ec9c94..c80dc606e8 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -127,10 +127,9 @@ static uint32_t esp_get_stc(ESPState *s) return dmalen; } =20 -static void set_pdma(ESPState *s, enum pdma_origin_id origin, uint32_t len) +static void set_pdma(ESPState *s, enum pdma_origin_id origin) { s->pdma_origin =3D origin; - s->pdma_len =3D len; } =20 static uint8_t esp_pdma_read(ESPState *s) @@ -138,7 +137,7 @@ static uint8_t esp_pdma_read(ESPState *s) uint32_t dmalen =3D esp_get_tc(s); uint8_t val; =20 - if (dmalen =3D=3D 0 || s->pdma_len =3D=3D 0) { + if (dmalen =3D=3D 0) { return 0; } =20 @@ -161,7 +160,6 @@ static uint8_t esp_pdma_read(ESPState *s) } =20 s->ti_size--; - s->pdma_len--; dmalen--; esp_set_tc(s, dmalen); =20 @@ -172,7 +170,7 @@ static void esp_pdma_write(ESPState *s, uint8_t val) { uint32_t dmalen =3D esp_get_tc(s); =20 - if (dmalen =3D=3D 0 || s->pdma_len =3D=3D 0) { + if (dmalen =3D=3D 0) { return; } =20 @@ -195,7 +193,6 @@ static void esp_pdma_write(ESPState *s, uint8_t val) } =20 s->ti_size++; - s->pdma_len--; dmalen--; esp_set_tc(s, dmalen); } @@ -243,7 +240,7 @@ static uint32_t get_cmd(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, buf, dmalen); } else { - set_pdma(s, CMD, dmalen); + set_pdma(s, CMD); esp_raise_drq(s); return 0; } @@ -406,7 +403,7 @@ static void write_response(ESPState *s) s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; } else { - set_pdma(s, TI, 2); + set_pdma(s, TI); s->pdma_cb =3D write_response_pdma_cb; esp_raise_drq(s); return; @@ -474,7 +471,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, &s->cmdbuf[s->cmdlen], len); } else { - set_pdma(s, CMD, len); + set_pdma(s, CMD); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; @@ -497,7 +494,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, s->async_buf, len); } else { - set_pdma(s, ASYNC, len); + set_pdma(s, ASYNC); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; @@ -506,7 +503,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_write) { s->dma_memory_write(s->dma_opaque, s->async_buf, len); } else { - set_pdma(s, ASYNC, len); + set_pdma(s, ASYNC); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; @@ -850,7 +847,6 @@ static const VMStateDescription vmstate_esp_pdma =3D { .needed =3D esp_pdma_needed, .fields =3D (VMStateField[]) { VMSTATE_INT32(pdma_origin, ESPState), - VMSTATE_UINT32(pdma_len, ESPState), VMSTATE_END_OF_LIST() } }; @@ -949,6 +945,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr = addr, { SysBusESPState *sysbus =3D opaque; ESPState *s =3D ESP(&sysbus->esp); + uint32_t dmalen; =20 trace_esp_pdma_write(size); =20 @@ -961,7 +958,8 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr = addr, esp_pdma_write(s, val); break; } - if (s->pdma_len =3D=3D 0 && s->pdma_cb) { + dmalen =3D esp_get_tc(s); + if (dmalen =3D=3D 0 && s->pdma_cb) { esp_lower_drq(s); s->pdma_cb(s); s->pdma_cb =3D NULL; @@ -978,7 +976,7 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hwad= dr addr, =20 trace_esp_pdma_read(size); =20 - if (dmalen =3D=3D 0 || s->pdma_len =3D=3D 0) { + if (dmalen =3D=3D 0) { return 0; } switch (size) { @@ -991,7 +989,7 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hwad= dr addr, break; } dmalen =3D esp_get_tc(s); - if (dmalen =3D=3D 0 || (s->pdma_len =3D=3D 0 && s->pdma_cb)) { + if (dmalen =3D=3D 0 && s->pdma_cb) { esp_lower_drq(s); s->pdma_cb(s); s->pdma_cb =3D NULL; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 26bd015cf4..1be4586aff 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -57,7 +57,6 @@ struct ESPState { void *dma_opaque; void (*dma_cb)(ESPState *s); int pdma_origin; - uint32_t pdma_len; void (*pdma_cb)(ESPState *s); =20 uint8_t mig_version_id; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897444; cv=none; d=zohomail.com; s=zohoarc; b=FckGt0yEIR/bFo7N+sTEhvBvPJLAnPdOl4uLrNBTcOLqaEjJWOPWWRtk4tl5JPfvNjS7N0blK7HK6hBsqEgMUorem42fYNbKPtKfpa3MTuQoXFL46C6BuCBOplVzBtiYJB5SJEzdtr4C4HAw9/gByP2em1bm/GVhXQmRRIPNLUU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897444; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CFSDSXtfBFQ3SYnujLGeJP203OcjsUccquR3/0/nOqY=; b=Lnn1Ud8T7zZHhz9VlgZoGcYkgrY4R2D4ZOkL4PlNhMglbuieXqnBcb5KR6HroBhX3YMLhngASE5l4Cm/t0ubc0j5N8axW0BtNQL4Fb4INYEtX/2AxudcfqkxNap1LEaNIRRE29LNNvJF1Q2rrhtOyeDyoUiDyVeUMauHElq2bL4= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16148974440361017.654957547891; Thu, 4 Mar 2021 14:37:24 -0800 (PST) Received: from localhost ([::1]:54348 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwaw-0007lL-Sd for importer@patchew.org; Thu, 04 Mar 2021 17:37:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53784) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDs-00088k-H6 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:32 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40148 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDr-0006P7-02 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:32 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwDk-0008MJ-Pj; Thu, 04 Mar 2021 22:13:29 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:46 +0000 Message-Id: <20210304221103.6369-26-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 25/42] esp: remove CMD pdma_origin X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" The cmdbuf is really just a copy of FIFO data (including extra message phase bytes) so its pdma_origin is effectively TI. Fortunately we already know wh= en we are receiving a SCSI command since do_cmd =3D=3D 1 which enables us to distinguish between the two cases in esp_pdma_read()/esp_pdma_write(). Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 22 ++++++++++++---------- include/hw/scsi/esp.h | 1 - 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index c80dc606e8..d5c03f9697 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -143,10 +143,11 @@ static uint8_t esp_pdma_read(ESPState *s) =20 switch (s->pdma_origin) { case TI: - val =3D s->ti_buf[s->ti_rptr++]; - break; - case CMD: - val =3D s->cmdbuf[s->cmdlen++]; + if (s->do_cmd) { + val =3D s->cmdbuf[s->cmdlen++]; + } else { + val =3D s->ti_buf[s->ti_rptr++]; + } break; case ASYNC: val =3D s->async_buf[0]; @@ -176,10 +177,11 @@ static void esp_pdma_write(ESPState *s, uint8_t val) =20 switch (s->pdma_origin) { case TI: - s->ti_buf[s->ti_wptr++] =3D val; - break; - case CMD: - s->cmdbuf[s->cmdlen++] =3D val; + if (s->do_cmd) { + s->cmdbuf[s->cmdlen++] =3D val; + } else { + s->ti_buf[s->ti_wptr++] =3D val; + } break; case ASYNC: s->async_buf[0] =3D val; @@ -240,7 +242,7 @@ static uint32_t get_cmd(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, buf, dmalen); } else { - set_pdma(s, CMD); + set_pdma(s, TI); esp_raise_drq(s); return 0; } @@ -471,7 +473,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, &s->cmdbuf[s->cmdlen], len); } else { - set_pdma(s, CMD); + set_pdma(s, TI); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 1be4586aff..dbbbb3fc52 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -17,7 +17,6 @@ typedef struct ESPState ESPState; =20 enum pdma_origin_id { TI, - CMD, ASYNC, }; =20 --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896619; cv=none; d=zohomail.com; s=zohoarc; b=lWN/yAMsCqOPvBYGRdKtot/3rSgPB7oFmKZjQe5QEaEeWE+6z8teLt2XuMsUQ57x7EwWLlxvG4fdz4h8TiUUjIi4xzm+vMKu6BR64E39T1UnDR/Iu/EJq2kx1bcirxhiYN8qNFImbKKH9wB7RsdqspgAxmbSb+e+3QpV8p0sFHk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896619; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=TiLSjYdzWsDPBeATAB61OkWkkQCBZcQStRAin8YrfgM=; b=QI2CtEeWhiaqGSnszBD5KMGnXrX2efHz1NWAZliZuNUICKjue7vXq9zkelf2nxV6WZ9ucKo15rZuRGbnPRVgoPypDOSwS7TdTOHHDVVW5hKN362lJlqXIvlP2SSdb/cgCOP8rHTEaj1HCmiDLJ8S8uSIIYTAmm/M0RetI5zw3Gc= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896619407307.3465774398096; Thu, 4 Mar 2021 14:23:39 -0800 (PST) Received: from localhost ([::1]:38878 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwNe-0005ta-49 for importer@patchew.org; Thu, 04 Mar 2021 17:23:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53796) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDx-0008IT-Mn for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:37 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40158 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwDw-0006Rd-7k for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:37 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwDp-0008MJ-UJ; Thu, 04 Mar 2021 22:13:34 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:47 +0000 Message-Id: <20210304221103.6369-27-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 26/42] esp: rename get_cmd_cb() to esp_select() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" This better describes the purpose of the function. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index d5c03f9697..d8d7ede00a 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -199,7 +199,7 @@ static void esp_pdma_write(ESPState *s, uint8_t val) esp_set_tc(s, dmalen); } =20 -static int get_cmd_cb(ESPState *s) +static int esp_select(ESPState *s) { int target; =20 @@ -256,7 +256,7 @@ static uint32_t get_cmd(ESPState *s) } trace_esp_get_cmd(dmalen, target); =20 - if (get_cmd_cb(s) < 0) { + if (esp_select(s) < 0) { return 0; } return dmalen; @@ -299,7 +299,7 @@ static void do_cmd(ESPState *s) =20 static void satn_pdma_cb(ESPState *s) { - if (get_cmd_cb(s) < 0) { + if (esp_select(s) < 0) { return; } s->do_cmd =3D 0; @@ -325,7 +325,7 @@ static void handle_satn(ESPState *s) =20 static void s_without_satn_pdma_cb(ESPState *s) { - if (get_cmd_cb(s) < 0) { + if (esp_select(s) < 0) { return; } s->do_cmd =3D 0; @@ -351,7 +351,7 @@ static void handle_s_without_atn(ESPState *s) =20 static void satn_stop_pdma_cb(ESPState *s) { - if (get_cmd_cb(s) < 0) { + if (esp_select(s) < 0) { return; } s->do_cmd =3D 0; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897572; cv=none; d=zohomail.com; s=zohoarc; b=kCCVQefDa9xuStBxUfH7ibGEbTn55qPY/Z4mWYoMh4jfe03of4Vsr3Cv+smbjYgP5t4kIgw94DFNoLJYVybDKtyx3vVTwA9v+AqtN84GWdVzrNJoqvLJ4j12L7ELO00fpTRdUvHAcFQ9UJcj5KfS/WX/GoOjocB5EEDZC2E/sRo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897572; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=B17IOI1zifANfcKwd9EdVUqxljnIJ9Kb1H1s+1Pinq4=; b=Z/TjHMraIGdbNYys3JzFYFKzqJWJPu3gd0alxGMD3nRv4C0mUV5Ic5+TGcbqoAXsWvmwtI56IJmeNypl49k/JgVt1+8TxE2R1/kHZy8lD4LtjOIhPpoZO9nYrKE66/IYtS/jCYt8eE/IaSONF37SktXGPMQZgqQeS/A+LADT0AU= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16148975727591010.2057229604949; Thu, 4 Mar 2021 14:39:32 -0800 (PST) Received: from localhost ([::1]:34580 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwd1-0002lY-Kw for importer@patchew.org; Thu, 04 Mar 2021 17:39:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53818) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwE6-0008O1-7o for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:46 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40168 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwE2-0006TW-Ov for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:46 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwDu-0008MJ-VM; Thu, 04 Mar 2021 22:13:41 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:48 +0000 Message-Id: <20210304221103.6369-28-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 27/42] esp: fix PDMA target selection X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Currently the target selection for PDMA is done after the SCSI command has = been delivered which is not correct. Perform target selection as part of the ini= tial get_cmd() call when the command is submitted: if no target is present, don't raise DRQ. If the target is present then switch to the command phase since the MacOS t= oolbox ROM checks for this before attempting to submit the SCSI command. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 53 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index d8d7ede00a..10e63d1f62 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -243,6 +243,9 @@ static uint32_t get_cmd(ESPState *s) s->dma_memory_read(s->dma_opaque, buf, dmalen); } else { set_pdma(s, TI); + if (esp_select(s) < 0) { + return -1; + } esp_raise_drq(s); return 0; } @@ -257,7 +260,7 @@ static uint32_t get_cmd(ESPState *s) trace_esp_get_cmd(dmalen, target); =20 if (esp_select(s) < 0) { - return 0; + return -1; } return dmalen; } @@ -299,9 +302,6 @@ static void do_cmd(ESPState *s) =20 static void satn_pdma_cb(ESPState *s) { - if (esp_select(s) < 0) { - return; - } s->do_cmd =3D 0; if (s->cmdlen) { do_cmd(s); @@ -310,24 +310,28 @@ static void satn_pdma_cb(ESPState *s) =20 static void handle_satn(ESPState *s) { + int32_t cmdlen; + if (s->dma && !s->dma_enabled) { s->dma_cb =3D handle_satn; return; } s->pdma_cb =3D satn_pdma_cb; - s->cmdlen =3D get_cmd(s); - if (s->cmdlen) { + cmdlen =3D get_cmd(s); + if (cmdlen > 0) { + s->cmdlen =3D cmdlen; do_cmd(s); - } else { + } else if (cmdlen =3D=3D 0) { + s->cmdlen =3D 0; s->do_cmd =3D 1; + /* Target present, but no cmd yet - switch to command phase */ + s->rregs[ESP_RSEQ] =3D SEQ_CD; + s->rregs[ESP_RSTAT] =3D STAT_CD; } } =20 static void s_without_satn_pdma_cb(ESPState *s) { - if (esp_select(s) < 0) { - return; - } s->do_cmd =3D 0; if (s->cmdlen) { do_busid_cmd(s, s->cmdbuf, 0); @@ -336,24 +340,28 @@ static void s_without_satn_pdma_cb(ESPState *s) =20 static void handle_s_without_atn(ESPState *s) { + int32_t cmdlen; + if (s->dma && !s->dma_enabled) { s->dma_cb =3D handle_s_without_atn; return; } s->pdma_cb =3D s_without_satn_pdma_cb; - s->cmdlen =3D get_cmd(s); - if (s->cmdlen) { + cmdlen =3D get_cmd(s); + if (cmdlen > 0) { + s->cmdlen =3D cmdlen; do_busid_cmd(s, s->cmdbuf, 0); - } else { + } else if (cmdlen =3D=3D 0) { + s->cmdlen =3D 0; s->do_cmd =3D 1; + /* Target present, but no cmd yet - switch to command phase */ + s->rregs[ESP_RSEQ] =3D SEQ_CD; + s->rregs[ESP_RSTAT] =3D STAT_CD; } } =20 static void satn_stop_pdma_cb(ESPState *s) { - if (esp_select(s) < 0) { - return; - } s->do_cmd =3D 0; if (s->cmdlen) { trace_esp_handle_satn_stop(s->cmdlen); @@ -367,21 +375,28 @@ static void satn_stop_pdma_cb(ESPState *s) =20 static void handle_satn_stop(ESPState *s) { + int32_t cmdlen; + if (s->dma && !s->dma_enabled) { s->dma_cb =3D handle_satn_stop; return; } s->pdma_cb =3D satn_stop_pdma_cb; - s->cmdlen =3D get_cmd(s); - if (s->cmdlen) { + cmdlen =3D get_cmd(s); + if (cmdlen > 0) { trace_esp_handle_satn_stop(s->cmdlen); + s->cmdlen =3D cmdlen; s->do_cmd =3D 1; s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; esp_raise_irq(s); - } else { + } else if (cmdlen =3D=3D 0) { + s->cmdlen =3D 0; s->do_cmd =3D 1; + /* Target present, but no cmd yet - switch to command phase */ + s->rregs[ESP_RSEQ] =3D SEQ_CD; + s->rregs[ESP_RSTAT] =3D STAT_CD; } } =20 --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897000; cv=none; d=zohomail.com; s=zohoarc; b=CsoRBzl38HtL3tncbMs5rb52UN0t1k8tHw3Y6AlW/JYttc2T482dNX9K4lWpeqTKqWomad1E5fx136MC4nbPSY/aBLd8Bd4+sWI5mtDtkOmk0tOCTlJbrUATqx0c4TfLe3b2t53Y2EyPTLfPEWmyBY9UBoS/RagkSbEArXTYvuY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897000; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0mKgDUIwAcntS7rtDGm8XfFdQP5IYDg4uYqgjIrsa9M=; b=ZC6Q3rq4NceQ7gw60twRKYffqFqTY5ajc/Z4EAUSFz+H2D8fd70FO4B1uNp6XcX+VtVKa5CRwfNdHDC/hLQ4gxnrT1ZBVhwBr1R7e6r63h3j9VsiFZ9E1Z0FjHjFzF0TCu0QB1kMzOaMj7JcVsCyES/ytwvy546Jqc4YIK84W0Q= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897000745447.7921737196822; Thu, 4 Mar 2021 14:30:00 -0800 (PST) Received: from localhost ([::1]:32848 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwTn-00076E-GO for importer@patchew.org; Thu, 04 Mar 2021 17:29:59 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53846) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEE-0008SQ-6m for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:54 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40178 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwE9-0006VR-PU for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:13:53 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwE1-0008MJ-Jd; Thu, 04 Mar 2021 22:13:47 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:49 +0000 Message-Id: <20210304221103.6369-29-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 28/42] esp: use FIFO for PDMA transfers between initiator and device X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" PDMA as implemented on the Quadra 800 uses DREQ to load data into the FIFO up to a maximum of 16 bytes at a time. The MacOS toolbox ROM requires this because it mixes FIFO and PDMA transfers whilst checking the FIFO status and counter registers to ensure success. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 109 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 75 insertions(+), 34 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 10e63d1f62..aa897a4ebd 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -134,13 +134,8 @@ static void set_pdma(ESPState *s, enum pdma_origin_id = origin) =20 static uint8_t esp_pdma_read(ESPState *s) { - uint32_t dmalen =3D esp_get_tc(s); uint8_t val; =20 - if (dmalen =3D=3D 0) { - return 0; - } - switch (s->pdma_origin) { case TI: if (s->do_cmd) { @@ -160,10 +155,6 @@ static uint8_t esp_pdma_read(ESPState *s) g_assert_not_reached(); } =20 - s->ti_size--; - dmalen--; - esp_set_tc(s, dmalen); - return val; } =20 @@ -194,7 +185,6 @@ static void esp_pdma_write(ESPState *s, uint8_t val) g_assert_not_reached(); } =20 - s->ti_size++; dmalen--; esp_set_tc(s, dmalen); } @@ -290,6 +280,7 @@ static void do_busid_cmd(ESPState *s, uint8_t *buf, uin= t8_t busid) s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; esp_raise_irq(s); + esp_lower_drq(s); } =20 static void do_cmd(ESPState *s) @@ -447,28 +438,71 @@ static void esp_dma_done(ESPState *s) static void do_dma_pdma_cb(ESPState *s) { int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); + int len; =20 if (s->do_cmd) { s->ti_size =3D 0; s->cmdlen =3D 0; s->do_cmd =3D 0; do_cmd(s); + esp_lower_drq(s); return; } - if (s->async_len =3D=3D 0) { - scsi_req_continue(s->current_req); - /* - * If there is still data to be read from the device then - * complete the DMA operation immediately. Otherwise defer - * until the scsi layer has completed. - */ - if (to_device || esp_get_tc(s) !=3D 0 || s->ti_size =3D=3D 0) { + + if (to_device) { + /* Copy FIFO data to device */ + len =3D MIN(s->ti_wptr, TI_BUFSZ); + memcpy(s->async_buf, s->ti_buf, len); + s->ti_wptr =3D 0; + s->ti_rptr =3D 0; + s->async_buf +=3D len; + s->async_len -=3D len; + s->ti_size +=3D len; + if (s->async_len =3D=3D 0) { + scsi_req_continue(s->current_req); return; } - } =20 - /* Partially filled a scsi buffer. Complete immediately. */ - esp_dma_done(s); + if (esp_get_tc(s) =3D=3D 0) { + esp_lower_drq(s); + esp_dma_done(s); + } + + return; + } else { + if (s->async_len =3D=3D 0) { + if (s->current_req) { + scsi_req_continue(s->current_req); + } + + /* + * If there is still data to be read from the device then + * complete the DMA operation immediately. Otherwise defer + * until the scsi layer has completed. + */ + if (esp_get_tc(s) !=3D 0 || s->ti_size =3D=3D 0) { + return; + } + } + + if (esp_get_tc(s) !=3D 0) { + /* Copy device data to FIFO */ + s->ti_wptr =3D 0; + s->ti_rptr =3D 0; + len =3D MIN(s->async_len, TI_BUFSZ); + memcpy(s->ti_buf, s->async_buf, len); + s->ti_wptr +=3D len; + s->async_buf +=3D len; + s->async_len -=3D len; + s->ti_size -=3D len; + esp_set_tc(s, esp_get_tc(s) - len); + return; + } + + /* Partially filled a scsi buffer. Complete immediately. */ + esp_lower_drq(s); + esp_dma_done(s); + } } =20 static void esp_do_dma(ESPState *s) @@ -511,7 +545,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, s->async_buf, len); } else { - set_pdma(s, ASYNC); + set_pdma(s, TI); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; @@ -520,9 +554,20 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_write) { s->dma_memory_write(s->dma_opaque, s->async_buf, len); } else { - set_pdma(s, ASYNC); + /* Copy device data to FIFO */ + len =3D MIN(len, TI_BUFSZ - s->ti_wptr); + memcpy(&s->ti_buf[s->ti_wptr], s->async_buf, len); + s->ti_wptr +=3D len; + s->async_buf +=3D len; + s->async_len -=3D len; + s->ti_size -=3D len; + esp_set_tc(s, esp_get_tc(s) - len); + set_pdma(s, TI); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); + + /* Indicate transfer to FIFO is complete */ + s->rregs[ESP_RSTAT] |=3D STAT_TC; return; } } @@ -548,6 +593,7 @@ static void esp_do_dma(ESPState *s) =20 /* Partially filled a scsi buffer. Complete immediately. */ esp_dma_done(s); + esp_lower_drq(s); } =20 static void esp_report_command_complete(ESPState *s, uint32_t status) @@ -564,6 +610,7 @@ static void esp_report_command_complete(ESPState *s, ui= nt32_t status) s->status =3D status; s->rregs[ESP_RSTAT] =3D STAT_ST; esp_dma_done(s); + esp_lower_drq(s); if (s->current_req) { scsi_req_unref(s->current_req); s->current_req =3D NULL; @@ -605,6 +652,7 @@ void esp_transfer_data(SCSIRequest *req, uint32_t len) * completion interrupt is deferred to here. */ esp_dma_done(s); + esp_lower_drq(s); } } =20 @@ -976,10 +1024,8 @@ static void sysbus_esp_pdma_write(void *opaque, hwadd= r addr, break; } dmalen =3D esp_get_tc(s); - if (dmalen =3D=3D 0 && s->pdma_cb) { - esp_lower_drq(s); + if (dmalen =3D=3D 0 || (s->ti_wptr =3D=3D TI_BUFSZ)) { s->pdma_cb(s); - s->pdma_cb =3D NULL; } } =20 @@ -988,14 +1034,10 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, h= waddr addr, { SysBusESPState *sysbus =3D opaque; ESPState *s =3D ESP(&sysbus->esp); - uint32_t dmalen =3D esp_get_tc(s); uint64_t val =3D 0; =20 trace_esp_pdma_read(size); =20 - if (dmalen =3D=3D 0) { - return 0; - } switch (size) { case 1: val =3D esp_pdma_read(s); @@ -1005,11 +1047,10 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, = hwaddr addr, val =3D (val << 8) | esp_pdma_read(s); break; } - dmalen =3D esp_get_tc(s); - if (dmalen =3D=3D 0 && s->pdma_cb) { - esp_lower_drq(s); + if (s->ti_rptr =3D=3D s->ti_wptr) { + s->ti_wptr =3D 0; + s->ti_rptr =3D 0; s->pdma_cb(s); - s->pdma_cb =3D NULL; } return val; } --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896852; cv=none; d=zohomail.com; s=zohoarc; b=gewXRUHNRCy+zna8EqJYKeNsPTBcO1DUkiuuk/yX6hwuQPYW5x7XCksWOJOEOwhn0ZTszMnUE119irOoOCX1d5iHOhTzSNSEmrxz6Kt2+FwYmEfu52eIm0xkHlUZDhEKQJS+P0jYDl/iBHMasmGlwG2sdiG84lc14T22HQBoq2o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896852; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=jonSiyP9Luzxbm/B0W2YjX6Ys4TQL4o31tc/HfzUPKM=; b=XPbsM0133BcTvwIEd6KO6HlQLrexreoJM1l9tNjTPoC0al2/WI4zW81kZqu3QLFFSk1/l48WMX6zZxp20Ciz8UpSR8gtirjnN5AIWokytNbREjCCkGX5k2kNj8EKehBGKqkhb01ttW2jN7OrIIGFIxglSG+xz4VRiOw9iAsFkrw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16148968525593.7314616101895126; Thu, 4 Mar 2021 14:27:32 -0800 (PST) Received: from localhost ([::1]:49820 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwRP-0002N8-Fk for importer@patchew.org; Thu, 04 Mar 2021 17:27:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEO-0000VZ-Pr for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:04 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40184 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEM-0006Wj-VH for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:04 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwE8-0008MJ-8M; Thu, 04 Mar 2021 22:13:51 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:50 +0000 Message-Id: <20210304221103.6369-30-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 29/42] esp: remove pdma_origin from ESPState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Now that all data is transferred via the FIFO (ti_buf) there is no need to = track the source buffer being used for the data transfer. This also eliminates the need for a separate subsection for PDMA state migration. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 74 +++++-------------------------------------- include/hw/scsi/esp.h | 6 ---- 2 files changed, 8 insertions(+), 72 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index aa897a4ebd..79b84e31d3 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -127,32 +127,14 @@ static uint32_t esp_get_stc(ESPState *s) return dmalen; } =20 -static void set_pdma(ESPState *s, enum pdma_origin_id origin) -{ - s->pdma_origin =3D origin; -} - static uint8_t esp_pdma_read(ESPState *s) { uint8_t val; =20 - switch (s->pdma_origin) { - case TI: - if (s->do_cmd) { - val =3D s->cmdbuf[s->cmdlen++]; - } else { - val =3D s->ti_buf[s->ti_rptr++]; - } - break; - case ASYNC: - val =3D s->async_buf[0]; - if (s->async_len > 0) { - s->async_len--; - s->async_buf++; - } - break; - default: - g_assert_not_reached(); + if (s->do_cmd) { + val =3D s->cmdbuf[s->cmdlen++]; + } else { + val =3D s->ti_buf[s->ti_rptr++]; } =20 return val; @@ -166,23 +148,10 @@ static void esp_pdma_write(ESPState *s, uint8_t val) return; } =20 - switch (s->pdma_origin) { - case TI: - if (s->do_cmd) { - s->cmdbuf[s->cmdlen++] =3D val; - } else { - s->ti_buf[s->ti_wptr++] =3D val; - } - break; - case ASYNC: - s->async_buf[0] =3D val; - if (s->async_len > 0) { - s->async_len--; - s->async_buf++; - } - break; - default: - g_assert_not_reached(); + if (s->do_cmd) { + s->cmdbuf[s->cmdlen++] =3D val; + } else { + s->ti_buf[s->ti_wptr++] =3D val; } =20 dmalen--; @@ -232,7 +201,6 @@ static uint32_t get_cmd(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, buf, dmalen); } else { - set_pdma(s, TI); if (esp_select(s) < 0) { return -1; } @@ -411,7 +379,6 @@ static void write_response(ESPState *s) s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; } else { - set_pdma(s, TI); s->pdma_cb =3D write_response_pdma_cb; esp_raise_drq(s); return; @@ -522,7 +489,6 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, &s->cmdbuf[s->cmdlen], len); } else { - set_pdma(s, TI); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; @@ -545,7 +511,6 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, s->async_buf, len); } else { - set_pdma(s, TI); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; @@ -562,7 +527,6 @@ static void esp_do_dma(ESPState *s) s->async_len -=3D len; s->ti_size -=3D len; esp_set_tc(s, esp_get_tc(s) - len); - set_pdma(s, TI); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); =20 @@ -898,24 +862,6 @@ static bool esp_mem_accepts(void *opaque, hwaddr addr, return (size =3D=3D 1) || (is_write && size =3D=3D 4); } =20 -static bool esp_pdma_needed(void *opaque) -{ - ESPState *s =3D opaque; - return s->dma_memory_read =3D=3D NULL && s->dma_memory_write =3D=3D NU= LL && - s->dma_enabled; -} - -static const VMStateDescription vmstate_esp_pdma =3D { - .name =3D "esp/pdma", - .version_id =3D 2, - .minimum_version_id =3D 2, - .needed =3D esp_pdma_needed, - .fields =3D (VMStateField[]) { - VMSTATE_INT32(pdma_origin, ESPState), - VMSTATE_END_OF_LIST() - } -}; - static bool esp_is_before_version_5(void *opaque, int version_id) { ESPState *s =3D ESP(opaque); @@ -970,10 +916,6 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_UINT32_TEST(mig_dma_left, ESPState, esp_is_before_version_= 5), VMSTATE_END_OF_LIST() }, - .subsections =3D (const VMStateDescription * []) { - &vmstate_esp_pdma, - NULL - } }; =20 static void sysbus_esp_mem_write(void *opaque, hwaddr addr, diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index dbbbb3fc52..91f8ffd6c8 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -15,11 +15,6 @@ typedef void (*ESPDMAMemoryReadWriteFunc)(void *opaque, = uint8_t *buf, int len); =20 typedef struct ESPState ESPState; =20 -enum pdma_origin_id { - TI, - ASYNC, -}; - #define TYPE_ESP "esp" OBJECT_DECLARE_SIMPLE_TYPE(ESPState, ESP) =20 @@ -55,7 +50,6 @@ struct ESPState { ESPDMAMemoryReadWriteFunc dma_memory_write; void *dma_opaque; void (*dma_cb)(ESPState *s); - int pdma_origin; void (*pdma_cb)(ESPState *s); =20 uint8_t mig_version_id; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896962; cv=none; d=zohomail.com; s=zohoarc; b=AHgN8kUxESOBToKP/k9WOqNPKVI27gPXdG0QP3jY+EhKegWHZ4FBenVh+ygXr5W3w2pN/pDV6QWNYseI+IfDq9lx7VgYhFacmVKMUSeuQkgN0HorMJk0pGgJ8kUpuXr0DeGhI7+ntIHFpUSzpyv/aD6nx3X2VB7cwQyqwrfm/Z4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896962; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qOpEYiRBKuyLgRAxhtWS+g6nFQY1GeAH+M/R4+fI2Yw=; b=KeNUn8yweCX63UMSLVTszWH5axlwc4+B8qMVG/haixcOz2VWRLIAJj8VDiHi81tk8ieMiifAPQjfaUiCLS3KYp/m0YsbQqoouCfll49ntq0Qik8ye3PDqGoWsPzaLLx1YTNE79FnYHyUEAqJPYHrri+pBdT00DriNRvgeIIu5VI= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896962153429.7406908138497; Thu, 4 Mar 2021 14:29:22 -0800 (PST) Received: from localhost ([::1]:58066 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwTB-0005re-0o for importer@patchew.org; Thu, 04 Mar 2021 17:29:21 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53904) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwES-0000gV-JH for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:08 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40196 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEQ-0006Y3-Rb for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:08 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEB-0008MJ-Nh; Thu, 04 Mar 2021 22:13:55 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:51 +0000 Message-Id: <20210304221103.6369-31-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 30/42] esp: add 4 byte PDMA read and write transfers X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" The MacOS toolbox ROM performs 4 byte reads/writes when transferring data to and from the target. Since the SCSI bus is 16-bits wide, use the memory API to split a 4 byte access into 2 x 2 byte accesses. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 79b84e31d3..2dded90be6 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -1002,7 +1002,9 @@ static const MemoryRegionOps sysbus_esp_pdma_ops =3D { .write =3D sysbus_esp_pdma_write, .endianness =3D DEVICE_NATIVE_ENDIAN, .valid.min_access_size =3D 1, - .valid.max_access_size =3D 2, + .valid.max_access_size =3D 4, + .impl.min_access_size =3D 1, + .impl.max_access_size =3D 2, }; =20 static const struct SCSIBusInfo esp_scsi_info =3D { @@ -1049,7 +1051,7 @@ static void sysbus_esp_realize(DeviceState *dev, Erro= r **errp) sysbus, "esp-regs", ESP_REGS << sysbus->it_shift= ); sysbus_init_mmio(sbd, &sysbus->iomem); memory_region_init_io(&sysbus->pdma, OBJECT(sysbus), &sysbus_esp_pdma_= ops, - sysbus, "esp-pdma", 2); + sysbus, "esp-pdma", 4); sysbus_init_mmio(sbd, &sysbus->pdma); =20 qdev_init_gpio_in(dev, sysbus_esp_gpio_demux, 2); --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897725; cv=none; d=zohomail.com; s=zohoarc; b=fqeYgESqFOnG8BYWZW9JDiIGLDfmaBHuiAxhC45ikj+FSBjFIOlHvtJMuiIudixOI6Y24oRBU+NjGxMh74Q5B7GxRh4tpYK4tDNEnDfDxZzi2Xy6QA6k9IyWAS4s5qYLqRLVSH1iNLY00IGdwCJHpNwtsMGqoO4JGrcUYumPaLY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897725; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vHXtMlhME/mJQ0aMucdWqPcA+ee93jvdWYNenxDQcFw=; b=m16YUmAFWFl1PojVue1g/iO8QK+WT+nUN7FR1UIuKvXqffwsn14XgDOqnz+WnbihbBCBRebfhq1+7eNnGpN2q/PlN/1ftHdsR37lf347lin6IotGViC46ebfvQthW8ZTaJdMWIKUKJ7AX0B6pkGZnmixdbzZc9C4oA+wMTEkbv8= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897725784670.0321418577281; Thu, 4 Mar 2021 14:42:05 -0800 (PST) Received: from localhost ([::1]:42194 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwfU-000612-Nh for importer@patchew.org; Thu, 04 Mar 2021 17:42:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53930) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEY-0000wU-Jo for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:14 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40212 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEX-0006aT-4S for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:14 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEF-0008MJ-GG; Thu, 04 Mar 2021 22:14:01 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:52 +0000 Message-Id: <20210304221103.6369-32-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 31/42] esp: implement FIFO flush command X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" At this point it is now possible to properly implement the FIFO flush comma= nd without causing guest errors. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 2dded90be6..6aae6f91c2 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -769,6 +769,8 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_= t val) case CMD_FLUSH: trace_esp_mem_writeb_cmd_flush(val); /*s->ti_size =3D 0;*/ + s->ti_wptr =3D 0; + s->ti_rptr =3D 0; s->rregs[ESP_RINTR] =3D INTR_FC; s->rregs[ESP_RSEQ] =3D 0; s->rregs[ESP_RFLAGS] =3D 0; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897183; cv=none; d=zohomail.com; s=zohoarc; b=Esfe6V2dwC3H3JT+7jzsTjXEewjpX/LLDUt0RiSvwxiL2v9y7XG/Sw5CQsdOoxy6YLxHc9Gtx0dbyoZOyEwkt4YBdgfd4XLwRZNGvJmbZ52k5drVLRpiudzIWTc21RFcSSJCst2eS0kHF2oRygvaTBvbf1q1Ulm+USXkHu09f0Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897183; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=jh5BssQZ6DP5lUiy8OCfwK/hdzneapXxW/IYZWA31l4=; b=SuKMsm+47lSw2HCx5HwDSdsqN6n7gT748ZQkPVDYHIwM4e7P2kPohBO6E4Jnq8q5BUZcwG1/mj9cGkuHsez8vjuC/8ERIRWuTuoE86sO0aqy7R9XieKu1BUgNMVwhzrr7NDgQkJp4n6kyGspbKQLOLNcbPk24eYWMUjVQQdE7KU= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897183148400.4707316701558; Thu, 4 Mar 2021 14:33:03 -0800 (PST) Received: from localhost ([::1]:41212 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwWk-0002Ha-1M for importer@patchew.org; Thu, 04 Mar 2021 17:33:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53942) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEb-00013I-4x for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:17 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40218 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEZ-0006bN-7B for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:16 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEL-0008MJ-GI; Thu, 04 Mar 2021 22:14:03 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:53 +0000 Message-Id: <20210304221103.6369-33-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 32/42] esp: latch individual bits in ESP_RINTR register X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Currently the ESP_RINTR register is set to a specific value as required wit= hin the ESP state machine. In order to implement the upcoming deferred interrupt functionality it is necessary to set individual bits within ESP_RINTR so th= at a deferred interrupt will not overwrite the value of any other interrupt bi= ts. This also requires fixing up a few locations where the ESP_RINTR and ESP_RS= EQ registers are set/reset unexpectedly. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 6aae6f91c2..54d008c609 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -178,7 +178,7 @@ static int esp_select(ESPState *s) if (!s->current_dev) { /* No such drive */ s->rregs[ESP_RSTAT] =3D 0; - s->rregs[ESP_RINTR] =3D INTR_DC; + s->rregs[ESP_RINTR] |=3D INTR_DC; s->rregs[ESP_RSEQ] =3D SEQ_0; esp_raise_irq(s); return -1; @@ -245,7 +245,7 @@ static void do_busid_cmd(ESPState *s, uint8_t *buf, uin= t8_t busid) } scsi_req_continue(s->current_req); } - s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; + s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; esp_raise_irq(s); esp_lower_drq(s); @@ -326,7 +326,7 @@ static void satn_stop_pdma_cb(ESPState *s) trace_esp_handle_satn_stop(s->cmdlen); s->do_cmd =3D 1; s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; - s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; + s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; esp_raise_irq(s); } @@ -346,8 +346,8 @@ static void handle_satn_stop(ESPState *s) trace_esp_handle_satn_stop(s->cmdlen); s->cmdlen =3D cmdlen; s->do_cmd =3D 1; - s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; - s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; + s->rregs[ESP_RSTAT] =3D STAT_CD; + s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; esp_raise_irq(s); } else if (cmdlen =3D=3D 0) { @@ -362,7 +362,7 @@ static void handle_satn_stop(ESPState *s) static void write_response_pdma_cb(ESPState *s) { s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_ST; - s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; + s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; esp_raise_irq(s); } @@ -376,7 +376,7 @@ static void write_response(ESPState *s) if (s->dma_memory_write) { s->dma_memory_write(s->dma_opaque, s->ti_buf, 2); s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_ST; - s->rregs[ESP_RINTR] =3D INTR_BS | INTR_FC; + s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; } else { s->pdma_cb =3D write_response_pdma_cb; @@ -395,7 +395,7 @@ static void write_response(ESPState *s) static void esp_dma_done(ESPState *s) { s->rregs[ESP_RSTAT] |=3D STAT_TC; - s->rregs[ESP_RINTR] =3D INTR_BS; + s->rregs[ESP_RINTR] |=3D INTR_BS; s->rregs[ESP_RSEQ] =3D 0; s->rregs[ESP_RFLAGS] =3D 0; esp_set_tc(s, 0); @@ -700,7 +700,7 @@ uint64_t esp_reg_read(ESPState *s, uint32_t saddr) val =3D s->rregs[ESP_RINTR]; s->rregs[ESP_RINTR] =3D 0; s->rregs[ESP_RSTAT] &=3D ~STAT_TC; - s->rregs[ESP_RSEQ] =3D SEQ_CD; + s->rregs[ESP_RSEQ] =3D SEQ_0; esp_lower_irq(s); if (s->deferred_complete) { esp_report_command_complete(s, s->deferred_status); @@ -771,9 +771,6 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_= t val) /*s->ti_size =3D 0;*/ s->ti_wptr =3D 0; s->ti_rptr =3D 0; - s->rregs[ESP_RINTR] =3D INTR_FC; - s->rregs[ESP_RSEQ] =3D 0; - s->rregs[ESP_RFLAGS] =3D 0; break; case CMD_RESET: trace_esp_mem_writeb_cmd_reset(val); @@ -781,8 +778,8 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_= t val) break; case CMD_BUSRESET: trace_esp_mem_writeb_cmd_bus_reset(val); - s->rregs[ESP_RINTR] =3D INTR_RST; if (!(s->wregs[ESP_CFG1] & CFG1_RESREPT)) { + s->rregs[ESP_RINTR] |=3D INTR_RST; esp_raise_irq(s); } break; @@ -793,12 +790,12 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint6= 4_t val) case CMD_ICCS: trace_esp_mem_writeb_cmd_iccs(val); write_response(s); - s->rregs[ESP_RINTR] =3D INTR_FC; + s->rregs[ESP_RINTR] |=3D INTR_FC; s->rregs[ESP_RSTAT] |=3D STAT_MI; break; case CMD_MSGACC: trace_esp_mem_writeb_cmd_msgacc(val); - s->rregs[ESP_RINTR] =3D INTR_DC; + s->rregs[ESP_RINTR] |=3D INTR_DC; s->rregs[ESP_RSEQ] =3D 0; s->rregs[ESP_RFLAGS] =3D 0; esp_raise_irq(s); @@ -806,7 +803,7 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_= t val) case CMD_PAD: trace_esp_mem_writeb_cmd_pad(val); s->rregs[ESP_RSTAT] =3D STAT_TC; - s->rregs[ESP_RINTR] =3D INTR_FC; + s->rregs[ESP_RINTR] |=3D INTR_FC; s->rregs[ESP_RSEQ] =3D 0; break; case CMD_SATN: --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897376; cv=none; d=zohomail.com; s=zohoarc; b=WsB5AIiczBpSlDlCa0+LiswhZRO9pPr2FVyz7QrU/VCCh7RM/eCd0dPKX/FBzP6neITqfW8nQmRwazhZkKoXwt/aWUUsf1CrMyGf4Boi2zgfY+f8VTBvSFfxcsry7AyfHjAiz1/H0F98C9NJlAvyYkjNsDQCaws/1TwXel/6NuM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897376; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=UgmvbVk5ePF3HUDa6OcZUPiBRtNiwxzrUSZbzNJa1Vk=; b=W/HxeTsVcpDq+6lUCqWenQXEm6TWevFkVoEFCLqoL6sS9+Z864P1i+mOw1CaoQo5xa7mAI9IKXB7xmVzyuKgq0wnTcLfgnzWLBo2LqAxVl90Ietp4rFoQ43GOIeHAipBLCad4DvNtHB6n1pzFR1tCDi31sg8tJMcJlpSP06aG4o= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161489737625079.85297784207864; Thu, 4 Mar 2021 14:36:16 -0800 (PST) Received: from localhost ([::1]:49540 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwZr-0005li-94 for importer@patchew.org; Thu, 04 Mar 2021 17:36:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEi-0001Ih-I9 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:25 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40230 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEf-0006dp-Jn for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:24 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEN-0008MJ-SA; Thu, 04 Mar 2021 22:14:10 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:54 +0000 Message-Id: <20210304221103.6369-34-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 33/42] esp: defer command completion interrupt on incoming data transfers X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" The MacOS toolbox ROM issues a command to the ESP controller as part of its "FAST" SCSI routines and then proceeds to read the incoming data soon after receiving the command completion interrupt. Unfortunately due to SCSI block transfers being asynchronous the incoming d= ata may not yet be present causing an underflow error. Resolve this by waiting = for the SCSI subsystem transfer_data callback before raising the command comple= tion interrupt. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 66 ++++++++++++++++++++++++++++++++++--------- include/hw/scsi/esp.h | 1 + 2 files changed, 54 insertions(+), 13 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 54d008c609..0eecc1d05c 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -183,6 +183,14 @@ static int esp_select(ESPState *s) esp_raise_irq(s); return -1; } + + /* + * Note that we deliberately don't raise the IRQ here: this will be do= ne + * either in do_busid_cmd() for DATA OUT transfers or by the deferred + * IRQ mechanism in esp_transfer_data() for DATA IN transfers + */ + s->rregs[ESP_RINTR] |=3D INTR_FC; + s->rregs[ESP_RSEQ] =3D SEQ_CD; return 0; } =20 @@ -237,18 +245,24 @@ static void do_busid_cmd(ESPState *s, uint8_t *buf, u= int8_t busid) s->ti_size =3D datalen; if (datalen !=3D 0) { s->rregs[ESP_RSTAT] =3D STAT_TC; + s->rregs[ESP_RSEQ] =3D SEQ_CD; esp_set_tc(s, 0); if (datalen > 0) { + /* + * Switch to DATA IN phase but wait until initial data xfer is + * complete before raising the command completion interrupt + */ + s->data_in_ready =3D false; s->rregs[ESP_RSTAT] |=3D STAT_DI; } else { s->rregs[ESP_RSTAT] |=3D STAT_DO; + s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; + esp_raise_irq(s); + esp_lower_drq(s); } scsi_req_continue(s->current_req); + return; } - s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; - s->rregs[ESP_RSEQ] =3D SEQ_CD; - esp_raise_irq(s); - esp_lower_drq(s); } =20 static void do_cmd(ESPState *s) @@ -439,17 +453,11 @@ static void do_dma_pdma_cb(ESPState *s) } else { if (s->async_len =3D=3D 0) { if (s->current_req) { + /* Defer until the scsi layer has completed */ scsi_req_continue(s->current_req); + s->data_in_ready =3D false; } - - /* - * If there is still data to be read from the device then - * complete the DMA operation immediately. Otherwise defer - * until the scsi layer has completed. - */ - if (esp_get_tc(s) !=3D 0 || s->ti_size =3D=3D 0) { - return; - } + return; } =20 if (esp_get_tc(s) !=3D 0) { @@ -602,12 +610,35 @@ void esp_command_complete(SCSIRequest *req, size_t re= sid) void esp_transfer_data(SCSIRequest *req, uint32_t len) { ESPState *s =3D req->hba_private; + int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); uint32_t dmalen =3D esp_get_tc(s); =20 assert(!s->do_cmd); trace_esp_transfer_data(dmalen, s->ti_size); s->async_len =3D len; s->async_buf =3D scsi_req_get_buf(req); + + if (!to_device && !s->data_in_ready) { + /* + * Initial incoming data xfer is complete so raise command + * completion interrupt + */ + s->data_in_ready =3D true; + s->rregs[ESP_RSTAT] |=3D STAT_TC; + s->rregs[ESP_RINTR] |=3D INTR_BS; + esp_raise_irq(s); + + /* + * If data is ready to transfer and the TI command has already + * been executed, start DMA immediately. Otherwise DMA will start + * when host sends the TI command + */ + if (s->ti_size && (s->rregs[ESP_CMD] =3D=3D (CMD_TI | CMD_DMA))) { + esp_do_dma(s); + } + return; + } + if (dmalen) { esp_do_dma(s); } else if (s->ti_size <=3D 0) { @@ -869,6 +900,14 @@ static bool esp_is_before_version_5(void *opaque, int = version_id) return version_id < 5; } =20 +static bool esp_is_version_5(void *opaque, int version_id) +{ + ESPState *s =3D ESP(opaque); + + version_id =3D MIN(version_id, s->mig_version_id); + return version_id =3D=3D 5; +} + static int esp_pre_save(void *opaque) { ESPState *s =3D ESP(opaque); @@ -913,6 +952,7 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_UINT32(cmdlen, ESPState), VMSTATE_UINT32(do_cmd, ESPState), VMSTATE_UINT32_TEST(mig_dma_left, ESPState, esp_is_before_version_= 5), + VMSTATE_BOOL_TEST(data_in_ready, ESPState, esp_is_version_5), VMSTATE_END_OF_LIST() }, }; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 91f8ffd6c8..61bc317a4c 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -41,6 +41,7 @@ struct ESPState { uint32_t cmdlen; uint32_t do_cmd; =20 + bool data_in_ready; int dma_enabled; =20 uint32_t async_len; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896776; cv=none; d=zohomail.com; s=zohoarc; b=EKqUaqnjXPx1igoSKtz8nZyeJs8f5BjuJQvC071Zzmb1k2LoHnxFjsvqr1d5KTsoDRYexmII5QbwwACkmFvwQZWZfk6fnblr+QrdUJ1jlaN5Au53QFZX3vzR6hfPMAc55VM+SVEg6CiH1zOGBXSDPzpj5cNU0JoawS6/61I0ums= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896776; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vcXQCBdQ8I83e8Mx5CKuI/+wMd2Ca/fWmbenCHEiLV8=; b=QKmjorqHEU8X7HZTBV/ujWYQRV3nBWLihSqRM2+/EC3OH8olt3CmotRFd/l8rWx1iw5dQXkwili4o8YDOXWIrL4ycsqf7pNxxWj4e5tYWxQEDpmTIursXsoSTVDiwah7o6cExUnmDDrQHnAPH/eb6V4Vvk85Eev64Towv2+BtQ4= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896776230676.9073062798667; Thu, 4 Mar 2021 14:26:16 -0800 (PST) Received: from localhost ([::1]:47372 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwQB-0001Dv-4v for importer@patchew.org; Thu, 04 Mar 2021 17:26:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53994) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEn-0001Mm-EI for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:29 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40240 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEk-0006g4-Ig for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:29 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEU-0008MJ-8k; Thu, 04 Mar 2021 22:14:15 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:55 +0000 Message-Id: <20210304221103.6369-35-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 34/42] esp: remove old deferred command completion mechanism X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Commit ea84a44250 "scsi: esp: Defer command completion until previous inter= rupts have been handled" provided a mechanism to delay the command completion int= errupt until ESP_RINTR is read after the command has completed. With the previous fixes for latching the ESP_RINTR bits and deferring the s= etting of the command completion interrupt for incoming data to the SCSI callback,= this workaround is no longer required and can be removed. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 35 +++++++++-------------------------- include/hw/scsi/esp.h | 4 ++-- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 0eecc1d05c..eb6681ca66 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -568,18 +568,20 @@ static void esp_do_dma(ESPState *s) esp_lower_drq(s); } =20 -static void esp_report_command_complete(ESPState *s, uint32_t status) +void esp_command_complete(SCSIRequest *req, size_t resid) { + ESPState *s =3D req->hba_private; + trace_esp_command_complete(); if (s->ti_size !=3D 0) { trace_esp_command_complete_unexpected(); } s->ti_size =3D 0; s->async_len =3D 0; - if (status) { + if (req->status) { trace_esp_command_complete_fail(); } - s->status =3D status; + s->status =3D req->status; s->rregs[ESP_RSTAT] =3D STAT_ST; esp_dma_done(s); esp_lower_drq(s); @@ -590,23 +592,6 @@ static void esp_report_command_complete(ESPState *s, u= int32_t status) } } =20 -void esp_command_complete(SCSIRequest *req, size_t resid) -{ - ESPState *s =3D req->hba_private; - - if (s->rregs[ESP_RSTAT] & STAT_INT) { - /* - * Defer handling command complete until the previous - * interrupt has been handled. - */ - trace_esp_command_complete_deferred(); - s->deferred_status =3D req->status; - s->deferred_complete =3D true; - return; - } - esp_report_command_complete(s, req->status); -} - void esp_transfer_data(SCSIRequest *req, uint32_t len) { ESPState *s =3D req->hba_private; @@ -733,10 +718,6 @@ uint64_t esp_reg_read(ESPState *s, uint32_t saddr) s->rregs[ESP_RSTAT] &=3D ~STAT_TC; s->rregs[ESP_RSEQ] =3D SEQ_0; esp_lower_irq(s); - if (s->deferred_complete) { - esp_report_command_complete(s, s->deferred_status); - s->deferred_complete =3D false; - } break; case ESP_TCHI: /* Return the unique id if the value has never been written */ @@ -944,8 +925,10 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_UINT32(ti_wptr, ESPState), VMSTATE_BUFFER(ti_buf, ESPState), VMSTATE_UINT32(status, ESPState), - VMSTATE_UINT32(deferred_status, ESPState), - VMSTATE_BOOL(deferred_complete, ESPState), + VMSTATE_UINT32_TEST(mig_deferred_status, ESPState, + esp_is_before_version_5), + VMSTATE_BOOL_TEST(mig_deferred_complete, ESPState, + esp_is_before_version_5), VMSTATE_UINT32(dma, ESPState), VMSTATE_PARTIAL_BUFFER(cmdbuf, ESPState, 16), VMSTATE_BUFFER_START_MIDDLE_V(cmdbuf, ESPState, 16, 4), diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 61bc317a4c..7d88fa0f92 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -30,8 +30,6 @@ struct ESPState { int32_t ti_size; uint32_t ti_rptr, ti_wptr; uint32_t status; - uint32_t deferred_status; - bool deferred_complete; uint32_t dma; uint8_t ti_buf[TI_BUFSZ]; SCSIBus bus; @@ -57,6 +55,8 @@ struct ESPState { =20 /* Legacy fields for vmstate_esp version < 5 */ uint32_t mig_dma_left; + uint32_t mig_deferred_status; + bool mig_deferred_complete; }; =20 #define TYPE_SYSBUS_ESP "sysbus-esp" --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897493; cv=none; d=zohomail.com; s=zohoarc; b=V3/P8YvcaNKaP8CMOtejwIamOcAkV3lzebWFe6e1qNtKZ3yslr+PBQgQzW5dLGYKLkWDLf6fiz9P3v6CibAad3u1y9YrEITod2zVzyp2W0brQntmgW8s4K5lEyOLwb8fjP0xzGcsspLI9Z8bG0FDsHhELpT6OKQwUb7DF+/bmhg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897493; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=uTHN2JTacNaskN/LrAIBsZHZy4XME3wHnimF5GRJSVU=; b=Oh4J4qxgRNWfoBA49TfGLIkIM5QW9QRLanalnpLhR7UGMSVr3slSJSIK5vX1PfuDUxag+jk2rBdAFMjbiZHNQe8klN9+lEWcL/DlO3nTTQZH3M6GEcod8mxE/Qn/2CKMiwCJkPH9GNSP3MFpoEgQ32n749ZVU5RyhBoDPGOIezA= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897493227761.900420992721; Thu, 4 Mar 2021 14:38:13 -0800 (PST) Received: from localhost ([::1]:58000 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwbj-0000oz-Uo for importer@patchew.org; Thu, 04 Mar 2021 17:38:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54018) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEq-0001OI-0G for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:33 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40250 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEo-0006hV-GA for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:31 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEZ-0008MJ-6g; Thu, 04 Mar 2021 22:14:19 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:56 +0000 Message-Id: <20210304221103.6369-36-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 35/42] esp: raise interrupt after every non-DMA byte transferred to the FIFO X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" This matches the description in the datasheet and is required as support for non-DMA transfers is added. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index eb6681ca66..4ac299651f 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -760,6 +760,12 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64= _t val) s->ti_size++; s->ti_buf[s->ti_wptr++] =3D val & 0xff; } + + /* Non-DMA transfers raise an interrupt after every byte */ + if (s->rregs[ESP_CMD] =3D=3D CMD_TI) { + s->rregs[ESP_RINTR] |=3D INTR_FC | INTR_BS; + esp_raise_irq(s); + } break; case ESP_CMD: s->rregs[saddr] =3D val; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897117; cv=none; d=zohomail.com; s=zohoarc; b=drpxWLn0afDAzk0LUkIfjvZkp+mbSW/pF2c/kJeRSrwMVGxEwXWbXPa2QWow9UXmPNbk5ibSM800Lnol4ZXaQ5bAlA9tr9BrDurDnCVmhFnfmDlR9/Vif7xfSS+P0ePuSRS90a/4TCElDx1nJ8MNPGv4mLIX7ABYZytWICuIUdM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897117; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=DTf7tzKXmgUs9ghPs9TJHKr0/DLS6X+9yytNGhI1jw4=; b=Vc8sY+auiI6mFOxLZBHBEIuzwMrdXH3vc5jGTgQ6uxVIxx9bTlC7UrvwuFV4DL731SpRSdlx/ikIWY7+dIlM4ABiIR6QuaHo0q2WWeKuwW4KoOL/I33kAv3Ez8l6Y0rZJ8ZvjhcFwf/Wf4+C1nKI4cU6cnLAg5VQYl30eNYDFFw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897117848532.8129421225186; Thu, 4 Mar 2021 14:31:57 -0800 (PST) Received: from localhost ([::1]:38154 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwVg-0000xn-IG for importer@patchew.org; Thu, 04 Mar 2021 17:31:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54032) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEu-0001Qb-JC for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:37 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40260 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEs-0006k9-CD for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:36 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEd-0008MJ-7Y; Thu, 04 Mar 2021 22:14:22 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:57 +0000 Message-Id: <20210304221103.6369-37-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 36/42] esp: add maxlen parameter to get_cmd() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Some guests use a mixture of DMA and non-DMA transfers in combination with = the SATN and stop command to transfer message out phase and command phase bytes= to the target. Prepare for the next commit by adding a maxlen parameter to get_cmd() to allow partial transfers. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 4ac299651f..23fcaa90c1 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -194,7 +194,7 @@ static int esp_select(ESPState *s) return 0; } =20 -static uint32_t get_cmd(ESPState *s) +static uint32_t get_cmd(ESPState *s, uint32_t maxlen) { uint8_t *buf =3D s->cmdbuf; uint32_t dmalen; @@ -202,8 +202,8 @@ static uint32_t get_cmd(ESPState *s) =20 target =3D s->wregs[ESP_WBUSID] & BUSID_DID; if (s->dma) { - dmalen =3D esp_get_tc(s); - if (dmalen > ESP_CMDBUF_SZ) { + dmalen =3D MIN(esp_get_tc(s), maxlen); + if (dmalen =3D=3D 0) { return 0; } if (s->dma_memory_read) { @@ -216,12 +216,14 @@ static uint32_t get_cmd(ESPState *s) return 0; } } else { - dmalen =3D s->ti_size; - if (dmalen > TI_BUFSZ) { + dmalen =3D MIN(s->ti_size, maxlen); + if (dmalen =3D=3D 0) { return 0; } memcpy(buf, s->ti_buf, dmalen); - buf[0] =3D buf[2] >> 5; + if (dmalen >=3D 3) { + buf[0] =3D buf[2] >> 5; + } } trace_esp_get_cmd(dmalen, target); =20 @@ -290,7 +292,7 @@ static void handle_satn(ESPState *s) return; } s->pdma_cb =3D satn_pdma_cb; - cmdlen =3D get_cmd(s); + cmdlen =3D get_cmd(s, ESP_CMDBUF_SZ); if (cmdlen > 0) { s->cmdlen =3D cmdlen; do_cmd(s); @@ -320,7 +322,7 @@ static void handle_s_without_atn(ESPState *s) return; } s->pdma_cb =3D s_without_satn_pdma_cb; - cmdlen =3D get_cmd(s); + cmdlen =3D get_cmd(s, ESP_CMDBUF_SZ); if (cmdlen > 0) { s->cmdlen =3D cmdlen; do_busid_cmd(s, s->cmdbuf, 0); @@ -355,7 +357,7 @@ static void handle_satn_stop(ESPState *s) return; } s->pdma_cb =3D satn_stop_pdma_cb; - cmdlen =3D get_cmd(s); + cmdlen =3D get_cmd(s, ESP_CMDBUF_SZ); if (cmdlen > 0) { trace_esp_handle_satn_stop(s->cmdlen); s->cmdlen =3D cmdlen; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897898; cv=none; d=zohomail.com; s=zohoarc; b=dRy0efH82+k1G1nk8OoD7FXXCIO9RsxAMnGJfAHFTvBr4YQpWGtxnSuOjoXaWZ2kDhdzjRg65eMPHYmpug7d9Bc5SF32jSPXw0rlTS8bf3Q+wYzH05QJqwG86IfjnVtN1hiRgc7S9IquYH+xq1jbFm0lAbVN7Tm/qSFIvmcbY2I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897898; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=O6l4rnIePpJrPSCSuVFYGbvZA7OjU38DdEu6+ruwpJk=; b=IqOJ0xfXtzevi+F/iA0REAoUrhczRVzZnhMewNIFxRHDkokTOM8VJX/9+lJkLaJzORhZrj3z+5PxOgUiVAnqQJI/OdcMxQaZrD2ax+wJ+Zi/bseOuR9TirwUHm7zRUcpBKXppwB4APA2E5SEQml414qE7Wv40K6cF85FanxR14U= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897898108531.3648964008984; Thu, 4 Mar 2021 14:44:58 -0800 (PST) Received: from localhost ([::1]:50486 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwiF-00012G-Vx for importer@patchew.org; Thu, 04 Mar 2021 17:44:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54060) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEz-0001Vz-8o for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:41 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40272 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwEx-0006mD-As for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:40 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEh-0008MJ-34; Thu, 04 Mar 2021 22:14:27 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:58 +0000 Message-Id: <20210304221103.6369-38-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 37/42] esp: transition to message out phase after SATN and stop command X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" The SCSI bus should remain in the message out phase after the SATN and stop command rather than transitioning to the command phase. A new ESPState vari= able cmdbuf_cdb_offset is added which stores the offset of the CDB from the start of cmdbuf when accumulating extended message out phase data. Currently any extended message out data is discarded in do_cmd() before the= CDB is processed in do_busid_cmd(). Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 72 ++++++++++++++++++++++++++++++++++--------- include/hw/scsi/esp.h | 2 ++ 2 files changed, 60 insertions(+), 14 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 23fcaa90c1..0d5c07e4c1 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -272,13 +272,15 @@ static void do_cmd(ESPState *s) uint8_t *buf =3D s->cmdbuf; uint8_t busid =3D buf[0]; =20 - do_busid_cmd(s, &buf[1], busid); + /* Ignore extended messages for now */ + do_busid_cmd(s, &buf[s->cmdbuf_cdb_offset], busid); } =20 static void satn_pdma_cb(ESPState *s) { s->do_cmd =3D 0; if (s->cmdlen) { + s->cmdbuf_cdb_offset =3D 1; do_cmd(s); } } @@ -295,6 +297,7 @@ static void handle_satn(ESPState *s) cmdlen =3D get_cmd(s, ESP_CMDBUF_SZ); if (cmdlen > 0) { s->cmdlen =3D cmdlen; + s->cmdbuf_cdb_offset =3D 1; do_cmd(s); } else if (cmdlen =3D=3D 0) { s->cmdlen =3D 0; @@ -309,6 +312,7 @@ static void s_without_satn_pdma_cb(ESPState *s) { s->do_cmd =3D 0; if (s->cmdlen) { + s->cmdbuf_cdb_offset =3D 0; do_busid_cmd(s, s->cmdbuf, 0); } } @@ -325,6 +329,7 @@ static void handle_s_without_atn(ESPState *s) cmdlen =3D get_cmd(s, ESP_CMDBUF_SZ); if (cmdlen > 0) { s->cmdlen =3D cmdlen; + s->cmdbuf_cdb_offset =3D 0; do_busid_cmd(s, s->cmdbuf, 0); } else if (cmdlen =3D=3D 0) { s->cmdlen =3D 0; @@ -341,6 +346,7 @@ static void satn_stop_pdma_cb(ESPState *s) if (s->cmdlen) { trace_esp_handle_satn_stop(s->cmdlen); s->do_cmd =3D 1; + s->cmdbuf_cdb_offset =3D 1; s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; @@ -357,21 +363,22 @@ static void handle_satn_stop(ESPState *s) return; } s->pdma_cb =3D satn_stop_pdma_cb; - cmdlen =3D get_cmd(s, ESP_CMDBUF_SZ); + cmdlen =3D get_cmd(s, 1); if (cmdlen > 0) { - trace_esp_handle_satn_stop(s->cmdlen); + trace_esp_handle_satn_stop(cmdlen); s->cmdlen =3D cmdlen; s->do_cmd =3D 1; - s->rregs[ESP_RSTAT] =3D STAT_CD; + s->cmdbuf_cdb_offset =3D 1; + s->rregs[ESP_RSTAT] =3D STAT_MO; s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; - s->rregs[ESP_RSEQ] =3D SEQ_CD; + s->rregs[ESP_RSEQ] =3D SEQ_MO; esp_raise_irq(s); } else if (cmdlen =3D=3D 0) { s->cmdlen =3D 0; s->do_cmd =3D 1; - /* Target present, but no cmd yet - switch to command phase */ - s->rregs[ESP_RSEQ] =3D SEQ_CD; - s->rregs[ESP_RSTAT] =3D STAT_CD; + /* Target present, switch to message out phase */ + s->rregs[ESP_RSEQ] =3D SEQ_MO; + s->rregs[ESP_RSTAT] =3D STAT_MO; } } =20 @@ -505,9 +512,27 @@ static void esp_do_dma(ESPState *s) } trace_esp_handle_ti_cmd(s->cmdlen); s->ti_size =3D 0; - s->cmdlen =3D 0; - s->do_cmd =3D 0; - do_cmd(s); + if ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_CD) { + /* No command received */ + if (s->cmdbuf_cdb_offset =3D=3D s->cmdlen) { + return; + } + + /* Command has been received */ + s->cmdlen =3D 0; + s->do_cmd =3D 0; + do_cmd(s); + } else { + /* + * Extra message out bytes received: update cmdbuf_cdb_offset + * and then switch to commmand phase + */ + s->cmdbuf_cdb_offset =3D s->cmdlen; + s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; + s->rregs[ESP_RSEQ] =3D SEQ_CD; + s->rregs[ESP_RINTR] |=3D INTR_BS; + esp_raise_irq(s); + } return; } if (s->async_len =3D=3D 0) { @@ -655,9 +680,27 @@ static void handle_ti(ESPState *s) } else if (s->do_cmd) { trace_esp_handle_ti_cmd(s->cmdlen); s->ti_size =3D 0; - s->cmdlen =3D 0; - s->do_cmd =3D 0; - do_cmd(s); + if ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_CD) { + /* No command received */ + if (s->cmdbuf_cdb_offset =3D=3D s->cmdlen) { + return; + } + + /* Command has been received */ + s->cmdlen =3D 0; + s->do_cmd =3D 0; + do_cmd(s); + } else { + /* + * Extra message out bytes received: update cmdbuf_cdb_offset + * and then switch to commmand phase + */ + s->cmdbuf_cdb_offset =3D s->cmdlen; + s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; + s->rregs[ESP_RSEQ] =3D SEQ_CD; + s->rregs[ESP_RINTR] |=3D INTR_BS; + esp_raise_irq(s); + } } } =20 @@ -944,6 +987,7 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_UINT32(do_cmd, ESPState), VMSTATE_UINT32_TEST(mig_dma_left, ESPState, esp_is_before_version_= 5), VMSTATE_BOOL_TEST(data_in_ready, ESPState, esp_is_version_5), + VMSTATE_UINT8_TEST(cmdbuf_cdb_offset, ESPState, esp_is_version_5), VMSTATE_END_OF_LIST() }, }; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 7d88fa0f92..f697645c05 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -37,6 +37,7 @@ struct ESPState { SCSIRequest *current_req; uint8_t cmdbuf[ESP_CMDBUF_SZ]; uint32_t cmdlen; + uint8_t cmdbuf_cdb_offset; uint32_t do_cmd; =20 bool data_in_ready; @@ -136,6 +137,7 @@ struct SysBusESPState { #define INTR_RST 0x80 =20 #define SEQ_0 0x0 +#define SEQ_MO 0x1 #define SEQ_CD 0x4 =20 #define CFG1_RESREPT 0x40 --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897314; cv=none; d=zohomail.com; s=zohoarc; b=glqBNprgmdawg6hrrVaJCJaUaLZfJj7dz89x6EPd9PFmEhLvIlGp97b89v5CBUIa+CD5khhLqSgi19ZnAZwVBdizUCKOsSEISLTxKut4VALdpYSTsMWBboFqxspLiLM1lkDZTibj5h4EJYRzbvuV6dvDwjkoPY+Udc/OYProysg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897314; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=20ICr5dOG6UYlU+i/8V98y0NQ1lRneCRHNVqpgPhGm0=; b=CBqYiW4cRfsdtLWR/jKIf7axZQlhmhwwotzaSfALC6gUrDipUZpyxUyGmSiojcgmzLTzN6poWLCqTpu68nlOYRC8t3u41eus0jZuMr2Vf71X3Id1KdJlHxld8VZ5taqRsNu6BXlmabz7NWABELyYCPgG0QtoKKRAgX1sQ6ockP8= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161489731492368.88257877225738; Thu, 4 Mar 2021 14:35:14 -0800 (PST) Received: from localhost ([::1]:46558 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwYr-0004X7-R7 for importer@patchew.org; Thu, 04 Mar 2021 17:35:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54078) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwF3-0001j5-Qo for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:45 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40280 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwF1-0006q6-K6 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:45 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEm-0008MJ-1s; Thu, 04 Mar 2021 22:14:32 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:10:59 +0000 Message-Id: <20210304221103.6369-39-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 38/42] esp: convert ti_buf from array to Fifo8 X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Rename TI_BUFSZ to ESP_FIFO_SZ since this constant is really describing the= size of the FIFO and is not directly related to the TI size. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 118 ++++++++++++++++++++++++++---------------- include/hw/scsi/esp.h | 8 +-- 2 files changed, 79 insertions(+), 47 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 0d5c07e4c1..44e70aa789 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -98,6 +98,25 @@ void esp_request_cancelled(SCSIRequest *req) } } =20 +static void esp_fifo_push(ESPState *s, uint8_t val) +{ + if (fifo8_num_used(&s->fifo) =3D=3D ESP_FIFO_SZ) { + trace_esp_error_fifo_overrun(); + return; + } + + fifo8_push(&s->fifo, val); +} + +static uint8_t esp_fifo_pop(ESPState *s) +{ + if (fifo8_is_empty(&s->fifo)) { + return 0; + } + + return fifo8_pop(&s->fifo); +} + static uint32_t esp_get_tc(ESPState *s) { uint32_t dmalen; @@ -134,7 +153,7 @@ static uint8_t esp_pdma_read(ESPState *s) if (s->do_cmd) { val =3D s->cmdbuf[s->cmdlen++]; } else { - val =3D s->ti_buf[s->ti_rptr++]; + val =3D esp_fifo_pop(s); } =20 return val; @@ -151,7 +170,7 @@ static void esp_pdma_write(ESPState *s, uint8_t val) if (s->do_cmd) { s->cmdbuf[s->cmdlen++] =3D val; } else { - s->ti_buf[s->ti_wptr++] =3D val; + esp_fifo_push(s, val); } =20 dmalen--; @@ -165,8 +184,7 @@ static int esp_select(ESPState *s) target =3D s->wregs[ESP_WBUSID] & BUSID_DID; =20 s->ti_size =3D 0; - s->ti_rptr =3D 0; - s->ti_wptr =3D 0; + fifo8_reset(&s->fifo); =20 if (s->current_req) { /* Started a new command before the old one finished. Cancel it. = */ @@ -197,7 +215,7 @@ static int esp_select(ESPState *s) static uint32_t get_cmd(ESPState *s, uint32_t maxlen) { uint8_t *buf =3D s->cmdbuf; - uint32_t dmalen; + uint32_t dmalen, n; int target; =20 target =3D s->wregs[ESP_WBUSID] & BUSID_DID; @@ -220,7 +238,7 @@ static uint32_t get_cmd(ESPState *s, uint32_t maxlen) if (dmalen =3D=3D 0) { return 0; } - memcpy(buf, s->ti_buf, dmalen); + memcpy(buf, fifo8_pop_buf(&s->fifo, dmalen, &n), dmalen); if (dmalen >=3D 3) { buf[0] =3D buf[2] >> 5; } @@ -392,12 +410,18 @@ static void write_response_pdma_cb(ESPState *s) =20 static void write_response(ESPState *s) { + uint32_t n; + trace_esp_write_response(s->status); - s->ti_buf[0] =3D s->status; - s->ti_buf[1] =3D 0; + + fifo8_reset(&s->fifo); + esp_fifo_push(s, s->status); + esp_fifo_push(s, 0); + if (s->dma) { if (s->dma_memory_write) { - s->dma_memory_write(s->dma_opaque, s->ti_buf, 2); + s->dma_memory_write(s->dma_opaque, + (uint8_t *)fifo8_pop_buf(&s->fifo, 2, &n),= 2); s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_ST; s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; @@ -408,8 +432,6 @@ static void write_response(ESPState *s) } } else { s->ti_size =3D 2; - s->ti_rptr =3D 0; - s->ti_wptr =3D 2; s->rregs[ESP_RFLAGS] =3D 2; } esp_raise_irq(s); @@ -429,6 +451,7 @@ static void do_dma_pdma_cb(ESPState *s) { int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); int len; + uint32_t n; =20 if (s->do_cmd) { s->ti_size =3D 0; @@ -441,10 +464,8 @@ static void do_dma_pdma_cb(ESPState *s) =20 if (to_device) { /* Copy FIFO data to device */ - len =3D MIN(s->ti_wptr, TI_BUFSZ); - memcpy(s->async_buf, s->ti_buf, len); - s->ti_wptr =3D 0; - s->ti_rptr =3D 0; + len =3D MIN(fifo8_num_used(&s->fifo), ESP_FIFO_SZ); + memcpy(s->async_buf, fifo8_pop_buf(&s->fifo, len, &n), len); s->async_buf +=3D len; s->async_len -=3D len; s->ti_size +=3D len; @@ -471,11 +492,8 @@ static void do_dma_pdma_cb(ESPState *s) =20 if (esp_get_tc(s) !=3D 0) { /* Copy device data to FIFO */ - s->ti_wptr =3D 0; - s->ti_rptr =3D 0; - len =3D MIN(s->async_len, TI_BUFSZ); - memcpy(s->ti_buf, s->async_buf, len); - s->ti_wptr +=3D len; + len =3D MIN(s->async_len, fifo8_num_free(&s->fifo)); + fifo8_push_all(&s->fifo, s->async_buf, len); s->async_buf +=3D len; s->async_len -=3D len; s->ti_size -=3D len; @@ -555,9 +573,8 @@ static void esp_do_dma(ESPState *s) s->dma_memory_write(s->dma_opaque, s->async_buf, len); } else { /* Copy device data to FIFO */ - len =3D MIN(len, TI_BUFSZ - s->ti_wptr); - memcpy(&s->ti_buf[s->ti_wptr], s->async_buf, len); - s->ti_wptr +=3D len; + len =3D MIN(len, fifo8_num_free(&s->fifo)); + fifo8_push_all(&s->fifo, s->async_buf, len); s->async_buf +=3D len; s->async_len -=3D len; s->ti_size -=3D len; @@ -710,8 +727,7 @@ void esp_hard_reset(ESPState *s) memset(s->wregs, 0, ESP_REGS); s->tchi_written =3D 0; s->ti_size =3D 0; - s->ti_rptr =3D 0; - s->ti_wptr =3D 0; + fifo8_reset(&s->fifo); s->dma =3D 0; s->do_cmd =3D 0; s->dma_cb =3D NULL; @@ -743,13 +759,9 @@ uint64_t esp_reg_read(ESPState *s, uint32_t saddr) /* Data out. */ qemu_log_mask(LOG_UNIMP, "esp: PIO data read not implemented\n= "); s->rregs[ESP_FIFO] =3D 0; - } else if (s->ti_rptr < s->ti_wptr) { + } else { s->ti_size--; - s->rregs[ESP_FIFO] =3D s->ti_buf[s->ti_rptr++]; - } - if (s->ti_rptr =3D=3D s->ti_wptr) { - s->ti_rptr =3D 0; - s->ti_wptr =3D 0; + s->rregs[ESP_FIFO] =3D esp_fifo_pop(s); } val =3D s->rregs[ESP_FIFO]; break; @@ -799,11 +811,9 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64= _t val) } else { trace_esp_error_fifo_overrun(); } - } else if (s->ti_wptr =3D=3D TI_BUFSZ - 1) { - trace_esp_error_fifo_overrun(); } else { s->ti_size++; - s->ti_buf[s->ti_wptr++] =3D val & 0xff; + esp_fifo_push(s, val); } =20 /* Non-DMA transfers raise an interrupt after every byte */ @@ -831,9 +841,7 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_= t val) break; case CMD_FLUSH: trace_esp_mem_writeb_cmd_flush(val); - /*s->ti_size =3D 0;*/ - s->ti_wptr =3D 0; - s->ti_rptr =3D 0; + fifo8_reset(&s->fifo); break; case CMD_RESET: trace_esp_mem_writeb_cmd_reset(val); @@ -951,11 +959,18 @@ static int esp_pre_save(void *opaque) static int esp_post_load(void *opaque, int version_id) { ESPState *s =3D ESP(opaque); + int len, i; =20 version_id =3D MIN(version_id, s->mig_version_id); =20 if (version_id < 5) { esp_set_tc(s, s->mig_dma_left); + + /* Migrate ti_buf to fifo */ + len =3D s->mig_ti_wptr - s->mig_ti_rptr; + for (i =3D 0; i < len; i++) { + fifo8_push(&s->fifo, s->mig_ti_buf[i]); + } } =20 s->mig_version_id =3D vmstate_esp.version_id; @@ -972,9 +987,9 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_BUFFER(rregs, ESPState), VMSTATE_BUFFER(wregs, ESPState), VMSTATE_INT32(ti_size, ESPState), - VMSTATE_UINT32(ti_rptr, ESPState), - VMSTATE_UINT32(ti_wptr, ESPState), - VMSTATE_BUFFER(ti_buf, ESPState), + VMSTATE_UINT32_TEST(mig_ti_rptr, ESPState, esp_is_before_version_5= ), + VMSTATE_UINT32_TEST(mig_ti_wptr, ESPState, esp_is_before_version_5= ), + VMSTATE_BUFFER_TEST(mig_ti_buf, ESPState, esp_is_before_version_5), VMSTATE_UINT32(status, ESPState), VMSTATE_UINT32_TEST(mig_deferred_status, ESPState, esp_is_before_version_5), @@ -988,6 +1003,7 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_UINT32_TEST(mig_dma_left, ESPState, esp_is_before_version_= 5), VMSTATE_BOOL_TEST(data_in_ready, ESPState, esp_is_version_5), VMSTATE_UINT8_TEST(cmdbuf_cdb_offset, ESPState, esp_is_version_5), + VMSTATE_FIFO8_TEST(fifo, ESPState, esp_is_version_5), VMSTATE_END_OF_LIST() }, }; @@ -1040,7 +1056,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwadd= r addr, break; } dmalen =3D esp_get_tc(s); - if (dmalen =3D=3D 0 || (s->ti_wptr =3D=3D TI_BUFSZ)) { + if (dmalen =3D=3D 0 || fifo8_is_full(&s->fifo)) { s->pdma_cb(s); } } @@ -1063,9 +1079,7 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hw= addr addr, val =3D (val << 8) | esp_pdma_read(s); break; } - if (s->ti_rptr =3D=3D s->ti_wptr) { - s->ti_wptr =3D 0; - s->ti_rptr =3D 0; + if (fifo8_is_empty(&s->fifo)) { s->pdma_cb(s); } return val; @@ -1177,6 +1191,20 @@ static const TypeInfo sysbus_esp_info =3D { .class_init =3D sysbus_esp_class_init, }; =20 +static void esp_finalize(Object *obj) +{ + ESPState *s =3D ESP(obj); + + fifo8_destroy(&s->fifo); +} + +static void esp_init(Object *obj) +{ + ESPState *s =3D ESP(obj); + + fifo8_create(&s->fifo, ESP_FIFO_SZ); +} + static void esp_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -1189,6 +1217,8 @@ static void esp_class_init(ObjectClass *klass, void *= data) static const TypeInfo esp_info =3D { .name =3D TYPE_ESP, .parent =3D TYPE_DEVICE, + .instance_init =3D esp_init, + .instance_finalize =3D esp_finalize, .instance_size =3D sizeof(ESPState), .class_init =3D esp_class_init, }; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index f697645c05..eb4e8ba171 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -3,6 +3,7 @@ =20 #include "hw/scsi/scsi.h" #include "hw/sysbus.h" +#include "qemu/fifo8.h" #include "qom/object.h" =20 /* esp.c */ @@ -10,7 +11,7 @@ typedef void (*ESPDMAMemoryReadWriteFunc)(void *opaque, uint8_t *buf, int = len); =20 #define ESP_REGS 16 -#define TI_BUFSZ 16 +#define ESP_FIFO_SZ 16 #define ESP_CMDBUF_SZ 32 =20 typedef struct ESPState ESPState; @@ -28,10 +29,9 @@ struct ESPState { uint8_t chip_id; bool tchi_written; int32_t ti_size; - uint32_t ti_rptr, ti_wptr; uint32_t status; uint32_t dma; - uint8_t ti_buf[TI_BUFSZ]; + Fifo8 fifo; SCSIBus bus; SCSIDevice *current_dev; SCSIRequest *current_req; @@ -58,6 +58,8 @@ struct ESPState { uint32_t mig_dma_left; uint32_t mig_deferred_status; bool mig_deferred_complete; + uint32_t mig_ti_rptr, mig_ti_wptr; + uint8_t mig_ti_buf[ESP_FIFO_SZ]; }; =20 #define TYPE_SYSBUS_ESP "sysbus-esp" --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897451; cv=none; d=zohomail.com; s=zohoarc; b=m/Z40EdpkI2L39j5fWP10KNAFPIZk9thxEuzp93yVsbtZOyFisFqnRAVfYTVsTkRDd87+D2BjRqA9r8jE1bGvr9/qXqm+lYY8m7/eoK/lRVl4T2z/5sTuT9EIdLAXOO61w/jZKE96ieft48W8pbYwDnxXkqj2KBuM9TfVmV2Nww= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897451; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5iIFtmzaQGlRdQmdbZwd74AvX6/5Hl/emGAxSHnQ0P0=; b=BxZ5lHc3BSr7AVsw7zX/QAtvsVACSywWnS+GZVQxwsAHsQJDU3fP/GbaXW44IcsJFsQDS37D5v9RygMJKjv8NLE7NbSBEScM8ky3W+c6WVoV7401VXEiS3uklBTkYjq9Lv5uWQLUmDChyJ0CC9NV3QN7iOG6uUEcfRJceisfv6o= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897451474458.45649810605505; Thu, 4 Mar 2021 14:37:31 -0800 (PST) Received: from localhost ([::1]:55140 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwb4-00084y-9m for importer@patchew.org; Thu, 04 Mar 2021 17:37:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54122) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwFE-0002BM-Bg for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:56 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40292 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwFA-0006uI-Gs for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:56 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEq-0008MJ-AZ; Thu, 04 Mar 2021 22:14:41 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:11:00 +0000 Message-Id: <20210304221103.6369-40-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 39/42] esp: convert cmdbuf from array to Fifo8 X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Rename ESP_CMDBUF_SZ to ESP_CMDFIFO_SZ and cmdbuf_cdb_offset to cmdfifo_cdb= _offset to indicate that the command buffer type has changed from an array to a Fif= o8. This also enables us to remove the ESPState field cmdlen since the command = length is now simply the number of elements used in cmdfifo. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 151 +++++++++++++++++++++++++++--------------- include/hw/scsi/esp.h | 9 +-- 2 files changed, 101 insertions(+), 59 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 44e70aa789..34dc58da58 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -117,6 +117,25 @@ static uint8_t esp_fifo_pop(ESPState *s) return fifo8_pop(&s->fifo); } =20 +static void esp_cmdfifo_push(ESPState *s, uint8_t val) +{ + if (fifo8_num_used(&s->cmdfifo) =3D=3D ESP_CMDFIFO_SZ) { + trace_esp_error_fifo_overrun(); + return; + } + + fifo8_push(&s->cmdfifo, val); +} + +static uint8_t esp_cmdfifo_pop(ESPState *s) +{ + if (fifo8_is_empty(&s->cmdfifo)) { + return 0; + } + + return fifo8_pop(&s->cmdfifo); +} + static uint32_t esp_get_tc(ESPState *s) { uint32_t dmalen; @@ -151,7 +170,7 @@ static uint8_t esp_pdma_read(ESPState *s) uint8_t val; =20 if (s->do_cmd) { - val =3D s->cmdbuf[s->cmdlen++]; + val =3D esp_cmdfifo_pop(s); } else { val =3D esp_fifo_pop(s); } @@ -168,7 +187,7 @@ static void esp_pdma_write(ESPState *s, uint8_t val) } =20 if (s->do_cmd) { - s->cmdbuf[s->cmdlen++] =3D val; + esp_cmdfifo_push(s, val); } else { esp_fifo_push(s, val); } @@ -214,7 +233,7 @@ static int esp_select(ESPState *s) =20 static uint32_t get_cmd(ESPState *s, uint32_t maxlen) { - uint8_t *buf =3D s->cmdbuf; + uint8_t buf[ESP_CMDFIFO_SZ]; uint32_t dmalen, n; int target; =20 @@ -226,15 +245,18 @@ static uint32_t get_cmd(ESPState *s, uint32_t maxlen) } if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, buf, dmalen); + fifo8_push_all(&s->cmdfifo, buf, dmalen); } else { if (esp_select(s) < 0) { + fifo8_reset(&s->cmdfifo); return -1; } esp_raise_drq(s); + fifo8_reset(&s->cmdfifo); return 0; } } else { - dmalen =3D MIN(s->ti_size, maxlen); + dmalen =3D MIN(fifo8_num_used(&s->fifo), maxlen); if (dmalen =3D=3D 0) { return 0; } @@ -242,27 +264,35 @@ static uint32_t get_cmd(ESPState *s, uint32_t maxlen) if (dmalen >=3D 3) { buf[0] =3D buf[2] >> 5; } + fifo8_push_all(&s->cmdfifo, buf, dmalen); } trace_esp_get_cmd(dmalen, target); =20 if (esp_select(s) < 0) { + fifo8_reset(&s->cmdfifo); return -1; } return dmalen; } =20 -static void do_busid_cmd(ESPState *s, uint8_t *buf, uint8_t busid) +static void do_busid_cmd(ESPState *s, uint8_t busid) { + uint32_t n, cmdlen; int32_t datalen; int lun; SCSIDevice *current_lun; + uint8_t *buf; =20 trace_esp_do_busid_cmd(busid); lun =3D busid & 7; + cmdlen =3D fifo8_num_used(&s->cmdfifo); + buf =3D (uint8_t *)fifo8_pop_buf(&s->cmdfifo, cmdlen, &n); + current_lun =3D scsi_device_find(&s->bus, 0, s->current_dev->id, lun); s->current_req =3D scsi_req_new(current_lun, 0, lun, buf, s); datalen =3D scsi_req_enqueue(s->current_req); s->ti_size =3D datalen; + fifo8_reset(&s->cmdfifo); if (datalen !=3D 0) { s->rregs[ESP_RSTAT] =3D STAT_TC; s->rregs[ESP_RSEQ] =3D SEQ_CD; @@ -287,18 +317,25 @@ static void do_busid_cmd(ESPState *s, uint8_t *buf, u= int8_t busid) =20 static void do_cmd(ESPState *s) { - uint8_t *buf =3D s->cmdbuf; - uint8_t busid =3D buf[0]; + uint8_t busid =3D fifo8_pop(&s->cmdfifo); + uint32_t n; + + s->cmdfifo_cdb_offset--; =20 /* Ignore extended messages for now */ - do_busid_cmd(s, &buf[s->cmdbuf_cdb_offset], busid); + if (s->cmdfifo_cdb_offset) { + fifo8_pop_buf(&s->cmdfifo, s->cmdfifo_cdb_offset, &n); + s->cmdfifo_cdb_offset =3D 0; + } + + do_busid_cmd(s, busid); } =20 static void satn_pdma_cb(ESPState *s) { s->do_cmd =3D 0; - if (s->cmdlen) { - s->cmdbuf_cdb_offset =3D 1; + if (!fifo8_is_empty(&s->cmdfifo)) { + s->cmdfifo_cdb_offset =3D 1; do_cmd(s); } } @@ -312,13 +349,11 @@ static void handle_satn(ESPState *s) return; } s->pdma_cb =3D satn_pdma_cb; - cmdlen =3D get_cmd(s, ESP_CMDBUF_SZ); + cmdlen =3D get_cmd(s, ESP_CMDFIFO_SZ); if (cmdlen > 0) { - s->cmdlen =3D cmdlen; - s->cmdbuf_cdb_offset =3D 1; + s->cmdfifo_cdb_offset =3D 1; do_cmd(s); } else if (cmdlen =3D=3D 0) { - s->cmdlen =3D 0; s->do_cmd =3D 1; /* Target present, but no cmd yet - switch to command phase */ s->rregs[ESP_RSEQ] =3D SEQ_CD; @@ -328,10 +363,13 @@ static void handle_satn(ESPState *s) =20 static void s_without_satn_pdma_cb(ESPState *s) { + uint32_t len; + s->do_cmd =3D 0; - if (s->cmdlen) { - s->cmdbuf_cdb_offset =3D 0; - do_busid_cmd(s, s->cmdbuf, 0); + len =3D fifo8_num_used(&s->cmdfifo); + if (len) { + s->cmdfifo_cdb_offset =3D 0; + do_busid_cmd(s, 0); } } =20 @@ -344,13 +382,11 @@ static void handle_s_without_atn(ESPState *s) return; } s->pdma_cb =3D s_without_satn_pdma_cb; - cmdlen =3D get_cmd(s, ESP_CMDBUF_SZ); + cmdlen =3D get_cmd(s, ESP_CMDFIFO_SZ); if (cmdlen > 0) { - s->cmdlen =3D cmdlen; - s->cmdbuf_cdb_offset =3D 0; - do_busid_cmd(s, s->cmdbuf, 0); + s->cmdfifo_cdb_offset =3D 0; + do_busid_cmd(s, 0); } else if (cmdlen =3D=3D 0) { - s->cmdlen =3D 0; s->do_cmd =3D 1; /* Target present, but no cmd yet - switch to command phase */ s->rregs[ESP_RSEQ] =3D SEQ_CD; @@ -361,10 +397,10 @@ static void handle_s_without_atn(ESPState *s) static void satn_stop_pdma_cb(ESPState *s) { s->do_cmd =3D 0; - if (s->cmdlen) { - trace_esp_handle_satn_stop(s->cmdlen); + if (!fifo8_is_empty(&s->cmdfifo)) { + trace_esp_handle_satn_stop(fifo8_num_used(&s->cmdfifo)); s->do_cmd =3D 1; - s->cmdbuf_cdb_offset =3D 1; + s->cmdfifo_cdb_offset =3D 1; s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; @@ -383,16 +419,14 @@ static void handle_satn_stop(ESPState *s) s->pdma_cb =3D satn_stop_pdma_cb; cmdlen =3D get_cmd(s, 1); if (cmdlen > 0) { - trace_esp_handle_satn_stop(cmdlen); - s->cmdlen =3D cmdlen; + trace_esp_handle_satn_stop(fifo8_num_used(&s->cmdfifo)); s->do_cmd =3D 1; - s->cmdbuf_cdb_offset =3D 1; + s->cmdfifo_cdb_offset =3D 1; s->rregs[ESP_RSTAT] =3D STAT_MO; s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_MO; esp_raise_irq(s); } else if (cmdlen =3D=3D 0) { - s->cmdlen =3D 0; s->do_cmd =3D 1; /* Target present, switch to message out phase */ s->rregs[ESP_RSEQ] =3D SEQ_MO; @@ -455,7 +489,6 @@ static void do_dma_pdma_cb(ESPState *s) =20 if (s->do_cmd) { s->ti_size =3D 0; - s->cmdlen =3D 0; s->do_cmd =3D 0; do_cmd(s); esp_lower_drq(s); @@ -509,8 +542,9 @@ static void do_dma_pdma_cb(ESPState *s) =20 static void esp_do_dma(ESPState *s) { - uint32_t len; + uint32_t len, cmdlen; int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); + uint8_t buf[ESP_CMDFIFO_SZ]; =20 len =3D esp_get_tc(s); if (s->do_cmd) { @@ -518,34 +552,33 @@ static void esp_do_dma(ESPState *s) * handle_ti_cmd() case: esp_do_dma() is called only from * handle_ti_cmd() with do_cmd !=3D NULL (see the assert()) */ - trace_esp_do_dma(s->cmdlen, len); - assert(s->cmdlen <=3D sizeof(s->cmdbuf) && - len <=3D sizeof(s->cmdbuf) - s->cmdlen); + cmdlen =3D fifo8_num_used(&s->cmdfifo); + trace_esp_do_dma(cmdlen, len); if (s->dma_memory_read) { - s->dma_memory_read(s->dma_opaque, &s->cmdbuf[s->cmdlen], len); + s->dma_memory_read(s->dma_opaque, buf, len); + fifo8_push_all(&s->cmdfifo, buf, len); } else { s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); return; } - trace_esp_handle_ti_cmd(s->cmdlen); + trace_esp_handle_ti_cmd(cmdlen); s->ti_size =3D 0; if ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_CD) { /* No command received */ - if (s->cmdbuf_cdb_offset =3D=3D s->cmdlen) { + if (s->cmdfifo_cdb_offset =3D=3D fifo8_num_used(&s->cmdfifo)) { return; } =20 /* Command has been received */ - s->cmdlen =3D 0; s->do_cmd =3D 0; do_cmd(s); } else { /* - * Extra message out bytes received: update cmdbuf_cdb_offset + * Extra message out bytes received: update cmdfifo_cdb_offset * and then switch to commmand phase */ - s->cmdbuf_cdb_offset =3D s->cmdlen; + s->cmdfifo_cdb_offset =3D fifo8_num_used(&s->cmdfifo); s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; s->rregs[ESP_RSEQ] =3D SEQ_CD; s->rregs[ESP_RINTR] |=3D INTR_BS; @@ -682,7 +715,7 @@ void esp_transfer_data(SCSIRequest *req, uint32_t len) =20 static void handle_ti(ESPState *s) { - uint32_t dmalen; + uint32_t dmalen, cmdlen; =20 if (s->dma && !s->dma_enabled) { s->dma_cb =3D handle_ti; @@ -695,24 +728,24 @@ static void handle_ti(ESPState *s) s->rregs[ESP_RSTAT] &=3D ~STAT_TC; esp_do_dma(s); } else if (s->do_cmd) { - trace_esp_handle_ti_cmd(s->cmdlen); + cmdlen =3D fifo8_num_used(&s->cmdfifo); + trace_esp_handle_ti_cmd(cmdlen); s->ti_size =3D 0; if ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_CD) { /* No command received */ - if (s->cmdbuf_cdb_offset =3D=3D s->cmdlen) { + if (s->cmdfifo_cdb_offset =3D=3D fifo8_num_used(&s->cmdfifo)) { return; } =20 /* Command has been received */ - s->cmdlen =3D 0; s->do_cmd =3D 0; do_cmd(s); } else { /* - * Extra message out bytes received: update cmdbuf_cdb_offset + * Extra message out bytes received: update cmdfifo_cdb_offset * and then switch to commmand phase */ - s->cmdbuf_cdb_offset =3D s->cmdlen; + s->cmdfifo_cdb_offset =3D fifo8_num_used(&s->cmdfifo); s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; s->rregs[ESP_RSEQ] =3D SEQ_CD; s->rregs[ESP_RINTR] |=3D INTR_BS; @@ -728,6 +761,7 @@ void esp_hard_reset(ESPState *s) s->tchi_written =3D 0; s->ti_size =3D 0; fifo8_reset(&s->fifo); + fifo8_reset(&s->cmdfifo); s->dma =3D 0; s->do_cmd =3D 0; s->dma_cb =3D NULL; @@ -806,11 +840,7 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64= _t val) break; case ESP_FIFO: if (s->do_cmd) { - if (s->cmdlen < ESP_CMDBUF_SZ) { - s->cmdbuf[s->cmdlen++] =3D val & 0xff; - } else { - trace_esp_error_fifo_overrun(); - } + esp_cmdfifo_push(s, val); } else { s->ti_size++; esp_fifo_push(s, val); @@ -971,6 +1001,11 @@ static int esp_post_load(void *opaque, int version_id) for (i =3D 0; i < len; i++) { fifo8_push(&s->fifo, s->mig_ti_buf[i]); } + + /* Migrate cmdbuf to cmdfifo */ + for (i =3D 0; i < s->mig_cmdlen; i++) { + fifo8_push(&s->cmdfifo, s->mig_cmdbuf[i]); + } } =20 s->mig_version_id =3D vmstate_esp.version_id; @@ -996,14 +1031,18 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_BOOL_TEST(mig_deferred_complete, ESPState, esp_is_before_version_5), VMSTATE_UINT32(dma, ESPState), - VMSTATE_PARTIAL_BUFFER(cmdbuf, ESPState, 16), - VMSTATE_BUFFER_START_MIDDLE_V(cmdbuf, ESPState, 16, 4), - VMSTATE_UINT32(cmdlen, ESPState), + VMSTATE_STATIC_BUFFER(mig_cmdbuf, ESPState, 0, + esp_is_before_version_5, 0, 16), + VMSTATE_STATIC_BUFFER(mig_cmdbuf, ESPState, 4, + esp_is_before_version_5, 16, + sizeof(typeof_field(ESPState, mig_cmdbuf))), + VMSTATE_UINT32_TEST(mig_cmdlen, ESPState, esp_is_before_version_5), VMSTATE_UINT32(do_cmd, ESPState), VMSTATE_UINT32_TEST(mig_dma_left, ESPState, esp_is_before_version_= 5), VMSTATE_BOOL_TEST(data_in_ready, ESPState, esp_is_version_5), - VMSTATE_UINT8_TEST(cmdbuf_cdb_offset, ESPState, esp_is_version_5), + VMSTATE_UINT8_TEST(cmdfifo_cdb_offset, ESPState, esp_is_version_5), VMSTATE_FIFO8_TEST(fifo, ESPState, esp_is_version_5), + VMSTATE_FIFO8_TEST(cmdfifo, ESPState, esp_is_version_5), VMSTATE_END_OF_LIST() }, }; @@ -1196,6 +1235,7 @@ static void esp_finalize(Object *obj) ESPState *s =3D ESP(obj); =20 fifo8_destroy(&s->fifo); + fifo8_destroy(&s->cmdfifo); } =20 static void esp_init(Object *obj) @@ -1203,6 +1243,7 @@ static void esp_init(Object *obj) ESPState *s =3D ESP(obj); =20 fifo8_create(&s->fifo, ESP_FIFO_SZ); + fifo8_create(&s->cmdfifo, ESP_CMDFIFO_SZ); } =20 static void esp_class_init(ObjectClass *klass, void *data) diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index eb4e8ba171..2fe8d20ab5 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -12,7 +12,7 @@ typedef void (*ESPDMAMemoryReadWriteFunc)(void *opaque, u= int8_t *buf, int len); =20 #define ESP_REGS 16 #define ESP_FIFO_SZ 16 -#define ESP_CMDBUF_SZ 32 +#define ESP_CMDFIFO_SZ 32 =20 typedef struct ESPState ESPState; =20 @@ -35,9 +35,8 @@ struct ESPState { SCSIBus bus; SCSIDevice *current_dev; SCSIRequest *current_req; - uint8_t cmdbuf[ESP_CMDBUF_SZ]; - uint32_t cmdlen; - uint8_t cmdbuf_cdb_offset; + Fifo8 cmdfifo; + uint8_t cmdfifo_cdb_offset; uint32_t do_cmd; =20 bool data_in_ready; @@ -60,6 +59,8 @@ struct ESPState { bool mig_deferred_complete; uint32_t mig_ti_rptr, mig_ti_wptr; uint8_t mig_ti_buf[ESP_FIFO_SZ]; + uint8_t mig_cmdbuf[ESP_CMDFIFO_SZ]; + uint32_t mig_cmdlen; }; =20 #define TYPE_SYSBUS_ESP "sysbus-esp" --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897661; cv=none; d=zohomail.com; s=zohoarc; b=Wwv7Gtuy/+Eb1F0Uwj9lQcmvvzHxJR+LfBRk6iAPU0OmxFg+lhaD4dBV5WeRb5F+ohldUqcP0LtyuoZCrgvuOSTAuG9XRqkffxkmTw6W9zEK5ywgmJn1dRgbPy5GBFgaWlIHN7JwGdj8qg0lNb01kPoNLEJpJ4De3NWV65gSiV4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897661; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0nWzZsozgW/Bp2cDvWcHsN+dPN0PgQoTqfKBs9xswS4=; b=VaISX+t/u1e7rPk9M9Ad2Oap62CFcgKoKHhNpIhWrDLyjymuCeiakDpouuMVQcTJ2D5b9Hx15u0Rjc2wPscwsmHKfdn3DmaTc12GfVQiLg5MOl92yU8nJzzjr0osQgk4sIR2OD7cfOD1UU009ONyKaBxfDpcdlX8zK6Ifssb4hc= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897661981923.1626421315929; Thu, 4 Mar 2021 14:41:01 -0800 (PST) Received: from localhost ([::1]:38368 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHweR-0004N7-Oa for importer@patchew.org; Thu, 04 Mar 2021 17:41:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54136) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwFH-0002Kb-RL for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:59 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40302 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwFG-0006wW-5H for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:14:59 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwEz-0008MJ-Bv; Thu, 04 Mar 2021 22:14:46 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:11:01 +0000 Message-Id: <20210304221103.6369-41-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 40/42] esp: add trivial implementation of the ESP_RFLAGS register X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" The bottom 5 bits contain the number of bytes remaining in the FIFO which is trivial to implement with Fifo8 (the remaining bits are unimplemented and l= eft as 0 for now). Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 34dc58da58..8a9b1500de 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -818,6 +818,10 @@ uint64_t esp_reg_read(ESPState *s, uint32_t saddr) val =3D s->rregs[saddr]; } break; + case ESP_RFLAGS: + /* Bottom 5 bits indicate number of bytes in FIFO */ + val =3D fifo8_num_used(&s->fifo); + break; default: val =3D s->rregs[saddr]; break; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614896940; cv=none; d=zohomail.com; s=zohoarc; b=OpvWaSr1veXxu1rQYaRegTvLDRoDrq2HHY8K04ryURIB0TxST/ncch78cOEENwTfK5Uy+/QFta8HYDMSyalYMwPkguYULUPb0jleeaZqkJc4qbZf90uBY8g77bNwDvu/wLS7NfuKEbESkOXy6/Q4kciY0yqzgcsAy5m8GJSaICU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614896940; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZzBPUa0+eSq1q8hcpO2PpYtQN152wss2JdLz1vbCwmM=; b=CPePeGL+WaY/KOerjDRK3m3NqECDreq6N7+SeeKIPgexQlJ7xcl6k9Uc1UjWRVDWq2HU7Qwy/+/jO5aburxsF3d7b5VYpM8BGPxjpiN5czgfWvxAbwBWoY+c1Cmi3AxkuzVboJ3LYK+h6Ffqq3oxYSdlcBp1w4u1C+cgk5t8HoE= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614896940076146.82865324302247; Thu, 4 Mar 2021 14:29:00 -0800 (PST) Received: from localhost ([::1]:55752 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwSp-0004uy-1f for importer@patchew.org; Thu, 04 Mar 2021 17:28:59 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54160) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwFN-0002Xy-7l for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:15:05 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40310 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwFL-0006yU-0W for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:15:04 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwF4-0008MJ-Qa; Thu, 04 Mar 2021 22:14:51 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:11:02 +0000 Message-Id: <20210304221103.6369-42-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 41/42] esp: implement non-DMA transfers in PDMA mode X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" The MacOS toolbox ROM uses non-DMA TI commands to handle the first/last byte of an unaligned 16-bit transfer to memory. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 133 ++++++++++++++++++++++++++++++------------ include/hw/scsi/esp.h | 1 + 2 files changed, 98 insertions(+), 36 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 8a9b1500de..f828e70865 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -296,6 +296,7 @@ static void do_busid_cmd(ESPState *s, uint8_t busid) if (datalen !=3D 0) { s->rregs[ESP_RSTAT] =3D STAT_TC; s->rregs[ESP_RSEQ] =3D SEQ_CD; + s->ti_cmd =3D 0; esp_set_tc(s, 0); if (datalen > 0) { /* @@ -645,6 +646,71 @@ static void esp_do_dma(ESPState *s) esp_lower_drq(s); } =20 +static void esp_do_nodma(ESPState *s) +{ + int to_device =3D ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_DO); + uint32_t cmdlen, n; + int len; + + if (s->do_cmd) { + cmdlen =3D fifo8_num_used(&s->cmdfifo); + trace_esp_handle_ti_cmd(cmdlen); + s->ti_size =3D 0; + if ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_CD) { + /* No command received */ + if (s->cmdfifo_cdb_offset =3D=3D fifo8_num_used(&s->cmdfifo)) { + return; + } + + /* Command has been received */ + s->do_cmd =3D 0; + do_cmd(s); + } else { + /* + * Extra message out bytes received: update cmdfifo_cdb_offset + * and then switch to commmand phase + */ + s->cmdfifo_cdb_offset =3D fifo8_num_used(&s->cmdfifo); + s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; + s->rregs[ESP_RSEQ] =3D SEQ_CD; + s->rregs[ESP_RINTR] |=3D INTR_BS; + esp_raise_irq(s); + } + return; + } + + if (s->async_len =3D=3D 0) { + /* Defer until data is available. */ + return; + } + + if (to_device) { + len =3D MIN(fifo8_num_used(&s->fifo), ESP_FIFO_SZ); + memcpy(s->async_buf, fifo8_pop_buf(&s->fifo, len, &n), len); + s->async_buf +=3D len; + s->async_len -=3D len; + s->ti_size +=3D len; + } else { + len =3D MIN(s->ti_size, s->async_len); + len =3D MIN(len, fifo8_num_free(&s->fifo)); + fifo8_push_all(&s->fifo, s->async_buf, len); + s->async_buf +=3D len; + s->async_len -=3D len; + s->ti_size -=3D len; + } + + if (s->async_len =3D=3D 0) { + scsi_req_continue(s->current_req); + + if (to_device || s->ti_size =3D=3D 0) { + return; + } + } + + s->rregs[ESP_RINTR] |=3D INTR_BS; + esp_raise_irq(s); +} + void esp_command_complete(SCSIRequest *req, size_t resid) { ESPState *s =3D req->hba_private; @@ -701,56 +767,51 @@ void esp_transfer_data(SCSIRequest *req, uint32_t len) return; } =20 - if (dmalen) { - esp_do_dma(s); - } else if (s->ti_size <=3D 0) { + if (s->ti_cmd =3D=3D 0) { /* - * If this was the last part of a DMA transfer then the - * completion interrupt is deferred to here. + * Always perform the initial transfer upon reception of the next = TI + * command to ensure the DMA/non-DMA status of the command is corr= ect. + * It is not possible to use s->dma directly in the section below = as + * some OSs send non-DMA NOP commands after a DMA transfer. Hence = if the + * async data transfer is delayed then s->dma is set incorrectly. */ - esp_dma_done(s); - esp_lower_drq(s); + return; + } + + if (s->ti_cmd & CMD_DMA) { + if (dmalen) { + esp_do_dma(s); + } else if (s->ti_size <=3D 0) { + /* + * If this was the last part of a DMA transfer then the + * completion interrupt is deferred to here. + */ + esp_dma_done(s); + esp_lower_drq(s); + } + } else { + esp_do_nodma(s); } } =20 static void handle_ti(ESPState *s) { - uint32_t dmalen, cmdlen; + uint32_t dmalen; =20 if (s->dma && !s->dma_enabled) { s->dma_cb =3D handle_ti; return; } =20 - dmalen =3D esp_get_tc(s); + s->ti_cmd =3D s->rregs[ESP_CMD]; if (s->dma) { + dmalen =3D esp_get_tc(s); trace_esp_handle_ti(dmalen); s->rregs[ESP_RSTAT] &=3D ~STAT_TC; esp_do_dma(s); - } else if (s->do_cmd) { - cmdlen =3D fifo8_num_used(&s->cmdfifo); - trace_esp_handle_ti_cmd(cmdlen); - s->ti_size =3D 0; - if ((s->rregs[ESP_RSTAT] & 7) =3D=3D STAT_CD) { - /* No command received */ - if (s->cmdfifo_cdb_offset =3D=3D fifo8_num_used(&s->cmdfifo)) { - return; - } - - /* Command has been received */ - s->do_cmd =3D 0; - do_cmd(s); - } else { - /* - * Extra message out bytes received: update cmdfifo_cdb_offset - * and then switch to commmand phase - */ - s->cmdfifo_cdb_offset =3D fifo8_num_used(&s->cmdfifo); - s->rregs[ESP_RSTAT] =3D STAT_TC | STAT_CD; - s->rregs[ESP_RSEQ] =3D SEQ_CD; - s->rregs[ESP_RINTR] |=3D INTR_BS; - esp_raise_irq(s); - } + } else { + trace_esp_handle_ti(s->ti_size); + esp_do_nodma(s); } } =20 @@ -789,12 +850,12 @@ uint64_t esp_reg_read(ESPState *s, uint32_t saddr) =20 switch (saddr) { case ESP_FIFO: - if ((s->rregs[ESP_RSTAT] & STAT_PIO_MASK) =3D=3D 0) { + if (s->dma_memory_read && s->dma_memory_write && + (s->rregs[ESP_RSTAT] & STAT_PIO_MASK) =3D=3D 0) { /* Data out. */ qemu_log_mask(LOG_UNIMP, "esp: PIO data read not implemented\n= "); s->rregs[ESP_FIFO] =3D 0; } else { - s->ti_size--; s->rregs[ESP_FIFO] =3D esp_fifo_pop(s); } val =3D s->rregs[ESP_FIFO]; @@ -846,7 +907,6 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_= t val) if (s->do_cmd) { esp_cmdfifo_push(s, val); } else { - s->ti_size++; esp_fifo_push(s, val); } =20 @@ -1047,6 +1107,7 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_UINT8_TEST(cmdfifo_cdb_offset, ESPState, esp_is_version_5), VMSTATE_FIFO8_TEST(fifo, ESPState, esp_is_version_5), VMSTATE_FIFO8_TEST(cmdfifo, ESPState, esp_is_version_5), + VMSTATE_UINT8_TEST(ti_cmd, ESPState, esp_is_version_5), VMSTATE_END_OF_LIST() }, }; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 2fe8d20ab5..95088490aa 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -40,6 +40,7 @@ struct ESPState { uint32_t do_cmd; =20 bool data_in_ready; + uint8_t ti_cmd; int dma_enabled; =20 uint32_t async_len; --=20 2.20.1 From nobody Fri May 17 08:24:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614897056; cv=none; d=zohomail.com; s=zohoarc; b=YBCV6ATPokv0qhapkTASz0Z311ejS6v4N0ZXHGL1Nwg+CV1szyoY+JAzYTMKOXAQBs5RvgtfiDcjMo5rqRBPMaEmN8ff++LKilHDAZiqWjE22IbTdt2/c28JS/emhexM45zmtRlAr76RKckVop0EguG90NIp//VRSGDDndvDHfs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614897056; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0xU9c33iBbAT2slaZyeLOFiCxn3jqj+iva1LIUOL7ss=; b=Zbci9F7qSKHWgJBqBuZeUDO16ndg+dyNao691lHCvydHu/3aec43iTFbJz4uCzMq4dR0MNgNv7ZiqNrT+YT75274bexx48bC4iM7Z7/otQfjfORGWnopL/4BH7E6NOGqzKHpWTYO/Xq3Br/scs5taO5OPHtM9ByPEpxOX7Zk6fA= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614897056306789.995887816841; Thu, 4 Mar 2021 14:30:56 -0800 (PST) Received: from localhost ([::1]:35828 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHwUg-0008MR-99 for importer@patchew.org; Thu, 04 Mar 2021 17:30:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54196) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwFS-0002dO-BP for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:15:12 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:40324 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lHwFQ-00070O-24 for qemu-devel@nongnu.org; Thu, 04 Mar 2021 17:15:09 -0500 Received: from host86-148-34-47.range86-148.btcentralplus.com ([86.148.34.47] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lHwF9-0008MJ-O8; Thu, 04 Mar 2021 22:14:56 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, laurent@vivier.eu Date: Thu, 4 Mar 2021 22:11:03 +0000 Message-Id: <20210304221103.6369-43-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> References: <20210304221103.6369-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.34.47 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v3 42/42] esp: add support for unaligned accesses X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" When the MacOS toolbox ROM transfers data from a target device to an unalig= ned memory address, the first/last byte of a 16-bit transfer needs to be handled separately. This means that the first byte is preloaded into the FIFO before the transfer, or the last byte remains in the FIFO after the transfer. The result of this is that the PDMA routines must be updated so that the FI= FO is loaded/unloaded if the last 16-bit word is used (rather than the last by= te) and any remaining byte from a FIFO wraparound is handled correctly. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/scsi/esp.c | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index f828e70865..507ab363bc 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -498,11 +498,22 @@ static void do_dma_pdma_cb(ESPState *s) =20 if (to_device) { /* Copy FIFO data to device */ - len =3D MIN(fifo8_num_used(&s->fifo), ESP_FIFO_SZ); + len =3D MIN(s->async_len, ESP_FIFO_SZ); + len =3D MIN(len, fifo8_num_used(&s->fifo)); memcpy(s->async_buf, fifo8_pop_buf(&s->fifo, len, &n), len); - s->async_buf +=3D len; - s->async_len -=3D len; - s->ti_size +=3D len; + s->async_buf +=3D n; + s->async_len -=3D n; + s->ti_size +=3D n; + + if (n < len) { + /* Unaligned accesses can cause FIFO wraparound */ + len =3D len - n; + memcpy(s->async_buf, fifo8_pop_buf(&s->fifo, len, &n), len); + s->async_buf +=3D n; + s->async_len -=3D n; + s->ti_size +=3D n; + } + if (s->async_len =3D=3D 0) { scsi_req_continue(s->current_req); return; @@ -526,12 +537,18 @@ static void do_dma_pdma_cb(ESPState *s) =20 if (esp_get_tc(s) !=3D 0) { /* Copy device data to FIFO */ - len =3D MIN(s->async_len, fifo8_num_free(&s->fifo)); + len =3D MIN(s->async_len, esp_get_tc(s)); + len =3D MIN(len, fifo8_num_free(&s->fifo)); fifo8_push_all(&s->fifo, s->async_buf, len); s->async_buf +=3D len; s->async_len -=3D len; s->ti_size -=3D len; esp_set_tc(s, esp_get_tc(s) - len); + + if (esp_get_tc(s) =3D=3D 0) { + /* Indicate transfer to FIFO is complete */ + s->rregs[ESP_RSTAT] |=3D STAT_TC; + } return; } =20 @@ -606,12 +623,29 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_write) { s->dma_memory_write(s->dma_opaque, s->async_buf, len); } else { + /* Adjust TC for any leftover data in the FIFO */ + if (!fifo8_is_empty(&s->fifo)) { + esp_set_tc(s, esp_get_tc(s) - fifo8_num_used(&s->fifo)); + } + /* Copy device data to FIFO */ len =3D MIN(len, fifo8_num_free(&s->fifo)); fifo8_push_all(&s->fifo, s->async_buf, len); s->async_buf +=3D len; s->async_len -=3D len; s->ti_size -=3D len; + + /* + * MacOS toolbox uses a TI length of 16 bytes for all commands= , so + * commands shorter than this must be padded accordingly + */ + if (len < esp_get_tc(s) && esp_get_tc(s) <=3D ESP_FIFO_SZ) { + while (fifo8_num_used(&s->fifo) < ESP_FIFO_SZ) { + esp_fifo_push(s, 0); + len++; + } + } + esp_set_tc(s, esp_get_tc(s) - len); s->pdma_cb =3D do_dma_pdma_cb; esp_raise_drq(s); @@ -1160,7 +1194,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwadd= r addr, break; } dmalen =3D esp_get_tc(s); - if (dmalen =3D=3D 0 || fifo8_is_full(&s->fifo)) { + if (dmalen =3D=3D 0 || fifo8_num_free(&s->fifo) < 2) { s->pdma_cb(s); } } @@ -1183,7 +1217,7 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hw= addr addr, val =3D (val << 8) | esp_pdma_read(s); break; } - if (fifo8_is_empty(&s->fifo)) { + if (fifo8_num_used(&s->fifo) < 2) { s->pdma_cb(s); } return val; --=20 2.20.1