158ea30f5SMarkus Armbruster #ifndef HW_XEN_LEGACY_BACKEND_H 258ea30f5SMarkus Armbruster #define HW_XEN_LEGACY_BACKEND_H 3d94f9486Saliguori 4b6cacfeaSDavid Woodhouse #include "hw/xen/xen_backend_ops.h" 5f0021dbaSEmil Condrea #include "hw/xen/xen_pvdev.h" 61422e32dSPaolo Bonzini #include "net/net.h" 7db1015e9SEduardo Habkost #include "qom/object.h" 8d94f9486Saliguori 9873d57abSJuergen Gross #define TYPE_XENSYSDEV "xen-sysdev" 10873d57abSJuergen Gross #define TYPE_XENSYSBUS "xen-sysbus" 113a6c9172SJuergen Gross #define TYPE_XENBACKEND "xen-backend" 123a6c9172SJuergen Gross 13694b3d28SEduardo Habkost typedef struct XenLegacyDevice XenLegacyDevice; 142211118aSEduardo Habkost DECLARE_INSTANCE_CHECKER(XenLegacyDevice, XENBACKEND, 158110fa1dSEduardo Habkost TYPE_XENBACKEND) 16873d57abSJuergen Gross 17d94f9486Saliguori /* variables */ 18*ba2a92dbSPaul Durrant extern struct qemu_xs_handle *xenstore; 192c8b24a3Saliguori extern const char *xen_protocol; 209432e53aSJuergen Gross extern DeviceState *xen_sysdev; 21873d57abSJuergen Gross extern BusState *xen_sysbus; 22d94f9486Saliguori 23637c53ffSJuergen Gross int xenstore_mkdir(char *path, int p); 242d0ed5e6SPaul Durrant int xenstore_write_be_str(struct XenLegacyDevice *xendev, const char *node, 252d0ed5e6SPaul Durrant const char *val); 262d0ed5e6SPaul Durrant int xenstore_write_be_int(struct XenLegacyDevice *xendev, const char *node, 272d0ed5e6SPaul Durrant int ival); 282d0ed5e6SPaul Durrant int xenstore_write_be_int64(struct XenLegacyDevice *xendev, const char *node, 292d0ed5e6SPaul Durrant int64_t ival); 302d0ed5e6SPaul Durrant char *xenstore_read_be_str(struct XenLegacyDevice *xendev, const char *node); 312d0ed5e6SPaul Durrant int xenstore_read_be_int(struct XenLegacyDevice *xendev, const char *node, 322d0ed5e6SPaul Durrant int *ival); 332d0ed5e6SPaul Durrant char *xenstore_read_fe_str(struct XenLegacyDevice *xendev, const char *node); 342d0ed5e6SPaul Durrant int xenstore_read_fe_int(struct XenLegacyDevice *xendev, const char *node, 352d0ed5e6SPaul Durrant int *ival); 362d0ed5e6SPaul Durrant int xenstore_read_fe_uint64(struct XenLegacyDevice *xendev, const char *node, 37b9730c5bSEmil Condrea uint64_t *uval); 38d94f9486Saliguori 392d0ed5e6SPaul Durrant void xen_be_check_state(struct XenLegacyDevice *xendev); 40d94f9486Saliguori 41d94f9486Saliguori /* xen backend driver bits */ 4279807f3eSDavid Woodhouse void xen_be_init(void); 43d94f9486Saliguori int xen_be_register(const char *type, struct XenDevOps *ops); 442d0ed5e6SPaul Durrant int xen_be_set_state(struct XenLegacyDevice *xendev, enum xenbus_state state); 452d0ed5e6SPaul Durrant int xen_be_bind_evtchn(struct XenLegacyDevice *xendev); 462d0ed5e6SPaul Durrant void xen_be_set_max_grant_refs(struct XenLegacyDevice *xendev, 479838824aSPaul Durrant unsigned int nr_refs); 482d0ed5e6SPaul Durrant void *xen_be_map_grant_refs(struct XenLegacyDevice *xendev, uint32_t *refs, 499838824aSPaul Durrant unsigned int nr_refs, int prot); 502d0ed5e6SPaul Durrant void xen_be_unmap_grant_refs(struct XenLegacyDevice *xendev, void *ptr, 51f80fad16SDavid Woodhouse uint32_t *refs, unsigned int nr_refs); 529838824aSPaul Durrant 532d0ed5e6SPaul Durrant int xen_be_copy_grant_refs(struct XenLegacyDevice *xendev, 549838824aSPaul Durrant bool to_domain, XenGrantCopySegment segs[], 559838824aSPaul Durrant unsigned int nr_segs); 569838824aSPaul Durrant 572d0ed5e6SPaul Durrant static inline void *xen_be_map_grant_ref(struct XenLegacyDevice *xendev, 589838824aSPaul Durrant uint32_t ref, int prot) 599838824aSPaul Durrant { 609838824aSPaul Durrant return xen_be_map_grant_refs(xendev, &ref, 1, prot); 619838824aSPaul Durrant } 629838824aSPaul Durrant 632d0ed5e6SPaul Durrant static inline void xen_be_unmap_grant_ref(struct XenLegacyDevice *xendev, 64f80fad16SDavid Woodhouse void *ptr, uint32_t ref) 659838824aSPaul Durrant { 66f80fad16SDavid Woodhouse return xen_be_unmap_grant_refs(xendev, ptr, &ref, 1); 679838824aSPaul Durrant } 68d94f9486Saliguori 69e57dd20bSaliguori /* actual backend drivers */ 70e57dd20bSaliguori extern struct XenDevOps xen_console_ops; /* xen_console.c */ 71e7151f83Saliguori extern struct XenDevOps xen_kbdmouse_ops; /* xen_framebuffer.c */ 72e7151f83Saliguori extern struct XenDevOps xen_framebuffer_ops; /* xen_framebuffer.c */ 7362d23efaSaliguori extern struct XenDevOps xen_blkdev_ops; /* xen_disk.c */ 74e737b6d5SStefano Stabellini #ifdef CONFIG_VIRTFS 75e737b6d5SStefano Stabellini extern struct XenDevOps xen_9pfs_ops; /* xen-9p-backend.c */ 76e737b6d5SStefano Stabellini #endif 77e613b064Saliguori extern struct XenDevOps xen_netdev_ops; /* xen_nic.c */ 78816ac92eSJuergen Gross #ifdef CONFIG_USB_LIBUSB 79816ac92eSJuergen Gross extern struct XenDevOps xen_usb_ops; /* xen-usb.c */ 80816ac92eSJuergen Gross #endif 81e7151f83Saliguori 822c8b24a3Saliguori /* configuration (aka xenbus setup) */ 8328695489SAnthony Liguori void xen_config_cleanup(void); 842c8b24a3Saliguori int xen_config_dev_blk(DriveInfo *disk); 852c8b24a3Saliguori int xen_config_dev_nic(NICInfo *nic); 869306acb5Saliguori int xen_config_dev_vfb(int vdev, const char *type); 879306acb5Saliguori int xen_config_dev_vkbd(int vdev); 889306acb5Saliguori int xen_config_dev_console(int vdev); 892c8b24a3Saliguori 9058ea30f5SMarkus Armbruster #endif /* HW_XEN_LEGACY_BACKEND_H */ 91