From patchwork Wed Feb 20 13:59:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 158814 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp5050823jaa; Wed, 20 Feb 2019 07:26:54 -0800 (PST) X-Google-Smtp-Source: AHgI3IYyUJXYmmmcBYUvK22A+ttyVmTyKTsDKz9W9tqHWzRed2Lo4D6MPC77KyZJgUUNlqyss+VS X-Received: by 2002:a81:a186:: with SMTP id y128mr28326030ywg.172.1550676414245; Wed, 20 Feb 2019 07:26:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550676414; cv=none; d=google.com; s=arc-20160816; b=GDdVM3Lt4GszMTtPlzA0KrMzRmocnbgdhxEvaGot5hjz2W3oh3/maO3DzmdJHFlMzP zI36TTI4n0Gu78+VGy11CrC1g/KJECcB+Gu8/som5REBvZR6QrF7PUxnFQDNl6GiFHmm Q2sMM7D2IZ2UJjXsD+uaVksIxO5bxs/m+WUrY5CJ0lnyQ8kgwb1dOMydZCqPKCksxPs9 5rshOuHW8BsZW35gC6xJwz43SfUSfHGZe3unzPtumh6FlXDemSP1/Ae0kiunzaMQSR6q KCKEcz6vuUCSDdj7aeBzYLEmYi8iczp1CETd4EYp4DW54P+vRBQGs7h0gBiz0nEyhdTp aw+Q== 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=ltrKvL1wFCmsevanDOByHV0CH3UrQ7XGYa631gmmz6ycyPbi4NJq1Y6wlaO3Hv4a/p V7iyFZQ/bkRkuOnCGeeUMyLREIIBJnrAQQu+wChMYwOm2RugPveqRDellgiTkdFfYlax +2yj4wu7+RpTu8HamEuKq1bYRE/F/4T4c//6usw5DFvcEUIeT88mDmNzvaARk3MCg5vW PeLvmeU/zRbrWAfHwn6H1WBlp9RivfxzZlO+SfRqlxCPS2o3jNs4htAZ2y8qgIs16Q93 fi5spJC+opCxtJk5HBGEMohSmEr2iv+HwFUEzJ+Ad/T1zbAhNoTulAcJODIZ2UyBou4+ GSrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b="QZxJr/pW"; 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 e83si2897449ywb.380.2019.02.20.07.26.54 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 20 Feb 2019 07:26:54 -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="QZxJr/pW"; 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]:40827 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gwTlt-0000iT-Ki for patch@linaro.org; Wed, 20 Feb 2019 10:26:53 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41615) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gwTiz-0007Jn-4K for qemu-devel@nongnu.org; Wed, 20 Feb 2019 10:24:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gwTiT-00075J-4y for qemu-devel@nongnu.org; Wed, 20 Feb 2019 10:23:40 -0500 Received: from mail-ot1-x341.google.com ([2607:f8b0:4864:20::341]:40085) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gwTiL-0006vA-Bo for qemu-devel@nongnu.org; Wed, 20 Feb 2019 10:23:17 -0500 Received: by mail-ot1-x341.google.com with SMTP id v20so8767573otk.7 for ; Wed, 20 Feb 2019 07:22:50 -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=QZxJr/pW1T4/uCqtkUp0O6VskQ7Dqb0YkAIXdt0p/07rTsn9ABZRkoeiZL3HEBHWp9 wV1eNnNj9X4g+df17L3B2bcJlZiqyuo86liE9qvTHyy1ahvsn71iiwPu8IVIZl0vQnwi 8pOCzi0Ow5YjkJdAAJHkRi0NEYLT51EqULgD2YxT9Ph+GcE2nUK6HuEUYCwZzBh9v5oa VmZnJ/CpsITH0cxH5v8cA91XL/ttB6nb5QdXbEcDGz2xcmZ/Mw0AxLpk1VqOoneFT9FO ReBW3nUvxj3fsk3VYJ8Ks3PQetRBj3eOYswiCjtjG8aKfpwlhiIZz4uUp4f27JYb93Qc 43Aw== 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=A4xkkb0zAOQhrR3x1Oo5vkdInaGPCiScd/tngb5YyjoBc0TyNMMgzhXjLJ8AEBaHFl +6jpAzkI+PIHZUL7z4WEt49Ty73NVI+/D47eKcfqYO+6RbfoVS+PAlntoykL6b1LUG0Y 4Hv7+cJ4sVXOQ5yf6THpV/Oa63zcGcB/QXaPZf+YmzctMNHPuI3yvWchG8L+ATcbldek SYZNdJCNIoCWA5cOTSi5Kj5lKsxofKkCCLt8t3HZU5Fv+DR3stb0ACxTzJUDshqaz3mr PYedtq83NJgaRQzKWglN+Mu9z4dmDekucC9ps9+LwktqsJsJ17tuRRQji6HLRhOfjTAG FtvA== X-Gm-Message-State: AHQUAubTjci0oElRGNnxOP1IB8noD1veN+UNoIR/l98cmAYiBRxNm39d JNZ1OX5C7gi8r62fADPnDX0h3dERRw== X-Received: by 2002:aca:4c10:: with SMTP id z16mr5850770oia.53.1550671215714; Wed, 20 Feb 2019 06:00:15 -0800 (PST) Received: from serve.minyard.net (serve.minyard.net. [2001:470:b8f6:1b::1]) by smtp.gmail.com with ESMTPSA id r184sm7889556oif.56.2019.02.20.06.00.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 20 Feb 2019 06:00:12 -0800 (PST) Received: from t430.minyard.net (t430m.minyard.net [192.168.27.3]) by serve.minyard.net (Postfix) with ESMTPA id F249C1808F7; Wed, 20 Feb 2019 14:00:09 +0000 (UTC) Received: by t430.minyard.net (Postfix, from userid 1000) id 9786E302812; Wed, 20 Feb 2019 08:00:08 -0600 (CST) From: minyard@acm.org To: qemu-devel@nongnu.org Date: Wed, 20 Feb 2019 07:59:44 -0600 Message-Id: <20190220135956.22589-8-minyard@acm.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190220135956.22589-1-minyard@acm.org> References: <20190220135956.22589-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::341 Subject: [Qemu-devel] [PATCH 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 , Corey Minyard , Corey Minyard , "Michael S . Tsirkin" , "Dr . David Alan Gilbert" , Paolo Bonzini 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 {