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 4068b9a2e3SBALATON Zoltan void ppc4xx_sdram_enable(CPUPPCState *env); 4168b9a2e3SBALATON Zoltan 42b28f0188SIgor Mammedov void ppc4xx_sdram_banks(MemoryRegion *ram, int nr_banks, 43*734c44eaSBALATON Zoltan Ppc4xxSdramBank ram_banks[], 447d8ccf58SBALATON Zoltan const ram_addr_t sdram_bank_sizes[]); 45b7da58fdSaurel32 46e2684c0bSAndreas Färber void ppc4xx_sdram_init(CPUPPCState *env, qemu_irq irq, int nbanks, 47*734c44eaSBALATON Zoltan Ppc4xxSdramBank *ram_banks); 4861b24405Saurel32 4942c281a2SAndreas Färber #define TYPE_PPC4xx_PCI_HOST_BRIDGE "ppc4xx-pcihost" 5042c281a2SAndreas Färber 51629cae61SCédric Le Goater /* 52629cae61SCédric Le Goater * Generic DCR device 53629cae61SCédric Le Goater */ 54629cae61SCédric Le Goater #define TYPE_PPC4xx_DCR_DEVICE "ppc4xx-dcr-device" 55629cae61SCédric Le Goater OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxDcrDeviceState, PPC4xx_DCR_DEVICE); 56629cae61SCédric Le Goater struct Ppc4xxDcrDeviceState { 57629cae61SCédric Le Goater SysBusDevice parent_obj; 58629cae61SCédric Le Goater 59629cae61SCédric Le Goater PowerPCCPU *cpu; 60629cae61SCédric Le Goater }; 61629cae61SCédric Le Goater 62629cae61SCédric Le Goater void ppc4xx_dcr_register(Ppc4xxDcrDeviceState *dev, int dcrn, void *opaque, 63629cae61SCédric Le Goater dcr_read_cb dcr_read, dcr_write_cb dcr_write); 64629cae61SCédric Le Goater bool ppc4xx_dcr_realize(Ppc4xxDcrDeviceState *dev, PowerPCCPU *cpu, 65629cae61SCédric Le Goater Error **errp); 66629cae61SCédric Le Goater 67da116a8aSCédric Le Goater /* Memory Access Layer (MAL) */ 68da116a8aSCédric Le Goater #define TYPE_PPC4xx_MAL "ppc4xx-mal" 69da116a8aSCédric Le Goater OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxMalState, PPC4xx_MAL); 70da116a8aSCédric Le Goater struct Ppc4xxMalState { 71da116a8aSCédric Le Goater Ppc4xxDcrDeviceState parent_obj; 72da116a8aSCédric Le Goater 73da116a8aSCédric Le Goater qemu_irq irqs[4]; 74da116a8aSCédric Le Goater uint32_t cfg; 75da116a8aSCédric Le Goater uint32_t esr; 76da116a8aSCédric Le Goater uint32_t ier; 77da116a8aSCédric Le Goater uint32_t txcasr; 78da116a8aSCédric Le Goater uint32_t txcarr; 79da116a8aSCédric Le Goater uint32_t txeobisr; 80da116a8aSCédric Le Goater uint32_t txdeir; 81da116a8aSCédric Le Goater uint32_t rxcasr; 82da116a8aSCédric Le Goater uint32_t rxcarr; 83da116a8aSCédric Le Goater uint32_t rxeobisr; 84da116a8aSCédric Le Goater uint32_t rxdeir; 85da116a8aSCédric Le Goater uint32_t *txctpr; 86da116a8aSCédric Le Goater uint32_t *rxctpr; 87da116a8aSCédric Le Goater uint32_t *rcbs; 88da116a8aSCédric Le Goater uint8_t txcnum; 89da116a8aSCédric Le Goater uint8_t rxcnum; 90da116a8aSCédric Le Goater }; 91da116a8aSCédric Le Goater 922d54aaf1SBALATON Zoltan /* Peripheral local bus arbitrer */ 93052c779bSBALATON Zoltan #define TYPE_PPC4xx_PLB "ppc4xx-plb" 94052c779bSBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxPlbState, PPC4xx_PLB); 95052c779bSBALATON Zoltan struct Ppc4xxPlbState { 962d54aaf1SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 972d54aaf1SBALATON Zoltan 982d54aaf1SBALATON Zoltan uint32_t acr; 992d54aaf1SBALATON Zoltan uint32_t bear; 1002d54aaf1SBALATON Zoltan uint32_t besr; 1012d54aaf1SBALATON Zoltan }; 1022d54aaf1SBALATON Zoltan 103127ba8d0SBALATON Zoltan /* Peripheral controller */ 104cba58aa7SBALATON Zoltan #define TYPE_PPC4xx_EBC "ppc4xx-ebc" 105cba58aa7SBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxEbcState, PPC4xx_EBC); 106cba58aa7SBALATON Zoltan struct Ppc4xxEbcState { 107127ba8d0SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 108127ba8d0SBALATON Zoltan 109127ba8d0SBALATON Zoltan uint32_t addr; 110127ba8d0SBALATON Zoltan uint32_t bcr[8]; 111127ba8d0SBALATON Zoltan uint32_t bap[8]; 112127ba8d0SBALATON Zoltan uint32_t bear; 113127ba8d0SBALATON Zoltan uint32_t besr0; 114127ba8d0SBALATON Zoltan uint32_t besr1; 115127ba8d0SBALATON Zoltan uint32_t cfg; 116127ba8d0SBALATON Zoltan }; 117127ba8d0SBALATON Zoltan 118121d0712SMarkus Armbruster #endif /* PPC4XX_H */ 119