summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2002-04-13 22:34:16 +0000
committerobrien <obrien@FreeBSD.org>2002-04-13 22:34:16 +0000
commitc25844b47e78024dd976d0487857ca3fb061a775 (patch)
tree4969d923e03dbc9c0e1fcb0f70bd693684af2cc5
parente824bdd8fba747baf4c0a08236c3fccd02759329 (diff)
downloadFreeBSD-src-c25844b47e78024dd976d0487857ca3fb061a775.zip
FreeBSD-src-c25844b47e78024dd976d0487857ca3fb061a775.tar.gz
Turn on TGA support.
Submitted by: Andrew M. Miklic <AndrwMklc@cs.com>
-rw-r--r--sys/alpha/conf/GENERIC1
-rw-r--r--sys/alpha/conf/NOTES1
-rw-r--r--sys/conf/files.alpha7
-rw-r--r--sys/conf/options.alpha8
-rw-r--r--sys/dev/fb/fb.c11
-rw-r--r--sys/dev/fb/fbreg.h22
-rw-r--r--sys/dev/fb/gfb.c1
-rw-r--r--sys/dev/fb/tga.c28
-rw-r--r--sys/dev/gfb/gfb_pci.c2
-rw-r--r--sys/dev/syscons/scgfbrndr.c3
-rw-r--r--sys/dev/syscons/syscons.c4
-rw-r--r--sys/dev/syscons/syscons.h11
-rw-r--r--sys/sys/fbio.h32
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;
OpenPOWER on IntegriCloud