1e1218e48SMark Cave-Ayland /* 2e1218e48SMark Cave-Ayland * PowerMac MacIO device emulation 3e1218e48SMark Cave-Ayland * 4e1218e48SMark Cave-Ayland * Copyright (c) 2005-2007 Fabrice Bellard 5e1218e48SMark Cave-Ayland * Copyright (c) 2007 Jocelyn Mayer 6e1218e48SMark Cave-Ayland * 7e1218e48SMark Cave-Ayland * Permission is hereby granted, free of charge, to any person obtaining a copy 8e1218e48SMark Cave-Ayland * of this software and associated documentation files (the "Software"), to deal 9e1218e48SMark Cave-Ayland * in the Software without restriction, including without limitation the rights 10e1218e48SMark Cave-Ayland * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11e1218e48SMark Cave-Ayland * copies of the Software, and to permit persons to whom the Software is 12e1218e48SMark Cave-Ayland * furnished to do so, subject to the following conditions: 13e1218e48SMark Cave-Ayland * 14e1218e48SMark Cave-Ayland * The above copyright notice and this permission notice shall be included in 15e1218e48SMark Cave-Ayland * all copies or substantial portions of the Software. 16e1218e48SMark Cave-Ayland * 17e1218e48SMark Cave-Ayland * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18e1218e48SMark Cave-Ayland * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19e1218e48SMark Cave-Ayland * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20e1218e48SMark Cave-Ayland * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21e1218e48SMark Cave-Ayland * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22e1218e48SMark Cave-Ayland * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23e1218e48SMark Cave-Ayland * THE SOFTWARE. 24e1218e48SMark Cave-Ayland */ 25e1218e48SMark Cave-Ayland 26e1218e48SMark Cave-Ayland #ifndef MACIO_H 27e1218e48SMark Cave-Ayland #define MACIO_H 28e1218e48SMark Cave-Ayland 297c4166a9SMark Cave-Ayland #include "hw/char/escc.h" 305a6ac100SBALATON Zoltan #include "hw/pci/pci.h" 31ec150c7eSMarkus Armbruster #include "hw/ide/internal.h" 32017812dfSMark Cave-Ayland #include "hw/intc/heathrow_pic.h" 33e1218e48SMark Cave-Ayland #include "hw/misc/macio/cuda.h" 347c4166a9SMark Cave-Ayland #include "hw/misc/macio/gpio.h" 35d811d61fSMark Cave-Ayland #include "hw/misc/macio/pmu.h" 36ec150c7eSMarkus Armbruster #include "hw/ppc/mac.h" 37e1218e48SMark Cave-Ayland #include "hw/ppc/mac_dbdma.h" 38dda12e9aSMark Cave-Ayland #include "hw/ppc/openpic.h" 39db1015e9SEduardo Habkost #include "qom/object.h" 40e1218e48SMark Cave-Ayland 41*55078ea7SBALATON Zoltan /* Old World IRQs */ 42*55078ea7SBALATON Zoltan #define OLDWORLD_CUDA_IRQ 0x12 43*55078ea7SBALATON Zoltan #define OLDWORLD_ESCCB_IRQ 0x10 44*55078ea7SBALATON Zoltan #define OLDWORLD_ESCCA_IRQ 0xf 45*55078ea7SBALATON Zoltan #define OLDWORLD_IDE0_IRQ 0xd 46*55078ea7SBALATON Zoltan #define OLDWORLD_IDE0_DMA_IRQ 0x2 47*55078ea7SBALATON Zoltan #define OLDWORLD_IDE1_IRQ 0xe 48*55078ea7SBALATON Zoltan #define OLDWORLD_IDE1_DMA_IRQ 0x3 49*55078ea7SBALATON Zoltan 50*55078ea7SBALATON Zoltan /* New World IRQs */ 51*55078ea7SBALATON Zoltan #define NEWWORLD_CUDA_IRQ 0x19 52*55078ea7SBALATON Zoltan #define NEWWORLD_PMU_IRQ 0x19 53*55078ea7SBALATON Zoltan #define NEWWORLD_ESCCB_IRQ 0x24 54*55078ea7SBALATON Zoltan #define NEWWORLD_ESCCA_IRQ 0x25 55*55078ea7SBALATON Zoltan #define NEWWORLD_IDE0_IRQ 0xd 56*55078ea7SBALATON Zoltan #define NEWWORLD_IDE0_DMA_IRQ 0x2 57*55078ea7SBALATON Zoltan #define NEWWORLD_IDE1_IRQ 0xe 58*55078ea7SBALATON Zoltan #define NEWWORLD_IDE1_DMA_IRQ 0x3 59*55078ea7SBALATON Zoltan #define NEWWORLD_EXTING_GPIO1 0x2f 60*55078ea7SBALATON Zoltan #define NEWWORLD_EXTING_GPIO9 0x37 61*55078ea7SBALATON Zoltan 62bf31c56fSMark Cave-Ayland /* MacIO virtual bus */ 63bf31c56fSMark Cave-Ayland #define TYPE_MACIO_BUS "macio-bus" 648063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(MacIOBusState, MACIO_BUS) 65bf31c56fSMark Cave-Ayland 66db1015e9SEduardo Habkost struct MacIOBusState { 67bf31c56fSMark Cave-Ayland /*< private >*/ 68bf31c56fSMark Cave-Ayland BusState parent_obj; 69db1015e9SEduardo Habkost }; 70bf31c56fSMark Cave-Ayland 719b164a46SMark Cave-Ayland /* MacIO IDE */ 729b164a46SMark Cave-Ayland #define TYPE_MACIO_IDE "macio-ide" 738063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(MACIOIDEState, MACIO_IDE) 749b164a46SMark Cave-Ayland 75db1015e9SEduardo Habkost struct MACIOIDEState { 769b164a46SMark Cave-Ayland /*< private >*/ 779b164a46SMark Cave-Ayland SysBusDevice parent_obj; 789b164a46SMark Cave-Ayland /*< public >*/ 795c8e3d17SMark Cave-Ayland uint32_t addr; 809b164a46SMark Cave-Ayland uint32_t channel; 819b164a46SMark Cave-Ayland qemu_irq real_ide_irq; 829b164a46SMark Cave-Ayland qemu_irq real_dma_irq; 839b164a46SMark Cave-Ayland qemu_irq ide_irq; 849b164a46SMark Cave-Ayland qemu_irq dma_irq; 859b164a46SMark Cave-Ayland 869b164a46SMark Cave-Ayland MemoryRegion mem; 879b164a46SMark Cave-Ayland IDEBus bus; 889b164a46SMark Cave-Ayland IDEDMA dma; 899b164a46SMark Cave-Ayland void *dbdma; 909b164a46SMark Cave-Ayland bool dma_active; 919b164a46SMark Cave-Ayland uint32_t timing_reg; 929b164a46SMark Cave-Ayland uint32_t irq_reg; 93db1015e9SEduardo Habkost }; 949b164a46SMark Cave-Ayland 959b164a46SMark Cave-Ayland void macio_ide_init_drives(MACIOIDEState *ide, DriveInfo **hd_table); 969b164a46SMark Cave-Ayland void macio_ide_register_dma(MACIOIDEState *ide); 979b164a46SMark Cave-Ayland 98e1218e48SMark Cave-Ayland #define TYPE_MACIO "macio" 998063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(MacIOState, MACIO) 100e1218e48SMark Cave-Ayland 101db1015e9SEduardo Habkost struct MacIOState { 102e1218e48SMark Cave-Ayland /*< private >*/ 103e1218e48SMark Cave-Ayland PCIDevice parent; 104e1218e48SMark Cave-Ayland /*< public >*/ 105e1218e48SMark Cave-Ayland 106bf31c56fSMark Cave-Ayland MacIOBusState macio_bus; 107e1218e48SMark Cave-Ayland MemoryRegion bar; 108e1218e48SMark Cave-Ayland CUDAState cuda; 109d811d61fSMark Cave-Ayland PMUState pmu; 110e1218e48SMark Cave-Ayland DBDMAState dbdma; 111e1218e48SMark Cave-Ayland ESCCState escc; 112e1218e48SMark Cave-Ayland uint64_t frequency; 113db1015e9SEduardo Habkost }; 114e1218e48SMark Cave-Ayland 115e1218e48SMark Cave-Ayland #define TYPE_OLDWORLD_MACIO "macio-oldworld" 1168063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(OldWorldMacIOState, OLDWORLD_MACIO) 117e1218e48SMark Cave-Ayland 118db1015e9SEduardo Habkost struct OldWorldMacIOState { 119e1218e48SMark Cave-Ayland /*< private >*/ 120e1218e48SMark Cave-Ayland MacIOState parent_obj; 121e1218e48SMark Cave-Ayland /*< public >*/ 122e1218e48SMark Cave-Ayland 123370022ceSMark Cave-Ayland HeathrowState pic; 124e1218e48SMark Cave-Ayland 125e1218e48SMark Cave-Ayland MacIONVRAMState nvram; 126e1218e48SMark Cave-Ayland MACIOIDEState ide[2]; 127db1015e9SEduardo Habkost }; 128e1218e48SMark Cave-Ayland 129e1218e48SMark Cave-Ayland #define TYPE_NEWWORLD_MACIO "macio-newworld" 1308063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(NewWorldMacIOState, NEWWORLD_MACIO) 131e1218e48SMark Cave-Ayland 132db1015e9SEduardo Habkost struct NewWorldMacIOState { 133e1218e48SMark Cave-Ayland /*< private >*/ 134e1218e48SMark Cave-Ayland MacIOState parent_obj; 135e1218e48SMark Cave-Ayland /*< public >*/ 136dda12e9aSMark Cave-Ayland 137f1114c17SMark Cave-Ayland bool has_pmu; 138f1114c17SMark Cave-Ayland bool has_adb; 1397e4d62dfSMark Cave-Ayland OpenPICState pic; 140e1218e48SMark Cave-Ayland MACIOIDEState ide[2]; 1417c4166a9SMark Cave-Ayland MacIOGPIOState gpio; 142db1015e9SEduardo Habkost }; 143e1218e48SMark Cave-Ayland 144e1218e48SMark Cave-Ayland #endif /* MACIO_H */ 145