#define pr_fmt(fmt) …
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/list.h>
#include <linux/vmalloc.h>
#include <linux/workqueue.h>
#include <xen/xenbus.h>
#include <xen/events.h>
#include <xen/pci.h>
#include "pciback.h"
#define INVALID_EVTCHN_IRQ …
static bool __read_mostly passthrough;
module_param(passthrough, bool, S_IRUGO);
MODULE_PARM_DESC(…) …;
static struct xen_pcibk_device *alloc_pdev(struct xenbus_device *xdev)
{ … }
static void xen_pcibk_disconnect(struct xen_pcibk_device *pdev)
{ … }
static void free_pdev(struct xen_pcibk_device *pdev)
{ … }
static int xen_pcibk_do_attach(struct xen_pcibk_device *pdev, int gnt_ref,
evtchn_port_t remote_evtchn)
{ … }
static int xen_pcibk_attach(struct xen_pcibk_device *pdev)
{ … }
static int xen_pcibk_publish_pci_dev(struct xen_pcibk_device *pdev,
unsigned int domain, unsigned int bus,
unsigned int devfn, unsigned int devid)
{ … }
static int xen_pcibk_export_device(struct xen_pcibk_device *pdev,
int domain, int bus, int slot, int func,
int devid)
{ … }
static int xen_pcibk_remove_device(struct xen_pcibk_device *pdev,
int domain, int bus, int slot, int func)
{ … }
static int xen_pcibk_publish_pci_root(struct xen_pcibk_device *pdev,
unsigned int domain, unsigned int bus)
{ … }
static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev,
enum xenbus_state state)
{ … }
static void xen_pcibk_frontend_changed(struct xenbus_device *xdev,
enum xenbus_state fe_state)
{ … }
static int xen_pcibk_setup_backend(struct xen_pcibk_device *pdev)
{ … }
static void xen_pcibk_be_watch(struct xenbus_watch *watch,
const char *path, const char *token)
{ … }
static int xen_pcibk_xenbus_probe(struct xenbus_device *dev,
const struct xenbus_device_id *id)
{ … }
static void xen_pcibk_xenbus_remove(struct xenbus_device *dev)
{ … }
static const struct xenbus_device_id xen_pcibk_ids[] = …;
static struct xenbus_driver xen_pcibk_driver = …;
const struct xen_pcibk_backend *__read_mostly xen_pcibk_backend;
int __init xen_pcibk_xenbus_register(void)
{ … }
void __exit xen_pcibk_xenbus_unregister(void)
{ … }