From patchwork Mon Aug 6 02:16:15 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peter A. G. Crosthwaite" X-Patchwork-Id: 175228 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 649802C008D for ; Mon, 6 Aug 2012 12:17:35 +1000 (EST) Received: from localhost ([::1]:49606 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SyCsv-0006XI-Aj for incoming@patchwork.ozlabs.org; Sun, 05 Aug 2012 22:17:33 -0400 Received: from eggs.gnu.org ([208.118.235.92]:54677) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SyCsk-0006RP-UA for qemu-devel@nongnu.org; Sun, 05 Aug 2012 22:17:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SyCsj-0001ai-Mk for qemu-devel@nongnu.org; Sun, 05 Aug 2012 22:17:22 -0400 Received: from mail-pb0-f45.google.com ([209.85.160.45]:49361) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SyCsj-0001ae-HD for qemu-devel@nongnu.org; Sun, 05 Aug 2012 22:17:21 -0400 Received: by pbbro12 with SMTP id ro12so4514247pbb.4 for ; Sun, 05 Aug 2012 19:17:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :in-reply-to:references:x-gm-message-state; bh=huzPJ+erbrAcTWRTg8ov02rdc4DgQH/nLWzzd8De1Cc=; b=HbF0QOMzGVzHtXSsABPAk0Vq5jO5fn2X3R1Vy2lEiZWYC8dmeE5ETOEn4d+026K7gL Rv+VVCp4KhUo3ggS1lsryQRwvTQUtz6nxuwbQRWE9STnGN8xsAKwE5D6XFxNyCpvgu2U AJfLfgIkDIMRtvlNj0N1hLiWzUHOczCxyaCTQQDRCItSb+XOeM/5x42cFXqWc1mhAVfF xK7P7A1Amoh8MkCVilxksHtr8CeZIVLSGYrOgT+lkl19xg8cY31nyMAsCl5zV75JSOQh gawfdQ1nhI3bjAX6kdyJ5DaM4OM2o304cdNIdcBzb+5ZwgEm4He8hYlKA7wkCmTE7oKF KZ/A== Received: by 10.68.130.233 with SMTP id oh9mr15231911pbb.78.1344219440702; Sun, 05 Aug 2012 19:17:20 -0700 (PDT) Received: from localhost ([124.148.20.9]) by mx.google.com with ESMTPS id nu5sm7862983pbb.53.2012.08.05.19.17.17 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 05 Aug 2012 19:17:20 -0700 (PDT) From: "Peter A. G. Crosthwaite" To: qemu-devel@nongnu.org, paul@codesourcery.com, edgar.iglesias@gmail.com, peter.maydell@linaro.org, stefanha@gmail.com Date: Mon, 6 Aug 2012 12:16:15 +1000 Message-Id: X-Mailer: git-send-email 1.7.0.4 In-Reply-To: References: In-Reply-To: References: X-Gm-Message-State: ALoCoQnS8Eici20k2tRVkW7OabZKpHH0Q0oYNXKRcN0tGF3YBb1j77xNUn30mVt5whFe1vMCBSaC X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.85.160.45 Cc: peter.crosthwaite@petalogix.com, i.mitsyanko@samsung.com, john.williams@petalogix.com Subject: [Qemu-devel] [PATCH v5 01/15] ssi: Support for multiple attached devices X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Removed assertion that only one device is attached to the SSI bus. When multiple devices are attached, all slaves have their transfer function called for transfers. Each device is responsible for knowing whether or not its CS is active, and if not returning 0. The returned data is the logical or of all responses from the (mulitple) devices. Signed-off-by: Peter A. G. Crosthwaite --- hw/ssi.c | 24 +++++++++--------------- 1 files changed, 9 insertions(+), 15 deletions(-) diff --git a/hw/ssi.c b/hw/ssi.c index e5f14a0..35d0a04 100644 --- a/hw/ssi.c +++ b/hw/ssi.c @@ -2,6 +2,8 @@ * QEMU Synchronous Serial Interface support * * Copyright (c) 2009 CodeSourcery. + * Copyright (c) 2012 Peter A.G. Crosthwaite (peter.crosthwaite@petalogix.com) + * Copyright (c) 2012 PetaLogix Pty Ltd. * Written by Paul Brook * * This code is licensed under the GNU GPL v2. @@ -29,14 +31,6 @@ static int ssi_slave_init(DeviceState *dev) { SSISlave *s = SSI_SLAVE(dev); SSISlaveClass *ssc = SSI_SLAVE_GET_CLASS(s); - SSIBus *bus; - BusChild *kid; - - bus = FROM_QBUS(SSIBus, qdev_get_parent_bus(dev)); - kid = QTAILQ_FIRST(&bus->qbus.children); - if (kid->child != dev || QTAILQ_NEXT(kid, sibling) != NULL) { - hw_error("Too many devices on SSI bus"); - } return ssc->init(s); } @@ -74,16 +68,16 @@ SSIBus *ssi_create_bus(DeviceState *parent, const char *name) uint32_t ssi_transfer(SSIBus *bus, uint32_t val) { BusChild *kid; - SSISlave *slave; SSISlaveClass *ssc; + uint32_t r = 0; - kid = QTAILQ_FIRST(&bus->qbus.children); - if (!kid) { - return 0; + QTAILQ_FOREACH(kid, &bus->qbus.children, sibling) { + SSISlave *slave = SSI_SLAVE(kid->child); + ssc = SSI_SLAVE_GET_CLASS(slave); + r |= ssc->transfer(slave, val); } - slave = SSI_SLAVE(kid->child); - ssc = SSI_SLAVE_GET_CLASS(slave); - return ssc->transfer(slave, val); + + return r; } static void ssi_slave_register_types(void)