#ifndef _DEV_WSCONS_WSDISPLAYVAR_H
#define _DEV_WSCONS_WSDISPLAYVAR_H
#include <sys/device.h>
struct wsdisplay_emulops {
void (*cursor)(void *, int, int, int);
int (*mapchar)(void *, int, unsigned int *);
void (*putchar)(void *, int, int, u_int, long);
void (*copycols)(void *, int, int, int, int);
void (*erasecols)(void *, int, int, int, long);
void (*copyrows)(void *, int, int, int);
void (*eraserows)(void *, int, int, long);
int (*allocattr)(void *, int, int, int, long *);
#define WSCOL_BLACK 0
#define WSCOL_RED 1
#define WSCOL_GREEN 2
#define WSCOL_BROWN 3
#define WSCOL_BLUE 4
#define WSCOL_MAGENTA 5
#define WSCOL_CYAN 6
#define WSCOL_WHITE 7
#define WSCOL_LIGHT_GREY (WSCOL_BLACK+8)
#define WSCOL_LIGHT_RED (WSCOL_RED+8)
#define WSCOL_LIGHT_GREEN (WSCOL_GREEN+8)
#define WSCOL_LIGHT_BROWN (WSCOL_BROWN+8)
#define WSCOL_LIGHT_BLUE (WSCOL_BLUE+8)
#define WSCOL_LIGHT_MAGENTA (WSCOL_MAGENTA+8)
#define WSCOL_LIGHT_CYAN (WSCOL_CYAN+8)
#define WSCOL_LIGHT_WHITE (WSCOL_WHITE+8)
#define WSATTR_REVERSE 1
#define WSATTR_HILIT 2
#define WSATTR_BLINK 4
#define WSATTR_UNDERLINE 8
#define WSATTR_WSCOLORS 16
#define WSATTR_USERMASK 0x0fff
#define WSATTR_PRIVATE1 4096
#define WSATTR_PRIVATE2 8192
#define WSATTR_PRIVATE3 16384
#define WSATTR_PRIVATE4 32768
void (*replaceattr)(void *, long, long);
};
struct wsscreen_descr {
const char *name;
int ncols, nrows;
const struct wsdisplay_emulops *textops;
int fontwidth, fontheight;
int capabilities;
#define WSSCREEN_WSCOLORS 1
#define WSSCREEN_REVERSE 2
#define WSSCREEN_HILIT 4
#define WSSCREEN_BLINK 8
#define WSSCREEN_UNDERLINE 16
#define WSSCREEN_RESIZE 32
#define WSSCREEN_FREE 64
#define WSSCREEN_256COL 128
void *modecookie;
};
struct wsdisplay_font;
struct wsdisplay_char;
struct wsdisplay_accessops {
int (*ioctl)(void *, void *, u_long, void *, int, struct lwp *);
paddr_t (*mmap)(void *, void *, off_t, int);
int (*alloc_screen)(void *, const struct wsscreen_descr *,
void **, int *, int *, long *);
void (*free_screen)(void *, void *);
int (*show_screen)(void *, void *, int,
void (*)(void *, int, int), void *);
int (*load_font)(void *, void *, struct wsdisplay_font *);
void (*pollc)(void *, int);
void (*scroll)(void *, void *, int);
};
struct wsdisplaydev_attach_args {
const struct wsdisplay_accessops *accessops;
void *accesscookie;
};
struct wsscreen_list {
int nscreens;
const struct wsscreen_descr **screens;
};
struct wsemuldisplaydev_attach_args {
int console;
const struct wsscreen_list *scrdata;
const struct wsdisplay_accessops *accessops;
void *accesscookie;
};
struct wscons_syncops {
int (*detach)(void *, int, void (*)(void *, int, int), void *);
int (*attach)(void *, int, void (*)(void *, int, int), void *);
int (*check)(void *);
void (*destroy)(void *);
};
void wsdisplay_cnattach(const struct wsscreen_descr *, void *, int, int,
long);
void wsdisplay_preattach(const struct wsscreen_descr *, void *, int, int,
long);
void wsdisplay_predetach(void);
void wsdisplay_cndetach(void);
void wsdisplay_multicons_suspend(bool);
int wsdisplaydevprint(void *, const char *);
int wsemuldisplaydevprint(void *, const char *);
int wsdisplay_handlex(int);
void wsdisplay_cnputc(dev_t, int);
struct wsdisplay_softc;
struct wsscreen;
int wsscreen_attach_sync(struct wsscreen *,
const struct wscons_syncops *, void *);
int wsscreen_detach_sync(struct wsscreen *);
int wsscreen_lookup_sync(struct wsscreen *,
const struct wscons_syncops *, void **);
int wsdisplay_maxscreenidx(struct wsdisplay_softc *);
int wsdisplay_screenstate(struct wsdisplay_softc *, int);
int wsdisplay_getactivescreen(struct wsdisplay_softc *);
int wsscreen_switchwait(struct wsdisplay_softc *, int);
int wsdisplay_internal_ioctl(struct wsdisplay_softc *, struct wsscreen *,
u_long, void *, int, struct lwp *);
int wsdisplay_usl_ioctl1(device_t, u_long, void *, int, struct lwp *);
int wsdisplay_usl_ioctl2(struct wsdisplay_softc *, struct wsscreen *,
u_long, void *, int, struct lwp *);
int wsdisplay_stat_ioctl(struct wsdisplay_softc *, u_long, void *,
int, struct lwp *);
int wsdisplay_cfg_ioctl(struct wsdisplay_softc *, u_long, void *,
int, struct lwp *);
bool wsdisplay_isconsole(struct wsdisplay_softc *);
struct wsdisplayio_edid_info;
int wsdisplayio_get_edid(device_t, struct wsdisplayio_edid_info *);
struct wsdisplayio_fbinfo;
struct rasops_info;
int wsdisplayio_get_fbinfo(struct rasops_info *, struct wsdisplayio_fbinfo *);
#ifdef WSDISPLAY_SCROLLSUPPORT
void wsdisplay_scroll(void *, int);
#endif
#define WSDISPLAY_SCROLL_BACKWARD 1
#define WSDISPLAY_SCROLL_FORWARD (1 << 1)
#define WSDISPLAY_SCROLL_RESET (1 << 2)
#define WSDISPLAY_SCROLL_LOW (1 << 3)
int wsdisplay_stat_inject(device_t, u_int, int);
#define WSDISPLAY_NULLSCREEN -1
const struct wsscreen_descr *wsdisplay_screentype_pick(
const struct wsscreen_list *, const char *);
#if defined(_KERNEL)
# if defined(_KERNEL_OPT)
# include "opt_wsmsgattrs.h"
# endif
# if !defined(WS_DEFAULT_FG)
# define WS_DEFAULT_FG WSCOL_WHITE
# endif
# if !defined(WS_DEFAULT_BG)
# define WS_DEFAULT_BG WSCOL_BLACK
# endif
# if !defined(WS_DEFAULT_COLATTR)
# define WS_DEFAULT_COLATTR 0
# endif
# if !defined(WS_DEFAULT_MONOATTR)
# define WS_DEFAULT_MONOATTR 0
# endif
# if defined(WS_KERNEL_FG) || defined(WS_KERNEL_BG) || \
defined(WS_KERNEL_COLATTR) || defined(WS_KERNEL_MONOATTR)
# define WS_KERNEL_CUSTOMIZED
# else
# undef WS_KERNEL_CUSTOMIZED
# endif
# if !defined(WS_KERNEL_FG)
# define WS_KERNEL_FG WS_DEFAULT_FG
# endif
# if !defined(WS_KERNEL_BG)
# define WS_KERNEL_BG WS_DEFAULT_BG
# endif
# if !defined(WS_KERNEL_COLATTR)
# define WS_KERNEL_COLATTR WS_DEFAULT_COLATTR
# endif
# if !defined(WS_KERNEL_MONOATTR)
# define WS_KERNEL_MONOATTR WS_DEFAULT_MONOATTR
# endif
# if !defined(WSDISPLAY_BORDER_COLOR)
# define WSDISPLAY_BORDER_COLOR WS_DEFAULT_BG
# endif
#endif
#endif