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" 30edf5ca5dSMarkus Armbruster #include "hw/pci/pci_device.h" 31c6ff8bdeSBALATON Zoltan #include "hw/ide/ide-bus.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" 36443f07b7SBALATON Zoltan #include "hw/nvram/mac_nvram.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 4155078ea7SBALATON Zoltan /* Old World IRQs */ 4255078ea7SBALATON Zoltan #define OLDWORLD_CUDA_IRQ 0x12 4355078ea7SBALATON Zoltan #define OLDWORLD_ESCCB_IRQ 0x10 4455078ea7SBALATON Zoltan #define OLDWORLD_ESCCA_IRQ 0xf 4555078ea7SBALATON Zoltan #define OLDWORLD_IDE0_IRQ 0xd 4655078ea7SBALATON Zoltan #define OLDWORLD_IDE0_DMA_IRQ 0x2 4755078ea7SBALATON Zoltan #define OLDWORLD_IDE1_IRQ 0xe 4855078ea7SBALATON Zoltan #define OLDWORLD_IDE1_DMA_IRQ 0x3 4955078ea7SBALATON Zoltan 5055078ea7SBALATON Zoltan /* New World IRQs */ 5155078ea7SBALATON Zoltan #define NEWWORLD_CUDA_IRQ 0x19 5255078ea7SBALATON Zoltan #define NEWWORLD_PMU_IRQ 0x19 5355078ea7SBALATON Zoltan #define NEWWORLD_ESCCB_IRQ 0x24 5455078ea7SBALATON Zoltan #define NEWWORLD_ESCCA_IRQ 0x25 5555078ea7SBALATON Zoltan #define NEWWORLD_IDE0_IRQ 0xd 5655078ea7SBALATON Zoltan #define NEWWORLD_IDE0_DMA_IRQ 0x2 5755078ea7SBALATON Zoltan #define NEWWORLD_IDE1_IRQ 0xe 5855078ea7SBALATON Zoltan #define NEWWORLD_IDE1_DMA_IRQ 0x3 5955078ea7SBALATON Zoltan #define NEWWORLD_EXTING_GPIO1 0x2f 6055078ea7SBALATON Zoltan #define NEWWORLD_EXTING_GPIO9 0x37 6155078ea7SBALATON 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 849b164a46SMark Cave-Ayland MemoryRegion mem; 859b164a46SMark Cave-Ayland IDEBus bus; 869b164a46SMark Cave-Ayland IDEDMA dma; 879b164a46SMark Cave-Ayland void *dbdma; 889b164a46SMark Cave-Ayland bool dma_active; 899b164a46SMark Cave-Ayland uint32_t timing_reg; 909b164a46SMark Cave-Ayland uint32_t irq_reg; 91db1015e9SEduardo Habkost }; 929b164a46SMark Cave-Ayland 93*efb35934SMark Cave-Ayland #define MACIO_IDE_PMAC_NIRQS 2 94*efb35934SMark Cave-Ayland 95*efb35934SMark Cave-Ayland #define MACIO_IDE_PMAC_DMA_IRQ 0 96*efb35934SMark Cave-Ayland #define MACIO_IDE_PMAC_IDE_IRQ 1 97*efb35934SMark Cave-Ayland 989b164a46SMark Cave-Ayland void macio_ide_init_drives(MACIOIDEState *ide, DriveInfo **hd_table); 999b164a46SMark Cave-Ayland void macio_ide_register_dma(MACIOIDEState *ide); 1009b164a46SMark Cave-Ayland 101e1218e48SMark Cave-Ayland #define TYPE_MACIO "macio" 1028063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(MacIOState, MACIO) 103e1218e48SMark Cave-Ayland 104db1015e9SEduardo Habkost struct MacIOState { 105e1218e48SMark Cave-Ayland /*< private >*/ 106e1218e48SMark Cave-Ayland PCIDevice parent; 107e1218e48SMark Cave-Ayland /*< public >*/ 108e1218e48SMark Cave-Ayland 109bf31c56fSMark Cave-Ayland MacIOBusState macio_bus; 110e1218e48SMark Cave-Ayland MemoryRegion bar; 111e1218e48SMark Cave-Ayland CUDAState cuda; 112d811d61fSMark Cave-Ayland PMUState pmu; 113e1218e48SMark Cave-Ayland DBDMAState dbdma; 114e1218e48SMark Cave-Ayland ESCCState escc; 115e1218e48SMark Cave-Ayland uint64_t frequency; 116db1015e9SEduardo Habkost }; 117e1218e48SMark Cave-Ayland 118e1218e48SMark Cave-Ayland #define TYPE_OLDWORLD_MACIO "macio-oldworld" 1198063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(OldWorldMacIOState, OLDWORLD_MACIO) 120e1218e48SMark Cave-Ayland 121db1015e9SEduardo Habkost struct OldWorldMacIOState { 122e1218e48SMark Cave-Ayland /*< private >*/ 123e1218e48SMark Cave-Ayland MacIOState parent_obj; 124e1218e48SMark Cave-Ayland /*< public >*/ 125e1218e48SMark Cave-Ayland 126370022ceSMark Cave-Ayland HeathrowState pic; 127e1218e48SMark Cave-Ayland 128e1218e48SMark Cave-Ayland MacIONVRAMState nvram; 129e1218e48SMark Cave-Ayland MACIOIDEState ide[2]; 130db1015e9SEduardo Habkost }; 131e1218e48SMark Cave-Ayland 132e1218e48SMark Cave-Ayland #define TYPE_NEWWORLD_MACIO "macio-newworld" 1338063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(NewWorldMacIOState, NEWWORLD_MACIO) 134e1218e48SMark Cave-Ayland 135db1015e9SEduardo Habkost struct NewWorldMacIOState { 136e1218e48SMark Cave-Ayland /*< private >*/ 137e1218e48SMark Cave-Ayland MacIOState parent_obj; 138e1218e48SMark Cave-Ayland /*< public >*/ 139dda12e9aSMark Cave-Ayland 140f1114c17SMark Cave-Ayland bool has_pmu; 141f1114c17SMark Cave-Ayland bool has_adb; 1427e4d62dfSMark Cave-Ayland OpenPICState pic; 143e1218e48SMark Cave-Ayland MACIOIDEState ide[2]; 1447c4166a9SMark Cave-Ayland MacIOGPIOState gpio; 145db1015e9SEduardo Habkost }; 146e1218e48SMark Cave-Ayland 147e1218e48SMark Cave-Ayland #endif /* MACIO_H */ 148