From patchwork Wed Feb 24 20:13:14 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Programmingkid X-Patchwork-Id: 587704 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 125B31409A0 for ; Thu, 25 Feb 2016 07:13:53 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=ZhtP9WvJ; dkim-atps=neutral Received: from localhost ([::1]:38100 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYfol-0001en-1S for incoming@patchwork.ozlabs.org; Wed, 24 Feb 2016 15:13:51 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34046) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYfoK-0001HY-Ti for qemu-devel@nongnu.org; Wed, 24 Feb 2016 15:13:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYfoG-0007eL-DZ for qemu-devel@nongnu.org; Wed, 24 Feb 2016 15:13:24 -0500 Received: from mail-io0-x22f.google.com ([2607:f8b0:4001:c06::22f]:34059) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYfoG-0007eG-5L; Wed, 24 Feb 2016 15:13:20 -0500 Received: by mail-io0-x22f.google.com with SMTP id 9so58490528iom.1; Wed, 24 Feb 2016 12:13:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:content-type:content-transfer-encoding:subject:date:message-id :to:mime-version; bh=0hwortGRCiLq/LwcARIzkpYkRIKK6tNFsGK9LlRUboU=; b=ZhtP9WvJjP32JSyXoG8Vf1oiLQqGvkdkPzrY+kof5AOuIFBg4av86Cq5e0ZCYGAxuD lDrYd8d2QlLv/2uAeagXIJcA2Ydkl22OEYxJcHBVtS66GUmnTJhXiO1FvR1OQfZiWtC7 JbGrdAyv2/Vf+rH7oIAwCfWobXLJL+yS3Ridd1ZDV1Jv+86YjjB+PzVfXdtPHWL9xlWq hh1IuLyED5ZiPysMwWqwLEJvFaWxWzxPe9Q0+Es5IfSfA+4UfrKj0sRE/WQssCTAr1XA gsnVIClkg3FwHF9S4ULXta5rF6CCK1Y53HvElxiFf5NBSoIq7FQnZI84FHCV7juhoE+a FnsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:content-type:content-transfer-encoding :subject:date:message-id:to:mime-version; bh=0hwortGRCiLq/LwcARIzkpYkRIKK6tNFsGK9LlRUboU=; b=QZ5WARKmsRddqh0NbTvn7gQc0rqHMVtcAeVKd55Rvlc7EpXNJr6Pt6hM20+hvb3Aau XeZoROQ530/4QeIffYqgHb2U4d8o2C/muKUIcxHzSyzOprcYaAn4s6QMLcLAc7XJlBg7 SyluT3W04ZEq0vn9ZeUhV6QdXUxIPrunRUelqfIzIb03UTKCTtp17Sbc6wtZJacv7miJ LXSrar/brPQE4oKbNCd5zBU0YX2KAJlH4qKC72sYkRRM/lhk438DdQO0rMVtHRHqqN2S qOw8U9U9HXTTmgqrssA+iKsuwcXUQUQYFvE7Jr26fGU6XvG1ztZsFgX043On7Bqcf8A5 iKsQ== X-Gm-Message-State: AG10YOREg7rJWKSl8JHauVgxbu+vbXDSJQkpzWCyDDjs8h52cfbMrrryzwgg92mRnn7kTQ== X-Received: by 10.50.62.45 with SMTP id v13mr24006382igr.43.1456344796607; Wed, 24 Feb 2016 12:13:16 -0800 (PST) Received: from [192.168.0.6] (d199-74-164-53.col.wideopenwest.com. [74.199.53.164]) by smtp.gmail.com with ESMTPSA id 78sm1910878iof.22.2016.02.24.12.13.15 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 24 Feb 2016 12:13:15 -0800 (PST) From: Programmingkid Date: Wed, 24 Feb 2016 15:13:14 -0500 Message-Id: To: The OpenBIOS Mailinglist , qemu-devel qemu-devel , "qemu-ppc@nongnu.org list:PowerPC" Mime-Version: 1.0 (Apple Message framework v1084) X-Mailer: Apple Mail (2.1084) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:4001:c06::22f Subject: [Qemu-devel] Trying to figure out what 9 means to the escc X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org With the below patch I can see that Mac OS 9.0 is having escc_mem_write() go to the SERIAL_CTRL case. Then to the W_CMD case. Then to the CMD_HI case. This then causes newreg to be set to the value 9. What I need to know is what is this value for. Does anyone know what it means? Afterwords Mac OS 9.0 will write the value 0xc0 to the escc. This causes the escc to reset. This pdf might be helpful for anyone who is interested in helping: http://www.zilog.com/docs/serial/scc_escc_um.pdf --- hw/char/escc.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/hw/char/escc.c b/hw/char/escc.c index 98a1c21..f1fc70e 100644 --- a/hw/char/escc.c +++ b/hw/char/escc.c @@ -472,6 +472,7 @@ static void escc_update_parameters(ChannelState *s) static void escc_mem_write(void *opaque, hwaddr addr, uint64_t val, unsigned size) { + ESCCState *serial = opaque; ChannelState *s; uint32_t saddr; @@ -481,22 +482,31 @@ static void escc_mem_write(void *opaque, hwaddr addr, saddr = (addr >> serial->it_shift) & 1; channel = (addr >> (serial->it_shift + 1)) & 1; s = &serial->chn[channel]; + + printf("%s(): start value:0x%x register:0x%x\n", __func__, val, saddr); + switch (saddr) { case SERIAL_CTRL: + printf("%s() SERIAL_CTRL case\n", __func__); trace_escc_mem_writeb_ctrl(CHN_C(s), s->reg, val & 0xff); newreg = 0; switch (s->reg) { case W_CMD: + printf("%s() W_CMD case\n", __func__); newreg = val & CMD_PTR_MASK; val &= CMD_CMD_MASK; switch (val) { case CMD_HI: + printf("%s() CMD_HI case\n", __func__); newreg |= CMD_HI; + printf("%s(): newreg = 0x%x\n", __func__, newreg); break; case CMD_CLR_TXINT: + printf("%s() CMD_CLR_TXINT case\n", __func__); clr_txint(s); break; case CMD_CLR_IUS: + printf("%s() CMD_CLR_IUS case\n", __func__); if (s->rxint_under_svc) { s->rxint_under_svc = 0; if (s->txint) { @@ -508,6 +518,7 @@ static void escc_mem_write(void *opaque, hwaddr addr, escc_update_irq(s); break; default: + printf("%s(): unprogrammed command detected: value:%d\n", __func__, val); break; } break; @@ -515,36 +526,44 @@ static void escc_mem_write(void *opaque, hwaddr addr, case W_SYNC1 ... W_TXBUF: case W_MISC1 ... W_CLOCK: case W_MISC2 ... W_EXTINT: + printf("%s() W_MISC2 case\n", __func__); s->wregs[s->reg] = val; break; case W_TXCTRL1: case W_TXCTRL2: + printf("%s() W_TXCTRL2 case\n", __func__); s->wregs[s->reg] = val; escc_update_parameters(s); break; case W_BRGLO: case W_BRGHI: + printf("%s() W_BRGHI case\n", __func__); s->wregs[s->reg] = val; s->rregs[s->reg] = val; escc_update_parameters(s); break; case W_MINTR: + printf("%s(): W_MINTR detected\n", __func__); switch (val & MINTR_RST_MASK) { case 0: default: break; case MINTR_RST_B: + printf("%s() MINTR_RST_B case\n", __func__); escc_reset_chn(&serial->chn[0]); return; case MINTR_RST_A: + printf("%s() MINTR_RST_A case\n", __func__); escc_reset_chn(&serial->chn[1]); return; case MINTR_RST_ALL: + printf("%s(): MINTR_RST_ALL case\n", __func__); escc_reset(DEVICE(serial)); return; } break; default: + printf("%s(): unprogrammed command detected: value:%d\n", __func__, val); break; } if (s->reg == 0) @@ -553,6 +572,7 @@ static void escc_mem_write(void *opaque, hwaddr addr, s->reg = 0; break; case SERIAL_DATA: + printf("%s() SERIAL_DATA case\n", __func__); trace_escc_mem_writeb_data(CHN_C(s), val); s->tx = val; if (s->wregs[W_TXCTRL2] & TXCTRL2_TXEN) { // tx enabled @@ -567,6 +587,7 @@ static void escc_mem_write(void *opaque, hwaddr addr, set_txint(s); break; default: + printf("%s(): unprogrammed command detected: value:%d\n", __func__, val); break; } } @@ -583,11 +604,16 @@ static uint64_t escc_mem_read(void *opaque, hwaddr addr, saddr = (addr >> serial->it_shift) & 1; channel = (addr >> (serial->it_shift + 1)) & 1; s = &serial->chn[channel]; + + printf("%s(): address:0x%x saddr:0x%x\n", __func__, addr, saddr); + switch (saddr) { case SERIAL_CTRL: trace_escc_mem_readb_ctrl(CHN_C(s), s->reg, s->rregs[s->reg]); + printf("%s(): s->reg = 0x%x\n", __func__, s->reg); ret = s->rregs[s->reg]; s->reg = 0; + printf("%s(): SERIAL_CTRL returning 0x%x\n", __func__, ret); return ret; case SERIAL_DATA: s->rregs[R_STATUS] &= ~STATUS_RXAV; @@ -599,8 +625,10 @@ static uint64_t escc_mem_read(void *opaque, hwaddr addr, trace_escc_mem_readb_data(CHN_C(s), ret); if (s->chr) qemu_chr_accept_input(s->chr); + printf("%s(): SERIAL_DATA returning 0x%x\n", __func__, ret); return ret; default: + printf("%s(): default case for address 0x%x\n", __func__, addr); break; } return 0;