From nobody Sun Nov 9 23:03:42 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552118239761810.4153089375924; Fri, 8 Mar 2019 23:57:19 -0800 (PST) Received: from localhost ([127.0.0.1]:55373 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h2Wr0-00027L-GX for importer@patchew.org; Sat, 09 Mar 2019 02:57:10 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h2Wih-0003t8-1f for qemu-devel@nongnu.org; Sat, 09 Mar 2019 02:48:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h2Wig-0000W8-22 for qemu-devel@nongnu.org; Sat, 09 Mar 2019 02:48:35 -0500 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:54746) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h2Wie-0000Rv-2X for qemu-devel@nongnu.org; Sat, 09 Mar 2019 02:48:33 -0500 Received: by mail-wm1-x342.google.com with SMTP id f3so14573470wmj.4 for ; Fri, 08 Mar 2019 23:48:30 -0800 (PST) Received: from 640k.lan ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id 11sm5252294wmg.27.2019.03.08.23.48.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Mar 2019 23:48:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=g9D+NaM9cjVGJCOh2bax1tlthJuA5sOo9R0akmBER38=; b=dcsLtDOpxtSqHUcF8l7GYxdjk7XoMyV1Ihb3QPkmnbVXQ47toNGb+Ge/NzmzHx4LQN lr/n/r995k5Bat+XYeNbbmnbxBhB8dR+udugGjsyX+9wko8Zd4zkn17NhrHUg10N95Mj ZPBRigubhLiNHkp1Ug6lHIkeN3Q4903A7TjjmP1csK2Bj31M96X0/shIHWb5NJv49XBv vjm8xraXrhGSQyVtu+YNMEptOwIp2gdhheuS0a2QLWAB4owgotrIZjxGPoyDNJNcOZTp e4Ps2dGR67fNDnGVAsWsSd5hJgjMSD9OmlkNPgnIJXHLphBkJpIwGJ6W9VObeNrQ0w2A uTNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=g9D+NaM9cjVGJCOh2bax1tlthJuA5sOo9R0akmBER38=; b=jTYTPIkkD2ekVIGk5ctGl4sAoIEV87Xhe6k/VbAZxEE+3HNdVPCHqkG+CcF/BpA/5t eIAGCLc6RnHhwlEfJNLVdS1gQ1407wCc7CfowAeZEXs45U5WzdPaPHc+tPhf3WwwRZly QPlMy5tf/8TwiZ9Tu1iEny2BaVH1x3SJ3QFetx18zLbOuNosYOz/mAfXiltWuicGCEZm Rlei3cjVraqEjk3VMPL39+zK/8qi+g7tTwv6HA7gtXttB05mWTj5IBptyrvWBo1PNW90 GxV/D/VOsqBDCQaJW2AeqovA8EilmN6arq9Db0pqK164bl0rCYi8c//vTFWH5NT/lZW4 3/Ng== X-Gm-Message-State: APjAAAV5vw8douTIdaIvWzTHhUtDNa3odoej/WRRETP9eyAlVRNaUEZ7 hjalixIhC9BVTIpamrHDuaup8DTT X-Google-Smtp-Source: APXvYqyucHppBPKDAImghaGxI3FuDbeOIowEwXy/Xo5H8qACSeTEX4gDulykLPYNBcGuyZXJLIO1ng== X-Received: by 2002:a1c:7d8c:: with SMTP id y134mr11985840wmc.102.1552117708798; Fri, 08 Mar 2019 23:48:28 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Sat, 9 Mar 2019 08:48:03 +0100 Message-Id: <1552117698-12355-11-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1552117698-12355-1-git-send-email-pbonzini@redhat.com> References: <1552117698-12355-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::342 Subject: [Qemu-devel] [PULL 10/25] lsi: implement basic SBCL functionality X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sven Schnelle Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Sven Schnelle HP-UX checks this register after sending data to the target. If there's no = valid information present, it assumes the client disconnected because the kernel = sent to much data. Implement at least some of the SBCL functionality that is pos= sible without having a real SCSI bus. Signed-off-by: Sven Schnelle Message-Id: <20190215194021.20543-1-svens@stackframe.org> Signed-off-by: Paolo Bonzini --- hw/scsi/lsi53c895a.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c index 89def14..8ba07f8 100644 --- a/hw/scsi/lsi53c895a.c +++ b/hw/scsi/lsi53c895a.c @@ -160,6 +160,11 @@ static const char *names[] =3D { #define LSI_CCNTL1_DDAC 0x08 #define LSI_CCNTL1_ZMOD 0x80 =20 +#define LSI_SBCL_ATN 0x08 +#define LSI_SBCL_BSY 0x20 +#define LSI_SBCL_ACK 0x40 +#define LSI_SBCL_REQ 0x80 + /* Enable Response to Reselection */ #define LSI_SCID_RRE 0x60 =20 @@ -258,6 +263,7 @@ typedef struct { uint8_t sdid; uint8_t ssid; uint8_t sfbr; + uint8_t sbcl; uint8_t stest1; uint8_t stest2; uint8_t stest3; @@ -356,6 +362,7 @@ static void lsi_soft_reset(LSIState *s) s->socl =3D 0; s->sdid =3D 0; s->ssid =3D 0; + s->sbcl =3D 0; s->stest1 =3D 0; s->stest2 =3D 0; s->stest3 =3D 0; @@ -530,6 +537,8 @@ static void lsi_script_dma_interrupt(LSIState *s, int s= tat) =20 static inline void lsi_set_phase(LSIState *s, int phase) { + s->sbcl &=3D ~PHASE_MASK; + s->sbcl |=3D phase | LSI_SBCL_REQ; s->sstat1 =3D (s->sstat1 & ~PHASE_MASK) | phase; } =20 @@ -567,6 +576,7 @@ static void lsi_disconnect(LSIState *s) { s->scntl1 &=3D ~LSI_SCNTL1_CON; s->sstat1 &=3D ~PHASE_MASK; + s->sbcl =3D 0; } =20 static void lsi_bad_selection(LSIState *s, uint32_t id) @@ -1265,7 +1275,9 @@ again: s->scntl1 |=3D LSI_SCNTL1_CON; if (insn & (1 << 3)) { s->socl |=3D LSI_SOCL_ATN; + s->sbcl |=3D LSI_SBCL_ATN; } + s->sbcl |=3D LSI_SBCL_BSY; lsi_set_phase(s, PHASE_MO); break; case 1: /* Disconnect */ @@ -1297,8 +1309,14 @@ again: insn & (1 << 10) ? " CC" : ""); if (insn & (1 << 3)) { s->socl |=3D LSI_SOCL_ATN; + s->sbcl |=3D LSI_SBCL_ATN; lsi_set_phase(s, PHASE_MO); } + + if (insn & (1 << 6)) { + s->sbcl |=3D LSI_SBCL_ACK; + } + if (insn & (1 << 9)) { qemu_log_mask(LOG_UNIMP, "lsi_scsi: Target mode not implemented\n"); @@ -1314,7 +1332,13 @@ again: insn & (1 << 10) ? " CC" : ""); if (insn & (1 << 3)) { s->socl &=3D ~LSI_SOCL_ATN; + s->sbcl &=3D ~LSI_SBCL_ATN; } + + if (insn & (1 << 6)) { + s->sbcl &=3D ~LSI_SBCL_ACK; + } + if (insn & (1 << 10)) s->carry =3D 0; break; @@ -1591,9 +1615,7 @@ static uint8_t lsi_reg_readb(LSIState *s, int offset) ret =3D s->ssid; break; case 0xb: /* SBCL */ - /* ??? This is not correct. However it's (hopefully) only - used for diagnostics, so should be ok. */ - ret =3D 0; + ret =3D s->sbcl; break; case 0xc: /* DSTAT */ ret =3D s->dstat | LSI_DSTAT_DFE; @@ -2143,7 +2165,7 @@ static int lsi_post_load(void *opaque, int version_id) =20 static const VMStateDescription vmstate_lsi_scsi =3D { .name =3D "lsiscsi", - .version_id =3D 0, + .version_id =3D 1, .minimum_version_id =3D 0, .pre_save =3D lsi_pre_save, .post_load =3D lsi_post_load, @@ -2202,6 +2224,7 @@ static const VMStateDescription vmstate_lsi_scsi =3D { VMSTATE_UINT8(stime0, LSIState), VMSTATE_UINT8(respid0, LSIState), VMSTATE_UINT8(respid1, LSIState), + VMSTATE_UINT8_V(sbcl, LSIState, 1), VMSTATE_UINT32(mmrs, LSIState), VMSTATE_UINT32(mmws, LSIState), VMSTATE_UINT32(sfs, LSIState), --=20 1.8.3.1