kdrive: Add primitive ct65550 server. Update kdrive/vesa code to support
DPMS using VESA bios routines. Include support for Toshiba SMM DPMS as
    well
			
			
This commit is contained in:
		
							parent
							
								
									f856b952ec
								
							
						
					
					
						commit
						216090d1ae
					
				|  | @ -0,0 +1,14 @@ | |||
| XCOMM $XConsortium: Imakefile /main/10 1996/12/02 10:20:33 lehors $ | ||||
| XCOMM $XFree86: xc/programs/Xserver/hw/kdrive/chips/Imakefile,v 1.6 2000/10/20 00:19:51 keithp Exp $ | ||||
| KDRIVE=.. | ||||
| #include "../Kdrive.tmpl" | ||||
| 
 | ||||
| SRCS = 	chips.c chipsdraw.c chipsstub.c | ||||
| 
 | ||||
| OBJS = 	chips.o chipsdraw.o chipsstub.o | ||||
| 
 | ||||
| INCLUDES = -I. $(KDINCS) -I$(KDRIVE)/vesa | ||||
| 
 | ||||
| NormalLibraryObjectRule() | ||||
| NormalLibraryTarget(chips,$(OBJS)) | ||||
| DependTarget() | ||||
|  | @ -0,0 +1,302 @@ | |||
| /*
 | ||||
|  * Copyright © 2001 Keith Packard | ||||
|  * | ||||
|  * Permission to use, copy, modify, distribute, and sell this software and its | ||||
|  * documentation for any purpose is hereby granted without fee, provided that | ||||
|  * the above copyright notice appear in all copies and that both that | ||||
|  * copyright notice and this permission notice appear in supporting | ||||
|  * documentation, and that the name of Keith Packard not be used in | ||||
|  * advertising or publicity pertaining to distribution of the software without | ||||
|  * specific, written prior permission.  Keith Packard makes no | ||||
|  * representations about the suitability of this software for any purpose.  It | ||||
|  * is provided "as is" without express or implied warranty. | ||||
|  * | ||||
|  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | ||||
|  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO | ||||
|  * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR | ||||
|  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, | ||||
|  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | ||||
|  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | ||||
|  * PERFORMANCE OF THIS SOFTWARE. | ||||
|  */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/trident/trident.c,v 1.18 2001/06/04 09:45:42 keithp Exp $ */ | ||||
| 
 | ||||
| #include "chips.h" | ||||
| #include <sys/io.h> | ||||
| 
 | ||||
| #undef CHIPS_DEBUG | ||||
| 
 | ||||
| Bool | ||||
| chipsCardInit (KdCardInfo *card) | ||||
| { | ||||
|     int			k; | ||||
|     char		*pixels; | ||||
|     ChipsCardInfo	*chipsc; | ||||
|     CARD8		r00, r01, r02; | ||||
|     CARD8		r39; | ||||
| 
 | ||||
|     chipsc = (ChipsCardInfo *) xalloc (sizeof (ChipsCardInfo)); | ||||
|     if (!chipsc) | ||||
| 	return FALSE; | ||||
|      | ||||
|     iopl (3); | ||||
|      | ||||
|     if (!vesaInitialize (card, &chipsc->vesa)) | ||||
|     { | ||||
| 	xfree (chipsc); | ||||
| 	return FALSE; | ||||
|     } | ||||
|      | ||||
| #ifdef USE_PCI | ||||
|     chipsc->window = (CARD32 *) (chipsc->cop_base + 0x10000); | ||||
| #else | ||||
|     chipsc->window = 0; | ||||
| #endif | ||||
|     card->driver = chipsc; | ||||
|      | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| chipsScreenInit (KdScreenInfo *screen) | ||||
| { | ||||
|     ChipsCardInfo	*chipsc = screen->card->driver; | ||||
|     ChipsScreenInfo	*chipss; | ||||
|     int			screen_size, memory; | ||||
|     CARD32		mmio_base; | ||||
|     CARD32		mmio_size; | ||||
| 
 | ||||
|     chipss = (ChipsScreenInfo *) xalloc (sizeof (ChipsScreenInfo)); | ||||
|     if (!chipss) | ||||
| 	return FALSE; | ||||
|     memset (chipss, '\0', sizeof (ChipsScreenInfo)); | ||||
|     if (!vesaScreenInitialize (screen, &chipss->vesa)) | ||||
|     { | ||||
| 	xfree (chipss); | ||||
| 	return FALSE; | ||||
|     } | ||||
| 
 | ||||
|     if (chipss->vesa.mapping != VESA_LINEAR) | ||||
| 	screen->dumb = TRUE; | ||||
|     if (!screen->dumb) | ||||
|     { | ||||
| 	chipss->mmio_base = (CARD8 *) KdMapDevice (CHIPS_MMIO_BASE(chipss), | ||||
| 						   CHIPS_MMIO_SIZE(chipss)); | ||||
| 	 | ||||
| 	if (chipss->mmio_base) | ||||
| 	{ | ||||
| 	    KdSetMappedMode (CHIPS_MMIO_BASE(chipss), | ||||
| 			     CHIPS_MMIO_SIZE(chipss), | ||||
| 			     KD_MAPPED_MODE_REGISTERS); | ||||
| 	} | ||||
| 	else | ||||
| 	    screen->dumb = TRUE; | ||||
|     } | ||||
|     else | ||||
| 	chipss->mmio_base = 0; | ||||
| 
 | ||||
|     chipss->screen = chipss->vesa.fb; | ||||
|     memory = chipss->vesa.fb_size; | ||||
|      | ||||
|     screen_size = screen->fb[0].byteStride * screen->height; | ||||
|      | ||||
|     if (chipss->screen && memory >= screen_size + 2048) | ||||
|     { | ||||
| 	memory -= 2048; | ||||
| 	chipss->cursor_base = chipss->screen + memory - 2048; | ||||
|     } | ||||
|     else | ||||
| 	chipss->cursor_base = 0; | ||||
|     memory -= screen_size; | ||||
|     if (memory > screen->fb[0].byteStride) | ||||
|     { | ||||
| 	chipss->off_screen = chipss->screen + screen_size; | ||||
| 	chipss->off_screen_size = memory; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
| 	chipss->off_screen = 0; | ||||
| 	chipss->off_screen_size = 0; | ||||
|     } | ||||
|     screen->driver = chipss; | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| chipsInitScreen (ScreenPtr pScreen) | ||||
| { | ||||
|     return vesaInitScreen (pScreen); | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| chipsFinishInitScreen (ScreenPtr pScreen) | ||||
| { | ||||
|     return vesaFinishInitScreen (pScreen); | ||||
| } | ||||
| 
 | ||||
| CARD8 | ||||
| chipsReadXR (ChipsScreenInfo *chipss, CARD8 index) | ||||
| { | ||||
|     CARD8 value; | ||||
|     outb (index, 0x3d6); | ||||
|     value = inb (0x3d7); | ||||
|     return value; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsWriteXR (ChipsScreenInfo *chipss, CARD8 index, CARD8 value) | ||||
| { | ||||
|     outb (index, 0x3d6); | ||||
|     outb (value, 0x3d7); | ||||
| } | ||||
| 
 | ||||
| CARD8 | ||||
| chipsReadFR (ChipsScreenInfo *chipss, CARD8 index) | ||||
| { | ||||
|     CARD8 value; | ||||
|     outb (index, 0x3d0); | ||||
|     value = inb (0x3d1); | ||||
|     return value; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsWriteFR (ChipsScreenInfo *chipss, CARD8 index, CARD8 value) | ||||
| { | ||||
|     outb (index, 0x3d0); | ||||
|     outb (value, 0x3d1); | ||||
| } | ||||
| 
 | ||||
| CARD8 | ||||
| chipsReadSeq (ChipsScreenInfo *chipss, CARD8 index) | ||||
| { | ||||
|     CARD8   value; | ||||
|     outb (index, 0x3c4); | ||||
|     value = inb (0x3c5); | ||||
|     return value; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsWriteSeq (ChipsScreenInfo *chipss, CARD8 index, CARD8 value) | ||||
| { | ||||
|     outb (index, 0x3c4); | ||||
|     outb (value, 0x3c5); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsPreserve (KdCardInfo *card) | ||||
| { | ||||
|     ChipsCardInfo	*chipss = card->driver; | ||||
|     vesaPreserve(card); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsSetMMIO (ChipsCardInfo *chipsc) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsResetMMIO (ChipsCardInfo *chipsc) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| chipsEnable (ScreenPtr pScreen) | ||||
| { | ||||
|     KdScreenPriv(pScreen); | ||||
|     ChipsCardInfo	*chipsc = pScreenPriv->card->driver; | ||||
| 
 | ||||
|     if (!vesaEnable (pScreen)) | ||||
| 	return FALSE; | ||||
|     chipsSetMMIO (chipsc); | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| chipsDPMS (ScreenPtr pScreen, int mode) | ||||
| { | ||||
|     KdScreenPriv(pScreen); | ||||
|     chipsScreenInfo(pScreenPriv); | ||||
|      | ||||
|     ErrorF ("seqreg 0x01 0x%x\n", chipsReadSeq (chipss, 0x1)); | ||||
|     ErrorF ("dpmsreg XR61 0x%x\n", chipsReadXR (chipss, 0x61)); | ||||
|     ErrorF ("dpmsreg XR73 0x%x\n", chipsReadXR (chipss, 0x73)); | ||||
|      | ||||
|     ErrorF ("flat panel FR05 0x%x\n", chipsReadFR (chipss, 0x5)); | ||||
|     ErrorF ("flat panel XR52 0x%x\n", chipsReadXR (chipss, 0x52)); | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsDisable (ScreenPtr pScreen) | ||||
| { | ||||
|     vesaDisable (pScreen); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsRestore (KdCardInfo *card) | ||||
| { | ||||
|     ChipsCardInfo	*chipsc = card->driver; | ||||
| 
 | ||||
|     chipsResetMMIO (chipsc); | ||||
|     vesaRestore (card); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsScreenFini (KdScreenInfo *screen) | ||||
| { | ||||
|     ChipsScreenInfo	*chipss = (ChipsScreenInfo *) screen->driver; | ||||
| 
 | ||||
|     if (chipss->mmio_base) | ||||
|     { | ||||
| 	KdUnmapDevice ((void *) chipss->mmio_base, CHIPS_MMIO_SIZE(chipss)); | ||||
| 	KdResetMappedMode (CHIPS_MMIO_BASE(chipss), | ||||
| 			   CHIPS_MMIO_SIZE(chipss), | ||||
| 			   KD_MAPPED_MODE_REGISTERS); | ||||
|     } | ||||
|     vesaScreenFini (screen); | ||||
|     xfree (chipss); | ||||
|     screen->driver = 0; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsCardFini (KdCardInfo *card) | ||||
| { | ||||
|     ChipsCardInfo	*chipsc = card->driver; | ||||
| 
 | ||||
|     vesaCardFini (card); | ||||
| } | ||||
| 
 | ||||
| #define chipsCursorInit	(void *) 0 | ||||
| #define chipsCursorEnable	(void *) 0 | ||||
| #define chipsCursorDisable	(void *) 0 | ||||
| #define chipsCursorFini	(void *) 0 | ||||
| #define chipsRecolorCursor	(void *) 0 | ||||
| 
 | ||||
| KdCardFuncs	chipsFuncs = { | ||||
|     chipsCardInit,	    /* cardinit */ | ||||
|     chipsScreenInit,	    /* scrinit */ | ||||
|     chipsInitScreen,	    /* initScreen */ | ||||
|     chipsPreserve,	    /* preserve */ | ||||
|     chipsEnable,	    /* enable */ | ||||
|     vesaDPMS,		    /* dpms */ | ||||
|     chipsDisable,	    /* disable */ | ||||
|     chipsRestore,	    /* restore */ | ||||
|     chipsScreenFini,	    /* scrfini */ | ||||
|     chipsCardFini,	    /* cardfini */ | ||||
|      | ||||
|     chipsCursorInit,	    /* initCursor */ | ||||
|     chipsCursorEnable,    /* enableCursor */ | ||||
|     chipsCursorDisable,   /* disableCursor */ | ||||
|     chipsCursorFini,	    /* finiCursor */ | ||||
|     chipsRecolorCursor,   /* recolorCursor */ | ||||
|      | ||||
|     chipsDrawInit,        /* initAccel */ | ||||
|     chipsDrawEnable,      /* enableAccel */ | ||||
|     chipsDrawSync,	    /* syncAccel */ | ||||
|     chipsDrawDisable,     /* disableAccel */ | ||||
|     chipsDrawFini,        /* finiAccel */ | ||||
|      | ||||
|     vesaGetColors,    	    /* getColors */ | ||||
|     vesaPutColors,	    /* putColors */ | ||||
|     chipsFinishInitScreen /* finishInitScreen */ | ||||
| }; | ||||
|  | @ -0,0 +1,122 @@ | |||
| /*
 | ||||
|  * Id: chips.h,v 1.2 1999/11/02 08:17:24 keithp Exp $ | ||||
|  * | ||||
|  * Copyright © 1999 Keith Packard | ||||
|  * | ||||
|  * Permission to use, copy, modify, distribute, and sell this software and its | ||||
|  * documentation for any purpose is hereby granted without fee, provided that | ||||
|  * the above copyright notice appear in all copies and that both that | ||||
|  * copyright notice and this permission notice appear in supporting | ||||
|  * documentation, and that the name of Keith Packard not be used in | ||||
|  * advertising or publicity pertaining to distribution of the software without | ||||
|  * specific, written prior permission.  Keith Packard makes no | ||||
|  * representations about the suitability of this software for any purpose.  It | ||||
|  * is provided "as is" without express or implied warranty. | ||||
|  * | ||||
|  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | ||||
|  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO | ||||
|  * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR | ||||
|  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, | ||||
|  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | ||||
|  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | ||||
|  * PERFORMANCE OF THIS SOFTWARE. | ||||
|  */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/chips/chips.h,v 1.9 2000/11/29 08:42:25 keithp Exp $ */ | ||||
| 
 | ||||
| #ifndef _CHIPS_H_ | ||||
| #define _CHIPS_H_ | ||||
| #include <vesa.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * offset from ioport beginning  | ||||
|  */ | ||||
| 
 | ||||
| #define HIQV | ||||
| #ifdef HIQV | ||||
| #define CHIPS_MMIO_BASE(c)	((c)->vesa.fb_phys + 0x400000) | ||||
| #else | ||||
| #define CHIPS_MMIO_BASE(c)	((c)->vesa.fb_phys + 0x200000) | ||||
| #endif | ||||
| #define CHIPS_MMIO_SIZE(c)	(0x20000) | ||||
| 
 | ||||
| typedef volatile CARD8	VOL8; | ||||
| typedef volatile CARD16	VOL16; | ||||
| typedef volatile CARD32	VOL32; | ||||
| 
 | ||||
| typedef struct _chipsSave { | ||||
|     int	    dummy; | ||||
| } ChipsSave; | ||||
| 
 | ||||
| typedef struct _chipsCardInfo { | ||||
|     VesaCardPrivRec	vesa; | ||||
|     CARD32		*window; | ||||
|     Bool		mmio; | ||||
|     ChipsSave		save; | ||||
| } ChipsCardInfo; | ||||
|      | ||||
| #define getChipsCardInfo(kd)  ((ChipsCardInfo *) ((kd)->card->driver)) | ||||
| #define chipsCardInfo(kd)	    ChipsCardInfo	*chipsc = getChipsCardInfo(kd) | ||||
| 
 | ||||
| typedef struct _chipsCursor { | ||||
|     int		width, height; | ||||
|     int		xhot, yhot; | ||||
|     Bool	has_cursor; | ||||
|     CursorPtr	pCursor; | ||||
|     Pixel	source, mask; | ||||
| } ChipsCursor; | ||||
| 
 | ||||
| #define CHIPS_CURSOR_WIDTH	64 | ||||
| #define CHIPS_CURSOR_HEIGHT	64 | ||||
| 
 | ||||
| typedef struct _chipsScreenInfo { | ||||
|     VesaScreenPrivRec	vesa; | ||||
|     CARD8	    *mmio_base; | ||||
|     CARD8	    *cursor_base; | ||||
|     CARD8	    *screen; | ||||
|     CARD8	    *off_screen; | ||||
|     int		    off_screen_size; | ||||
|     ChipsCursor   cursor; | ||||
| } ChipsScreenInfo; | ||||
| 
 | ||||
| #define getChipsScreenInfo(kd) ((ChipsScreenInfo *) ((kd)->screen->driver)) | ||||
| #define chipsScreenInfo(kd)    ChipsScreenInfo *chipss = getChipsScreenInfo(kd) | ||||
| 
 | ||||
| Bool | ||||
| chipsDrawInit (ScreenPtr pScreen); | ||||
| 
 | ||||
| void | ||||
| chipsDrawEnable (ScreenPtr pScreen); | ||||
| 
 | ||||
| void | ||||
| chipsDrawSync (ScreenPtr pScreen); | ||||
| 
 | ||||
| void | ||||
| chipsDrawDisable (ScreenPtr pScreen); | ||||
| 
 | ||||
| void | ||||
| chipsDrawFini (ScreenPtr pScreen); | ||||
| 
 | ||||
| CARD8 | ||||
| chipsReadXR (ChipsScreenInfo *chipsc, CARD8 index); | ||||
| 
 | ||||
| void | ||||
| chipsWriteXR (ChipsScreenInfo *chipsc, CARD8 index, CARD8 value); | ||||
| 
 | ||||
| Bool | ||||
| chipsCursorInit (ScreenPtr pScreen); | ||||
| 
 | ||||
| void | ||||
| chipsCursorEnable (ScreenPtr pScreen); | ||||
| 
 | ||||
| void | ||||
| chipsCursorDisable (ScreenPtr pScreen); | ||||
| 
 | ||||
| void | ||||
| chipsCursorFini (ScreenPtr pScreen); | ||||
| 
 | ||||
| void | ||||
| chipsRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef); | ||||
| 
 | ||||
| extern KdCardFuncs  chipsFuncs; | ||||
| 
 | ||||
| #endif /* _CHIPS_H_ */ | ||||
|  | @ -0,0 +1,490 @@ | |||
| /*
 | ||||
|  * Id: tridentdraw.c,v 1.1 1999/11/02 03:54:47 keithp Exp $ | ||||
|  * | ||||
|  * Copyright © 1999 Keith Packard | ||||
|  * | ||||
|  * Permission to use, copy, modify, distribute, and sell this software and its | ||||
|  * documentation for any purpose is hereby granted without fee, provided that | ||||
|  * the above copyright notice appear in all copies and that both that | ||||
|  * copyright notice and this permission notice appear in supporting | ||||
|  * documentation, and that the name of Keith Packard not be used in | ||||
|  * advertising or publicity pertaining to distribution of the software without | ||||
|  * specific, written prior permission.  Keith Packard makes no | ||||
|  * representations about the suitability of this software for any purpose.  It | ||||
|  * is provided "as is" without express or implied warranty. | ||||
|  * | ||||
|  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | ||||
|  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO | ||||
|  * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR | ||||
|  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, | ||||
|  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | ||||
|  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | ||||
|  * PERFORMANCE OF THIS SOFTWARE. | ||||
|  */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/trident/tridentdraw.c,v 1.10 2001/06/03 18:48:19 keithp Exp $ */ | ||||
| 
 | ||||
| #include "chips.h" | ||||
| 
 | ||||
| #include	"Xmd.h" | ||||
| #include	"gcstruct.h" | ||||
| #include	"scrnintstr.h" | ||||
| #include	"pixmapstr.h" | ||||
| #include	"regionstr.h" | ||||
| #include	"mistruct.h" | ||||
| #include	"fontstruct.h" | ||||
| #include	"dixfontstr.h" | ||||
| #include	"fb.h" | ||||
| #include	"migc.h" | ||||
| #include	"miline.h" | ||||
| 
 | ||||
| CARD8 chipsBltRop[16] = { | ||||
|     /* GXclear      */      0x00,         /* 0 */ | ||||
|     /* GXand        */      0x88,         /* src AND dst */ | ||||
|     /* GXandReverse */      0x44,         /* src AND NOT dst */ | ||||
|     /* GXcopy       */      0xcc,         /* src */ | ||||
|     /* GXandInverted*/      0x22,         /* NOT src AND dst */ | ||||
|     /* GXnoop       */      0xaa,         /* dst */ | ||||
|     /* GXxor        */      0x66,         /* src XOR dst */ | ||||
|     /* GXor         */      0xee,         /* src OR dst */ | ||||
|     /* GXnor        */      0x11,         /* NOT src AND NOT dst */ | ||||
|     /* GXequiv      */      0x99,         /* NOT src XOR dst */ | ||||
|     /* GXinvert     */      0x55,         /* NOT dst */ | ||||
|     /* GXorReverse  */      0xdd,         /* src OR NOT dst */ | ||||
|     /* GXcopyInverted*/     0x33,         /* NOT src */ | ||||
|     /* GXorInverted */      0xbb,         /* NOT src OR dst */ | ||||
|     /* GXnand       */      0x77,         /* NOT src OR NOT dst */ | ||||
|     /* GXset        */      0xff,         /* 1 */ | ||||
| }; | ||||
| 
 | ||||
| CARD8 chipsSolidRop[16] = { | ||||
|     /* GXclear      */      0x00,         /* 0 */ | ||||
|     /* GXand        */      0xa0,         /* src AND dst */ | ||||
|     /* GXandReverse */      0x50,         /* src AND NOT dst */ | ||||
|     /* GXcopy       */      0xf0,         /* src */ | ||||
|     /* GXandInverted*/      0x0a,         /* NOT src AND dst */ | ||||
|     /* GXnoop       */      0xaa,         /* dst */ | ||||
|     /* GXxor        */      0x5a,         /* src XOR dst */ | ||||
|     /* GXor         */      0xfa,         /* src OR dst */ | ||||
|     /* GXnor        */      0x05,         /* NOT src AND NOT dst */ | ||||
|     /* GXequiv      */      0xa5,         /* NOT src XOR dst */ | ||||
|     /* GXinvert     */      0x55,         /* NOT dst */ | ||||
|     /* GXorReverse  */      0xf5,         /* src OR NOT dst */ | ||||
|     /* GXcopyInverted*/     0x0f,         /* NOT src */ | ||||
|     /* GXorInverted */      0xaf,         /* NOT src OR dst */ | ||||
|     /* GXnand       */      0x5f,         /* NOT src OR NOT dst */ | ||||
|     /* GXset        */      0xff,         /* 1 */ | ||||
| }; | ||||
| 
 | ||||
| /* Definitions for the Chips and Technology BitBLT engine communication. */ | ||||
| /* These are done using Memory Mapped IO, of the registers */ | ||||
| /* BitBLT modes for register 93D0. */ | ||||
| 
 | ||||
| #ifdef HIQV | ||||
| #define ctPATCOPY               0xF0 | ||||
| #define ctLEFT2RIGHT            0x000 | ||||
| #define ctRIGHT2LEFT            0x100 | ||||
| #define ctTOP2BOTTOM            0x000 | ||||
| #define ctBOTTOM2TOP            0x200 | ||||
| #define ctSRCSYSTEM             0x400 | ||||
| #define ctDSTSYSTEM             0x800 | ||||
| #define ctSRCMONO               0x1000 | ||||
| #define ctBGTRANSPARENT         0x22000 | ||||
| #define ctCOLORTRANSENABLE      0x4000 | ||||
| #define ctCOLORTRANSDISABLE     0x0 | ||||
| #define ctCOLORTRANSDST         0x8000 | ||||
| #define ctCOLORTRANSROP         0x0 | ||||
| #define ctCOLORTRANSEQUAL       0x10000L | ||||
| #define ctCOLORTRANSNEQUAL      0x0 | ||||
| #define ctPATMONO               0x40000L | ||||
| #define ctPATSOLID              0x80000L | ||||
| #define ctPATSTART0             0x000000L | ||||
| #define ctPATSTART1             0x100000L | ||||
| #define ctPATSTART2             0x200000L | ||||
| #define ctPATSTART3             0x300000L | ||||
| #define ctPATSTART4             0x400000L | ||||
| #define ctPATSTART5             0x500000L | ||||
| #define ctPATSTART6             0x600000L | ||||
| #define ctPATSTART7             0x700000L | ||||
| #define ctSRCFG                 0x000000L	/* Where is this for the 65550?? */ | ||||
| #else | ||||
| #define ctPATCOPY               0xF0 | ||||
| #define ctTOP2BOTTOM            0x100 | ||||
| #define ctBOTTOM2TOP            0x000 | ||||
| #define ctLEFT2RIGHT            0x200 | ||||
| #define ctRIGHT2LEFT            0x000 | ||||
| #define ctSRCFG                 0x400 | ||||
| #define ctSRCMONO               0x800 | ||||
| #define ctPATMONO               0x1000 | ||||
| #define ctBGTRANSPARENT         0x2000 | ||||
| #define ctSRCSYSTEM             0x4000 | ||||
| #define ctPATSOLID              0x80000L | ||||
| #define ctPATSTART0             0x00000L | ||||
| #define ctPATSTART1             0x10000L | ||||
| #define ctPATSTART2             0x20000L | ||||
| #define ctPATSTART3             0x30000L | ||||
| #define ctPATSTART4             0x40000L | ||||
| #define ctPATSTART5             0x50000L | ||||
| #define ctPATSTART6             0x60000L | ||||
| #define ctPATSTART7             0x70000L | ||||
| #endif | ||||
| 
 | ||||
| #define chipsFillPix(bpp,pixel) {\ | ||||
|     if (bpp == 8) \ | ||||
|     { \ | ||||
| 	pixel = pixel & 0xff; \ | ||||
|     } \ | ||||
|     else if (bpp == 16) \ | ||||
|     { \ | ||||
| 	pixel = pixel & 0xffff; \ | ||||
|     } \ | ||||
| } | ||||
| 
 | ||||
| static VOL8	*mmio; | ||||
| static CARD32	byteStride; | ||||
| static CARD32	bytesPerPixel; | ||||
| static CARD32	pixelStride; | ||||
| 
 | ||||
| void | ||||
| chipsSet (ScreenPtr pScreen) | ||||
| { | ||||
|     KdScreenPriv(pScreen); | ||||
|     chipsScreenInfo(pScreenPriv); | ||||
|      | ||||
|     mmio = chipss->mmio_base; | ||||
|     byteStride = pScreenPriv->screen->fb[0].byteStride; | ||||
|     bytesPerPixel = pScreenPriv->screen->fb[0].bitsPerPixel >> 3; | ||||
|     pixelStride = pScreenPriv->screen->fb[0].pixelStride; | ||||
| } | ||||
| 
 | ||||
| #ifdef HIQV | ||||
| #define CHIPS_BR0	0x00	/* offset */ | ||||
| #define CHIPS_BR1    	0x04	/* bg */ | ||||
| #define CHIPS_BR2    	0x08	/* fg */ | ||||
| #define CHIPS_BR3    	0x0c	/* monochrome */ | ||||
| #define CHIPS_BR4	0x10	/* bitblt */ | ||||
| #define CHIPS_BR5	0x14	/* pattern addr */ | ||||
| #define CHIPS_BR6	0x18	/* source addr */ | ||||
| #define CHIPS_BR7	0x1c	/* dst addr */ | ||||
| #define CHIPS_BR8	0x20	/* dst w/h */ | ||||
| #else | ||||
| #define CHIPS_DR0	0x83d0 | ||||
| #define CHIPS_DR1    	0x87d0 | ||||
| #define CHIPS_DR2    	0x8bd0 | ||||
| #define CHIPS_DR3    	0x8fd0 | ||||
| #define CHIPS_DR4	0x93d0 | ||||
| #define CHIPS_DR5	0x97d0 | ||||
| #define CHIPS_DR6	0x9bd0 | ||||
| #define CHIPS_DR7	0x9fd0 | ||||
| #endif | ||||
| 
 | ||||
| #define DBG(x) | ||||
| 
 | ||||
| void | ||||
| chipsPitch (int src, int dst) | ||||
| { | ||||
|     CARD32  p; | ||||
| 
 | ||||
|     p = ((dst & 0xffff) << 16) | (src & 0xffff); | ||||
|     DBG(ErrorF ("\tpitch 0x%x\n", p)); | ||||
| #ifdef HIQV | ||||
|     *(VOL32 *) (mmio + CHIPS_BR0) = p; | ||||
| #else | ||||
|     *(VOL32 *) (mmio + CHIPS_DR0) = p; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsBg (Pixel   bg) | ||||
| { | ||||
|     DBG(ErrorF ("\tbg 0x%x\n", bg)); | ||||
| #ifdef HIQV | ||||
|     *(VOL32 *) (mmio + CHIPS_BR1) = bg & 0xffff; | ||||
| #else | ||||
|     *(VOL32 *) (mmio + CHIPS_DR2) = bg; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsFg (Pixel   fg) | ||||
| { | ||||
|     DBG(ErrorF ("\tfg 0x%x\n", fg)); | ||||
| #ifdef HIQV | ||||
|     *(VOL32 *) (mmio + CHIPS_BR2) = fg; | ||||
| #else | ||||
|     *(VOL32 *) (mmio + CHIPS_DR3) = fg; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsOp (CARD32 op) | ||||
| { | ||||
|     DBG(ErrorF ("\top 0x%x\n", op)); | ||||
| #ifdef HIQV | ||||
|     *(VOL32 *) (mmio + CHIPS_BR4) = op; | ||||
| #else | ||||
|     *(VOL32 *) (mmio + CHIPS_DR4) = op; | ||||
| #endif | ||||
| } | ||||
|      | ||||
| void | ||||
| chipsRopSolid (int rop) | ||||
| { | ||||
|     CARD32  op; | ||||
|      | ||||
|     op = chipsSolidRop[rop] | ctTOP2BOTTOM | ctLEFT2RIGHT | ctPATSOLID | ctPATMONO; | ||||
|     chipsOp (op); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsSrc (int addr) | ||||
| { | ||||
|     DBG(ErrorF ("\tsrc 0x%x\n", addr)); | ||||
| #ifdef HIQV | ||||
|     *(VOL32 *) (mmio + CHIPS_BR6) = addr; | ||||
| #else | ||||
|     *(VOL32 *) (mmio + CHIPS_DR5) = addr; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsDst (int addr) | ||||
| { | ||||
|     DBG(ErrorF ("\tdst 0x%x\n", addr)); | ||||
| #ifdef HIQV | ||||
|     *(VOL32 *) (mmio + CHIPS_BR7) = addr; | ||||
| #else | ||||
|     *(VOL32 *) (mmio + CHIPS_DR6) = addr; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsWidthHeightGo (int w, int h) | ||||
| { | ||||
|     DBG(ErrorF ("\twidth height %d/%d\n", w, h)); | ||||
| #ifdef HIQV | ||||
|     *(VOL32 *) (mmio + CHIPS_BR8) = ((h & 0xffff) << 16) | (w & 0xffff); | ||||
| #else | ||||
|     *(VOL32 *) (mmio + CHIPS_DR7) = ((h & 0xffff) << 16) | (w & 0xffff); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsWaitIdle () | ||||
| { | ||||
| #ifdef HIQV | ||||
|     int	timeout = 0; | ||||
|     CARD8   tmp; | ||||
|     VOL32   *br4 = (VOL32 *) (mmio + CHIPS_BR4); | ||||
|      | ||||
|     DBG(ErrorF ("\tBR4 0x%x 0x%x\n", mmio + CHIPS_BR4, *br4)); | ||||
|     DBG(ErrorF ("\tXR20 0x%x\n", chipsReadXR (0, 0x20))); | ||||
|     for (;;) | ||||
|     { | ||||
| 	if ((*br4 & 0x80000000) == 0) | ||||
| 	    break; | ||||
| 	tmp = chipsReadXR (0, 0x20); | ||||
| 	if ((tmp & 1) == 0) | ||||
| 	    break; | ||||
| 	if (++timeout > 1000000) | ||||
| 	{ | ||||
| 	    ErrorF ("timeout\n"); | ||||
| 	    tmp = chipsReadXR (0, 0x20); | ||||
| 	    chipsWriteXR (0, 0x20, tmp | 2); | ||||
| 	    sleep (1); | ||||
| 	    chipsWriteXR (0, 0x20, tmp); | ||||
| 	    sleep (1); | ||||
| 	} | ||||
|     } | ||||
| #else | ||||
|     while (*(VOL32 *) (mmio + CHIPS_DR4) & 0x00100000) | ||||
| 	; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| chipsPrepareSolid (DrawablePtr  pDrawable, | ||||
| 		   int		alu, | ||||
| 		   Pixel	pm, | ||||
| 		   Pixel	fg) | ||||
| { | ||||
|     FbBits  depthMask; | ||||
|      | ||||
|     DBG(ErrorF ("PrepareSolid %d 0x%x\n", alu, fg)); | ||||
|     depthMask = FbFullMask(pDrawable->depth); | ||||
|     if ((pm & depthMask) != depthMask) | ||||
| 	return FALSE; | ||||
|     else | ||||
|     { | ||||
| 	chipsSet (pDrawable->pScreen); | ||||
| 	chipsWaitIdle (); | ||||
| 	chipsFillPix(pDrawable->bitsPerPixel,fg); | ||||
| 	chipsFg (fg); | ||||
| 	chipsBg (fg); | ||||
| 	chipsRopSolid (alu); | ||||
| 	chipsPitch (byteStride, byteStride); | ||||
| 	return TRUE; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsSolid (int x1, int y1, int x2, int y2) | ||||
| { | ||||
|     CARD32  dst; | ||||
|     int	    w, h; | ||||
| 
 | ||||
|     DBG(ErrorF ("    Solid %dx%d %dx%d\n", x1, y1, x2, y2)); | ||||
|     dst = y1 * byteStride + x1 * bytesPerPixel; | ||||
|     w = (x2 - x1) * bytesPerPixel; | ||||
|     h = (y2 - y1); | ||||
|     chipsWaitIdle (); | ||||
|     chipsDst (dst); | ||||
|     chipsWidthHeightGo (w, h); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsDoneSolid (void) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| static CARD32	copyOp; | ||||
| Bool | ||||
| chipsPrepareCopy (DrawablePtr	pSrcDrawable, | ||||
| 		  DrawablePtr	pDstDrawable, | ||||
| 		  int		dx, | ||||
| 		  int		dy, | ||||
| 		  int		alu, | ||||
| 		  Pixel		pm) | ||||
| { | ||||
|     FbBits  depthMask; | ||||
|      | ||||
|     DBG(ErrorF ("PrepareSolid %d 0x%x\n", alu, fg)); | ||||
|     depthMask = FbFullMask(pDstDrawable->depth); | ||||
|     if ((pm & depthMask) != depthMask) | ||||
| 	return FALSE; | ||||
|     else | ||||
|     { | ||||
| 	copyOp = chipsBltRop[alu]; | ||||
| 	if (dy >= 0) | ||||
| 	    copyOp |= ctTOP2BOTTOM; | ||||
| 	else | ||||
| 	    copyOp |= ctBOTTOM2TOP; | ||||
| 	if (dx >= 0) | ||||
| 	    copyOp |= ctLEFT2RIGHT; | ||||
| 	else | ||||
| 	    copyOp |= ctRIGHT2LEFT; | ||||
| 	chipsSet (pDstDrawable->pScreen); | ||||
| 	chipsWaitIdle (); | ||||
| 	chipsOp (copyOp); | ||||
| 	chipsPitch (byteStride, byteStride); | ||||
| 	return TRUE; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsCopy (int srcX, | ||||
| 	   int srcY, | ||||
| 	   int dstX, | ||||
| 	   int dstY, | ||||
| 	   int w, | ||||
| 	   int h) | ||||
| { | ||||
|     int	src, dst; | ||||
|     if ((copyOp & (ctTOP2BOTTOM|ctBOTTOM2TOP)) == ctBOTTOM2TOP) | ||||
|     { | ||||
| 	src = (srcY + h - 1) * byteStride; | ||||
| 	dst = (dstY + h - 1) * byteStride; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
| 	src = srcY * byteStride; | ||||
| 	dst = dstY * byteStride; | ||||
|     } | ||||
|     if ((copyOp & (ctLEFT2RIGHT|ctRIGHT2LEFT)) == ctRIGHT2LEFT) | ||||
|     { | ||||
| 	src = src + (srcX + w) * bytesPerPixel - 1; | ||||
| 	dst = dst + (dstX + w) * bytesPerPixel - 1; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
| 	src = src + srcX * bytesPerPixel; | ||||
| 	dst = dst + dstX * bytesPerPixel; | ||||
|     } | ||||
|     chipsWaitIdle (); | ||||
|     chipsSrc (src); | ||||
|     chipsDst (dst); | ||||
|     chipsWidthHeightGo (w * bytesPerPixel, h); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsDoneCopy (void) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| KaaScreenPrivRec    chipsKaa = { | ||||
|     chipsPrepareSolid, | ||||
|     chipsSolid, | ||||
|     chipsDoneSolid, | ||||
| 
 | ||||
|     chipsPrepareCopy, | ||||
|     chipsCopy, | ||||
|     chipsDoneCopy, | ||||
| }; | ||||
| 
 | ||||
| Bool | ||||
| chipsDrawInit (ScreenPtr pScreen) | ||||
| { | ||||
|     KdScreenPriv(pScreen); | ||||
|     chipsScreenInfo(pScreenPriv); | ||||
|      | ||||
|     switch (pScreenPriv->screen->fb[0].bitsPerPixel) { | ||||
|     case 8: | ||||
|     case 16: | ||||
| 	break; | ||||
|     default: | ||||
| 	return FALSE; | ||||
|     } | ||||
| 	 | ||||
|     if (!kaaDrawInit (pScreen, &chipsKaa)) | ||||
| 	return FALSE; | ||||
|      | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsDrawEnable (ScreenPtr pScreen) | ||||
| { | ||||
|     KdScreenPriv(pScreen); | ||||
|     chipsScreenInfo(pScreenPriv); | ||||
|     CARD8   mode; | ||||
|      | ||||
|     switch (pScreenPriv->screen->fb[0].bitsPerPixel) { | ||||
|     case 8: | ||||
| 	mode = 0x00; | ||||
| 	break; | ||||
|     case 16: | ||||
| 	mode = 0x10; | ||||
| 	break; | ||||
|     } | ||||
|     chipsSet (pScreen); | ||||
|     chipsWaitIdle (); | ||||
|     chipsWriteXR (chipss, 0x20, mode); | ||||
|      | ||||
|     KdMarkSync (pScreen); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsDrawDisable (ScreenPtr pScreen) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsDrawFini (ScreenPtr pScreen) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void | ||||
| chipsDrawSync (ScreenPtr pScreen) | ||||
| { | ||||
|     chipsSet (pScreen); | ||||
|     chipsWaitIdle (); | ||||
| } | ||||
|  | @ -0,0 +1,59 @@ | |||
| /*
 | ||||
|  * Id: chipsstub.c,v 1.1 1999/11/02 08:19:15 keithp Exp $ | ||||
|  * | ||||
|  * Copyright 1999 SuSE, Inc. | ||||
|  * | ||||
|  * Permission to use, copy, modify, distribute, and sell this software and its | ||||
|  * documentation for any purpose is hereby granted without fee, provided that | ||||
|  * the above copyright notice appear in all copies and that both that | ||||
|  * copyright notice and this permission notice appear in supporting | ||||
|  * documentation, and that the name of SuSE not be used in advertising or | ||||
|  * publicity pertaining to distribution of the software without specific, | ||||
|  * written prior permission.  SuSE makes no representations about the | ||||
|  * suitability of this software for any purpose.  It is provided "as is" | ||||
|  * without express or implied warranty. | ||||
|  * | ||||
|  * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE | ||||
|  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||
|  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | ||||
|  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN  | ||||
|  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||
|  * | ||||
|  * Author:  Keith Packard, SuSE, Inc. | ||||
|  */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/chips/chipsstub.c,v 1.5 2000/11/29 08:42:25 keithp Exp $ */ | ||||
| 
 | ||||
| #include "chips.h" | ||||
| 
 | ||||
| extern int  chips_clk, chips_mclk; | ||||
| 
 | ||||
| void | ||||
| InitCard (char *name) | ||||
| { | ||||
|     KdCardAttr	attr; | ||||
| 
 | ||||
|     KdCardInfoAdd (&chipsFuncs, &attr, 0); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) | ||||
| { | ||||
|     KdInitOutput (pScreenInfo, argc, argv); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| InitInput (int argc, char **argv) | ||||
| { | ||||
|     KdInitInput (&Ps2MouseFuncs, &LinuxKeyboardFuncs); | ||||
| } | ||||
| 
 | ||||
| int | ||||
| ddxProcessArgument (int argc, char **argv, int i) | ||||
| { | ||||
|     int	ret; | ||||
|      | ||||
|     if (!(ret = vesaProcessArgument (argc, argv, i))) | ||||
| 	ret = KdProcessArgument(argc, argv, i); | ||||
|     return ret; | ||||
| } | ||||
|  | @ -19,7 +19,7 @@ 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. | ||||
| */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vbe.c,v 1.7 2000/11/19 20:51:12 keithp Exp $ */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vbe.c,v 1.9 2001/05/29 04:54:12 keithp Exp $ */ | ||||
| 
 | ||||
| #include "vesa.h" | ||||
| 
 | ||||
|  | @ -251,7 +251,7 @@ VbeGetMode(Vm86InfoPtr vi, int *mode) | |||
| } | ||||
| 
 | ||||
| void * | ||||
| VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *ret_size) | ||||
| VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *ret_size, CARD32 *ret_phys) | ||||
| { | ||||
|     U8			*fb; | ||||
|     VbeInfoBlock	vib; | ||||
|  | @ -270,6 +270,7 @@ VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *ret_size) | |||
|     size = 1024 * 64L * vib.TotalMemory; | ||||
|      | ||||
|     *ret_size = size; | ||||
|     *ret_phys = vmib.PhysBasePtr; | ||||
| 
 | ||||
|     before = vmib.PhysBasePtr % pagesize; | ||||
|     after = pagesize - ((vmib.PhysBasePtr + size) % pagesize); | ||||
|  | @ -501,6 +502,48 @@ windowB: | |||
|     return ((U8*)&(LM(vi, MAKE_POINTER(vbe->vmib.WinBSegment, 0)))) + offset - vbe->windowB_offset; | ||||
| } | ||||
| 
 | ||||
| static const int VbeDPMSModes[4] = { | ||||
|     0x00,	    /* KD_DPMS_NORMAL */ | ||||
|     0x01,	    /* KD_DPMS_STANDBY */ | ||||
|     0x02,	    /* KD_DPMS_SUSPEND */ | ||||
|     0x04,	    /* KD_DPMS_POWERDOWN */ | ||||
| }; | ||||
| 
 | ||||
| Bool | ||||
| VbeDPMS(Vm86InfoPtr vi, VbeInfoBlock *vib, int mode) | ||||
| { | ||||
|     int	code; | ||||
|      | ||||
|     /*
 | ||||
|      * Check which modes are supported | ||||
|      */ | ||||
|     vi->vms.regs.eax = 0x4f10; | ||||
|     vi->vms.regs.ebx = 0x0000; | ||||
|     vi->vms.regs.es = 0; | ||||
|     vi->vms.regs.edi = 0; | ||||
|     code = VbeDoInterrupt10 (vi); | ||||
|     if (code < 0) | ||||
|     { | ||||
| 	ErrorF ("No DPMS Support\n"); | ||||
| 	return FALSE; | ||||
|     } | ||||
|     /* Skip this stage if it's not supported */ | ||||
|     if (((vi->vms.regs.ebx >> 4) & VbeDPMSModes[mode]) != VbeDPMSModes[mode]) | ||||
| 	return FALSE; | ||||
|      | ||||
|     /* Select this mode */ | ||||
|     vi->vms.regs.eax = 0x4f10; | ||||
|     vi->vms.regs.ebx = (VbeDPMSModes[mode] << 8) | 0x01; | ||||
|     code = VbeDoInterrupt10 (vi); | ||||
|     if (code < 0) | ||||
|     { | ||||
| 	ErrorF ("DPMS failed %d\n", code); | ||||
| 	return FALSE; | ||||
|     } | ||||
|      | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| int  | ||||
| VbeReportVib(Vm86InfoPtr vi, VbeInfoBlock *vib) | ||||
| { | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ 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. | ||||
| */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vbe.h,v 1.5 2000/10/20 00:19:50 keithp Exp $ */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vbe.h,v 1.6 2001/05/29 04:54:12 keithp Exp $ */ | ||||
| 
 | ||||
| #ifndef _VBE_H | ||||
| #define _VBE_H | ||||
|  | @ -134,7 +134,7 @@ int | |||
| VbeGetMode(Vm86InfoPtr vi, int *mode); | ||||
| 
 | ||||
| void * | ||||
| VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *size); | ||||
| VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *size, CARD32 *phys); | ||||
| 
 | ||||
| void | ||||
| VbeUnmapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, void *fb); | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ 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. | ||||
| */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesa.c,v 1.15 2001/07/20 19:35:30 keithp Exp $ */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesa.c,v 1.16 2001/07/24 19:06:04 keithp Exp $ */ | ||||
| 
 | ||||
| #include "vesa.h" | ||||
| #ifdef RANDR | ||||
|  | @ -33,6 +33,7 @@ Bool vesa_shadow = FALSE; | |||
| Bool vesa_linear_fb = TRUE; | ||||
| Bool vesa_restore = FALSE; | ||||
| Bool vesa_verbose = FALSE; | ||||
| Bool vesa_force_text = FALSE; | ||||
| 
 | ||||
| #define VesaPriv(scr)	((VesaScreenPrivPtr) (scr)->driver) | ||||
| 
 | ||||
|  | @ -959,11 +960,13 @@ vesaMapFramebuffer (KdScreenInfo    *screen) | |||
| 	if (pscr->mode.vbe) | ||||
| 	    pscr->fb = VbeMapFramebuffer(priv->vi, priv->vbeInfo,  | ||||
| 					 pscr->mode.mode, | ||||
| 					 &pscr->fb_size); | ||||
| 					 &pscr->fb_size, | ||||
| 					 &pscr->fb_phys); | ||||
| 	else | ||||
| 	    pscr->fb = VgaMapFramebuffer (priv->vi,  | ||||
| 					  pscr->mode.mode, | ||||
| 					  &pscr->fb_size); | ||||
| 					  &pscr->fb_size, | ||||
| 					  &pscr->fb_phys); | ||||
| 	if (!pscr->fb) | ||||
| 	    return FALSE; | ||||
| 	break; | ||||
|  | @ -1451,11 +1454,13 @@ vesaEnable(ScreenPtr pScreen) | |||
| 	    if (pscr->mode.vbe) | ||||
| 		pscr->fb = VbeMapFramebuffer(priv->vi, priv->vbeInfo,  | ||||
| 					     pscr->mode.mode, | ||||
| 					     &pscr->fb_size); | ||||
| 					     &pscr->fb_size, | ||||
| 					     &pscr->fb_phys); | ||||
| 	    else | ||||
| 		pscr->fb = VgaMapFramebuffer (priv->vi,  | ||||
| 					      pscr->mode.mode, | ||||
| 					      &pscr->fb_size); | ||||
| 					      &pscr->fb_size, | ||||
| 					      &pscr->fb_phys); | ||||
| 	    if (!pscr->fb) | ||||
| 		return FALSE; | ||||
| 	    screen->fb[0].frameBuffer = (CARD8 *)(pscr->fb); | ||||
|  | @ -1501,6 +1506,77 @@ vesaEnable(ScreenPtr pScreen) | |||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| #ifndef TOSHIBA_SMM | ||||
| 
 | ||||
| # ifdef linux | ||||
| #  define TOSHIBA_SMM 1 | ||||
| # endif | ||||
| 
 | ||||
| # ifndef TOSHIBA_SMM | ||||
| #  define TOSHIBA_SMM 0 | ||||
| # endif | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #if TOSHIBA_SMM | ||||
| /*
 | ||||
|  * Toshiba laptops use a special interface to operate the backlight | ||||
|  */ | ||||
| #include <sys/ioctl.h> | ||||
| #define TOSH_PROC "/proc/toshiba" | ||||
| #define TOSH_DEVICE "/dev/toshiba" | ||||
| #define TOSH_SMM _IOWR('t', 0x90, 24) | ||||
| 
 | ||||
| typedef struct { | ||||
| 	unsigned int eax; | ||||
| 	unsigned int ebx __attribute__ ((packed)); | ||||
| 	unsigned int ecx __attribute__ ((packed)); | ||||
| 	unsigned int edx __attribute__ ((packed)); | ||||
| 	unsigned int esi __attribute__ ((packed)); | ||||
| 	unsigned int edi __attribute__ ((packed)); | ||||
| } SMMRegisters; | ||||
| 
 | ||||
| #define HCI_BACKLIGHT	0x0002 | ||||
| #define HCI_DISABLE	0x0000 | ||||
| #define HCI_ENABLE	0x0001 | ||||
| #define HCI_GET		0xfe00, | ||||
| #define HCI_SET		0xff00 | ||||
| 
 | ||||
| Bool | ||||
| toshibaDPMS (ScreenPtr pScreen, int mode) | ||||
| { | ||||
|     SMMRegisters    regs; | ||||
|     static int	    fd; | ||||
| 
 | ||||
|     if (!fd) | ||||
| 	fd = open (TOSH_DEVICE, 2); | ||||
|     if (fd < 0) | ||||
| 	return FALSE; | ||||
|     regs.eax = HCI_SET; | ||||
|     regs.ebx = HCI_BACKLIGHT; | ||||
|     regs.ecx = mode ? HCI_DISABLE : HCI_ENABLE; | ||||
|     if (ioctl (fd, TOSH_SMM, ®s) < 0) | ||||
| 	return FALSE; | ||||
|     return TRUE; | ||||
| } | ||||
| #endif /* TOSHIBA_SMM */ | ||||
| 
 | ||||
| Bool | ||||
| vesaDPMS (ScreenPtr pScreen, int mode) | ||||
| { | ||||
|     KdScreenPriv(pScreen); | ||||
|     VesaCardPrivPtr	priv = pScreenPriv->card->driver; | ||||
|     VesaScreenPrivPtr	pscr = pScreenPriv->screen->driver; | ||||
| 
 | ||||
| #if TOSHIBA_SMM | ||||
|     if (toshibaDPMS (pScreen, mode)) | ||||
| 	return TRUE; | ||||
| #endif | ||||
|     if (pscr->mode.vbe) | ||||
| 	return VbeDPMS (priv->vi, priv->vbeInfo, mode); | ||||
|     return FALSE; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| vesaDisable(ScreenPtr pScreen) | ||||
| { | ||||
|  | @ -1569,6 +1645,13 @@ vesaRestore(KdCardInfo *card) | |||
|     VesaCardPrivPtr priv = card->driver; | ||||
|     int		    n; | ||||
| 
 | ||||
|     if (vesa_force_text) | ||||
|     { | ||||
| 	if (vesa_verbose) | ||||
| 	    ErrorF ("Forcing switch back to mode 3 text\n"); | ||||
| 	priv->old_vbe_mode = -1; | ||||
| 	priv->old_vga_mode = 3; | ||||
|     } | ||||
|     for (n = 0; n < priv->nmode; n++) | ||||
| 	if (priv->modes[n].vbe && priv->modes[n].mode == (priv->old_vbe_mode&0x3fff)) | ||||
| 	    break; | ||||
|  | @ -1774,6 +1857,9 @@ vesaProcessArgument (int argc, char **argv, int i) | |||
|     } else if(!strcmp(argv[i], "-verbose")) { | ||||
| 	vesa_verbose = TRUE; | ||||
| 	return 1; | ||||
|     } else if(!strcmp(argv[i], "-force-text")) { | ||||
| 	vesa_force_text = TRUE; | ||||
| 	return 1; | ||||
|     } | ||||
|      | ||||
|     return 0; | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ 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. | ||||
| */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesa.h,v 1.10 2001/06/04 09:45:42 keithp Exp $ */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesa.h,v 1.11 2001/07/20 19:35:30 keithp Exp $ */ | ||||
| 
 | ||||
| #ifndef _VESA_H_ | ||||
| #define _VESA_H_ | ||||
|  | @ -101,6 +101,7 @@ typedef struct _VesaScreenPriv { | |||
|     int		layerKind; | ||||
|     void	*fb; | ||||
|     int		fb_size; | ||||
|     CARD32	fb_phys; | ||||
|     LayerPtr	pLayer; | ||||
| } VesaScreenPrivRec, *VesaScreenPrivPtr; | ||||
| 
 | ||||
|  | @ -137,6 +138,9 @@ vesaFinishInitScreen(ScreenPtr pScreen); | |||
| Bool | ||||
| vesaEnable(ScreenPtr pScreen); | ||||
| 
 | ||||
| Bool | ||||
| vesaDPMS (ScreenPtr pScreen, int mode); | ||||
| 
 | ||||
| void | ||||
| vesaDisable(ScreenPtr pScreen); | ||||
| 
 | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ 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. | ||||
| */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesainit.c,v 1.5 2000/12/08 21:40:29 keithp Exp $ */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesainit.c,v 1.6 2001/06/04 09:45:42 keithp Exp $ */ | ||||
| 
 | ||||
| #include "vesa.h" | ||||
| 
 | ||||
|  | @ -29,7 +29,7 @@ const KdCardFuncs vesaFuncs = { | |||
|     vesaInitScreen,             /* initScreen */ | ||||
|     vesaPreserve,               /* preserve */ | ||||
|     vesaEnable,                 /* enable */ | ||||
|     0,                          /* dpms */ | ||||
|     vesaDPMS,                   /* dpms */ | ||||
|     vesaDisable,                /* disable */ | ||||
|     vesaRestore,                /* restore */ | ||||
|     vesaScreenFini,             /* scrfini */ | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|  * $XFree86$ | ||||
|  * $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vga.c,v 1.1 2000/10/20 00:19:51 keithp Exp $ | ||||
|  * | ||||
|  * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. | ||||
|  * | ||||
|  | @ -225,12 +225,13 @@ VgaSetWindow (Vm86InfoPtr vi, int vmode, int bytes, int mode, int *size) | |||
| } | ||||
| 
 | ||||
| void * | ||||
| VgaMapFramebuffer (Vm86InfoPtr vi, int vmode, int *size) | ||||
| VgaMapFramebuffer (Vm86InfoPtr vi, int vmode, int *size, CARD32 *ret_phys) | ||||
| { | ||||
|     if (VGA_FB(vmode) == 0xa0000) | ||||
| 	*size = 0x10000; | ||||
|     else | ||||
| 	*size = 0x4000; | ||||
|     *ret_phys = VGA_FB(vmode); | ||||
|     return &LM(vi,VGA_FB(vmode)); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|  * $XFree86$ | ||||
|  * $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vga.h,v 1.1 2000/10/20 00:19:51 keithp Exp $ | ||||
|  * | ||||
|  * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. | ||||
|  * | ||||
|  | @ -53,7 +53,7 @@ void * | |||
| VgaSetWindow (Vm86InfoPtr vi, int vmode, int bytes, int mode, int *size); | ||||
|      | ||||
| void * | ||||
| VgaMapFramebuffer (Vm86InfoPtr vi, int vmode, int *size); | ||||
| VgaMapFramebuffer (Vm86InfoPtr vi, int vmode, int *size, CARD32 *phys); | ||||
| 
 | ||||
| void | ||||
| VgaUnmapFramebuffer (Vm86InfoPtr vi); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue