1008ff9d7Sj_mayer /* 2008ff9d7Sj_mayer * QEMU PowerPC 4xx emulation shared definitions 3008ff9d7Sj_mayer * 4008ff9d7Sj_mayer * Copyright (c) 2007 Jocelyn Mayer 5008ff9d7Sj_mayer * 6008ff9d7Sj_mayer * Permission is hereby granted, free of charge, to any person obtaining a copy 7008ff9d7Sj_mayer * of this software and associated documentation files (the "Software"), to deal 8008ff9d7Sj_mayer * in the Software without restriction, including without limitation the rights 9008ff9d7Sj_mayer * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10008ff9d7Sj_mayer * copies of the Software, and to permit persons to whom the Software is 11008ff9d7Sj_mayer * furnished to do so, subject to the following conditions: 12008ff9d7Sj_mayer * 13008ff9d7Sj_mayer * The above copyright notice and this permission notice shall be included in 14008ff9d7Sj_mayer * all copies or substantial portions of the Software. 15008ff9d7Sj_mayer * 16008ff9d7Sj_mayer * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17008ff9d7Sj_mayer * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18008ff9d7Sj_mayer * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19008ff9d7Sj_mayer * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20008ff9d7Sj_mayer * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21008ff9d7Sj_mayer * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22008ff9d7Sj_mayer * THE SOFTWARE. 23008ff9d7Sj_mayer */ 24008ff9d7Sj_mayer 25121d0712SMarkus Armbruster #ifndef PPC4XX_H 26121d0712SMarkus Armbruster #define PPC4XX_H 27008ff9d7Sj_mayer 28ec150c7eSMarkus Armbruster #include "hw/ppc/ppc.h" 29ec150c7eSMarkus Armbruster #include "exec/memory.h" 30629cae61SCédric Le Goater #include "hw/sysbus.h" 31ec150c7eSMarkus Armbruster 3286269823SBALATON Zoltan typedef struct { 3386269823SBALATON Zoltan MemoryRegion ram; 3486269823SBALATON Zoltan MemoryRegion container; /* used for clipping */ 3586269823SBALATON Zoltan hwaddr base; 3686269823SBALATON Zoltan hwaddr size; 3786269823SBALATON Zoltan uint32_t bcr; 3886269823SBALATON Zoltan } Ppc4xxSdramBank; 3986269823SBALATON Zoltan 40*68b9a2e3SBALATON Zoltan void ppc4xx_sdram_enable(CPUPPCState *env); 41*68b9a2e3SBALATON Zoltan 42b28f0188SIgor Mammedov void ppc4xx_sdram_banks(MemoryRegion *ram, int nr_banks, 43b6dcbe08SAvi Kivity MemoryRegion ram_memories[], 44a0258e4aSIgor Mammedov hwaddr ram_bases[], hwaddr ram_sizes[], 457d8ccf58SBALATON Zoltan const ram_addr_t sdram_bank_sizes[]); 46b7da58fdSaurel32 47e2684c0bSAndreas Färber void ppc4xx_sdram_init (CPUPPCState *env, qemu_irq irq, int nbanks, 48b6dcbe08SAvi Kivity MemoryRegion ram_memories[], 49a8170e5eSAvi Kivity hwaddr *ram_bases, 50*68b9a2e3SBALATON Zoltan hwaddr *ram_sizes); 5161b24405Saurel32 5242c281a2SAndreas Färber #define TYPE_PPC4xx_PCI_HOST_BRIDGE "ppc4xx-pcihost" 5342c281a2SAndreas Färber 54629cae61SCédric Le Goater /* 55629cae61SCédric Le Goater * Generic DCR device 56629cae61SCédric Le Goater */ 57629cae61SCédric Le Goater #define TYPE_PPC4xx_DCR_DEVICE "ppc4xx-dcr-device" 58629cae61SCédric Le Goater OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxDcrDeviceState, PPC4xx_DCR_DEVICE); 59629cae61SCédric Le Goater struct Ppc4xxDcrDeviceState { 60629cae61SCédric Le Goater SysBusDevice parent_obj; 61629cae61SCédric Le Goater 62629cae61SCédric Le Goater PowerPCCPU *cpu; 63629cae61SCédric Le Goater }; 64629cae61SCédric Le Goater 65629cae61SCédric Le Goater void ppc4xx_dcr_register(Ppc4xxDcrDeviceState *dev, int dcrn, void *opaque, 66629cae61SCédric Le Goater dcr_read_cb dcr_read, dcr_write_cb dcr_write); 67629cae61SCédric Le Goater bool ppc4xx_dcr_realize(Ppc4xxDcrDeviceState *dev, PowerPCCPU *cpu, 68629cae61SCédric Le Goater Error **errp); 69629cae61SCédric Le Goater 70da116a8aSCédric Le Goater /* Memory Access Layer (MAL) */ 71da116a8aSCédric Le Goater #define TYPE_PPC4xx_MAL "ppc4xx-mal" 72da116a8aSCédric Le Goater OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxMalState, PPC4xx_MAL); 73da116a8aSCédric Le Goater struct Ppc4xxMalState { 74da116a8aSCédric Le Goater Ppc4xxDcrDeviceState parent_obj; 75da116a8aSCédric Le Goater 76da116a8aSCédric Le Goater qemu_irq irqs[4]; 77da116a8aSCédric Le Goater uint32_t cfg; 78da116a8aSCédric Le Goater uint32_t esr; 79da116a8aSCédric Le Goater uint32_t ier; 80da116a8aSCédric Le Goater uint32_t txcasr; 81da116a8aSCédric Le Goater uint32_t txcarr; 82da116a8aSCédric Le Goater uint32_t txeobisr; 83da116a8aSCédric Le Goater uint32_t txdeir; 84da116a8aSCédric Le Goater uint32_t rxcasr; 85da116a8aSCédric Le Goater uint32_t rxcarr; 86da116a8aSCédric Le Goater uint32_t rxeobisr; 87da116a8aSCédric Le Goater uint32_t rxdeir; 88da116a8aSCédric Le Goater uint32_t *txctpr; 89da116a8aSCédric Le Goater uint32_t *rxctpr; 90da116a8aSCédric Le Goater uint32_t *rcbs; 91da116a8aSCédric Le Goater uint8_t txcnum; 92da116a8aSCédric Le Goater uint8_t rxcnum; 93da116a8aSCédric Le Goater }; 94da116a8aSCédric Le Goater 952d54aaf1SBALATON Zoltan /* Peripheral local bus arbitrer */ 96052c779bSBALATON Zoltan #define TYPE_PPC4xx_PLB "ppc4xx-plb" 97052c779bSBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxPlbState, PPC4xx_PLB); 98052c779bSBALATON Zoltan struct Ppc4xxPlbState { 992d54aaf1SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 1002d54aaf1SBALATON Zoltan 1012d54aaf1SBALATON Zoltan uint32_t acr; 1022d54aaf1SBALATON Zoltan uint32_t bear; 1032d54aaf1SBALATON Zoltan uint32_t besr; 1042d54aaf1SBALATON Zoltan }; 1052d54aaf1SBALATON Zoltan 106127ba8d0SBALATON Zoltan /* Peripheral controller */ 107cba58aa7SBALATON Zoltan #define TYPE_PPC4xx_EBC "ppc4xx-ebc" 108cba58aa7SBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxEbcState, PPC4xx_EBC); 109cba58aa7SBALATON Zoltan struct Ppc4xxEbcState { 110127ba8d0SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 111127ba8d0SBALATON Zoltan 112127ba8d0SBALATON Zoltan uint32_t addr; 113127ba8d0SBALATON Zoltan uint32_t bcr[8]; 114127ba8d0SBALATON Zoltan uint32_t bap[8]; 115127ba8d0SBALATON Zoltan uint32_t bear; 116127ba8d0SBALATON Zoltan uint32_t besr0; 117127ba8d0SBALATON Zoltan uint32_t besr1; 118127ba8d0SBALATON Zoltan uint32_t cfg; 119127ba8d0SBALATON Zoltan }; 120127ba8d0SBALATON Zoltan 121121d0712SMarkus Armbruster #endif /* PPC4XX_H */ 122