xref: /openbmc/qemu/include/hw/ipack/ipack.h (revision 43417c0c)
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