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 40b28f0188SIgor Mammedov void ppc4xx_sdram_banks(MemoryRegion *ram, int nr_banks, 41734c44eaSBALATON Zoltan Ppc4xxSdramBank ram_banks[], 427d8ccf58SBALATON Zoltan const ram_addr_t sdram_bank_sizes[]); 43b7da58fdSaurel32 4442c281a2SAndreas Färber #define TYPE_PPC4xx_PCI_HOST_BRIDGE "ppc4xx-pcihost" 4542c281a2SAndreas Färber 46629cae61SCédric Le Goater /* 47629cae61SCédric Le Goater * Generic DCR device 48629cae61SCédric Le Goater */ 49629cae61SCédric Le Goater #define TYPE_PPC4xx_DCR_DEVICE "ppc4xx-dcr-device" 50629cae61SCédric Le Goater OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxDcrDeviceState, PPC4xx_DCR_DEVICE); 51629cae61SCédric Le Goater struct Ppc4xxDcrDeviceState { 52629cae61SCédric Le Goater SysBusDevice parent_obj; 53629cae61SCédric Le Goater 54629cae61SCédric Le Goater PowerPCCPU *cpu; 55629cae61SCédric Le Goater }; 56629cae61SCédric Le Goater 57629cae61SCédric Le Goater void ppc4xx_dcr_register(Ppc4xxDcrDeviceState *dev, int dcrn, void *opaque, 58629cae61SCédric Le Goater dcr_read_cb dcr_read, dcr_write_cb dcr_write); 59629cae61SCédric Le Goater bool ppc4xx_dcr_realize(Ppc4xxDcrDeviceState *dev, PowerPCCPU *cpu, 60629cae61SCédric Le Goater Error **errp); 61629cae61SCédric Le Goater 62da116a8aSCédric Le Goater /* Memory Access Layer (MAL) */ 63da116a8aSCédric Le Goater #define TYPE_PPC4xx_MAL "ppc4xx-mal" 64da116a8aSCédric Le Goater OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxMalState, PPC4xx_MAL); 65da116a8aSCédric Le Goater struct Ppc4xxMalState { 66da116a8aSCédric Le Goater Ppc4xxDcrDeviceState parent_obj; 67da116a8aSCédric Le Goater 68da116a8aSCédric Le Goater qemu_irq irqs[4]; 69da116a8aSCédric Le Goater uint32_t cfg; 70da116a8aSCédric Le Goater uint32_t esr; 71da116a8aSCédric Le Goater uint32_t ier; 72da116a8aSCédric Le Goater uint32_t txcasr; 73da116a8aSCédric Le Goater uint32_t txcarr; 74da116a8aSCédric Le Goater uint32_t txeobisr; 75da116a8aSCédric Le Goater uint32_t txdeir; 76da116a8aSCédric Le Goater uint32_t rxcasr; 77da116a8aSCédric Le Goater uint32_t rxcarr; 78da116a8aSCédric Le Goater uint32_t rxeobisr; 79da116a8aSCédric Le Goater uint32_t rxdeir; 80da116a8aSCédric Le Goater uint32_t *txctpr; 81da116a8aSCédric Le Goater uint32_t *rxctpr; 82da116a8aSCédric Le Goater uint32_t *rcbs; 83da116a8aSCédric Le Goater uint8_t txcnum; 84da116a8aSCédric Le Goater uint8_t rxcnum; 85da116a8aSCédric Le Goater }; 86da116a8aSCédric Le Goater 872d54aaf1SBALATON Zoltan /* Peripheral local bus arbitrer */ 88052c779bSBALATON Zoltan #define TYPE_PPC4xx_PLB "ppc4xx-plb" 89052c779bSBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxPlbState, PPC4xx_PLB); 90052c779bSBALATON Zoltan struct Ppc4xxPlbState { 912d54aaf1SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 922d54aaf1SBALATON Zoltan 932d54aaf1SBALATON Zoltan uint32_t acr; 942d54aaf1SBALATON Zoltan uint32_t bear; 952d54aaf1SBALATON Zoltan uint32_t besr; 962d54aaf1SBALATON Zoltan }; 972d54aaf1SBALATON Zoltan 98127ba8d0SBALATON Zoltan /* Peripheral controller */ 99cba58aa7SBALATON Zoltan #define TYPE_PPC4xx_EBC "ppc4xx-ebc" 100cba58aa7SBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxEbcState, PPC4xx_EBC); 101cba58aa7SBALATON Zoltan struct Ppc4xxEbcState { 102127ba8d0SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 103127ba8d0SBALATON Zoltan 104127ba8d0SBALATON Zoltan uint32_t addr; 105127ba8d0SBALATON Zoltan uint32_t bcr[8]; 106127ba8d0SBALATON Zoltan uint32_t bap[8]; 107127ba8d0SBALATON Zoltan uint32_t bear; 108127ba8d0SBALATON Zoltan uint32_t besr0; 109127ba8d0SBALATON Zoltan uint32_t besr1; 110127ba8d0SBALATON Zoltan uint32_t cfg; 111127ba8d0SBALATON Zoltan }; 112127ba8d0SBALATON Zoltan 113*4fc30e15SBALATON Zoltan /* SDRAM DDR controller */ 114*4fc30e15SBALATON Zoltan #define TYPE_PPC4xx_SDRAM_DDR "ppc4xx-sdram-ddr" 115*4fc30e15SBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxSdramDdrState, PPC4xx_SDRAM_DDR); 116*4fc30e15SBALATON Zoltan struct Ppc4xxSdramDdrState { 117*4fc30e15SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 118*4fc30e15SBALATON Zoltan 119*4fc30e15SBALATON Zoltan MemoryRegion *dram_mr; 120*4fc30e15SBALATON Zoltan uint32_t nbanks; /* Banks to use from 4, e.g. when board has less slots */ 121*4fc30e15SBALATON Zoltan Ppc4xxSdramBank bank[4]; 122*4fc30e15SBALATON Zoltan qemu_irq irq; 123*4fc30e15SBALATON Zoltan 124*4fc30e15SBALATON Zoltan uint32_t addr; 125*4fc30e15SBALATON Zoltan uint32_t besr0; 126*4fc30e15SBALATON Zoltan uint32_t besr1; 127*4fc30e15SBALATON Zoltan uint32_t bear; 128*4fc30e15SBALATON Zoltan uint32_t cfg; 129*4fc30e15SBALATON Zoltan uint32_t status; 130*4fc30e15SBALATON Zoltan uint32_t rtr; 131*4fc30e15SBALATON Zoltan uint32_t pmit; 132*4fc30e15SBALATON Zoltan uint32_t tr; 133*4fc30e15SBALATON Zoltan uint32_t ecccfg; 134*4fc30e15SBALATON Zoltan uint32_t eccesr; 135*4fc30e15SBALATON Zoltan }; 136*4fc30e15SBALATON Zoltan 137*4fc30e15SBALATON Zoltan void ppc4xx_sdram_enable(Ppc4xxSdramDdrState *s); 138*4fc30e15SBALATON Zoltan 139121d0712SMarkus Armbruster #endif /* PPC4XX_H */ 140