1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2016 Toomas Soome <tsoome@me.com> 14 */ 15 16 #ifndef _GFXP_FB_H 17 #define _GFXP_FB_H 18 19 /* 20 * gfxp_fb interfaces. 21 */ 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 #include <sys/framebuffer.h> 28 #include <sys/vgareg.h> 29 #include <sys/vgasubr.h> 30 #include <sys/gfx_private.h> 31 32 #define GFXP_FLAG_CONSOLE 0x00000001 33 #define GFXP_IS_CONSOLE(softc) ((softc)->flags & GFXP_FLAG_CONSOLE) 34 35 struct gfxp_fb_softc; 36 37 struct gfxp_ops { 38 const struct vis_identifier *ident; 39 int (*kdsetmode)(struct gfxp_fb_softc *softc, int mode); 40 int (*devinit)(struct gfxp_fb_softc *, struct vis_devinit *data); 41 void (*cons_copy)(struct gfxp_fb_softc *, struct vis_conscopy *); 42 void (*cons_display)(struct gfxp_fb_softc *, struct vis_consdisplay *); 43 void (*cons_cursor)(struct gfxp_fb_softc *, struct vis_conscursor *); 44 int (*cons_clear)(struct gfxp_fb_softc *, struct vis_consclear *); 45 int (*suspend)(struct gfxp_fb_softc *softc); 46 void (*resume)(struct gfxp_fb_softc *softc); 47 int (*devmap)(dev_t, devmap_cookie_t, offset_t, size_t, size_t *, 48 uint_t, void *); 49 }; 50 51 struct vgareg { 52 unsigned char vga_misc; /* Misc out reg */ 53 unsigned char vga_crtc[NUM_CRTC_REG]; /* Crtc controller */ 54 unsigned char vga_seq[NUM_SEQ_REG]; /* Video Sequencer */ 55 unsigned char vga_grc[NUM_GRC_REG]; /* Video Graphics */ 56 unsigned char vga_atr[NUM_ATR_REG]; /* Video Atribute */ 57 }; 58 59 struct gfx_vga { 60 struct vgaregmap regs; 61 struct vgaregmap fb; 62 off_t fb_size; 63 int fb_regno; 64 caddr_t text_base; /* hardware text base */ 65 char shadow[VGA_TEXT_ROWS * VGA_TEXT_COLS * 2]; 66 caddr_t current_base; /* hardware or shadow */ 67 char vga_fontslot; 68 struct vgareg vga_reg; 69 struct { 70 boolean_t visible; 71 int row; 72 int col; 73 } cursor; 74 struct { 75 unsigned char red; 76 unsigned char green; 77 unsigned char blue; 78 } colormap[VGA8_CMAP_ENTRIES]; 79 unsigned char attrib_palette[VGA_ATR_NUM_PLT]; 80 struct font font; 81 }; 82 83 union gfx_console { 84 struct fb_info fb; 85 struct gfx_vga vga; 86 }; 87 88 struct gfxp_fb_softc { 89 dev_info_t *devi; 90 int mode; /* KD_TEXT or KD_GRAPHICS */ 91 enum gfxp_type fb_type; 92 unsigned int flags; 93 kmutex_t lock; 94 char silent; 95 char happyface_boot; 96 struct vis_polledio polledio; 97 struct gfxp_ops *gfxp_ops; 98 struct gfxp_blt_ops blt_ops; 99 struct fbgattr *fbgattr; 100 union gfx_console *console; 101 }; 102 103 /* function definitions */ 104 int gfxp_bm_attach(dev_info_t *, struct gfxp_fb_softc *); 105 int gfxp_bm_detach(dev_info_t *, struct gfxp_fb_softc *); 106 107 int gfxp_vga_attach(dev_info_t *, struct gfxp_fb_softc *); 108 int gfxp_vga_detach(dev_info_t *, struct gfxp_fb_softc *); 109 110 #ifdef __cplusplus 111 } 112 #endif 113 114 #endif /* _GFXP_FB_H */ 115