From nobody Thu Apr 25 13:12:22 2024 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; 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 ARC-Seal: i=1; a=rsa-sha256; t=1573245710; cv=none; d=zoho.com; s=zohoarc; b=AaEblbpHoNNFh3OvB6uYuTP1+IebdXGexYSDOG7dEn/YHG6d+3dinAo5Jw0HsGV6GE/qF3f/ik8hJWHZpRj9duNOLnrshvWuTHY5o3sjLhIkivZYsC84cTwiGkYKyoqzFwwqXPJWfgPf4x0WQVlSiCov6je1rpX8/7cGPqhLdcA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1573245710; h=Content-Type:Content-Transfer-Encoding:Cc: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=P9Qslw+T1Ukvr2Hfh2+yabR7VVPiFivRTZPrqkSXknI=; b=OO1ChqF0oaXy/HwFJilVTpnIs/fcyoWZ85oPDk84qTjK41+GZzLug2EjBdDvigNzNL8LpRc/liorcwShgwgiW6dOQPm/n3UclOLW6snmqCoH23E5c0l+BPmaBicsyNP0tHUNVf3sLPbDm5ZOrB7nwoKIkqlJtgBX/yU4Tvpxv1E= ARC-Authentication-Results: i=1; mx.zoho.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1573245710843620.030607063726; Fri, 8 Nov 2019 12:41:50 -0800 (PST) Received: from localhost ([::1]:60166 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iTB4n-0007RZ-Jk for importer@patchew.org; Fri, 08 Nov 2019 15:41:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47454) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iTB24-0004aD-7n for qemu-devel@nongnu.org; Fri, 08 Nov 2019 15:39:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iTB22-000312-7m for qemu-devel@nongnu.org; Fri, 08 Nov 2019 15:39:00 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:56391) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iTB20-0002rY-Rl for qemu-devel@nongnu.org; Fri, 08 Nov 2019 15:38:58 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MeTD8-1hskLl0Unk-00aR8h; Fri, 08 Nov 2019 21:38:49 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 1/2] dp8393x: put the DMA buffer in the state structure Date: Fri, 8 Nov 2019 21:38:45 +0100 Message-Id: <20191108203846.8837-2-laurent@vivier.eu> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191108203846.8837-1-laurent@vivier.eu> References: <20191108203846.8837-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:za8Uv5f+w3gFqAgcyou0Po5Vo/QQaUesC3EKjj2zbbfjaaLAPWj DE9pb+INLF7Agc4LvHjKSHsV0fjhtTIfjDBT6muTXD9GO0rbslWZoKgIOe9Qu55Oq++8jAv Ii5XFOYAUln/DsDwI+uqdjuiV0yV2cnkwEJQfBS3c5vTq5Lum6wYYiP8k0xyBXi8a19Xwxo MnQ2u2spxGHSjjxWpFnMw== X-UI-Out-Filterresults: notjunk:1;V03:K0:MOHdAfY275U=:AMtPHNdqRkr3cQtVsvubLu 0Vr6PJiqWEX6S353P0qADOBDNDcLNUrlCQFXp5diafRjQYHQflWjLuuaOn6/GECkfFlIhbzI+ Q2ih5JI4rJMWD0Gt4flevRprkmzELbDokBdngjvLSNFPKJs0Ysj1U+3/SnDVbcIP6CCSHqlpZ CKe/Vhn3KNM2V4iPbfSyCaQfALytrGp9/GFD4iHzbTKk0UfvzQq9fsimSom7a+gHFdcyE+/3C pJkj5E+F5gB7sgi7DAs6D8wZIpLgkyklTFplmAo6VfK5IxWUkTKvz63dnM4mQV7+Ewmwj7YpI oVAYgSQb6MwsBE1W16twK6wzVDx89802AkgsQyicn92jvmDz1dEiYqghWd1Nw087A4FX9DMms GE7RDMyfDMmUp5gDbHy5RA9GRxLV42lZB/ar/+e4R8Sv5XRPIQhBsH4PF4tglROYdTwf0gkLJ t1FD0NqmsohjjTrl4qWQCEuk0ruLZ+sKCXOZE4DnXLeDRoKlQjjUE7hvwx2Lk9aSQKA5256kK yixUgfov6oIG1YxaarBm1fLsY9V1s+uPAcBurDH+D87q+WEb6u++CyWcgYJVwMmAfSgqRL41T 9eL6MmhFddbk0CqNHIgYbKK5ci9oDfdfufPRjcYYWRg44xINHbf3ZsHiJA1M5Ey0vzJi/IdhV 8Erb+Ljo4Ej76FCDfmwhD+VwhnSMkvWxsD9YRMcGpfkPW8aMuNy7nR52ycFX1QpVglY83xfan gVIExYCDOVpvKzYvM6gvBToIFwalBrKtk0fDXuUGfi08D0cPQiYIZc+hRQq0uhNUCCp3oEFsI XJIu2ZA4VapCtsfTj9W59FV/QAF6Hy/hKvruXnEq2jKf0Hpm40EIk2B3omt/oYHcipV1Aiprl /huNXVZzPfa0007G8OSNMO3snDhLVRm9iyS5v5IcM= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 217.72.192.73 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: , Cc: Jason Wang , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Move it from the stack. It's only 24 bytes, and this simplifies the dp8393x_get()/ dp8393x_put() interface. Signed-off-by: Laurent Vivier Reviewed-by: Herv=C3=A9 Poussineau Message-Id: <20191106112341.23735-2-laurent@vivier.eu> --- hw/net/dp8393x.c | 105 ++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 55 deletions(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 693e244ce6..85d3f3788e 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -171,6 +171,7 @@ typedef struct dp8393xState { =20 /* Temporaries */ uint8_t tx_buffer[0x10000]; + uint16_t data[12]; int loopback_packet; =20 /* Memory access */ @@ -224,26 +225,25 @@ static uint32_t dp8393x_wt(dp8393xState *s) return s->regs[SONIC_WT1] << 16 | s->regs[SONIC_WT0]; } =20 -static uint16_t dp8393x_get(dp8393xState *s, int width, uint16_t *base, - int offset) +static uint16_t dp8393x_get(dp8393xState *s, int width, int offset) { uint16_t val; =20 if (s->big_endian) { - val =3D be16_to_cpu(base[offset * width + width - 1]); + val =3D be16_to_cpu(s->data[offset * width + width - 1]); } else { - val =3D le16_to_cpu(base[offset * width]); + val =3D le16_to_cpu(s->data[offset * width]); } return val; } =20 -static void dp8393x_put(dp8393xState *s, int width, uint16_t *base, int of= fset, +static void dp8393x_put(dp8393xState *s, int width, int offset, uint16_t val) { if (s->big_endian) { - base[offset * width + width - 1] =3D cpu_to_be16(val); + s->data[offset * width + width - 1] =3D cpu_to_be16(val); } else { - base[offset * width] =3D cpu_to_le16(val); + s->data[offset * width] =3D cpu_to_le16(val); } } =20 @@ -267,7 +267,6 @@ static void dp8393x_update_irq(dp8393xState *s) =20 static void dp8393x_do_load_cam(dp8393xState *s) { - uint16_t data[8]; int width, size; uint16_t index =3D 0; =20 @@ -277,13 +276,13 @@ static void dp8393x_do_load_cam(dp8393xState *s) while (s->regs[SONIC_CDC] & 0x1f) { /* Fill current entry */ address_space_rw(&s->as, dp8393x_cdp(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->cam[index][0] =3D dp8393x_get(s, width, data, 1) & 0xff; - s->cam[index][1] =3D dp8393x_get(s, width, data, 1) >> 8; - s->cam[index][2] =3D dp8393x_get(s, width, data, 2) & 0xff; - s->cam[index][3] =3D dp8393x_get(s, width, data, 2) >> 8; - s->cam[index][4] =3D dp8393x_get(s, width, data, 3) & 0xff; - s->cam[index][5] =3D dp8393x_get(s, width, data, 3) >> 8; + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->cam[index][0] =3D dp8393x_get(s, width, 1) & 0xff; + s->cam[index][1] =3D dp8393x_get(s, width, 1) >> 8; + s->cam[index][2] =3D dp8393x_get(s, width, 2) & 0xff; + s->cam[index][3] =3D dp8393x_get(s, width, 2) >> 8; + s->cam[index][4] =3D dp8393x_get(s, width, 3) & 0xff; + s->cam[index][5] =3D dp8393x_get(s, width, 3) >> 8; DPRINTF("load cam[%d] with %02x%02x%02x%02x%02x%02x\n", index, s->cam[index][0], s->cam[index][1], s->cam[index][2], s->cam[index][3], s->cam[index][4], s->cam[index][5]); @@ -295,8 +294,8 @@ static void dp8393x_do_load_cam(dp8393xState *s) =20 /* Read CAM enable */ address_space_rw(&s->as, dp8393x_cdp(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->regs[SONIC_CE] =3D dp8393x_get(s, width, data, 0); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->regs[SONIC_CE] =3D dp8393x_get(s, width, 0); DPRINTF("load cam done. cam enable mask 0x%04x\n", s->regs[SONIC_CE]); =20 /* Done */ @@ -307,20 +306,19 @@ static void dp8393x_do_load_cam(dp8393xState *s) =20 static void dp8393x_do_read_rra(dp8393xState *s) { - uint16_t data[8]; int width, size; =20 /* Read memory */ width =3D (s->regs[SONIC_DCR] & SONIC_DCR_DW) ? 2 : 1; size =3D sizeof(uint16_t) * 4 * width; address_space_rw(&s->as, dp8393x_rrp(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); =20 /* Update SONIC registers */ - s->regs[SONIC_CRBA0] =3D dp8393x_get(s, width, data, 0); - s->regs[SONIC_CRBA1] =3D dp8393x_get(s, width, data, 1); - s->regs[SONIC_RBWC0] =3D dp8393x_get(s, width, data, 2); - s->regs[SONIC_RBWC1] =3D dp8393x_get(s, width, data, 3); + s->regs[SONIC_CRBA0] =3D dp8393x_get(s, width, 0); + s->regs[SONIC_CRBA1] =3D dp8393x_get(s, width, 1); + s->regs[SONIC_RBWC0] =3D dp8393x_get(s, width, 2); + s->regs[SONIC_RBWC1] =3D dp8393x_get(s, width, 3); DPRINTF("CRBA0/1: 0x%04x/0x%04x, RBWC0/1: 0x%04x/0x%04x\n", s->regs[SONIC_CRBA0], s->regs[SONIC_CRBA1], s->regs[SONIC_RBWC0], s->regs[SONIC_RBWC1]); @@ -417,7 +415,6 @@ static void dp8393x_do_receiver_disable(dp8393xState *s) static void dp8393x_do_transmit_packets(dp8393xState *s) { NetClientState *nc =3D qemu_get_queue(s->nic); - uint16_t data[12]; int width, size; int tx_len, len; uint16_t i; @@ -429,18 +426,17 @@ static void dp8393x_do_transmit_packets(dp8393xState = *s) size =3D sizeof(uint16_t) * 6 * width; s->regs[SONIC_TTDA] =3D s->regs[SONIC_CTDA]; DPRINTF("Transmit packet at %08x\n", dp8393x_ttda(s)); - address_space_rw(&s->as, - dp8393x_ttda(s) + sizeof(uint16_t) * width, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); + address_space_rw(&s->as, dp8393x_ttda(s) + sizeof(uint16_t) * widt= h, + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); tx_len =3D 0; =20 /* Update registers */ - s->regs[SONIC_TCR] =3D dp8393x_get(s, width, data, 0) & 0xf000; - s->regs[SONIC_TPS] =3D dp8393x_get(s, width, data, 1); - s->regs[SONIC_TFC] =3D dp8393x_get(s, width, data, 2); - s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, data, 3); - s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, data, 4); - s->regs[SONIC_TFS] =3D dp8393x_get(s, width, data, 5); + s->regs[SONIC_TCR] =3D dp8393x_get(s, width, 0) & 0xf000; + s->regs[SONIC_TPS] =3D dp8393x_get(s, width, 1); + s->regs[SONIC_TFC] =3D dp8393x_get(s, width, 2); + s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, 3); + s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, 4); + s->regs[SONIC_TFS] =3D dp8393x_get(s, width, 5); =20 /* Handle programmable interrupt */ if (s->regs[SONIC_TCR] & SONIC_TCR_PINT) { @@ -465,10 +461,10 @@ static void dp8393x_do_transmit_packets(dp8393xState = *s) size =3D sizeof(uint16_t) * 3 * width; address_space_rw(&s->as, dp8393x_ttda(s) + sizeof(uint16_t) * (4 + 3 * i) * wid= th, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, data, 0); - s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, data, 1); - s->regs[SONIC_TFS] =3D dp8393x_get(s, width, data, 2); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, 0); + s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, 1); + s->regs[SONIC_TFS] =3D dp8393x_get(s, width, 2); } } =20 @@ -495,12 +491,12 @@ static void dp8393x_do_transmit_packets(dp8393xState = *s) s->regs[SONIC_TCR] |=3D SONIC_TCR_PTX; =20 /* Write status */ - dp8393x_put(s, width, data, 0, + dp8393x_put(s, width, 0, s->regs[SONIC_TCR] & 0x0fff); /* status */ size =3D sizeof(uint16_t) * width; address_space_rw(&s->as, dp8393x_ttda(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 1); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 1); =20 if (!(s->regs[SONIC_CR] & SONIC_CR_HTX)) { /* Read footer of packet */ @@ -509,9 +505,9 @@ static void dp8393x_do_transmit_packets(dp8393xState *s) dp8393x_ttda(s) + sizeof(uint16_t) * (4 + 3 * s->regs[SONIC_TFC]) * width, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->regs[SONIC_CTDA] =3D dp8393x_get(s, width, data, 0) & ~0x1; - if (dp8393x_get(s, width, data, 0) & 0x1) { + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->regs[SONIC_CTDA] =3D dp8393x_get(s, width, 0) & ~0x1; + if (dp8393x_get(s, width, 0) & 0x1) { /* EOL detected */ break; } @@ -748,7 +744,6 @@ static ssize_t dp8393x_receive(NetClientState *nc, cons= t uint8_t * buf, size_t size) { dp8393xState *s =3D qemu_get_nic_opaque(nc); - uint16_t data[10]; int packet_type; uint32_t available, address; int width, rx_len =3D size; @@ -773,8 +768,8 @@ static ssize_t dp8393x_receive(NetClientState *nc, cons= t uint8_t * buf, size =3D sizeof(uint16_t) * 1 * width; address =3D dp8393x_crda(s) + sizeof(uint16_t) * 5 * width; address_space_rw(&s->as, address, MEMTXATTRS_UNSPECIFIED, - (uint8_t *)data, size, 0); - if (dp8393x_get(s, width, data, 0) & 0x1) { + (uint8_t *)s->data, size, 0); + if (dp8393x_get(s, width, 0) & 0x1) { /* Still EOL ; stop reception */ return -1; } else { @@ -818,27 +813,27 @@ static ssize_t dp8393x_receive(NetClientState *nc, co= nst uint8_t * buf, =20 /* Write status to memory */ DPRINTF("Write status at %08x\n", dp8393x_crda(s)); - dp8393x_put(s, width, data, 0, s->regs[SONIC_RCR]); /* status */ - dp8393x_put(s, width, data, 1, rx_len); /* byte count */ - dp8393x_put(s, width, data, 2, s->regs[SONIC_TRBA0]); /* pkt_ptr0 */ - dp8393x_put(s, width, data, 3, s->regs[SONIC_TRBA1]); /* pkt_ptr1 */ - dp8393x_put(s, width, data, 4, s->regs[SONIC_RSC]); /* seq_no */ + dp8393x_put(s, width, 0, s->regs[SONIC_RCR]); /* status */ + dp8393x_put(s, width, 1, rx_len); /* byte count */ + dp8393x_put(s, width, 2, s->regs[SONIC_TRBA0]); /* pkt_ptr0 */ + dp8393x_put(s, width, 3, s->regs[SONIC_TRBA1]); /* pkt_ptr1 */ + dp8393x_put(s, width, 4, s->regs[SONIC_RSC]); /* seq_no */ size =3D sizeof(uint16_t) * 5 * width; address_space_rw(&s->as, dp8393x_crda(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 1); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 1); =20 /* Move to next descriptor */ size =3D sizeof(uint16_t) * width; address_space_rw(&s->as, dp8393x_crda(s) + sizeof(uint16_t) * 5 * widt= h, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->regs[SONIC_LLFA] =3D dp8393x_get(s, width, data, 0); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->regs[SONIC_LLFA] =3D dp8393x_get(s, width, 0); if (s->regs[SONIC_LLFA] & 0x1) { /* EOL detected */ s->regs[SONIC_ISR] |=3D SONIC_ISR_RDE; } else { - dp8393x_put(s, width, data, 0, 0); /* in_use */ + dp8393x_put(s, width, 0, 0); /* in_use */ address_space_rw(&s->as, dp8393x_crda(s) + sizeof(uint16_t) * 6 * = width, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, sizeof(uint16_t), 1); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, sizeof(uint16_t), = 1); s->regs[SONIC_CRDA] =3D s->regs[SONIC_LLFA]; s->regs[SONIC_ISR] |=3D SONIC_ISR_PKTRX; s->regs[SONIC_RSC] =3D (s->regs[SONIC_RSC] & 0xff00) | (((s->regs[= SONIC_RSC] & 0x00ff) + 1) & 0x00ff); --=20 2.21.0 From nobody Thu Apr 25 13:12:22 2024 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; 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 ARC-Seal: i=1; a=rsa-sha256; t=1573245623; cv=none; d=zoho.com; s=zohoarc; b=DHCQsqSp+y2G/MwmznrESj6adnXH+t44Dm4tdRs9JunBgO5hY6T01u218quCSoh8pCBmIhQqM5qooN3UHfzrLnMk4j0BhNEg8RtNOdUSZT9d1hfUFB34EpcgTUqE7+YHG+6Bqr7KmmktSIfL/7Mh7PuDLHDYwZyCcm0DvNdQqRY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1573245623; h=Content-Type:Content-Transfer-Encoding:Cc: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=ubY0zypNa3G8KuhFrU5YPjR/86/1QmBoL4j+ah/Jhao=; b=hyVuO/awPcyXa6nom7eJcFWoyvmiPU8KTX97XcdcUD+hvANDFw3DMc6YDDMhTTQAmNNmOEAP1yCRfYs7u7/IhdkJODaP//61xhLB/hVYPIgDJ2cWt4yOs9d++LjqoEDT050FkkdnFyBitOFkzhHBLBkFpAraHWO1TEM6/Qcn+Ow= ARC-Authentication-Results: i=1; mx.zoho.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1573245623112715.0506975798974; Fri, 8 Nov 2019 12:40:23 -0800 (PST) Received: from localhost ([::1]:60154 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iTB3K-0005aW-IS for importer@patchew.org; Fri, 08 Nov 2019 15:40:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47460) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iTB25-0004ae-1v for qemu-devel@nongnu.org; Fri, 08 Nov 2019 15:39:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iTB22-00030u-73 for qemu-devel@nongnu.org; Fri, 08 Nov 2019 15:39:00 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:55867) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iTB20-0002qz-6m for qemu-devel@nongnu.org; Fri, 08 Nov 2019 15:38:57 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MWjQU-1iQvxZ2zdY-00X8Id; Fri, 08 Nov 2019 21:38:49 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 2/2] dp8393x: fix dp8393x_receive() Date: Fri, 8 Nov 2019 21:38:46 +0100 Message-Id: <20191108203846.8837-3-laurent@vivier.eu> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191108203846.8837-1-laurent@vivier.eu> References: <20191108203846.8837-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:DepvcJcesC1ySjR1qILdISoUcOoALj8D8qzYfTGOJYYZnMcmZaK w+Ku1vhvAtVlK1X21Gr7Bnpis4BUDlNzKRDc8WrzNepMgawS02G8kPjn+4mUDBGZ7zMLX2R Q8vgZq6zUrtDLOc64Kt62+JcCFBbBmzSk4cETfHucgJ28QLdFUOyoJm33vlAVVuPoLrVHY6 N/cF78HgwJk7KjVscCoqA== X-UI-Out-Filterresults: notjunk:1;V03:K0:WeWGax1OJQk=:WG7Y+oYnZHrODKT+xHWz6w CMzKvKwUiv0YNbA90WeapgWEB+fbaluHX9zbN685cP0MBTk8Bd3l/36l9DbCbmfjcTlpUfA2U 82qN/aw4bXBcaTD3RytJR7jfXAw3DdOrtA3TW2uI5hYody4rI0k3feXn8aTRAYufnOEYOVFlm z8zbEkIggC0KufpjngC+J8fGkxmSSj1+ntdXbqcVbGrPxYMQHJpKB9M6uxZ75G9gxjT109Vj7 UuxYJSjsxDs/BCtdZPhSPmz1vC2pO7rnilxtNRkn5tijZAj+ausjaMR8cZ10CuNCGpBGC4lVw TK7ZX2wEz7YzrwWBlJQx6Z9Zt72kC4CXVd+eceA/+8/4JLkFw8SQgFXhbBOTt2WHtE9BYw0ny 6Eakrl3lAF3AByOqeDGT+29uCQncc/ev+cF4YhVevjJpZsTgyFcnifq3CroE2rQDdlaEcwzQF hbSQQ1P/YrmjH/hPiuYzaVrTvcqBVMg69YlECID514Z8P4ale9t0xLyGiEtEcHKb/viGM9YtQ OLUBhRvvu1LkT7uWkSZvaG2ghvKsepeXcmzYQ1D7UIweZ3kS/C9Nv+XyHqkVewoagUYX4gakg 1WHUtng5PEp9PvrUG062WRFZmHwFgOwELSzUwPH2O9TbYJTF/kIyzrvQil53L6mGDB9AGDv2u yM8+1sTVtOXJ+bwaxkmzVeJQMOlRnw289nj4b8F5HGhFNosO7vVHazJMYKQlRaSVIEUxNOBTo xrQPZlnMfzar8kiEIqK8us4ZpFbsminJov4Zzd2tRvIUjcos7dE7San7pTSnJO8KS3dD2fg8A aa+WOXYdlzuGRJTZrIfI07hMRKZ4Mo07aiR1QWIkgNOaR1qEyFUwdgtih2Gpku2q2+UqHuZvL Iisyf6jHpbKN8WOXnjZcsHV8BlUn6nQO9ZaFf9z9w= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 217.72.192.73 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: , Cc: Jason Wang , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" RXpkt.in_use is always 16 bit wide, but when the bus access mode is 32bit and the endianness is big, we must access the second word and not the first. This patch adjusts the offset according to the size and endianness. This fixes DHCP for Q800 guest. Fixes: be9208419865 ("dp8393x: manage big endian bus") Signed-off-by: Laurent Vivier Tested-by: Herv=C3=A9 Poussineau Message-Id: <20191106112341.23735-3-laurent@vivier.eu> --- hw/net/dp8393x.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 85d3f3788e..3d991af163 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -831,9 +831,15 @@ static ssize_t dp8393x_receive(NetClientState *nc, con= st uint8_t * buf, /* EOL detected */ s->regs[SONIC_ISR] |=3D SONIC_ISR_RDE; } else { - dp8393x_put(s, width, 0, 0); /* in_use */ - address_space_rw(&s->as, dp8393x_crda(s) + sizeof(uint16_t) * 6 * = width, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, sizeof(uint16_t), = 1); + /* Clear in_use, but it is always 16bit wide */ + int offset =3D dp8393x_crda(s) + sizeof(uint16_t) * 6 * width; + if (s->big_endian && width =3D=3D 2) { + /* we need to adjust the offset of the 16bit field */ + offset +=3D sizeof(uint16_t); + } + s->data[0] =3D 0; + address_space_rw(&s->as, offset, MEMTXATTRS_UNSPECIFIED, + (uint8_t *)s->data, sizeof(uint16_t), 1); s->regs[SONIC_CRDA] =3D s->regs[SONIC_LLFA]; s->regs[SONIC_ISR] |=3D SONIC_ISR_PKTRX; s->regs[SONIC_RSC] =3D (s->regs[SONIC_RSC] & 0xff00) | (((s->regs[= SONIC_RSC] & 0x00ff) + 1) & 0x00ff); --=20 2.21.0