From patchwork Thu Feb 28 18:16:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 159417 Delivered-To: patch@linaro.org Received: by 2002:ac9:18c7:0:0:0:0:0 with SMTP id i7csp984388oce; Thu, 28 Feb 2019 10:29:40 -0800 (PST) X-Google-Smtp-Source: APXvYqwvAh98bC3yrj2INTBNO6+WexDY2DRSS1OMLzZruDf9km2a9pF0X270l0RRX10rlRxdiPxY X-Received: by 2002:a81:100a:: with SMTP id 10mr255938ywq.341.1551378580267; Thu, 28 Feb 2019 10:29:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551378580; cv=none; d=google.com; s=arc-20160816; b=RRCOmCCNP6C9JO8A8Oq7qbECaFlVNOcsFqLAingKlIO1Xp1cZ50K26RU0vtYHGi3Q8 JpO9YMrD1uzf5i4PunGOjV1/GOUygsQEKH7j2NoyLO4wVAZXiATW85JEoPY2bbsEqq4N Sii9/+ea4A7DlfQoFzZuBvfeqniBy69SHSCAOSUhdzAHBJv9fuoMStn8Nl1To+4JFhHr m8Erz/myvEmWpB61qVVW81GpcCfhkkhXdQg4Yq5n7OLbRsE87S+iTTZLsNKOuR7LANrN YAt5WJIOlcZaFJ4Nukc12Py1eikzA/etDItMDYjLGg6/69XUKBrH2S+jvuOegThvboVv 6iHw== 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=FWe2Dhv89KodfuqowwWrK2ETS2o3tITKLnWO0wMvKec=; b=P+wTEfvgoiF3p8e48kq3yVkUD6G0nbnlk5CY1msfMC1Rn3lgVhgLn6qcz/xCFleh0T SLNiUYJkGnAKr1YyC5rG9fRnPgLW0dmGJ7RHi71aeND3hIJ6apuC3R0Y6P8km4it9Jrf PQXPZUQnqpSzVjUGuo68gbn9AHUJV/LDgv9PsBKfjC0Ti8XeyJjsw4xE8UH7GU/mY6eR hJ9G/vLbtC6p7ZNBxS95FQwbxWZZe6/v7V39brXRp+HgOdthTyfXa8Hw3HF6FH3s9Npw UNfWu9dDSDE5mP2W1313rL0I2T96/wAPQAgWhQOq2T1OjdQGufvhC6NUS7aA/d5YazER uPQg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=vJi6I3vc; 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 y12si11157194ywd.351.2019.02.28.10.29.40 for (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 28 Feb 2019 10:29:40 -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=vJi6I3vc; 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]:44640 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gzQR9-0000Tu-PK for patch@linaro.org; Thu, 28 Feb 2019 13:29:39 -0500 Received: from eggs.gnu.org ([209.51.188.92]:46763) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gzQFo-0000aC-12 for qemu-devel@nongnu.org; Thu, 28 Feb 2019 13:18:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gzQFc-0002Lk-NM for qemu-devel@nongnu.org; Thu, 28 Feb 2019 13:17:55 -0500 Received: from mail-oi1-x243.google.com ([2607:f8b0:4864:20::243]:37585) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gzQFY-0002BN-9D for qemu-devel@nongnu.org; Thu, 28 Feb 2019 13:17:40 -0500 Received: by mail-oi1-x243.google.com with SMTP id w66so17269980oia.4 for ; Thu, 28 Feb 2019 10:17:23 -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=FWe2Dhv89KodfuqowwWrK2ETS2o3tITKLnWO0wMvKec=; b=vJi6I3vc7ey5uh7DtydPqNJ4AIjnBwQdjrCwYQ/I7p7JGKLpdikHDifuDPGLkXSRQX R/7I1QLXelDRleDQHx0Mmul+c7j8rCLVRic3dduNKcTgeEFPB0AiQC0SCfnAlgnJouQf oDWuFJYkKAm2G4UbEbFl60ZIh0nHTBGUGU0Nhlx2xSVL4rNb6jJZLguqvC+byRWZr4JZ jDuBqpnfw5DeM52OWUzBG/L3GUwT9rBS0QhxL6M6f/AIWCxpArS+ca0WS7wGVJE/CQYf /f1J+UUk8igTrDSJxA8u+xfmOnU6hzbCH7wQxGi4OH20myp/Qpw9nQ364tX9WoiJ5KJM QpdQ== 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=FWe2Dhv89KodfuqowwWrK2ETS2o3tITKLnWO0wMvKec=; b=n+jzKEmoQkJwZdsIjLDiZ5ShpWZsqf4yEQKPkvJv6Zr3ehZcph6TSMpKw1QZP1VMb6 +x1yQnmfy2wLmoy3Pz2oC14G1s2KjSVKSr0DbpnM6i449H4UpV+Bd/XrIw/Eu/0B/mI0 GEiXSLf+ObGIY2vgQrgobcQJLrZYOtlpFWyxxsWTLWXe491Qx0wqe5JaE/qS93w0ukrb 5QEmNt0tmN7vCuKtj0z7AB+/pDYj+XK0OBHtZjySM7NTyA5ZWz3/V4yYc+08AhZ8O6oP UX3GDe6UwKUEaUU0KAnLo+/NGMwnLpCX6ypRRgH28ZBPwl7Ov1ZeLNNQV7DIPvMO1K/p CpBA== X-Gm-Message-State: AHQUAuZ5zi/C757C/ZNbIyHNMm0TUasstRpe8H7Fr5xwg1eQhLIACeeK UuXxfPtKPrQbBgGFJ+2jWQ== X-Received: by 2002:aca:4d42:: with SMTP id a63mr696895oib.57.1551377842674; Thu, 28 Feb 2019 10:17:22 -0800 (PST) Received: from serve.minyard.net ([47.184.128.64]) by smtp.gmail.com with ESMTPSA id c38sm7871037otb.3.2019.02.28.10.17.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 28 Feb 2019 10:17:17 -0800 (PST) Received: from t430.minyard.net (unknown [IPv6:2001:470:b8f6:1b:b89e:c7bf:12ab:ad14]) by serve.minyard.net (Postfix) with ESMTPA id 007C91808F7; Thu, 28 Feb 2019 18:17:14 +0000 (UTC) Received: by t430.minyard.net (Postfix, from userid 1000) id C19F4302AF9; Thu, 28 Feb 2019 12:17:13 -0600 (CST) From: minyard@acm.org To: Peter Maydell Date: Thu, 28 Feb 2019 12:16:58 -0600 Message-Id: <20190228181710.2477-8-minyard@acm.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190228181710.2477-1-minyard@acm.org> References: <20190228181710.2477-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::243 Subject: [Qemu-devel] [PULL 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: Corey Minyard , QEMU Developers , minyard@acm.org 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 7fbb5ca27f..760594b3f1 100644 --- a/hw/i2c/smbus_eeprom.c +++ b/hw/i2c/smbus_eeprom.c @@ -79,13 +79,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; @@ -107,7 +100,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 {