11f9c4cfdSAndreas Färber /* 21f9c4cfdSAndreas Färber * QEMU IndustryPack emulation 31f9c4cfdSAndreas Färber * 41f9c4cfdSAndreas Färber * Copyright (C) 2012 Igalia, S.L. 5b996aed5SAlberto Garcia * Author: Alberto Garcia <berto@igalia.com> 61f9c4cfdSAndreas Färber * 71f9c4cfdSAndreas Färber * This code is licensed under the GNU GPL v2 or (at your option) any 81f9c4cfdSAndreas Färber * later version. 91f9c4cfdSAndreas Färber */ 101f9c4cfdSAndreas Färber 111f9c4cfdSAndreas Färber #ifndef QEMU_IPACK_H 121f9c4cfdSAndreas Färber #define QEMU_IPACK_H 131f9c4cfdSAndreas Färber 14a27bd6c7SMarkus Armbruster #include "hw/qdev-core.h" 15db1015e9SEduardo Habkost #include "qom/object.h" 161f9c4cfdSAndreas Färber 171f9c4cfdSAndreas Färber 181f9c4cfdSAndreas Färber #define TYPE_IPACK_BUS "IndustryPack" 198063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(IPackBus, IPACK_BUS) 201f9c4cfdSAndreas Färber 211f9c4cfdSAndreas Färber struct IPackBus { 221f9c4cfdSAndreas Färber /*< private >*/ 231f9c4cfdSAndreas Färber BusState parent_obj; 241f9c4cfdSAndreas Färber 251f9c4cfdSAndreas Färber /* All fields are private */ 261f9c4cfdSAndreas Färber uint8_t n_slots; 271f9c4cfdSAndreas Färber uint8_t free_slot; 281f9c4cfdSAndreas Färber qemu_irq_handler set_irq; 291f9c4cfdSAndreas Färber }; 301f9c4cfdSAndreas Färber 311f9c4cfdSAndreas Färber 321f9c4cfdSAndreas Färber #define TYPE_IPACK_DEVICE "ipack-device" 33c821774aSEduardo Habkost OBJECT_DECLARE_TYPE(IPackDevice, IPackDeviceClass, 3430b5707cSEduardo Habkost IPACK_DEVICE) 351f9c4cfdSAndreas Färber 361f9c4cfdSAndreas Färber struct IPackDeviceClass { 371f9c4cfdSAndreas Färber /*< private >*/ 381f9c4cfdSAndreas Färber DeviceClass parent_class; 391f9c4cfdSAndreas Färber /*< public >*/ 401f9c4cfdSAndreas Färber 411f9c4cfdSAndreas Färber DeviceRealize realize; 421f9c4cfdSAndreas Färber DeviceUnrealize unrealize; 431f9c4cfdSAndreas Färber 441f9c4cfdSAndreas Färber uint16_t (*io_read)(IPackDevice *dev, uint8_t addr); 451f9c4cfdSAndreas Färber void (*io_write)(IPackDevice *dev, uint8_t addr, uint16_t val); 461f9c4cfdSAndreas Färber 471f9c4cfdSAndreas Färber uint16_t (*id_read)(IPackDevice *dev, uint8_t addr); 481f9c4cfdSAndreas Färber void (*id_write)(IPackDevice *dev, uint8_t addr, uint16_t val); 491f9c4cfdSAndreas Färber 501f9c4cfdSAndreas Färber uint16_t (*int_read)(IPackDevice *dev, uint8_t addr); 511f9c4cfdSAndreas Färber void (*int_write)(IPackDevice *dev, uint8_t addr, uint16_t val); 521f9c4cfdSAndreas Färber 531f9c4cfdSAndreas Färber uint16_t (*mem_read16)(IPackDevice *dev, uint32_t addr); 541f9c4cfdSAndreas Färber void (*mem_write16)(IPackDevice *dev, uint32_t addr, uint16_t val); 551f9c4cfdSAndreas Färber 561f9c4cfdSAndreas Färber uint8_t (*mem_read8)(IPackDevice *dev, uint32_t addr); 571f9c4cfdSAndreas Färber void (*mem_write8)(IPackDevice *dev, uint32_t addr, uint8_t val); 581f9c4cfdSAndreas Färber }; 591f9c4cfdSAndreas Färber 601f9c4cfdSAndreas Färber struct IPackDevice { 611f9c4cfdSAndreas Färber /*< private >*/ 621f9c4cfdSAndreas Färber DeviceState parent_obj; 631f9c4cfdSAndreas Färber /*< public >*/ 641f9c4cfdSAndreas Färber 651f9c4cfdSAndreas Färber int32_t slot; 661f9c4cfdSAndreas Färber /* IRQ objects for the IndustryPack INT0# and INT1# */ 671f9c4cfdSAndreas Färber qemu_irq *irq; 681f9c4cfdSAndreas Färber }; 691f9c4cfdSAndreas Färber 701f9c4cfdSAndreas Färber extern const VMStateDescription vmstate_ipack_device; 711f9c4cfdSAndreas Färber 721f9c4cfdSAndreas Färber #define VMSTATE_IPACK_DEVICE(_field, _state) \ 731f9c4cfdSAndreas Färber VMSTATE_STRUCT(_field, _state, 1, vmstate_ipack_device, IPackDevice) 741f9c4cfdSAndreas Färber 751f9c4cfdSAndreas Färber IPackDevice *ipack_device_find(IPackBus *bus, int32_t slot); 76*43417c0cSPeter Maydell void ipack_bus_init(IPackBus *bus, size_t bus_size, 771f9c4cfdSAndreas Färber DeviceState *parent, 78*43417c0cSPeter Maydell uint8_t n_slots, 791f9c4cfdSAndreas Färber qemu_irq_handler handler); 801f9c4cfdSAndreas Färber 811f9c4cfdSAndreas Färber #endif 82