qemu/include/hw/ipack/ipack.h
<<
>>
Prefs
   1/*
   2 * QEMU IndustryPack emulation
   3 *
   4 * Copyright (C) 2012 Igalia, S.L.
   5 * Author: Alberto Garcia <berto@igalia.com>
   6 *
   7 * This code is licensed under the GNU GPL v2 or (at your option) any
   8 * later version.
   9 */
  10
  11#ifndef QEMU_IPACK_H
  12#define QEMU_IPACK_H
  13
  14#include "hw/qdev.h"
  15
  16typedef struct IPackBus IPackBus;
  17
  18#define TYPE_IPACK_BUS "IndustryPack"
  19#define IPACK_BUS(obj) OBJECT_CHECK(IPackBus, (obj), TYPE_IPACK_BUS)
  20
  21struct IPackBus {
  22    /*< private >*/
  23    BusState parent_obj;
  24
  25    /* All fields are private */
  26    uint8_t n_slots;
  27    uint8_t free_slot;
  28    qemu_irq_handler set_irq;
  29};
  30
  31typedef struct IPackDevice IPackDevice;
  32typedef struct IPackDeviceClass IPackDeviceClass;
  33
  34#define TYPE_IPACK_DEVICE "ipack-device"
  35#define IPACK_DEVICE(obj) \
  36     OBJECT_CHECK(IPackDevice, (obj), TYPE_IPACK_DEVICE)
  37#define IPACK_DEVICE_CLASS(klass)                                        \
  38     OBJECT_CLASS_CHECK(IPackDeviceClass, (klass), TYPE_IPACK_DEVICE)
  39#define IPACK_DEVICE_GET_CLASS(obj) \
  40     OBJECT_GET_CLASS(IPackDeviceClass, (obj), TYPE_IPACK_DEVICE)
  41
  42struct IPackDeviceClass {
  43    /*< private >*/
  44    DeviceClass parent_class;
  45    /*< public >*/
  46
  47    DeviceRealize realize;
  48    DeviceUnrealize unrealize;
  49
  50    uint16_t (*io_read)(IPackDevice *dev, uint8_t addr);
  51    void (*io_write)(IPackDevice *dev, uint8_t addr, uint16_t val);
  52
  53    uint16_t (*id_read)(IPackDevice *dev, uint8_t addr);
  54    void (*id_write)(IPackDevice *dev, uint8_t addr, uint16_t val);
  55
  56    uint16_t (*int_read)(IPackDevice *dev, uint8_t addr);
  57    void (*int_write)(IPackDevice *dev, uint8_t addr, uint16_t val);
  58
  59    uint16_t (*mem_read16)(IPackDevice *dev, uint32_t addr);
  60    void (*mem_write16)(IPackDevice *dev, uint32_t addr, uint16_t val);
  61
  62    uint8_t (*mem_read8)(IPackDevice *dev, uint32_t addr);
  63    void (*mem_write8)(IPackDevice *dev, uint32_t addr, uint8_t val);
  64};
  65
  66struct IPackDevice {
  67    /*< private >*/
  68    DeviceState parent_obj;
  69    /*< public >*/
  70
  71    int32_t slot;
  72    /* IRQ objects for the IndustryPack INT0# and INT1# */
  73    qemu_irq *irq;
  74};
  75
  76extern const VMStateDescription vmstate_ipack_device;
  77
  78#define VMSTATE_IPACK_DEVICE(_field, _state)                            \
  79    VMSTATE_STRUCT(_field, _state, 1, vmstate_ipack_device, IPackDevice)
  80
  81IPackDevice *ipack_device_find(IPackBus *bus, int32_t slot);
  82void ipack_bus_new_inplace(IPackBus *bus, size_t bus_size,
  83                           DeviceState *parent,
  84                           const char *name, uint8_t n_slots,
  85                           qemu_irq_handler handler);
  86
  87#endif
  88