From patchwork Wed Jun 17 08:23:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasper Lowell X-Patchwork-Id: 11609393 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3195360D for ; Wed, 17 Jun 2020 08:25:38 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D336820679 for ; Wed, 17 Jun 2020 08:25:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bt.com header.i=@bt.com header.b="U8onlo2q" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D336820679 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bt.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:45496 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlTO5-0006cx-2B for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jun 2020 04:25:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54440) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTN9-000532-Sb for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:40 -0400 Received: from smtpe1.intersmtp.com ([213.121.35.79]:58732) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlTN3-0003vg-TK for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:38 -0400 Received: from tpw09926dag06h.domain1.systemhost.net (10.9.202.33) by BWP09926084.bt.com (10.36.82.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1713.5; Wed, 17 Jun 2020 09:24:08 +0100 Received: from tpw09926dag12f.domain1.systemhost.net (10.9.212.20) by tpw09926dag06h.domain1.systemhost.net (10.9.202.33) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 17 Jun 2020 09:24:31 +0100 Received: from RDW083A009ED65.bt.com (10.187.98.35) by tpw09926dag12f.domain1.systemhost.net (10.9.212.20) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Wed, 17 Jun 2020 09:24:31 +0100 Received: from GBR01-CWL-obe.outbound.protection.outlook.com (104.47.20.57) by smtpe1.intersmtp.com (62.239.224.236) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:17:09 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C5bVYfRrC611f8jUJhRrBo3xuyuzz2FXwKmo4Fu+SHrEJgRonpaeqiGPIe4zZI/oQNIIIeeVAd9i0KnIbK3VgrMhroO/LrTPnDH68IBUhIIa1pv0GehwSOVFzni+5FEhbzie/XHdl69Cx+xtIdLhwFFwZ0aYw4WPA64jRVGBg1GSFcgJLWjPgFh1baUmiLdoXh70KV6ROZ8c2Tqi/gF4VCccu+bUeUjkhHOem4E6tPTN31oGY1i/JOwpnO2V+WtTPVUxT5CrKh8/0cXIgPdMvLJ/MEadSagzpNo2jMK4UCBb3vI8gY0YkA/tcdJFk3bz4tBLR3a8G00JvXOymsx+nQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LeW+K9iboX3K97CORoAVE7xEbqqFwU8R2GcWPxX2ElM=; b=oTw/fi4YDwGbAwcqk8FK782O9WtiYM6yQei3J7G24lEBmfSpSexHyYIBBJqkCcgGpVzVt1S4L3X322xH2KVy/Rgn5gi8lc4Y/IBaHrW10Q3LRpEdyEzTrRQ5OtSWSBqEUuSZz8Brv+ry9OJmLEnoIvT19j6DdPfXLoo+6lhoIMyztctvzB13PfyF3czzn0PNZyzH0R9hfzKELG6sdNKKJRXNIfnjY9C+L5bsscUOrUP4t2Y7ezCQ4Lg9ZxTnBAOk0mjr8em3298IHaFiQX9sRAse4d2iMLwnqdapVQiJ33AwAbRltYEGoXKK2HfJe9/Z5RGrWiNzB/srRgT8iBfyrQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bt.com; dmarc=pass action=none header.from=bt.com; dkim=pass header.d=bt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bt.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LeW+K9iboX3K97CORoAVE7xEbqqFwU8R2GcWPxX2ElM=; b=U8onlo2qYawVOF8m/vpfLufgQyzmRzAAQm0hiUIS4NEHf/62L0yFmPa7WaQgLOvhvOB34ZDV+YpDVBlffSp6O53SAX5nzXFI67t8cHUOP9F2ryJRWI9HJ3ZfJIQwzyzlAb4FrJpwmk/zzDe94XXIEM1nZXt3S919K1H3sGr20mQ= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bt.com; Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) by CWXP123MB3255.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:43::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Wed, 17 Jun 2020 08:24:27 +0000 Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b]) by CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b%7]) with mapi id 15.20.3109.021; Wed, 17 Jun 2020 08:24:27 +0000 From: Jasper Lowell To: Subject: [PATCH 1/8] hw/char/escc2: Add device Date: Wed, 17 Jun 2020 18:23:55 +1000 Message-ID: <20200617082402.242631-2-jasper.lowell@bt.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200617082402.242631-1-jasper.lowell@bt.com> References: <20200617082402.242631-1-jasper.lowell@bt.com> X-ClientProxiedBy: SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) To CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.128.24.45) by SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21 via Frontend Transport; Wed, 17 Jun 2020 08:24:23 +0000 X-Mailer: git-send-email 2.26.2 X-Originating-IP: [185.128.24.45] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 66f3ef93-017a-40cc-bc86-08d81297d8e5 X-MS-TrafficTypeDiagnostic: CWXP123MB3255: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-Antispam-2: 1 X-MS-Oob-TLC-OOBClassifiers: OLM:3383; X-Forefront-PRVS: 04371797A5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: erQ5F5WdtW5u9Z+LIacYp7XWrc7o+7ZrvHdpKIhgc1p3mbLcuDoVaacblwW1pBlPAPiQbJ4yDwFR4QiZesVMbrAs16fq9L19q7L/7+q2YcYiJcHNpq1AgT9icxRUdWBxnHnfQI/JntlqtVgfzROol2MDe9oLF6zqE8Q+Lhcy86OJW7zX5tftWL2n3eJ+tDjBj1wK/HCWlEtun5nAmBWgLXN80TMGarNyr5foOpa9K5rHVuPS0fKLQ0wrVQL9esQIKorGB69bCfg4T0o4VHefidGoLv3ysr3yEQmoadXBk4Yw0BGmONCc3C2f9+kk8K7L50A+XZZ5b7zSHZYIXWj13/9OD3t4HSU3v3JtzrjTNLsAwC+1oSFQjWqZAq0/vNeK X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(366004)(346002)(376002)(39860400002)(44832011)(1076003)(8676002)(2616005)(316002)(8936002)(6666004)(6486002)(956004)(2906002)(5660300002)(83380400001)(6506007)(69590400007)(26005)(6512007)(36756003)(6916009)(186003)(16526019)(478600001)(52116002)(66556008)(66476007)(4326008)(66946007)(30864003)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: ndODFv3llosAooUDnuxPH5gewvqfvgcCaBd/P/1gnMJ6T+a0M7tR1ESfGrQ0/q9LTSWVNZzxbS9+U0FUXt+3JQnq2I06CMWrXst1JErr91Zqp+akMnr4a5q1TJ46Y4JMBkIGfwfgp0GBI4H1xHjcelkyGrshaNm4xoA65oQazLabWjnoZHbTG9vULY3xZbB+lZTwKKjgSQnbTYgUm4t3c4Z7ID1KiSXL78MgmrReo5l/YOuBwfNmcNL0tppvWH6X2rh0hDmXBWWp+BCg8lXBLbFwYfTmFIJvUNAjy5DCEDZfQbPzRMLw8WLUVi5LU4e6UqaGMEvXOAb+3UZo4xpxtQnM7dkmo04L0ICmYI5QdnRjLJ4/vFutyEoCc24HPrLnmmMdrlEjpvqvXU2XrnNkhKpB1vQI5r3TUY2pjyxSKEbfzjbyaokLXQZ0ThRXehkEcGNO1qwZPQAWX7ojEALz7Yex30POk7b72BN7onxWTpI= X-MS-Exchange-CrossTenant-Network-Message-Id: 66f3ef93-017a-40cc-bc86-08d81297d8e5 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2020 08:24:27.0426 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a7f35688-9c00-4d5e-ba41-29f146377ab0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 610y78Rc8SMxVJS8QEz+WNFZRAAajxuc0czSQKAChP3G9XWLtMfA3S70Oe5c372KjFdUuaBNKclLdzhNIKbKEA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP123MB3255 X-OriginatorOrg: bt.com Received-SPF: pass client-ip=213.121.35.79; envelope-from=jasper.lowell@bt.com; helo=smtpe1.intersmtp.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 04:24:32 X-ACL-Warn: Detected OS = Windows 7 or 8 [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tony.nguyen@bt.com, mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com, Jasper Lowell Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The Ultra 5 (Darwin) machine that is emulated for the Sun4u architecture ships with a SAB 82532 ESCC2 device that is used for providing the default ttya/ttyb serial consoles. This device is introduced to increment Sun4u emulation towards being hardware faithful. ISA support is included so that the device can be attached to the Sun ebus. Due to the complexity of the chip, the SAB 82532 ESCC2 is assumed to be configured and used in the ASYNC serial mode. This is the case for typical operating system drivers like those in Linux and OpenBSD. While ASYNC serial mode is assumed, the implementation is designed with the assumption that the full set of serial modes may be added at a later date. Registers can not be represented as uint8_t when more than a single serial mode is correctly implemented and so, the design avoids assuming the data structure used for registers. Avoiding this assumption leads to loops, rather than memset, along with a verbose switch case. The verbose switch case also has the benefit of preemptively detangling the jungle of features that the device supports. Signed-off-by: Jasper Lowell --- hw/char/Kconfig | 8 + hw/char/Makefile.objs | 1 + hw/char/escc2.c | 581 ++++++++++++++++++++++++++++++++++++++++ hw/char/trace-events | 4 + include/hw/char/escc2.h | 17 ++ 5 files changed, 611 insertions(+) create mode 100644 hw/char/escc2.c create mode 100644 include/hw/char/escc2.h diff --git a/hw/char/Kconfig b/hw/char/Kconfig index 40e7a8b8bb..87352a75d8 100644 --- a/hw/char/Kconfig +++ b/hw/char/Kconfig @@ -1,6 +1,14 @@ config ESCC bool +config ESCC2 + bool + +config ESCC2_ISA + bool + depends on ISA_BUS + select ESCC2 + config PARALLEL bool default y diff --git a/hw/char/Makefile.objs b/hw/char/Makefile.objs index 9e9a6c1aff..fd4766fd36 100644 --- a/hw/char/Makefile.objs +++ b/hw/char/Makefile.objs @@ -1,5 +1,6 @@ common-obj-$(CONFIG_IPACK) += ipoctal232.o common-obj-$(CONFIG_ESCC) += escc.o +common-obj-$(CONFIG_ESCC2) += escc2.o common-obj-$(CONFIG_NRF51_SOC) += nrf51_uart.o common-obj-$(CONFIG_PARALLEL) += parallel.o common-obj-$(CONFIG_ISA_BUS) += parallel-isa.o diff --git a/hw/char/escc2.c b/hw/char/escc2.c new file mode 100644 index 0000000000..94528b8a4c --- /dev/null +++ b/hw/char/escc2.c @@ -0,0 +1,581 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * QEMU Enhanced Serial Communication Controller (ESCC2 v3.2). + * Modelled according to the user manual (version 07.96). + * + * Copyright (C) 2020 Jasper Lowell + */ + +#include "qemu/osdep.h" +#include "hw/char/escc2.h" +#include "hw/isa/isa.h" +#include "hw/qdev-properties.h" +#include "qapi/error.h" +#include "sysemu/reset.h" +#include "trace.h" + +/* STAR. */ +#define REGISTER_STAR_OFFSET 0x20 + +/* CMDR. */ +#define REGISTER_CMDR_OFFSET 0x20 + +/* MODE. */ +#define REGISTER_MODE_OFFSET 0x22 + +/* TIMR. */ +#define REGISTER_TIMR_OFFSET 0x23 + +/* XON. */ +#define REGISTER_XON_OFFSET 0x24 + +/* XOFF. */ +#define REGISTER_XOFF_OFFSET 0x25 + +/* TCR. */ +#define REGISTER_TCR_OFFSET 0x26 + +/* DAFO. */ +#define REGISTER_DAFO_OFFSET 0x27 + +/* RFC. */ +#define REGISTER_RFC_OFFSET 0x28 + +/* RBCL. */ +#define REGISTER_RBCL_OFFSET 0x2a + +/* XBCL. */ +#define REGISTER_XBCL_OFFSET 0x2a + +/* RBCH. */ +#define REGISTER_RBCH_OFFSET 0x2b + +/* XBCH. */ +#define REGISTER_XBCH_OFFSET 0x2b + +/* CCR0. */ +#define REGISTER_CCR0_OFFSET 0x2c + +/* CCR1. */ +#define REGISTER_CCR1_OFFSET 0x2d + +/* CCR2. */ +#define REGISTER_CCR2_OFFSET 0x2e + +/* CCR3. */ +#define REGISTER_CCR3_OFFSET 0x2f + +/* TSAX. */ +#define REGISTER_TSAX_OFFSET 0x30 + +/* TSAR. */ +#define REGISTER_TSAR_OFFSET 0x31 + +/* XCCR. */ +#define REGISTER_XCCR_OFFSET 0x32 + +/* RCCR. */ +#define REGISTER_RCCR_OFFSET 0x33 + +/* VSTR. */ +#define REGISTER_VSTR_OFFSET 0x34 + +/* BGR. */ +#define REGISTER_BGR_OFFSET 0x34 + +/* TIC. */ +#define REGISTER_TIC_OFFSET 0x35 + +/* MXN. */ +#define REGISTER_MXN_OFFSET 0x36 + +/* MXF. */ +#define REGISTER_MXF_OFFSET 0x37 + +/* GIS. */ +#define REGISTER_GIS_OFFSET 0x38 + +/* IVA. */ +#define REGISTER_IVA_OFFSET 0x38 + +/* IPC. */ +#define REGISTER_IPC_OFFSET 0x39 + +/* ISR0. */ +#define REGISTER_ISR0_OFFSET 0x3a + +/* IMR0. */ +#define REGISTER_IMR0_OFFSET 0x3a + +/* ISR1. */ +#define REGISTER_ISR1_OFFSET 0x3b + +/* IMR1. */ +#define REGISTER_IMR1_OFFSET 0x3b + +/* PVR. */ +#define REGISTER_PVR_OFFSET 0x3c + +/* PIS. */ +#define REGISTER_PIS_OFFSET 0x3d + +/* PIM. */ +#define REGISTER_PIM_OFFSET 0x3d + +/* PCR. */ +#define REGISTER_PCR_OFFSET 0x3e + +/* CCR4. */ +#define REGISTER_CCR4_OFFSET 0x3f + +enum { + REGISTER_STAR = 0, + REGISTER_CMDR, + REGISTER_MODE, + REGISTER_TIMR, + REGISTER_XON, + REGISTER_XOFF, + REGISTER_TCR, + REGISTER_DAFO, + REGISTER_RFC, + REGISTER_RBCL, + REGISTER_XBCL, + REGISTER_RBCH, + REGISTER_XBCH, + REGISTER_CCR0, + REGISTER_CCR1, + REGISTER_CCR2, + REGISTER_CCR3, + REGISTER_TSAX, + REGISTER_TSAR, + REGISTER_XCCR, + REGISTER_RCCR, + REGISTER_VSTR, + REGISTER_BGR, + REGISTER_TIC, + REGISTER_MXN, + REGISTER_MXF, + REGISTER_GIS, + REGISTER_IVA, + REGISTER_IPC, + REGISTER_ISR0, + REGISTER_IMR0, + REGISTER_ISR1, + REGISTER_IMR1, + REGISTER_PVR, + REGISTER_PIS, + REGISTER_PIM, + REGISTER_PCR, + REGISTER_CCR4, + /* End. */ + REGISTER_COUNT +}; + +typedef struct ESCC2State ESCC2State; + +#define CHANNEL_FIFO_LENGTH 0x20 +typedef struct ESCC2ChannelState { + ESCC2State *controller; + + /* + * The SAB 82532 ships with 64 byte FIFO queues for transmitting and + * receiving but only 32 bytes are addressable. + */ + uint8_t fifo_receive[CHANNEL_FIFO_LENGTH]; + uint8_t fifo_transmit[CHANNEL_FIFO_LENGTH]; + + uint8_t register_set[REGISTER_COUNT]; +} ESCC2ChannelState; + +#define CHANNEL_A_OFFSET 0x0 +#define CHANNEL_B_OFFSET 0x40 +#define CHANNEL_LENGTH 0x40 + +#define REGISTER_READ(channel, idx) \ + ((channel)->register_set[(idx)]) +#define REGISTER_WRITE(channel, idx, value) \ + ((channel)->register_set[(idx)] = (value)) + +enum { + CHANNEL_A = 0, + CHANNEL_B, + /* End. */ + CHANNEL_COUNT +}; + +struct ESCC2State { + DeviceState parent; + + MemoryRegion io; + ESCC2ChannelState channel[CHANNEL_COUNT]; +}; + +#define CONTROLLER_CHANNEL_A(controller) (&(controller)->channel[CHANNEL_A]) +#define CONTROLLER_CHANNEL_B(controller) (&(controller)->channel[CHANNEL_B]) +#define CHANNEL_CHAR(channel) \ + ((channel) == CONTROLLER_CHANNEL_A((channel)->controller) ? 'A' : 'B') + +typedef struct ESCC2ISAState { + ISADevice parent; + uint32_t iobase; + struct ESCC2State controller; +} ESCC2ISAState; + +static void escc2_channel_reset(ESCC2ChannelState *channel) +{ + unsigned int i; + + memset(channel->fifo_receive, 0, sizeof(channel->fifo_receive)); + memset(channel->fifo_transmit, 0, sizeof(channel->fifo_transmit)); + for (i = 0; i < REGISTER_COUNT; i++) { + channel->register_set[i] = 0; + } + + channel->register_set[REGISTER_STAR] = 0x40; + channel->register_set[REGISTER_VSTR] = 0x2; +} + +static void escc2_reset(void *opaque) +{ + unsigned int i; + ESCC2State *controller = opaque; + + for (i = 0; i < CHANNEL_COUNT; i++) { + escc2_channel_reset(&controller->channel[i]); + } +} + +static uint64_t escc2_mem_read(void *opaque, hwaddr addr, unsigned size) +{ + uint8_t value, offset; + ESCC2State *controller; + ESCC2ChannelState *channel; + + assert(addr < (CHANNEL_COUNT * CHANNEL_LENGTH)); + assert(size == sizeof(uint8_t)); + + controller = opaque; + if (addr < CHANNEL_LENGTH) { + channel = CONTROLLER_CHANNEL_A(controller); + offset = addr; + } else { + channel = CONTROLLER_CHANNEL_B(controller); + offset = addr - CHANNEL_LENGTH; + } + + switch (offset) { + case 0 ... (CHANNEL_FIFO_LENGTH - 1): + value = channel->fifo_receive[offset]; + break; + case REGISTER_STAR_OFFSET: + value = REGISTER_READ(channel, REGISTER_STAR); + break; + case REGISTER_MODE_OFFSET: + value = REGISTER_READ(channel, REGISTER_MODE); + break; + case REGISTER_TIMR_OFFSET: + value = REGISTER_READ(channel, REGISTER_TIMR); + break; + case REGISTER_XON_OFFSET: + value = REGISTER_READ(channel, REGISTER_XON); + break; + case REGISTER_XOFF_OFFSET: + value = REGISTER_READ(channel, REGISTER_XOFF); + break; + case REGISTER_TCR_OFFSET: + value = REGISTER_READ(channel, REGISTER_TCR); + break; + case REGISTER_DAFO_OFFSET: + value = REGISTER_READ(channel, REGISTER_DAFO); + break; + case REGISTER_RFC_OFFSET: + value = REGISTER_READ(channel, REGISTER_RFC); + break; + case REGISTER_RBCL_OFFSET: + value = REGISTER_READ(channel, REGISTER_RBCL); + break; + case REGISTER_RBCH_OFFSET: + value = REGISTER_READ(channel, REGISTER_RBCH); + break; + case REGISTER_CCR0_OFFSET: + value = REGISTER_READ(channel, REGISTER_CCR0); + break; + case REGISTER_CCR1_OFFSET: + value = REGISTER_READ(channel, REGISTER_CCR1); + break; + case REGISTER_CCR2_OFFSET: + value = REGISTER_READ(channel, REGISTER_CCR2); + break; + case REGISTER_CCR3_OFFSET: + value = REGISTER_READ(channel, REGISTER_CCR3); + break; + case REGISTER_VSTR_OFFSET: + value = REGISTER_READ(channel, REGISTER_VSTR); + break; + case REGISTER_GIS_OFFSET: + value = REGISTER_READ(channel, REGISTER_GIS); + break; + case REGISTER_IPC_OFFSET: + value = REGISTER_READ(channel, REGISTER_IPC); + break; + case REGISTER_ISR0_OFFSET: + value = REGISTER_READ(channel, REGISTER_ISR0); + break; + case REGISTER_ISR1_OFFSET: + value = REGISTER_READ(channel, REGISTER_ISR1); + break; + case REGISTER_PVR_OFFSET: + value = REGISTER_READ(channel, REGISTER_PVR); + break; + case REGISTER_PIS_OFFSET: + value = REGISTER_READ(channel, REGISTER_PIS); + break; + case REGISTER_PCR_OFFSET: + value = REGISTER_READ(channel, REGISTER_PCR); + break; + case REGISTER_CCR4_OFFSET: + value = REGISTER_READ(channel, REGISTER_CCR4); + break; + default: + value = 0; + break; + } + + trace_escc2_mem_read(CHANNEL_CHAR(channel), offset, value); + return value; +} + +static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, + unsigned size) +{ + uint8_t offset; + ESCC2State *controller; + ESCC2ChannelState *channel; + + assert(addr < (CHANNEL_COUNT * CHANNEL_LENGTH)); + assert(size == sizeof(uint8_t)); + assert(value <= 0xff); + + controller = opaque; + if (addr < CHANNEL_LENGTH) { + channel = CONTROLLER_CHANNEL_A(controller); + offset = addr; + } else { + channel = CONTROLLER_CHANNEL_B(controller); + offset = addr - CHANNEL_LENGTH; + } + + switch (offset) { + case 0 ... (CHANNEL_FIFO_LENGTH - 1): + channel->fifo_transmit[offset] = value; + break; + case REGISTER_CMDR_OFFSET: + REGISTER_WRITE(channel, REGISTER_CMDR, value); + break; + case REGISTER_MODE_OFFSET: + REGISTER_WRITE(channel, REGISTER_MODE, value); + break; + case REGISTER_TIMR_OFFSET: + REGISTER_WRITE(channel, REGISTER_TIMR, value); + break; + case REGISTER_XON_OFFSET: + REGISTER_WRITE(channel, REGISTER_XON, value); + break; + case REGISTER_XOFF_OFFSET: + REGISTER_WRITE(channel, REGISTER_XOFF, value); + break; + case REGISTER_TCR_OFFSET: + REGISTER_WRITE(channel, REGISTER_TCR, value); + break; + case REGISTER_DAFO_OFFSET: + REGISTER_WRITE(channel, REGISTER_DAFO, value); + break; + case REGISTER_RFC_OFFSET: + REGISTER_WRITE(channel, REGISTER_RFC, value); + break; + case REGISTER_XBCL_OFFSET: + REGISTER_WRITE(channel, REGISTER_XBCL, value); + break; + case REGISTER_XBCH_OFFSET: + REGISTER_WRITE(channel, REGISTER_XBCH, value); + break; + case REGISTER_CCR0_OFFSET: + REGISTER_WRITE(channel, REGISTER_CCR0, value); + break; + case REGISTER_CCR1_OFFSET: + REGISTER_WRITE(channel, REGISTER_CCR1, value); + break; + case REGISTER_CCR2_OFFSET: + REGISTER_WRITE(channel, REGISTER_CCR2, value); + break; + case REGISTER_CCR3_OFFSET: + REGISTER_WRITE(channel, REGISTER_CCR3, value); + break; + case REGISTER_TSAX_OFFSET: + REGISTER_WRITE(channel, REGISTER_TSAX, value); + break; + case REGISTER_TSAR_OFFSET: + REGISTER_WRITE(channel, REGISTER_TSAR, value); + break; + case REGISTER_XCCR_OFFSET: + REGISTER_WRITE(channel, REGISTER_XCCR, value); + break; + case REGISTER_RCCR_OFFSET: + REGISTER_WRITE(channel, REGISTER_RCCR, value); + break; + case REGISTER_BGR_OFFSET: + REGISTER_WRITE(channel, REGISTER_BGR, value); + break; + case REGISTER_TIC_OFFSET: + REGISTER_WRITE(channel, REGISTER_TIC, value); + break; + case REGISTER_MXN_OFFSET: + REGISTER_WRITE(channel, REGISTER_MXN, value); + break; + case REGISTER_MXF_OFFSET: + REGISTER_WRITE(channel, REGISTER_MXF, value); + break; + case REGISTER_IVA_OFFSET: + REGISTER_WRITE(CONTROLLER_CHANNEL_A(controller), REGISTER_IVA, value); + REGISTER_WRITE(CONTROLLER_CHANNEL_B(controller), REGISTER_IVA, value); + break; + case REGISTER_IPC_OFFSET: + REGISTER_WRITE(CONTROLLER_CHANNEL_A(controller), REGISTER_IPC, value); + REGISTER_WRITE(CONTROLLER_CHANNEL_B(controller), REGISTER_IPC, value); + break; + case REGISTER_IMR0_OFFSET: + REGISTER_WRITE(channel, REGISTER_IMR0, value); + break; + case REGISTER_IMR1_OFFSET: + REGISTER_WRITE(channel, REGISTER_IMR1, value); + break; + case REGISTER_PVR_OFFSET: + REGISTER_WRITE(channel, REGISTER_PVR, value); + break; + case REGISTER_PIM_OFFSET: + REGISTER_WRITE(CONTROLLER_CHANNEL_A(controller), REGISTER_PIM, value); + REGISTER_WRITE(CONTROLLER_CHANNEL_B(controller), REGISTER_PIM, value); + break; + case REGISTER_PCR_OFFSET: + REGISTER_WRITE(CONTROLLER_CHANNEL_A(controller), REGISTER_PCR, value); + REGISTER_WRITE(CONTROLLER_CHANNEL_B(controller), REGISTER_PCR, value); + break; + case REGISTER_CCR4_OFFSET: + REGISTER_WRITE(channel, REGISTER_CCR4, value); + break; + default: + /* Registers do not exhaustively cover the addressable region. */ + break; + } + + trace_escc2_mem_write(CHANNEL_CHAR(channel), offset, value); +} + +static void escc2_realize(DeviceState *dev, Error **errp) +{ + unsigned int i; + ESCC2ChannelState *channel; + ESCC2State *controller = ESCC2(dev); + + for (i = 0; i < CHANNEL_COUNT; i++) { + channel = &controller->channel[i]; + channel->controller = controller; + } + + qemu_register_reset(escc2_reset, controller); + escc2_reset(controller); +} + +const MemoryRegionOps escc2_mem_ops = { + .read = escc2_mem_read, + .write = escc2_mem_write, + .impl = { + .min_access_size = 1, + .max_access_size = 1 + }, + .endianness = DEVICE_LITTLE_ENDIAN, +}; + +static void escc2_isa_realize(DeviceState *dev, Error **errp) +{ + ESCC2ISAState *isa = ESCC2_ISA(dev); + ESCC2State *controller = &isa->controller; + + if (isa->iobase == -1) { + error_setg(errp, "Base address must be provided."); + return; + } + + object_property_set_bool(OBJECT(controller), true, "realized", errp); + if (*errp) { + return; + } + + memory_region_init_io(&controller->io, OBJECT(dev), &escc2_mem_ops, + controller, "escc2", CHANNEL_COUNT * CHANNEL_LENGTH); + isa_register_ioport(ISA_DEVICE(dev), &controller->io, isa->iobase); +} + +static void escc2_unrealize(DeviceState *dev) +{ + ESCC2State *controller = ESCC2(dev); + qemu_unregister_reset(escc2_reset, controller); +} + +static void escc2_isa_instance_init(Object *o) +{ + ESCC2ISAState *self = ESCC2_ISA(o); + object_initialize_child(o, "escc2", &self->controller, + sizeof(self->controller), TYPE_ESCC2, &error_abort, NULL); + qdev_alias_all_properties(DEVICE(&self->controller), o); +} + +static Property escc2_properties[] = { + DEFINE_PROP_END_OF_LIST() +}; + +static Property escc2_isa_properties[] = { + DEFINE_PROP_UINT32("iobase", ESCC2ISAState, iobase, -1), + DEFINE_PROP_END_OF_LIST() +}; + +static void escc2_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + + dc->user_creatable = false; + dc->realize = escc2_realize; + dc->unrealize = escc2_unrealize; + device_class_set_props(dc, escc2_properties); +} + +static void escc2_isa_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + + device_class_set_props(dc, escc2_isa_properties); + dc->realize = escc2_isa_realize; +} + +static const TypeInfo escc2_info = { + .name = TYPE_ESCC2, + .parent = TYPE_DEVICE, + .instance_size = sizeof(ESCC2State), + .class_init = escc2_class_init +}; + +static const TypeInfo escc2_isa_info = { + .name = TYPE_ESCC2_ISA, + .parent = TYPE_ISA_DEVICE, + .instance_size = sizeof(ESCC2ISAState), + .instance_init = escc2_isa_instance_init, + .class_init = escc2_isa_class_init +}; + +static void escc2_types(void) +{ + type_register_static(&escc2_info); + type_register_static(&escc2_isa_info); +} + +type_init(escc2_types); diff --git a/hw/char/trace-events b/hw/char/trace-events index d20eafd56f..65c176f582 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -56,6 +56,10 @@ escc_sunkbd_event_out(int ch) "Translated keycode 0x%2.2x" escc_kbd_command(int val) "Command %d" escc_sunmouse_event(int dx, int dy, int buttons_state) "dx=%d dy=%d buttons=0x%01x" +# escc2.c +escc2_mem_read(char channel, uint32_t addr, uint8_t value) "channel %c addr 0x%x value 0x%x" +escc2_mem_write(char channel, uint32_t addr, uint8_t value) "channel %c addr 0x%x value 0x%x" + # pl011.c pl011_irq_state(int level) "irq state %d" pl011_read(uint32_t addr, uint32_t value) "addr 0x%08x value 0x%08x" diff --git a/include/hw/char/escc2.h b/include/hw/char/escc2.h new file mode 100644 index 0000000000..ca2e34da3f --- /dev/null +++ b/include/hw/char/escc2.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * QEMU Enhanced Serial Communication Controller (ESCC2 v3.2). + * Modelled according to the user manual (version 07.96). + * + * Copyright (C) 2020 Jasper Lowell + */ +#ifndef HW_ESCC2_H +#define HW_ESCC2_H + +#define TYPE_ESCC2 "ESCC2" +#define ESCC2(obj) OBJECT_CHECK(ESCC2State, (obj), TYPE_ESCC2) + +#define TYPE_ESCC2_ISA "ESCC2_ISA" +#define ESCC2_ISA(obj) OBJECT_CHECK(ESCC2ISAState, (obj), TYPE_ESCC2_ISA) + +#endif /* HW_ESCC2_H */ From patchwork Wed Jun 17 08:23:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasper Lowell X-Patchwork-Id: 11609411 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D75C4912 for ; Wed, 17 Jun 2020 08:27:31 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9E0E32085B for ; Wed, 17 Jun 2020 08:27:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bt.com header.i=@bt.com header.b="EQ2VJsXn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9E0E32085B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bt.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:52964 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlTPu-0001du-Tf for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jun 2020 04:27:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54470) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTNC-00054A-P4 for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:43 -0400 Received: from smtpe1.intersmtp.com ([213.121.35.75]:50467) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlTN9-0003w1-Lw for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:42 -0400 Received: from tpw09926dag05h.domain1.systemhost.net (10.9.202.32) by BWP09926080.bt.com (10.36.82.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1713.5; Wed, 17 Jun 2020 09:24:17 +0100 Received: from tpw09926dag12g.domain1.systemhost.net (10.9.212.28) by tpw09926dag05h.domain1.systemhost.net (10.9.202.32) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 17 Jun 2020 09:24:36 +0100 Received: from RDW083A009ED65.bt.com (10.187.98.35) by tpw09926dag12g.domain1.systemhost.net (10.9.212.28) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Wed, 17 Jun 2020 09:24:36 +0100 Received: from GBR01-CWL-obe.outbound.protection.outlook.com (104.47.20.57) by smtpe1.intersmtp.com (62.239.224.236) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:17:12 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EhXtrU9p8EgR3vl4cwCtXh4znYeaXbvpk7C7ApVipOF9UF/y2cnV58STEvvrbWpzj6W62l7H5IOGUaHzuBLiaxeh9IrqvBgZAbAzjdJz73DUriZsCyKSESyIYzSl3hbPf5w6iO7celns9ceh61ST205say2Oe36fEaF4gzVSGM2gwocBIQFSfqYzDGqfUhmZ0CW/Iw44MmwWnYOlJ1eyAmmvKxIzstgaG8CzPb394sLaRth+zWNB22TG0EU1mQUSduZFPEP4mvqmCMknwrOlKVxFJzuCcrlwxka4sovjEkduZ/JSMD8xZNAo/IjdS0P7sqvb2GXiHJ1vsny34GGd1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=54eo+T7L13Qlsrynt9C1L9gHU9Mlb0ek8Y+XSbMCeqI=; b=iQQQBa480h+c8Tmqh3JRGYPl/7pU//sj8DeLiAvxVIiPlfwU1hGw6gJRyKxzZhFpL3rTYNC+IMz9rPISwCH3RXjLE+6kAsq301JvthNZLwrmpT7+jj6UsAyjwfyVdFD/oQLpqzmQuxuExEj4Jb09tnYVb+LohTdiInqc4E9Q7R6IcD90FiinXMKcoYcSBoQA3bwbdQXyBcRZifBX9MUSIiMCkvTohSM4KU+gsIDbcY2xprzysYHat09bpKF+jEBBUbcZAfkp39cbWB3hiyCUzkFdbnerH13nfNMMUUHFgMtv1Am4M6cGmfZvtHKLEXREHe4BwOeEUGZtpbM6r8Cdyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bt.com; dmarc=pass action=none header.from=bt.com; dkim=pass header.d=bt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bt.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=54eo+T7L13Qlsrynt9C1L9gHU9Mlb0ek8Y+XSbMCeqI=; b=EQ2VJsXneNf6L3uxTe12UXy7a+4qraB/AyTpfQDwWVBnxwElpP8x53cIuUFARWMVEIX3kqtVkZwdwPyJY9jD1pH+p/nMRyGTV27NPwBpMwkOF7Hsg59O51nPqAPaVmfLdaKtzoYQr8A/etf/mS3BsDx5IUvy1NceZD5uMJ1/0mI= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bt.com; Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) by CWXP123MB3255.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:43::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Wed, 17 Jun 2020 08:24:30 +0000 Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b]) by CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b%7]) with mapi id 15.20.3109.021; Wed, 17 Jun 2020 08:24:30 +0000 From: Jasper Lowell To: Subject: [PATCH 2/8] hw/char/escc2: Handle interrupt generation Date: Wed, 17 Jun 2020 18:23:56 +1000 Message-ID: <20200617082402.242631-3-jasper.lowell@bt.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200617082402.242631-1-jasper.lowell@bt.com> References: <20200617082402.242631-1-jasper.lowell@bt.com> X-ClientProxiedBy: SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) To CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.128.24.45) by SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21 via Frontend Transport; Wed, 17 Jun 2020 08:24:27 +0000 X-Mailer: git-send-email 2.26.2 X-Originating-IP: [185.128.24.45] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3ecfa6c9-08b3-4706-44f2-08d81297db59 X-MS-TrafficTypeDiagnostic: CWXP123MB3255: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-Antispam-2: 1 X-MS-Oob-TLC-OOBClassifiers: OLM:3173; X-Forefront-PRVS: 04371797A5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: w0sOn0wXBCrhoR1S+fgeVHSOHRDUhFVph8SP5fcAraTnCbc/UiU+9EZGZgScjZ0h8bm33h+59rWEqI302rgJjfz0cWMNhQXFVPCeRR8HCKqYrPPu97kwIQOXfw1u58uwR5+iZQs4j9P7R1bozk8Vw04F4/qTcNBL4MkzQQxvfizz8HVCtuuZXX9yH5FxUtSt91tQeWBTexS9KogfFVDj2kNzTAC+/7YKTIWa90IpCtEke0MLhqexIEfHRjNk9K2HNCz2To/OPFIWwlU9oeAbwQYyBwvu3bAZpVZGTEsVEtxmk59c3H0F5M+T0iedR2QtelppPNfXVupFbM01d7CA+fua+eBWhhLz7ikbhYvWHU8xaJPq/aNgq2TBsuYDLQuh X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(366004)(346002)(376002)(39860400002)(44832011)(1076003)(8676002)(2616005)(316002)(8936002)(6666004)(6486002)(956004)(2906002)(5660300002)(83380400001)(6506007)(69590400007)(26005)(6512007)(36756003)(6916009)(186003)(16526019)(478600001)(52116002)(66556008)(66476007)(4326008)(66946007)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 0Z7sW5Mzp/G2aDTk9uq8Xod6fKOrohwhDLl+qDIuJsLAvIs9Wb2b76Pa+yFdAzdSQQTxKthSCZz5uiS2nLXJsS/+UibZ0XLw+WABmlsq8UidAinA3RItZZoc/BYqWsbJaefxKFDbSWQ8IftY/WCAZfWickSp0/1ISjFpDgf57tcuCe8ShsDEhTxgwW/s3vULdiE+FiaMxXSgfdeO5ANCECFIs1wG+VUqYnr4ZggAjDgmMEL7UCxlv5jPzRuRubJsV5b57FpQsWLqWUqI/YCC5SQReZPjCio+k0ZPsMd1E0HLsXUBmQDRptrP40oGk/OlolKnu85fLicmHfEtKAxGCfMHLJdadqKjBfDEhruZ8OJ1bnoHk9e1CIkRlecj/GcmvpYhnBtdS3Twtz1egmN8Ve7TDTfTwDNCo42c6aK+GS0AhLuhd+8K7fXPGIY3yyRV8Bl2XmzpHxnX+ZGF9h2hZ9kNfWhOS4Iqgmw3HRMmF1k= X-MS-Exchange-CrossTenant-Network-Message-Id: 3ecfa6c9-08b3-4706-44f2-08d81297db59 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2020 08:24:30.5655 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a7f35688-9c00-4d5e-ba41-29f146377ab0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SNw/dj7WkJhjhDS+3VmtvmBmrSrwYbFuJhPMjzb4CHtNZ23Pg533AYW7dLCyckIcdlVn+AeXW/89KSva9jDiHw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP123MB3255 X-OriginatorOrg: bt.com Received-SPF: pass client-ip=213.121.35.75; envelope-from=jasper.lowell@bt.com; helo=smtpe1.intersmtp.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 04:24:37 X-ACL-Warn: Detected OS = Windows 7 or 8 [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tony.nguyen@bt.com, mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com, Jasper Lowell Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jasper Lowell --- hw/char/escc2.c | 88 ++++++++++++++++++++++++++++++++++++++++++++ hw/char/trace-events | 1 + 2 files changed, 89 insertions(+) diff --git a/hw/char/escc2.c b/hw/char/escc2.c index 94528b8a4c..926346482f 100644 --- a/hw/char/escc2.c +++ b/hw/char/escc2.c @@ -8,6 +8,7 @@ #include "qemu/osdep.h" #include "hw/char/escc2.h" +#include "hw/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" #include "qapi/error.h" @@ -55,6 +56,13 @@ /* CCR0. */ #define REGISTER_CCR0_OFFSET 0x2c +#define REGISTER_CCR0_PU 0x80 +#define REGISTER_CCR0_MCE 0x40 +#define REGISTER_CCR0_SC2 0x10 +#define REGISTER_CCR0_SC1 0x8 +#define REGISTER_CCR0_SC0 0x4 +#define REGISTER_CCR0_SM1 0x2 +#define REGISTER_CCR0_SM0 0x1 /* CCR1. */ #define REGISTER_CCR1_OFFSET 0x2d @@ -94,12 +102,23 @@ /* GIS. */ #define REGISTER_GIS_OFFSET 0x38 +#define REGISTER_GIS_PI 0x80 +#define REGISTER_GIS_ISA1 0x8 +#define REGISTER_GIS_ISA0 0x4 +#define REGISTER_GIS_ISB1 0x2 +#define REGISTER_GIS_ISB0 0x1 /* IVA. */ #define REGISTER_IVA_OFFSET 0x38 /* IPC. */ #define REGISTER_IPC_OFFSET 0x39 +#define REGISTER_IPC_VIS 0x80 +#define REGISTER_IPC_SLA1 0x10 +#define REGISTER_IPC_SLA0 0x8 +#define REGISTER_IPC_CASM 0x4 +#define REGISTER_IPC_IC1 0x2 +#define REGISTER_IPC_IC0 0x1 /* ISR0. */ #define REGISTER_ISR0_OFFSET 0x3a @@ -207,6 +226,7 @@ struct ESCC2State { DeviceState parent; MemoryRegion io; + qemu_irq irq; ESCC2ChannelState channel[CHANNEL_COUNT]; }; @@ -218,9 +238,62 @@ struct ESCC2State { typedef struct ESCC2ISAState { ISADevice parent; uint32_t iobase; + uint32_t irq; struct ESCC2State controller; } ESCC2ISAState; +static void escc2_irq_update(ESCC2State *controller) +{ + bool power; + uint8_t gis; + ESCC2ChannelState *a, *b; + + gis = 0; + a = CONTROLLER_CHANNEL_A(controller); + b = CONTROLLER_CHANNEL_B(controller); + + /* + * Interrupts are not propagated to the CPU when in power-down mode. There + * is an exception for interrupts from the universal port. + */ + power = REGISTER_READ(a, REGISTER_CCR0) & REGISTER_CCR0_PU; + + if (REGISTER_READ(a, REGISTER_ISR0) & ~(REGISTER_READ(a, REGISTER_IMR0))) { + gis |= REGISTER_GIS_ISA0; + } + if (REGISTER_READ(a, REGISTER_ISR1) & ~(REGISTER_READ(a, REGISTER_IMR1))) { + gis |= REGISTER_GIS_ISA1; + } + + if (REGISTER_READ(b, REGISTER_ISR0) & ~(REGISTER_READ(b, REGISTER_IMR0))) { + gis |= REGISTER_GIS_ISB0; + } + if (REGISTER_READ(b, REGISTER_ISR1) & ~(REGISTER_READ(b, REGISTER_IMR1))) { + gis |= REGISTER_GIS_ISB1; + } + + if (REGISTER_READ(a, REGISTER_PIS) & ~(REGISTER_READ(a, REGISTER_PIM))) { + gis |= REGISTER_GIS_PI; + /* + * Ensure that interrupts are propagated even if the controller is in + * power-down mode. + */ + power = true; + } + + /* GIS is accessible from either channel and must be synchronised. */ + REGISTER_WRITE(a, REGISTER_GIS, gis); + REGISTER_WRITE(b, REGISTER_GIS, gis); + + if (gis && power) { + qemu_irq_raise(controller->irq); + } else { + qemu_irq_lower(controller->irq); + } + + trace_escc2_irq_update(gis); +} + static void escc2_channel_reset(ESCC2ChannelState *channel) { unsigned int i; @@ -320,15 +393,22 @@ static uint64_t escc2_mem_read(void *opaque, hwaddr addr, unsigned size) break; case REGISTER_ISR0_OFFSET: value = REGISTER_READ(channel, REGISTER_ISR0); + REGISTER_WRITE(channel, REGISTER_ISR0, 0); + escc2_irq_update(controller); break; case REGISTER_ISR1_OFFSET: value = REGISTER_READ(channel, REGISTER_ISR1); + REGISTER_WRITE(channel, REGISTER_ISR1, 0); + escc2_irq_update(controller); break; case REGISTER_PVR_OFFSET: value = REGISTER_READ(channel, REGISTER_PVR); break; case REGISTER_PIS_OFFSET: value = REGISTER_READ(channel, REGISTER_PIS); + REGISTER_WRITE(CONTROLLER_CHANNEL_A(controller), REGISTER_PIS, 0); + REGISTER_WRITE(CONTROLLER_CHANNEL_B(controller), REGISTER_PIS, 0); + escc2_irq_update(controller); break; case REGISTER_PCR_OFFSET: value = REGISTER_READ(channel, REGISTER_PCR); @@ -506,6 +586,13 @@ static void escc2_isa_realize(DeviceState *dev, Error **errp) return; } + if (isa->irq == -1) { + error_setg(errp, "IRQ must be provided."); + return; + } + + isa_init_irq(ISA_DEVICE(dev), &controller->irq, isa->irq); + object_property_set_bool(OBJECT(controller), true, "realized", errp); if (*errp) { return; @@ -536,6 +623,7 @@ static Property escc2_properties[] = { static Property escc2_isa_properties[] = { DEFINE_PROP_UINT32("iobase", ESCC2ISAState, iobase, -1), + DEFINE_PROP_UINT32("irq", ESCC2ISAState, irq, -1), DEFINE_PROP_END_OF_LIST() }; diff --git a/hw/char/trace-events b/hw/char/trace-events index 65c176f582..b4f4f30815 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -57,6 +57,7 @@ escc_kbd_command(int val) "Command %d" escc_sunmouse_event(int dx, int dy, int buttons_state) "dx=%d dy=%d buttons=0x%01x" # escc2.c +escc2_irq_update(uint8_t gis) "value 0x%x" escc2_mem_read(char channel, uint32_t addr, uint8_t value) "channel %c addr 0x%x value 0x%x" escc2_mem_write(char channel, uint32_t addr, uint8_t value) "channel %c addr 0x%x value 0x%x" From patchwork Wed Jun 17 08:23:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasper Lowell X-Patchwork-Id: 11609399 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0F36E912 for ; Wed, 17 Jun 2020 08:26:08 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CA83420679 for ; Wed, 17 Jun 2020 08:26:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bt.com header.i=@bt.com header.b="vS9ULolJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CA83420679 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bt.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:47992 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlTOZ-0007qR-2c for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jun 2020 04:26:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54542) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTNK-000594-5i for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:50 -0400 Received: from smtpe1.intersmtp.com ([62.239.224.237]:4615) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlTNH-0003wx-AP for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:49 -0400 Received: from tpw09926dag09h.domain1.systemhost.net (10.9.202.48) by RDW083A010ED66.bt.com (10.187.98.36) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:23:10 +0100 Received: from tpw09926dag12g.domain1.systemhost.net (10.9.212.28) by tpw09926dag09h.domain1.systemhost.net (10.9.202.48) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 17 Jun 2020 09:24:43 +0100 Received: from RDW083A009ED65.bt.com (10.187.98.35) by tpw09926dag12g.domain1.systemhost.net (10.9.212.28) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Wed, 17 Jun 2020 09:24:43 +0100 Received: from GBR01-CWL-obe.outbound.protection.outlook.com (104.47.20.57) by smtpe1.intersmtp.com (62.239.224.236) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:17:17 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LDILsuS4QW0q4XBEMpCkrtcRWLGEmZoKBjLfiTFYPgmDpqL3ZINCQ+eG7l12GemuUQ7NryI2qRUHlotV/txO/eEz3KmthZWQz5amt4g/zlvbs2DhFFFdkGXAkBE44LmdaSAcDwOBauOTT4pfPbSVzDbcySMFWK8clawOM/eS6AJGYqkDslETHvDgAWPby7PstmZ41FsJNNN00AOTp5ipIlsWJJVNZ0VXA2ia/Dym39Rgzf0VzOoLtD0HevEiS5eyLuoXPMTkIwNNZQAPUsjwqySqmK3gMG0+Rh65IvHYW7Y03hXgnyNGoeqEO3ukqKu1usLGmcY/vcE7tScbOegNrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=F9X5dNrMjOPz/FVOwvphEHPAlRFPLy4Up+BuUxBM4LY=; b=YKO3yaR8eC3BKD/uiF9WcNtgHUZQcj2tfJXFWmrr5ZmvLUBSjSYzP6V/0CqIayUbeatSDNq3XzPJIERtQlNFwZfWoCt/f17VJ20SaHxDi0U18M0cbwfOIEPWBudfzJ0t1uSynbcqY5xJoFuc3WvtJTIPtAOXDil32ey5vFg59U3xGxxPq7PvcBdpX+bRxp/ILwDRbHPloalf/Md7q94cZ0RAi/ZVbtXcTrAifA52vrpi3rbK7ycGLLo8hmhamLXVcsf4E9zh2QG5RBMeiS+eRu9FzuhiyUKQQZezwHXF+ItaEXm5DXcjeHSSpHNCJrAcw0LPj9JRlI+erWFBuPu55w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bt.com; dmarc=pass action=none header.from=bt.com; dkim=pass header.d=bt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bt.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=F9X5dNrMjOPz/FVOwvphEHPAlRFPLy4Up+BuUxBM4LY=; b=vS9ULolJV4W1WP99QiTqcRg9PdGDq4lwiPCALgeyMohKiad04/D/eywdfzUzg1gT1xxxbxwdMmPdP0/XN9IWcY3PMjZtA0B+qHOk+0Ni8CDFjKWg4ajiA9qe9fsm1ztSPFhg0Tm4bl0440Flh+ouXlp4zQ8hWqrT05MlNvTRB28= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bt.com; Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) by CWXP123MB3255.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:43::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Wed, 17 Jun 2020 08:24:34 +0000 Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b]) by CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b%7]) with mapi id 15.20.3109.021; Wed, 17 Jun 2020 08:24:34 +0000 From: Jasper Lowell To: Subject: [PATCH 3/8] hw/char/escc2: Add character device backend Date: Wed, 17 Jun 2020 18:23:57 +1000 Message-ID: <20200617082402.242631-4-jasper.lowell@bt.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200617082402.242631-1-jasper.lowell@bt.com> References: <20200617082402.242631-1-jasper.lowell@bt.com> X-ClientProxiedBy: SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) To CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.128.24.45) by SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21 via Frontend Transport; Wed, 17 Jun 2020 08:24:31 +0000 X-Mailer: git-send-email 2.26.2 X-Originating-IP: [185.128.24.45] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 14455925-06ce-47c5-ccd7-08d81297dd98 X-MS-TrafficTypeDiagnostic: CWXP123MB3255: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-Antispam-2: 1 X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-Forefront-PRVS: 04371797A5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OeTx9us+7I8I0dOYF0l1fAGam4Xl10gcs5zaoSg1CoGRQ12qtv38lRnD1CByUkfps+HLphNohyTzFI7Y9dwPFE3YllA2CwL7J0b4gXNgQyAnHZUdm/Drdtj++g7F9AZmufGOcRbfnHabw0q4dLkAqC9C/WYqVJLeiPXQh8/gxJdBZEN5iuoDIURf1WQxv6fs7sGPaMOajsiHY9dzkcUZ/thXDLN2j7nuQkztHmbhmMTMElgROLgMAqv1wpOKs+lJ9ZrYzMTZcG+FG9ERLIdVCH3HV0ASbO+u3vK044BSN5IpeV0HnECIUlBa2PVg8/ddk5uGTftNECELq79oBfQCLzrGiA9WPHTFUQg1ghj0cHw11VgBeneZYg2yI6kOzDsorOhYs4uzcOw/+fdHMiiEAbD2v7AnGnKjeqP18eCbPVo= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(366004)(346002)(376002)(39860400002)(44832011)(1076003)(8676002)(2616005)(316002)(8936002)(6666004)(6486002)(956004)(2906002)(5660300002)(83380400001)(6506007)(69590400007)(26005)(6512007)(36756003)(6916009)(186003)(16526019)(478600001)(52116002)(66556008)(66476007)(4326008)(66946007)(86362001)(21314003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: UfEFAbOkW2yVeDYsdoyOMJRoa46cZor2uzAB+x30kQrtOndiz+tnIIHqH3Ypl0k+vi13jjYhJAs+FDtLq7mJ9e02A+JWHD0VT1YTwP2x3QM5DaKsrxMChKvHFTclpi9HzcT/Qb57nH/5Bi2H/BvkbWZQwdO02h9o6e9qCmtJ6O0bdOugKPYQSBGj/1zGXuhNxxZiZYC7S3pubcwLRHvYByE9TsE5uOlmgi6x3bvxBx2dwkiasT4PYdMdOWSv3GqxS/uTPDWY4bPoinEO30U86SED6mND2B4BXYB2c5feGw7TM19L23eJrJ0HjJOPScF96qxsxoUEtG44oZ6IIaqmhhnbxYivys6MelhPvrciQc0Vm0LWrrQmzGDEsekTLUlJr4WWP0XrOhG1rRhSB61PfU3f7PVLadmnMSssUibkTpEFGWzTSWz/hafijvM9133WmtKqfyoT/OGG3DDL5uRvG/VTA1/9VfrrOFLZmSms47c= X-MS-Exchange-CrossTenant-Network-Message-Id: 14455925-06ce-47c5-ccd7-08d81297dd98 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2020 08:24:34.3583 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a7f35688-9c00-4d5e-ba41-29f146377ab0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JG2vXWoabi+K3IvHx4wAJwEnIwdL+Xl/StdLg92ejtljQInHjHSEY08mXOY9sjJIGN0kPO9aJAWqJzQ73hAXhQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP123MB3255 X-OriginatorOrg: bt.com Received-SPF: pass client-ip=62.239.224.237; envelope-from=jasper.lowell@bt.com; helo=smtpe1.intersmtp.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 04:24:45 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tony.nguyen@bt.com, mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com, Jasper Lowell Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jasper Lowell --- hw/char/escc2.c | 234 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) diff --git a/hw/char/escc2.c b/hw/char/escc2.c index 926346482f..e16049ce4d 100644 --- a/hw/char/escc2.c +++ b/hw/char/escc2.c @@ -7,6 +7,8 @@ */ #include "qemu/osdep.h" +#include "chardev/char-fe.h" +#include "chardev/char-serial.h" #include "hw/char/escc2.h" #include "hw/irq.h" #include "hw/isa/isa.h" @@ -17,6 +19,13 @@ /* STAR. */ #define REGISTER_STAR_OFFSET 0x20 +#define REGISTER_STAR_XDOV 0x80 +#define REGISTER_STAR_XFW 0x40 +#define REGISTER_STAR_RFNE 0x20 +#define REGISTER_STAR_FCS 0x10 +#define REGISTER_STAR_TEC 0x8 +#define REGISTER_STAR_CEC 0x4 +#define REGISTER_STAR_CTS 0x2 /* CMDR. */ #define REGISTER_CMDR_OFFSET 0x20 @@ -38,9 +47,40 @@ /* DAFO. */ #define REGISTER_DAFO_OFFSET 0x27 +#define REGISTER_DAFO_XBRK 0x40 +#define REGISTER_DAFO_STOP 0x20 +#define REGISTER_DAFO_PAR1 0x10 +#define REGISTER_DAFO_PAR0 0x8 +#define REGISTER_DAFO_PARE 0x4 +#define REGISTER_DAFO_CHL1 0x2 +#define REGISTER_DAFO_CHL0 0x1 + +#define REGISTER_DAFO_PAR_MASK \ + (REGISTER_DAFO_PAR1 | REGISTER_DAFO_PAR0) +#define REGISTER_DAFO_PAR_SPACE 0x0 +#define REGISTER_DAFO_PAR_ODD (REGISTER_DAFO_PAR0) +#define REGISTER_DAFO_PAR_EVEN (REGISTER_DAFO_PAR1) +#define REGISTER_DAFO_PAR_MARK \ + (REGISTER_DAFO_PAR1 | REGISTER_DAFO_PAR0) +#define REGISTER_DAFO_CHL_MASK \ + (REGISTER_DAFO_CHL1 | REGISTER_DAFO_CHL0) +#define REGISTER_DAFO_CHL_CS8 0x0 +#define REGISTER_DAFO_CHL_CS7 (REGISTER_DAFO_CHL0) +#define REGISTER_DAFO_CHL_CS6 (REGISTER_DAFO_CHL1) +#define REGISTER_DAFO_CHL_CS5 \ + (REGISTER_DAFO_CHL1 | REGISTER_DAFO_CHL0) /* RFC. */ #define REGISTER_RFC_OFFSET 0x28 +#define REGISTER_RFC_DPS 0x40 +#define REGISTER_RFC_DXS 0x20 +#define REGISTER_RFC_RFDF 0x10 +#define REGISTER_RFC_RFTH1 0x8 +#define REGISTER_RFC_RFTH0 0x4 +#define REGISTER_RFC_TCDE 0x1 + +#define REGISTER_RFC_RFTH_MASK \ + (REGISTER_RFC_RFTH1 | REGISTER_RFC_RFTH0) /* RBCL. */ #define REGISTER_RBCL_OFFSET 0x2a @@ -122,6 +162,14 @@ /* ISR0. */ #define REGISTER_ISR0_OFFSET 0x3a +#define REGISTER_ISR0_TCD 0x80 +#define REGISTER_ISR0_TIME 0x40 +#define REGISTER_ISR0_PERR 0x20 +#define REGISTER_ISR0_FERR 0x10 +#define REGISTER_ISR0_PLLA 0x8 +#define REGISTER_ISR0_CDSC 0x4 +#define REGISTER_ISR0_RFO 0x2 +#define REGISTER_ISR0_RPF 0x1 /* IMR0. */ #define REGISTER_IMR0_OFFSET 0x3a @@ -196,6 +244,8 @@ typedef struct ESCC2State ESCC2State; typedef struct ESCC2ChannelState { ESCC2State *controller; + CharBackend chardev; + /* * The SAB 82532 ships with 64 byte FIFO queues for transmitting and * receiving but only 32 bytes are addressable. @@ -294,6 +344,102 @@ static void escc2_irq_update(ESCC2State *controller) trace_escc2_irq_update(gis); } +static void escc2_channel_irq_event(ESCC2ChannelState *channel, + uint8_t status_register, uint8_t event) +{ + /* + * Ensure that event does not have more than one bit set when calling this + * function. + */ + uint8_t mask, tmp; + + switch (status_register) { + case REGISTER_ISR0: + mask = REGISTER_READ(channel, REGISTER_IMR0); + break; + case REGISTER_ISR1: + mask = REGISTER_READ(channel, REGISTER_IMR1); + break; + default: + g_assert_not_reached(); + } + + if ((event & ~(mask)) + || (REGISTER_READ(channel, REGISTER_IPC) & REGISTER_IPC_VIS)) { + tmp = REGISTER_READ(channel, status_register); + tmp |= event; + REGISTER_WRITE(channel, status_register, tmp); + } + + if (event & ~(mask)) { + escc2_irq_update(channel->controller); + } +} + +static void escc2_channel_parameters_update(ESCC2ChannelState *channel) +{ + uint8_t dafo; + QEMUSerialSetParams ssp; + + if (!qemu_chr_fe_backend_connected(&channel->chardev)) { + return; + } + + /* Check if parity is enabled. */ + dafo = REGISTER_READ(channel, REGISTER_DAFO); + if (dafo & REGISTER_DAFO_PARE) { + /* Determine the parity. */ + switch (dafo & REGISTER_DAFO_PAR_MASK) { + case REGISTER_DAFO_PAR_SPACE: + case REGISTER_DAFO_PAR_MARK: + /* + * XXX: QEMU doesn't support stick parity yet. Silently fail and + * fall to the next case. + */ + case REGISTER_DAFO_PAR_ODD: + ssp.parity = 'O'; + break; + case REGISTER_DAFO_PAR_EVEN: + ssp.parity = 'E'; + break; + default: + g_assert_not_reached(); + } + } else { + ssp.parity = 'N'; + } + + /* Determine the number of data bits. */ + switch (dafo & REGISTER_DAFO_CHL_MASK) { + case REGISTER_DAFO_CHL_CS8: + ssp.data_bits = 8; + break; + case REGISTER_DAFO_CHL_CS7: + ssp.data_bits = 7; + break; + case REGISTER_DAFO_CHL_CS6: + ssp.data_bits = 6; + break; + case REGISTER_DAFO_CHL_CS5: + ssp.data_bits = 5; + break; + default: + g_assert_not_reached(); + } + + /* Determine the number of stop bits. */ + if (dafo & REGISTER_DAFO_STOP) { + ssp.stop_bits = 2; + } else { + ssp.stop_bits = 1; + } + + /* XXX */ + ssp.speed = 0; + + qemu_chr_fe_ioctl(&channel->chardev, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp); +} + static void escc2_channel_reset(ESCC2ChannelState *channel) { unsigned int i; @@ -469,6 +615,7 @@ static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, break; case REGISTER_DAFO_OFFSET: REGISTER_WRITE(channel, REGISTER_DAFO, value); + escc2_channel_parameters_update(channel); break; case REGISTER_RFC_OFFSET: REGISTER_WRITE(channel, REGISTER_RFC, value); @@ -484,6 +631,7 @@ static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, break; case REGISTER_CCR1_OFFSET: REGISTER_WRITE(channel, REGISTER_CCR1, value); + escc2_channel_parameters_update(channel); break; case REGISTER_CCR2_OFFSET: REGISTER_WRITE(channel, REGISTER_CCR2, value); @@ -505,9 +653,11 @@ static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, break; case REGISTER_BGR_OFFSET: REGISTER_WRITE(channel, REGISTER_BGR, value); + escc2_channel_parameters_update(channel); break; case REGISTER_TIC_OFFSET: REGISTER_WRITE(channel, REGISTER_TIC, value); + qemu_chr_fe_write_all(&channel->chardev, (uint8_t *)&value, 1); break; case REGISTER_MXN_OFFSET: REGISTER_WRITE(channel, REGISTER_MXN, value); @@ -542,6 +692,7 @@ static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, break; case REGISTER_CCR4_OFFSET: REGISTER_WRITE(channel, REGISTER_CCR4, value); + escc2_channel_parameters_update(channel); break; default: /* Registers do not exhaustively cover the addressable region. */ @@ -551,6 +702,74 @@ static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, trace_escc2_mem_write(CHANNEL_CHAR(channel), offset, value); } +static unsigned int escc2_channel_rfifo_threshold(ESCC2ChannelState *channel) +{ + unsigned int threshold; + + switch (REGISTER_READ(channel, REGISTER_RFC) & REGISTER_RFC_RFTH_MASK) { + case 0: + threshold = 1; + break; + case 1: + threshold = 4; + break; + case 2: + threshold = 16; + break; + case 3: + threshold = 32; + break; + default: + g_assert_not_reached(); + } + + return threshold; +} + +static int escc2_channel_chardev_can_receive(void *opaque) +{ + uint8_t tmp; + ESCC2ChannelState *channel = opaque; + unsigned int threshold = escc2_channel_rfifo_threshold(channel); + + tmp = REGISTER_READ(channel, REGISTER_RBCL); + if (threshold > tmp) { + return threshold - tmp; + } else { + return 0; + } +} + +static void escc2_channel_chardev_receive(void *opaque, const uint8_t *buf, + int size) +{ + uint8_t tmp, rbcl; + unsigned int i, nbytes; + ESCC2ChannelState *channel = opaque; + + /* Determine the number of characters that can be safely consumed. */ + rbcl = REGISTER_READ(channel, REGISTER_RBCL); + if (rbcl + size > CHANNEL_FIFO_LENGTH) { + nbytes = CHANNEL_FIFO_LENGTH - rbcl; + } else { + nbytes = size; + } + + /* Consume characters. */ + for (i = 0; i < nbytes; i++) { + channel->fifo_receive[rbcl + i] = buf[i]; + } + REGISTER_WRITE(channel, REGISTER_RBCL, rbcl + nbytes); + + tmp = REGISTER_READ(channel, REGISTER_STAR); + tmp |= REGISTER_STAR_RFNE; + REGISTER_WRITE(channel, REGISTER_STAR, tmp); + + if (escc2_channel_chardev_can_receive(channel) == 0) { + escc2_channel_irq_event(channel, REGISTER_ISR0, REGISTER_ISR0_RPF); + } +} + static void escc2_realize(DeviceState *dev, Error **errp) { unsigned int i; @@ -560,6 +779,13 @@ static void escc2_realize(DeviceState *dev, Error **errp) for (i = 0; i < CHANNEL_COUNT; i++) { channel = &controller->channel[i]; channel->controller = controller; + + if (qemu_chr_fe_backend_connected(&channel->chardev)) { + qemu_chr_fe_set_handlers(&channel->chardev, + escc2_channel_chardev_can_receive, + escc2_channel_chardev_receive, NULL, NULL, channel, NULL, + true); + } } qemu_register_reset(escc2_reset, controller); @@ -605,7 +831,13 @@ static void escc2_isa_realize(DeviceState *dev, Error **errp) static void escc2_unrealize(DeviceState *dev) { + unsigned int i; ESCC2State *controller = ESCC2(dev); + + for (i = 0; i < CHANNEL_COUNT; i++) { + qemu_chr_fe_deinit(&controller->channel[i].chardev, false); + } + qemu_unregister_reset(escc2_reset, controller); } @@ -618,6 +850,8 @@ static void escc2_isa_instance_init(Object *o) } static Property escc2_properties[] = { + DEFINE_PROP_CHR("chardevA", ESCC2State, channel[CHANNEL_A].chardev), + DEFINE_PROP_CHR("chardevB", ESCC2State, channel[CHANNEL_B].chardev), DEFINE_PROP_END_OF_LIST() }; From patchwork Wed Jun 17 08:23:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasper Lowell X-Patchwork-Id: 11609413 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D348460D for ; Wed, 17 Jun 2020 08:28:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 59C7D2085B for ; Wed, 17 Jun 2020 08:28:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bt.com header.i=@bt.com header.b="CMwMwHEQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 59C7D2085B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bt.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:55306 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlTRF-0002cr-EM for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jun 2020 04:28:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54568) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTNM-0005CQ-7W for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:52 -0400 Received: from smtpe1.intersmtp.com ([62.239.224.234]:29288) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlTNJ-0003xH-Ul for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:51 -0400 Received: from tpw09926dag12h.domain1.systemhost.net (10.9.212.36) by RDW083A012ED68.bt.com (10.187.98.38) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:21:24 +0100 Received: from tpw09926dag13h.domain1.systemhost.net (10.9.212.37) by tpw09926dag12h.domain1.systemhost.net (10.9.212.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 17 Jun 2020 09:24:46 +0100 Received: from RDW083A009ED65.bt.com (10.187.98.35) by tpw09926dag13h.domain1.systemhost.net (10.9.212.37) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Wed, 17 Jun 2020 09:24:46 +0100 Received: from GBR01-CWL-obe.outbound.protection.outlook.com (104.47.20.57) by smtpe1.intersmtp.com (62.239.224.236) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:17:24 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QHggerDWWF9H15I81F+k9ybIzL1qyit29wxXb4qgsm97ah5sg2mpR1ziHEGHHInhnBIcYDOye7VSFUzX5hcQ3HHbdpzVqGDrckZU/syrzG7GtHTSvt7BAHOoGpv3IHv3xlc636zv0gYAsq6JzVdBZO9ND7o8OSnhGVr62cm3Xns6lmPBFaz2lo6JdxWlMaBtRh40M5M2Kwtff/hX8ljnC/2Puxw9+a+HFhyg0D1L+qNpwXIsoSSwtfE7V+TfJEfsf5Nx4gJsRqAOGNPSfWU/BiaG4xh0E1SahH6T+zqrpgY1oSGOFRuWhcLfL0Jo2yiOeEVkbdxz076WMPQghXvv0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=U/Jyu022VZxox9d+ww4jvFaNKATa7tyUc1Lp3L6qTYw=; b=L3v0VmWBp2mVOpKSoWWuNoWVEz+Rl3PbZ3eG6MYcYVhG21rLOKckrNZgbb2avk7sAUHDOkRNFkIDG4NSpAOFKqwDf4GNzxO7J47M1hIpZjSgvcjop6dqhZe4X4uybc4/7zIj/BSlzC3mfhK9M23kqXwAmndWZ35MN+FNEQmDCwjztXVpEnJrirFKOVFf+SuNed+7ok7MAks69mpjHgInhpTEVJDHYEhG2ggFlQCibmCYKdaxcEMUKnNLzqGx+NP24N6T6ZKRVSJtaR9ImqHaSxJlaEuQOQZPhmhhV3RR4VBv8Of4ogNMrBs4/soyDO2FcC5IVUeO6jvwsqR7Cdm9UQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bt.com; dmarc=pass action=none header.from=bt.com; dkim=pass header.d=bt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bt.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=U/Jyu022VZxox9d+ww4jvFaNKATa7tyUc1Lp3L6qTYw=; b=CMwMwHEQJoIVvgVTebpc1JZ9C8cWPWVk+bjVBKu24kuV1Q3pfvekaS4W2ddHKiI6bkKZXVcvCM29vx/nPs6JD6+Mrj38v3d7oMCaZay8/dPeNTZBLzqKhZrt1SwM6uTMSQm3qa4qHGETci2GUeO+0+7Zr/dh9dKgMpxTRbg46FM= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bt.com; Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) by CWXP123MB3255.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:43::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Wed, 17 Jun 2020 08:24:38 +0000 Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b]) by CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b%7]) with mapi id 15.20.3109.021; Wed, 17 Jun 2020 08:24:38 +0000 From: Jasper Lowell To: Subject: [PATCH 4/8] hw/char/escc2: Add clock generation Date: Wed, 17 Jun 2020 18:23:58 +1000 Message-ID: <20200617082402.242631-5-jasper.lowell@bt.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200617082402.242631-1-jasper.lowell@bt.com> References: <20200617082402.242631-1-jasper.lowell@bt.com> X-ClientProxiedBy: SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) To CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.128.24.45) by SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21 via Frontend Transport; Wed, 17 Jun 2020 08:24:34 +0000 X-Mailer: git-send-email 2.26.2 X-Originating-IP: [185.128.24.45] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 726ebfd8-580f-49f8-ec69-08d81297dfda X-MS-TrafficTypeDiagnostic: CWXP123MB3255: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-Antispam-2: 1 X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-Forefront-PRVS: 04371797A5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3hWPG4eAFt0tamsvApu9ghhJrzFgn29hh46fXganKztKYFVlHajXjwBTH7c82sRWnOJM89LaYwC9YGT9mhRNzGXj/Sn+8AtalfAuRf5i/BgCt4ugTY1Hrz0GwS3E+vosJ1fHTTkNedWEssb2tXiU68LZiQClbB1j5A3Q6UE+K9kkMTWz/qD/qG0s70xFAacKiD76olqjkmAE9FoZuQBrw5Y91eThsIUr4AeojRxX62aJF+l1sTpKAxUCLhTYN1BEXiCxL+ApOmxXESVyXBVGtqAg5icWVUp+Gc29v11H2dBPlH5L4Uv0kFnajhefOaJfA1yjrwKNhaIXwbkuNPGF9e8jt1z8ICAoESIbNJeqXdX6kJAbmyAHOuxreRYq0+8GiE+CnziYejxaQZly5xdPV8+BPnsEyOJI37IGlCE4a9M= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(366004)(346002)(376002)(39860400002)(44832011)(1076003)(8676002)(2616005)(316002)(8936002)(6666004)(6486002)(956004)(2906002)(5660300002)(83380400001)(6506007)(69590400007)(26005)(6512007)(36756003)(6916009)(186003)(16526019)(478600001)(52116002)(66556008)(66476007)(4326008)(66946007)(86362001)(21314003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 58e62VKd9xpmh9Q8qvYfdJzDyee4uJVCKA/qORnmrD77Q77x+pqREKLP+ns2xBh1sF27Obr0UffLmtVE638ncXgwUUYbmQCQP2j8YuCACfwTLkV+0d/BCTe8LqLucBA+EakrJLuTGfoxDfaS2N/YzpGst1S/xOzrjndEF95UgixnsXGFCLUGWjyaWUzoOdLsGutpzpSGUThgiYye/5EvOaQ3FH/tNB+L+kwewY6UrnCijDI01fTqwUpDtvVbKdu/j0VlKPWZQBa2gy9DLa5hmsMVIjmkl6RKdUE1kUK2efkJpJC6bWZRDiIDlfRZIoVwsTVyls0xRAP8BYgA7CeKFeUHMIIsdI7T4b9fr9d4LKrJoz9W0YJTitWnIwCacN448k91OM0ovxNUhmHq8XTY4bvyq+Os3ULMoctv6HsI5B1Lw8L0J2RCcYNm4TCCmwj0/lbKpkb4QPsUTqLplr+CYdcL9KdQVQ2wlYyYhThOfX8= X-MS-Exchange-CrossTenant-Network-Message-Id: 726ebfd8-580f-49f8-ec69-08d81297dfda X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2020 08:24:38.1801 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a7f35688-9c00-4d5e-ba41-29f146377ab0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SEOnLawZdUP2BoNnHJGPuinI+EEMYngidOfBziGzWF7+NoeCxdrrmUW1wUGG0sAceMZPGil/M7jCVFkXJ95hJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP123MB3255 X-OriginatorOrg: bt.com Received-SPF: pass client-ip=62.239.224.234; envelope-from=jasper.lowell@bt.com; helo=smtpe1.intersmtp.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 04:24:48 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tony.nguyen@bt.com, mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com, Jasper Lowell Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Each channel on the controller has dedicated pins for providing receive and transmit clock sources, a baud rate generator, and a DPLL. Additionally, the controller has two pins, XTAL1 and XTAL2, that can be used with a crystal and oscillator for providing a clock source. Alternatively, XTAL1 can simply be used as a clock source. These components are used individually or together according to register configurations for generating the final receive and transmit clocks. Signed-off-by: Jasper Lowell --- hw/char/escc2.c | 179 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 177 insertions(+), 2 deletions(-) diff --git a/hw/char/escc2.c b/hw/char/escc2.c index e16049ce4d..059e033089 100644 --- a/hw/char/escc2.c +++ b/hw/char/escc2.c @@ -106,9 +106,31 @@ /* CCR1. */ #define REGISTER_CCR1_OFFSET 0x2d +#define REGISTER_CCR1_ODS 0x10 +#define REGISTER_CCR1_BCR 0x8 +#define REGISTER_CCR1_CM2 0x4 +#define REGISTER_CCR1_CM1 0x2 +#define REGISTER_CCR1_CM0 0x1 + +#define REGISTER_CCR1_CM_MASK \ + (REGISTER_CCR1_CM2 | REGISTER_CCR1_CM1 | REGISTER_CCR1_CM0) /* CCR2. */ #define REGISTER_CCR2_OFFSET 0x2e +#define REGISTER_CCR2_SOC1 0x80 +#define REGISTER_CCR2_BR9 0x80 +#define REGISTER_CCR2_SOC0 0x40 +#define REGISTER_CCR2_BR8 0x40 +#define REGISTER_CCR2_BDF 0x20 +#define REGISTER_CCR2_XCS0 0x20 +#define REGISTER_CCR2_SSEL 0x10 +#define REGISTER_CCR2_RCS0 0x10 +#define REGISTER_CCR2_TOE 0x8 +#define REGISTER_CCR2_RWX 0x4 +#define REGISTER_CCR2_DIV 0x1 + +#define REGISTER_CCR2_BR_MASK \ + (REGISTER_CCR2_BR8 | REGISTER_CCR2_BR9) /* CCR3. */ #define REGISTER_CCR3_OFFSET 0x2f @@ -131,6 +153,9 @@ /* BGR. */ #define REGISTER_BGR_OFFSET 0x34 +#define REGISTER_BGR_EN_MASK 0x3f +#define REGISTER_BGR_EM_MASK 0xc0 + /* TIC. */ #define REGISTER_TIC_OFFSET 0x35 @@ -194,6 +219,10 @@ /* CCR4. */ #define REGISTER_CCR4_OFFSET 0x3f +#define REGISTER_CCR4_MCK4 0x80 +#define REGISTER_CCR4_EBRG 0x40 +#define REGISTER_CCR4_TST1 0x20 +#define REGISTER_CCR4_ICD 0x10 enum { REGISTER_STAR = 0, @@ -244,6 +273,14 @@ typedef struct ESCC2State ESCC2State; typedef struct ESCC2ChannelState { ESCC2State *controller; + /* + * Each channel has dedicated pins for providing receive and transmit clock + * sources. These dedicated pins are a subset of a larger set of selectable + * clock sources. + */ + unsigned int rxclock; + unsigned int txclock; + CharBackend chardev; /* @@ -275,6 +312,14 @@ enum { struct ESCC2State { DeviceState parent; + /* + * The controller has two pins: XTAL1 and XTAL2. These pins can be used + * together with a crystal and oscillator to provide a clock source. + * Alternatively, XTAL1 can provide an externally generated clock source. + * These configurations are mutually exclusive. + */ + unsigned int xtal; + MemoryRegion io; qemu_irq irq; ESCC2ChannelState channel[CHANNEL_COUNT]; @@ -376,9 +421,130 @@ static void escc2_channel_irq_event(ESCC2ChannelState *channel, } } +static float escc2_channel_baud_rate_generate(ESCC2ChannelState *channel, + unsigned int clock) +{ + /* + * Each channel has an independent baud rate generator. This baud rate + * generator can act as a clock source for receiving, transmitting, and/or + * for the DPLL. + */ + int k, n, m; + uint8_t ccr2 = REGISTER_READ(channel, REGISTER_CCR2); + uint8_t bgr = REGISTER_READ(channel, REGISTER_BGR); + + if (REGISTER_READ(channel, REGISTER_CCR2) & REGISTER_CCR2_BDF) { + /* The baud rate division factor k relies on BGR. */ + if (REGISTER_READ(channel, REGISTER_CCR4) & REGISTER_CCR4_EBRG) { + /* Enhanced mode. */ + n = bgr & REGISTER_BGR_EN_MASK; + m = ((ccr2 & REGISTER_CCR2_BR_MASK) >> 6) + | ((bgr & REGISTER_BGR_EM_MASK) >> 6); + k = (n + 1) * (2 * m); + } else { + /* Standard mode. */ + n = ((ccr2 & REGISTER_CCR2_BR_MASK) << 2) | bgr; + k = (n + 1) * 2; + } + } else { + k = 1; + } + + return (float) clock / (16 * k); +} + +static void escc2_channel_io_speed(ESCC2ChannelState *channel, float *input, + float *output) +{ + /* + * The receive and transmit speed can be configured to leverage dedicated + * receive and transmit clock source pins, the channel independent baud rate + * generator, the DPLL for handling clock synchronisation, the onboard + * oscillator, and a designated master clock. Different combinations of + * these are selected by specifying the clock mode and submode. + * + * Note: The DPLL, to function correctly, requires a clock source with a + * frequency 16 times the nominal bit rate so that the DPLL can synchronise + * the clock with the input stream. When the DPLL is used, the frequency + * must be divided by 16. + */ + unsigned int mode = REGISTER_READ(channel, REGISTER_CCR1) + & REGISTER_CCR1_CM_MASK; + unsigned int submode = REGISTER_READ(channel, REGISTER_CCR2) + & REGISTER_CCR2_SSEL; + + /* Clock modes are numbered 0 through 7. */ + switch (mode) { + case 0: + *input = channel->rxclock; + if (!submode) { + /* 0a. */ + *output = channel->txclock; + } else { + /* 0b. */ + *output = escc2_channel_baud_rate_generate(channel, + channel->controller->xtal); + } + break; + case 1: + *input = channel->rxclock; + *output = *input; + break; + case 2: + *input = escc2_channel_baud_rate_generate(channel, channel->rxclock) + / 16; + if (!(REGISTER_READ(channel, REGISTER_CCR2) + & REGISTER_CCR2_SSEL)) { + /* 2a. */ + *output = channel->txclock; + } else { + /* 2b. */ + *output = *input; + } + break; + case 3: + *input = escc2_channel_baud_rate_generate(channel, channel->rxclock); + if (!(REGISTER_READ(channel, REGISTER_CCR2) & REGISTER_CCR2_SSEL)) { + /* 3a. */ + *input /= 16; + } + *output = *input; + break; + case 4: + *input = channel->controller->xtal; + *output = *input; + case 5: + *input = channel->rxclock; + *output = *input; + case 6: + *input = escc2_channel_baud_rate_generate(channel, + channel->controller->xtal) / 16; + if (!(REGISTER_READ(channel, REGISTER_CCR2) & REGISTER_CCR2_SSEL)) { + /* 6a. */ + *output = channel->txclock; + } else { + /* 6b. */ + *output = *input; + } + break; + case 7: + *input = escc2_channel_baud_rate_generate(channel, + channel->controller->xtal); + if (!(REGISTER_READ(channel, REGISTER_CCR2) & REGISTER_CCR2_SSEL)) { + /* 7a. */ + *input /= 16; + } + *output = *input; + break; + default: + g_assert_not_reached(); + } +} + static void escc2_channel_parameters_update(ESCC2ChannelState *channel) { uint8_t dafo; + float ispeed, ospeed; QEMUSerialSetParams ssp; if (!qemu_chr_fe_backend_connected(&channel->chardev)) { @@ -434,8 +600,12 @@ static void escc2_channel_parameters_update(ESCC2ChannelState *channel) ssp.stop_bits = 1; } - /* XXX */ - ssp.speed = 0; + /* + * XXX: QEMU doesn't support configurations with different input/output + * speeds yet so the input speed is used for both. + */ + escc2_channel_io_speed(channel, &ispeed, &ospeed); + ssp.speed = ispeed; qemu_chr_fe_ioctl(&channel->chardev, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp); } @@ -852,6 +1022,11 @@ static void escc2_isa_instance_init(Object *o) static Property escc2_properties[] = { DEFINE_PROP_CHR("chardevA", ESCC2State, channel[CHANNEL_A].chardev), DEFINE_PROP_CHR("chardevB", ESCC2State, channel[CHANNEL_B].chardev), + DEFINE_PROP_UINT32("xtal", ESCC2State, xtal, 0), + DEFINE_PROP_UINT32("rxclockA", ESCC2State, channel[CHANNEL_A].rxclock, 0), + DEFINE_PROP_UINT32("txclockA", ESCC2State, channel[CHANNEL_A].txclock, 0), + DEFINE_PROP_UINT32("rxclockB", ESCC2State, channel[CHANNEL_B].rxclock, 0), + DEFINE_PROP_UINT32("txclockB", ESCC2State, channel[CHANNEL_B].txclock, 0), DEFINE_PROP_END_OF_LIST() }; From patchwork Wed Jun 17 08:23:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasper Lowell X-Patchwork-Id: 11609417 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8A88C912 for ; Wed, 17 Jun 2020 08:30:03 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 617AB206E2 for ; Wed, 17 Jun 2020 08:30:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bt.com header.i=@bt.com header.b="hWtFFV0H" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 617AB206E2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bt.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlTSM-0003hH-Md for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jun 2020 04:30:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54576) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTNM-0005DS-OY for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:52 -0400 Received: from smtpe1.intersmtp.com ([62.239.224.235]:19688) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlTNK-0003xN-QS for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:52 -0400 Received: from tpw09926dag13e.domain1.systemhost.net (10.9.212.13) by RDW083A011ED67.bt.com (10.187.98.37) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:27:35 +0100 Received: from tpw09926dag13h.domain1.systemhost.net (10.9.212.37) by tpw09926dag13e.domain1.systemhost.net (10.9.212.13) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 17 Jun 2020 09:24:48 +0100 Received: from RDW083A009ED65.bt.com (10.187.98.35) by tpw09926dag13h.domain1.systemhost.net (10.9.212.37) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Wed, 17 Jun 2020 09:24:48 +0100 Received: from GBR01-CWL-obe.outbound.protection.outlook.com (104.47.20.57) by smtpe1.intersmtp.com (62.239.224.236) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:17:28 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dtIKUuZn1/3EpvnLBoNl1PAM74sCK6/NfAYPZHrCizOeHpFGuUHNkfabWOgl3pnNrIqWt4qfpIq1mGf/ojCmfpcQEZXB5XLUC4QuXwPBOb7ddx+qDERU+WbKJ97ZilZiUsW4j4heFfAmaNCBkT72SXtc1nZDNlG0bO+p+eGq2SFxvE36g9Jj9v0dGg2ONv+VCCcTp9x9kUJRGvcQcHqFhoqWWiErxkBsHwRdNl0r+UDVEj2t4jRjnRXqVdVhO/gwa2YfKXgrq7DngWk/k9ApO62BgKKDrqtH3OwLR0/EYYUvSDthAISmeJ/Y6gi+b/CpzWGOZlxgCmMf8LUAbCtl8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5Epn5UyQdf1Lw0Zh6v9NFROnbfoPOmhL5PCtfueV/us=; b=RcxYV2IOw/kupd08s8BuYtX4p7VfKplFsN2Mq6Onq4Z7F/gXylk0hifP1H6VFF4pPmEzPs7u5R6DaYpBEdiXOdNtnQXdIDnhmCW5PT+2SP6jDWIT1cBWKO49o53lu2QMg0NjLv9uGCZSwAlu6WTDec6Lyx24oeHhP4KCOfGwpc7FCv1l/Oi86CLic+8fuQ5AJp9fTCB4FAfjM6n+whG61RZGZWLltS5j11EcSTWl7QhzHWRlpc2KIcffLpnruRdEVUpyGvaEyMyIltKWp6xuV5YoYcGnRsUv/mGmVzOJ0ZJF8RgZn4M62YrVum2slA/7Z03ztPyqHJMLS0JKyMIq4Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bt.com; dmarc=pass action=none header.from=bt.com; dkim=pass header.d=bt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bt.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5Epn5UyQdf1Lw0Zh6v9NFROnbfoPOmhL5PCtfueV/us=; b=hWtFFV0HO+7uuYPyHezhkkmJ4FpZwh0UygQzExTAXLygkSt+bI+ItiXUom3efG7fCwq5hKSKfPymuOPva3nkiz5RNXnKrfY2gf3q3tvuPqtrvTjl8WOgoqNmgalOqxyKE0aIj3iTiO0LehCepI8OWbUZwNHbwDpUEWT/cuJCTFQ= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bt.com; Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) by CWXP123MB3255.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:43::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Wed, 17 Jun 2020 08:24:41 +0000 Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b]) by CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b%7]) with mapi id 15.20.3109.021; Wed, 17 Jun 2020 08:24:41 +0000 From: Jasper Lowell To: Subject: [PATCH 5/8] hw/char/escc2: Add Receiver Reset (RRES) command Date: Wed, 17 Jun 2020 18:23:59 +1000 Message-ID: <20200617082402.242631-6-jasper.lowell@bt.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200617082402.242631-1-jasper.lowell@bt.com> References: <20200617082402.242631-1-jasper.lowell@bt.com> X-ClientProxiedBy: SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) To CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.128.24.45) by SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21 via Frontend Transport; Wed, 17 Jun 2020 08:24:38 +0000 X-Mailer: git-send-email 2.26.2 X-Originating-IP: [185.128.24.45] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5e1b0c13-505c-408c-16eb-08d81297e1fe X-MS-TrafficTypeDiagnostic: CWXP123MB3255: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-Antispam-2: 1 X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-Forefront-PRVS: 04371797A5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: d0BkMyMVd52Gy0lib0adiYlZPiM8KycdS0QZQkYZTu5Y85Kb/xOkoajuhIQ5XcdYDJO36bb9MlGtfzwxIEfSQ+FFSOsflJdTkskSth+C6eTtlSrnuGlRUazIHQ3j6dpG8NEfHZ+ZEBOdBu8J0iX6CL2sLeUWNAH+dvgjYD/6PjEvVQUUZsKCer/7HPAdEr/AdUZ2qD+AfG3JgItbwWoTPv75iNm2pz+OJ8byITNZl7/LA3kqk7Y0hOEQ+jUa21LqwNNx7FmVHYDBYADGwSOnpcOlGZU3mSc7YmiekA2oN1UU2Zx+FhO2wUsjpxs/qA26xswW1mzl/XuRayPPEjamxqqT7rNaexpa7eV9bWxLRHv+1a0g19LihZGd9ZeidbjF X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(366004)(346002)(376002)(39860400002)(44832011)(1076003)(8676002)(2616005)(316002)(8936002)(6666004)(6486002)(956004)(2906002)(5660300002)(83380400001)(6506007)(69590400007)(26005)(6512007)(36756003)(6916009)(186003)(16526019)(478600001)(52116002)(66556008)(66476007)(4326008)(66946007)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: mk6WLnihyINqETpMZhMKcGlVmgH2iKf0cbIcINLTaMkYS6rWj+86q6nsucav3jEer70q5TE4grs2aS5frZl8WZWOSv8N9A5Exw4fD7tAqKxLFmGVz0bMu5sABZxUZuyUKLHGHzjmstrjP7padhkW057agCASJekwjs5CjsNS2JhJDH+K2wkuXOjE3OJUuIzZXZm+FU7g5A4yltnC2x+y/brd8xYKIvl/aMOjnZDvKn2UhIJV6VaqDkYGWx4vHm/NmtIy/jFv+RXeppcqYIbSFR+bIb77SZ7gIF7lfNquPDg8buAmB9K7ZwrIe4zpIBn69VskREZSi8GRyGeWizOqbur9E6dxdqb2/G3luG7//Ytborc2A5QSttTTtSOYkISd+2Sn0eSZFT0ZttMnAureJx9o57srp3A3VhYX5fD1uqSNoLfwdSpdorS7mMcDJWkavPPWIUGyVAM4CrXyAqdT/2yrSJGlByNljBw2ISzjbGM= X-MS-Exchange-CrossTenant-Network-Message-Id: 5e1b0c13-505c-408c-16eb-08d81297e1fe X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2020 08:24:41.7390 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a7f35688-9c00-4d5e-ba41-29f146377ab0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QVlz67wh+La1oT4TD99dc+cqu8jVtOV9T4M5LESgP17QzI4mj9KeuD2GQgdNkLhLDR5wpQbp7orMIRnz2rXhNA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP123MB3255 X-OriginatorOrg: bt.com Received-SPF: pass client-ip=62.239.224.235; envelope-from=jasper.lowell@bt.com; helo=smtpe1.intersmtp.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 04:24:49 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tony.nguyen@bt.com, mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com, Jasper Lowell Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Commands are initiated by setting certain bits in the CMDR register. The Receiver Reset (RRES) command clears the receiver FIFO (RFIFO). Signed-off-by: Jasper Lowell --- hw/char/escc2.c | 24 ++++++++++++++++++++++++ hw/char/trace-events | 1 + 2 files changed, 25 insertions(+) diff --git a/hw/char/escc2.c b/hw/char/escc2.c index 059e033089..5afb8aa6d9 100644 --- a/hw/char/escc2.c +++ b/hw/char/escc2.c @@ -29,6 +29,12 @@ /* CMDR. */ #define REGISTER_CMDR_OFFSET 0x20 +#define REGISTER_CMDR_RMC 0x80 +#define REGISTER_CMDR_RRES 0x40 +#define REGISTER_CMDR_RFRD 0x20 +#define REGISTER_CMDR_STI 0x10 +#define REGISTER_CMDR_XF 0x8 +#define REGISTER_CMDR_XRES 0x1 /* MODE. */ #define REGISTER_MODE_OFFSET 0x22 @@ -741,6 +747,23 @@ static uint64_t escc2_mem_read(void *opaque, hwaddr addr, unsigned size) return value; } +static void escc2_channel_command(ESCC2ChannelState *channel) +{ + uint8_t tmp, command; + + command = REGISTER_READ(channel, REGISTER_CMDR); + trace_escc2_channel_command(CHANNEL_CHAR(channel), command); + + if (command & REGISTER_CMDR_RRES) { + memset(channel->fifo_receive, 0, sizeof(channel->fifo_receive)); + REGISTER_WRITE(channel, REGISTER_RBCL, 0); + + tmp = REGISTER_READ(channel, REGISTER_STAR); + tmp &= ~(REGISTER_STAR_RFNE); + REGISTER_WRITE(channel, REGISTER_STAR, tmp); + } +} + static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, unsigned size) { @@ -767,6 +790,7 @@ static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, break; case REGISTER_CMDR_OFFSET: REGISTER_WRITE(channel, REGISTER_CMDR, value); + escc2_channel_command(channel); break; case REGISTER_MODE_OFFSET: REGISTER_WRITE(channel, REGISTER_MODE, value); diff --git a/hw/char/trace-events b/hw/char/trace-events index b4f4f30815..47b46b92c9 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -59,6 +59,7 @@ escc_sunmouse_event(int dx, int dy, int buttons_state) "dx=%d dy=%d buttons=0x%0 # escc2.c escc2_irq_update(uint8_t gis) "value 0x%x" escc2_mem_read(char channel, uint32_t addr, uint8_t value) "channel %c addr 0x%x value 0x%x" +escc2_channel_command(char channel, uint8_t command) "channel %c command 0x%x" escc2_mem_write(char channel, uint32_t addr, uint8_t value) "channel %c addr 0x%x value 0x%x" # pl011.c From patchwork Wed Jun 17 08:24:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasper Lowell X-Patchwork-Id: 11609421 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6947460D for ; Wed, 17 Jun 2020 08:31:41 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 407D8206E2 for ; Wed, 17 Jun 2020 08:31:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bt.com header.i=@bt.com header.b="ZY7p2ijx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 407D8206E2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bt.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:60788 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlTTw-0005ZJ-DZ for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jun 2020 04:31:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54580) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTNN-0005Ep-Ij for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:53 -0400 Received: from smtpe1.intersmtp.com ([213.121.35.73]:15731) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlTNL-0003xW-NA for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:53 -0400 Received: from tpw09926dag14f.domain1.systemhost.net (10.9.212.22) by BWP09926078.bt.com (10.36.82.109) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1713.5; Wed, 17 Jun 2020 09:24:49 +0100 Received: from tpw09926dag13h.domain1.systemhost.net (10.9.212.37) by tpw09926dag14f.domain1.systemhost.net (10.9.212.22) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 17 Jun 2020 09:24:49 +0100 Received: from RDW083A009ED65.bt.com (10.187.98.35) by tpw09926dag13h.domain1.systemhost.net (10.9.212.37) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Wed, 17 Jun 2020 09:24:49 +0100 Received: from GBR01-CWL-obe.outbound.protection.outlook.com (104.47.20.51) by smtpe1.intersmtp.com (62.239.224.236) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:17:29 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OUoQPGxPOo6otQYc1vcFEtaQm8QS3xLY2qomrxXXIcOHIBZQbnEW1Xh6VSEOv+7h0yLYBr0ZmdUv84yUBHVI47jJ2IX2xWx+lFE2OdHJnVl4OZqZF6GH0fLmN71I8VQNwKSab82+GUVtapee3+AUNEyCgQNuf1egQq8R8GgatmRPqWlGHvpejgHY3A4kwJ8x1adUkh0S/YLjsWiQwcstwBKH6QReQFBb4Utcjs5za+/9b5LfNTiLdLME5xb7MOB0Jxfu32oKJJMI9PEPkrBhXjUkmb6JP9Sz0YrVjyqgH3pqMYp+dqfYw+TlcdN3LRHbxXm7rQlo9+OAkYYs3EA7XA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BmgtXvyDr97pNlNpk63wc1cNCm7h0AJPSiNXw17D3zo=; b=M8zNZJ55D7KkAwuMZf/DaT12w+OLSygzY1el2Lo7pBj1vZr2UUzG+sZpdQb/fnf9HF9uurAjSv+/xVMwH7rZhxdDc4JaS/bZ5ij07jkTpyfn+SikRK6qbgKM6e/n33BKNM2wTmepXsfgB2uc/My0QIXOZG0jVMKd00FUVBpYtcv7B3e8Fn/JEhjgDLhYdTHoQssM+b9Pn8N6B+conXCzyyqIgABd33Y+gdHNGfsqbzM+DmPKbXLt2MYdOTYyKEz65XJa09QgYMnrBNH+TXUp+iMTFbGC2ioWuOL5C35es2veh13vS5yJwwP2y5cjOzfHzL1xF7OlH71zbISP5fK0jQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bt.com; dmarc=pass action=none header.from=bt.com; dkim=pass header.d=bt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bt.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BmgtXvyDr97pNlNpk63wc1cNCm7h0AJPSiNXw17D3zo=; b=ZY7p2ijxA+L3NRAEkuyrRn3N0F6bxP2g89+L1qs4ADoV3TReIcO3R236QmGa717uikwMie9sKb0vid5ARBA4N3r0gDUsR+Zuk74DetzzYhaEWBkJnrdxFaJDBVFXwDA/HSyBBniCJFEQYmGaRsLz13imxBzSXW5wj4Lx9Pqwj54= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bt.com; Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) by CWXP123MB3255.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:43::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Wed, 17 Jun 2020 08:24:45 +0000 Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b]) by CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b%7]) with mapi id 15.20.3109.021; Wed, 17 Jun 2020 08:24:45 +0000 From: Jasper Lowell To: Subject: [PATCH 6/8] hw/char/escc2: Add RFRD command Date: Wed, 17 Jun 2020 18:24:00 +1000 Message-ID: <20200617082402.242631-7-jasper.lowell@bt.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200617082402.242631-1-jasper.lowell@bt.com> References: <20200617082402.242631-1-jasper.lowell@bt.com> X-ClientProxiedBy: SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) To CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.128.24.45) by SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21 via Frontend Transport; Wed, 17 Jun 2020 08:24:42 +0000 X-Mailer: git-send-email 2.26.2 X-Originating-IP: [185.128.24.45] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8c962c92-5556-4f98-3673-08d81297e440 X-MS-TrafficTypeDiagnostic: CWXP123MB3255: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-Antispam-2: 1 X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-Forefront-PRVS: 04371797A5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eisOx9K/Wu9Qt4mtZKvXnBxc0Py9i3P+4sOfm5x50MNMdWsjeDXr7GmhRr3wQk5T74le6Q080HAK2G0eKAC89R2cyZMQqioUYyPhVX9r66P5oCL7FabQRaHHwj5d2VJ8LwS7Lod2MHtxJeMWy7RzNECr8YHVE3nuH61kfDesypca2DS6uw1IFziTQ5Ul5LxtfXvkUS3NZjO66ODhXYCL8Yo23jsoGfG/jYReIieWp152craSyxNvOe+gMMjdBIaguybxgBCwA29nKxjXhxxmhTMDNIkHoD8y4HdDYZF7GplSgWqL9jMpFjqfq4hwH9MemUY2UfSIH6xAjl092sr+8zkh9Knnt5kOHCp1iDvmaDGGNdGjrSSNK7FDxIQCkf04 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(366004)(346002)(376002)(39860400002)(44832011)(1076003)(8676002)(2616005)(316002)(8936002)(6666004)(6486002)(956004)(2906002)(5660300002)(83380400001)(6506007)(69590400007)(26005)(6512007)(36756003)(6916009)(186003)(16526019)(478600001)(52116002)(66556008)(66476007)(4326008)(66946007)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: aoF4bKunsFKuZ4nLVPFkiW79C3BEMA3eXzgFRSBbd841Hlop+119zqluCC3HY4fp3BrMjdvxUnk1BC1xEhpw89Jvp0A5cW3KP0GFdibZ2rqlNkdyv/dLDqxctYAuPpuOb+TYq86N/ZDyqk6TvTmwc8NNdtReqMKOlpMvmzIduQJSkp6y7YIAKtK72xyiNnNvPEcnDT6o9/nBg/xccaLO1h3zSkTM5ejMSgjQELGbi+LAhcajO70m48zPwZl7BMYvLY0cyd5vn8tjvs9p5ZILv0PQrSY/r9xE6x4bsnreGTHgxtdNW06nyqXdtTJQIV+V7t8TU588a38DbD1JEjWUrB1ld0DLUD+G/kUGgcRSR5jFpH6uy0I8xJkDIeFSFhqpKFhJTXWUbJXYYmL8N2bdYny4i+BHus3C69kJbN3aUbxzFibXUEdfa1nbOzWEUqs1EJDcyDw6O1MdidOkTfiFUskdEZvvMC3jYd8BtTwC2vU= X-MS-Exchange-CrossTenant-Network-Message-Id: 8c962c92-5556-4f98-3673-08d81297e440 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2020 08:24:45.5568 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a7f35688-9c00-4d5e-ba41-29f146377ab0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Netl8WUMKwyaAvRs8xPnET78zEutz6F3ntDlwdgliYyrWDPz0UVRRkRll5yPqr60Nt3FNnsARpUzWj0YVWOuMQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP123MB3255 X-OriginatorOrg: bt.com Received-SPF: pass client-ip=213.121.35.73; envelope-from=jasper.lowell@bt.com; helo=smtpe1.intersmtp.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 04:24:50 X-ACL-Warn: Detected OS = Windows 7 or 8 [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tony.nguyen@bt.com, mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com, Jasper Lowell Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The Receive FIFO Read Enable command is used to request access to the receive FIFO. When the command is finished, the controller will issue a TCD interrupt and the number of available bytes will be available in tthe RBCL register. Given that the visible receive FIFO window is used to store characters as they come in, the only action that needs to be taken is to raise the TCD interrupt (if this interrupt is enabled). Signed-off-by: Jasper Lowell --- hw/char/escc2.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/char/escc2.c b/hw/char/escc2.c index 5afb8aa6d9..8198b7fec3 100644 --- a/hw/char/escc2.c +++ b/hw/char/escc2.c @@ -762,6 +762,10 @@ static void escc2_channel_command(ESCC2ChannelState *channel) tmp &= ~(REGISTER_STAR_RFNE); REGISTER_WRITE(channel, REGISTER_STAR, tmp); } + + if (command & REGISTER_CMDR_RFRD) { + escc2_channel_irq_event(channel, REGISTER_ISR0, REGISTER_ISR0_TCD); + } } static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, From patchwork Wed Jun 17 08:24:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasper Lowell X-Patchwork-Id: 11609395 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AD9D4912 for ; Wed, 17 Jun 2020 08:25:52 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 82D6420C09 for ; Wed, 17 Jun 2020 08:25:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bt.com header.i=@bt.com header.b="UkaE9aLX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 82D6420C09 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bt.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46752 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlTOJ-0007Gw-KS for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jun 2020 04:25:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54596) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTNQ-0005KT-QO for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:56 -0400 Received: from smtpe1.intersmtp.com ([62.239.224.234]:29299) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlTNO-0003y5-VM for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:56 -0400 Received: from tpw09926dag15h.domain1.systemhost.net (10.9.212.39) by RDW083A012ED68.bt.com (10.187.98.38) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:21:30 +0100 Received: from tpw09926dag13h.domain1.systemhost.net (10.9.212.37) by tpw09926dag15h.domain1.systemhost.net (10.9.212.39) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 17 Jun 2020 09:24:51 +0100 Received: from RDW083A009ED65.bt.com (10.187.98.35) by tpw09926dag13h.domain1.systemhost.net (10.9.212.37) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Wed, 17 Jun 2020 09:24:51 +0100 Received: from GBR01-CWL-obe.outbound.protection.outlook.com (104.47.20.51) by smtpe1.intersmtp.com (62.239.224.236) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:17:31 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YMo6IS0HS4r8DdcPE5+Oi0KIphH2ytTeb1+2JZE2dl2wFKXbNbPSUTFL9uGapYcIVnn+mM5XE85CG9lQCAknRvVZmOAZ/93P5VMDeYbDVA2gkFtKizTInlRZTMj4X0E5SqkHPThEL9/O0tmxWSV5WSIx2Mn06Ech9zCvjNRrNheml4Q01eJQaXbu5J9pvjGmuUQRAcPdqHjrLTSJG8qYEyGmpzWRZxCyAPme5WngRhrpp/fifyrkRSUN7rV03nSavjxZkr1Eh6k9EdmJQJ4J+JDRG3H7vyXEaaEYXgTaR0WqWUNmAKnAQVc1QHqIYB3F4fr4r33VPI+kRqRxMUQAAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dBLNsCvC3ZFFfVobT9Df/7+Ndzt03Ahc+Gg/6OZAm+4=; b=RuuOtaLiShAWSNWXfXa/JONBZloK4av+6iGkGN8XKefRG96kXqp5lnJPSE6OyA6xGUS4OyMpHCtp5u26+ZHWE15oE5t0ny+LZynMvzwPxHZNeY/h4Kl65FCZ26R6UDo8wLszMNNy/heStfq+QPujlNWh45BNu0x+arR6ZT/1aOYQ5XUrgPi0UWYdwvq/EOzz8I5Z5XapFZvvMoUKlY4hoPvB7gMc9YP1FswSyYoNl3WJzWQsD8BLFDSeh9buKDamxTBjsLD/QBpOnzJdwNM1KXEsglOgWD4jJVfd/2iG4Xb7RmjW8aMIrmaWtjfCekZLK4Q189w+8h39cB/q6b6Ofg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bt.com; dmarc=pass action=none header.from=bt.com; dkim=pass header.d=bt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bt.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dBLNsCvC3ZFFfVobT9Df/7+Ndzt03Ahc+Gg/6OZAm+4=; b=UkaE9aLXqS7/Tc3QczMn1QhUi5dlVGgKc8jyUg/g9dVw2rMOK0Zac6JlG0eopiWU10om0uZsYyEnAuiiDc9PT4fqptaMd2WxFFllnp8aZj1VoI1rZ6YNn1sNRaO5s424NFkMLgYRoV1E0rWPC3tXM0ZIy2E7xwYEXxu4C6/QqyE= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bt.com; Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) by CWXP123MB3255.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:43::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Wed, 17 Jun 2020 08:24:49 +0000 Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b]) by CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b%7]) with mapi id 15.20.3109.021; Wed, 17 Jun 2020 08:24:49 +0000 From: Jasper Lowell To: Subject: [PATCH 7/8] hw/char/escc2: Add Transmit Frame (XF) command Date: Wed, 17 Jun 2020 18:24:01 +1000 Message-ID: <20200617082402.242631-8-jasper.lowell@bt.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200617082402.242631-1-jasper.lowell@bt.com> References: <20200617082402.242631-1-jasper.lowell@bt.com> X-ClientProxiedBy: SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) To CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.128.24.45) by SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21 via Frontend Transport; Wed, 17 Jun 2020 08:24:46 +0000 X-Mailer: git-send-email 2.26.2 X-Originating-IP: [185.128.24.45] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8f22ffab-3cf3-4f22-2eff-08d81297e682 X-MS-TrafficTypeDiagnostic: CWXP123MB3255: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-Antispam-2: 1 X-MS-Oob-TLC-OOBClassifiers: OLM:5516; X-Forefront-PRVS: 04371797A5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EGXztA3e5mh6Kd+E032T+N0u5JVI9khA+ghTpsUP2wJ0LUJlEymlNVQ5l3McjRn68z47x48A7aYdIaIy1lvC4iNVwSMKQFa1sjaWZrJuEq2hqX3ilYh8nMV7wmNAmlwdzpyjkDXxo+MccBQpdoOoFzFRwgTdGGjnumijaK9yJYT4jnse/tM1gHj5YXZhoTY1ZV0bX12Gc8omSwTjiMOMWdPLpglaIl5lDysn9fn/WExSJILF7YmiffNXlpED8cCMFcaHn9Io+sv3RRq6tnIxb/frsaDerEAntbeiNt6vG6cZ6+Q7RfGhEiEw4zmX/C0YxVWWM8XaKdbHq/GE7QUo6yAe10/YaMXjxCmNK95lAdoQl0NnBJIGIrAJmyXKI1bi X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(366004)(346002)(376002)(39860400002)(44832011)(1076003)(8676002)(2616005)(316002)(8936002)(6666004)(6486002)(956004)(2906002)(5660300002)(6506007)(69590400007)(26005)(6512007)(36756003)(6916009)(186003)(16526019)(478600001)(52116002)(66556008)(66476007)(4326008)(66946007)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: gnGW6avl1Cs9OUK+bZy9k1J7XpGeLLXw8/HnpBMkgHLpqWNX8UiZe4bT7hs/2XyXmmXzR6e/MUNji4G4DiF+mudhRWqdLuQlkaNCVVW0a5+qCrIDSdyCjJ+surPPviAi5zEKQOjQfABeqdh6+HBcUmvkjzfpEzpOW9o1tDasR6q3VtFn0ob3G5MWXysRzZeE6uQUPpcZJZWwqJs9AHeJ9+HjufoCsg1u26+8eD7SNL3SdyMHMEGwO555OuKoj+YU5orON2wjkRP+WZWejqdKATDaE4XJilR16AxvPD2xffW9SdgPNMIStOgzXHxVOuuh6ccStU3+8FQdFn1A2Phx7mrVUb3i7I1YLt0X3ncUaB/od1MTGuZtUJPQUUD20vGDItQIzTzN5d74leBQLwNwJ3P3g72sWm0QegLBspunPLnfLILDYydEdRr1Nh/AxXq4Xfdn8tN5T8NlTTn9lZnSrqOuWOS4hbyTFpc5Qm3VPt0= X-MS-Exchange-CrossTenant-Network-Message-Id: 8f22ffab-3cf3-4f22-2eff-08d81297e682 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2020 08:24:49.3026 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a7f35688-9c00-4d5e-ba41-29f146377ab0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BZb33HLn3Zv6Qj2Jzd9YciXrDC7AbOZZha+0pq32myQkmUF1iVlo0ayGqnJtzS7Kee//D9saHsa3wxccpscHSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP123MB3255 X-OriginatorOrg: bt.com Received-SPF: pass client-ip=62.239.224.234; envelope-from=jasper.lowell@bt.com; helo=smtpe1.intersmtp.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 04:24:48 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FUZZY_XPILL=0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tony.nguyen@bt.com, mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com, Jasper Lowell Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The Transmit Frame (XF) command is an alternative to using the TIC register for transmitting. This command allows the guest to transmit the contents of the transmit FIFO rather than a single character. Signed-off-by: Jasper Lowell --- hw/char/escc2.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/hw/char/escc2.c b/hw/char/escc2.c index 8198b7fec3..3bacdfaa7c 100644 --- a/hw/char/escc2.c +++ b/hw/char/escc2.c @@ -207,6 +207,14 @@ /* ISR1. */ #define REGISTER_ISR1_OFFSET 0x3b +#define REGISTER_ISR1_BRK 0x80 +#define REGISTER_ISR1_BRKT 0x40 +#define REGISTER_ISR1_ALLS 0x20 +#define REGISTER_ISR1_XOFF 0x10 +#define REGISTER_ISR1_TIN 0x8 +#define REGISTER_ISR1_CSC 0x4 +#define REGISTER_ISR1_XON 0x2 +#define REGISTER_ISR1_XPR 0x1 /* IMR1. */ #define REGISTER_IMR1_OFFSET 0x3b @@ -749,6 +757,7 @@ static uint64_t escc2_mem_read(void *opaque, hwaddr addr, unsigned size) static void escc2_channel_command(ESCC2ChannelState *channel) { + unsigned int i; uint8_t tmp, command; command = REGISTER_READ(channel, REGISTER_CMDR); @@ -766,6 +775,21 @@ static void escc2_channel_command(ESCC2ChannelState *channel) if (command & REGISTER_CMDR_RFRD) { escc2_channel_irq_event(channel, REGISTER_ISR0, REGISTER_ISR0_TCD); } + + if (command & REGISTER_CMDR_XF) { + i = 0; + while (i < CHANNEL_FIFO_LENGTH && channel->fifo_transmit[i] != 0) { + i++; + } + qemu_chr_fe_write_all(&channel->chardev, channel->fifo_transmit, i); + escc2_channel_irq_event(channel, REGISTER_ISR1, REGISTER_ISR1_ALLS); + + /* + * XFIFO is ready and ISR1_XPR should be generated. Fake the XRES + * command. + */ + command &= REGISTER_CMDR_XRES; + } } static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value, From patchwork Wed Jun 17 08:24:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasper Lowell X-Patchwork-Id: 11609397 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9B56A912 for ; Wed, 17 Jun 2020 08:25:53 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7209E20679 for ; Wed, 17 Jun 2020 08:25:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bt.com header.i=@bt.com header.b="e8VZlG8O" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7209E20679 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bt.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46824 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlTOK-0007Il-Jz for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jun 2020 04:25:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTNS-0005Mk-50 for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:58 -0400 Received: from smtpe1.intersmtp.com ([213.121.35.73]:15740) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlTNQ-0003yB-Aa for qemu-devel@nongnu.org; Wed, 17 Jun 2020 04:24:57 -0400 Received: from tpw09926dag09e.domain1.systemhost.net (10.9.202.36) by BWP09926078.bt.com (10.36.82.109) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1713.5; Wed, 17 Jun 2020 09:24:53 +0100 Received: from tpw09926dag13g.domain1.systemhost.net (10.9.212.29) by tpw09926dag09e.domain1.systemhost.net (10.9.202.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 17 Jun 2020 09:24:54 +0100 Received: from RDW083A009ED65.bt.com (10.187.98.35) by tpw09926dag13g.domain1.systemhost.net (10.9.212.29) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Wed, 17 Jun 2020 09:24:54 +0100 Received: from GBR01-LO2-obe.outbound.protection.outlook.com (104.47.21.55) by smtpe1.intersmtp.com (62.239.224.236) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 17 Jun 2020 09:17:34 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ec8sp+TpAU3PPp1Bncrwib3ZnGmKlwdZ+191bMaaTEop8tguAqVCHrjiOL/AU7Jv4KAjqKC0ft7Df4Au8AOmTkObBkfs3a+jwY9xMyxXW4GP780FeeXQckRNMjMCh5GW9zIFUQfooGlZD1f5FhBwLCdRdhz9uPSd3j+FJjtKXma/WCntnYji1S0JoubRbhC4w4V4943zgqrOnL+PyR0dN4QcXRc+i0xY7QTPqHMg3tmx2NM2hR0OoQgeVZZ6tjx31ZSUFMt9wcLiDjkaDJPvyH712/H6cD2D0XAxcgA/BuiMGiFqDpXcYNpbvgTPP6T0gIiUvklMF008wksjiYEpBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cqY795SHa5LvjdJJsmQpzi1P1mXybkWBqzdRbmwLBZg=; b=fPkSKgjHUqXv8/OOiMjJYjtRPXRheOyFtiHQTgD0Auh3/B4sUhWLGsLZZnOfWp9ghNJ5FdxMOAYGUCNipWVTF/IV1zx7Y0IxGW6Oll3YXz1uPQofxjHQU3of+xzuK2UzNWVOGQw0tUXoarNjs8B7EqeRXOlwByS3vET80ddzwgBOCCVW62OGy3w35JE0LdgAS3ADETM4a1urNNHCEkVx3KHuBBwJvDZJF3+uoFntQ7SpE5VR2tjQZUfmnqcOVksHvCNOqydnIT0tirU1DbuiE3Z3yYQHzOLEwNCxtrjli6yyijWK+XVzbxkvvZuId6wZ0Oth6AkB4+gDmFQXQFdr2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bt.com; dmarc=pass action=none header.from=bt.com; dkim=pass header.d=bt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bt.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cqY795SHa5LvjdJJsmQpzi1P1mXybkWBqzdRbmwLBZg=; b=e8VZlG8OQYnIAQwEJ355pXeD9uDXV6JR2aaMK0FNhl18CsRXrtu0MyzhMoJbKYfOPBuNOCN+dP8iQcIuhhZRcnhW5XVR6KvQBGhwuRUzA2QVZQ1KpdFDuAQMqh87z2jSxPfPfKfdt21Q/7wcg/4memEmY9LYDXaBws561d04614= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bt.com; Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) by CWXP123MB3255.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:43::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Wed, 17 Jun 2020 08:24:52 +0000 Received: from CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b]) by CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM ([fe80::e098:8c50:5b1e:6a1b%7]) with mapi id 15.20.3109.021; Wed, 17 Jun 2020 08:24:52 +0000 From: Jasper Lowell To: Subject: [PATCH 8/8] hw/char/escc2: Add XRES command Date: Wed, 17 Jun 2020 18:24:02 +1000 Message-ID: <20200617082402.242631-9-jasper.lowell@bt.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200617082402.242631-1-jasper.lowell@bt.com> References: <20200617082402.242631-1-jasper.lowell@bt.com> X-ClientProxiedBy: SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) To CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7b::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.128.24.45) by SG2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:54::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21 via Frontend Transport; Wed, 17 Jun 2020 08:24:49 +0000 X-Mailer: git-send-email 2.26.2 X-Originating-IP: [185.128.24.45] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8f955b25-44d6-4232-165e-08d81297e886 X-MS-TrafficTypeDiagnostic: CWXP123MB3255: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-Antispam-2: 1 X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-Forefront-PRVS: 04371797A5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AfaU8NC+LKDs7EZtE8Euv7TIQ5S4mykkeMJyfJWHxEk/zmRpvufvpc0hVu2zpjTxWM0XeebmQBapH583nBsGSVZaVx3CXx24/WZM+RPHUXguAIhli3qqjAKXnkqnxTi2Pq4+S73qRgQZ/IwHHBw9yqpVmyTyhN4KBkL3E01IVThbc2w7is/OLK+D9hLGJI7Ogu5X1IowlBHpCoq5Fo6YVErMi+WPZH/EDYxqqHty0vv4aksZDDmnf9yDZGddIkBlXTiNWc5ZgHBnb6p4C5YwCZGacDLqWhlQmQQKQF39k/cbs/mcD906j9DRv4WTJz2JV2Dw4AfBai4njFfONJ01Vap9p0bchUtZPzPDWJys6nfVm7Z4EF4i8WjyWiSi8e9k X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWXP123MB1958.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(366004)(346002)(376002)(39860400002)(44832011)(1076003)(8676002)(2616005)(316002)(4744005)(8936002)(6666004)(6486002)(956004)(2906002)(5660300002)(6506007)(69590400007)(26005)(6512007)(36756003)(6916009)(186003)(16526019)(478600001)(52116002)(66556008)(66476007)(4326008)(66946007)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 8xjfmnbWlh+Q4QOloiXMQiLFEgTFKh0mauVbiQK6eQwkJwl+khcowq+K3eMkQWJQiAF+PJ1LjrKzUVP3U/xgw5q4CClgSHnHwRfhqz6Jtt+JlOOTMbo0HrNxtVqr/5EPEAk3FL3oLskNfZyGUM672/eD5YHgnkd9z27raoamRbZJMzyf42J2CgzxO5Apf11M7SMHS4fE6ZhuO/HUU6Vy7L/tW6nzP/om2cTSrV7TkMGR/48cBvaXrEIOjb4YBXjn3R+tWW3h+lQWWa0ejt+o9J5Ki16DIlu9NyKP66h4S3soHe9hlrnzMrOAsL5qeP0ozZ13K6awGM+pNvVtGy8rMKTBmUzzHPbqXv5JfscwmjANwIhWNN/2nvLbJsRJt+mL4yjj2+zmXO1MZFwv8WWeEz4HITi3sSJk+5xynAeoYxswACAP6+CfiR6Tr5vuZAbdmhmu+KidT8b0lEVzRimTUSChv36rhnIDi6OiUBUg3Qc= X-MS-Exchange-CrossTenant-Network-Message-Id: 8f955b25-44d6-4232-165e-08d81297e886 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2020 08:24:52.7466 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a7f35688-9c00-4d5e-ba41-29f146377ab0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: DLZIYZtE57ZH1UYmeQvPFDN2T9c8a9ygJjHIciqicm0qWbodRiuDJjaST8pxgesFt19I3xtGQBKvakSVe4XDzw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP123MB3255 X-OriginatorOrg: bt.com Received-SPF: pass client-ip=213.121.35.73; envelope-from=jasper.lowell@bt.com; helo=smtpe1.intersmtp.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 04:24:50 X-ACL-Warn: Detected OS = Windows 7 or 8 [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tony.nguyen@bt.com, mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com, Jasper Lowell Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The Transmitter Reset (XRES) command is used for clearing the the transmit FIFO of any data. When the controller has completed the command, an XPR interrupt is generated (if this interrupt is enabled). Signed-off-by: Jasper Lowell --- hw/char/escc2.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/char/escc2.c b/hw/char/escc2.c index 3bacdfaa7c..a40731b836 100644 --- a/hw/char/escc2.c +++ b/hw/char/escc2.c @@ -790,6 +790,11 @@ static void escc2_channel_command(ESCC2ChannelState *channel) */ command &= REGISTER_CMDR_XRES; } + + if (command & REGISTER_CMDR_XRES) { + memset(channel->fifo_transmit, 0, sizeof(channel->fifo_transmit)); + escc2_channel_irq_event(channel, REGISTER_ISR1, REGISTER_ISR1_XPR); + } } static void escc2_mem_write(void *opaque, hwaddr addr, uint64_t value,