#ifndef GENFBVAR_H
#define GENFBVAR_H
#ifdef _KERNEL_OPT
#include "opt_splash.h"
#endif
#include <sys/param.h>
#include <sys/buf.h>
#include <sys/conf.h>
#include <sys/device.h>
#include <sys/bus.h>
#include <dev/wscons/wsconsio.h>
#include <dev/wscons/wsdisplayvar.h>
#include <dev/rasops/rasops.h>
#include <dev/wscons/wsdisplay_vconsvar.h>
#ifdef _KERNEL_OPT
#include "opt_genfb.h"
#endif
#ifdef SPLASHSCREEN
#define GENFB_DISABLE_TEXT
#include <dev/splash/splash.h>
#endif
#if GENFB_GLYPHCACHE > 0
#include <dev/wscons/wsdisplay_glyphcachevar.h>
#endif
struct genfb_softc;
struct genfb_ops {
int (*genfb_ioctl)(void *, void *, u_long, void *, int, struct lwp *);
paddr_t (*genfb_mmap)(void *, void *, off_t, int);
int (*genfb_borrow)(void *, bus_addr_t, bus_space_handle_t *);
int (*genfb_enable_polling)(void *);
int (*genfb_disable_polling)(void *);
};
struct genfb_colormap_callback {
void *gcc_cookie;
void (*gcc_set_mapreg)(void *, int, int, int, int);
};
struct genfb_parameter_callback {
void *gpc_cookie;
int (*gpc_get_parameter)(void *, int *);
int (*gpc_set_parameter)(void *, int);
int (*gpc_upd_parameter)(void *, int);
};
struct genfb_pmf_callback {
bool (*gpc_suspend)(device_t, const pmf_qual_t *);
bool (*gpc_resume)(device_t, const pmf_qual_t *);
};
struct genfb_mode_callback {
bool (*gmc_setmode)(struct genfb_softc *, int);
};
struct genfb_softc {
device_t sc_dev;
struct genfb_private *sc_private;
struct vcons_data vd;
struct genfb_pmf_callback *sc_pmfcb;
void *sc_fbaddr;
bus_addr_t sc_fboffset;
int sc_width, sc_height, sc_stride, sc_depth;
size_t sc_fbsize;
};
void genfb_cnattach(void);
int genfb_cndetach(void);
void genfb_disable(void);
int genfb_is_console(void);
int genfb_is_enabled(void);
void genfb_init(struct genfb_softc *);
int genfb_attach(struct genfb_softc *, struct genfb_ops *);
int genfb_borrow(bus_addr_t, bus_space_handle_t *);
void genfb_restore_palette(struct genfb_softc *);
void genfb_enable_polling(device_t);
void genfb_disable_polling(device_t);
#endif