From patchwork Mon Jan 28 17:54:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 156853 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp3739966jaa; Mon, 28 Jan 2019 10:24:59 -0800 (PST) X-Google-Smtp-Source: ALg8bN44i5Dkii2lctqM+OxAWfBRH10WFjy8EC/2eXr/7ex2+zp108spcjhZ+wEf/upLtaCut3o4 X-Received: by 2002:adf:a357:: with SMTP id d23mr23927928wrb.195.1548699899098; Mon, 28 Jan 2019 10:24:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548699899; cv=none; d=google.com; s=arc-20160816; b=AkxHW97hp9/2ywmZRMYm1pdQSCGxe3O80ksvotrqxZHbC0fECBnKSO9Jd60EMP500M JsQyqDItDi/LaYVY7OqcdgQPXYavoXBTqNQVBXwk5apLRabLwBIRui/G8suIKxEmlt/M 9HYNg4XxMBcuFblkGhSDqix/YxuUyqy6EQTO70FjkdB2DklzZypE3U3AIrDaLacNOCwL +UjRMnNn6YbHhIzt4TUuMQwAaNGt4XYJw6F8iXhd3ZwLLcfZcQ6GPFQDDc/QkEEVKwBd qbkaJX2UAte7KZiY1tFn2abnxtoty4bRL9+WZ1NKuIBMR5O6YsrAPp8mrQEZgY7OVSJT 50PQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=dMr8GG5RUPuVrWmsKwUgwYyd+2AfoQjp+Mu6L4T+oXc=; b=LIG6rk8NGTHLoFAiJHhXJvXLX8SRxQ7MFEL2ZSgSGIoSeqEu2d5hXlP1f1MGEJWxfv 1QzxuiDz22L+3yHW4XQBdc8YFR/yXXjeYARQ17F3ULYOMhIo7J7v5rfdZEPBu0lfJdMh OB1S984fwbEW00Jx1FlgQSqEkafbQec05qgN6jK5QW/2T6OK0zWyioefVvjXjXrLbznu vVa7QZfOC7eJhBnSs7u0w/LzDv6PpvjeFAi9NUOz/WKk2upZci/fOs3Fqqqzh/GOxJag bol5SRxGfI42P5ES4WZmG6ZFuU1+MKedxvFItLceP3HqE2qtMkaWnLALb3D9GgGbEpxQ JgOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=knzS5y5T; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id v27si87815434wra.457.2019.01.28.10.24.58 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 28 Jan 2019 10:24:59 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=knzS5y5T; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([127.0.0.1]:36534 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1goBab-0004Nd-Up for patch@linaro.org; Mon, 28 Jan 2019 13:24:57 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37380) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1goBEI-0003dP-OW for qemu-devel@nongnu.org; Mon, 28 Jan 2019 13:01:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1goB7r-0005W6-Fk for qemu-devel@nongnu.org; Mon, 28 Jan 2019 12:55:30 -0500 Received: from mail-it1-x142.google.com ([2607:f8b0:4864:20::142]:55047) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1goB7r-0005Uw-9H for qemu-devel@nongnu.org; Mon, 28 Jan 2019 12:55:15 -0500 Received: by mail-it1-x142.google.com with SMTP id i145so21907045ita.4 for ; Mon, 28 Jan 2019 09:55:14 -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=dMr8GG5RUPuVrWmsKwUgwYyd+2AfoQjp+Mu6L4T+oXc=; b=knzS5y5TY9qvA9tl2n/edK9TKVw7yxQl23WsheGuitS/rKW/gEdD5GvDkpqPy2ZO2e d30ib1yYFBN9NE20BGYb2ShULm6hYR5UGUj7/TywHtxbvPwDrXI8ya9fOZKsU95eW+fi AnnBCcpglcVvHc6lxi8s9NLTYh4UxiPpZrq7+jmYjl8bOnWCPaFSH8EJp7wgYrPEtWCN dsKJCPmtC8U+Shuls2okf+RmS9ZYT/aeVyu5zJuzpNfkGPYBo3oxrgMjXb10lNtnqwhf dc21JXCForip2YcbO98j76u39kdGCRKY696YmHT0K3+OijVQJpkScyPw6EHK+9/An6KV fzgg== 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=dMr8GG5RUPuVrWmsKwUgwYyd+2AfoQjp+Mu6L4T+oXc=; b=M2hwFmb3paP9ttkrLGJ6Z2svgwQbZvx2lD9ghsitnMp7xutKPtHKPnSFJmWyAXbVTP kfZ4mDLVUr5pLAS8pEXYgur/wQJRvqPND09VjZnPhVnPx12RyeSk6R8/WfBbgYt2WaS1 pWoMDDgmXTI7LqsTMMDHcBuhQoqmnh/L4hQeNwBW6uu34pY4EgH3pdE695cwiIgcy8J3 QvjInZWETdNzYuF4ul1Ub3Kx+Be5P0EV/HYZkOxSOXBJCdj2jtw7KDv9HIuF0j+kjY1N P5Dlg3p1Sjm0lysXxFS/atVgZ3/icLyuyQijX09wzIw/nAU9GkzHU8jJussduRhTXlPP zdrQ== X-Gm-Message-State: AJcUukdQbbom8SmALbQs15emmUTBzmnhz7yJJQYeDoq9KPmdZ4LS/vt2 ZbafzSxyYW0UGiXqW8VsOw== X-Received: by 2002:a24:1495:: with SMTP id 143mr10135276itg.13.1548698113647; Mon, 28 Jan 2019 09:55:13 -0800 (PST) Received: from serve.minyard.net ([47.184.128.64]) by smtp.gmail.com with ESMTPSA id n26sm13703512iob.30.2019.01.28.09.55.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Jan 2019 09:55:12 -0800 (PST) Received: from t430.minyard.net (t430m.minyard.net [192.168.27.3]) by serve.minyard.net (Postfix) with ESMTPA id BE6173A3; Mon, 28 Jan 2019 11:55:10 -0600 (CST) Received: by t430.minyard.net (Postfix, from userid 1000) id 1B461301154; Mon, 28 Jan 2019 11:55:07 -0600 (CST) From: minyard@acm.org To: qemu-devel@nongnu.org, "Dr . David Alan Gilbert" Date: Mon, 28 Jan 2019 11:54:46 -0600 Message-Id: <20190128175458.27255-8-minyard@acm.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190128175458.27255-1-minyard@acm.org> References: <20190128175458.27255-1-minyard@acm.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::142 Subject: [Qemu-devel] [PATCH v4 07/19] i2c:smbus: Simplify read handling 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: Peter Maydell , Paolo Bonzini , Corey Minyard , Corey Minyard , "Michael S . Tsirkin" Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard There were two different read functions, and with the removal of the command passed in there is no functional difference. So remove one of them. With that you don't need one of the states, so that can be removed, too. Signed-off-by: Corey Minyard --- hw/i2c/smbus_eeprom.c | 8 -------- hw/i2c/smbus_slave.c | 21 +++------------------ include/hw/i2c/smbus_slave.h | 17 ++++++++++------- 3 files changed, 13 insertions(+), 33 deletions(-) -- 2.17.1 diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c index 3f9ed266f8..c2b9e3383e 100644 --- a/hw/i2c/smbus_eeprom.c +++ b/hw/i2c/smbus_eeprom.c @@ -77,13 +77,6 @@ static int eeprom_write_data(SMBusDevice *dev, uint8_t *buf, uint8_t len) return 0; } -static uint8_t eeprom_read_data(SMBusDevice *dev, int n) -{ - /* As with writes, we implement block reads without the - SMBus length byte. */ - return eeprom_receive_byte(dev); -} - static void smbus_eeprom_realize(DeviceState *dev, Error **errp) { SMBusEEPROMDevice *eeprom = (SMBusEEPROMDevice *)dev; @@ -105,7 +98,6 @@ static void smbus_eeprom_class_initfn(ObjectClass *klass, void *data) sc->quick_cmd = eeprom_quick_cmd; sc->receive_byte = eeprom_receive_byte; sc->write_data = eeprom_write_data; - sc->read_data = eeprom_read_data; dc->props = smbus_eeprom_properties; /* Reason: pointer property "data" */ dc->user_creatable = false; diff --git a/hw/i2c/smbus_slave.c b/hw/i2c/smbus_slave.c index 92c7a5086c..52a57423ee 100644 --- a/hw/i2c/smbus_slave.c +++ b/hw/i2c/smbus_slave.c @@ -34,7 +34,6 @@ do { fprintf(stderr, "smbus: error: " fmt , ## __VA_ARGS__);} while (0) enum { SMBUS_IDLE, SMBUS_WRITE_DATA, - SMBUS_RECV_BYTE, SMBUS_READ_DATA, SMBUS_DONE, SMBUS_CONFUSED = -1 @@ -82,7 +81,7 @@ static int smbus_i2c_event(I2CSlave *s, enum i2c_event event) switch (dev->mode) { case SMBUS_IDLE: DPRINTF("Read mode\n"); - dev->mode = SMBUS_RECV_BYTE; + dev->mode = SMBUS_READ_DATA; break; case SMBUS_WRITE_DATA: if (dev->data_len == 0) { @@ -91,7 +90,6 @@ static int smbus_i2c_event(I2CSlave *s, enum i2c_event event) } else { smbus_do_write(dev); DPRINTF("Read mode\n"); - dev->data_len = 0; dev->mode = SMBUS_READ_DATA; } break; @@ -148,31 +146,18 @@ static uint8_t smbus_i2c_recv(I2CSlave *s) { SMBusDevice *dev = SMBUS_DEVICE(s); SMBusDeviceClass *sc = SMBUS_DEVICE_GET_CLASS(dev); - uint8_t ret; + uint8_t ret = 0xff; switch (dev->mode) { - case SMBUS_RECV_BYTE: + case SMBUS_READ_DATA: if (sc->receive_byte) { ret = sc->receive_byte(dev); - } else { - ret = 0; - } - DPRINTF("Receive Byte %02x\n", ret); - dev->mode = SMBUS_DONE; - break; - case SMBUS_READ_DATA: - if (sc->read_data) { - ret = sc->read_data(dev, dev->data_len); - dev->data_len++; - } else { - ret = 0; } DPRINTF("Read data %02x\n", ret); break; default: BADF("Unexpected read in state %d\n", dev->mode); dev->mode = SMBUS_CONFUSED; - ret = 0; break; } return ret; diff --git a/include/hw/i2c/smbus_slave.h b/include/hw/i2c/smbus_slave.h index fa92201ec6..79050fb92d 100644 --- a/include/hw/i2c/smbus_slave.h +++ b/include/hw/i2c/smbus_slave.h @@ -47,8 +47,6 @@ typedef struct SMBusDeviceClass */ void (*quick_cmd)(SMBusDevice *dev, uint8_t read); - uint8_t (*receive_byte)(SMBusDevice *dev); - /* * We can't distinguish between a word write and a block write with * length 1, so pass the whole data block including the length byte @@ -59,11 +57,16 @@ typedef struct SMBusDeviceClass */ int (*write_data)(SMBusDevice *dev, uint8_t *buf, uint8_t len); - /* Likewise we can't distinguish between different reads, or even know - the length of the read until the read is complete, so read data a - byte at a time. The device is responsible for adding the length - byte on block reads. */ - uint8_t (*read_data)(SMBusDevice *dev, int n); + /* + * Likewise we can't distinguish between different reads, or even know + * the length of the read until the read is complete, so read data a + * byte at a time. The device is responsible for adding the length + * byte on block reads. This call cannot fail, it should return + * something, preferably 0xff if nothing is available. + * This may be NULL if no data is read from the device. Reads will + * return 0xff in that case. + */ + uint8_t (*receive_byte)(SMBusDevice *dev); } SMBusDeviceClass; struct SMBusDevice {