From patchwork Fri Oct 5 00:08:46 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: 189374 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 8F44B2C0316 for ; Fri, 5 Oct 2012 10:09:36 +1000 (EST) Received: from localhost ([::1]:49163 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TJvTy-0002qt-I0 for incoming@patchwork.ozlabs.org; Thu, 04 Oct 2012 20:09:34 -0400 Received: from eggs.gnu.org ([208.118.235.92]:37236) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TJvTV-00023g-EE for qemu-devel@nongnu.org; Thu, 04 Oct 2012 20:09:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TJvTU-0001eO-8J for qemu-devel@nongnu.org; Thu, 04 Oct 2012 20:09:05 -0400 Received: from mail-pb0-f45.google.com ([209.85.160.45]:50471) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TJvTU-0001eJ-2A for qemu-devel@nongnu.org; Thu, 04 Oct 2012 20:09:04 -0400 Received: by mail-pb0-f45.google.com with SMTP id rp2so1103615pbb.4 for ; Thu, 04 Oct 2012 17:09:02 -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 :x-gm-message-state; bh=ePdgh/8Gx0lFhv2nlCrCgnBLISF3Cb1IAlPw1bHnh8U=; b=kGPuiyCv/vU8tJlxCRk32qVpJ7DTBQBOR2PUq68S++IoEnh0o+7q4Nb25ugbGK6SPt h5eeprwpb2qo9ZtRYK6jA11oKRgylNzKRRPK0cmeqnMybNOlU++aD5vcEeE7Gki6ZMJ1 ltZuG16sYJcnX0ljHaAGuzHifl9SKoOQ889OT6cQ/0ynh+1Ir9MJNXlCR8V6Np9pkb7s T3cdKLoPMtgWCsBFLty0ph4zIK/l64lyCxSr0fEOdzfpXTg2ACUiLFnnBMC/C4VwclAv 4wVl35NAlvDPR9XV/e/ss6JGDnLZsrmw2By3l4LNJy2rBx9a6E+1D2HDknHOrsuda7ka nk6w== Received: by 10.68.223.37 with SMTP id qr5mr25990242pbc.101.1349395742449; Thu, 04 Oct 2012 17:09:02 -0700 (PDT) Received: from localhost ([124.148.20.9]) by mx.google.com with ESMTPS id gv1sm5075110pbc.38.2012.10.04.17.08.59 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 04 Oct 2012 17:09:01 -0700 (PDT) From: Peter Crosthwaite To: qemu-devel@nongnu.org, edgar.iglesias@gmail.com, blauwirbel@gmail.com, aliguori@us.ibm.com Date: Fri, 5 Oct 2012 10:08:46 +1000 Message-Id: <1349395739-26502-2-git-send-email-peter.crosthwaite@xilinx.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1349395739-26502-1-git-send-email-peter.crosthwaite@xilinx.com> References: <1349395739-26502-1-git-send-email-peter.crosthwaite@xilinx.com> X-Gm-Message-State: ALoCoQnoX8O3CGK9JY4BeQg5COgMwhDnHavqtKX7nT8aMokhmcpC/zJQeDepgTRO9C2RwYBS752L 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 Subject: [Qemu-devel] [PATCH 01/14] 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 From: Peter A. G. Crosthwaite 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)