Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/816033/?format=api
{ "id": 816033, "url": "http://patchwork.ozlabs.org/api/patches/816033/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1505888401-10130-3-git-send-email-mark.cave-ayland@ilande.co.uk/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1505888401-10130-3-git-send-email-mark.cave-ayland@ilande.co.uk>", "list_archive_url": null, "date": "2017-09-20T06:20:01", "name": "[2/2] macio: convert pmac_ide_ops from old_mmio", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "1404f9eee3d67fe7259fb289806165aa35cab5ab", "submitter": { "id": 12451, "url": "http://patchwork.ozlabs.org/api/people/12451/?format=api", "name": "Mark Cave-Ayland", "email": "mark.cave-ayland@ilande.co.uk" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1505888401-10130-3-git-send-email-mark.cave-ayland@ilande.co.uk/mbox/", "series": [ { "id": 4028, "url": "http://patchwork.ozlabs.org/api/series/4028/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=4028", "date": "2017-09-20T06:20:01", "name": "macio patches", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/4028/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/816033/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/816033/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)", "Received": [ "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xxqPd3mPSz9s7h\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 20 Sep 2017 16:21:09 +1000 (AEST)", "from localhost ([::1]:46920 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1duYNf-0003OH-Gd\n\tfor incoming@patchwork.ozlabs.org; Wed, 20 Sep 2017 02:21:07 -0400", "from eggs.gnu.org ([2001:4830:134:3::10]:34142)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <mark.cave-ayland@ilande.co.uk>) id 1duYMu-0003LU-NT\n\tfor qemu-devel@nongnu.org; Wed, 20 Sep 2017 02:20:22 -0400", "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <mark.cave-ayland@ilande.co.uk>) id 1duYMr-0006XP-Uv\n\tfor qemu-devel@nongnu.org; Wed, 20 Sep 2017 02:20:20 -0400", "from chuckie.co.uk ([82.165.15.123]:54656\n\thelo=s16892447.onlinehome-server.info)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <mark.cave-ayland@ilande.co.uk>)\n\tid 1duYMr-0006S0-Lz; Wed, 20 Sep 2017 02:20:17 -0400", "from host109-151-159-252.range109-151.btcentralplus.com\n\t([109.151.159.252] helo=kentang.home)\n\tby s16892447.onlinehome-server.info with esmtpsa\n\t(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76)\n\t(envelope-from <mark.cave-ayland@ilande.co.uk>)\n\tid 1duYMs-0005qd-A0; Wed, 20 Sep 2017 07:20:19 +0100" ], "From": "Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>", "To": "qemu-devel@nongnu.org, qemu-ppc@nongnu.org, david@gibson.dropbear.id.au", "Date": "Wed, 20 Sep 2017 07:20:01 +0100", "Message-Id": "<1505888401-10130-3-git-send-email-mark.cave-ayland@ilande.co.uk>", "X-Mailer": "git-send-email 1.7.10.4", "In-Reply-To": "<1505888401-10130-1-git-send-email-mark.cave-ayland@ilande.co.uk>", "References": "<1505888401-10130-1-git-send-email-mark.cave-ayland@ilande.co.uk>", "X-SA-Exim-Connect-IP": "109.151.159.252", "X-SA-Exim-Mail-From": "mark.cave-ayland@ilande.co.uk", "X-SA-Exim-Version": "4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000)", "X-SA-Exim-Scanned": "Yes (on s16892447.onlinehome-server.info)", "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 3.x [fuzzy]", "X-Received-From": "82.165.15.123", "Subject": "[Qemu-devel] [PATCH 2/2] macio: convert pmac_ide_ops from old_mmio", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.21", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>\n---\n hw/ide/macio.c | 181 +++++++++++++++++++++++---------------------------------\n 1 file changed, 75 insertions(+), 106 deletions(-)", "diff": "diff --git a/hw/ide/macio.c b/hw/ide/macio.c\nindex db5db39..18ae952 100644\n--- a/hw/ide/macio.c\n+++ b/hw/ide/macio.c\n@@ -255,131 +255,100 @@ static void pmac_ide_flush(DBDMA_io *io)\n }\n \n /* PowerMac IDE memory IO */\n-static void pmac_ide_writeb (void *opaque,\n- hwaddr addr, uint32_t val)\n+static uint64_t pmac_ide_read(void *opaque, hwaddr addr, unsigned size)\n {\n MACIOIDEState *d = opaque;\n-\n- addr = (addr & 0xFFF) >> 4;\n- switch (addr) {\n- case 1 ... 7:\n- ide_ioport_write(&d->bus, addr, val);\n- break;\n- case 8:\n- case 22:\n- ide_cmd_write(&d->bus, 0, val);\n+ uint64_t retval = 0xffffffff;\n+ int reg = addr >> 4;\n+\n+ switch (reg) {\n+ case 0x0:\n+ if (size == 2) {\n+ retval = ide_data_readw(&d->bus, 0);\n+ } else if (size == 4) {\n+ retval = ide_data_readl(&d->bus, 0);\n+ }\n break;\n- default:\n+ case 0x1 ... 0x7:\n+ if (size == 1) {\n+ retval = ide_ioport_read(&d->bus, reg);\n+ }\n break;\n- }\n-}\n-\n-static uint32_t pmac_ide_readb (void *opaque,hwaddr addr)\n-{\n- uint8_t retval;\n- MACIOIDEState *d = opaque;\n-\n- addr = (addr & 0xFFF) >> 4;\n- switch (addr) {\n- case 1 ... 7:\n- retval = ide_ioport_read(&d->bus, addr);\n+ case 0x8:\n+ case 0x16:\n+ if (size == 1) {\n+ retval = ide_status_read(&d->bus, 0);\n+ }\n break;\n- case 8:\n- case 22:\n- retval = ide_status_read(&d->bus, 0);\n+ case 0x20:\n+ if (size == 4) {\n+ retval = d->timing_reg;\n+ }\n break;\n- default:\n- retval = 0xFF;\n+ case 0x30:\n+ /* This is an interrupt state register that only exists\n+ * in the KeyLargo and later variants. Bit 0x8000_0000\n+ * latches the DMA interrupt and has to be written to\n+ * clear. Bit 0x4000_0000 is an image of the disk\n+ * interrupt. MacOS X relies on this and will hang if\n+ * we don't provide at least the disk interrupt\n+ */\n+ if (size == 4) {\n+ retval = d->irq_reg;\n+ }\n break;\n }\n- return retval;\n-}\n \n-static void pmac_ide_writew (void *opaque,\n- hwaddr addr, uint32_t val)\n-{\n- MACIOIDEState *d = opaque;\n-\n- addr = (addr & 0xFFF) >> 4;\n- val = bswap16(val);\n- if (addr == 0) {\n- ide_data_writew(&d->bus, 0, val);\n- }\n-}\n-\n-static uint32_t pmac_ide_readw (void *opaque,hwaddr addr)\n-{\n- uint16_t retval;\n- MACIOIDEState *d = opaque;\n-\n- addr = (addr & 0xFFF) >> 4;\n- if (addr == 0) {\n- retval = ide_data_readw(&d->bus, 0);\n- } else {\n- retval = 0xFFFF;\n- }\n- retval = bswap16(retval);\n return retval;\n }\n \n-static void pmac_ide_writel (void *opaque,\n- hwaddr addr, uint32_t val)\n-{\n- MACIOIDEState *d = opaque;\n \n- addr = (addr & 0xFFF) >> 4;\n- val = bswap32(val);\n- if (addr == 0) {\n- ide_data_writel(&d->bus, 0, val);\n- } else if (addr == 0x20) {\n- d->timing_reg = val;\n- } else if (addr == 0x30) {\n- if (val & 0x80000000u) {\n- d->irq_reg &= 0x7fffffff;\n- }\n- }\n-}\n-\n-static uint32_t pmac_ide_readl (void *opaque,hwaddr addr)\n+static void pmac_ide_write(void *opaque, hwaddr addr, uint64_t val,\n+ unsigned size)\n {\n- uint32_t retval;\n MACIOIDEState *d = opaque;\n-\n- addr = (addr & 0xFFF) >> 4;\n- if (addr == 0) {\n- retval = ide_data_readl(&d->bus, 0);\n- } else if (addr == 0x20) {\n- retval = d->timing_reg;\n- } else if (addr == 0x30) {\n- /* This is an interrupt state register that only exists\n- * in the KeyLargo and later variants. Bit 0x8000_0000\n- * latches the DMA interrupt and has to be written to\n- * clear. Bit 0x4000_0000 is an image of the disk\n- * interrupt. MacOS X relies on this and will hang if\n- * we don't provide at least the disk interrupt\n- */\n- retval = d->irq_reg;\n- } else {\n- retval = 0xFFFFFFFF;\n+ int reg = addr >> 4;\n+\n+ switch (reg) {\n+ case 0x0:\n+ if (size == 2) {\n+ ide_data_writew(&d->bus, 0, val);\n+ } else if (size == 4) {\n+ ide_data_writel(&d->bus, 0, val);\n+ }\n+ break;\n+ case 0x1 ... 0x7:\n+ if (size == 1) {\n+ ide_ioport_write(&d->bus, reg, val);\n+ }\n+ break;\n+ case 0x8:\n+ case 0x16:\n+ if (size == 1) {\n+ ide_cmd_write(&d->bus, 0, val);\n+ }\n+ break;\n+ case 0x20:\n+ if (size == 4) {\n+ d->timing_reg = val;\n+ }\n+ break;\n+ case 0x30:\n+ if (size == 4) {\n+ if (val & 0x80000000u) {\n+ d->irq_reg &= 0x7fffffff;\n+ }\n+ }\n+ break;\n }\n- retval = bswap32(retval);\n- return retval;\n }\n \n static const MemoryRegionOps pmac_ide_ops = {\n- .old_mmio = {\n- .write = {\n- pmac_ide_writeb,\n- pmac_ide_writew,\n- pmac_ide_writel,\n- },\n- .read = {\n- pmac_ide_readb,\n- pmac_ide_readw,\n- pmac_ide_readl,\n- },\n- },\n- .endianness = DEVICE_NATIVE_ENDIAN,\n+ .read = pmac_ide_read,\n+ .write = pmac_ide_write,\n+ .valid.min_access_size = 1,\n+ .valid.max_access_size = 4,\n+ .endianness = DEVICE_LITTLE_ENDIAN,\n };\n \n static const VMStateDescription vmstate_pmac = {\n", "prefixes": [ "2/2" ] }