qemu/hw/s390x/ccw-device.h
<<
>>
Prefs
   1/*
   2 * Common device infrastructure for devices in the virtual css
   3 *
   4 * Copyright 2016 IBM Corp.
   5 * Author(s): Jing Liu <liujbjl@linux.vnet.ibm.com>
   6 *
   7 * This work is licensed under the terms of the GNU GPL, version 2 or (at
   8 * your option) any later version. See the COPYING file in the top-level
   9 * directory.
  10 */
  11
  12#ifndef HW_S390X_CCW_DEVICE_H
  13#define HW_S390X_CCW_DEVICE_H
  14#include "qom/object.h"
  15#include "hw/qdev-core.h"
  16#include "hw/s390x/css.h"
  17
  18typedef struct CcwDevice {
  19    DeviceState parent_obj;
  20    SubchDev *sch;
  21    /* <cssid>.<ssid>.<device number> */
  22    /* The user-set busid of the virtual ccw device. */
  23    CssDevId devno;
  24    /* The actual busid of the virtual ccw device. */
  25    CssDevId dev_id;
  26    /* The actual busid of the virtual subchannel. */
  27    CssDevId subch_id;
  28} CcwDevice;
  29
  30extern const VMStateDescription vmstate_ccw_dev;
  31#define VMSTATE_CCW_DEVICE(_field, _state)                     \
  32    VMSTATE_STRUCT(_field, _state, 1, vmstate_ccw_dev, CcwDevice)
  33
  34typedef struct CCWDeviceClass {
  35    DeviceClass parent_class;
  36    void (*unplug)(HotplugHandler *, DeviceState *, Error **);
  37    void (*realize)(CcwDevice *, Error **);
  38    void (*refill_ids)(CcwDevice *);
  39} CCWDeviceClass;
  40
  41static inline CcwDevice *to_ccw_dev_fast(DeviceState *d)
  42{
  43    return container_of(d, CcwDevice, parent_obj);
  44}
  45
  46#define TYPE_CCW_DEVICE "ccw-device"
  47
  48#define CCW_DEVICE(obj) OBJECT_CHECK(CcwDevice, (obj), TYPE_CCW_DEVICE)
  49#define CCW_DEVICE_GET_CLASS(obj) \
  50    OBJECT_GET_CLASS(CCWDeviceClass, (obj), TYPE_CCW_DEVICE)
  51#define CCW_DEVICE_CLASS(klass) \
  52    OBJECT_CLASS_CHECK(CCWDeviceClass, (klass), TYPE_CCW_DEVICE)
  53
  54#endif
  55