From patchwork Thu Jul 22 21:55:43 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Blue Swirl X-Patchwork-Id: 59693 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 8109F1007D2 for ; Fri, 23 Jul 2010 09:08:51 +1000 (EST) Received: from localhost ([127.0.0.1]:56489 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Oc4sh-0004rX-PU for incoming@patchwork.ozlabs.org; Thu, 22 Jul 2010 19:08:48 -0400 Received: from [140.186.70.92] (port=42696 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Oc3xT-00030V-5D for qemu-devel@nongnu.org; Thu, 22 Jul 2010 18:09:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Oc3kK-0002Pu-7f for qemu-devel@nongnu.org; Thu, 22 Jul 2010 17:56:05 -0400 Received: from mail-vw0-f45.google.com ([209.85.212.45]:35337) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Oc3kK-0002Pk-3a for qemu-devel@nongnu.org; Thu, 22 Jul 2010 17:56:04 -0400 Received: by vws19 with SMTP id 19so692857vws.4 for ; Thu, 22 Jul 2010 14:56:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:from:date :message-id:subject:to:content-type; bh=6GEufmusvOxjhLZr8w2+bcqqDi1n7vU5slmOk3EBV3s=; b=vLfgl7m6z6S4pn+7M5VAFgtFp8Z4E8CxuEF990uH11dThhZnkyubRiQDT3y9mcKvfa oX/hon6yrQh69ervMF00erlwxrNyS1G9FLZLtWFsUnfzSyv9gqB8G0xxsTxGQ+OUDFBL FJ6A7VjB81CHGmNgCXDCYfBzcZfTtqHcm8+4k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; b=CJgknUux0iUCqe2VkVqpWNsoBvh7FAWUQ8vdKaf9Ul2qavluzHPkBMMz8T4pd6cm8o KRhkRNKdh09Vs+tQx22kdo1ZpBWVx1QcXJdE77BZDOerqEQDIHIAvdxTX2N7yBv38FKY a8Y6ZIok03CuRgkdnGFl/Mp+DTaMl2Wv3LPy0= Received: by 10.224.69.16 with SMTP id x16mr1745420qai.284.1279835763306; Thu, 22 Jul 2010 14:56:03 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.185.146 with HTTP; Thu, 22 Jul 2010 14:55:43 -0700 (PDT) From: Blue Swirl Date: Thu, 22 Jul 2010 21:55:43 +0000 Message-ID: To: qemu-devel X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Subject: [Qemu-devel] [PATCH 05/34] macio: convert to pci_bar_map X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Use pci_bar_map() instead of a mapping function. Signed-off-by: Blue Swirl --- hw/macio.c | 107 ++++++++++++++++------------------------------------ hw/ppc_mac.h | 5 +- hw/ppc_newworld.c | 2 +- hw/ppc_oldworld.c | 4 +- 4 files changed, 39 insertions(+), 79 deletions(-) diff --git a/hw/macio.c b/hw/macio.c index 789ca55..8717bc0 100644 --- a/hw/macio.c +++ b/hw/macio.c @@ -27,83 +27,16 @@ #include "pci.h" #include "escc.h" -typedef struct macio_state_t macio_state_t; -struct macio_state_t { - int is_oldworld; - int pic_mem_index; - int dbdma_mem_index; - int cuda_mem_index; - int escc_mem_index; - void *nvram; - int nb_ide; - int ide_mem_index[4]; -}; - -static void macio_map (PCIDevice *pci_dev, int region_num, - pcibus_t addr, pcibus_t size, int type) -{ - macio_state_t *macio_state; - int i; - - macio_state = (macio_state_t *)(pci_dev + 1); - if (macio_state->pic_mem_index >= 0) { - if (macio_state->is_oldworld) { - /* Heathrow PIC */ - cpu_register_physical_memory(addr + 0x00000, 0x1000, - macio_state->pic_mem_index); - } else { - /* OpenPIC */ - cpu_register_physical_memory(addr + 0x40000, 0x40000, - macio_state->pic_mem_index); - } - } - if (macio_state->dbdma_mem_index >= 0) { - cpu_register_physical_memory(addr + 0x08000, 0x1000, - macio_state->dbdma_mem_index); - } - if (macio_state->escc_mem_index >= 0) { - cpu_register_physical_memory(addr + 0x13000, ESCC_SIZE << 4, - macio_state->escc_mem_index); - } - if (macio_state->cuda_mem_index >= 0) { - cpu_register_physical_memory(addr + 0x16000, 0x2000, - macio_state->cuda_mem_index); - } - for (i = 0; i < macio_state->nb_ide; i++) { - if (macio_state->ide_mem_index[i] >= 0) { - cpu_register_physical_memory(addr + 0x1f000 + (i * 0x1000), 0x1000, - macio_state->ide_mem_index[i]); - } - } - if (macio_state->nvram != NULL) - macio_nvram_map(macio_state->nvram, addr + 0x60000); -} - void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index, - int dbdma_mem_index, int cuda_mem_index, void *nvram, - int nb_ide, int *ide_mem_index, int escc_mem_index) + int dbdma_mem_index, int cuda_mem_index, int nvram_size, + int nvram_mem_index, int nb_ide, int *ide_mem_index, + int escc_mem_index) { PCIDevice *d; - macio_state_t *macio_state; int i; - d = pci_register_device(bus, "macio", - sizeof(PCIDevice) + sizeof(macio_state_t), - -1, NULL, NULL); - macio_state = (macio_state_t *)(d + 1); - macio_state->is_oldworld = is_oldworld; - macio_state->pic_mem_index = pic_mem_index; - macio_state->dbdma_mem_index = dbdma_mem_index; - macio_state->cuda_mem_index = cuda_mem_index; - macio_state->escc_mem_index = escc_mem_index; - macio_state->nvram = nvram; - if (nb_ide > 4) - nb_ide = 4; - macio_state->nb_ide = nb_ide; - for (i = 0; i < nb_ide; i++) - macio_state->ide_mem_index[i] = ide_mem_index[i]; - for (; i < 4; i++) - macio_state->ide_mem_index[i] = -1; + d = pci_register_device(bus, "macio", sizeof(PCIDevice), -1, NULL, NULL); + /* Note: this code is strongly inspirated from the corresponding code in PearPC */ @@ -113,6 +46,32 @@ void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index, d->config[0x3d] = 0x01; // interrupt on pin 1 - pci_register_bar(d, 0, 0x80000, - PCI_BASE_ADDRESS_SPACE_MEMORY, macio_map); + pci_register_bar(d, 0, 0x80000, PCI_BASE_ADDRESS_SPACE_MEMORY, NULL); + if (pic_mem_index >= 0) { + if (is_oldworld) { + /* Heathrow PIC */ + pci_bar_map(d, 0, 0, 0x1000, 0, pic_mem_index); + } else { + /* OpenPIC */ + pci_bar_map(d, 0, 0, 0x40000, 0x40000, pic_mem_index); + } + } + if (dbdma_mem_index >= 0) { + pci_bar_map(d, 0, 1, 0x8000, 0x1000, dbdma_mem_index); + } + if (escc_mem_index >= 0) { + pci_bar_map(d, 0, 2, 0x13000, ESCC_SIZE << 4, escc_mem_index); + } + if (cuda_mem_index >= 0) { + pci_bar_map(d, 0, 3, 0x16000, 0x2000, cuda_mem_index); + } + for (i = 0; i < nb_ide; i++) { + if (ide_mem_index[i] >= 0) { + pci_bar_map(d, 0, 4 + i, 0x1f000 + (i * 0x1000), 0x1000, + ide_mem_index[i]); + } + } + if (nvram_mem_index >= 0) { + pci_bar_map(d, 0, 4 + nb_ide, 0x60000, nvram_size, nvram_mem_index); + } } diff --git a/hw/ppc_mac.h b/hw/ppc_mac.h index 89f96bb..6b3e27f 100644 --- a/hw/ppc_mac.h +++ b/hw/ppc_mac.h @@ -46,8 +46,9 @@ void cuda_init (int *cuda_mem_index, qemu_irq irq); /* MacIO */ void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index, - int dbdma_mem_index, int cuda_mem_index, void *nvram, - int nb_ide, int *ide_mem_index, int escc_mem_index); + int dbdma_mem_index, int cuda_mem_index, int nvram_size, + int nvram_mem_index, int nb_ide, int *ide_mem_index, + int escc_mem_index); /* Heathrow PIC */ qemu_irq *heathrow_pic_init(int *pmem_index, diff --git a/hw/ppc_newworld.c b/hw/ppc_newworld.c index fbba9b6..75fef3c 100644 --- a/hw/ppc_newworld.c +++ b/hw/ppc_newworld.c @@ -383,7 +383,7 @@ static void ppc_core99_init (ram_addr_t ram_size, adb_mouse_init(&adb_bus); macio_init(pci_bus, PCI_DEVICE_ID_APPLE_UNI_N_KEYL, 0, pic_mem_index, - dbdma_mem_index, cuda_mem_index, NULL, 3, ide_mem_index, + dbdma_mem_index, cuda_mem_index, -1, 0, 3, ide_mem_index, escc_mem_index); if (usb_enabled) { diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c index 6b3ab89..220dca7 100644 --- a/hw/ppc_oldworld.c +++ b/hw/ppc_oldworld.c @@ -366,8 +366,8 @@ static void ppc_heathrow_init (ram_addr_t ram_size, pmac_format_nvram_partition(nvr, 0x2000); macio_init(pci_bus, PCI_DEVICE_ID_APPLE_343S1201, 1, pic_mem_index, - dbdma_mem_index, cuda_mem_index, nvr, 2, ide_mem_index, - escc_mem_index); + dbdma_mem_index, cuda_mem_index, nvram_mem_index, 0x2000, + 2, ide_mem_index, escc_mem_index); if (usb_enabled) { usb_ohci_init_pci(pci_bus, -1);