qemu/include/hw/xen/xen-block.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2018  Citrix Systems Inc.
   3 *
   4 * This work is licensed under the terms of the GNU GPL, version 2 or later.
   5 * See the COPYING file in the top-level directory.
   6 */
   7
   8#ifndef HW_XEN_BLOCK_H
   9#define HW_XEN_BLOCK_H
  10
  11#include "hw/xen/xen-bus.h"
  12#include "hw/block/block.h"
  13#include "hw/block/dataplane/xen-block.h"
  14#include "sysemu/iothread.h"
  15#include "qom/object.h"
  16
  17typedef enum XenBlockVdevType {
  18    XEN_BLOCK_VDEV_TYPE_INVALID,
  19    XEN_BLOCK_VDEV_TYPE_DP,
  20    XEN_BLOCK_VDEV_TYPE_XVD,
  21    XEN_BLOCK_VDEV_TYPE_HD,
  22    XEN_BLOCK_VDEV_TYPE_SD,
  23    XEN_BLOCK_VDEV_TYPE__MAX
  24} XenBlockVdevType;
  25
  26typedef struct XenBlockVdev {
  27    XenBlockVdevType type;
  28    unsigned long disk;
  29    unsigned long partition;
  30    unsigned long number;
  31} XenBlockVdev;
  32
  33
  34typedef struct XenBlockProperties {
  35    XenBlockVdev vdev;
  36    BlockConf conf;
  37    unsigned int max_ring_page_order;
  38    IOThread *iothread;
  39} XenBlockProperties;
  40
  41typedef struct XenBlockDrive {
  42    char *id;
  43    char *node_name;
  44} XenBlockDrive;
  45
  46typedef struct XenBlockIOThread {
  47    char *id;
  48} XenBlockIOThread;
  49
  50struct XenBlockDevice {
  51    XenDevice xendev;
  52    XenBlockProperties props;
  53    const char *device_type;
  54    unsigned int info;
  55    XenBlockDataPlane *dataplane;
  56    XenBlockDrive *drive;
  57    XenBlockIOThread *iothread;
  58};
  59typedef struct XenBlockDevice XenBlockDevice;
  60
  61typedef void (*XenBlockDeviceRealize)(XenBlockDevice *blockdev, Error **errp);
  62typedef void (*XenBlockDeviceUnrealize)(XenBlockDevice *blockdev);
  63
  64struct XenBlockDeviceClass {
  65    /*< private >*/
  66    XenDeviceClass parent_class;
  67    /*< public >*/
  68    XenBlockDeviceRealize realize;
  69    XenBlockDeviceUnrealize unrealize;
  70};
  71
  72#define TYPE_XEN_BLOCK_DEVICE  "xen-block"
  73OBJECT_DECLARE_TYPE(XenBlockDevice, XenBlockDeviceClass, XEN_BLOCK_DEVICE)
  74
  75struct XenDiskDevice {
  76    XenBlockDevice blockdev;
  77};
  78
  79#define TYPE_XEN_DISK_DEVICE  "xen-disk"
  80OBJECT_DECLARE_SIMPLE_TYPE(XenDiskDevice, XEN_DISK_DEVICE)
  81
  82struct XenCDRomDevice {
  83    XenBlockDevice blockdev;
  84};
  85
  86#define TYPE_XEN_CDROM_DEVICE  "xen-cdrom"
  87OBJECT_DECLARE_SIMPLE_TYPE(XenCDRomDevice, XEN_CDROM_DEVICE)
  88
  89#endif /* HW_XEN_BLOCK_H */
  90