mirror of
https://github.com/openbsd/xenocara.git
synced 2025-12-08 18:28:43 +00:00
xf86-video-sunffb 1.2.0.
This commit is contained in:
20
driver/xf86-video-sunffb/configure
vendored
20
driver/xf86-video-sunffb/configure
vendored
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.59 for xf86-video-sunffb 1.1.0.
|
||||
# Generated by GNU Autoconf 2.59 for xf86-video-sunffb 1.2.0.
|
||||
#
|
||||
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
|
||||
#
|
||||
@@ -423,8 +423,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='xf86-video-sunffb'
|
||||
PACKAGE_TARNAME='xf86-video-sunffb'
|
||||
PACKAGE_VERSION='1.1.0'
|
||||
PACKAGE_STRING='xf86-video-sunffb 1.1.0'
|
||||
PACKAGE_VERSION='1.2.0'
|
||||
PACKAGE_STRING='xf86-video-sunffb 1.2.0'
|
||||
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
|
||||
|
||||
ac_unique_file="Makefile.am"
|
||||
@@ -982,7 +982,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures xf86-video-sunffb 1.1.0 to adapt to many kinds of systems.
|
||||
\`configure' configures xf86-video-sunffb 1.2.0 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1048,7 +1048,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of xf86-video-sunffb 1.1.0:";;
|
||||
short | recursive ) echo "Configuration of xf86-video-sunffb 1.2.0:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1202,7 +1202,7 @@ fi
|
||||
test -n "$ac_init_help" && exit 0
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
xf86-video-sunffb configure 1.1.0
|
||||
xf86-video-sunffb configure 1.2.0
|
||||
generated by GNU Autoconf 2.59
|
||||
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
@@ -1216,7 +1216,7 @@ cat >&5 <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by xf86-video-sunffb $as_me 1.1.0, which was
|
||||
It was created by xf86-video-sunffb $as_me 1.2.0, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -1819,7 +1819,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='xf86-video-sunffb'
|
||||
VERSION='1.1.0'
|
||||
VERSION='1.2.0'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
@@ -21263,7 +21263,7 @@ _ASBOX
|
||||
} >&5
|
||||
cat >&5 <<_CSEOF
|
||||
|
||||
This file was extended by xf86-video-sunffb $as_me 1.1.0, which was
|
||||
This file was extended by xf86-video-sunffb $as_me 1.2.0, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -21326,7 +21326,7 @@ _ACEOF
|
||||
|
||||
cat >>$CONFIG_STATUS <<_ACEOF
|
||||
ac_cs_version="\\
|
||||
xf86-video-sunffb config.status 1.1.0
|
||||
xf86-video-sunffb config.status 1.2.0
|
||||
configured by $0, generated by GNU Autoconf 2.59,
|
||||
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
AC_PREREQ(2.57)
|
||||
AC_INIT([xf86-video-sunffb],
|
||||
1.1.0,
|
||||
1.2.0,
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
|
||||
xf86-video-sunffb)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/sunffb.man,v 1.1 2001/01/24 00:06:30 dawes Exp $
|
||||
.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/sunffb.man,v 1.2 2001/01/27 18:20:54 dawes Exp $
|
||||
.\" shorthand for double quote that works everywhere.
|
||||
.ds q \N'34'
|
||||
.TH FFB __drivermansuffix__ __vendorversion__
|
||||
@@ -25,6 +25,6 @@ Please refer to __xconfigfile__(__filemansuffix__) for general configuration
|
||||
details. This section only covers configuration details specific to this
|
||||
driver.
|
||||
.SH "SEE ALSO"
|
||||
__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__)
|
||||
__xservername__(1), __xconfigfile__(__filemansuffix__), xorgconfig(1), Xserver(1), X(__miscmansuffix__)
|
||||
.SH AUTHORS
|
||||
Authors include: Jakub Jelinek <jakub@redhat.com>, David S. Miller <davem@redhat.com>, Michal Rehacek <majkl@iname.com>
|
||||
|
||||
@@ -49,9 +49,3 @@ sunffb_drv_la_SOURCES = \
|
||||
ffb_regs.h \
|
||||
ffb_wid.c \
|
||||
$(SPARC_ASM_SRC)
|
||||
|
||||
if DRI
|
||||
sunffb_drv_la_SOURCES += \
|
||||
ffb_dri.c \
|
||||
ffb_drishare.h
|
||||
endif
|
||||
|
||||
@@ -57,10 +57,6 @@ POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
@SPARC_TRUE@am__append_1 = -DUSE_VIS
|
||||
@DRI_TRUE@am__append_2 = \
|
||||
@DRI_TRUE@ ffb_dri.c \
|
||||
@DRI_TRUE@ ffb_drishare.h
|
||||
|
||||
subdir = src
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
@@ -83,12 +79,11 @@ sunffb_drv_la_LIBADD =
|
||||
am__sunffb_drv_la_SOURCES_DIST = ffb_accel.c ffb_attr.c ffb_cursor.c \
|
||||
ffb_dac.c ffb_dac.h ffb_ddc.c ffb_dga.c ffb_driver.c \
|
||||
ffb_fifo.h ffb.h ffb_loops.h ffb_rcache.h ffb_regs.h ffb_wid.c \
|
||||
ffb_asm.s VISmoveImage.s ffb_dri.c ffb_drishare.h
|
||||
ffb_asm.s VISmoveImage.s
|
||||
@SPARC_TRUE@am__objects_1 = ffb_asm.lo VISmoveImage.lo
|
||||
@DRI_TRUE@am__objects_2 = ffb_dri.lo
|
||||
am_sunffb_drv_la_OBJECTS = ffb_accel.lo ffb_attr.lo ffb_cursor.lo \
|
||||
ffb_dac.lo ffb_ddc.lo ffb_dga.lo ffb_driver.lo ffb_wid.lo \
|
||||
$(am__objects_1) $(am__objects_2)
|
||||
$(am__objects_1)
|
||||
sunffb_drv_la_OBJECTS = $(am_sunffb_drv_la_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
@@ -250,10 +245,23 @@ sunffb_drv_la_LTLIBRARIES = sunffb_drv.la
|
||||
sunffb_drv_la_LDFLAGS = -module -avoid-version
|
||||
sunffb_drv_ladir = @moduledir@/drivers
|
||||
@SPARC_TRUE@SPARC_ASM_SRC = ffb_asm.s VISmoveImage.s
|
||||
sunffb_drv_la_SOURCES = ffb_accel.c ffb_attr.c ffb_cursor.c ffb_dac.c \
|
||||
ffb_dac.h ffb_ddc.c ffb_dga.c ffb_driver.c ffb_fifo.h ffb.h \
|
||||
ffb_loops.h ffb_rcache.h ffb_regs.h ffb_wid.c $(SPARC_ASM_SRC) \
|
||||
$(am__append_2)
|
||||
sunffb_drv_la_SOURCES = \
|
||||
ffb_accel.c \
|
||||
ffb_attr.c \
|
||||
ffb_cursor.c \
|
||||
ffb_dac.c \
|
||||
ffb_dac.h \
|
||||
ffb_ddc.c \
|
||||
ffb_dga.c \
|
||||
ffb_driver.c \
|
||||
ffb_fifo.h \
|
||||
ffb.h \
|
||||
ffb_loops.h \
|
||||
ffb_rcache.h \
|
||||
ffb_regs.h \
|
||||
ffb_wid.c \
|
||||
$(SPARC_ASM_SRC)
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
@@ -329,7 +337,6 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffb_dac.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffb_ddc.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffb_dga.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffb_dri.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffb_driver.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffb_wid.Plo@am__quote@
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/VISmoveImage.s,v 1.1 2000/05/18 23:21:35 dawes Exp $ */
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/VISmoveImage.s,v 1.2 2000/05/23 04:47:43 dawes Exp $ */
|
||||
|
||||
|
||||
/* NOTE NOTE NOTE: All loads in these routines _MUST_ be 64-byte block
|
||||
|
||||
@@ -39,10 +39,6 @@
|
||||
#include "ffb_regs.h"
|
||||
#include "xf86sbusBus.h"
|
||||
#include "ffb_dac.h"
|
||||
#ifdef XF86DRI
|
||||
#include "xf86drm.h"
|
||||
#include "ffb_drishare.h"
|
||||
#endif
|
||||
#ifndef DPMS_SERVER
|
||||
#define DPMS_SERVER
|
||||
#endif /* DPMS_SERVER */
|
||||
@@ -97,14 +93,6 @@ typedef struct {
|
||||
unsigned int bits[32]; /* The stipple bits themselves */
|
||||
} CreatorStippleRec, *CreatorStipplePtr;
|
||||
|
||||
typedef struct {
|
||||
int type;
|
||||
unsigned int linepat;
|
||||
CreatorStipplePtr stipple;
|
||||
void (*PolySegment)(DrawablePtr, GCPtr, int, xSegment *);
|
||||
void (*Polylines)(DrawablePtr, GCPtr, int, int, DDXPointPtr);
|
||||
} CreatorPrivGCRec, *CreatorPrivGCPtr;
|
||||
|
||||
/* WID and framebuffer controls are a property of the
|
||||
* window.
|
||||
*/
|
||||
@@ -135,12 +123,6 @@ enum ffb_chip_type {
|
||||
afb_m6 /* FCS Elite3D, 6 float chips */
|
||||
};
|
||||
|
||||
#ifdef XF86DRI
|
||||
typedef struct {
|
||||
int index;
|
||||
} FFBConfigPrivRec, *FFBConfigPrivPtr;
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
unsigned short fifo_cache;
|
||||
unsigned short rp_active;
|
||||
@@ -221,16 +203,6 @@ typedef struct {
|
||||
void *I2C;
|
||||
struct ffb_dac_info dac_info;
|
||||
|
||||
#ifdef XF86DRI
|
||||
void *pDRIInfo;
|
||||
int numVisualConfigs;
|
||||
void *pVisualConfigs;
|
||||
FFBConfigPrivPtr pVisualConfigsPriv;
|
||||
int drmSubFD;
|
||||
Bool dri_enabled;
|
||||
ffb_dri_state_t *pFfbSarea;
|
||||
#endif
|
||||
|
||||
OptionInfoPtr Options;
|
||||
} FFBRec, *FFBPtr;
|
||||
|
||||
@@ -261,18 +233,10 @@ extern void FFBWidFree(FFBPtr, unsigned int);
|
||||
extern unsigned int FFBWidUnshare(FFBPtr, unsigned int);
|
||||
extern unsigned int FFBWidReshare(FFBPtr, unsigned int);
|
||||
extern void FFBWidChangeBuffer(FFBPtr, unsigned int, int);
|
||||
extern Bool FFBWidIsShared(FFBPtr pFfb, unsigned int wid);
|
||||
|
||||
/* Accelerated double-buffering. */
|
||||
extern Bool FFBDbePreInit(ScreenPtr);
|
||||
|
||||
#ifdef XF86DRI
|
||||
/* DRI support */
|
||||
extern Bool FFBDRIScreenInit(ScreenPtr);
|
||||
extern Bool FFBDRIFinishScreenInit(ScreenPtr);
|
||||
extern void FFBDRICloseScreen(ScreenPtr);
|
||||
#endif
|
||||
|
||||
/* The fastfill and pagefill buffer sizes change based upon
|
||||
* the resolution.
|
||||
*/
|
||||
@@ -290,24 +254,8 @@ extern struct fastfill_parms ffb_fastfill_parms[];
|
||||
|
||||
#define FFB_FFPARMS(__fpriv) (ffb_fastfill_parms[(__fpriv)->ffb_res])
|
||||
|
||||
extern int CreatorScreenPrivateIndex;
|
||||
extern int CreatorGCPrivateIndex;
|
||||
extern int CreatorWindowPrivateIndex;
|
||||
|
||||
#define GET_FFB_FROM_SCRN(p) ((FFBPtr)((p)->driverPrivate))
|
||||
|
||||
#define GET_FFB_FROM_SCREEN(s) \
|
||||
((FFBPtr)(s)->devPrivates[CreatorScreenPrivateIndex].ptr)
|
||||
|
||||
#define CreatorGetGCPrivate(g) \
|
||||
((CreatorPrivGCPtr) (g)->devPrivates [CreatorGCPrivateIndex].ptr)
|
||||
|
||||
#define CreatorGetWindowPrivate(w) \
|
||||
((CreatorPrivWinPtr) (w)->devPrivates[CreatorWindowPrivateIndex].ptr)
|
||||
|
||||
#define CreatorSetWindowPrivate(w,p) \
|
||||
((w)->devPrivates[CreatorWindowPrivateIndex].ptr = (pointer) p)
|
||||
|
||||
#undef DEBUG_FFB
|
||||
|
||||
#ifdef DEBUG_FFB
|
||||
|
||||
@@ -44,11 +44,6 @@
|
||||
#include "ffb_loops.h"
|
||||
#include "ffb_regs.h"
|
||||
|
||||
int CreatorScreenPrivateIndex;
|
||||
int CreatorGCPrivateIndex;
|
||||
int CreatorWindowPrivateIndex;
|
||||
int CreatorGeneration;
|
||||
|
||||
/* Indexed by ffb resolution enum. */
|
||||
struct fastfill_parms ffb_fastfill_parms[] = {
|
||||
/* fsmall, psmall, ffh, ffw, pfh, pfw */
|
||||
@@ -61,7 +56,8 @@ struct fastfill_parms ffb_fastfill_parms[] = {
|
||||
void
|
||||
CreatorVtChange (ScreenPtr pScreen, int enter)
|
||||
{
|
||||
FFBPtr pFfb = GET_FFB_FROM_SCREEN (pScreen);
|
||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||
FFBPtr pFfb = GET_FFB_FROM_SCRN (pScrn);
|
||||
ffb_fbcPtr ffb = pFfb->regs;
|
||||
|
||||
pFfb->rp_active = 1;
|
||||
@@ -847,22 +843,6 @@ Bool FFBAccelInit(ScreenPtr pScreen, FFBPtr pFfb)
|
||||
XAAInfoRecPtr infoRec;
|
||||
ffb_fbcPtr ffb = pFfb->regs;
|
||||
|
||||
if (serverGeneration != CreatorGeneration) {
|
||||
CreatorScreenPrivateIndex = AllocateScreenPrivateIndex ();
|
||||
if (CreatorScreenPrivateIndex == -1)
|
||||
return FALSE;
|
||||
CreatorGCPrivateIndex = AllocateGCPrivateIndex ();
|
||||
CreatorWindowPrivateIndex = AllocateWindowPrivateIndex ();
|
||||
CreatorGeneration = serverGeneration;
|
||||
}
|
||||
|
||||
if (!AllocateGCPrivate(pScreen, CreatorGCPrivateIndex, sizeof(CreatorPrivGCRec)))
|
||||
return FALSE;
|
||||
if (!AllocateWindowPrivate(pScreen, CreatorWindowPrivateIndex, 0))
|
||||
return FALSE;
|
||||
|
||||
pScreen->devPrivates[CreatorScreenPrivateIndex].ptr = pFfb;
|
||||
|
||||
pFfb->xaa_fbc = (FFB_FBC_WB_A | FFB_FBC_WM_COMBINED | FFB_FBC_RB_A |
|
||||
FFB_FBC_WE_FORCEON |
|
||||
FFB_FBC_SB_BOTH |
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
/* $XFree86$ */
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_asm.s,v 1.1 2000/05/18 23:21:35 dawes Exp $ */
|
||||
|
||||
.register %g2, #scratch
|
||||
.register %g3, #scratch
|
||||
|
||||
@@ -81,180 +81,3 @@ void __FFB_Attr_SFB_VAR(FFBPtr pFfb, unsigned int ppc, unsigned int ppc_mask, un
|
||||
ffb->rop = rop;
|
||||
ffb->pmask = pmask;
|
||||
}
|
||||
|
||||
#define NEED_PPC 0x00000001
|
||||
#define NEED_PMASK 0x00000002
|
||||
#define NEED_ROP 0x00000004
|
||||
#define NEED_DRAWOP 0x00000008
|
||||
#define NEED_FG 0x00000010
|
||||
#define NEED_BG 0x00000020
|
||||
#define NEED_FBC 0x00000040
|
||||
#define NEED_WID 0x00000080
|
||||
|
||||
void __FFB_Attr_GC(FFBPtr pFfb, GCPtr pGC, WindowPtr pWin, unsigned int ppc, int drawop)
|
||||
{
|
||||
ffb_fbcPtr ffb = pFfb->regs;
|
||||
unsigned int rop, need_mask, need_count;
|
||||
|
||||
need_mask = need_count = 0;
|
||||
if ((pFfb->ppc_cache & FFB_PPC_GCMASK) != ppc) {
|
||||
unsigned int newppc = pFfb->ppc_cache & ~FFB_PPC_GCMASK;
|
||||
|
||||
newppc |= (ppc & FFB_PPC_GCMASK);
|
||||
pFfb->ppc_cache = newppc;
|
||||
need_mask |= NEED_PPC;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
if (pFfb->pmask_cache != pGC->planemask) {
|
||||
pFfb->pmask_cache = pGC->planemask;
|
||||
need_mask |= NEED_PMASK;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
rop = (pGC->alu | FFB_ROP_EDIT_BIT)|(FFB_ROP_NEW<<8);
|
||||
if (pFfb->rop_cache != rop) {
|
||||
pFfb->rop_cache = rop;
|
||||
need_mask |= NEED_ROP;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
if (pFfb->drawop_cache != drawop) {
|
||||
pFfb->drawop_cache = drawop;
|
||||
need_mask |= NEED_DRAWOP;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
if (pFfb->fg_cache != pGC->fgPixel) {
|
||||
pFfb->fg_cache = pGC->fgPixel;
|
||||
need_mask |= NEED_FG;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
{
|
||||
CreatorPrivWinPtr WinPriv = CreatorGetWindowPrivate(pWin);
|
||||
unsigned int fbc = WinPriv->fbc_base;
|
||||
|
||||
fbc &= ~FFB_FBC_XE_MASK;
|
||||
fbc |= FFB_FBC_XE_OFF;
|
||||
|
||||
if (pFfb->fbc_cache != fbc) {
|
||||
pFfb->fbc_cache = fbc;
|
||||
need_mask |= NEED_FBC;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
}
|
||||
pFfb->rp_active = 1;
|
||||
|
||||
FFBLOG(("WRATTRS_GC: PPC[%08x:%08x] PMSK[%08x] ROP[%08x] "
|
||||
"DOP[%08x] FG[%08x] FBC[%08x]\n",
|
||||
pFfb->ppc_cache & FFB_PPC_GCMASK, FFB_PPC_GCMASK,
|
||||
pFfb->pmask_cache, pFfb->rop_cache,
|
||||
pFfb->drawop_cache, pFfb->fg_cache, pFfb->fbc_cache));
|
||||
|
||||
FFBFifo(pFfb, need_count);
|
||||
if (need_mask & NEED_PPC)
|
||||
ffb->ppc = (pFfb->ppc_cache & FFB_PPC_GCMASK);
|
||||
if (need_mask & NEED_PMASK)
|
||||
ffb->pmask = pFfb->pmask_cache;
|
||||
if (need_mask & NEED_ROP)
|
||||
ffb->rop = pFfb->rop_cache;
|
||||
if (need_mask & NEED_DRAWOP)
|
||||
ffb->drawop = pFfb->drawop_cache;
|
||||
if (need_mask & NEED_FG)
|
||||
ffb->fg = pFfb->fg_cache;
|
||||
if (need_mask & NEED_FBC)
|
||||
ffb->fbc = pFfb->fbc_cache;
|
||||
}
|
||||
|
||||
void __FFB_Attr_FastfillWin(FFBPtr pFfb, WindowPtr pWin,
|
||||
unsigned int ppc, unsigned int pixel)
|
||||
{
|
||||
ffb_fbcPtr ffb = pFfb->regs;
|
||||
unsigned int rop, need_mask, need_count;
|
||||
|
||||
need_mask = need_count = 0;
|
||||
if ((pFfb->ppc_cache & FFB_PPC_WINMASK) != ppc) {
|
||||
unsigned int newppc = pFfb->ppc_cache & ~FFB_PPC_WINMASK;
|
||||
|
||||
newppc |= (ppc & FFB_PPC_WINMASK);
|
||||
pFfb->ppc_cache = newppc;
|
||||
need_mask |= NEED_PPC;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
if (pFfb->pmask_cache != 0x00ffffff) {
|
||||
pFfb->pmask_cache = 0x00ffffff;
|
||||
need_mask |= NEED_PMASK;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
rop = FFB_ROP_NEW | (FFB_ROP_NEW<<8);
|
||||
if (pFfb->rop_cache != rop) {
|
||||
pFfb->rop_cache = rop;
|
||||
need_mask |= NEED_ROP;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
if (pFfb->drawop_cache != FFB_DRAWOP_FASTFILL) {
|
||||
pFfb->drawop_cache = FFB_DRAWOP_FASTFILL;
|
||||
need_mask |= NEED_DRAWOP;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
if (pFfb->fg_cache != pixel) {
|
||||
pFfb->fg_cache = pixel;
|
||||
need_mask |= NEED_FG;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
{
|
||||
CreatorPrivWinPtr pWinPriv = CreatorGetWindowPrivate(pWin);
|
||||
unsigned int fbc = pWinPriv->fbc_base;
|
||||
|
||||
if (pFfb->has_double_buffer) {
|
||||
fbc &= ~FFB_FBC_WB_MASK;
|
||||
fbc |= FFB_FBC_WB_AB;
|
||||
}
|
||||
fbc &= ~(FFB_FBC_XE_MASK | FFB_FBC_RGBE_MASK);
|
||||
fbc |= FFB_FBC_XE_ON | FFB_FBC_RGBE_ON;
|
||||
if (pFfb->ffb_res == ffb_res_high)
|
||||
fbc |= FFB_FBC_WB_B;
|
||||
|
||||
if (pFfb->fbc_cache != fbc) {
|
||||
pFfb->fbc_cache = fbc;
|
||||
need_mask |= NEED_FBC;
|
||||
need_count++;
|
||||
}
|
||||
|
||||
if (pFfb->wid_cache != pWinPriv->wid) {
|
||||
pFfb->wid_cache = pWinPriv->wid;
|
||||
need_mask |= NEED_WID;
|
||||
need_count++;
|
||||
}
|
||||
}
|
||||
|
||||
pFfb->rp_active = 1;
|
||||
|
||||
FFBLOG(("WRATTRS_GC: PPC[%08x:%08x] PMSK[%08x] ROP[%08x] DOP[%08x] FG[%08x] FBC[%08x] WID[%02x]\n",
|
||||
pFfb->ppc_cache & FFB_PPC_WINMASK, FFB_PPC_WINMASK,
|
||||
pFfb->pmask_cache, pFfb->rop_cache,
|
||||
pFfb->drawop_cache, pFfb->fg_cache, pFfb->fbc_cache, pFfb->wid_cache));
|
||||
|
||||
FFBFifo(pFfb, need_count);
|
||||
if (need_mask & NEED_PPC)
|
||||
ffb->ppc = (pFfb->ppc_cache & FFB_PPC_WINMASK);
|
||||
if (need_mask & NEED_PMASK)
|
||||
ffb->pmask = pFfb->pmask_cache;
|
||||
if (need_mask & NEED_ROP)
|
||||
ffb->rop = pFfb->rop_cache;
|
||||
if (need_mask & NEED_DRAWOP)
|
||||
ffb->drawop = pFfb->drawop_cache;
|
||||
if (need_mask & NEED_FG)
|
||||
ffb->fg = pFfb->fg_cache;
|
||||
if (need_mask & NEED_FBC)
|
||||
ffb->fbc = pFfb->fbc_cache;
|
||||
if (need_mask & NEED_WID)
|
||||
ffb->wid = pFfb->wid_cache;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_dac.h,v 1.1 2000/05/23 04:47:44 dawes Exp $ */
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_dac.h,v 1.2 2001/04/05 17:42:33 dawes Exp $ */
|
||||
|
||||
#ifndef _FFB_DAC_H
|
||||
#define _FFB_DAC_H
|
||||
|
||||
@@ -1,521 +0,0 @@
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_dri.c,v 1.8 2001/04/18 14:52:42 dawes Exp $
|
||||
* Acceleration for the Creator and Creator3D framebuffer - DRI/DRM support.
|
||||
*
|
||||
* Copyright (C) 2000 David S. Miller (davem@redhat.com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* DAVID MILLER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "xf86.h"
|
||||
#include "xf86_OSproc.h"
|
||||
#include "xf86Priv.h"
|
||||
|
||||
#include "xf86PciInfo.h"
|
||||
#include "xf86Pci.h"
|
||||
|
||||
#include "miline.h"
|
||||
|
||||
#include "GL/glxtokens.h"
|
||||
|
||||
#include "xf86drm.h"
|
||||
#include "sarea.h"
|
||||
#define _XF86DRI_SERVER_
|
||||
#include "dri.h"
|
||||
|
||||
#include "GL/glxint.h"
|
||||
|
||||
#include "ffb.h"
|
||||
#include "ffb_regs.h"
|
||||
#include "ffb_fifo.h"
|
||||
#include "ffb_rcache.h"
|
||||
|
||||
static char FFBKernelDriverName[] = "ffb";
|
||||
static char FFBClientDriverName[] = "ffb";
|
||||
|
||||
/* Forward declarations. */
|
||||
static Bool FFBDRICreateContext(ScreenPtr, VisualPtr, drm_context_t,
|
||||
void *, DRIContextType);
|
||||
static void FFBDRIDestroyContext(ScreenPtr, drm_context_t, DRIContextType);
|
||||
|
||||
static void FFBDRIInitBuffers(WindowPtr, RegionPtr, CARD32);
|
||||
static void FFBDRIMoveBuffers(WindowPtr, DDXPointRec, RegionPtr, CARD32);
|
||||
|
||||
static void FFBDRISetDrawableIndex(WindowPtr, CARD32);
|
||||
|
||||
/* XXX Why isn't this in a header somewhere? XXX */
|
||||
extern void GlxSetVisualConfigs(int nconfigs, __GLXvisualConfig *configs,
|
||||
void **configprivs);
|
||||
|
||||
static Bool
|
||||
FFBDRIInitVisualConfigs(ScreenPtr pScreen)
|
||||
{
|
||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||
FFBPtr pFfb = GET_FFB_FROM_SCRN(pScrn);
|
||||
__GLXvisualConfig *pConfigs;
|
||||
FFBConfigPrivPtr pFfbConfigs;
|
||||
FFBConfigPrivPtr *pFfbConfigPtrs;
|
||||
|
||||
pConfigs = (__GLXvisualConfig *)
|
||||
xcalloc(sizeof(__GLXvisualConfig), 1);
|
||||
if (!pConfigs)
|
||||
return FALSE;
|
||||
|
||||
pFfbConfigs = (FFBConfigPrivPtr)
|
||||
xcalloc(sizeof(FFBConfigPrivRec), 1);
|
||||
if (!pFfbConfigs) {
|
||||
xfree(pConfigs);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pFfbConfigPtrs = (FFBConfigPrivPtr *)
|
||||
xcalloc(sizeof(FFBConfigPrivPtr), 1);
|
||||
if (!pFfbConfigPtrs) {
|
||||
xfree(pConfigs);
|
||||
xfree(pFfbConfigs);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pFfbConfigPtrs[0] = &pFfbConfigs[0];
|
||||
|
||||
pConfigs->vid = -1;
|
||||
pConfigs->class = -1;
|
||||
pConfigs->rgba = TRUE;
|
||||
pConfigs->redSize = 8;
|
||||
pConfigs->greenSize = 8;
|
||||
pConfigs->blueSize = 8;
|
||||
pConfigs->alphaSize = 0;
|
||||
pConfigs->redMask = 0x000000ff;
|
||||
pConfigs->greenMask = 0x0000ff00;
|
||||
pConfigs->blueMask = 0x00ff0000;
|
||||
pConfigs->alphaMask = 0;
|
||||
pConfigs->accumRedSize = 0;
|
||||
pConfigs->accumGreenSize = 0;
|
||||
pConfigs->accumBlueSize = 0;
|
||||
pConfigs->accumAlphaSize = 0;
|
||||
pConfigs->doubleBuffer = TRUE;
|
||||
pConfigs->stereo = FALSE;
|
||||
pConfigs->bufferSize = 32;
|
||||
pConfigs->depthSize = 16;
|
||||
pConfigs->stencilSize = 0;
|
||||
pConfigs->auxBuffers = 0;
|
||||
pConfigs->level = 0;
|
||||
pConfigs->visualRating = GLX_NONE;
|
||||
pConfigs->transparentPixel = GLX_NONE;
|
||||
pConfigs->transparentRed = 0;
|
||||
pConfigs->transparentGreen = 0;
|
||||
pConfigs->transparentBlue = 0;
|
||||
pConfigs->transparentAlpha = 0;
|
||||
pConfigs->transparentIndex = 0;
|
||||
|
||||
pFfb->numVisualConfigs = 1;
|
||||
pFfb->pVisualConfigs = pConfigs;
|
||||
pFfb->pVisualConfigsPriv = pFfbConfigs;
|
||||
|
||||
GlxSetVisualConfigs(1, pConfigs, (void **)pFfbConfigPtrs);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
init_ffb_sarea(FFBPtr pFfb, ffb_dri_state_t *pFfbSarea)
|
||||
{
|
||||
int i;
|
||||
|
||||
pFfbSarea->flags = 0;
|
||||
|
||||
switch (pFfb->ffb_type) {
|
||||
case ffb2_prototype:
|
||||
case ffb2_vertical:
|
||||
case ffb2_vertical_plus:
|
||||
case ffb2_horizontal:
|
||||
case ffb2_horizontal_plus:
|
||||
pFfbSarea->flags |= FFB_DRI_FFB2;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
};
|
||||
|
||||
if (pFfb->ffb_type == ffb2_vertical_plus ||
|
||||
pFfb->ffb_type == ffb2_horizontal_plus)
|
||||
pFfbSarea->flags |= FFB_DRI_FFB2PLUS;
|
||||
|
||||
if (pFfb->dac_info.flags & FFB_DAC_PAC1)
|
||||
pFfbSarea->flags |= FFB_DRI_PAC1;
|
||||
|
||||
if (pFfb->dac_info.flags & FFB_DAC_PAC2)
|
||||
pFfbSarea->flags |= FFB_DRI_PAC2;
|
||||
|
||||
for (i = 0; i < FFB_DRI_NWIDS; i++)
|
||||
pFfbSarea->wid_table[i] = 0;
|
||||
}
|
||||
|
||||
#define FFB_DFB24_POFF 0x02000000UL
|
||||
#define FFB_DFB24_SIZE 0x01000000UL
|
||||
|
||||
#define FFB_FBC_REGS_POFF 0x00600000UL
|
||||
#define FFB_FBC_REGS_SIZE 0x00002000UL
|
||||
|
||||
#define FFB_DAC_POFF 0x00400000UL
|
||||
#define FFB_DAC_SIZE 0x00002000UL
|
||||
|
||||
#define FFB_SFB8R_POFF 0x04000000UL
|
||||
#define FFB_SFB8R_SIZE 0x00400000UL
|
||||
|
||||
#define FFB_SFB32_POFF 0x05000000UL
|
||||
#define FFB_SFB32_SIZE 0x01000000UL
|
||||
|
||||
#define FFB_SFB64_POFF 0x06000000UL
|
||||
#define FFB_SFB64_SIZE 0x02000000UL
|
||||
|
||||
Bool
|
||||
FFBDRIScreenInit(ScreenPtr pScreen)
|
||||
{
|
||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||
FFBPtr pFfb = GET_FFB_FROM_SCRN(pScrn);
|
||||
DRIInfoPtr pDRIInfo;
|
||||
FFBDRIPtr pFfbDRI;
|
||||
|
||||
/* Check that the GLX, DRI, and DRM modules have been loaded by testing
|
||||
* for canonical symbols in each module.
|
||||
*/
|
||||
if (!xf86LoaderCheckSymbol("GlxSetVisualConfigs"))
|
||||
return FALSE;
|
||||
if (!xf86LoaderCheckSymbol("drmAvailable"))
|
||||
return FALSE;
|
||||
if (!xf86LoaderCheckSymbol("DRIQueryVersion")) {
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"FFBDRIScreenInit failed (libdri.a too old)\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Check the DRI version */
|
||||
{
|
||||
int major, minor, patch;
|
||||
DRIQueryVersion(&major, &minor, &patch);
|
||||
if (major != DRIINFO_MAJOR_VERSION || minor < DRIINFO_MINOR_VERSION) {
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"[dri] FFBDRIScreenInit failed because of a version mismatch.\n"
|
||||
"[dri] libdri version is %d.%d.%d but version %d.%d.x is needed.\n"
|
||||
"[dri] Disabling DRI.\n",
|
||||
major, minor, patch,
|
||||
DRIINFO_MAJOR_VERSION, DRIINFO_MINOR_VERSION);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
pDRIInfo = DRICreateInfoRec();
|
||||
if (pDRIInfo == NULL)
|
||||
return FALSE;
|
||||
|
||||
pFfb->pDRIInfo = pDRIInfo;
|
||||
|
||||
pDRIInfo->drmDriverName = FFBKernelDriverName;
|
||||
pDRIInfo->clientDriverName = FFBClientDriverName;
|
||||
|
||||
pDRIInfo->ddxDriverMajorVersion = 0;
|
||||
pDRIInfo->ddxDriverMinorVersion = 1;
|
||||
pDRIInfo->ddxDriverPatchVersion = 1;
|
||||
|
||||
pDRIInfo->busIdString = xalloc(64); /* Freed in DRIDestroyInfoRec */
|
||||
sprintf(pDRIInfo->busIdString, "SBUS:%s", pFfb->psdp->device);
|
||||
|
||||
/* Dumb rendering port for now... */
|
||||
pDRIInfo->frameBufferPhysicalAddress = FFB_DFB24_POFF;
|
||||
pDRIInfo->frameBufferSize = FFB_DFB24_SIZE;
|
||||
pDRIInfo->frameBufferStride = (2048 * 4);
|
||||
|
||||
/* XXX */
|
||||
pDRIInfo->ddxDrawableTableEntry = 15;
|
||||
pDRIInfo->maxDrawableTableEntry = 15;
|
||||
pDRIInfo->SAREASize = (SAREA_MAX + (0x2000 - 1)) & ~(0x2000 - 1);
|
||||
|
||||
pFfbDRI = (FFBDRIPtr) xcalloc(sizeof(FFBDRIRec), 1);
|
||||
if (pFfbDRI == NULL) {
|
||||
DRIDestroyInfoRec(pFfb->pDRIInfo);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pDRIInfo->devPrivate = pFfbDRI;
|
||||
pDRIInfo->devPrivateSize = sizeof(*pFfbDRI);
|
||||
pDRIInfo->contextSize = 0; /* kernel does ctx swaps */
|
||||
|
||||
pDRIInfo->CreateContext = FFBDRICreateContext;
|
||||
pDRIInfo->DestroyContext = FFBDRIDestroyContext;
|
||||
pDRIInfo->InitBuffers = FFBDRIInitBuffers;
|
||||
pDRIInfo->MoveBuffers = FFBDRIMoveBuffers;
|
||||
pDRIInfo->SetDrawableIndex = FFBDRISetDrawableIndex;
|
||||
|
||||
/* Our InitBuffers depends heavily on this setting. */
|
||||
pDRIInfo->bufferRequests = DRI_3D_WINDOWS_ONLY;
|
||||
|
||||
pDRIInfo->createDummyCtx = TRUE;
|
||||
pDRIInfo->createDummyCtxPriv = FALSE;
|
||||
|
||||
if (!DRIScreenInit(pScreen, pDRIInfo, &(pFfb->drmSubFD))) {
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"[dri] DRIScreenInit failed. Disabling DRI.\n");
|
||||
DRIDestroyInfoRec(pFfb->pDRIInfo);
|
||||
xfree(pFfbDRI);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#if 000 /* XXX this should be cleaned up and used */
|
||||
/* Check the ffb DRM version */
|
||||
version = drmGetVersion(info->drmFD);
|
||||
if (version) {
|
||||
if (version->version_major != 1 ||
|
||||
version->version_minor < 0) {
|
||||
/* incompatible drm version */
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"[dri] FFBDRIScreenInit failed because of a version mismatch.\n"
|
||||
"[dri] ffb.o kernel module version is %d.%d.%d but version 1.0.x is needed.\n"
|
||||
"[dri] Disabling the DRI.\n",
|
||||
version->version_major,
|
||||
version->version_minor,
|
||||
version->version_patchlevel);
|
||||
drmFreeVersion(version);
|
||||
R128DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
}
|
||||
drmFreeVersion(version);
|
||||
}
|
||||
#endif
|
||||
|
||||
pFfb->pFfbSarea = DRIGetSAREAPrivate(pScreen);
|
||||
init_ffb_sarea(pFfb, pFfb->pFfbSarea);
|
||||
|
||||
/* Setup device specific direct rendering memory maps. */
|
||||
if (drmAddMap(pFfb->drmSubFD,
|
||||
FFB_FBC_REGS_POFF, FFB_FBC_REGS_SIZE,
|
||||
DRM_REGISTERS, 0, &pFfbDRI->hFbcRegs) < 0) {
|
||||
DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
}
|
||||
pFfbDRI->sFbcRegs = FFB_FBC_REGS_SIZE;
|
||||
|
||||
xf86DrvMsg(pScreen->myNum, X_INFO,
|
||||
"[drm] FBC Register handle = 0x%08x\n",
|
||||
pFfbDRI->hFbcRegs);
|
||||
|
||||
if (drmAddMap(pFfb->drmSubFD,
|
||||
FFB_DAC_POFF, FFB_DAC_SIZE,
|
||||
DRM_REGISTERS, 0, &pFfbDRI->hDacRegs) < 0) {
|
||||
DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
}
|
||||
pFfbDRI->sDacRegs = FFB_DAC_SIZE;
|
||||
|
||||
xf86DrvMsg(pScreen->myNum, X_INFO,
|
||||
"[drm] DAC Register handle = 0x%08x\n",
|
||||
pFfbDRI->hDacRegs);
|
||||
|
||||
/* Now add maps for the "Smart" views of the framebuffer. */
|
||||
if (drmAddMap(pFfb->drmSubFD,
|
||||
FFB_SFB8R_POFF, FFB_SFB8R_SIZE,
|
||||
DRM_REGISTERS, 0, &pFfbDRI->hSfb8r) < 0) {
|
||||
DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
}
|
||||
pFfbDRI->sSfb8r = FFB_SFB8R_SIZE;
|
||||
|
||||
xf86DrvMsg(pScreen->myNum, X_INFO,
|
||||
"[drm] SFB8R handle = 0x%08x\n",
|
||||
pFfbDRI->hSfb8r);
|
||||
|
||||
if (drmAddMap(pFfb->drmSubFD,
|
||||
FFB_SFB32_POFF, FFB_SFB32_SIZE,
|
||||
DRM_REGISTERS, 0, &pFfbDRI->hSfb32) < 0) {
|
||||
DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
}
|
||||
pFfbDRI->sSfb32 = FFB_SFB32_SIZE;
|
||||
|
||||
xf86DrvMsg(pScreen->myNum, X_INFO,
|
||||
"[drm] SFB32 handle = 0x%08x\n",
|
||||
pFfbDRI->hSfb32);
|
||||
|
||||
if (drmAddMap(pFfb->drmSubFD,
|
||||
FFB_SFB64_POFF, FFB_SFB64_SIZE,
|
||||
DRM_REGISTERS, 0, &pFfbDRI->hSfb64) < 0) {
|
||||
DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
}
|
||||
pFfbDRI->sSfb64 = FFB_SFB64_SIZE;
|
||||
|
||||
xf86DrvMsg(pScreen->myNum, X_INFO,
|
||||
"[drm] SFB64 handle = 0x%08x\n",
|
||||
pFfbDRI->hSfb64);
|
||||
|
||||
/* Setup visual configurations. */
|
||||
if (!FFBDRIInitVisualConfigs(pScreen)) {
|
||||
DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"[drm] Visual configs initialized\n");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
FFBDRICloseScreen(ScreenPtr pScreen)
|
||||
{
|
||||
FFBPtr pFfb = GET_FFB_FROM_SCREEN(pScreen);
|
||||
|
||||
DRICloseScreen(pScreen);
|
||||
|
||||
if (pFfb->pDRIInfo) {
|
||||
DRIInfoPtr pDRIInfo = pFfb->pDRIInfo;
|
||||
|
||||
if (pDRIInfo->devPrivate)
|
||||
xfree(pDRIInfo->devPrivate);
|
||||
DRIDestroyInfoRec(pDRIInfo);
|
||||
pFfb->pDRIInfo = NULL;
|
||||
}
|
||||
|
||||
if (pFfb->pVisualConfigs) {
|
||||
xfree(pFfb->pVisualConfigs);
|
||||
pFfb->pVisualConfigs = NULL;
|
||||
}
|
||||
if (pFfb->pVisualConfigsPriv) {
|
||||
xfree(pFfb->pVisualConfigsPriv);
|
||||
pFfb->pVisualConfigsPriv = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static Bool
|
||||
FFBDRICreateContext(ScreenPtr pScreen, VisualPtr visual, drm_context_t hwContext,
|
||||
void *pVisualConfigPriv, DRIContextType context)
|
||||
{
|
||||
/* Nothing to do... */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
FFBDRIDestroyContext(ScreenPtr pScreen, drm_context_t hwContext, DRIContextType context)
|
||||
{
|
||||
/* Nothing to do... */
|
||||
}
|
||||
|
||||
Bool
|
||||
FFBDRIFinishScreenInit(ScreenPtr pScreen)
|
||||
{
|
||||
FFBPtr pFfb = GET_FFB_FROM_SCREEN(pScreen);
|
||||
DRIInfoPtr pDRIInfo = pFfb->pDRIInfo;
|
||||
FFBDRIPtr pFfbDRI = (FFBDRIPtr) pDRIInfo->devPrivate;
|
||||
int i;
|
||||
|
||||
/* This belongs in the kernel. I'm sorry, the rest
|
||||
* of the current DRI switching mechanisms just suck.
|
||||
*/
|
||||
pDRIInfo->driverSwapMethod = DRI_KERNEL_SWAP;
|
||||
|
||||
/* Copy over the fast/page filling parameters now that
|
||||
* acceleration has been fully setup.
|
||||
*/
|
||||
pFfbDRI->disable_pagefill = pFfb->disable_pagefill;
|
||||
pFfbDRI->fastfill_small_area = FFB_FFPARMS(pFfb).fastfill_small_area;
|
||||
pFfbDRI->pagefill_small_area = FFB_FFPARMS(pFfb).pagefill_small_area;
|
||||
pFfbDRI->fastfill_height = FFB_FFPARMS(pFfb).fastfill_height;
|
||||
pFfbDRI->fastfill_width = FFB_FFPARMS(pFfb).fastfill_width;
|
||||
pFfbDRI->pagefill_height = FFB_FFPARMS(pFfb).pagefill_height;
|
||||
pFfbDRI->pagefill_width = FFB_FFPARMS(pFfb).pagefill_width;
|
||||
for (i = 0; i < 0x800; i++)
|
||||
pFfbDRI->Pf_AlignTab[i] = pFfb->Pf_AlignTab[i];
|
||||
|
||||
return DRIFinishScreenInit(pScreen);
|
||||
}
|
||||
|
||||
static void
|
||||
FFBDRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 index)
|
||||
{
|
||||
ScreenPtr pScreen = pWin->drawable.pScreen;
|
||||
FFBPtr pFfb = GET_FFB_FROM_SCREEN(pScreen);
|
||||
CreatorPrivWinPtr pFfbPrivWin = CreatorGetWindowPrivate(pWin);
|
||||
ffb_fbcPtr ffb = pFfb->regs;
|
||||
unsigned int fbc;
|
||||
BoxPtr pBox;
|
||||
int nBox;
|
||||
|
||||
fbc = pFfbPrivWin->fbc_base;
|
||||
fbc = (fbc & ~FFB_FBC_WB_MASK) | FFB_FBC_WB_AB;
|
||||
fbc = (fbc & ~FFB_FBC_XE_MASK) | FFB_FBC_XE_ON;
|
||||
fbc = (fbc & ~FFB_FBC_RGBE_MASK) | FFB_FBC_RGBE_OFF;
|
||||
|
||||
pBox = REGION_RECTS(prgn);
|
||||
nBox = (int) REGION_NUM_RECTS(prgn);
|
||||
FFB_WRITE_ROP(pFfb, ffb, (FFB_ROP_NEW | (FFB_ROP_NEW << 8)));
|
||||
FFB_WRITE_PPC(pFfb, ffb,
|
||||
(FFB_PPC_APE_DISABLE | FFB_PPC_CS_CONST | FFB_PPC_XS_WID),
|
||||
(FFB_PPC_APE_MASK | FFB_PPC_CS_MASK | FFB_PPC_XS_MASK));
|
||||
FFB_WRITE_PMASK(pFfb, ffb, ~0);
|
||||
FFB_WRITE_DRAWOP(pFfb, ffb, FFB_DRAWOP_RECTANGLE);
|
||||
FFB_WRITE_FBC(pFfb, ffb, fbc);
|
||||
FFB_WRITE_WID(pFfb, ffb, FFB_WID_WIN(pWin));
|
||||
|
||||
while(nBox--) {
|
||||
register int x, y, w, h;
|
||||
|
||||
x = pBox->x1;
|
||||
y = pBox->y1;
|
||||
w = (pBox->x2 - x);
|
||||
h = (pBox->y2 - y);
|
||||
FFBFifo(pFfb, 4);
|
||||
FFB_WRITE64(&ffb->by, y, x);
|
||||
FFB_WRITE64_2(&ffb->bh, h, w);
|
||||
pBox++;
|
||||
}
|
||||
pFfb->rp_active = 1;
|
||||
FFBSync(pFfb, ffb);
|
||||
}
|
||||
|
||||
static void
|
||||
FFBDRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
|
||||
RegionPtr prgnSrc, CARD32 index)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
FFBDRISetDrawableIndex(WindowPtr pWin, CARD32 index)
|
||||
{
|
||||
ScreenPtr pScreen = pWin->drawable.pScreen;
|
||||
FFBPtr pFfb = GET_FFB_FROM_SCREEN(pScreen);
|
||||
CreatorPrivWinPtr pFfbPrivWin = CreatorGetWindowPrivate(pWin);
|
||||
unsigned int wid;
|
||||
|
||||
if (FFBWidIsShared(pFfb, pFfbPrivWin->wid)) {
|
||||
wid = FFBWidUnshare(pFfb, pFfbPrivWin->wid);
|
||||
if (wid == (unsigned int) -1)
|
||||
return;
|
||||
|
||||
ErrorF("FFB: Allocated WID %x for DRI window.\n", wid);
|
||||
pFfbPrivWin->wid = wid;
|
||||
|
||||
/* Now update the SAREA. */
|
||||
pFfb->pFfbSarea->wid_table[index] = wid;
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
/* $XFree86$ */
|
||||
|
||||
#ifndef _FFB_DRISHARE_H
|
||||
#define _FFB_DRISHARE_H
|
||||
|
||||
typedef struct ffb_dri_state {
|
||||
int flags;
|
||||
#define FFB_DRI_FFB2 0x00000001
|
||||
#define FFB_DRI_FFB2PLUS 0x00000002
|
||||
#define FFB_DRI_PAC1 0x00000004
|
||||
#define FFB_DRI_PAC2 0x00000008
|
||||
|
||||
/* Indexed by DRI drawable id. */
|
||||
#define FFB_DRI_NWIDS 64
|
||||
unsigned int wid_table[FFB_DRI_NWIDS];
|
||||
} ffb_dri_state_t;
|
||||
|
||||
#define FFB_DRISHARE(SAREA) \
|
||||
((ffb_dri_state_t *) (((char *)(SAREA)) + sizeof(drm_sarea_t)))
|
||||
|
||||
typedef struct {
|
||||
drm_handle_t hFbcRegs;
|
||||
drmSize sFbcRegs;
|
||||
|
||||
drm_handle_t hDacRegs;
|
||||
drmSize sDacRegs;
|
||||
|
||||
drm_handle_t hSfb8r;
|
||||
drmSize sSfb8r;
|
||||
|
||||
drm_handle_t hSfb32;
|
||||
drmSize sSfb32;
|
||||
|
||||
drm_handle_t hSfb64;
|
||||
drmSize sSfb64;
|
||||
|
||||
/* Fastfill/Pagefill parameters. */
|
||||
unsigned char disable_pagefill;
|
||||
int fastfill_small_area;
|
||||
int pagefill_small_area;
|
||||
int fastfill_height;
|
||||
int fastfill_width;
|
||||
int pagefill_height;
|
||||
int pagefill_width;
|
||||
short Pf_AlignTab[0x800];
|
||||
} FFBDRIRec, *FFBDRIPtr;
|
||||
|
||||
#endif /* !(_FFB_DRISHARE_H) */
|
||||
@@ -20,7 +20,6 @@
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_driver.c,v 1.11 2002/12/06 02:44:04 tsi Exp $ */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
@@ -30,7 +29,6 @@
|
||||
|
||||
#include "xf86.h"
|
||||
#include "xf86_OSproc.h"
|
||||
#include "xf86Version.h"
|
||||
#include "mipointer.h"
|
||||
#include "mibstore.h"
|
||||
#include "micmap.h"
|
||||
@@ -70,9 +68,9 @@ void FFBSync(ScrnInfoPtr pScrn);
|
||||
#define FFB_VERSION 4000
|
||||
#define FFB_NAME "SUNFFB"
|
||||
#define FFB_DRIVER_NAME "sunffb"
|
||||
#define FFB_MAJOR_VERSION 1
|
||||
#define FFB_MINOR_VERSION 1
|
||||
#define FFB_PATCHLEVEL 0
|
||||
#define FFB_MAJOR_VERSION PACKAGE_VERSION_MAJOR
|
||||
#define FFB_MINOR_VERSION PACKAGE_VERSION_MINOR
|
||||
#define FFB_PATCHLEVEL PACKAGE_VERSION_PATCHLEVEL
|
||||
|
||||
/*
|
||||
* This contains the functions needed by the server after loading the driver
|
||||
@@ -432,22 +430,6 @@ FFBPreInit(ScrnInfoPtr pScrn, int flags)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*#ifdef XF86DRI*/
|
||||
/*
|
||||
* Loading this automatically isn't compatible
|
||||
* to the behavior of other drivers
|
||||
*/
|
||||
if (xf86LoadSubModule(pScrn, "drm") == NULL) {
|
||||
FFBFreeRec(pScrn);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (xf86LoadSubModule(pScrn, "dri") == NULL) {
|
||||
FFBFreeRec(pScrn);
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
set up clock and mode stuff
|
||||
@@ -740,21 +722,6 @@ FFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
||||
if (!miSetPixmapDepths())
|
||||
return FALSE;
|
||||
|
||||
#if 0 /*def XF86DRI*/
|
||||
if (pFfb->ffb_type != afb_m3 && pFfb->ffb_type != afb_m6 &&
|
||||
pFfb->NoAccel == FALSE) {
|
||||
pFfb->dri_enabled = FFBDRIScreenInit(pScreen);
|
||||
if (pFfb->dri_enabled == TRUE)
|
||||
xf86Msg(X_INFO, "%s: DRM initialized\n",
|
||||
pFfb->psdp->device);
|
||||
else
|
||||
xf86Msg(X_INFO, "%s: DRM setup failed\n",
|
||||
pFfb->psdp->device);
|
||||
} else {
|
||||
pFfb->dri_enabled = FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Call the framebuffer layer's ScreenInit function, and fill in other
|
||||
* pScreen fields.
|
||||
@@ -832,21 +799,6 @@ FFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
||||
if (!pFfb->NoAccel)
|
||||
FFB_InitDGA(pScreen);
|
||||
|
||||
#if 0 /*def XF86DRI*/
|
||||
if (pFfb->dri_enabled) {
|
||||
/* Now that mi, fb, drm and others have done their thing,
|
||||
* complete the DRI setup.
|
||||
*/
|
||||
pFfb->dri_enabled = FFBDRIFinishScreenInit(pScreen);
|
||||
if (pFfb->dri_enabled)
|
||||
xf86Msg(X_INFO, "%s: DRM finish setup complete\n",
|
||||
pFfb->psdp->device);
|
||||
else
|
||||
xf86Msg(X_INFO, "%s: DRM finish setup failed\n",
|
||||
pFfb->psdp->device);
|
||||
}
|
||||
#endif
|
||||
|
||||
xf86DPMSInit(pScreen, FFBDPMSSet, 0);
|
||||
|
||||
pFfb->CloseScreen = pScreen->CloseScreen;
|
||||
@@ -948,11 +900,6 @@ FFBCloseScreen(int scrnIndex, ScreenPtr pScreen)
|
||||
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
|
||||
FFBPtr pFfb = GET_FFB_FROM_SCRN(pScrn);
|
||||
|
||||
#if 0 /*def XF86DRI*/
|
||||
if (pFfb->dri_enabled)
|
||||
FFBDRICloseScreen(pScreen);
|
||||
#endif
|
||||
|
||||
/* Restore kernel ramdac state before we unmap registers. */
|
||||
FFBDacFini(pFfb);
|
||||
|
||||
@@ -1010,7 +957,9 @@ FFBSaveScreen(ScreenPtr pScreen, int mode)
|
||||
done in "ffb_dac.c" `for aesthetic reasons.'
|
||||
*/
|
||||
{
|
||||
return FFBDacSaveScreen(GET_FFB_FROM_SCREEN(pScreen), mode);
|
||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||
|
||||
return FFBDacSaveScreen(GET_FFB_FROM_SCRN(pScrn), mode);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_fifo.h,v 1.1 2000/05/18 23:21:36 dawes Exp $ */
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_fifo.h,v 1.2 2000/05/23 04:47:44 dawes Exp $ */
|
||||
|
||||
#ifndef FFBFIFO_H
|
||||
#define FFBFIFO_H
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
* IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/* $XFree86$ */
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_loops.h,v 1.1 2000/05/18 23:21:37 dawes Exp $ */
|
||||
|
||||
#ifndef FFBLOOPS_H
|
||||
#define FFBLOOPS_H
|
||||
|
||||
@@ -147,57 +147,8 @@ extern void __FFB_Attr_Raw(FFBPtr pFfb,
|
||||
|
||||
#define FFB_PPC_GCMASK (FFB_PPC_APE_MASK | FFB_PPC_CS_MASK)
|
||||
|
||||
/* This is for loading the FFB attributes for the case where
|
||||
* where most of the values come directly from the graphics
|
||||
* context and only the PPC and DRAWOP are variable.
|
||||
*/
|
||||
extern void __FFB_Attr_GC(FFBPtr pFfb, GCPtr pGC, WindowPtr pWin,
|
||||
unsigned int ppc, int drawop);
|
||||
|
||||
#define FFB_ATTR_GC(__fpriv, __pgc, __pwin, __ppc, __drawop) \
|
||||
do { CreatorPrivWinPtr __winpriv = CreatorGetWindowPrivate(__pwin); \
|
||||
unsigned int __rop = ((__pgc)->alu | FFB_ROP_EDIT_BIT); \
|
||||
unsigned int __fbc = ((__winpriv)->fbc_base); \
|
||||
__fbc &= ~FFB_FBC_XE_MASK; \
|
||||
__fbc |= FFB_FBC_XE_OFF; \
|
||||
__rop |= (FFB_ROP_NEW << 8); \
|
||||
if ((((__fpriv)->ppc_cache & FFB_PPC_GCMASK) != (__ppc))|| \
|
||||
((__fpriv)->pmask_cache != ((__pgc)->planemask)) || \
|
||||
((__fpriv)->rop_cache != (__rop)) || \
|
||||
((__fpriv)->drawop_cache != (__drawop)) || \
|
||||
((__fpriv)->fg_cache != ((__pgc)->fgPixel)) || \
|
||||
((__fpriv)->fbc_cache != __fbc)) \
|
||||
__FFB_Attr_GC(__fpriv, __pgc, __pwin, __ppc, __drawop); \
|
||||
} while(0)
|
||||
|
||||
#define FFB_PPC_WINMASK (FFB_PPC_APE_MASK | FFB_PPC_CS_MASK | FFB_PPC_XS_MASK)
|
||||
|
||||
extern void __FFB_Attr_FastfillWin(FFBPtr pFfb, WindowPtr pWin,
|
||||
unsigned int ppc, unsigned int pixel);
|
||||
|
||||
#define FFB_ATTR_FFWIN(__fpriv, __pwin, __ppc, __pixel) \
|
||||
do { CreatorPrivWinPtr __winpriv = CreatorGetWindowPrivate(__pwin); \
|
||||
unsigned int ___ppc = (__ppc) | FFB_PPC_XS_WID; \
|
||||
unsigned int __fbc = (__winpriv)->fbc_base; \
|
||||
unsigned int __rop = (FFB_ROP_NEW|(FFB_ROP_NEW<<8)); \
|
||||
if((__fpriv)->has_double_buffer) { \
|
||||
__fbc &= ~FFB_FBC_WB_MASK; \
|
||||
__fbc |= FFB_FBC_WB_AB; \
|
||||
} \
|
||||
__fbc &= ~(FFB_FBC_XE_MASK | FFB_FBC_RGBE_MASK); \
|
||||
__fbc |= FFB_FBC_XE_ON | FFB_FBC_RGBE_ON; \
|
||||
if (pFfb->ffb_res == ffb_res_high) \
|
||||
__fbc |= FFB_FBC_WB_B; \
|
||||
if ((((__fpriv)->ppc_cache & FFB_PPC_WINMASK) != (___ppc))|| \
|
||||
((__fpriv)->pmask_cache != 0x00ffffff) || \
|
||||
((__fpriv)->rop_cache!= __rop) || \
|
||||
((__fpriv)->drawop_cache != FFB_DRAWOP_FASTFILL) || \
|
||||
((__fpriv)->fg_cache != (__pixel)) || \
|
||||
((__fpriv)->fbc_cache != __fbc) || \
|
||||
((__fpriv)->wid_cache != ((__winpriv)->wid))) \
|
||||
__FFB_Attr_FastfillWin(__fpriv, __pwin, ___ppc, __pixel);\
|
||||
} while (0)
|
||||
|
||||
/* We have to be careful when copying windows around. For that
|
||||
* case we will use either VIS copies or hw accelerated VSCROLL.
|
||||
* All of the planes needs to be copied in the framebuffer from
|
||||
@@ -327,7 +278,4 @@ do { unsigned int __rop = (FFB_ROP_OLD | (FFB_ROP_OLD << 8)); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define FFB_FBC_WIN(pWin) CreatorGetWindowPrivate(pWin)->fbc_base
|
||||
#define FFB_WID_WIN(pWin) CreatorGetWindowPrivate(pWin)->wid
|
||||
|
||||
#endif /* FFBRCACHE_H */
|
||||
|
||||
@@ -449,20 +449,3 @@ FFBWidChangeBuffer(FFBPtr pFfb, unsigned int wid, int visible)
|
||||
update_wids(pFfb, index);
|
||||
}
|
||||
}
|
||||
|
||||
/* Used by DRI part of driver. */
|
||||
Bool
|
||||
FFBWidIsShared(FFBPtr pFfb, unsigned int wid)
|
||||
{
|
||||
ffb_dac_info_t *p = &pFfb->dac_info;
|
||||
ffb_wid_pool_t *table = &p->wid_table;
|
||||
int index = wid >> table->wid_shift;
|
||||
|
||||
if (index < 0 || index >= table->num_wids)
|
||||
return TRUE;
|
||||
|
||||
if (table->wid_pool[index].canshare == TRUE)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user