#define pr_fmt(fmt) …
#include <linux/console.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/fb.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/mm.h>
#include <asm/xen/hypervisor.h>
#include <xen/xen.h>
#include <xen/events.h>
#include <xen/page.h>
#include <xen/interface/io/fbif.h>
#include <xen/interface/io/protocols.h>
#include <xen/xenbus.h>
#include <xen/platform_pci.h>
struct xenfb_info { … };
#define XENFB_DEFAULT_FB_LEN …
enum { … };
static int video[KPARAM_CNT] = …;
module_param_array(…);
MODULE_PARM_DESC(…) …;
static void xenfb_make_preferred_console(void);
static void xenfb_remove(struct xenbus_device *);
static void xenfb_init_shared_page(struct xenfb_info *, struct fb_info *);
static int xenfb_connect_backend(struct xenbus_device *, struct xenfb_info *);
static void xenfb_disconnect_backend(struct xenfb_info *);
static void xenfb_send_event(struct xenfb_info *info,
union xenfb_out_event *event)
{ … }
static void xenfb_do_update(struct xenfb_info *info,
int x, int y, int w, int h)
{ … }
static void xenfb_do_resize(struct xenfb_info *info)
{ … }
static int xenfb_queue_full(struct xenfb_info *info)
{ … }
static void xenfb_handle_resize_dpy(struct xenfb_info *info)
{ … }
static void xenfb_refresh(struct xenfb_info *info,
int x1, int y1, int w, int h)
{ … }
static void xenfb_deferred_io(struct fb_info *fb_info, struct list_head *pagereflist)
{ … }
static struct fb_deferred_io xenfb_defio = …;
static int xenfb_setcolreg(unsigned regno, unsigned red, unsigned green,
unsigned blue, unsigned transp,
struct fb_info *info)
{ … }
static int
xenfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
{ … }
static int xenfb_set_par(struct fb_info *info)
{ … }
static void xenfb_defio_damage_range(struct fb_info *info, off_t off, size_t len)
{ … }
static void xenfb_defio_damage_area(struct fb_info *info, u32 x, u32 y,
u32 width, u32 height)
{ … }
FB_GEN_DEFAULT_DEFERRED_SYSMEM_OPS(xenfb,
xenfb_defio_damage_range,
xenfb_defio_damage_area)
static const struct fb_ops xenfb_fb_ops = …;
static irqreturn_t xenfb_event_handler(int rq, void *dev_id)
{ … }
static int xenfb_probe(struct xenbus_device *dev,
const struct xenbus_device_id *id)
{ … }
static void xenfb_make_preferred_console(void)
{ … }
static int xenfb_resume(struct xenbus_device *dev)
{ … }
static void xenfb_remove(struct xenbus_device *dev)
{ … }
static unsigned long vmalloc_to_gfn(void *address)
{ … }
static void xenfb_init_shared_page(struct xenfb_info *info,
struct fb_info *fb_info)
{ … }
static int xenfb_connect_backend(struct xenbus_device *dev,
struct xenfb_info *info)
{ … }
static void xenfb_disconnect_backend(struct xenfb_info *info)
{ … }
static void xenfb_backend_changed(struct xenbus_device *dev,
enum xenbus_state backend_state)
{ … }
static const struct xenbus_device_id xenfb_ids[] = …;
static struct xenbus_driver xenfb_driver = …;
static int __init xenfb_init(void)
{ … }
static void __exit xenfb_cleanup(void)
{ … }
module_init(…) …;
module_exit(xenfb_cleanup);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS(…) …;