#ifndef _SYS_FBIO_H_
#define _SYS_FBIO_H_
#ifndef _KERNEL
#include <sys/types.h>
#else
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/eventhandler.h>
#endif
#include <sys/ioccom.h>
#define FBTYPE_SUN1BW 0
#define FBTYPE_SUN1COLOR 1
#define FBTYPE_SUN2BW 2
#define FBTYPE_SUN2COLOR 3
#define FBTYPE_SUN2GP 4
#define FBTYPE_SUN5COLOR 5
#define FBTYPE_SUN3COLOR 6
#define FBTYPE_MEMCOLOR 7
#define FBTYPE_SUN4COLOR 8
#define FBTYPE_NOTSUN1 9
#define FBTYPE_NOTSUN2 10
#define FBTYPE_PCIMISC 11
#define FBTYPE_SUNFAST_COLOR 12
#define FBTYPE_SUNROP_COLOR 13
#define FBTYPE_SUNFB_VIDEO 14
#define FBTYPE_RESERVED5 15
#define FBTYPE_RESERVED4 16
#define FBTYPE_SUNGP3 17
#define FBTYPE_SUNGT 18
#define FBTYPE_SUNLEO 19
#define FBTYPE_MDA 20
#define FBTYPE_HERCULES 21
#define FBTYPE_CGA 22
#define FBTYPE_EGA 23
#define FBTYPE_VGA 24
#define FBTYPE_TGA 26
#define FBTYPE_TGA2 27
#define FBTYPE_MDICOLOR 28
#define FBTYPE_TCXCOLOR 29
#define FBTYPE_CREATOR 30
#define FBTYPE_EFIFB 31
#define FBTYPE_LASTPLUSONE 32
struct fbtype {
int fb_type;
int fb_height;
int fb_width;
int fb_depth;
int fb_cmsize;
int fb_size;
};
#define FBIOGTYPE _IOR('F', 0, struct fbtype)
#define FBTYPE_GET_STRIDE(_fb) ((_fb)->fb_size / (_fb)->fb_height)
#define FBTYPE_GET_BPP(_fb) ((_fb)->fb_bpp)
#define FBTYPE_GET_BYTESPP(_fb) ((_fb)->fb_bpp / 8)
struct fb_rgboffs {
int red;
int green;
int blue;
};
#ifdef _KERNEL
struct fb_info;
typedef int fb_enter_t(void *priv);
typedef int fb_leave_t(void *priv);
typedef int fb_setblankmode_t(void *priv, int mode);
struct fb_info {
int fb_type;
int fb_height;
int fb_width;
int fb_depth;
int fb_cmsize;
int fb_size;
struct cdev *fb_cdev;
device_t fb_fbd_dev;
device_t fb_video_dev;
fb_enter_t *enter;
fb_leave_t *leave;
fb_setblankmode_t *setblankmode;
vm_paddr_t fb_pbase;
vm_offset_t fb_vbase;
void *fb_priv;
const char *fb_name;
uint32_t fb_flags;
#define FB_FLAG_NOMMAP 1
#define FB_FLAG_NOWRITE 2
#define FB_FLAG_MEMATTR 4
vm_memattr_t fb_memattr;
int fb_stride;
int fb_bpp;
uint32_t fb_cmap[16];
struct fb_rgboffs fb_rgboffs;
};
int fbd_list(void);
int fbd_register(struct fb_info *);
int fbd_unregister(struct fb_info *);
static inline int
register_framebuffer(struct fb_info *info)
{
EVENTHANDLER_INVOKE(register_framebuffer, info);
return (0);
}
static inline int
unregister_framebuffer(struct fb_info *info)
{
EVENTHANDLER_INVOKE(unregister_framebuffer, info);
return (0);
}
#endif
struct fbcmap {
int index;
int count;
u_char *red;
u_char *green;
u_char *blue;
};
#define FBIOPUTCMAP _IOW('F', 3, struct fbcmap)
#define FBIOGETCMAP _IOW('F', 4, struct fbcmap)
struct video_info {
int vi_mode;
int vi_flags;
#define V_INFO_COLOR (1 << 0)
#define V_INFO_GRAPHICS (1 << 1)
#define V_INFO_LINEAR (1 << 2)
#define V_INFO_VESA (1 << 3)
#define V_INFO_NONVGA (1 << 4)
#define V_INFO_CWIDTH9 (1 << 5)
int vi_width;
int vi_height;
int vi_cwidth;
int vi_cheight;
int vi_depth;
int vi_planes;
vm_offset_t vi_window;
size_t vi_window_size;
size_t vi_window_gran;
vm_offset_t vi_buffer;
size_t vi_buffer_size;
int vi_mem_model;
#define V_INFO_MM_OTHER (-1)
#define V_INFO_MM_TEXT 0
#define V_INFO_MM_PLANAR 1
#define V_INFO_MM_PACKED 2
#define V_INFO_MM_DIRECT 3
#define V_INFO_MM_CGA 100
#define V_INFO_MM_HGC 101
#define V_INFO_MM_VGAX 102
int vi_pixel_size;
int vi_pixel_fields[4];
int vi_pixel_fsizes[4];
u_char vi_reserved[64];
vm_offset_t vi_registers;
vm_offset_t vi_registers_size;
};
typedef struct video_info video_info_t;
struct video_adapter {
int va_index;
int va_type;
#define KD_OTHER 0
#define KD_MONO 1
#define KD_HERCULES 2
#define KD_CGA 3
#define KD_EGA 4
#define KD_VGA 5
#define KD_TGA 7
#define KD_TGA2 8
char *va_name;
int va_unit;
int va_minor;
int va_flags;
#define V_ADP_COLOR (1 << 0)
#define V_ADP_MODECHANGE (1 << 1)
#define V_ADP_STATESAVE (1 << 2)
#define V_ADP_STATELOAD (1 << 3)
#define V_ADP_FONT (1 << 4)
#define V_ADP_PALETTE (1 << 5)
#define V_ADP_BORDER (1 << 6)
#define V_ADP_VESA (1 << 7)
#define V_ADP_BOOTDISPLAY (1 << 8)
#define V_ADP_PROBED (1 << 16)
#define V_ADP_INITIALIZED (1 << 17)
#define V_ADP_REGISTERED (1 << 18)
#define V_ADP_ATTACHED (1 << 19)
#define V_ADP_DAC8 (1 << 20)
#define V_ADP_CWIDTH9 (1 << 21)
vm_offset_t va_io_base;
int va_io_size;
vm_offset_t va_crtc_addr;
vm_offset_t va_mem_base;
int va_mem_size;
vm_offset_t va_window;
size_t va_window_size;
size_t va_window_gran;
u_int va_window_orig;
vm_offset_t va_buffer;
size_t va_buffer_size;
int va_initial_mode;
int va_initial_bios_mode;
int va_mode;
struct video_info va_info;
int va_line_width;
struct {
int x;
int y;
} va_disp_start;
void *va_token;
int va_model;
int va_little_bitian;
int va_little_endian;
int va_buffer_alias;
vm_offset_t va_registers;
vm_offset_t va_registers_size;
};
typedef struct video_adapter video_adapter_t;
struct video_adapter_info {
int va_index;
int va_type;
char va_name[16];
int va_unit;
int va_flags;
vm_offset_t va_io_base;
int va_io_size;
vm_offset_t va_crtc_addr;
vm_offset_t va_mem_base;
int va_mem_size;
vm_offset_t va_window;
size_t va_window_size;
size_t va_window_gran;
vm_offset_t va_unused0;
size_t va_buffer_size;
int va_initial_mode;
int va_initial_bios_mode;
int va_mode;
int va_line_width;
struct {
int x;
int y;
} va_disp_start;
u_int va_window_orig;
u_char va_reserved[64];
};
typedef struct video_adapter_info video_adapter_info_t;
#define V_ADP_PRIMARY 0
#define V_ADP_SECONDARY 1
#define M_B40x25 0
#define M_C40x25 1
#define M_B80x25 2
#define M_C80x25 3
#define M_BG320 4
#define M_CG320 5
#define M_BG640 6
#define M_EGAMONO80x25 7
#define M_CG320_D 13
#define M_CG640_E 14
#define M_EGAMONOAPA 15
#define M_CG640x350 16
#define M_ENHMONOAPA2 17
#define M_ENH_CG640 18
#define M_ENH_B40x25 19
#define M_ENH_C40x25 20
#define M_ENH_B80x25 21
#define M_ENH_C80x25 22
#define M_VGA_C40x25 23
#define M_VGA_C80x25 24
#define M_VGA_M80x25 25
#define M_VGA11 26
#define M_BG640x480 26
#define M_VGA12 27
#define M_CG640x480 27
#define M_VGA13 28
#define M_VGA_CG320 28
#define M_VGA_C80x50 30
#define M_VGA_M80x50 31
#define M_VGA_C80x30 32
#define M_VGA_M80x30 33
#define M_VGA_C80x60 34
#define M_VGA_M80x60 35
#define M_VGA_CG640 36
#define M_VGA_MODEX 37
#define M_VGA_C90x25 40
#define M_VGA_M90x25 41
#define M_VGA_C90x30 42
#define M_VGA_M90x30 43
#define M_VGA_C90x43 44
#define M_VGA_M90x43 45
#define M_VGA_C90x50 46
#define M_VGA_M90x50 47
#define M_VGA_C90x60 48
#define M_VGA_M90x60 49
#define M_ENH_B80x43 0x70
#define M_ENH_C80x43 0x71
#define M_HGC_P0 0xe0
#define M_HGC_P1 0xe1
#define M_MCA_MODE 0xff
#define M_TEXT_80x25 200
#define M_TEXT_80x30 201
#define M_TEXT_80x43 202
#define M_TEXT_80x50 203
#define M_TEXT_80x60 204
#define M_TEXT_132x25 205
#define M_TEXT_132x30 206
#define M_TEXT_132x43 207
#define M_TEXT_132x50 208
#define M_TEXT_132x60 209
#define M_VESA_BASE 0x100
#define M_VESA_CG640x400 0x100
#define M_VESA_CG640x480 0x101
#define M_VESA_800x600 0x102
#define M_VESA_CG800x600 0x103
#define M_VESA_1024x768 0x104
#define M_VESA_CG1024x768 0x105
#define M_VESA_1280x1024 0x106
#define M_VESA_CG1280x1024 0x107
#define M_VESA_C80x60 0x108
#define M_VESA_C132x25 0x109
#define M_VESA_C132x43 0x10a
#define M_VESA_C132x50 0x10b
#define M_VESA_C132x60 0x10c
#define M_VESA_32K_320 0x10d
#define M_VESA_64K_320 0x10e
#define M_VESA_FULL_320 0x10f
#define M_VESA_32K_640 0x110
#define M_VESA_64K_640 0x111
#define M_VESA_FULL_640 0x112
#define M_VESA_32K_800 0x113
#define M_VESA_64K_800 0x114
#define M_VESA_FULL_800 0x115
#define M_VESA_32K_1024 0x116
#define M_VESA_64K_1024 0x117
#define M_VESA_FULL_1024 0x118
#define M_VESA_32K_1280 0x119
#define M_VESA_64K_1280 0x11a
#define M_VESA_FULL_1280 0x11b
#define M_VESA_MODE_MAX 0x1ff
struct video_display_start {
int x;
int y;
};
typedef struct video_display_start video_display_start_t;
struct video_color_palette {
int index;
int count;
u_char *red;
u_char *green;
u_char *blue;
u_char *transparent;
};
typedef struct video_color_palette video_color_palette_t;
#define FBIO_ADAPTER _IOR('F', 100, int)
#define FBIO_ADPTYPE _IOR('F', 101, int)
#define FBIO_ADPINFO _IOR('F', 102, struct video_adapter_info)
#define FBIO_MODEINFO _IOWR('F', 103, struct video_info)
#define FBIO_FINDMODE _IOWR('F', 104, struct video_info)
#define FBIO_GETMODE _IOR('F', 105, int)
#define FBIO_SETMODE _IOW('F', 106, int)
#define FBIO_GETWINORG _IOR('F', 107, u_int)
#define FBIO_SETWINORG _IOW('F', 108, u_int)
#define FBIO_GETDISPSTART _IOR('F', 109, video_display_start_t)
#define FBIO_SETDISPSTART _IOW('F', 110, video_display_start_t)
#define FBIO_GETLINEWIDTH _IOR('F', 111, u_int)
#define FBIO_SETLINEWIDTH _IOW('F', 112, u_int)
#define FBIO_GETPALETTE _IOW('F', 113, video_color_palette_t)
#define FBIO_SETPALETTE _IOW('F', 114, video_color_palette_t)
#define V_DISPLAY_ON 0
#define V_DISPLAY_BLANK 1
#define V_DISPLAY_STAND_BY 2
#define V_DISPLAY_SUSPEND 3
#define FBIO_BLANK _IOW('F', 115, int)
#define FBIO_GETRGBOFFS _IOR('F', 116, struct fb_rgboffs)
#endif