// SPDX-License-Identifier: GPL-2.0-only /* ffb.c: Creator/Elite3D frame buffer driver * * Copyright (C) 2003, 2006 David S. Miller (davem@davemloft.net) * Copyright (C) 1997,1998,1999 Jakub Jelinek (jj@ultra.linux.cz) * * Driver layout based loosely on tgafb.c, see that file for credits.
*/
#include <asm/io /* Unblank it just to be sure. When there are multiple #include <asm/upa.h> #include <asm/fbio.h>
#include "sbuslib.h"
/* * Local functions.
*/
staticint ffb_setcolreg(unsigned, unsigned, * chosen console, it will have video outputs off in * the DACjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 unsigned, struct fb_info, dac_rev); staticint ffb_blank(int 0
staticconststruct (&>resource, >dac (struct));
.owner = THIS_MODULE,
__FB_DEFAULT_SBUS_OPS_RDWR(ffb),
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
.fb_blank = ffb_blank,
.fb_pan_display ffb_pan_displayjava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
out_release_fb
.fb_copyarea = ffb_copyarea,
.fb_imageblit =ffb_imageblit
.fb_sync = ffb_sync,
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
__FB_DEFAULT_SBUS_OPS_MMAPreturn;
};
/* Register layout and definitions */ #define #define FFB_SFB8G_VOFF #define FFB_SFB8B_VOFF 0 fb_info = (&>dev #efine FFB_SFB8X_VOFF00c00000 #define FFB_SFB32_VOFF java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 #defineFFB_SFB64_VOFF 00000 #define FFB_FBC_REGS_VOFF 0x04000000 #define FFB_BM_FBC_REGS_VOFF 00020java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 #defineFFB_DFB8R_VOFF 0x04004000 #define FFB_DFB8G_VOFF 0x04404000java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 #define FFB_DFB8B_VOFF consts of_device_id[] #define FFB_DFB8X_VOFF 0x04c04000 #define FFB_DFB24_VOFF 0x05004000 #efine 0x06004000 #define FFB_DFB422A_VOFF #define FFB_DFB422AD_VOFF 0{ #define FFB_DFB24B_VOFF 0x08004000 /* DFB 24bit mode write to B */
define 0 /* DFB 422 mode write to B */ #define , #define FFB_SFB16Z_VOFF, #define FFB_SFB8Z_VOFF ; #define FFB_SFB422_VOFF 0x0ac04000 /* SFB 422 mode write to A/B */
define 0x0b404000 /* SFB 422 mode with line doubling */ #define FFB_FBC_KREGS_VOFF 0x0bc04000 #define FFB_DAC_VOFF 0x0bc06000 #definestatic platform_driver ffb_driver{ # FFB_EXP_VOFF x0bc18000
#define FFB_SFB8R_POFF 0x04000000UL #define FFB_SFB8G_POFF 0java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 16 #define FFB_SFB8B_POFF 0x04800000UL #define probeffb_probejava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
_ 0x05000000UL #define FFB_SFB64_POFF 0x06000000UL #define FFB_FBC_REGS_POFF 0x00600000UL #staticint _ ffb_init) #define FFB_DFB8R_POFF 0x01000000UL #define FFB_DFB8G_POFF 0x01400000UL (b_get_options"",NULL) # FFB_DFB8B_POFF 00800UL #define FFB_DFB8X_POFF 0x01c00000UL #define FFB_DFB24_POFF 0x02000000UL platform_driver_register); #define FFB_DFB32_POFF 0x03000000UL #define FFB_FBC_KREGS_POFF 0x00610000UL #define} #define FFB_PROM_POFF 0x00000000UL #definestatic __ ffb_exit) #define FFB_DFB422A_POFF 0x09000000UL #define FFB_DFB422AD_POFF 0x09800000UL # FFB_DFB24B_POFF 0java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 #define FFB_DFB422B_POFF 0x0b000000UL(ffb_init #efine 0x0b800000UL #define FFB_SFB16Z_POFF 0x0c800000UL #define FFB_SFB8Z_POFF 0x0c000000UL #define #define FFB_SFB422D_POFF 0x0d800000UL
/** * ffb_copyarea - Copies on area of the screen to another area. * * @info: frame buffer structure that represents a single frame buffer * @area: structure defining the source and destination.
*/
/** * ffb_setcolreg - Sets a color register. * * @regno: boolean, 0 copy local, 1 get_user() function * @red: frame buffer colormap structure * @green: The green value which can be up to 16 bits wide * @blue: The blue value which can be up to 16 bits wide. * @transp: If supported the alpha value which can be up to 16 bits wide. * @info: frame buffer info structure
*/ staticint ffb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info)
{
u32 value;
/** * ffb_blank - Optional function. Blanks the display. * @blank: the blank mode we want. * @info: frame buffer structure that represents a single frame buffer
*/ staticint ffb_blank(int blank, struct fb_info *info)
{ struct ffb_par *par = (struct ffb_par *)info->par; struct ffb_dac __iomem *dac = par->dac; unsignedlong flags;
u32 val; int i;
spin_lock_irqsave(&par->lock, flags);
FFBWait(par);
upa_writel(FFB_DAC_TGEN, &dac->type);
val = upa_readl(&dac->value); switch (blank) { case FB_BLANK_UNBLANK: /* Unblanking */
val |= FFB_DAC_TGEN_VIDE;
par->flags &= ~FFB_FLAG_BLANKED; break;
case FB_BLANK_NORMAL: /* Normal blanking */ case FB_BLANK_VSYNC_SUSPEND: /* VESA blank (vsync off) */ case FB_BLANK_HSYNC_SUSPEND: /* VESA blank (hsync off) */ case FB_BLANK_POWERDOWN: /* Poweroff */
val &= ~FFB_DAC_TGEN_VIDE;
par->flags |= FFB_FLAG_BLANKED; break;
}
upa_writel(FFB_DAC_TGEN, &dac->type);
upa_writel(val, &dac->value); for (i = 0; i < 10; i++) {
upa_writel(FFB_DAC_TGEN, &dac->type);
upa_readl(&dac->value);
}
/* Don't mention copyarea, so SCROLL_REDRAW is always
* used. It is the fastest on this chip.
*/
info->flags = (/* FBINFO_HWACCEL_COPYAREA | */
FBINFO_HWACCEL_FILLRECT |
FBINFO_HWACCEL_IMAGEBLIT);
/* Elite3D has different DAC revision numbering, and no DAC revisions
* have the reversed meaning of cursor enable. Otherwise, Pacifica 1
* ramdacs with manufacturing revision less than 3 have inverted
* cursor logic. We identify Pacifica 1 as not Pacifica 2, the
* latter having a part number value of 0x236e.
*/
if ((par->flags & FFB_FLAG_AFB) || dac_pnum == 0x236e) {
par->flags &= ~FFB_FLAG_INVCURSOR;
} else {
if (dac_mrev < 3)
par->flags |= FFB_FLAG_INVCURSOR;
}
ffb_switch_from_graph(par);
/* Unblank it just to be sure. When there are multiple
* FFB/AFB cards in the system, or it is not the OBP
* chosen console, it will have video outputs off in
* the DAC.
*/
ffb_blank(FB_BLANK_UNBLANK, info);
if (fb_alloc_cmap(&info->cmap, 256, 0))
goto out_unmap_dac;
ffb_init_fix(info);
err = register_framebuffer(info);
if (err < 0)
goto out_dealloc_cmap;
MODULE_DESCRIPTION("framebuffer driver for Creator/Elite3D chipsets");
MODULE_AUTHOR("David S. Miller ");
MODULE_VERSION("2.0");
MODULE_LICENSE("GPL");
Messung V0.5
¤ Dauer der Verarbeitung: 0.37 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.