From c25844b47e78024dd976d0487857ca3fb061a775 Mon Sep 17 00:00:00 2001 From: obrien Date: Sat, 13 Apr 2002 22:34:16 +0000 Subject: Turn on TGA support. Submitted by: Andrew M. Miklic --- sys/alpha/conf/GENERIC | 1 + sys/alpha/conf/NOTES | 1 + sys/conf/files.alpha | 7 +++++++ sys/conf/options.alpha | 8 ++++++++ sys/dev/fb/fb.c | 11 ++++++----- sys/dev/fb/fbreg.h | 22 +++++++++++++++++++++- sys/dev/fb/gfb.c | 1 - sys/dev/fb/tga.c | 28 ++++++++++++++++++++++------ sys/dev/gfb/gfb_pci.c | 2 ++ sys/dev/syscons/scgfbrndr.c | 3 ++- sys/dev/syscons/syscons.c | 4 ++-- sys/dev/syscons/syscons.h | 11 +++++++++-- sys/sys/fbio.h | 32 +++++++++++++++++++++----------- 13 files changed, 102 insertions(+), 29 deletions(-) diff --git a/sys/alpha/conf/GENERIC b/sys/alpha/conf/GENERIC index a6d61c8..d71eedf 100644 --- a/sys/alpha/conf/GENERIC +++ b/sys/alpha/conf/GENERIC @@ -119,6 +119,7 @@ device atkbd # at keyboard device psm # psm mouse device vga # VGA screen +device tga # TGA screen # splash screen/screen saver device splash diff --git a/sys/alpha/conf/NOTES b/sys/alpha/conf/NOTES index a6d61c8..d71eedf 100644 --- a/sys/alpha/conf/NOTES +++ b/sys/alpha/conf/NOTES @@ -119,6 +119,7 @@ device atkbd # at keyboard device psm # psm mouse device vga # VGA screen +device tga # TGA screen # splash screen/screen saver device splash diff --git a/sys/conf/files.alpha b/sys/conf/files.alpha index 9733f65..f39dca6 100644 --- a/sys/conf/files.alpha +++ b/sys/conf/files.alpha @@ -206,6 +206,7 @@ dev/syscons/scterm.c optional sc dev/syscons/scterm-dumb.c optional sc dev/syscons/scterm-sc.c optional sc dev/syscons/scvgarndr.c optional sc vga +dev/syscons/scgfbrndr.c optional sc tga dev/syscons/scvidctl.c optional sc dev/syscons/scvtb.c optional sc dev/syscons/syscons.c optional sc @@ -222,3 +223,9 @@ libkern/alpha/bswap16.S standard libkern/alpha/bswap32.S standard libkern/bcmp.c standard libkern/ffs.c standard +dev/fb/tga.c optional tga +dev/fb/boot_font.c optional tga +dev/tga/tga_pci.c optional tga +dev/fb/fb.c optional tga +dev/fb/gfb.c optional tga +dev/gfb/gfb_pci.c optional tga diff --git a/sys/conf/options.alpha b/sys/conf/options.alpha index 6cd1c79..69745f3 100644 --- a/sys/conf/options.alpha +++ b/sys/conf/options.alpha @@ -53,6 +53,14 @@ VGA_NO_MODE_CHANGE opt_vga.h VGA_SLOW_IOACCESS opt_vga.h VGA_WIDTH90 opt_vga.h +GFB_DEBUG opt_gfb.h +GFB_NO_FONT_LOADING opt_gfb.h +GFB_NO_MODE_CHANGE opt_gfb.h + +TGA_DEBUG opt_tga.h +TGA_NO_FONT_LOADING opt_tga.h +TGA_NO_MODE_CHANGE opt_tga.h + PSM_HOOKRESUME opt_psm.h PSM_RESETAFTERSUSPEND opt_psm.h PSM_DEBUG opt_psm.h diff --git a/sys/dev/fb/fb.c b/sys/dev/fb/fb.c index 5bfd303..0dbb73b 100644 --- a/sys/dev/fb/fb.c +++ b/sys/dev/fb/fb.c @@ -637,10 +637,11 @@ fb_dump_adp_info(char *driver, video_adapter_t *adp, int level) printf("%s%d: %s%d, %s, type:%s (%d), flags:0x%x\n", FB_DRIVER_NAME, adp->va_index, driver, adp->va_unit, adp->va_name, adapter_name(adp->va_type), adp->va_type, adp->va_flags); - printf("%s%d: port:0x%x-0x%x, crtc:0x%x, mem:0x%x 0x%x\n", - FB_DRIVER_NAME, adp->va_index, - adp->va_io_base, adp->va_io_base + adp->va_io_size - 1, - adp->va_crtc_addr, adp->va_mem_base, adp->va_mem_size); + printf("%s%d: port:0x%lx-0x%lx, crtc:0x%lx, mem:0x%lx 0x%x\n", + FB_DRIVER_NAME, adp->va_index, (u_long)adp->va_io_base, + (u_long)adp->va_io_base + adp->va_io_size - 1, + (u_long)adp->va_crtc_addr, (u_long)adp->va_mem_base, + adp->va_mem_size); printf("%s%d: init mode:%d, bios mode:%d, current mode:%d\n", FB_DRIVER_NAME, adp->va_index, adp->va_initial_mode, adp->va_initial_bios_mode, adp->va_mode); @@ -669,7 +670,7 @@ fb_dump_mode_info(char *driver, video_adapter_t *adp, video_info_t *info, printf("T %dx%d, font:%dx%d, ", info->vi_width, info->vi_height, info->vi_cwidth, info->vi_cheight); - printf("win:0x%x\n", info->vi_window); + printf("win:0x%lx\n", (u_long)info->vi_window); } int diff --git a/sys/dev/fb/fbreg.h b/sys/dev/fb/fbreg.h index 4cf0ad5..d556791 100644 --- a/sys/dev/fb/fbreg.h +++ b/sys/dev/fb/fbreg.h @@ -86,8 +86,21 @@ typedef int vi_ioctl_t(video_adapter_t *adp, u_long cmd, caddr_t data); typedef int vi_clear_t(video_adapter_t *adp); typedef int vi_fill_rect_t(video_adapter_t *adp, int val, int x, int y, int cx, int cy); -typedef int vi_bitblt_t(video_adapter_t *adp,...); +typedef int vi_bitblt_t(video_adapter_t *adp, ...); typedef int vi_diag_t(video_adapter_t *adp, int level); +typedef int vi_save_cursor_palette_t(video_adapter_t *adp, u_char *palette); +typedef int vi_load_cursor_palette_t(video_adapter_t *adp, u_char *palette); +typedef int vi_copy_t(video_adapter_t *adp, vm_offset_t src, vm_offset_t dst, + int n); +typedef int vi_putp_t(video_adapter_t *adp, vm_offset_t off, u_int32_t p, + u_int32_t a, int size, int bpp, int bit_ltor, + int byte_ltor); +typedef int vi_putc_t(video_adapter_t *adp, vm_offset_t off, u_int8_t c, + u_int8_t a); +typedef int vi_puts_t(video_adapter_t *adp, vm_offset_t off, u_int16_t *s, + int len); +typedef int vi_putm_t(video_adapter_t *adp, int x, int y, + u_int8_t *pixel_image, u_int32_t pixel_mask, int size); typedef struct video_switch { vi_probe_t *probe; @@ -116,6 +129,13 @@ typedef struct video_switch { int (*reserved1)(void); int (*reserved2)(void); vi_diag_t *diag; + vi_save_cursor_palette_t *save_cursor_palette; + vi_load_cursor_palette_t *load_cursor_palette; + vi_copy_t *copy; + vi_putp_t *putp; + vi_putc_t *putc; + vi_puts_t *puts; + vi_putm_t *putm; } video_switch_t; #define save_palette(adp, pal) \ diff --git a/sys/dev/fb/gfb.c b/sys/dev/fb/gfb.c index f7c377c..fcb8aed 100644 --- a/sys/dev/fb/gfb.c +++ b/sys/dev/fb/gfb.c @@ -541,7 +541,6 @@ gfb_bitblt(video_adapter_t *adp, ...) int /*gfb_clear(video_adapter_t *adp, int n)*/ gfb_clear(video_adapter_t *adp) - video_adapter_t *adp; { int off; diff --git a/sys/dev/fb/tga.c b/sys/dev/fb/tga.c index 08fcac8..a5a56c0 100644 --- a/sys/dev/fb/tga.c +++ b/sys/dev/fb/tga.c @@ -105,10 +105,12 @@ static void tga2_init(struct gfb_softc *, int); /* TGA-specific functionality. */ static gfb_builtin_save_palette_t tga_builtin_save_palette; static gfb_builtin_load_palette_t tga_builtin_load_palette; +#ifdef TGA2 static gfb_builtin_save_palette_t tga2_builtin_save_palette; static gfb_builtin_load_palette_t tga2_builtin_load_palette; static gfb_builtin_save_cursor_palette_t tga2_builtin_save_cursor_palette; static gfb_builtin_load_cursor_palette_t tga2_builtin_load_cursor_palette; +#endif static gfb_builtin_read_hw_cursor_t tga_builtin_read_hw_cursor; static gfb_builtin_set_hw_cursor_t tga_builtin_set_hw_cursor; static gfb_builtin_set_hw_cursor_shape_t tga_builtin_set_hw_cursor_shape; @@ -128,8 +130,10 @@ static void tga2_ics9110_wr(struct gfb_softc *, int); /* RAMDAC-specific functions */ static gfb_ramdac_init_t bt463_init; static void bt463_update_window_type(struct gfb_softc *); +#if 0 static gfb_ramdac_save_palette_t bt463_save_palette; static gfb_ramdac_load_palette_t bt463_load_palette; +#endif static gfb_ramdac_save_cursor_palette_t bt463_save_cursor_palette; static gfb_ramdac_load_cursor_palette_t bt463_load_cursor_palette; static gfb_ramdac_init_t bt485_init; @@ -150,7 +154,9 @@ static gfb_ramdac_load_cursor_palette_t ibm561_load_cursor_palette; static vi_query_mode_t tga_query_mode; static vi_set_mode_t tga_set_mode; static vi_blank_display_t tga_blank_display; +#if 0 static vi_ioctl_t tga_ioctl; +#endif static vi_set_border_t tga_set_border; static vi_set_win_org_t tga_set_win_org; static vi_fill_rect_t tga_fill_rect; @@ -670,7 +676,7 @@ tga_set_mode(video_adapter_t *adp, int mode) /* Assume the best... */ error = 0; - gder = READ_GFB_REGISTER(video_adapter_t *adp, TGA_REG_GDER); + gder = READ_GFB_REGISTER(adp, TGA_REG_GDER); /* Determine the adapter type first @@ -686,13 +692,13 @@ tga_set_mode(video_adapter_t *adp, int mode) switch(mode) { case TGA2_2DA_MODE: vgae_mask = ~0x00400000; - WRITE_GFB_REGISTER(video_adapter_t *adp, TGA_REG_GDER, + WRITE_GFB_REGISTER(adp, TGA_REG_GDER, gder & vgae_mask); adp->va_mode = mode; break; case TGA2_VGA_MODE: vgae_mask = 0x00400000; - WRITE_GFB_REGISTER(video_adapter_t *adp, TGA_REG_GDER, + WRITE_GFB_REGISTER(adp, TGA_REG_GDER, gder | vgae_mask); adp->va_mode = mode; break; @@ -757,6 +763,8 @@ tga_blank_display(video_adapter_t *adp, int mode) return(0); } +#if 0 + static int tga_ioctl(video_adapter_t *adp, u_long cmd, caddr_t arg) { @@ -784,6 +792,8 @@ tga_ioctl(video_adapter_t *adp, u_long cmd, caddr_t arg) return(error); } +#endif /* 0 */ + static int tga_set_border(video_adapter_t *adp, int color) { return(ENODEV); @@ -916,7 +926,7 @@ tga_bitblt(video_adapter_t *adp, ...) { static int #if 0 tga_clear(video_adapter_t *adp, int n) -else +#else tga_clear(video_adapter_t *adp) #endif { @@ -1410,6 +1420,7 @@ tga_builtin_load_palette(video_adapter_t *adp, video_color_palette_t *palette) return(error); } +#ifdef TGA2 static int tga2_builtin_save_palette(video_adapter_t *adp, video_color_palette_t *palette) { @@ -1512,8 +1523,10 @@ tga2_builtin_load_cursor_palette(video_adapter_t *adp, struct fbcmap *palette) return(error); } +#endif /* TGA2 */ + static int -tga_builtin_read_hw_cursor(video_adapter_t *adp, int col, int row) +tga_builtin_read_hw_cursor(video_adapter_t *adp, int *col, int *row) { gfb_reg_t cxyr; int error; @@ -1969,6 +1982,7 @@ bt463_update_window_type(struct gfb_softc *sc) } } +#if 0 static int bt463_save_palette(video_adapter_t *adp, video_color_palette_t *palette) { @@ -2016,6 +2030,8 @@ bt463_load_palette(video_adapter_t *adp, video_color_palette_t *palette) return(error); } +#endif /* 0 */ + static int bt463_save_cursor_palette(video_adapter_t *adp, struct fbcmap *palette) { @@ -2040,7 +2056,7 @@ bt463_save_cursor_palette(video_adapter_t *adp, struct fbcmap *palette) } static int -bt463_load_cursor_palette(video_adapter_t *adp, struct bfcmap *palette) +bt463_load_cursor_palette(video_adapter_t *adp, struct fbcmap *palette) { struct gfb_softc *sc; int error, i; diff --git a/sys/dev/gfb/gfb_pci.c b/sys/dev/gfb/gfb_pci.c index deeb7b8..3f81b1a 100644 --- a/sys/dev/gfb/gfb_pci.c +++ b/sys/dev/gfb/gfb_pci.c @@ -70,7 +70,9 @@ __FBSDID("$FreeBSD$"); #include "opt_fb.h" +#if 0 static devclass_t gfb_devclass; +#endif #ifdef __alpha__ diff --git a/sys/dev/syscons/scgfbrndr.c b/sys/dev/syscons/scgfbrndr.c index 29a2d30..133a9be 100644 --- a/sys/dev/syscons/scgfbrndr.c +++ b/sys/dev/syscons/scgfbrndr.c @@ -256,7 +256,8 @@ gfb_cursor(scr_stat *scp, int at, int blink, int on, int flip) video_adapter_t *adp; adp = scp->sc->adp; - if (scp->cursor_height <= 0) /* the text cursor is disabled */ + if (scp->curs_attr.height <= 0) + /* the text cursor is disabled */ return; if (on) { diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index 037b005..982c7c2 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -2907,14 +2907,14 @@ init_scp(sc_softc_t *sc, int vty, scr_stat *scp) scp->status |= GRAPHICS_MODE; scp->xpixel = info.vi_width; scp->ypixel = info.vi_height; - scp->xsize = info.vi_width/8; + scp->xsize = info.vi_width/info.vi_cwidth; scp->ysize = info.vi_height/info.vi_cheight; scp->font_size = 0; scp->font = NULL; } else { scp->xsize = info.vi_width; scp->ysize = info.vi_height; - scp->xpixel = scp->xsize*8; + scp->xpixel = scp->xsize*info.vi_cwidth; scp->ypixel = scp->ysize*info.vi_cheight; if (info.vi_cheight < 14) { scp->font_size = 8; diff --git a/sys/dev/syscons/syscons.h b/sys/dev/syscons/syscons.h index b5e206a..08e8dfc 100644 --- a/sys/dev/syscons/syscons.h +++ b/sys/dev/syscons/syscons.h @@ -129,8 +129,15 @@ /* misc defines */ #define FALSE 0 #define TRUE 1 -#define COL 80 -#define ROW 25 + +/* + The following #defines are hard-coded for a maximum text + resolution corresponding to a maximum framebuffer + resolution of 1600x1200 with an 8x8 font... +*/ +#define COL 200 +#define ROW 150 + #define PCBURST 128 #ifndef BELL_DURATION diff --git a/sys/sys/fbio.h b/sys/sys/fbio.h index 42e3ee9..266b7f2 100644 --- a/sys/sys/fbio.h +++ b/sys/sys/fbio.h @@ -84,8 +84,9 @@ #define FBTYPE_VGA 24 #define FBTYPE_PC98 25 #define FBTYPE_TGA 26 +#define FBTYPE_TGA2 27 -#define FBTYPE_LASTPLUSONE 27 /* max number of fbs (change as add) */ +#define FBTYPE_LASTPLUSONE 28 /* max number of fbs (change as add) */ /* * Frame buffer descriptor as returned by FBIOGTYPE. @@ -274,10 +275,10 @@ struct video_info { int vi_cheight; int vi_depth; int vi_planes; - u_int vi_window; /* physical address */ + vm_offset_t vi_window; /* physical address */ size_t vi_window_size; size_t vi_window_gran; - u_int vi_buffer; /* physical address */ + vm_offset_t vi_buffer; /* physical address */ size_t vi_buffer_size; int vi_mem_model; #define V_INFO_MM_OTHER (-1) @@ -295,6 +296,8 @@ struct video_info { int vi_pixel_fsizes[4]; /* reserved */ u_char vi_reserved[64]; + vm_offset_t vi_registers; /* physical address */ + vm_offset_t vi_registers_size; }; typedef struct video_info video_info_t; @@ -310,6 +313,7 @@ struct video_adapter { #define KD_VGA 5 /* video graphics adapter */ #define KD_PC98 6 /* PC-98 display */ #define KD_TGA 7 /* TGA */ +#define KD_TGA2 8 /* TGA2 */ char *va_name; int va_unit; int va_minor; @@ -327,10 +331,10 @@ struct video_adapter { #define V_ADP_INITIALIZED (1 << 17) #define V_ADP_REGISTERED (1 << 18) #define V_ADP_ATTACHED (1 << 19) - int va_io_base; + vm_offset_t va_io_base; int va_io_size; - int va_crtc_addr; - int va_mem_base; + vm_offset_t va_crtc_addr; + vm_offset_t va_mem_base; int va_mem_size; vm_offset_t va_window; /* virtual address */ size_t va_window_size; @@ -348,6 +352,12 @@ struct video_adapter { 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; /* virtual address */ + vm_offset_t va_registers_size; }; typedef struct video_adapter video_adapter_t; @@ -357,15 +367,15 @@ struct video_adapter_info { char va_name[16]; int va_unit; int va_flags; - int va_io_base; + vm_offset_t va_io_base; int va_io_size; - int va_crtc_addr; - int va_mem_base; + vm_offset_t va_crtc_addr; + vm_offset_t va_mem_base; int va_mem_size; - u_int va_window; /* virtual address */ + vm_offset_t va_window; /* virtual address */ size_t va_window_size; size_t va_window_gran; - u_int va_unused0; + vm_offset_t va_unused0; size_t va_buffer_size; int va_initial_mode; int va_initial_bios_mode; -- cgit v1.1