summaryrefslogtreecommitdiffstats
path: root/sys/dev/fb
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2007-01-08 00:33:27 +0000
committermarius <marius@FreeBSD.org>2007-01-08 00:33:27 +0000
commit20cb894d777d446b2a990558635f8edb332ed501 (patch)
tree5fe3686abe18f9a26856d4569be4bb8f87fc1c86 /sys/dev/fb
parentf5941f42a01246945ad2ad666b3df0e641b95f75 (diff)
downloadFreeBSD-src-20cb894d777d446b2a990558635f8edb332ed501.zip
FreeBSD-src-20cb894d777d446b2a990558635f8edb332ed501.tar.gz
- Garbage collect more alpha remnants.
- Fix a typo in a comment in boot_font.c.
Diffstat (limited to 'sys/dev/fb')
-rw-r--r--sys/dev/fb/boot_font.c34
-rw-r--r--sys/dev/fb/gfb.c939
-rw-r--r--sys/dev/fb/gfb.h131
3 files changed, 2 insertions, 1102 deletions
diff --git a/sys/dev/fb/boot_font.c b/sys/dev/fb/boot_font.c
index 6f4ac05..b892168 100644
--- a/sys/dev/fb/boot_font.c
+++ b/sys/dev/fb/boot_font.c
@@ -34,7 +34,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
/*-
- * This font lives in the public domain. It it a PC font, IBM encoding,
+ * This font lives in the public domain. It is a PC font, IBM encoding,
* which was designed for use with syscons.
*
* Copyright (c) 2000 Andrew Miklic
@@ -44,38 +44,8 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/conf.h>
-#include <sys/proc.h>
-#include <sys/fcntl.h>
-#include <sys/malloc.h>
-#include <sys/fbio.h>
-
-#include <isa/isareg.h>
-#include <dev/fb/vgareg.h>
-
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <vm/pmap.h>
-
-#include <machine/md_var.h>
-#include <machine/pc/bios.h>
-#include <machine/bus.h>
-#include <machine/pc/vesa.h>
-#include <machine/resource.h>
-
-#include <sys/bus.h>
-#include <sys/rman.h>
-
-#include <dev/pci/pcireg.h>
-#include <dev/pci/pcivar.h>
-
-#include <dev/fb/fbreg.h>
-#include <dev/fb/gfb.h>
-#include <dev/gfb/gfb_pci.h>
-#include "opt_fb.h"
+#include <dev/fb/gfb.h>
struct gfb_font bold8x16 = {
8,
diff --git a/sys/dev/fb/gfb.c b/sys/dev/fb/gfb.c
deleted file mode 100644
index b4f191f..0000000
--- a/sys/dev/fb/gfb.c
+++ /dev/null
@@ -1,939 +0,0 @@
-/*-
- * Copyright (c) 2001 Andrew Miklic
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*-
- * Copyright (c) 1995, 1996 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <machine/stdarg.h>
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/conf.h>
-#include <sys/proc.h>
-#include <sys/fcntl.h>
-#include <sys/malloc.h>
-#include <sys/fbio.h>
-
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <vm/pmap.h>
-
-#include <machine/md_var.h>
-#include <machine/pc/bios.h>
-#include <machine/bus.h>
-#include <machine/pc/vesa.h>
-#include <machine/resource.h>
-#include <machine/rpb.h>
-
-#include <sys/bus.h>
-#include <sys/rman.h>
-
-#include <dev/pci/pcireg.h>
-#include <dev/pci/pcivar.h>
-
-#include <dev/fb/fbreg.h>
-#include <dev/fb/gfb.h>
-#include <dev/gfb/gfb_pci.h>
-
-#include "opt_gfb.h"
-
-struct gfb_softc *gfb_device_softcs[2][MAX_NUM_GFB_CARDS] = {
- {
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
- },
- {
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
- },
-};
-
-/*
- The following 9 variables exist only because we need statically
- allocated structures very early in boot to support gfb_configure()...
-*/
-struct gfb_softc console;
-video_adapter_t console_adp;
-struct gfb_conf console_gfbc;
-u_char console_palette_red[256];
-u_char console_palette_green[256];
-u_char console_palette_blue[256];
-u_char console_cursor_palette_red[3];
-u_char console_cursor_palette_green[3];
-u_char console_cursor_palette_blue[3];
-
-extern struct gfb_font bold8x16;
-
-/*****************************************************************************
- *
- * FB-generic functions
- *
- ****************************************************************************/
-
-int
-gfb_probe(int unit, video_adapter_t **adpp, void *arg, int flags)
-{
- int error;
-
- /* Assume the best... */
- error = 0;
-
- if((*adpp = vid_get_adapter(vid_find_adapter((char *)arg, unit))) == NULL)
- error = ENODEV;
- else
- (*adpp)->va_flags |= V_ADP_PROBED;
-
- return(error);
-}
-
-int
-gfb_init(int unit, video_adapter_t *adp, int flags)
-{
- struct gfb_softc *sc;
- struct gfb_conf *gfbc;
- int error;
-
- /* Assume the best... */
- error = 0;
-
- if(!init_done(adp)) {
- sc = gfb_device_softcs[adp->va_model][unit];
- gfbc = sc->gfbc;
-
- /* Initialize the RAMDAC... */
- (*gfbc->ramdac_init)(sc);
-
- /* Initialize the palettes... */
- (*gfbc->ramdac_load_palette)(sc->adp, &sc->gfbc->palette);
- (*gfbc->ramdac_load_cursor_palette)(sc->adp,
- &sc->gfbc->cursor_palette);
-
- /* Prepare the default font... */
- (*vidsw[adp->va_index]->load_font)(adp, 0, bold8x16.height,
- bold8x16.width, bold8x16.data, 0, 256);
- adp->va_info.vi_cwidth = gfbc->fonts[0].width;
- adp->va_info.vi_cheight = gfbc->fonts[0].height;
-
- /*
- Normalize vi_width and vi_height to be in terms of
- on-screen characters, rather than pixels (*_init()
- leaves them in terms of pixels...
- */
- adp->va_info.vi_width /= adp->va_info.vi_cwidth;
- adp->va_info.vi_height /= adp->va_info.vi_cheight;
-
- /* Enable the default font... */
- (*vidsw[adp->va_index]->show_font)(adp, 0);
-
- /* Enable future font-loading... */
- adp->va_flags |= V_ADP_FONT;
-
- /* Flag this initialization for this adapter... */
- adp->va_flags |= V_ADP_INITIALIZED;
- }
- return(error);
-}
-
-int
-gfb_get_info(video_adapter_t *adp, int mode, video_info_t *info)
-{
- int error;
-
- /* Assume the best... */
- error = 0;
-
- /*
- The info for GFB adapters does not depend on its mode,
- so just copy it indiscriminantly (actually, we originally
- checked the mode, but the current fb framework is somewhat
- sloppily done in places, and assumes VGA in several places,
- which makes such checks always fail for such GFBs as TGA)...
- */
- bcopy(&adp->va_info, info, sizeof(video_info_t));
- return(error);
-}
-
-int
-gfb_set_mode(video_adapter_t *adp, int mode)
-{
-
- adp->va_mode = mode;
- return(0);
-}
-
-int
-gfb_save_font(video_adapter_t *adp, int page, int fontsize, int fontwidth,
- u_char *data, int ch, int count)
-{
- struct gfb_softc *sc;
- int error;
- int i;
-
- error = 0;
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- /* Check the font information... */
- if((sc->gfbc->fonts[page].height != fontsize) ||
- (sc->gfbc->fonts[page].width != fontwidth))
- error = EINVAL;
- else
-
- /*
- Copy the character pixel array from our
- very own private cache...
- */
- for(i = ch; i < count * fontsize; i++)
- data[i] = adp->va_little_bitian ?
- BIT_REVERSE(sc->gfbc->fonts[page].data[i]) :
- sc->gfbc->fonts[page].data[i];
-
- return(error);
-}
-
-int
-gfb_load_font(video_adapter_t *adp, int page, int fontsize, int fontwidth,
- u_char *data, int ch, int count)
-{
- struct gfb_softc *sc;
- int error;
- int i;
-
- error = 0;
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- /* Copy the character pixel array into our very own private cache... */
- for(i = ch; i < count * fontsize; i++)
- sc->gfbc->fonts[page].data[i] = adp->va_little_bitian ?
- BIT_REVERSE(data[i]) : data[i];
-
- /* Save the font information... */
- sc->gfbc->fonts[page].height = fontsize;
- sc->gfbc->fonts[page].width = fontwidth;
-
- return(error);
-}
-
-int
-gfb_show_font(video_adapter_t *adp, int page)
-{
- struct gfb_softc *sc;
- int error;
-
- error = 0;
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- /* Normalize adapter values... */
- adp->va_info.vi_height *= adp->va_info.vi_cheight;
- adp->va_info.vi_width *= adp->va_info.vi_cwidth;
-
- /* Set the current font pixels... */
- sc->gfbc->font = sc->gfbc->fonts[page].data;
-
- /* Set the current font width... */
- adp->va_info.vi_cwidth = sc->gfbc->fonts[page].width;
-
- /* Set the current font height... */
- adp->va_info.vi_cheight = sc->gfbc->fonts[page].height;
-
- /* Recompute adapter values... */
- adp->va_info.vi_height /= adp->va_info.vi_cheight;
- adp->va_info.vi_width /= adp->va_info.vi_cwidth;
-
- return(error);
-}
-
-int
-gfb_save_palette(video_adapter_t *adp, u_char *palette)
-{
- struct gfb_softc *sc;
- int error;
- int i;
-
- error = 0;
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
-#if 0
- /* If we have a RAMDAC-specific counterpart, use it... */
- if(sc->gfbc->ramdac_save_palette)
- error = sc->gfbc->ramdac_save_palette(adp, &sc->gfbc->palette);
-
- else
- /* Otherwise, use the built-in functionality... */
- error = sc->gfbc->builtin_save_palette(adp, &sc->gfbc->palette);
-#endif
-
- for(i = 0; i < sc->gfbc->palette.count; i++) {
- palette[(3 * i)] = sc->gfbc->palette.red[i];
- palette[(3 * i) + 1] = sc->gfbc->palette.green[i];
- palette[(3 * i) + 2] = sc->gfbc->palette.blue[i];
- }
- return(error);
-}
-
-int
-gfb_load_palette(video_adapter_t *adp, u_char *palette)
-{
- struct gfb_softc *sc;
- int error;
- int i;
-
- error = 0;
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- for(i = 0; i < sc->gfbc->palette.count; i++) {
- sc->gfbc->palette.red[i] = palette[(3 * i)];
- sc->gfbc->palette.green[i] = palette[(3 * i) + 1];
- sc->gfbc->palette.blue[i] = palette[(3 * i) + 2];
- }
-
- /* If we have a RAMDAC-specific counterpart, use it... */
- if(sc->gfbc->ramdac_load_palette)
- error = sc->gfbc->ramdac_load_palette(adp, &sc->gfbc->palette);
- else
- /* Otherwise, use the built-in functionality... */
- error = sc->gfbc->builtin_load_palette(adp, &sc->gfbc->palette);
-
- return(error);
-}
-
-int
-gfb_set_border(video_adapter_t *adp, int color)
-{
-
- return(ENODEV);
-}
-
-int
-gfb_save_state(video_adapter_t *adp, void *p, size_t size)
-{
- int i;
- u_int32_t *regs;
-
- regs = (u_int32_t *)p;
- regs[0] = size;
- for(i = 1; i <= size; i++)
- regs[i] = READ_GFB_REGISTER(adp, i);
- return(0);
-}
-
-int
-gfb_load_state(video_adapter_t *adp, void *p)
-{
- size_t size;
- int i;
- u_int32_t *regs;
-
- regs = (u_int32_t *)p;
- size = regs[0];
- for(i = 1; i <= size; i++)
- WRITE_GFB_REGISTER(adp, i, regs[i]);
- return(0);
-}
-
-int
-gfb_set_win_org(video_adapter_t *adp, off_t offset)
-{
-
- adp->va_window_orig = offset;
- return(0);
-}
-
-int
-gfb_read_hw_cursor(video_adapter_t *adp, int *col, int *row)
-{
- struct gfb_softc *sc;
- int error;
-
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- /* If we have a RAMDAC-specific counterpart, use it... */
- if(sc->gfbc->ramdac_read_hw_cursor)
- error = sc->gfbc->ramdac_read_hw_cursor(adp, col, row);
- else
- /* Otherwise, use the built-in functionality... */
- error = sc->gfbc->builtin_read_hw_cursor(adp, col, row);
-
- return(error);
-}
-
-int
-gfb_set_hw_cursor(adp, col, row)
- video_adapter_t *adp;
- int col;
- int row;
-{
- int error;
- struct gfb_softc *sc;
-
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- /* If we have a RAMDAC-specific counterpart, use it... */
- if(sc->gfbc->ramdac_set_hw_cursor)
- error = sc->gfbc->ramdac_set_hw_cursor(adp, col, row);
-
- /* Otherwise, use the built-in functionality... */
- else
- error = sc->gfbc->builtin_set_hw_cursor(adp, col, row);
- return(error);
-}
-
-int
-gfb_set_hw_cursor_shape(video_adapter_t *adp, int base, int height,
- int cellsize, int blink)
-{
- struct gfb_softc *sc;
- int error;
-
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- /* If we have a RAMDAC-specific counterpart, use it... */
- if(sc->gfbc->ramdac_set_hw_cursor_shape)
- error = sc->gfbc->ramdac_set_hw_cursor_shape(adp, base, height,
- cellsize, blink);
- else
- /* Otherwise, use the built-in functionality... */
- error = sc->gfbc->builtin_set_hw_cursor_shape(adp, base,
- height, cellsize, blink);
-
- return(error);
-}
-
-int
-gfb_mmap(video_adapter_t *adp, vm_offset_t offset, vm_offset_t *paddr, int prot)
-{
-
- /* XXX */
- if(offset > adp->va_window_size - PAGE_SIZE)
- return(ENXIO);
- *paddr = adp->va_info.vi_window + offset;
- return(0);
-}
-
-int
-gfb_ioctl(video_adapter_t *adp, u_long cmd, caddr_t arg)
-{
- struct gfb_softc *sc;
- int error;
-
- error = 0;
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- switch (cmd) {
- case FBIOPUTCMAP:
- /* FALLTHROUGH */
- case FBIO_GETWINORG:
- /* FALLTHROUGH */
- case FBIO_SETWINORG:
- /* FALLTHROUGH */
- case FBIO_SETDISPSTART:
- /* FALLTHROUGH */
- case FBIO_SETLINEWIDTH:
- /* FALLTHROUGH */
- case FBIO_GETPALETTE:
- /* FALLTHROUGH */
- case FBIOGTYPE:
- /* FALLTHROUGH */
- case FBIOGETCMAP:
- /* FALLTHROUGH */
- default:
- error = fb_commonioctl(adp, cmd, arg);
- }
- return(error);
-}
-
-int
-gfb_fill_rect(video_adapter_t *adp, int val, int x, int y, int cx, int cy)
-{
- int off;
-
- /*
- Just traverse the buffer, one pixel span at a time, setting
- each pixel to the block-color...
- */
- for(off = (x * y); off < ((x + cx) * (y + cy)); off++)
- (*vidsw[adp->va_index]->putp)(adp, off, 0x000007ff, 0xffffffff,
- sizeof(u_int32_t), 1, 0, 0);
-
- return(0);
-}
-
-int
-gfb_bitblt(video_adapter_t *adp, ...)
-{
- va_list args;
- vm_offset_t src, dst;
- int count, i;
- u_int32_t val;
-
- va_start(args, adp);
-
- src = (va_arg(args, vm_offset_t) + adp->va_window_orig) &
- 0x0000000000fffff8;
- dst = (va_arg(args, vm_offset_t) + adp->va_window_orig) &
- 0x0000000000fffff8;
- count = va_arg(args, int);
- for(i = 0; i < count; i++, src++, dst++) {
- val = READ_GFB_BUFFER(adp, src);
- WRITE_GFB_BUFFER(adp, dst, val);
- }
- va_end(args);
- return(0);
-}
-
-int
-/*gfb_clear(video_adapter_t *adp, int n)*/
-gfb_clear(video_adapter_t *adp)
-{
- int off;
-
-#if 0
- if(n == 0)
- return(0);
-#endif
-
- /*
- Just traverse the buffer, one 2K-pixel span at a time, clearing
- each pixel...
- */
- /* for(off = 0; off < (n * adp->va_line_width); off += (2 KB)) */
- for(off = 0; off < adp->va_window_size; off++)
- (*vidsw[adp->va_index]->putp)(adp, off, 0x000007ff, 0xffffffff,
- sizeof(u_int32_t), 1, 0, 0);
-
- return(0);
-}
-
-int
-gfb_diag(video_adapter_t *adp, int level)
-{
- video_info_t info;
- struct gfb_softc *sc;
- int error;
-
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- /* Just dump everything we know about the adapter to the screen... */
- fb_dump_adp_info(sc->driver_name, adp, level);
-
- /* Try to get the info on this adapter... */
- if(!(error = (*vidsw[adp->va_index]->get_info)(adp,
- adp->va_initial_mode, &info)))
- /*
- Just dump everything we know about the adapter's mode
- to the screen...
- */
- fb_dump_mode_info(sc->driver_name, adp, &info, level);
-
- return(error);
-}
-
-int
-gfb_save_cursor_palette(video_adapter_t *adp, u_char *palette)
-{
- struct gfb_softc *sc;
- int error, i;
-
- error = 0;
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
-#if 0
- /* If we have a RAMDAC-specific counterpart, use it... */
- if(sc->gfbc->ramdac_save_cursor_palette)
- error = sc->gfbc->ramdac_save_cursor_palette(adp,
- &sc->gfbc->cursor_palette);
-
- else
- /* Otherwise, use the built-in functionality... */
- error = sc->gfbc->builtin_save_cursor_palette(adp,
- &sc->gfbc->cursor_palette);
-#endif
-
- for(i = 0; i < sc->gfbc->cursor_palette.count; i++) {
- palette[(3 * i)] = sc->gfbc->cursor_palette.red[i];
- palette[(3 * i) + 1] = sc->gfbc->cursor_palette.green[i];
- palette[(3 * i) + 2] = sc->gfbc->cursor_palette.blue[i];
- }
- return(error);
-}
-
-int
-gfb_load_cursor_palette(video_adapter_t *adp, u_char *palette)
-{
- struct gfb_softc *sc;
- int error, i;
-
- error = 0;
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- for(i = 0; i < sc->gfbc->cursor_palette.count; i++) {
- sc->gfbc->cursor_palette.red[i] = palette[(3 * i)];
- sc->gfbc->cursor_palette.green[i] = palette[(3 * i) + 1];
- sc->gfbc->cursor_palette.blue[i] = palette[(3 * i) + 2];
- }
-
- /* If we have a RAMDAC-specific counterpart, use it... */
- if(sc->gfbc->ramdac_load_cursor_palette)
- error = sc->gfbc->ramdac_load_cursor_palette(adp,
- &sc->gfbc->cursor_palette);
- else
- /* Otherwise, use the built-in functionality... */
- error = sc->gfbc->builtin_load_cursor_palette(adp,
- &sc->gfbc->cursor_palette);
-
- return(error);
-}
-
-int
-gfb_copy(video_adapter_t *adp, vm_offset_t src, vm_offset_t dst, int n)
-{
- int error, num_pixels;
-
- if(n == 0)
- return(0);
- num_pixels = adp->va_info.vi_cheight * adp->va_line_width;
- error = (*vidsw[adp->va_index]->bitblt)(adp, src * num_pixels,
- dst * num_pixels, n * num_pixels);
- return(error);
-}
-
-int
-gfb_putp(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)
-{
- int i, j, k, num_shifts;
- u_int32_t _p, val[32];
-
- if(bpp < 1)
- return(-1);
-
- /*
- If we don't display bits right-to-left (little-bitian?),
- then perform a bit-swap on p...
- */
- if(bit_ltor) {
- num_shifts = 8 * size;
- for(i = 0, _p = 0; i < num_shifts; i++, p >>= 1) {
- _p <<= 1;
- _p |= (p & 0x00000001);
- }
- } else
- _p = p;
-
- switch(bpp) {
- /* Accelerate the simplest cases... */
- case 1:
- if((a & 0x00000001) == 0)
- val[0] = 0;
- else if(size <= 0)
- val[0] = 0;
- else if(size == 1)
- val[0] = _p & 0x000000ff;
- else if(size == 2)
- val[0] = _p & 0x0000ffff;
- else if(size == 3)
- val[0] = _p & 0x00ffffff;
- else if(size == 4)
- val[0] = _p & 0xffffffff;
- break;
-
- /* Only do the following if we are not a simple case... */
- case 8:
- if(size > 0) {
- a &= 0x000000ff;
- val[0] = 0;
- if(_p & 0x00000001) val[0] |= (a);
- if(_p & 0x00000002) val[0] |= (a << 8);
- if(_p & 0x00000004) val[0] |= (a << 16);
- if(_p & 0x00000008) val[0] |= (a << 24);
- val[1] = 0;
- if(_p & 0x00000010) val[1] |= (a);
- if(_p & 0x00000020) val[1] |= (a << 8);
- if(_p & 0x00000040) val[1] |= (a << 16);
- if(_p & 0x00000080) val[1] |= (a << 24);
- }
- if(size > 1) {
- val[2] = 0;
- if(_p & 0x00000100) val[2] |= (a);
- if(_p & 0x00000200) val[2] |= (a << 8);
- if(_p & 0x00000400) val[2] |= (a << 16);
- if(_p & 0x00000800) val[2] |= (a << 24);
- val[3] = 0;
- if(_p & 0x00001000) val[3] |= (a);
- if(_p & 0x00002000) val[3] |= (a << 8);
- if(_p & 0x00004000) val[3] |= (a << 16);
- if(_p & 0x00008000) val[3] |= (a << 24);
- }
- if(size > 2) {
- val[4] = 0;
- if(_p & 0x00010000) val[4] |= (a);
- if(_p & 0x00020000) val[4] |= (a << 8);
- if(_p & 0x00040000) val[4] |= (a << 16);
- if(_p & 0x00080000) val[4] |= (a << 24);
- val[5] = 0;
- if(_p & 0x00100000) val[5] |= (a);
- if(_p & 0x00200000) val[5] |= (a << 8);
- if(_p & 0x00400000) val[5] |= (a << 16);
- if(_p & 0x00800080) val[5] |= (a << 24);
- }
- if(size > 3) {
- val[6] = 0;
- if(_p & 0x01000000) val[6] |= (a);
- if(_p & 0x02000000) val[6] |= (a << 8);
- if(_p & 0x04000000) val[6] |= (a << 16);
- if(_p & 0x08000000) val[6] |= (a << 24);
- val[7] = 0;
- if(_p & 0x10000000) val[7] |= (a);
- if(_p & 0x20000000) val[7] |= (a << 8);
- if(_p & 0x40000000) val[7] |= (a << 16);
- if(_p & 0x80000000) val[7] |= (a << 24);
- }
- break;
- case 16:
- if(size > 0) {
- a &= 0x0000ffff;
- if(_p & 0x00000001) val[0] |= (a);
- if(_p & 0x00000002) val[0] |= (a << 16);
- if(_p & 0x00000004) val[1] |= (a);
- if(_p & 0x00000008) val[1] |= (a << 16);
- if(_p & 0x00000010) val[2] |= (a);
- if(_p & 0x00000020) val[2] |= (a << 16);
- if(_p & 0x00000040) val[3] |= (a);
- if(_p & 0x00000080) val[3] |= (a << 16);
- }
- if(size > 1) {
- if(_p & 0x00000100) val[4] |= (a);
- if(_p & 0x00000200) val[4] |= (a << 16);
- if(_p & 0x00000400) val[5] |= (a);
- if(_p & 0x00000800) val[5] |= (a << 16);
- if(_p & 0x00001000) val[6] |= (a);
- if(_p & 0x00002000) val[6] |= (a << 16);
- if(_p & 0x00004000) val[7] |= (a);
- if(_p & 0x00008000) val[7] |= (a << 16);
- }
- if(size > 2) {
- if(_p & 0x00010000) val[8] |= (a);
- if(_p & 0x00020000) val[8] |= (a << 16);
- if(_p & 0x00040000) val[9] |= (a);
- if(_p & 0x00080000) val[9] |= (a << 16);
- if(_p & 0x00100000) val[10] |= (a);
- if(_p & 0x00200000) val[10] |= (a << 16);
- if(_p & 0x00400000) val[11] |= (a);
- if(_p & 0x00800000) val[11] |= (a << 16);
- }
- if(size > 3) {
- if(_p & 0x01000000) val[12] |= (a);
- if(_p & 0x02000000) val[12] |= (a << 16);
- if(_p & 0x04000000) val[13] |= (a);
- if(_p & 0x08000000) val[13] |= (a << 16);
- if(_p & 0x10000000) val[14] |= (a);
- if(_p & 0x20000000) val[14] |= (a << 16);
- if(_p & 0x40000000) val[15] |= (a);
- if(_p & 0x80000000) val[15] |= (a << 16);
- }
- break;
- case 32:
- if(size > 0) {
- a &= 0xffffffff;
- if(_p & 0x00000001) val[0] = (a);
- if(_p & 0x00000002) val[1] = (a);
- if(_p & 0x00000004) val[2] = (a);
- if(_p & 0x00000008) val[3] = (a);
- if(_p & 0x00000010) val[4] = (a);
- if(_p & 0x00000020) val[5] = (a);
- if(_p & 0x00000040) val[6] = (a);
- if(_p & 0x00000080) val[7] = (a);
- }
- if(size > 1) {
- if(_p & 0x00000100) val[8] = (a);
- if(_p & 0x00000200) val[9] = (a);
- if(_p & 0x00000400) val[10] = (a);
- if(_p & 0x00000800) val[11] = (a);
- if(_p & 0x00001000) val[12] = (a);
- if(_p & 0x00002000) val[13] = (a);
- if(_p & 0x00004000) val[14] = (a);
- if(_p & 0x00008000) val[15] = (a);
- }
- if(size > 2) {
- if(_p & 0x00010000) val[16] = (a);
- if(_p & 0x00020000) val[17] = (a);
- if(_p & 0x00040000) val[18] = (a);
- if(_p & 0x00080000) val[19] = (a);
- if(_p & 0x00100000) val[20] = (a);
- if(_p & 0x00200000) val[21] = (a);
- if(_p & 0x00400000) val[22] = (a);
- if(_p & 0x00800000) val[23] = (a);
- }
- if(size > 3) {
- if(_p & 0x01000000) val[24] = (a);
- if(_p & 0x02000000) val[25] = (a);
- if(_p & 0x04000000) val[26] = (a);
- if(_p & 0x08000000) val[27] = (a);
- if(_p & 0x10000000) val[28] = (a);
- if(_p & 0x20000000) val[29] = (a);
- if(_p & 0x40000000) val[30] = (a);
- if(_p & 0x80000000) val[31] = (a);
- }
- break;
- default:
- break;
- }
- j = (bpp == 1) ? 1 : bpp * size / sizeof(u_int32_t);
-
- /*
- If we don't display bytes right-to-left (little-endian),
- then perform a byte-swap on p (we don't have to swap if
- bpp == 1 and val[0] == 0)...
- */
- if((byte_ltor) && (j > 1) && (val[j] != 0)) {
- for(i = 0; i < (j - i); i++) {
- _p = val[j - i];
- val[j - i] = val[i];
- val[i] = _p;
- }
- for(i = 0; i < j; i++) {
- _p = val[i];
- for(k = 0, val[i] = 0; k < sizeof(u_int32_t);
- k++, _p >>= 8) {
- val[i] <<= 8;
- val[i] |= (_p & 0xff);
- }
- }
- }
-
- for(i = 0; i < j; i++) {
- /* Write the pixel-row... */
- WRITE_GFB_BUFFER(adp, (off + i), val[i]);
- }
- return(0);
-}
-
-int
-gfb_putc(video_adapter_t *adp, vm_offset_t off, u_int8_t c, u_int8_t a)
-{
- vm_offset_t poff;
- struct gfb_softc *sc;
- int i, pixel_size;
- u_int row, col;
- u_int8_t *pixel;
-
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
- pixel_size = adp->va_info.vi_depth / 8;
-
- /* Get the start of the array of pixels rows for this character... */
- pixel = sc->gfbc->font + (c * adp->va_info.vi_cheight);
-
- /* Calculate the new cursor position... */
- row = off / adp->va_info.vi_width;
- col = off % adp->va_info.vi_width;
-
- /* Iterate over all the pixel rows for this character... */
- for(i = 0; i < adp->va_info.vi_cheight; i++) {
- /* Get the address of the character's pixel-row... */
- poff = ((col * adp->va_info.vi_cwidth * pixel_size) +
- (((row * adp->va_info.vi_cheight) + i) *
- adp->va_line_width)) / sizeof(u_int32_t);
-
- /* Now display the current pixel row... */
- (*vidsw[adp->va_index]->putp)(adp, poff, pixel[i], a,
- sizeof(u_int8_t), 1, 1, 0);
- }
- return(0);
-}
-
-int
-gfb_puts(video_adapter_t *adp, vm_offset_t off, u_int16_t *s, int len)
-{
- struct gfb_softc *sc;
- int i;
-
- sc = gfb_device_softcs[adp->va_model][adp->va_unit];
-
- /* If the string in empty, just return now... */
- if(len == 0)
- return(0);
-
- for(i = 0; i < len; i++)
- (*vidsw[adp->va_index]->putc)(adp, off + i, s[i] & 0x00ff,
- (s[i] & 0xff00) >> 8);
-
- return(0);
-}
-
-int
-gfb_putm(video_adapter_t *adp, int x, int y, u_int8_t *pixel_image,
- u_int32_t pixel_mask, int size, int width)
-{
- vm_offset_t poff;
- int i, pixel_size;
-
- pixel_size = adp->va_info.vi_depth / 8;
-
- /* Iterate over all the pixel rows for the mouse pointer... */
- for(i = 0; i < size; i++) {
- /* Get the address of the mouse pointer's pixel-row... */
- poff = ((x * pixel_size) + ((y + i) * adp->va_line_width)) /
- sizeof(u_int32_t);
- /* Now display the current pixel-row... */
- (*vidsw[adp->va_index]->putp)(adp, poff, pixel_image[i],
- pixel_mask, sizeof(u_int8_t), 1, 1, 0);
- }
-
- return(0);
-}
-
-int
-gfb_error(void)
-{
-
- return(0);
-}
diff --git a/sys/dev/fb/gfb.h b/sys/dev/fb/gfb.h
index 89ead2e..85ace52 100644
--- a/sys/dev/fb/gfb.h
+++ b/sys/dev/fb/gfb.h
@@ -32,141 +32,10 @@
#ifndef _FB_GFB_H_
#define _FB_GFB_H_
-#define MAX_NUM_GFB_CARDS 16
-
-#define GFB_UNIT(dev) minor(dev)
-#define GFB_MKMINOR(unit) (unit)
-#define BIT_REVERSE(byte) \
- ((((byte) & 0x01) << 7) | \
- (((byte) & 0x02) << 5) | \
- (((byte) & 0x04) << 3) | \
- (((byte) & 0x08) << 1) | \
- (((byte) & 0x10) >> 1) | \
- (((byte) & 0x20) >> 3) | \
- (((byte) & 0x40) >> 5) | \
- (((byte) & 0x80) >> 7))
-#define probe_done(adp) ((adp)->va_flags & V_ADP_PROBED)
-#define init_done(adp) ((adp)->va_flags & V_ADP_INITIALIZED)
-#define config_done(adp) ((adp)->va_flags & V_ADP_REGISTERED)
-
-struct gfb_softc;
-
-int gfb_error(void);
-vi_probe_t gfb_probe;
-vi_init_t gfb_init;
-
-vi_get_info_t gfb_get_info;
-/*vi_query_mode_t gfb_query_mode;*/
-vi_set_mode_t gfb_set_mode;
-vi_save_font_t gfb_save_font;
-vi_load_font_t gfb_load_font;
-vi_show_font_t gfb_show_font;
-vi_save_palette_t gfb_save_palette;
-vi_load_palette_t gfb_load_palette;
-vi_save_state_t gfb_save_state;
-vi_load_state_t gfb_load_state;
-vi_read_hw_cursor_t gfb_read_hw_cursor;
-vi_set_hw_cursor_t gfb_set_hw_cursor;
-vi_set_hw_cursor_shape_t gfb_set_hw_cursor_shape;
-vi_mmap_t gfb_mmap;
-vi_ioctl_t gfb_ioctl;
-vi_set_border_t gfb_set_border;
-vi_set_win_org_t gfb_set_win_org;
-vi_fill_rect_t gfb_fill_rect;
-vi_bitblt_t gfb_bitblt;
-vi_clear_t gfb_clear;
-vi_diag_t gfb_diag;
-vi_save_cursor_palette_t gfb_save_cursor_palette;
-vi_load_cursor_palette_t gfb_load_cursor_palette;
-vi_copy_t gfb_copy;
-vi_putp_t gfb_putp;
-vi_putc_t gfb_putc;
-vi_puts_t gfb_puts;
-vi_putm_t gfb_putm;
-
-typedef void gfb_ramdac_init_t(struct gfb_softc *);
-typedef u_int8_t gfb_ramdac_rd_t(struct gfb_softc *, u_int);
-typedef void gfb_ramdac_wr_t(struct gfb_softc *, u_int, u_int8_t);
-typedef void gfb_ramdac_intr_t(struct gfb_softc *);
-typedef int gfb_ramdac_save_palette_t(video_adapter_t *, video_color_palette_t *);
-typedef int gfb_ramdac_load_palette_t(video_adapter_t *, video_color_palette_t *);
-typedef int gfb_ramdac_save_cursor_palette_t(video_adapter_t *, struct fbcmap *);
-typedef int gfb_ramdac_load_cursor_palette_t(video_adapter_t *, struct fbcmap *);
-typedef int gfb_ramdac_read_hw_cursor_t(video_adapter_t *, int *, int *);
-typedef int gfb_ramdac_set_hw_cursor_t(video_adapter_t *, int, int);
-typedef int gfb_ramdac_set_hw_cursor_shape_t(video_adapter_t *, int, int, int, int);
-typedef int gfb_builtin_save_palette_t(video_adapter_t *, video_color_palette_t *);
-typedef int gfb_builtin_load_palette_t(video_adapter_t *, video_color_palette_t *);
-typedef int gfb_builtin_save_cursor_palette_t(video_adapter_t *, struct fbcmap *);
-typedef int gfb_builtin_load_cursor_palette_t(video_adapter_t *, struct fbcmap *);
-typedef int gfb_builtin_read_hw_cursor_t(video_adapter_t *, int *, int *);
-typedef int gfb_builtin_set_hw_cursor_t(video_adapter_t *, int, int);
-typedef int gfb_builtin_set_hw_cursor_shape_t(video_adapter_t *, int, int, int, int);
-
-struct monitor {
- u_int16_t cols; /* Columns */
- u_int16_t hfp; /* Horizontal Front Porch */
- u_int16_t hsync; /* Horizontal Sync */
- u_int16_t hbp; /* Horizontal Back Porch */
- u_int16_t rows; /* Rows */
- u_int16_t vfp; /* Vertical Front Porch */
- u_int16_t vsync; /* Vertical Sync */
- u_int16_t vbp; /* Vertical Back Porch */
- u_int32_t dotclock; /* Dot Clock */
-};
-
struct gfb_font {
int width;
int height;
u_char data[256 * 32];
};
-struct gfb_conf {
- char *name; /* name for this board type */
- char *ramdac_name; /* name for this RAMDAC */
- u_char *font;
- struct gfb_font fonts[4];
- video_color_palette_t palette;
- struct fbcmap cursor_palette;
- gfb_ramdac_init_t *ramdac_init;
- gfb_ramdac_rd_t *ramdac_rd;
- gfb_ramdac_wr_t *ramdac_wr;
- gfb_ramdac_intr_t *ramdac_intr;
- gfb_ramdac_save_palette_t *ramdac_save_palette;
- gfb_ramdac_load_palette_t *ramdac_load_palette;
- gfb_ramdac_save_cursor_palette_t *ramdac_save_cursor_palette;
- gfb_ramdac_load_cursor_palette_t *ramdac_load_cursor_palette;
- gfb_ramdac_read_hw_cursor_t *ramdac_read_hw_cursor;
- gfb_ramdac_set_hw_cursor_t *ramdac_set_hw_cursor;
- gfb_ramdac_set_hw_cursor_shape_t *ramdac_set_hw_cursor_shape;
- gfb_builtin_save_palette_t *builtin_save_palette;
- gfb_builtin_load_palette_t *builtin_load_palette;
- gfb_builtin_save_cursor_palette_t *builtin_save_cursor_palette;
- gfb_builtin_load_cursor_palette_t *builtin_load_cursor_palette;
- gfb_builtin_read_hw_cursor_t *builtin_read_hw_cursor;
- gfb_builtin_set_hw_cursor_t *builtin_set_hw_cursor;
- gfb_builtin_set_hw_cursor_shape_t *builtin_set_hw_cursor_shape;
-};
-
-struct video_adapter;
-struct genfb_softc;
-
-typedef struct gfb_softc {
- char *driver_name; /* name for this driver */
- struct video_adapter *adp;
- struct genfb_softc *gensc;
- struct gfb_conf *gfbc;
- bus_space_handle_t bhandle;
- bus_space_tag_t btag;
- bus_space_handle_t regs;
- void *intrhand;
- struct resource *irq;
- struct resource *res;
- u_int8_t rev; /* GFB revision */
- int type;
- int model;
- struct cdevsw *cdevsw;
- struct cdev *devt;
-} *gfb_softc_t;
-
#endif /* _FB_GFB_H_ */
OpenPOWER on IntegriCloud