diff options
author | Martin-Éric Racine <martin-eric.racine@iki.fi> | 2012-07-11 15:39:25 +0300 |
---|---|---|
committer | Martin-Éric Racine <martin-eric.racine@iki.fi> | 2012-07-11 15:39:25 +0300 |
commit | 809bea08e3de8cf93306295f9e8f6b80efa46c65 (patch) | |
tree | a7f4aa0c3bcc81411e82793d4bb024afe19674f1 | |
parent | 4cf15cbff44217d0ef50fc9b2b1ace936becd010 (diff) |
-rw-r--r-- | ChangeLog | 59 | ||||
-rw-r--r-- | src/cyrix.h | 509 | ||||
-rw-r--r-- | src/cyrix_accel.c | 556 | ||||
-rw-r--r-- | src/cyrix_bank.c | 4 | ||||
-rw-r--r-- | src/cyrix_driver.c | 1098 | ||||
-rw-r--r-- | src/cyrix_helper.c | 529 | ||||
-rw-r--r-- | src/cyrix_shadow.c | 178 |
7 files changed, 1445 insertions, 1488 deletions
diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index 344113a..0000000 --- a/ChangeLog +++ /dev/null @@ -1,59 +0,0 @@ -2006-04-06 Adam Jackson <ajax@freedesktop.org> - - * configure.ac: - * src/cyrix.h: - * src/cyrix_accel.c: - * src/cyrix_bank.c: - * src/cyrix_driver.c: - * src/cyrix_helper.c: - * src/cyrix_shadow.c: - Unlibcwrap. Bump server version requirement. Bump to 1.1.0. - - * src/cyrix_driver.c: - VERSION -> CYRIX_VERSION - -2005-12-20 Kevin E. Martin <kem-at-freedesktop-dot-org> - - * configure.ac: - Update package version for X11R7 release. - -2005-12-14 Kevin E. Martin <kem-at-freedesktop-dot-org> - - * configure.ac: - Update package version number for final X11R7 release candidate. - -2005-12-06 Kevin E. Martin <kem-at-freedesktop-dot-org> - - * man/Makefile.am: - Change *man_SOURCES ==> *man_PRE to fix autotools warnings. - -2005-12-03 Kevin E. Martin <kem-at-freedesktop-dot-org> - - * configure.ac: - Update package version number for X11R7 RC3 release. - -2005-12-01 Kevin E. Martin <kem-at-freedesktop-dot-org> - - * configure.ac: - Remove extraneous AC_MSG_RESULT. - -2005-11-29 Adam Jackson <ajax@freedesktop.org> - - * configure.ac: - Only build dlloader modules by default. - -2005-11-15 Kevin E. Martin <kem-at-freedesktop-dot-org> - - * configure.ac: - Add check for DGA extension to fix issues when building with - separate build roots. - -2005-11-09 Kevin E. Martin <kem-at-freedesktop-dot-org> - - * configure.ac: - Update package version number for X11R7 RC2 release. - -2005-11-01 Kevin E. Martin <kem-at-freedesktop-dot-org> - - * configure.ac: - Update pkgcheck dependencies to work with separate build roots. diff --git a/src/cyrix.h b/src/cyrix.h index 04435e8..e925a86 100644 --- a/src/cyrix.h +++ b/src/cyrix.h @@ -55,7 +55,6 @@ /* XFree86 macros */ #define CYRIXPTR(p) ((CYRIXPrvPtr)((p)->driverPrivate)) - /* Driver specific structures */ typedef struct { unsigned char cyrixRegs3x4[0x100]; @@ -64,106 +63,106 @@ typedef struct { unsigned char cyrixRegsDAC[0x01]; unsigned char cyrixRegsClock[0x03]; unsigned char DacRegs[0x300]; - unsigned int Colormap[0x100]; /* Actually 18bit values */ + unsigned int Colormap[0x100]; /* Actually 18bit values */ } CYRIXRegRec, *CYRIXRegPtr; typedef struct { - /* extended SoftVGA registers */ - unsigned char VerticalTimingExtension; - unsigned char ExtendedAddressControl; - unsigned char ExtendedOffset; - unsigned char Offset; - unsigned char ExtendedColorControl; - unsigned char DisplayCompression; - unsigned char DriverControl; - unsigned char DACControl; - unsigned char ClockControl; - unsigned char CrtClockFrequency; - unsigned char CrtClockFrequencyFraction; - unsigned char RefreshRate; - - /* display controller hardware registers */ - CARD32 DcGeneralCfg; - CARD32 DcCursStOffset; - CARD32 DcCbStOffset; - CARD32 DcLineDelta; - CARD32 DcBufSize; - CARD32 DcCursorX; - CARD32 DcCursorY; - CARD32 DcCursorColor; - - /* graphics pipeline registers */ - CARD32 GpBlitStatus; - - /* save area for cursor image */ - char cursorPattern[256]; + /* extended SoftVGA registers */ + unsigned char VerticalTimingExtension; + unsigned char ExtendedAddressControl; + unsigned char ExtendedOffset; + unsigned char Offset; + unsigned char ExtendedColorControl; + unsigned char DisplayCompression; + unsigned char DriverControl; + unsigned char DACControl; + unsigned char ClockControl; + unsigned char CrtClockFrequency; + unsigned char CrtClockFrequencyFraction; + unsigned char RefreshRate; + + /* display controller hardware registers */ + CARD32 DcGeneralCfg; + CARD32 DcCursStOffset; + CARD32 DcCbStOffset; + CARD32 DcLineDelta; + CARD32 DcBufSize; + CARD32 DcCursorX; + CARD32 DcCursorY; + CARD32 DcCursorColor; + + /* graphics pipeline registers */ + CARD32 GpBlitStatus; + + /* save area for cursor image */ + char cursorPattern[256]; } prevExt; typedef struct { - /* struct for the server */ - CARD32 IOAccelAddress; - CARD32 FbAddress; - char* GXregisters; - int CYRIXcursorAddress; /* relative to fb base */ - int CYRIXbltBuf0Address;/*relative to GXregisters*/ - int CYRIXbltBuf1Address; - int CYRIXbltBufSize; - EntityInfoPtr pEnt; - unsigned char * FbBase; - struct pci_device * PciInfo; - XAAInfoRecPtr AccelInfoRec; - xf86CursorInfoPtr CursorInfoRec; - CloseScreenProcPtr CloseScreen; - int HwBpp; - int MinClock; - int MaxClock; - int Chipset; - int ChipRev; - int RamDac; - long FbMapSize; - short EngineOperation; - CYRIXRegRec SavedReg; - CYRIXRegRec ModeReg; - vgaHWRec std; - prevExt PrevExt; - Bool HWCursor; + /* struct for the server */ + CARD32 IOAccelAddress; + CARD32 FbAddress; + char *GXregisters; + int CYRIXcursorAddress; /* relative to fb base */ + int CYRIXbltBuf0Address; /*relative to GXregisters */ + int CYRIXbltBuf1Address; + int CYRIXbltBufSize; + EntityInfoPtr pEnt; + unsigned char *FbBase; + struct pci_device *PciInfo; + XAAInfoRecPtr AccelInfoRec; + xf86CursorInfoPtr CursorInfoRec; + CloseScreenProcPtr CloseScreen; + int HwBpp; + int MinClock; + int MaxClock; + int Chipset; + int ChipRev; + int RamDac; + long FbMapSize; + short EngineOperation; + CYRIXRegRec SavedReg; + CYRIXRegRec ModeReg; + vgaHWRec std; + prevExt PrevExt; + Bool HWCursor; /* Bool IsCyber; Bool NewClockCode;*/ - Bool NoAccel; - Bool NoCompress; - Bool ShadowFB; - unsigned char * ShadowPtr; - int ShadowPitch; - int Rotate; - void (*PointerMoved)(int index, int x, int y); - OptionInfoPtr Options; + Bool NoAccel; + Bool NoCompress; + Bool ShadowFB; + unsigned char *ShadowPtr; + int ShadowPitch; + int Rotate; + void (*PointerMoved) (int index, int x, int y); + OptionInfoPtr Options; /* accel stuff */ - int bltBufWidth; - int blitMode; - int vectorMode; - int transMode; - int copyXdir; - int setBlitModeOnSync; + int bltBufWidth; + int blitMode; + int vectorMode; + int transMode; + int copyXdir; + int setBlitModeOnSync; } CYRIXPrivate, *CYRIXPrvPtr; typedef struct { - vgaHWRec std; /* IBM VGA */ - prevExt ext; + vgaHWRec std; /* IBM VGA */ + prevExt ext; } CYRIXRec, *CYRIXPtr; /* Helper routines */ -extern void Cyrix1bppColorMap(ScrnInfoPtr pScrn); -extern int CyrixHWCursor(ScreenPtr pScr); -extern int CyrixInit(ScrnInfoPtr pScrn, DisplayModePtr mode); -extern void CyrixRestore(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg); -extern void * CyrixSave(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg); +extern void Cyrix1bppColorMap(ScrnInfoPtr pScrn); +extern int CyrixHWCursor(ScreenPtr pScr); +extern int CyrixInit(ScrnInfoPtr pScrn, DisplayModePtr mode); +extern void CyrixRestore(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg); +extern void *CyrixSave(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg); /* Shadow routines */ -extern void CYRIXRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); -extern void CYRIXPointerMoved(int index, int x, int y); -extern void CYRIXRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); -extern void CYRIXRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); +extern void CYRIXRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); +extern void CYRIXPointerMoved(int index, int x, int y); +extern void CYRIXRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); +extern void CYRIXRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); extern void CYRIXsetBlitBuffers(void); extern void CYRIXsetBlitBuffersOnOldChip(void); @@ -171,7 +170,6 @@ extern void CYRIXsetBlitBuffersOnOldChip(void); /* 32 bit access to GX registers */ #define GX_REG(a) (*(volatile CARD32*)(pCyrix->GXregisters + (a))) - /* externs in cyrix_accel.c */ extern void CYRIXAccelInit(ScreenPtr); @@ -180,7 +178,6 @@ extern void CYRIXAccelInit(ScreenPtr); #define CYRIXsetupSync() \ while (GX_REG(GP_BLIT_STATUS) & BS_BLIT_PENDING) - /* access macros to the graphics pipeline registers */ #define CYRIXsetSrcXY(x, y) \ GX_REG(GP_SRC_XCOOR) = (((y) << 16) | (x)) @@ -261,128 +258,128 @@ extern void CYRIXAccelInit(ScreenPtr); /* GRAPHICS PIPELINE REGISTER DEFINITIONS */ -#define GP_DST_XCOOR 0x8100 /* x destination origin */ -#define GP_DST_YCOOR 0x8102 /* y destination origin */ -#define GP_WIDTH 0x8104 /* pixel width */ -#define GP_HEIGHT 0x8106 /* pixel height */ -#define GP_SRC_XCOOR 0x8108 /* x source origin */ -#define GP_SRC_YCOOR 0x810A /* y source origin */ - -#define GP_VECTOR_LENGTH 0x8104 /* vector length */ -#define GP_INIT_ERROR 0x8106 /* vector initial error */ -#define GP_AXIAL_ERROR 0x8108 /* axial error increment */ -#define GP_DIAG_ERROR 0x810A /* diagonal error increment */ - -#define GP_SRC_COLOR_0 0x810C /* source color 0 */ -#define GP_SRC_COLOR_1 0x810E /* source color 1 */ -#define GP_PAT_COLOR_0 0x8110 /* pattern color 0 */ -#define GP_PAT_COLOR_1 0x8112 /* pattern color 1 */ -#define GP_PAT_COLOR_2 0x8114 /* pattern color 2 */ -#define GP_PAT_COLOR_3 0x8116 /* pattern color 3 */ -#define GP_PAT_DATA_0 0x8120 /* bits 31:0 of pattern */ -#define GP_PAT_DATA_1 0x8124 /* bits 63:32 of pattern */ -#define GP_PAT_DATA_2 0x8128 /* bits 95:64 of pattern */ -#define GP_PAT_DATA_3 0x812C /* bits 127:96 of pattern */ - -#define GP_RASTER_MODE 0x8200 /* raster operation */ -#define GP_VECTOR_MODE 0x8204 /* vector mode register */ -#define GP_BLIT_MODE 0x8208 /* blit mode register */ -#define GP_BLIT_STATUS 0x820C /* blit status register */ +#define GP_DST_XCOOR 0x8100 /* x destination origin */ +#define GP_DST_YCOOR 0x8102 /* y destination origin */ +#define GP_WIDTH 0x8104 /* pixel width */ +#define GP_HEIGHT 0x8106 /* pixel height */ +#define GP_SRC_XCOOR 0x8108 /* x source origin */ +#define GP_SRC_YCOOR 0x810A /* y source origin */ + +#define GP_VECTOR_LENGTH 0x8104 /* vector length */ +#define GP_INIT_ERROR 0x8106 /* vector initial error */ +#define GP_AXIAL_ERROR 0x8108 /* axial error increment */ +#define GP_DIAG_ERROR 0x810A /* diagonal error increment */ + +#define GP_SRC_COLOR_0 0x810C /* source color 0 */ +#define GP_SRC_COLOR_1 0x810E /* source color 1 */ +#define GP_PAT_COLOR_0 0x8110 /* pattern color 0 */ +#define GP_PAT_COLOR_1 0x8112 /* pattern color 1 */ +#define GP_PAT_COLOR_2 0x8114 /* pattern color 2 */ +#define GP_PAT_COLOR_3 0x8116 /* pattern color 3 */ +#define GP_PAT_DATA_0 0x8120 /* bits 31:0 of pattern */ +#define GP_PAT_DATA_1 0x8124 /* bits 63:32 of pattern */ +#define GP_PAT_DATA_2 0x8128 /* bits 95:64 of pattern */ +#define GP_PAT_DATA_3 0x812C /* bits 127:96 of pattern */ + +#define GP_RASTER_MODE 0x8200 /* raster operation */ +#define GP_VECTOR_MODE 0x8204 /* vector mode register */ +#define GP_BLIT_MODE 0x8208 /* blit mode register */ +#define GP_BLIT_STATUS 0x820C /* blit status register */ /* "GP_VECTOR_MODE" BIT DEFINITIONS */ -#define VM_X_MAJOR 0x0000 /* X major vector */ -#define VM_Y_MAJOR 0x0001 /* Y major vector */ -#define VM_MAJOR_INC 0x0002 /* positive major axis step */ -#define VM_MINOR_INC 0x0004 /* positive minor axis step */ -#define VM_READ_DST_FB 0x0008 /* read destination data */ +#define VM_X_MAJOR 0x0000 /* X major vector */ +#define VM_Y_MAJOR 0x0001 /* Y major vector */ +#define VM_MAJOR_INC 0x0002 /* positive major axis step */ +#define VM_MINOR_INC 0x0004 /* positive minor axis step */ +#define VM_READ_DST_FB 0x0008 /* read destination data */ /* "GP_RASTER_MODE" BIT DEFINITIONS */ -#define RM_PAT_DISABLE 0x0000 /* pattern is disabled */ -#define RM_PAT_MONO 0x0100 /* 1BPP pattern expansion */ -#define RM_PAT_DITHER 0x0200 /* 2BPP pattern expansion */ -#define RM_PAT_COLOR 0x0300 /* 8BPP or 16BPP pattern */ -#define RM_PAT_MASK 0x0300 /* mask for pattern mode */ -#define RM_PAT_TRANSPARENT 0x0400 /* transparent 1BPP pattern */ -#define RM_SRC_TRANSPARENT 0x0800 /* transparent 1BPP source */ -#define RM_CLIP_ENABLE 0x1000 /* enables clipping */ +#define RM_PAT_DISABLE 0x0000 /* pattern is disabled */ +#define RM_PAT_MONO 0x0100 /* 1BPP pattern expansion */ +#define RM_PAT_DITHER 0x0200 /* 2BPP pattern expansion */ +#define RM_PAT_COLOR 0x0300 /* 8BPP or 16BPP pattern */ +#define RM_PAT_MASK 0x0300 /* mask for pattern mode */ +#define RM_PAT_TRANSPARENT 0x0400 /* transparent 1BPP pattern */ +#define RM_SRC_TRANSPARENT 0x0800 /* transparent 1BPP source */ +#define RM_CLIP_ENABLE 0x1000 /* enables clipping */ /* "GP_BLIT_STATUS" BIT DEFINITIONS */ -#define BS_BLIT_BUSY 0x0001 /* blit engine is busy */ -#define BS_PIPELINE_BUSY 0x0002 /* graphics pipeline is bus */ -#define BS_BLIT_PENDING 0x0004 /* blit pending */ -#define BC_FLUSH 0x0080 /* flush pipeline requests */ -#define BC_8BPP 0x0000 /* 8BPP mode */ -#define BC_16BPP 0x0100 /* 16BPP mode */ -#define BC_FB_WIDTH_1024 0x0000 /* framebuffer width = 1024 */ -#define BC_FB_WIDTH_2048 0x0200 /* framebuffer width = 2048 */ +#define BS_BLIT_BUSY 0x0001 /* blit engine is busy */ +#define BS_PIPELINE_BUSY 0x0002 /* graphics pipeline is bus */ +#define BS_BLIT_PENDING 0x0004 /* blit pending */ +#define BC_FLUSH 0x0080 /* flush pipeline requests */ +#define BC_8BPP 0x0000 /* 8BPP mode */ +#define BC_16BPP 0x0100 /* 16BPP mode */ +#define BC_FB_WIDTH_1024 0x0000 /* framebuffer width = 1024 */ +#define BC_FB_WIDTH_2048 0x0200 /* framebuffer width = 2048 */ /* "GP_BLIT_MODE" BIT DEFINITIONS */ -#define BM_READ_SRC_NONE 0x0000 /* source foreground color */ -#define BM_READ_SRC_FB 0x0001 /* read source from FB */ -#define BM_READ_SRC_BB0 0x0002 /* read source from BB0 */ -#define BM_READ_SRC_BB1 0x0003 /* read source from BB1 */ -#define BM_READ_SRC_MASK 0x0003 /* read source mask */ +#define BM_READ_SRC_NONE 0x0000 /* source foreground color */ +#define BM_READ_SRC_FB 0x0001 /* read source from FB */ +#define BM_READ_SRC_BB0 0x0002 /* read source from BB0 */ +#define BM_READ_SRC_BB1 0x0003 /* read source from BB1 */ +#define BM_READ_SRC_MASK 0x0003 /* read source mask */ -#define BM_READ_DST_NONE 0x0000 /* no destination data */ -#define BM_READ_DST_BB0 0x0008 /* destination from BB0 */ -#define BM_READ_DST_BB1 0x000C /* destination from BB1 */ -#define BM_READ_DST_FB0 0x0010 /* dest from FB (store BB0) */ -#define BM_READ_DST_FB1 0x0014 /* dest from FB (store BB1)*/ -#define BM_READ_DST_MASK 0x001C /* read destination mask */ +#define BM_READ_DST_NONE 0x0000 /* no destination data */ +#define BM_READ_DST_BB0 0x0008 /* destination from BB0 */ +#define BM_READ_DST_BB1 0x000C /* destination from BB1 */ +#define BM_READ_DST_FB0 0x0010 /* dest from FB (store BB0) */ +#define BM_READ_DST_FB1 0x0014 /* dest from FB (store BB1) */ +#define BM_READ_DST_MASK 0x001C /* read destination mask */ -#define BM_WRITE_FB 0x0000 /* write to framebuffer */ -#define BM_WRITE_MEM 0x0020 /* write to memory */ -#define BM_WRITE_MASK 0x0020 /* write mask */ +#define BM_WRITE_FB 0x0000 /* write to framebuffer */ +#define BM_WRITE_MEM 0x0020 /* write to memory */ +#define BM_WRITE_MASK 0x0020 /* write mask */ -#define BM_SOURCE_COLOR 0x0000 /* source is 8BPP or 16BPP */ -#define BM_SOURCE_EXPAND 0x0040 /* source is 1BPP */ -#define BM_SOURCE_TEXT 0x00C0 /* source is 1BPP text */ -#define BM_SOURCE_MASK 0x00C0 /* source mask */ +#define BM_SOURCE_COLOR 0x0000 /* source is 8BPP or 16BPP */ +#define BM_SOURCE_EXPAND 0x0040 /* source is 1BPP */ +#define BM_SOURCE_TEXT 0x00C0 /* source is 1BPP text */ +#define BM_SOURCE_MASK 0x00C0 /* source mask */ -#define BM_REVERSE_Y 0x0100 /* reverse Y direction */ +#define BM_REVERSE_Y 0x0100 /* reverse Y direction */ /* DISPLAY CONTROLLER REGISTER DEFINITIONS */ -#define DC_UNLOCK 0x8300 /* lock register */ -#define DC_GENERAL_CFG 0x8304 /* config registers... */ +#define DC_UNLOCK 0x8300 /* lock register */ +#define DC_GENERAL_CFG 0x8304 /* config registers... */ #define DC_TIMING_CFG 0x8308 #define DC_OUTPUT_CFG 0x830C -#define DC_FB_ST_OFFSET 0x8310 /* framebuffer start offset */ -#define DC_CB_ST_OFFSET 0x8314 /* compression start offset */ -#define DC_CURS_ST_OFFSET 0x8318 /* cursor start offset*/ -#define DC_ICON_ST_OFFSET 0x831C /* icon start offset */ -#define DC_VID_ST_OFFSET 0x8320 /* video start offset */ -#define DC_LINE_DELTA 0x8324 /* fb and cb skip counts */ -#define DC_BUF_SIZE 0x8328 /* fb and cb line size */ +#define DC_FB_ST_OFFSET 0x8310 /* framebuffer start offset */ +#define DC_CB_ST_OFFSET 0x8314 /* compression start offset */ +#define DC_CURS_ST_OFFSET 0x8318 /* cursor start offset */ +#define DC_ICON_ST_OFFSET 0x831C /* icon start offset */ +#define DC_VID_ST_OFFSET 0x8320 /* video start offset */ +#define DC_LINE_DELTA 0x8324 /* fb and cb skip counts */ +#define DC_BUF_SIZE 0x8328 /* fb and cb line size */ -#define DC_H_TIMING_1 0x8330 /* horizontal timing... */ +#define DC_H_TIMING_1 0x8330 /* horizontal timing... */ #define DC_H_TIMING_2 0x8334 #define DC_H_TIMING_3 0x8338 #define DC_FP_H_TIMING 0x833C -#define DC_V_TIMING_1 0x8340 /* vertical timing... */ +#define DC_V_TIMING_1 0x8340 /* vertical timing... */ #define DC_V_TIMING_2 0x8344 #define DC_V_TIMING_3 0x8348 #define DC_FP_V_TIMING 0x834C -#define DC_CURSOR_X 0x8350 /* cursor x position */ -#define DC_ICON_X 0x8354 /* HACK - 1.3 definition */ -#define DC_V_LINE_CNT 0x8354 /* vertical line counter */ -#define DC_CURSOR_Y 0x8358 /* cursor y position */ -#define DC_ICON_Y 0x835C /* HACK - 1.3 definition */ -#define DC_SS_LINE_COMPARE 0x835C /* line compare value */ +#define DC_CURSOR_X 0x8350 /* cursor x position */ +#define DC_ICON_X 0x8354 /* HACK - 1.3 definition */ +#define DC_V_LINE_CNT 0x8354 /* vertical line counter */ +#define DC_CURSOR_Y 0x8358 /* cursor y position */ +#define DC_ICON_Y 0x835C /* HACK - 1.3 definition */ +#define DC_SS_LINE_COMPARE 0x835C /* line compare value */ -#define DC_CURSOR_COLOR 0x8360 /* cursor colors */ -#define DC_ICON_COLOR 0x8364 /* icon colors */ -#define DC_BORDER_COLOR 0x8368 /* border color */ +#define DC_CURSOR_COLOR 0x8360 /* cursor colors */ +#define DC_ICON_COLOR 0x8364 /* icon colors */ +#define DC_BORDER_COLOR 0x8368 /* border color */ -#define DC_PAL_ADDRESS 0x8370 /* palette address */ -#define DC_PAL_DATA 0x8374 /* palette data */ +#define DC_PAL_ADDRESS 0x8370 /* palette address */ +#define DC_PAL_DATA 0x8374 /* palette data */ /* PALETTE ADDRESS DEFINITIONS */ @@ -394,94 +391,92 @@ extern void CYRIXAccelInit(ScreenPtr); /* DC BIT DEFINITIONS */ -#define DC_UNLOCK_VALUE 0x00004758 /* used to unlock DC regs */ - -#define DC_GCFG_DFLE 0x00000001 /* display FIFO load enable */ -#define DC_GCFG_CURE 0x00000002 /* cursor enable */ -#define DC_GCFG_ICNE 0x00000004 /* HACK - 1.3 definition */ -#define DC_GCFG_PLNO 0x00000004 /* planar offset LSB */ -#define DC_GCFG_VIDE 0x00000008 /* HACK - 1.3 definition */ -#define DC_GCFG_PPC 0x00000008 /* pixel pan compatibility */ -#define DC_GCFG_CMPE 0x00000010 /* compression enable */ -#define DC_GCFG_DECE 0x00000020 /* decompression enable */ -#define DC_GCFG_DCLK_MASK 0x000000C0 /* dotclock multiplier */ -#define DC_GCFG_DCLK_POS 6 /* dotclock multiplier */ -#define DC_GCFG_DFHPSL_MASK 0x00000F00 /* FIFO high-priority start */ -#define DC_GCFG_DFHPSL_POS 8 /* FIFO high-priority start */ -#define DC_GCFG_DFHPEL_MASK 0x0000F000 /* FIFO high-priority end */ -#define DC_GCFG_DFHPEL_POS 12 /* FIFO high-priority end */ -#define DC_GCFG_CIM_MASK 0x00030000 /* compressor insert mode */ -#define DC_GCFG_CIM_POS 16 /* compressor insert mode */ -#define DC_GCFG_FDTY 0x00040000 /* frame dirty mode */ -#define DC_GCFG_RTPM 0x00080000 /* real-time perf. monitor */ -#define DC_GCFG_DAC_RS_MASK 0x00700000 /* DAC register selects */ -#define DC_GCFG_DAC_RS_POS 20 /* DAC register selects */ -#define DC_GCFG_CKWR 0x00800000 /* clock write */ -#define DC_GCFG_LDBL 0x01000000 /* line double */ -#define DC_GCFG_DIAG 0x02000000 /* FIFO diagnostic mode */ -#define DC_GCFG_CH4S 0x04000000 /* sparse refresh mode */ -#define DC_GCFG_SSLC 0x08000000 /* enable line compare */ -#define DC_GCFG_FBLC 0x10000000 /* enable fb offset compare */ -#define DC_GCFG_DFCK 0x20000000 /* divide flat-panel clock */ -#define DC_GCFG_DPCK 0x40000000 /* divide pixel clock */ -#define DC_GCFG_DDCK 0x80000000 /* divide dot clock */ - -#define DC_TCFG_FPPE 0x00000001 /* flat-panel power enable */ -#define DC_TCFG_HSYE 0x00000002 /* horizontal sync enable */ -#define DC_TCFG_VSYE 0x00000004 /* vertical sync enable */ -#define DC_TCFG_BLKE 0x00000008 /* blank enable */ -#define DC_TCFG_DDCK 0x00000010 /* DDC clock */ -#define DC_TCFG_TGEN 0x00000020 /* timing generator enable */ -#define DC_TCFG_VIEN 0x00000040 /* vertical interrupt enable */ -#define DC_TCFG_BLNK 0x00000080 /* blink enable */ -#define DC_TCFG_CHSP 0x00000100 /* horizontal sync polarity */ -#define DC_TCFG_CVSP 0x00000200 /* vertical sync polarity */ -#define DC_TCFG_FHSP 0x00000400 /* panel horz sync polarity */ -#define DC_TCFG_FVSP 0x00000800 /* panel vert sync polarity */ -#define DC_TCFG_FCEN 0x00001000 /* flat-panel centering */ -#define DC_TCFG_CDCE 0x00002000 /* HACK - 1.3 definition */ -#define DC_TCFG_PLNR 0x00002000 /* planar mode enable */ -#define DC_TCFG_INTL 0x00004000 /* interlace scan */ -#define DC_TCFG_PXDB 0x00008000 /* pixel double */ -#define DC_TCFG_BKRT 0x00010000 /* blink rate */ -#define DC_TCFG_PSD_MASK 0x000E0000 /* power sequence delay */ -#define DC_TCFG_PSD_POS 17 /* power sequence delay */ -#define DC_TCFG_DDCI 0x08000000 /* DDC input (RO) */ -#define DC_TCFG_SENS 0x10000000 /* monitor sense (RO) */ -#define DC_TCFG_DNA 0x20000000 /* display not active (RO) */ -#define DC_TCFG_VNA 0x40000000 /* vertical not active (RO) */ -#define DC_TCFG_VINT 0x80000000 /* vertical interrupt (RO) */ - -#define DC_OCFG_8BPP 0x00000001 /* 8/16 bpp select */ -#define DC_OCFG_555 0x00000002 /* 16 bpp format */ -#define DC_OCFG_PCKE 0x00000004 /* PCLK enable */ -#define DC_OCFG_FRME 0x00000008 /* frame rate mod enable */ -#define DC_OCFG_DITE 0x00000010 /* dither enable */ -#define DC_OCFG_2PXE 0x00000020 /* 2 pixel enable */ -#define DC_OCFG_2XCK 0x00000040 /* 2 x pixel clock */ -#define DC_OCFG_2IND 0x00000080 /* 2 index enable */ -#define DC_OCFG_34ADD 0x00000100 /* 3- or 4-bit add */ -#define DC_OCFG_FRMS 0x00000200 /* frame rate mod select */ -#define DC_OCFG_CKSL 0x00000400 /* clock select */ -#define DC_OCFG_PRMP 0x00000800 /* palette re-map */ -#define DC_OCFG_PDEL 0x00001000 /* panel data enable low */ -#define DC_OCFG_PDEH 0x00002000 /* panel data enable high */ -#define DC_OCFG_CFRW 0x00004000 /* comp line buffer r/w sel */ -#define DC_OCFG_DIAG 0x00008000 /* comp line buffer diag */ +#define DC_UNLOCK_VALUE 0x00004758 /* used to unlock DC regs */ + +#define DC_GCFG_DFLE 0x00000001 /* display FIFO load enable */ +#define DC_GCFG_CURE 0x00000002 /* cursor enable */ +#define DC_GCFG_ICNE 0x00000004 /* HACK - 1.3 definition */ +#define DC_GCFG_PLNO 0x00000004 /* planar offset LSB */ +#define DC_GCFG_VIDE 0x00000008 /* HACK - 1.3 definition */ +#define DC_GCFG_PPC 0x00000008 /* pixel pan compatibility */ +#define DC_GCFG_CMPE 0x00000010 /* compression enable */ +#define DC_GCFG_DECE 0x00000020 /* decompression enable */ +#define DC_GCFG_DCLK_MASK 0x000000C0 /* dotclock multiplier */ +#define DC_GCFG_DCLK_POS 6 /* dotclock multiplier */ +#define DC_GCFG_DFHPSL_MASK 0x00000F00 /* FIFO high-priority start */ +#define DC_GCFG_DFHPSL_POS 8 /* FIFO high-priority start */ +#define DC_GCFG_DFHPEL_MASK 0x0000F000 /* FIFO high-priority end */ +#define DC_GCFG_DFHPEL_POS 12 /* FIFO high-priority end */ +#define DC_GCFG_CIM_MASK 0x00030000 /* compressor insert mode */ +#define DC_GCFG_CIM_POS 16 /* compressor insert mode */ +#define DC_GCFG_FDTY 0x00040000 /* frame dirty mode */ +#define DC_GCFG_RTPM 0x00080000 /* real-time perf. monitor */ +#define DC_GCFG_DAC_RS_MASK 0x00700000 /* DAC register selects */ +#define DC_GCFG_DAC_RS_POS 20 /* DAC register selects */ +#define DC_GCFG_CKWR 0x00800000 /* clock write */ +#define DC_GCFG_LDBL 0x01000000 /* line double */ +#define DC_GCFG_DIAG 0x02000000 /* FIFO diagnostic mode */ +#define DC_GCFG_CH4S 0x04000000 /* sparse refresh mode */ +#define DC_GCFG_SSLC 0x08000000 /* enable line compare */ +#define DC_GCFG_FBLC 0x10000000 /* enable fb offset compare */ +#define DC_GCFG_DFCK 0x20000000 /* divide flat-panel clock */ +#define DC_GCFG_DPCK 0x40000000 /* divide pixel clock */ +#define DC_GCFG_DDCK 0x80000000 /* divide dot clock */ + +#define DC_TCFG_FPPE 0x00000001 /* flat-panel power enable */ +#define DC_TCFG_HSYE 0x00000002 /* horizontal sync enable */ +#define DC_TCFG_VSYE 0x00000004 /* vertical sync enable */ +#define DC_TCFG_BLKE 0x00000008 /* blank enable */ +#define DC_TCFG_DDCK 0x00000010 /* DDC clock */ +#define DC_TCFG_TGEN 0x00000020 /* timing generator enable */ +#define DC_TCFG_VIEN 0x00000040 /* vertical interrupt enable */ +#define DC_TCFG_BLNK 0x00000080 /* blink enable */ +#define DC_TCFG_CHSP 0x00000100 /* horizontal sync polarity */ +#define DC_TCFG_CVSP 0x00000200 /* vertical sync polarity */ +#define DC_TCFG_FHSP 0x00000400 /* panel horz sync polarity */ +#define DC_TCFG_FVSP 0x00000800 /* panel vert sync polarity */ +#define DC_TCFG_FCEN 0x00001000 /* flat-panel centering */ +#define DC_TCFG_CDCE 0x00002000 /* HACK - 1.3 definition */ +#define DC_TCFG_PLNR 0x00002000 /* planar mode enable */ +#define DC_TCFG_INTL 0x00004000 /* interlace scan */ +#define DC_TCFG_PXDB 0x00008000 /* pixel double */ +#define DC_TCFG_BKRT 0x00010000 /* blink rate */ +#define DC_TCFG_PSD_MASK 0x000E0000 /* power sequence delay */ +#define DC_TCFG_PSD_POS 17 /* power sequence delay */ +#define DC_TCFG_DDCI 0x08000000 /* DDC input (RO) */ +#define DC_TCFG_SENS 0x10000000 /* monitor sense (RO) */ +#define DC_TCFG_DNA 0x20000000 /* display not active (RO) */ +#define DC_TCFG_VNA 0x40000000 /* vertical not active (RO) */ +#define DC_TCFG_VINT 0x80000000 /* vertical interrupt (RO) */ + +#define DC_OCFG_8BPP 0x00000001 /* 8/16 bpp select */ +#define DC_OCFG_555 0x00000002 /* 16 bpp format */ +#define DC_OCFG_PCKE 0x00000004 /* PCLK enable */ +#define DC_OCFG_FRME 0x00000008 /* frame rate mod enable */ +#define DC_OCFG_DITE 0x00000010 /* dither enable */ +#define DC_OCFG_2PXE 0x00000020 /* 2 pixel enable */ +#define DC_OCFG_2XCK 0x00000040 /* 2 x pixel clock */ +#define DC_OCFG_2IND 0x00000080 /* 2 index enable */ +#define DC_OCFG_34ADD 0x00000100 /* 3- or 4-bit add */ +#define DC_OCFG_FRMS 0x00000200 /* frame rate mod select */ +#define DC_OCFG_CKSL 0x00000400 /* clock select */ +#define DC_OCFG_PRMP 0x00000800 /* palette re-map */ +#define DC_OCFG_PDEL 0x00001000 /* panel data enable low */ +#define DC_OCFG_PDEH 0x00002000 /* panel data enable high */ +#define DC_OCFG_CFRW 0x00004000 /* comp line buffer r/w sel */ +#define DC_OCFG_DIAG 0x00008000 /* comp line buffer diag */ /* MC REGISTER DEFINITIONS */ -#define MC_GBASE_ADD 0x8414 /* Graphics mem base address */ -#define MC_DR_ADD 0x8418 /* Dirty RAM address index */ -#define MC_DR_ACC 0x841C /* Dirty RAM memory access */ -#define MC_RAMDAC_ACC 0x8420 /* RAMDAC register access */ +#define MC_GBASE_ADD 0x8414 /* Graphics mem base address */ +#define MC_DR_ADD 0x8418 /* Dirty RAM address index */ +#define MC_DR_ACC 0x841C /* Dirty RAM memory access */ +#define MC_RAMDAC_ACC 0x8420 /* RAMDAC register access */ /* CPU REGISTER REGISTER DEFINITIONS */ -#define BB0_BASE 0xFFFFFF0C /* Blit buffer 0 base */ -#define BB1_BASE 0xFFFFFF1C /* Blit buffer 1 base */ - - +#define BB0_BASE 0xFFFFFF0C /* Blit buffer 0 base */ +#define BB1_BASE 0xFFFFFF1C /* Blit buffer 1 base */ /* SoftVGA CRTC register indices and bit definitions */ @@ -530,4 +525,4 @@ extern void CYRIXAccelInit(ScreenPtr); #define CLKCT_GENDAC_ICS5342 0x00 #define CLKCT_GENDAC_MASK 0x07 -#endif /* _CYRIX_H_ */ +#endif /* _CYRIX_H_ */ diff --git a/src/cyrix_accel.c b/src/cyrix_accel.c index b76b924..0dffb35 100644 --- a/src/cyrix_accel.c +++ b/src/cyrix_accel.c @@ -48,128 +48,127 @@ bits 3 - 0 and 7 - 4 in Windows style ROP). In some routines, the role of source and pattern is inverted. */ static const int windowsROPpatMask[16] = { 0x0A, 0x8A, 0x4A, 0xCA, - 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, - 0x3A, 0xBA, 0x7A, 0xFA }; + 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, + 0x3A, 0xBA, 0x7A, 0xFA +}; static const int windowsROPsrcMask[16] = { 0x22, 0xA2, 0x62, 0xE2, - 0x2A, 0xAA, 0x6A, 0xEA, - 0x26, 0xA6, 0x66, 0xE6, - 0x2E, 0xAE, 0x6E, 0xEE }; + 0x2A, 0xAA, 0x6A, 0xEA, + 0x26, 0xA6, 0x66, 0xE6, + 0x2E, 0xAE, 0x6E, 0xEE +}; /* Forward declaration of functions used in the driver */ void CYRIXAccelSync(ScrnInfoPtr pScrn); void CYRIXSetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop, - unsigned int planemask); + unsigned int planemask); void CYRIXSubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y, - int w, int h); + int w, int h); void CYRIXSetupForScreenToScreenCopy(ScrnInfoPtr, int xdir, int ydir, - int rop, unsigned int planemask, int transparency_color); + int rop, unsigned int planemask, + int transparency_color); void CYRIXSubsequentScreenToScreenCopy(ScrnInfoPtr, int x1, int y1, int x2, - int y2, int w, int h); -void CYRIXSubsequentBresenhamLine(ScrnInfoPtr pScrn,int x1, int y1, - int e1, int e2, int err, int length, - int octant); + int y2, int w, int h); +void CYRIXSubsequentBresenhamLine(ScrnInfoPtr pScrn, int x1, int y1, int e1, + int e2, int err, int length, int octant); void CYRIXSetupForColor8x8PatternFillRect(ScrnInfoPtr pScrn, int patternx, - int patterny, int rop, unsigned int planemask, int transparency_color); + int patterny, int rop, + unsigned int planemask, + int transparency_color); void CYRIXSubsequentColor8x8PatternFillRect(ScrnInfoPtr pScrn, int patternx, - int patterny, int x, int y, int w, int h); -void CYRIXSetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int fg, - int bg, int rop, unsigned int planemask); -void CYRIXSubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int x, - int y, int w, int h, int skipleft); + int patterny, int x, int y, int w, + int h); +void CYRIXSetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int fg, int bg, + int rop, unsigned int planemask); +void CYRIXSubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int x, int y, + int w, int h, int skipleft); void InitPixmapCache(ScreenPtr pScreen, RegionPtr areas, pointer data); + /* Info Rec for all these routines to use */ /* Acceleration init function, sets up pointers to our accelerated functions */ -void -CYRIXAccelInit(ScreenPtr pScreen) -{ /* General acceleration flags */ - - CYRIXPrvPtr pCyrix; - ScrnInfoPtr pScrn; - XAAInfoRecPtr localRecPtr; - - pScrn = xf86Screens[pScreen->myNum]; - pCyrix = CYRIXPTR(pScrn); - pCyrix->AccelInfoRec = localRecPtr = XAACreateInfoRec(); - localRecPtr->Flags = PIXMAP_CACHE - | PW_BACKGROUND -#if 0 - | HARDWARE_PATTERN_MONO_TRANSPARENCY -#endif - | HARDWARE_PATTERN_SCREEN_ORIGIN - | BIT_ORDER_IN_BYTE_MSBFIRST - | HARDWARE_PATTERN_PROGRAMMED_BITS; - - /* Sync */ - localRecPtr->Sync = CYRIXAccelSync; - - /* Filled rectangles */ - localRecPtr->SetupForSolidFill = - CYRIXSetupForSolidFill; - localRecPtr->SubsequentSolidFillRect = - CYRIXSubsequentSolidFillRect; - pCyrix->AccelInfoRec->PolyFillRectSolidFlags = NO_PLANEMASK; - - /* ScreenToScreen copies */ - localRecPtr->SetupForScreenToScreenCopy = - CYRIXSetupForScreenToScreenCopy; - localRecPtr->SubsequentScreenToScreenCopy = - CYRIXSubsequentScreenToScreenCopy; +void +CYRIXAccelInit(ScreenPtr pScreen) +{ /* General acceleration flags */ - pCyrix->AccelInfoRec->CopyAreaFlags = NO_PLANEMASK | GXCOPY_ONLY; + CYRIXPrvPtr pCyrix; + ScrnInfoPtr pScrn; + XAAInfoRecPtr localRecPtr; + pScrn = xf86Screens[pScreen->myNum]; + pCyrix = CYRIXPTR(pScrn); + pCyrix->AccelInfoRec = localRecPtr = XAACreateInfoRec(); + localRecPtr->Flags = PIXMAP_CACHE | PW_BACKGROUND #if 0 - /* Bresenham lines - disable because of minor display errors */ - localRecPtr->SubsequentBresenhamLine = - CYRIXSubsequentBresenhamLine; - localRecPtr->ErrorTermBits = 15; + | HARDWARE_PATTERN_MONO_TRANSPARENCY #endif + | HARDWARE_PATTERN_SCREEN_ORIGIN + | BIT_ORDER_IN_BYTE_MSBFIRST | HARDWARE_PATTERN_PROGRAMMED_BITS; - /* 8x8 color-expanded patterns */ - localRecPtr->SetupForColor8x8PatternFill = - CYRIXSetupForColor8x8PatternFillRect; - localRecPtr->SubsequentColor8x8PatternFillRect = - CYRIXSubsequentColor8x8PatternFillRect; + /* Sync */ + localRecPtr->Sync = CYRIXAccelSync; - /* Color expansion */ - localRecPtr->Color8x8PatternFillFlags = - BIT_ORDER_IN_BYTE_MSBFIRST | NO_PLANEMASK | - TRANSPARENCY_GXCOPY_ONLY | SCANLINE_PAD_DWORD; + /* Filled rectangles */ + localRecPtr->SetupForSolidFill = CYRIXSetupForSolidFill; + localRecPtr->SubsequentSolidFillRect = CYRIXSubsequentSolidFillRect; + pCyrix->AccelInfoRec->PolyFillRectSolidFlags = NO_PLANEMASK; - /* Use two blit buffers in a row for text expansion - (this is an undefendable fix to a text display distortion - bug if we don't give XAA enough room, but the only thing that - seems to make it work properly) */ - localRecPtr->ColorExpandBase = - (unsigned char*)(pCyrix->GXregisters + pCyrix->CYRIXbltBuf0Address); - localRecPtr->ColorExpandRange = - pCyrix->CYRIXbltBufSize * 2; + /* ScreenToScreen copies */ + localRecPtr->SetupForScreenToScreenCopy = CYRIXSetupForScreenToScreenCopy; + localRecPtr->SubsequentScreenToScreenCopy = + CYRIXSubsequentScreenToScreenCopy; - localRecPtr->SetupForCPUToScreenColorExpandFill = - CYRIXSetupForCPUToScreenColorExpandFill; - localRecPtr->SubsequentCPUToScreenColorExpandFill = - CYRIXSubsequentCPUToScreenColorExpandFill; + pCyrix->AccelInfoRec->CopyAreaFlags = NO_PLANEMASK | GXCOPY_ONLY; - /* calculate the pixel width of a blit buffer for convenience */ - pCyrix->bltBufWidth = pCyrix->CYRIXbltBufSize / (pScrn->bitsPerPixel / 8); -} +#if 0 + /* Bresenham lines - disable because of minor display errors */ + localRecPtr->SubsequentBresenhamLine = CYRIXSubsequentBresenhamLine; + localRecPtr->ErrorTermBits = 15; +#endif + /* 8x8 color-expanded patterns */ + localRecPtr->SetupForColor8x8PatternFill = + CYRIXSetupForColor8x8PatternFillRect; + localRecPtr->SubsequentColor8x8PatternFillRect = + CYRIXSubsequentColor8x8PatternFillRect; + + /* Color expansion */ + localRecPtr->Color8x8PatternFillFlags = + BIT_ORDER_IN_BYTE_MSBFIRST | NO_PLANEMASK | + TRANSPARENCY_GXCOPY_ONLY | SCANLINE_PAD_DWORD; + + /* Use two blit buffers in a row for text expansion + (this is an undefendable fix to a text display distortion + bug if we don't give XAA enough room, but the only thing that + seems to make it work properly) */ + localRecPtr->ColorExpandBase = + (unsigned char *) (pCyrix->GXregisters + pCyrix->CYRIXbltBuf0Address); + localRecPtr->ColorExpandRange = pCyrix->CYRIXbltBufSize * 2; + + localRecPtr->SetupForCPUToScreenColorExpandFill = + CYRIXSetupForCPUToScreenColorExpandFill; + localRecPtr->SubsequentCPUToScreenColorExpandFill = + CYRIXSubsequentCPUToScreenColorExpandFill; + + /* calculate the pixel width of a blit buffer for convenience */ + pCyrix->bltBufWidth = pCyrix->CYRIXbltBufSize / (pScrn->bitsPerPixel / 8); +} /* set colors - called through access macros in cyrix.h */ -static __inline__ void CYRIXsetColors01(ScrnInfoPtr pScrn, int reg, - int col0, int col1) { - CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); - - if (pScrn->bitsPerPixel == 16) - GX_REG(reg) = ((col1 & 0xFFFF) << 16) | (col0 & 0xFFFF); - else - { col0 &= 0xFF; - col1 &= 0xFF; - GX_REG(reg) = (col1 << 24) | (col1 << 16) | (col0 << 8) | col0; -} } +static __inline__ void +CYRIXsetColors01(ScrnInfoPtr pScrn, int reg, int col0, int col1) +{ + CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); + if (pScrn->bitsPerPixel == 16) + GX_REG(reg) = ((col1 & 0xFFFF) << 16) | (col0 & 0xFFFF); + else { + col0 &= 0xFF; + col1 &= 0xFF; + GX_REG(reg) = (col1 << 24) | (col1 << 16) | (col0 << 8) | col0; + } +} /* The generic Sync() function that waits for everything to be completed (e.g. before writing to the frame buffer @@ -178,42 +177,40 @@ void CYRIXAccelSync(ScrnInfoPtr pScrn) { CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); - - if (pCyrix->setBlitModeOnSync) - { pCyrix->setBlitModeOnSync = 0; - CYRIXsetupSync(); - CYRIXsetBlitMode(); - } - while (GX_REG(GP_BLIT_STATUS) & - (BS_BLIT_BUSY|BS_PIPELINE_BUSY|BS_BLIT_PENDING)); -} + if (pCyrix->setBlitModeOnSync) { + pCyrix->setBlitModeOnSync = 0; + CYRIXsetupSync(); + CYRIXsetBlitMode(); + } + while (GX_REG(GP_BLIT_STATUS) & + (BS_BLIT_BUSY | BS_PIPELINE_BUSY | BS_BLIT_PENDING)); +} /* Solid rectangles */ -void +void CYRIXSetupForSolidFill(pScrn, color, rop, planemask) ScrnInfoPtr pScrn; int color, rop; unsigned int planemask; { - CYRIXPrvPtr pCyrix; - - pCyrix = CYRIXPTR(pScrn); - if (pCyrix->AccelInfoRec->PolyFillRectSolidFlags & GXCOPY_ONLY) - rop = GXcopy; - if (pCyrix->AccelInfoRec->PolyFillRectSolidFlags & NO_PLANEMASK) - planemask = 0xFFFF; - CYRIXsetupSync(); - CYRIXsetSourceColors01(pScrn, color, color); - CYRIXsetPatColors01(pScrn, planemask, 0); - CYRIXsetPatMode(rop, RM_PAT_DISABLE); - pCyrix->blitMode = BM_READ_SRC_NONE | BM_WRITE_FB | BM_SOURCE_EXPAND - | IfDest(rop, planemask, BM_READ_DST_FB0); - pCyrix->vectorMode = IfDest(rop, planemask, VM_READ_DST_FB); + CYRIXPrvPtr pCyrix; + + pCyrix = CYRIXPTR(pScrn); + if (pCyrix->AccelInfoRec->PolyFillRectSolidFlags & GXCOPY_ONLY) + rop = GXcopy; + if (pCyrix->AccelInfoRec->PolyFillRectSolidFlags & NO_PLANEMASK) + planemask = 0xFFFF; + CYRIXsetupSync(); + CYRIXsetSourceColors01(pScrn, color, color); + CYRIXsetPatColors01(pScrn, planemask, 0); + CYRIXsetPatMode(rop, RM_PAT_DISABLE); + pCyrix->blitMode = BM_READ_SRC_NONE | BM_WRITE_FB | BM_SOURCE_EXPAND + | IfDest(rop, planemask, BM_READ_DST_FB0); + pCyrix->vectorMode = IfDest(rop, planemask, VM_READ_DST_FB); } - - -void + +void CYRIXSubsequentSolidFillRect(pScrn, x, y, w, h) ScrnInfoPtr pScrn; int x, y, w, h; @@ -221,143 +218,155 @@ int x, y, w, h; CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); /* divide the operation into columns if required; use twice the - blit buffer width because buffer 0 will overflow into buffer 1 */ - while (w > 2 * pCyrix->bltBufWidth) - { CYRIXSubsequentSolidFillRect(pScrn, x, y, - 2 * pCyrix->bltBufWidth, h); - x += 2 * pCyrix->bltBufWidth; - w -= 2 * pCyrix->bltBufWidth; - } - CYRIXsetupSync(); - CYRIXsetDstXY(x, y); - CYRIXsetWH(w, h); - CYRIXsetBlitMode(); + blit buffer width because buffer 0 will overflow into buffer 1 */ + while (w > 2 * pCyrix->bltBufWidth) { + CYRIXSubsequentSolidFillRect(pScrn, x, y, 2 * pCyrix->bltBufWidth, h); + x += 2 * pCyrix->bltBufWidth; + w -= 2 * pCyrix->bltBufWidth; + } + CYRIXsetupSync(); + CYRIXsetDstXY(x, y); + CYRIXsetWH(w, h); + CYRIXsetBlitMode(); } - /* Screen to screen copies */ -void +void CYRIXSetupForScreenToScreenCopy(pScrn, xdir, ydir, rop, - planemask, transparency_color) + planemask, transparency_color) ScrnInfoPtr pScrn; int xdir, ydir; int rop; unsigned int planemask; int transparency_color; { - CYRIXPrvPtr pCyrix; - - pCyrix = CYRIXPTR(pScrn); - if (pCyrix->AccelInfoRec->CopyAreaFlags & NO_PLANEMASK) - planemask = 0xFFFF; - if (pCyrix->AccelInfoRec->CopyAreaFlags & GXCOPY_ONLY) - rop = GXcopy; - if (pCyrix->AccelInfoRec->CopyAreaFlags & NO_TRANSPARENCY) - transparency_color = -1; - - CYRIXsetupSync(); - CYRIXsetPatColors01(pScrn, planemask, 0); - - if (transparency_color == -1) - { CYRIXsetPatMode(rop, RM_PAT_DISABLE); - pCyrix->transMode = 0; - } - else - { CYRIXsetPatModeTrans(RM_PAT_DISABLE); - pCyrix->transMode = 1; - - if (pCyrix->AccelInfoRec->CopyAreaFlags & - TRANSPARENCY_GXCOPY_ONLY) - rop = GXcopy; - - /* fill blit buffer 1 with the transparency color */ - if (pScrn->bitsPerPixel == 16) - { int k = pCyrix->CYRIXbltBufSize / 4; - CARD32 val = (transparency_color << 16) | - transparency_color; - volatile CARD32* buf = &(GX_REG(pCyrix->CYRIXbltBuf1Address)); - - while (--k >= 0) buf[k] = val; - } - else - memset(pCyrix->GXregisters + pCyrix->CYRIXbltBuf1Address, - transparency_color, pCyrix->CYRIXbltBufSize); - } - - pCyrix->blitMode = BM_READ_SRC_FB | BM_WRITE_FB | BM_SOURCE_COLOR - | (pCyrix->transMode ? BM_READ_DST_NONE : IfDest(rop, planemask, BM_READ_DST_FB1)) - | (ydir < 0 ? BM_REVERSE_Y : 0); - - pCyrix->copyXdir = xdir; + CYRIXPrvPtr pCyrix; + + pCyrix = CYRIXPTR(pScrn); + if (pCyrix->AccelInfoRec->CopyAreaFlags & NO_PLANEMASK) + planemask = 0xFFFF; + if (pCyrix->AccelInfoRec->CopyAreaFlags & GXCOPY_ONLY) + rop = GXcopy; + if (pCyrix->AccelInfoRec->CopyAreaFlags & NO_TRANSPARENCY) + transparency_color = -1; + + CYRIXsetupSync(); + CYRIXsetPatColors01(pScrn, planemask, 0); + + if (transparency_color == -1) { + CYRIXsetPatMode(rop, RM_PAT_DISABLE); + pCyrix->transMode = 0; + } + else { + CYRIXsetPatModeTrans(RM_PAT_DISABLE); + pCyrix->transMode = 1; + + if (pCyrix->AccelInfoRec->CopyAreaFlags & TRANSPARENCY_GXCOPY_ONLY) + rop = GXcopy; + + /* fill blit buffer 1 with the transparency color */ + if (pScrn->bitsPerPixel == 16) { + int k = pCyrix->CYRIXbltBufSize / 4; + CARD32 val = (transparency_color << 16) | transparency_color; + volatile CARD32 *buf = &(GX_REG(pCyrix->CYRIXbltBuf1Address)); + + while (--k >= 0) + buf[k] = val; + } + else + memset(pCyrix->GXregisters + pCyrix->CYRIXbltBuf1Address, + transparency_color, pCyrix->CYRIXbltBufSize); + } + + pCyrix->blitMode = BM_READ_SRC_FB | BM_WRITE_FB | BM_SOURCE_COLOR + | (pCyrix->transMode ? BM_READ_DST_NONE : IfDest(rop, planemask, + BM_READ_DST_FB1)) + | (ydir < 0 ? BM_REVERSE_Y : 0); + + pCyrix->copyXdir = xdir; } -void +void CYRIXSubsequentScreenToScreenCopy(pScrn, x1, y1, x2, y2, w, h) ScrnInfoPtr pScrn; int x1, y1, x2, y2, w, h; { CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); - int up = (pCyrix->blitMode & BM_REVERSE_Y); - - /* divide the operation into columns when necessary */ - if (pCyrix->copyXdir < 0) - { int x_offset = w - pCyrix->bltBufWidth; - - while (x_offset > 0) - { CYRIXSubsequentScreenToScreenCopy(pScrn, x1 + x_offset, y1, - x2 + x_offset, y2, - pCyrix->bltBufWidth, h); - x_offset -= pCyrix->bltBufWidth; - w -= pCyrix->bltBufWidth; - } } - else while (w > pCyrix->bltBufWidth) - { CYRIXSubsequentScreenToScreenCopy(pScrn, x1, y1, x2, y2, - pCyrix->bltBufWidth, h); - x1 += pCyrix->bltBufWidth; - x2 += pCyrix->bltBufWidth; - w -= pCyrix->bltBufWidth; - } - - CYRIXsetupSync(); - CYRIXsetSrcXY(x1, (up ? (y1 + h - 1) : y1)); - CYRIXsetDstXY(x2, (up ? (y2 + h - 1) : y2)); - - /* in transparent mode, one line reads the transparency color - into a processor-internal register, and the remaining lines - can be done in a single second pass */ - if (pCyrix->transMode) - { pCyrix->blitMode |= BM_READ_DST_BB1; - CYRIXsetWH(w, 1); - CYRIXsetBlitMode(); - h--; - if (!h) return; - if (up) { y1--; y2--; } - else { y1++; y2++; } - CYRIXsetupSync(); - pCyrix->blitMode &= ~(BM_READ_DST_BB1); - } - CYRIXsetWH(w, h); - CYRIXsetBlitMode(); -} + int up = (pCyrix->blitMode & BM_REVERSE_Y); + + /* divide the operation into columns when necessary */ + if (pCyrix->copyXdir < 0) { + int x_offset = w - pCyrix->bltBufWidth; + + while (x_offset > 0) { + CYRIXSubsequentScreenToScreenCopy(pScrn, x1 + x_offset, y1, + x2 + x_offset, y2, + pCyrix->bltBufWidth, h); + x_offset -= pCyrix->bltBufWidth; + w -= pCyrix->bltBufWidth; + } + } + else + while (w > pCyrix->bltBufWidth) { + CYRIXSubsequentScreenToScreenCopy(pScrn, x1, y1, x2, y2, + pCyrix->bltBufWidth, h); + x1 += pCyrix->bltBufWidth; + x2 += pCyrix->bltBufWidth; + w -= pCyrix->bltBufWidth; + } + CYRIXsetupSync(); + CYRIXsetSrcXY(x1, (up ? (y1 + h - 1) : y1)); + CYRIXsetDstXY(x2, (up ? (y2 + h - 1) : y2)); + + /* in transparent mode, one line reads the transparency color + into a processor-internal register, and the remaining lines + can be done in a single second pass */ + if (pCyrix->transMode) { + pCyrix->blitMode |= BM_READ_DST_BB1; + CYRIXsetWH(w, 1); + CYRIXsetBlitMode(); + h--; + if (!h) + return; + if (up) { + y1--; + y2--; + } + else { + y1++; + y2++; + } + CYRIXsetupSync(); + pCyrix->blitMode &= ~(BM_READ_DST_BB1); + } + CYRIXsetWH(w, h); + CYRIXsetBlitMode(); +} /* Bresenham lines */ void CYRIXSubsequentBresenhamLine(pScrn, x1, y1, e1, e2, err, length, octant) -ScrnInfoPtr pScrn; int x1, y1, octant, err, e1, e2, length; +ScrnInfoPtr pScrn; +int x1, y1, octant, err, e1, e2, length; { CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); - + if (octant & YMAJOR) { - pCyrix->vectorMode = (pCyrix->vectorMode & VM_READ_DST_FB) | VM_Y_MAJOR; - if (!(octant & XDECREASING)) pCyrix->vectorMode |= VM_MINOR_INC; - if (!(octant & YDECREASING)) pCyrix->vectorMode |= VM_MAJOR_INC; - } else { - pCyrix->vectorMode = (pCyrix->vectorMode & VM_READ_DST_FB) | VM_X_MAJOR; - if (!(octant & XDECREASING)) pCyrix->vectorMode |= VM_MAJOR_INC; - if (!(octant & YDECREASING)) pCyrix->vectorMode |= VM_MINOR_INC; + pCyrix->vectorMode = (pCyrix->vectorMode & VM_READ_DST_FB) | VM_Y_MAJOR; + if (!(octant & XDECREASING)) + pCyrix->vectorMode |= VM_MINOR_INC; + if (!(octant & YDECREASING)) + pCyrix->vectorMode |= VM_MAJOR_INC; + } + else { + pCyrix->vectorMode = (pCyrix->vectorMode & VM_READ_DST_FB) | VM_X_MAJOR; + if (!(octant & XDECREASING)) + pCyrix->vectorMode |= VM_MAJOR_INC; + if (!(octant & YDECREASING)) + pCyrix->vectorMode |= VM_MINOR_INC; } - + CYRIXsetupSync(); CYRIXsetDstXY(x1, y1); CYRIXsetWH(length, (err & 0xFFFF)); @@ -365,10 +374,10 @@ ScrnInfoPtr pScrn; int x1, y1, octant, err, e1, e2, length; CYRIXsetVectorMode(); } - /* 8x8 pattern color expand */ -void CYRIXSetupForColor8x8PatternFillRect(pScrn, patternx, patterny, - rop, planemask, transparency_color) +void +CYRIXSetupForColor8x8PatternFillRect(pScrn, patternx, patterny, + rop, planemask, transparency_color) ScrnInfoPtr pScrn; int patternx, patterny; int rop, transparency_color; @@ -376,35 +385,37 @@ unsigned int planemask; { CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); XAAInfoRecPtr localRecPtr = pCyrix->AccelInfoRec; - - if (localRecPtr->Color8x8PatternFillFlags & NO_PLANEMASK) - planemask = 0xFFFF; - if ((transparency_color == -1) && (localRecPtr->Color8x8PatternFillFlags & - TRANSPARENCY_GXCOPY_ONLY)) - rop = GXcopy; - - CYRIXsetupSync(); - CYRIXsetPatColors01(pScrn, (transparency_color == -1) ? - 0 : transparency_color, planemask); - CYRIXsetPatData(patternx, patterny); - CYRIXsetPatModeX(rop, RM_PAT_MONO | ((transparency_color == -1) ? - RM_PAT_TRANSPARENT : 0)); - - pCyrix->blitMode = BM_READ_SRC_NONE | BM_WRITE_FB | BM_SOURCE_EXPAND | - ((transparency_color == -1) ? - IfDest(rop, planemask, BM_READ_DST_FB0) : BM_READ_DST_NONE); + + if (localRecPtr->Color8x8PatternFillFlags & NO_PLANEMASK) + planemask = 0xFFFF; + if ((transparency_color == -1) && (localRecPtr->Color8x8PatternFillFlags & + TRANSPARENCY_GXCOPY_ONLY)) + rop = GXcopy; + + CYRIXsetupSync(); + CYRIXsetPatColors01(pScrn, (transparency_color == -1) ? + 0 : transparency_color, planemask); + CYRIXsetPatData(patternx, patterny); + CYRIXsetPatModeX(rop, RM_PAT_MONO | ((transparency_color == -1) ? + RM_PAT_TRANSPARENT : 0)); + + pCyrix->blitMode = BM_READ_SRC_NONE | BM_WRITE_FB | BM_SOURCE_EXPAND | + ((transparency_color == -1) ? + IfDest(rop, planemask, BM_READ_DST_FB0) : BM_READ_DST_NONE); } -void CYRIXSubsequentColor8x8PatternFillRect(pScrn, patternx, patterny, x, y, w, h) +void +CYRIXSubsequentColor8x8PatternFillRect(pScrn, patternx, patterny, x, y, w, h) ScrnInfoPtr pScrn; int patternx, patterny; int x, y, w, h; -{ CYRIXSubsequentSolidFillRect(pScrn, x, y, w, h); +{ + CYRIXSubsequentSolidFillRect(pScrn, x, y, w, h); } - /* CPU-to-screen color expansion */ -void CYRIXSetupForCPUToScreenColorExpandFill(pScrn, fg, bg, rop, planemask) +void +CYRIXSetupForCPUToScreenColorExpandFill(pScrn, fg, bg, rop, planemask) ScrnInfoPtr pScrn; int bg, fg, rop; unsigned int planemask; @@ -414,36 +425,37 @@ unsigned int planemask; int trans = (bg == -1); - if (trans && (localRecPtr->CPUToScreenColorExpandFillFlags & - TRANSPARENCY_GXCOPY_ONLY)) - rop = GXcopy; + if (trans && (localRecPtr->CPUToScreenColorExpandFillFlags & + TRANSPARENCY_GXCOPY_ONLY)) + rop = GXcopy; - CYRIXsetupSync(); - CYRIXsetSourceColors01(pScrn, trans ? 0 : bg, fg); - CYRIXsetPatColors01(pScrn, planemask, 0); + CYRIXsetupSync(); + CYRIXsetSourceColors01(pScrn, trans ? 0 : bg, fg); + CYRIXsetPatColors01(pScrn, planemask, 0); - CYRIXsetPatMode(rop, RM_PAT_DISABLE | (trans ? RM_SRC_TRANSPARENT : 0)); + CYRIXsetPatMode(rop, RM_PAT_DISABLE | (trans ? RM_SRC_TRANSPARENT : 0)); - /* this is formally incorrect: XAA may use both BB0 and BB1 - for the text source bitmap, so READ_DST_FB1 should not be - used. So far, this problem has not manifested itself in - practice. */ - pCyrix->blitMode = BM_READ_SRC_BB0 | BM_WRITE_FB | BM_SOURCE_EXPAND - | (trans ? IfDest(rop, planemask, BM_READ_DST_FB1) : BM_READ_DST_NONE); + /* this is formally incorrect: XAA may use both BB0 and BB1 + for the text source bitmap, so READ_DST_FB1 should not be + used. So far, this problem has not manifested itself in + practice. */ + pCyrix->blitMode = BM_READ_SRC_BB0 | BM_WRITE_FB | BM_SOURCE_EXPAND + | (trans ? IfDest(rop, planemask, BM_READ_DST_FB1) : BM_READ_DST_NONE); } -void CYRIXSubsequentCPUToScreenColorExpandFill(pScrn, x, y, w, h, skipleft) +void +CYRIXSubsequentCPUToScreenColorExpandFill(pScrn, x, y, w, h, skipleft) ScrnInfoPtr pScrn; int x, y, w, h; int skipleft; { CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); + CYRIXsetupSync(); CYRIXsetSrcXY(0, 0); CYRIXsetDstXY(x, y); CYRIXsetWH(w, h); - + CYRIXAccelSync(pScrn); pCyrix->setBlitModeOnSync = 1; } - diff --git a/src/cyrix_bank.c b/src/cyrix_bank.c index 580c23e..9d6381c 100644 --- a/src/cyrix_bank.c +++ b/src/cyrix_bank.c @@ -52,12 +52,11 @@ int CYRIXSetRead(ScreenPtr pScreen, int bank) -{ +{ outw(0x3D6, ((((bank << 3) & 0xFF) << 8) | 0x10)); return 0; } - int CYRIXSetWrite(ScreenPtr pScreen, int bank) { @@ -65,7 +64,6 @@ CYRIXSetWrite(ScreenPtr pScreen, int bank) return 0; } - int CYRIXSetReadWrite(ScreenPtr pScreen, int bank) { diff --git a/src/cyrix_driver.c b/src/cyrix_driver.c index 2261487..766a416 100644 --- a/src/cyrix_driver.c +++ b/src/cyrix_driver.c @@ -78,7 +78,7 @@ #ifdef XFreeXDGA #define _XF86DGA_SERVER_ -#include <X11/extensions/xf86dgastr.h> +#include <X11/extensions/xf86dgaproto.h> #endif #include "globals.h" @@ -90,41 +90,40 @@ #include <X11/extensions/dpms.h> #endif - - -static const OptionInfoRec * CYRIXAvailableOptions(int chip, int busid); -static void CYRIXIdentify(int flags); -static Bool CYRIXProbe(DriverPtr drv, int flags); -static Bool CYRIXPreInit(ScrnInfoPtr pScrn, int flags); -static Bool CYRIXScreenInit(int Index, ScreenPtr pScreen, int argc, - char **argv); -static Bool CYRIXEnterVT(int scrnIndex, int flags); -static void CYRIXLeaveVT(int scrnIndex, int flags); -static Bool CYRIXCloseScreen(int scrnIndex, ScreenPtr pScreen); -static Bool CYRIXSaveScreen(ScreenPtr pScreen, int mode); +static const OptionInfoRec *CYRIXAvailableOptions(int chip, int busid); +static void CYRIXIdentify(int flags); +static Bool CYRIXProbe(DriverPtr drv, int flags); +static Bool CYRIXPreInit(ScrnInfoPtr pScrn, int flags); +static Bool CYRIXScreenInit(int Index, ScreenPtr pScreen, int argc, + char **argv); +static Bool CYRIXEnterVT(int scrnIndex, int flags); +static void CYRIXLeaveVT(int scrnIndex, int flags); +static Bool CYRIXCloseScreen(int scrnIndex, ScreenPtr pScreen); +static Bool CYRIXSaveScreen(ScreenPtr pScreen, int mode); /* Required if the driver supports mode switching */ -static Bool CYRIXSwitchMode(int scrnIndex, DisplayModePtr mode, int flags); +static Bool CYRIXSwitchMode(int scrnIndex, DisplayModePtr mode, int flags); + /* Required if the driver supports moving the viewport */ -static void CYRIXAdjustFrame(int scrnIndex, int x, int y, int flags); +static void CYRIXAdjustFrame(int scrnIndex, int x, int y, int flags); /* Optional functions */ -static void CYRIXFreeScreen(int scrnIndex, int flags); -static int CYRIXFindIsaDevice(GDevPtr dev); +static void CYRIXFreeScreen(int scrnIndex, int flags); +static int CYRIXFindIsaDevice(GDevPtr dev); static ModeStatus CYRIXValidMode(int scrnIndex, DisplayModePtr mode, - Bool verbose, int flags); + Bool verbose, int flags); /* Internally used functions */ -static void CYRIXSave(ScrnInfoPtr pScrn); -static void CYRIXRestore(ScrnInfoPtr pScrn); -static Bool CYRIXModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode); -static void CYRIXRestorePalette(ScrnInfoPtr pScrn); -static void CYRIXSavePalette(ScrnInfoPtr pScrn); +static void CYRIXSave(ScrnInfoPtr pScrn); +static void CYRIXRestore(ScrnInfoPtr pScrn); +static Bool CYRIXModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode); +static void CYRIXRestorePalette(ScrnInfoPtr pScrn); +static void CYRIXSavePalette(ScrnInfoPtr pScrn); /* Misc additional routines */ -void CYRIXSetRead(int bank); -void CYRIXSetWrite(int bank); -void CYRIXSetReadWrite(int bank); +void CYRIXSetRead(int bank); +void CYRIXSetWrite(int bank); +void CYRIXSetReadWrite(int bank); #define CYRIX_VERSION 4000 #define CYRIX_NAME "CYRIX" @@ -157,15 +156,15 @@ _X_EXPORT DriverRec CYRIX = { }; static SymTabRec CYRIXChipsets[] = { - { CHIP_CYRIXmediagx, "mediagx" }, - { -1, NULL } + {CHIP_CYRIXmediagx, "mediagx"}, + {-1, NULL} }; static IsaChipsets CYRIXISAChipsets[] = { - { CHIP_CYRIXmediagx, RES_EXCLUSIVE_VGA }, - { -1, 0 } + {CHIP_CYRIXmediagx, RES_EXCLUSIVE_VGA}, + {-1, 0} }; - + typedef enum { OPTION_SW_CURSOR, OPTION_HW_CURSOR, @@ -176,13 +175,13 @@ typedef enum { } CYRIXOpts; static const OptionInfoRec CYRIXOptions[] = { - { OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE }, - { OPTION_HW_CURSOR, "HWcursor", OPTV_BOOLEAN, {0}, FALSE }, - { OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE }, - { OPTION_NOCOMPRESS, "NoCompression",OPTV_BOOLEAN, {0}, FALSE }, - { OPTION_SHADOW_FB, "ShadowFB", OPTV_BOOLEAN, {0}, FALSE }, - { OPTION_ROTATE, "Rotate", OPTV_ANYSTR, {0}, FALSE }, - { -1, NULL, OPTV_NONE, {0}, FALSE } + {OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE}, + {OPTION_HW_CURSOR, "HWcursor", OPTV_BOOLEAN, {0}, FALSE}, + {OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE}, + {OPTION_NOCOMPRESS, "NoCompression", OPTV_BOOLEAN, {0}, FALSE}, + {OPTION_SHADOW_FB, "ShadowFB", OPTV_BOOLEAN, {0}, FALSE}, + {OPTION_ROTATE, "Rotate", OPTV_ANYSTR, {0}, FALSE}, + {-1, NULL, OPTV_NONE, {0}, FALSE} }; static const char *vgahwSymbols[] = { @@ -230,7 +229,6 @@ static const char *vbeSymbols[] = { /* access to the MediaGX video hardware registers */ - /* DEBUG variables & flags */ #define ENTER TRUE #define LEAVE FALSE @@ -239,18 +237,17 @@ static const char *vbeSymbols[] = { static MODULESETUPPROTO(cyrixSetup); -static XF86ModuleVersionInfo cyrixVersRec = -{ - "cyrix", - MODULEVENDORSTRING, - MODINFOSTRING1, - MODINFOSTRING2, - XORG_VERSION_CURRENT, - CYRIX_MAJOR_VERSION, CYRIX_MINOR_VERSION, CYRIX_PATCHLEVEL, - ABI_CLASS_VIDEODRV, /* This is a video driver */ - ABI_VIDEODRV_VERSION, - MOD_CLASS_VIDEODRV, - {0,0,0,0} +static XF86ModuleVersionInfo cyrixVersRec = { + "cyrix", + MODULEVENDORSTRING, + MODINFOSTRING1, + MODINFOSTRING2, + XORG_VERSION_CURRENT, + CYRIX_MAJOR_VERSION, CYRIX_MINOR_VERSION, CYRIX_PATCHLEVEL, + ABI_CLASS_VIDEODRV, /* This is a video driver */ + ABI_VIDEODRV_VERSION, + MOD_CLASS_VIDEODRV, + {0, 0, 0, 0} }; _X_EXPORT XF86ModuleData cyrixModuleData = { &cyrixVersRec, cyrixSetup, NULL }; @@ -261,17 +258,19 @@ cyrixSetup(pointer module, pointer opts, int *errmaj, int *errmin) static Bool setupDone = FALSE; if (!setupDone) { - setupDone = TRUE; - xf86AddDriver(&CYRIX, module, 0); - LoaderRefSymLists(vgahwSymbols, fbSymbols, xaaSymbols, vbeSymbols, shadowSymbols, NULL); - return (pointer)TRUE; - } + setupDone = TRUE; + xf86AddDriver(&CYRIX, module, 0); + LoaderRefSymLists(vgahwSymbols, fbSymbols, xaaSymbols, vbeSymbols, + shadowSymbols, NULL); + return (pointer) TRUE; + } - if (errmaj) *errmaj = LDR_ONCEONLY; + if (errmaj) + *errmaj = LDR_ONCEONLY; return NULL; } -#endif /* XFree86LOADER */ +#endif /* XFree86LOADER */ static Bool CYRIXGetRec(ScrnInfoPtr pScrn) @@ -282,11 +281,11 @@ CYRIXGetRec(ScrnInfoPtr pScrn) * the allocation has already been done. */ if (pScrn->driverPrivate != NULL) - return TRUE; + return TRUE; pScrn->driverPrivate = xnfcalloc(sizeof(CYRIXPrivate), 1); if (pScrn->driverPrivate == NULL) - return FALSE; + return FALSE; return TRUE; } @@ -295,56 +294,58 @@ static void CYRIXFreeRec(ScrnInfoPtr pScrn) { if (pScrn->driverPrivate == NULL) - return; + return; free(pScrn->driverPrivate); pScrn->driverPrivate = NULL; } -static void -CYRIXDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags) +static void +CYRIXDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, + int flags) { unsigned char DPMSCont, PMCont, temp; + outb(0x3C4, 0x0E); temp = inb(0x3C5); outb(0x3C5, 0xC2); - outb(0x83C8, 0x04); /* Read DPMS Control */ - PMCont = inb(0x83C6) & 0xFC; - outb(0x3CE, 0x23); - DPMSCont = inb(0x3CF) & 0xFC; - switch (PowerManagementMode) - { - case DPMSModeOn: - /* Screen: On, HSync: On, VSync: On */ - PMCont |= 0x03; - DPMSCont |= 0x00; - break; - case DPMSModeStandby: - /* Screen: Off, HSync: Off, VSync: On */ - PMCont |= 0x02; - DPMSCont |= 0x01; - break; - case DPMSModeSuspend: - /* Screen: Off, HSync: On, VSync: Off */ - PMCont |= 0x02; - DPMSCont |= 0x02; - break; - case DPMSModeOff: - /* Screen: Off, HSync: Off, VSync: Off */ - PMCont |= 0x00; - DPMSCont |= 0x03; - break; - } - outb(0x3CF, DPMSCont); - outb(0x83C8, 0x04); - outb(0x83C6, PMCont); - outw(0x3C4, (temp<<8) | 0x0E); + outb(0x83C8, 0x04); /* Read DPMS Control */ + PMCont = inb(0x83C6) & 0xFC; + outb(0x3CE, 0x23); + DPMSCont = inb(0x3CF) & 0xFC; + switch (PowerManagementMode) { + case DPMSModeOn: + /* Screen: On, HSync: On, VSync: On */ + PMCont |= 0x03; + DPMSCont |= 0x00; + break; + case DPMSModeStandby: + /* Screen: Off, HSync: Off, VSync: On */ + PMCont |= 0x02; + DPMSCont |= 0x01; + break; + case DPMSModeSuspend: + /* Screen: Off, HSync: On, VSync: Off */ + PMCont |= 0x02; + DPMSCont |= 0x02; + break; + case DPMSModeOff: + /* Screen: Off, HSync: Off, VSync: Off */ + PMCont |= 0x00; + DPMSCont |= 0x03; + break; + } + outb(0x3CF, DPMSCont); + outb(0x83C8, 0x04); + outb(0x83C6, PMCont); + outw(0x3C4, (temp << 8) | 0x0E); } /* Mandatory */ static void CYRIXIdentify(int flags) { - xf86PrintChipsets(CYRIX_NAME, "driver for Cyrix MediaGX Processors", CYRIXChipsets); + xf86PrintChipsets(CYRIX_NAME, "driver for Cyrix MediaGX Processors", + CYRIXChipsets); } static const OptionInfoRec * @@ -359,10 +360,10 @@ CYRIXAvailableOptions(int chip, int busid) /* Conversion PCI ID to chipset name */ static PciChipsets CYRIXPCIchipsets[] = { - { CHIP_CYRIXmediagx, PCI_CHIP_CYRIX5510, RES_EXCLUSIVE_VGA }, - { CHIP_CYRIXmediagx, PCI_CHIP_CYRIX5520, RES_EXCLUSIVE_VGA }, - { CHIP_CYRIXmediagx, PCI_CHIP_CYRIX5530, RES_EXCLUSIVE_VGA }, - { -1, -1, RES_UNDEFINED } + {CHIP_CYRIXmediagx, PCI_CHIP_CYRIX5510, RES_EXCLUSIVE_VGA}, + {CHIP_CYRIXmediagx, PCI_CHIP_CYRIX5520, RES_EXCLUSIVE_VGA}, + {CHIP_CYRIXmediagx, PCI_CHIP_CYRIX5530, RES_EXCLUSIVE_VGA}, + {-1, -1, RES_UNDEFINED} }; /* Mandatory */ @@ -385,91 +386,93 @@ CYRIXProbe(DriverPtr drv, int flags) * Look for config file Device sections with this driver specified. */ if ((numDevSections = xf86MatchDevice(CYRIX_DRIVER_NAME, - &devSections)) <= 0) { + &devSections)) <= 0) { #ifdef DEBUG - xf86ErrorFVerb(3,"%s: No Device section found.\n",CYRIX_NAME); + xf86ErrorFVerb(3, "%s: No Device section found.\n", CYRIX_NAME); #endif - /* - * There's no matching device section in the config file, so quit - * now. - */ - return FALSE; + /* + * There's no matching device section in the config file, so quit + * now. + */ + return FALSE; } #ifdef DEBUG - xf86ErrorFVerb(3,"%s: Device Sections found: %d\n",CYRIX_NAME, numDevSections); + xf86ErrorFVerb(3, "%s: Device Sections found: %d\n", CYRIX_NAME, + numDevSections); #endif /* Should look like an ISA device */ /* PCI BUS */ - if (xf86GetPciVideoInfo() ) { - numUsed = xf86MatchPciInstances(CYRIX_NAME, PCI_VENDOR_CYRIX, - CYRIXChipsets, CYRIXPCIchipsets, - devSections,numDevSections, - drv, &usedChips); - - if (numUsed > 0) { - if (flags & PROBE_DETECT) - foundScreen = TRUE; - else for (i = 0; i < numUsed; i++) { - ScrnInfoPtr pScrn = NULL; - /* Allocate a ScrnInfoRec and claim the slot */ - if ((pScrn = xf86ConfigPciEntity(pScrn, 0, usedChips[i], - CYRIXPCIchipsets,NULL, NULL, - NULL, NULL, NULL))) { - pScrn->driverVersion = CYRIX_VERSION; - pScrn->driverName = CYRIX_DRIVER_NAME; - pScrn->name = CYRIX_NAME; - pScrn->Probe = CYRIXProbe; - pScrn->PreInit = CYRIXPreInit; - pScrn->ScreenInit = CYRIXScreenInit; - pScrn->SwitchMode = CYRIXSwitchMode; - pScrn->AdjustFrame = CYRIXAdjustFrame; - pScrn->LeaveVT = CYRIXLeaveVT; - pScrn->EnterVT = CYRIXEnterVT; - pScrn->FreeScreen = CYRIXFreeScreen; - pScrn->ValidMode = CYRIXValidMode; - foundScreen = TRUE; - } - } - free(usedChips); - } + if (xf86GetPciVideoInfo()) { + numUsed = xf86MatchPciInstances(CYRIX_NAME, PCI_VENDOR_CYRIX, + CYRIXChipsets, CYRIXPCIchipsets, + devSections, numDevSections, + drv, &usedChips); + + if (numUsed > 0) { + if (flags & PROBE_DETECT) + foundScreen = TRUE; + else + for (i = 0; i < numUsed; i++) { + ScrnInfoPtr pScrn = NULL; + + /* Allocate a ScrnInfoRec and claim the slot */ + if ((pScrn = xf86ConfigPciEntity(pScrn, 0, usedChips[i], + CYRIXPCIchipsets, NULL, + NULL, NULL, NULL, NULL))) { + pScrn->driverVersion = CYRIX_VERSION; + pScrn->driverName = CYRIX_DRIVER_NAME; + pScrn->name = CYRIX_NAME; + pScrn->Probe = CYRIXProbe; + pScrn->PreInit = CYRIXPreInit; + pScrn->ScreenInit = CYRIXScreenInit; + pScrn->SwitchMode = CYRIXSwitchMode; + pScrn->AdjustFrame = CYRIXAdjustFrame; + pScrn->LeaveVT = CYRIXLeaveVT; + pScrn->EnterVT = CYRIXEnterVT; + pScrn->FreeScreen = CYRIXFreeScreen; + pScrn->ValidMode = CYRIXValidMode; + foundScreen = TRUE; + } + } + free(usedChips); + } } - - numUsed = xf86MatchIsaInstances(CYRIX_NAME,CYRIXChipsets, - CYRIXISAChipsets,drv, - CYRIXFindIsaDevice,devSections, - numDevSections,&usedChips); - if(numUsed > 0) { + numUsed = xf86MatchIsaInstances(CYRIX_NAME, CYRIXChipsets, + CYRIXISAChipsets, drv, + CYRIXFindIsaDevice, devSections, + numDevSections, &usedChips); + if (numUsed > 0) { foundScreen = TRUE; /* Free it since we don't need that list after this */ free(devSections); if (!(flags & PROBE_DETECT)) { - for (i=0; i < numUsed; i++) { - - /* Fill in what we can of the ScrnInfoRec */ - pScrn = NULL; - if ((pScrn = xf86ConfigIsaEntity(pScrn, 0, usedChips[i], - CYRIXISAChipsets, NULL, - NULL, NULL, NULL, NULL))){ - pScrn->driverVersion = CYRIX_VERSION; - pScrn->driverName = CYRIX_DRIVER_NAME; - pScrn->name = CYRIX_NAME; - pScrn->Probe = CYRIXProbe; - pScrn->PreInit = CYRIXPreInit; - pScrn->ScreenInit = CYRIXScreenInit; - pScrn->SwitchMode = CYRIXSwitchMode; - pScrn->AdjustFrame = CYRIXAdjustFrame; - pScrn->LeaveVT = CYRIXLeaveVT; - pScrn->EnterVT = CYRIXEnterVT; - pScrn->FreeScreen = CYRIXFreeScreen; - pScrn->ValidMode = CYRIXValidMode; - } - } - } + for (i = 0; i < numUsed; i++) { + + /* Fill in what we can of the ScrnInfoRec */ + pScrn = NULL; + if ((pScrn = xf86ConfigIsaEntity(pScrn, 0, usedChips[i], + CYRIXISAChipsets, NULL, + NULL, NULL, NULL, NULL))) { + pScrn->driverVersion = CYRIX_VERSION; + pScrn->driverName = CYRIX_DRIVER_NAME; + pScrn->name = CYRIX_NAME; + pScrn->Probe = CYRIXProbe; + pScrn->PreInit = CYRIXPreInit; + pScrn->ScreenInit = CYRIXScreenInit; + pScrn->SwitchMode = CYRIXSwitchMode; + pScrn->AdjustFrame = CYRIXAdjustFrame; + pScrn->LeaveVT = CYRIXLeaveVT; + pScrn->EnterVT = CYRIXEnterVT; + pScrn->FreeScreen = CYRIXFreeScreen; + pScrn->ValidMode = CYRIXValidMode; + } + } + } } free(usedChips); return (foundScreen); @@ -489,7 +492,7 @@ CYRIXFindIsaDevice(GDevPtr dev) */ int vgaIOBase = VGAHW_GET_IOBASE(); - (void) inb(vgaIOBase + 0x0AU); /* Reset flip-flop */ + (void) inb(vgaIOBase + 0x0AU); /* Reset flip-flop */ outb(0x3C0, 0x14 | 0x20); CurrentValue = inb(0x3C1); outb(0x3C0, CurrentValue ^ 0x0F); @@ -499,40 +502,44 @@ CYRIXFindIsaDevice(GDevPtr dev) /* Quit now if no VGA is present */ if ((CurrentValue ^ 0x0F) != TestValue) - return -1; + return -1; /* the lock register should read 0xFF after we have - written 0x00 to lock */ + written 0x00 to lock */ outb(vgaIOBase + 4, CrtcExtendedRegisterLock); outb(vgaIOBase + 5, 0x00); - if (inb(vgaIOBase + 5) != 0xFF) return -1; + if (inb(vgaIOBase + 5) != 0xFF) + return -1; /* the lock register should read 0x00 after we have - written the magic word 'WL' to unlock */ + written the magic word 'WL' to unlock */ outb(vgaIOBase + 5, 0x57); outb(vgaIOBase + 5, 0x4C); /* GGI's idea to do two comparisons */ - if (inb(vgaIOBase + 5) != 0x00) goto fail; - if (inb(vgaIOBase + 5) != 0x00) goto fail; + if (inb(vgaIOBase + 5) != 0x00) + goto fail; + if (inb(vgaIOBase + 5) != 0x00) + goto fail; /* OK, it's most likely a MediaGX. Now check the scratchpad * size. If it is zero, we're not using the MediaGX graphics * facilities. */ - outb(GX_IOPORT_INDEX, GX_IOIDX_DIR0); /* doesn't work w/o that */ + outb(GX_IOPORT_INDEX, GX_IOIDX_DIR0); /* doesn't work w/o that */ outb(GX_IOPORT_INDEX, GX_IOIDX_GCR); gcr = inb(GX_IOPORT_DATA); /* end GGI MediaGX driver based code */ - if (!(gcr & 12)) goto fail; + if (!(gcr & 12)) + goto fail; /* Unprotect MediaGX extended registers */ outb(vgaIOBase + 4, CrtcExtendedRegisterLock); outb(vgaIOBase + 5, 0x00); - return (int)CHIP_CYRIXmediagx; + return (int) CHIP_CYRIXmediagx; fail: /* Protect MediaGX extended registers */ @@ -545,13 +552,14 @@ static void CYRIXProbeDDC(ScrnInfoPtr pScrn, int index) { vbeInfoPtr pVbe; + if (xf86LoadSubModule(pScrn, "vbe")) { - pVbe = VBEInit(NULL,index); - ConfiguredMonitor = vbeDoEDID(pVbe, NULL); - vbeFree(pVbe); + pVbe = VBEInit(NULL, index); + ConfiguredMonitor = vbeDoEDID(pVbe, NULL); + vbeFree(pVbe); } } - + /* Mandatory */ static Bool CYRIXPreInit(ScrnInfoPtr pScrn, int flags) @@ -565,11 +573,12 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) int device_step, device_revision; int vgaIOBase; unsigned char gcr; - static int accelWidths[3]= {2,1024, 2048}; + static int accelWidths[3] = { 2, 1024, 2048 }; const char *s; /* Allocate the CYRIXRec driverPrivate */ - if (!CYRIXGetRec(pScrn)) return FALSE; + if (!CYRIXGetRec(pScrn)) + return FALSE; /* * Note: This function is only called once at server startup, and @@ -588,38 +597,37 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) pCyrix->pEnt = xf86GetEntityInfo(pScrn->entityList[0]); if (pCyrix->pEnt->location.type != BUS_PCI) - return FALSE; + return FALSE; if (flags & PROBE_DETECT) { - CYRIXProbeDDC(pScrn, pCyrix->pEnt->index); - return TRUE; + CYRIXProbeDDC(pScrn, pCyrix->pEnt->index); + return TRUE; } /* The vgahw module should be loaded here when needed */ if (!xf86LoadSubModule(pScrn, "vgahw")) - return FALSE; + return FALSE; xf86LoaderReqSymLists(vgahwSymbols, NULL); /* * Allocate a vgaHWRec */ if (!vgaHWGetHWRec(pScrn)) - return FALSE; + return FALSE; - VGAHWPTR(pScrn)->MapSize = 0x10000; /* Standard 64k VGA window */ + VGAHWPTR(pScrn)->MapSize = 0x10000; /* Standard 64k VGA window */ if (!vgaHWMapMem(pScrn)) - return FALSE; - + return FALSE; + vgaHWGetIOBase(VGAHWPTR(pScrn)); vgaIOBase = VGAHWPTR(pScrn)->IOBase; - - + /* Unprotect MediaGX extended registers */ outb(vgaIOBase + 4, CrtcExtendedRegisterLock); outb(vgaIOBase + 5, 0x57); outb(vgaIOBase + 5, 0x4C); - outb(GX_IOPORT_INDEX, GX_IOIDX_DIR0); /* doesn't work w/o that */ + outb(GX_IOPORT_INDEX, GX_IOIDX_DIR0); /* doesn't work w/o that */ outb(GX_IOPORT_INDEX, GX_IOIDX_GCR); gcr = inb(GX_IOPORT_DATA); @@ -627,7 +635,8 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) padsize = (gcr & 12) ? (((gcr & 12) >> 2) + 1) : 0; /* end GGI MediaGX driver based code */ - if (padsize == 0) return (FALSE); + if (padsize == 0) + return (FALSE); xf86ErrorF("%s: GX_BASE: 0x%x\n", CYRIX_NAME, physbase); xf86ErrorF("%s: Scratchpad size: %d kbytes\n", CYRIX_NAME, padsize); @@ -643,8 +652,8 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) device_step = device_revision = inb(0x23); device_step >>= 8; device_revision &= 0xFF; - xf86ErrorF("%s: MediaGX processor ID %d revision %d\n", - CYRIX_NAME, device_step, device_revision); + xf86ErrorF("%s: MediaGX processor ID %d revision %d\n", + CYRIX_NAME, device_step, device_revision); /* Some MediaGX systems have different blit buffer offsets than * is indicated by the scratchpad size. Make sure that we have @@ -652,28 +661,32 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) * registers. The op-codes to use depend on the processor * revision. The value `40' is a guess (awaiting details from Cyrix). */ - pCyrix->CYRIXbltBufSize = (padsize == 4) ? 1840 : (padsize == 3) ? 1328 : 816; + pCyrix->CYRIXbltBufSize = + (padsize == 4) ? 1840 : (padsize == 3) ? 1328 : 816; pCyrix->CYRIXbltBuf1Address = 0x0E60 - pCyrix->CYRIXbltBufSize; - pCyrix->CYRIXbltBuf0Address = pCyrix->CYRIXbltBuf1Address - pCyrix->CYRIXbltBufSize; + pCyrix->CYRIXbltBuf0Address = + pCyrix->CYRIXbltBuf1Address - pCyrix->CYRIXbltBufSize; /* map the entire area from GX_BASE (scratchpad area) - up to the end of the control registers */ - pCyrix->GXregisters = (char*)xf86MapVidMem(pScrn->scrnIndex, - VGA_REGION, (int )physbase, 0x9000); + up to the end of the control registers */ + pCyrix->GXregisters = (char *) xf86MapVidMem(pScrn->scrnIndex, + VGA_REGION, (int) physbase, + 0x9000); if (!pCyrix->GXregisters) { - ErrorF("%s: Cannot map hardware registers\n", CYRIX_NAME); - return FALSE; + ErrorF("%s: Cannot map hardware registers\n", CYRIX_NAME); + return FALSE; } /* This is the general case */ - for (i = 0; i<pScrn->numEntities; i++) { - pCyrix->pEnt = xf86GetEntityInfo(pScrn->entityList[i]); - #ifndef XSERVER_LIBPCIACCESS - if (pCyrix->pEnt->resources) return FALSE; - #endif - pCyrix->Chipset = pCyrix->pEnt->chipset; - pScrn->chipset = (char *)xf86TokenToString(CYRIXChipsets, - pCyrix->pEnt->chipset); + for (i = 0; i < pScrn->numEntities; i++) { + pCyrix->pEnt = xf86GetEntityInfo(pScrn->entityList[i]); +#ifndef XSERVER_LIBPCIACCESS + if (pCyrix->pEnt->resources) + return FALSE; +#endif + pCyrix->Chipset = pCyrix->pEnt->chipset; + pScrn->chipset = (char *) xf86TokenToString(CYRIXChipsets, + pCyrix->pEnt->chipset); } /* Set pScrn->monitor */ @@ -684,23 +697,24 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) * Our default depth is 8, so pass it to the helper function. */ if (!xf86SetDepthBpp(pScrn, 8, 0, 0, Support24bppFb)) { - return FALSE; - } else { - /* Check that the returned depth is one we support */ - switch (pScrn->depth) { - case 1: - case 4: - case 8: - case 15: - case 16: - /* OK */ - break; - default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Given depth (%d) is not supported by this driver\n", - pScrn->depth); - return FALSE; - } + return FALSE; + } + else { + /* Check that the returned depth is one we support */ + switch (pScrn->depth) { + case 1: + case 4: + case 8: + case 15: + case 16: + /* OK */ + break; + default: + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Given depth (%d) is not supported by this driver\n", + pScrn->depth); + return FALSE; + } } /* @@ -708,13 +722,14 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) * xf86SetWeight references it. */ if (pScrn->depth > 8) { - /* The defaults are OK for us */ - rgb zeros = {0, 0, 0}; + /* The defaults are OK for us */ + rgb zeros = { 0, 0, 0 }; - if (!xf86SetWeight(pScrn, zeros, zeros)) { - return FALSE; - } else { - /* XXX check that weight returned is supported */ + if (!xf86SetWeight(pScrn, zeros, zeros)) { + return FALSE; + } + else { + /* XXX check that weight returned is supported */ ; } } @@ -725,11 +740,11 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) */ { - Gamma zeros = {0.0, 0.0, 0.0}; + Gamma zeros = { 0.0, 0.0, 0.0 }; - if (!xf86SetGamma(pScrn, zeros)) { - return FALSE; - } + if (!xf86SetGamma(pScrn, zeros)) { + return FALSE; + } } /* We use a programmable clock */ @@ -737,7 +752,7 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) /* Allocate the CYRIXRec driverPrivate */ if (!CYRIXGetRec(pScrn)) { - return FALSE; + return FALSE; } pCyrix = CYRIXPTR(pScrn); @@ -746,7 +761,7 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) /* Process the options */ if (!(pCyrix->Options = malloc(sizeof(CYRIXOptions)))) - return FALSE; + return FALSE; memcpy(pCyrix->Options, CYRIXOptions, sizeof(CYRIXOptions)); xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, pCyrix->Options); @@ -756,57 +771,60 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) from = X_DEFAULT; pCyrix->HWCursor = FALSE; if (xf86IsOptionSet(pCyrix->Options, OPTION_HW_CURSOR)) { - from = X_CONFIG; - pCyrix->HWCursor = TRUE; + from = X_CONFIG; + pCyrix->HWCursor = TRUE; } if (xf86IsOptionSet(pCyrix->Options, OPTION_SW_CURSOR)) { - from = X_CONFIG; - pCyrix->HWCursor = FALSE; + from = X_CONFIG; + pCyrix->HWCursor = FALSE; } if (pCyrix->HWCursor == TRUE) - xf86DrvMsg(pScrn->scrnIndex, from, "Hardware cursor is disabled in this release\n"); + xf86DrvMsg(pScrn->scrnIndex, from, + "Hardware cursor is disabled in this release\n"); if (xf86ReturnOptValBool(pCyrix->Options, OPTION_SHADOW_FB, FALSE)) { - pCyrix->ShadowFB = TRUE; - pCyrix->NoAccel = TRUE; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Using \"Shadow Framebuffer\" - acceleration disabled\n"); + pCyrix->ShadowFB = TRUE; + pCyrix->NoAccel = TRUE; + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, + "Using \"Shadow Framebuffer\" - acceleration disabled\n"); } pCyrix->Rotate = 0; if ((s = xf86GetOptValString(pCyrix->Options, OPTION_ROTATE))) { - if(!xf86NameCmp(s, "CW")) { - pCyrix->ShadowFB = TRUE; - pCyrix->NoAccel = TRUE; - pCyrix->HWCursor = FALSE; - pCyrix->Rotate = 1; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Rotating screen clockwise - acceleration disabled\n"); - } else - if(!xf86NameCmp(s, "CCW")) { - pCyrix->ShadowFB = TRUE; - pCyrix->NoAccel = TRUE; - pCyrix->HWCursor = FALSE; - pCyrix->Rotate = -1; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Rotating screen counter clockwise - acceleration disabled\n"); - } else { - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "\"%s\" is not a valid value for Option \"Rotate\"\n", s); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Valid options are \"CW\" or \"CCW\"\n"); - } + if (!xf86NameCmp(s, "CW")) { + pCyrix->ShadowFB = TRUE; + pCyrix->NoAccel = TRUE; + pCyrix->HWCursor = FALSE; + pCyrix->Rotate = 1; + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, + "Rotating screen clockwise - acceleration disabled\n"); + } + else if (!xf86NameCmp(s, "CCW")) { + pCyrix->ShadowFB = TRUE; + pCyrix->NoAccel = TRUE; + pCyrix->HWCursor = FALSE; + pCyrix->Rotate = -1; + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, + "Rotating screen counter clockwise - acceleration disabled\n"); + } + else { + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, + "\"%s\" is not a valid value for Option \"Rotate\"\n", + s); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Valid options are \"CW\" or \"CCW\"\n"); + } } xf86DrvMsg(pScrn->scrnIndex, from, "Using %s cursor\n", - pCyrix->HWCursor ? "HW" : "SW"); + pCyrix->HWCursor ? "HW" : "SW"); if (xf86IsOptionSet(pCyrix->Options, OPTION_NOACCEL)) { - pCyrix->NoAccel = TRUE; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Acceleration disabled\n"); + pCyrix->NoAccel = TRUE; + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Acceleration disabled\n"); } pCyrix->NoCompress = FALSE; if (xf86IsOptionSet(pCyrix->Options, OPTION_NOCOMPRESS)) { - pCyrix->NoCompress = TRUE; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Compression disabled\n"); + pCyrix->NoCompress = TRUE; + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Compression disabled\n"); } pCyrix->PciInfo = NULL; @@ -817,80 +835,82 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) * CYRIXProbe(), but check it just in case. */ if (pScrn->chipset == NULL) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "ChipID 0x%04X is not recognised\n", pCyrix->Chipset); - return FALSE; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "ChipID 0x%04X is not recognised\n", pCyrix->Chipset); + return FALSE; } if (pCyrix->Chipset < 0) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Chipset \"%s\" is not recognised\n", pScrn->chipset); - return FALSE; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Chipset \"%s\" is not recognised\n", pScrn->chipset); + return FALSE; } - pCyrix->EngineOperation = 0x00; xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Found %s chip\n", pScrn->chipset); - + if (pCyrix->pEnt->device->MemBase != 0) { - pCyrix->FbAddress = pCyrix->pEnt->device->MemBase; - from = X_CONFIG; - } else { - from = X_PROBED; - pCyrix->FbAddress = 0x40800000; /* Hard coded for 1st try */ + pCyrix->FbAddress = pCyrix->pEnt->device->MemBase; + from = X_CONFIG; + } + else { + from = X_PROBED; + pCyrix->FbAddress = 0x40800000; /* Hard coded for 1st try */ } xf86DrvMsg(pScrn->scrnIndex, from, "Linear framebuffer at 0x%lX\n", - (unsigned long)pCyrix->FbAddress); + (unsigned long) pCyrix->FbAddress); if (pCyrix->pEnt->device->IOBase != 0) { - pCyrix->IOAccelAddress = pCyrix->pEnt->device->IOBase; - from = X_CONFIG; - } else { - from = X_PROBED; - pCyrix->IOAccelAddress = 0x40008100; /* Hard coded for 1st try */ + pCyrix->IOAccelAddress = pCyrix->pEnt->device->IOBase; + from = X_CONFIG; + } + else { + from = X_PROBED; + pCyrix->IOAccelAddress = 0x40008100; /* Hard coded for 1st try */ } - xf86DrvMsg(pScrn->scrnIndex, from,"IO registers at 0x%lx\n",(unsigned long)pCyrix->IOAccelAddress); + xf86DrvMsg(pScrn->scrnIndex, from, "IO registers at 0x%lx\n", + (unsigned long) pCyrix->IOAccelAddress); /* HW bpp matches reported bpp */ pCyrix->HwBpp = pScrn->bitsPerPixel; if (pCyrix->pEnt->device->videoRam != 0) { - pScrn->videoRam = pCyrix->pEnt->device->videoRam; - from = X_CONFIG; - } else { - from = X_PROBED; - outb(vgaIOBase + 4, CrtcGraphicsMemorySize); - videoram = (inb(vgaIOBase + 5) * 64); - pScrn->videoRam = videoram & 0xFFFFFC00; /* mask out the part we want */ + pScrn->videoRam = pCyrix->pEnt->device->videoRam; + from = X_CONFIG; + } + else { + from = X_PROBED; + outb(vgaIOBase + 4, CrtcGraphicsMemorySize); + videoram = (inb(vgaIOBase + 5) * 64); + pScrn->videoRam = videoram & 0xFFFFFC00; /* mask out the part we want */ } - xf86DrvMsg(pScrn->scrnIndex, from, "VideoRAM: %d kByte\n", - pScrn->videoRam); + xf86DrvMsg(pScrn->scrnIndex, from, "VideoRAM: %d kByte\n", pScrn->videoRam); pCyrix->FbMapSize = pScrn->videoRam * 1024; /* Set the min pixel clock */ - pCyrix->MinClock = 16250; /* XXX Guess, need to check this */ + pCyrix->MinClock = 16250; /* XXX Guess, need to check this */ xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, "Min pixel clock is %d MHz\n", - pCyrix->MinClock / 1000); + pCyrix->MinClock / 1000); pCyrix->MaxClock = 135000; xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, "Max pixel clock is %d MHz\n", - pCyrix->MaxClock / 1000); + pCyrix->MaxClock / 1000); /* * Setup the ClockRanges, which describe what clock ranges are available, * and what sort of modes they can be used for. */ - clockRanges = (ClockRangePtr)xnfcalloc(sizeof(ClockRange), 1); + clockRanges = (ClockRangePtr) xnfcalloc(sizeof(ClockRange), 1); clockRanges->next = NULL; clockRanges->minClock = pCyrix->MinClock; clockRanges->maxClock = pCyrix->MaxClock; - clockRanges->clockIndex = -1; /* programmable */ + clockRanges->clockIndex = -1; /* programmable */ clockRanges->interlaceAllowed = TRUE; - clockRanges->doubleScanAllowed = FALSE; /* XXX check this */ + clockRanges->doubleScanAllowed = FALSE; /* XXX check this */ /* * xf86ValidateModes will check that the mode HTotal and VTotal values @@ -905,26 +925,25 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) * XXX Assuming min height 128, max 2048 */ i = xf86ValidateModes(pScrn, pScrn->monitor->Modes, - pScrn->display->modes, clockRanges, - accelWidths, 256, 2048, - pScrn->bitsPerPixel, 128, 2048, - pScrn->display->virtualX, - pScrn->display->virtualY, - pCyrix->FbMapSize, - LOOKUP_BEST_REFRESH); + pScrn->display->modes, clockRanges, + accelWidths, 256, 2048, + pScrn->bitsPerPixel, 128, 2048, + pScrn->display->virtualX, + pScrn->display->virtualY, + pCyrix->FbMapSize, LOOKUP_BEST_REFRESH); if (i == -1) { - CYRIXFreeRec(pScrn); - return FALSE; + CYRIXFreeRec(pScrn); + return FALSE; } /* Prune the modes marked as invalid */ xf86PruneDriverModes(pScrn); if (i == 0 || pScrn->modes == NULL) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes found\n"); - CYRIXFreeRec(pScrn); - return FALSE; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes found\n"); + CYRIXFreeRec(pScrn); + return FALSE; } xf86SetCrtcForModes(pScrn, INTERLACE_HALVE_V); @@ -942,55 +961,54 @@ CYRIXPreInit(ScrnInfoPtr pScrn, int flags) case 1: case 4: case 8: - pCyrix->EngineOperation |= 0x00; - break; + pCyrix->EngineOperation |= 0x00; + break; case 16: - pCyrix->EngineOperation |= 0x01; - break; + pCyrix->EngineOperation |= 0x01; + break; } /* Load fb module */ if (xf86LoadSubModule(pScrn, "fb") == NULL) { - CYRIXFreeRec(pScrn); - return FALSE; + CYRIXFreeRec(pScrn); + return FALSE; } xf86LoaderReqSymLists(fbSymbols, NULL); /* Load XAA if needed */ if (!pCyrix->NoAccel) { - if (!xf86LoadSubModule(pScrn, "xaa")) { - CYRIXFreeRec(pScrn); - return FALSE; - } - xf86LoaderReqSymLists(xaaSymbols, NULL); + if (!xf86LoadSubModule(pScrn, "xaa")) { + CYRIXFreeRec(pScrn); + return FALSE; + } + xf86LoaderReqSymLists(xaaSymbols, NULL); switch (pScrn->displayWidth * pScrn->bitsPerPixel / 8) { - case 512: - pCyrix->EngineOperation |= 0x00; - break; - case 1024: - pCyrix->EngineOperation |= 0x04; - break; - case 2048: - pCyrix->EngineOperation |= 0x08; - break; - } + case 512: + pCyrix->EngineOperation |= 0x00; + break; + case 1024: + pCyrix->EngineOperation |= 0x04; + break; + case 2048: + pCyrix->EngineOperation |= 0x08; + break; + } } /* Load shadowfb if needed */ if (pCyrix->ShadowFB) { - if (!xf86LoadSubModule(pScrn, "shadowfb")) { - CYRIXFreeRec(pScrn); - return FALSE; - } - xf86LoaderReqSymLists(shadowSymbols, NULL); + if (!xf86LoadSubModule(pScrn, "shadowfb")) { + CYRIXFreeRec(pScrn); + return FALSE; + } + xf86LoaderReqSymLists(shadowSymbols, NULL); } return TRUE; } - /* * This function saves the video state. */ @@ -1006,11 +1024,10 @@ CYRIXSave(ScrnInfoPtr pScrn) cyrixReg = &pCyrix->SavedReg; vgaHWSave(pScrn, vgaReg, VGA_SR_ALL); - CyrixSave(pScrn, cyrixReg); + CyrixSave(pScrn, cyrixReg); CYRIXSavePalette(pScrn); } - /* * Initialise a new mode. This is currently still using the old * "initialise struct, restore/write struct to HW" model. That could @@ -1022,6 +1039,7 @@ CYRIXModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) { int ret = -1; vgaHWPtr hwp; + /* vgaRegPtr vgaReg; */ CYRIXPrvPtr pCyrix; CYRIXRegPtr cyrixReg; @@ -1040,7 +1058,7 @@ CYRIXModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) ret = CyrixInit(pScrn, mode); if (!ret) - return FALSE; + return FALSE; /* Program the registers */ /* vgaReg = &hwp->ModeReg; */ @@ -1055,22 +1073,23 @@ CYRIXModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) /* * Restore the initial (text) mode. */ -static void +static void CYRIXRestore(ScrnInfoPtr pScrn) { vgaHWPtr hwp; vgaRegPtr vgaReg; - /*CYRIXPrvPtr pCyrix;*/ - /*CYRIXRegPtr cyrixReg*/; + + /*CYRIXPrvPtr pCyrix; */ + /*CYRIXRegPtr cyrixReg */ ; hwp = VGAHWPTR(pScrn); - /*pCyrix = CYRIXPTR(pScrn);*/ + /*pCyrix = CYRIXPTR(pScrn); */ vgaReg = &hwp->SavedReg; - /*cyrixReg = &pCyrix->SavedReg*/; + /*cyrixReg = &pCyrix->SavedReg */ ; vgaHWProtect(pScrn, TRUE); - /*CyrixRestore(pScrn, cyrixReg);*/ + /*CyrixRestore(pScrn, cyrixReg); */ CYRIXRestorePalette(pScrn); vgaHWRestore(pScrn, vgaReg, VGA_SR_ALL); @@ -1080,70 +1099,68 @@ CYRIXRestore(ScrnInfoPtr pScrn) /* Needed because we are not VGA enough in all cases (eg 5530 LCD) */ static void -CYRIXLoadPalette( - ScrnInfoPtr pScrn, - int numColors, - int *indices, - LOCO *colors, - VisualPtr pVisual -){ - int i; - unsigned int locked; - CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); - - switch(pScrn->depth) { - case 15: - case 16: - return; - } - - locked = GX_REG(DC_UNLOCK); - GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; - - for(i = 0; i < numColors; i++) { +CYRIXLoadPalette(ScrnInfoPtr pScrn, + int numColors, int *indices, LOCO * colors, VisualPtr pVisual) +{ + int i; + unsigned int locked; + CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); + + switch (pScrn->depth) { + case 15: + case 16: + return; + } + + locked = GX_REG(DC_UNLOCK); + GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; + + for (i = 0; i < numColors; i++) { unsigned int red, green, blue; int index = indices[i]; - + red = colors[index].red; green = colors[index].green; blue = colors[index].blue;; - + GX_REG(DC_PAL_ADDRESS) = index; GX_REG(DC_PAL_DATA) = (red << 12) | (green << 6) | blue; - } - GX_REG(DC_UNLOCK) = locked; + } + GX_REG(DC_UNLOCK) = locked; } -static void CYRIXSavePalette(ScrnInfoPtr pScrn) +static void +CYRIXSavePalette(ScrnInfoPtr pScrn) { - int i; - unsigned int locked; - CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); - - locked = GX_REG(DC_UNLOCK); - GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; - - for(i = 0; i < 256; i++) { + int i; + unsigned int locked; + CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); + + locked = GX_REG(DC_UNLOCK); + GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; + + for (i = 0; i < 256; i++) { GX_REG(DC_PAL_ADDRESS) = i; pCyrix->SavedReg.Colormap[i] = GX_REG(DC_PAL_DATA); - } - GX_REG(DC_UNLOCK) = locked; + } + GX_REG(DC_UNLOCK) = locked; } -static void CYRIXRestorePalette(ScrnInfoPtr pScrn) +static void +CYRIXRestorePalette(ScrnInfoPtr pScrn) { - int i; - unsigned int locked; - CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); - - locked = GX_REG(DC_UNLOCK); - GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; - - for(i = 0; i < 256; i++) { + int i; + unsigned int locked; + CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); + + locked = GX_REG(DC_UNLOCK); + GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; + + for (i = 0; i < 256; i++) { GX_REG(DC_PAL_ADDRESS) = i; GX_REG(DC_PAL_DATA) = pCyrix->SavedReg.Colormap[i]; - } - GX_REG(DC_UNLOCK) = locked; + } + GX_REG(DC_UNLOCK) = locked; } /* Mandatory */ @@ -1161,6 +1178,7 @@ CYRIXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) VisualPtr visual; int width, height, displayWidth; unsigned char *FBStart; + /* * First get the ScrnInfoRec */ @@ -1168,16 +1186,17 @@ CYRIXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) hwp = VGAHWPTR(pScrn); - hwp->MapSize = 0x10000; /* Standard 64k VGA window */ + hwp->MapSize = 0x10000; /* Standard 64k VGA window */ pCyrix = CYRIXPTR(pScrn); /* Map the VGA memory, frambuffer, and get the VGA IO base */ if (!vgaHWMapMem(pScrn)) - return FALSE; + return FALSE; vgaHWGetIOBase(hwp); pCyrix->FbBase = xf86MapVidMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, - (unsigned long)pCyrix->FbAddress, pCyrix->FbMapSize); + (unsigned long) pCyrix->FbAddress, + pCyrix->FbMapSize); /* Save the current state */ CYRIXSave(pScrn); @@ -1206,43 +1225,45 @@ CYRIXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) /* * Reset visual list. */ - if (pScrn->bitsPerPixel >= 8) miClearVisualTypes(); + if (pScrn->bitsPerPixel >= 8) + miClearVisualTypes(); /* Setup the visuals we support. */ if (pScrn->bitsPerPixel > 8) { - if (!miSetVisualTypes(pScrn->depth, TrueColorMask, pScrn->rgbBits, - pScrn->defaultVisual)) - return FALSE; - } else { - if (!xf86SetDefaultVisual(pScrn, -1)) - return FALSE; - - if (!miSetVisualTypes(pScrn->depth, - miGetDefaultVisualMask(pScrn->depth), - pScrn->rgbBits, pScrn->defaultVisual)) - return FALSE; + if (!miSetVisualTypes(pScrn->depth, TrueColorMask, pScrn->rgbBits, + pScrn->defaultVisual)) + return FALSE; } + else { + if (!xf86SetDefaultVisual(pScrn, -1)) + return FALSE; + + if (!miSetVisualTypes(pScrn->depth, + miGetDefaultVisualMask(pScrn->depth), + pScrn->rgbBits, pScrn->defaultVisual)) + return FALSE; + } + + miSetPixmapDepths(); - miSetPixmapDepths (); - width = pScrn->virtualX; height = pScrn->virtualY; displayWidth = pScrn->displayWidth; - - if(pCyrix->Rotate) { - height = pScrn->virtualX; - width = pScrn->virtualY; + if (pCyrix->Rotate) { + height = pScrn->virtualX; + width = pScrn->virtualY; } - if(pCyrix->ShadowFB) { - pCyrix->ShadowPitch = BitmapBytePad(pScrn->bitsPerPixel * width); - pCyrix->ShadowPtr = malloc(pCyrix->ShadowPitch * height); - displayWidth = pCyrix->ShadowPitch / (pScrn->bitsPerPixel >> 3); + if (pCyrix->ShadowFB) { + pCyrix->ShadowPitch = BitmapBytePad(pScrn->bitsPerPixel * width); + pCyrix->ShadowPtr = malloc(pCyrix->ShadowPitch * height); + displayWidth = pCyrix->ShadowPitch / (pScrn->bitsPerPixel >> 3); FBStart = pCyrix->ShadowPtr; - } else { - pCyrix->ShadowPtr = NULL; - FBStart = pCyrix->FbBase; + } + else { + pCyrix->ShadowPtr = NULL; + FBStart = pCyrix->FbBase; } /* * Call the framebuffer layer's ScreenInit function, and fill in other @@ -1254,19 +1275,19 @@ CYRIXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) case 4: case 8: case 16: - ret = fbScreenInit(pScreen, FBStart, width, - height, pScrn->xDpi, pScrn->yDpi, - displayWidth, pScrn->bitsPerPixel); - break; + ret = fbScreenInit(pScreen, FBStart, width, + height, pScrn->xDpi, pScrn->yDpi, + displayWidth, pScrn->bitsPerPixel); + break; default: - xf86DrvMsg(scrnIndex, X_ERROR, - "Internal error: invalid bpp (%d) in CYRIXScreenInit\n", - pScrn->bitsPerPixel); - ret = FALSE; - break; + xf86DrvMsg(scrnIndex, X_ERROR, + "Internal error: invalid bpp (%d) in CYRIXScreenInit\n", + pScrn->bitsPerPixel); + ret = FALSE; + break; } if (!ret) - return FALSE; + return FALSE; xf86SetBlackWhitePixels(pScreen); @@ -1274,54 +1295,53 @@ CYRIXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) /* Fixup RGB ordering */ visual = pScreen->visuals + pScreen->numVisuals; while (--visual >= pScreen->visuals) { - if ((visual->class | DynamicClass) == DirectColor) { - visual->offsetRed = pScrn->offset.red; - visual->offsetGreen = pScrn->offset.green; - visual->offsetBlue = pScrn->offset.blue; - visual->redMask = pScrn->mask.red; - visual->greenMask = pScrn->mask.green; - visual->blueMask = pScrn->mask.blue; - } - } - } else if (pScrn->depth == 1) { - Cyrix1bppColorMap(pScrn); + if ((visual->class | DynamicClass) == DirectColor) { + visual->offsetRed = pScrn->offset.red; + visual->offsetGreen = pScrn->offset.green; + visual->offsetBlue = pScrn->offset.blue; + visual->redMask = pScrn->mask.red; + visual->greenMask = pScrn->mask.green; + visual->blueMask = pScrn->mask.blue; + } + } + } + else if (pScrn->depth == 1) { + Cyrix1bppColorMap(pScrn); } /* must be after RGB ordering fixed */ - fbPictureInit (pScreen, 0, 0); - + fbPictureInit(pScreen, 0, 0); + if (pScrn->depth < 8) { - miBankInfoPtr pBankInfo; - - /* Setup the vga banking variables */ - pBankInfo = (miBankInfoPtr)xnfcalloc(sizeof(miBankInfoRec),1); - if (pBankInfo == NULL) - return FALSE; - - pBankInfo->pBankA = hwp->Base; - pBankInfo->pBankB = hwp->Base; - pBankInfo->BankSize = 0x10000; - pBankInfo->nBankDepth = pScrn->depth; + miBankInfoPtr pBankInfo; + + /* Setup the vga banking variables */ + pBankInfo = (miBankInfoPtr) xnfcalloc(sizeof(miBankInfoRec), 1); + if (pBankInfo == NULL) + return FALSE; + + pBankInfo->pBankA = hwp->Base; + pBankInfo->pBankB = hwp->Base; + pBankInfo->BankSize = 0x10000; + pBankInfo->nBankDepth = pScrn->depth; #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 8 - xf86EnableAccess(pScrn); + xf86EnableAccess(pScrn); #endif - pBankInfo->SetSourceBank = - (miBankProcPtr)CYRIXSetRead; - pBankInfo->SetDestinationBank = - (miBankProcPtr)CYRIXSetWrite; - pBankInfo->SetSourceAndDestinationBanks = - (miBankProcPtr)CYRIXSetReadWrite; - if (!miInitializeBanking(pScreen, pScrn->virtualX, pScrn->virtualY, - pScrn->displayWidth, pBankInfo)) { - free(pBankInfo); - pBankInfo = NULL; - return FALSE; - } + pBankInfo->SetSourceBank = (miBankProcPtr) CYRIXSetRead; + pBankInfo->SetDestinationBank = (miBankProcPtr) CYRIXSetWrite; + pBankInfo->SetSourceAndDestinationBanks = + (miBankProcPtr) CYRIXSetReadWrite; + if (!miInitializeBanking(pScreen, pScrn->virtualX, pScrn->virtualY, + pScrn->displayWidth, pBankInfo)) { + free(pBankInfo); + pBankInfo = NULL; + return FALSE; + } } - if (!pCyrix->NoAccel) - CYRIXAccelInit(pScreen); + if (!pCyrix->NoAccel) + CYRIXAccelInit(pScreen); miInitializeBackingStore(pScreen); xf86SetBackingStore(pScreen); @@ -1329,39 +1349,42 @@ CYRIXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) xf86SetSilkenMouse(pScreen); /* Initialise cursor functions */ - miDCInitialize (pScreen, xf86GetPointerScreenFuncs()); - + miDCInitialize(pScreen, xf86GetPointerScreenFuncs()); /* Initialise default colourmap */ if (!miCreateDefColormap(pScreen)) - return FALSE; + return FALSE; - if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits, - CYRIXLoadPalette, NULL, - CMAP_RELOAD_ON_MODE_SWITCH)) - return FALSE; + if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits, + CYRIXLoadPalette, NULL, + CMAP_RELOAD_ON_MODE_SWITCH)) + return FALSE; - xf86DPMSInit(pScreen, (DPMSSetProcPtr)CYRIXDisplayPowerManagementSet, 0); + xf86DPMSInit(pScreen, (DPMSSetProcPtr) CYRIXDisplayPowerManagementSet, 0); pScrn->memPhysBase = pCyrix->FbAddress; pScrn->fbOffset = 0; - if(pCyrix->ShadowFB) { - RefreshAreaFuncPtr refreshArea = CYRIXRefreshArea; - - if(pCyrix->Rotate) { - if (!pCyrix->PointerMoved) { - pCyrix->PointerMoved = pScrn->PointerMoved; - pScrn->PointerMoved = CYRIXPointerMoved; - } - - switch(pScrn->bitsPerPixel) { - case 8: refreshArea = CYRIXRefreshArea8; break; - case 16: refreshArea = CYRIXRefreshArea16; break; - } - } + if (pCyrix->ShadowFB) { + RefreshAreaFuncPtr refreshArea = CYRIXRefreshArea; + + if (pCyrix->Rotate) { + if (!pCyrix->PointerMoved) { + pCyrix->PointerMoved = pScrn->PointerMoved; + pScrn->PointerMoved = CYRIXPointerMoved; + } + + switch (pScrn->bitsPerPixel) { + case 8: + refreshArea = CYRIXRefreshArea8; + break; + case 16: + refreshArea = CYRIXRefreshArea16; + break; + } + } - ShadowFBInit(pScreen, refreshArea); + ShadowFBInit(pScreen, refreshArea); } pCyrix->CloseScreen = pScreen->CloseScreen; @@ -1370,14 +1393,13 @@ CYRIXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) /* Report any unused options (only for the first generation) */ if (serverGeneration == 1) { - xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options); + xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options); } /* Done */ return TRUE; } - /* Usually mandatory */ static Bool CYRIXSwitchMode(int scrnIndex, DisplayModePtr mode, int flags) @@ -1385,9 +1407,8 @@ CYRIXSwitchMode(int scrnIndex, DisplayModePtr mode, int flags) return CYRIXModeInit(xf86Screens[scrnIndex], mode); } - /* Usually mandatory */ -static void +static void CYRIXAdjustFrame(int scrnIndex, int x, int y, int flags) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; @@ -1396,41 +1417,41 @@ CYRIXAdjustFrame(int scrnIndex, int x, int y, int flags) int base = y * pScrn->displayWidth + x; unsigned char temp; int vgaIOBase; - + hwp = VGAHWPTR(pScrn); vgaIOBase = hwp->IOBase; pCyrix = CYRIXPTR(pScrn); switch (pScrn->bitsPerPixel) { - case 4: + case 4: /* base /= 2; */ - base = base >> 4; - break; - case 8: - base = (base & 0xFFFFFFF8) >> 2; - break; - case 16: + base = base >> 4; + break; + case 8: + base = (base & 0xFFFFFFF8) >> 2; + break; + case 16: /* base *= (pScrn->bitsPerPixel / 8); */ - base /= 2; - break; + base /= 2; + break; } GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; - + /* If you switch to poking FB_ST_OFFSET directly it expects to be fed different values to the SoftVGA emulation code */ - + /*GX_REG(DC_FB_ST_OFFSET) = base; */ /* CRT bits 0-15 */ - outw(vgaIOBase + 4, (base & 0x00FF00) | 0x0C); - outw(vgaIOBase + 4, ((base & 0x00FF) << 8) | 0x0D); + outw(vgaIOBase + 4, (base & 0x00FF00) | 0x0C); + outw(vgaIOBase + 4, ((base & 0x00FF) << 8) | 0x0D); /* CRT bit 16 */ - outb(vgaIOBase + 4, 0x1E); temp = inb(vgaIOBase + 5) & 0xDF; - outb(vgaIOBase + 5, temp | (base & 0x10000) >> 11); + outb(vgaIOBase + 4, 0x1E); + temp = inb(vgaIOBase + 5) & 0xDF; + outb(vgaIOBase + 5, temp | (base & 0x10000) >> 11); GX_REG(DC_UNLOCK) = 0; } - /* * This is called when VT switching back to the X server. Its job is * to reinitialise the video mode. @@ -1446,12 +1467,11 @@ CYRIXEnterVT(int scrnIndex, int flags) /* Should we re-save the text mode on each VT enter? */ if (!CYRIXModeInit(pScrn, pScrn->currentMode)) - return FALSE; + return FALSE; return TRUE; } - /* * This is called when VT switching away from the X server. Its job is * to restore the previous (text) mode. @@ -1470,7 +1490,6 @@ CYRIXLeaveVT(int scrnIndex, int flags) vgaHWLock(hwp); } - /* * This is called at the end of each server generation. It restores the * original (text) mode. It should really also unmap the video memory too. @@ -1485,21 +1504,20 @@ CYRIXCloseScreen(int scrnIndex, ScreenPtr pScreen) CYRIXPrvPtr pCyrix; if (pScrn->vtSema) { - CYRIXRestore(pScrn); - vgaHWLock(hwp); + CYRIXRestore(pScrn); + vgaHWLock(hwp); } pCyrix = CYRIXPTR(pScrn); - if(pCyrix->AccelInfoRec) - XAADestroyInfoRec(pCyrix->AccelInfoRec); + if (pCyrix->AccelInfoRec) + XAADestroyInfoRec(pCyrix->AccelInfoRec); if (pCyrix->ShadowPtr) - free(pCyrix->ShadowPtr); + free(pCyrix->ShadowPtr); pScrn->vtSema = FALSE; - + pScreen->CloseScreen = pCyrix->CloseScreen; - return (*pScreen->CloseScreen)(scrnIndex, pScreen); + return (*pScreen->CloseScreen) (scrnIndex, pScreen); } - /* Free up any per-generation data structures */ /* Optional */ @@ -1510,14 +1528,13 @@ CYRIXFreeScreen(int scrnIndex, int flags) CYRIXFreeRec(xf86Screens[scrnIndex]); } - /* Checks if a mode is suitable for the selected chipset. */ /* Optional */ static ModeStatus CYRIXValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags) { - return(MODE_OK); + return (MODE_OK); } /* Do screen blanking */ @@ -1528,4 +1545,3 @@ CYRIXSaveScreen(ScreenPtr pScreen, int mode) { return vgaHWSaveScreen(pScreen, mode); } - diff --git a/src/cyrix_helper.c b/src/cyrix_helper.c index d62af0e..60b1b41 100644 --- a/src/cyrix_helper.c +++ b/src/cyrix_helper.c @@ -60,327 +60,324 @@ static void CYRIXresetVGA(ScrnInfoPtr pScrn, unsigned long vgaIOBase); -void Cyrix1bppColorMap(ScrnInfoPtr pScrn) -{ /* use dedicated color map routines on new chipsets in 8bpp */ - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Cyrix 1BPP is only a stub for now.\n"); - return; +void +Cyrix1bppColorMap(ScrnInfoPtr pScrn) +{ /* use dedicated color map routines on new chipsets in 8bpp */ + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Cyrix 1BPP is only a stub for now.\n"); + return; } - -int CyrixHWCursor(ScreenPtr pScreen) +int +CyrixHWCursor(ScreenPtr pScreen) { - return 1024; + return 1024; } -void CyrixRestore(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg) +void +CyrixRestore(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg) { - unsigned char temp; - CYRIXPrvPtr pCyrix; - vgaHWPtr hwp; - vgaRegPtr vgaReg; - unsigned long vgaIOBase; - - vgaHWProtect(pScrn, TRUE); /* Blank the screen */ - pCyrix = CYRIXPTR(pScrn); + unsigned char temp; + CYRIXPrvPtr pCyrix; + vgaHWPtr hwp; + vgaRegPtr vgaReg; + unsigned long vgaIOBase; + + vgaHWProtect(pScrn, TRUE); /* Blank the screen */ + pCyrix = CYRIXPTR(pScrn); /* vgaReg = &VGAHWPTR(pScrn)->SavedReg; */ - hwp = VGAHWPTR(pScrn); - vgaHWUnlock(hwp); - vgaReg = &hwp->ModeReg; - - vgaIOBase = VGAHWPTR(pScrn)->IOBase; - - /* restore standard VGA portion */ - outb(vgaIOBase + 4, CrtcModeSwitchControl); - outb(vgaIOBase + 5, 0x01); - CYRIXresetVGA(pScrn,vgaIOBase); - vgaHWRestore(pScrn, vgaReg, VGA_SR_ALL); - - vgaHWProtect(pScrn, TRUE); /* Blank the screen */ - - CYRIXmarkLinesDirty; - - /* restore miscellaneous output registers */ - outb(0x3C2, vgaReg->MiscOutReg); - - /* restore SoftVGA extended registers */ - outb(vgaIOBase + 4, CrtcDriverControl); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, (pCyrix->PrevExt.DriverControl & 0x01) - | (temp & 0xfe)); - - outb(vgaIOBase + 4, CrtcVerticalTimingExtension); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, (pCyrix->PrevExt.VerticalTimingExtension & 0x55) - | (temp & 0xaa)); - - outb(vgaIOBase + 4, CrtcExtendedAddressControl); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, (pCyrix->PrevExt.ExtendedAddressControl & 0x07) - | (temp & 0xf8)); - - outb(vgaIOBase + 4, 19); - outb(vgaIOBase + 5, pCyrix->PrevExt.Offset); - - outb(vgaIOBase + 4, CrtcExtendedOffset); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, ((pCyrix->PrevExt.ExtendedOffset) & 0x03) - | (temp & 0xfc)); - - outb(vgaIOBase + 4, CrtcExtendedColorControl); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, (pCyrix->PrevExt.ExtendedColorControl & 0x07) - | (temp & 0xf8)); - - outb(vgaIOBase + 4, CrtcDisplayCompression); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, (pCyrix->PrevExt.DisplayCompression & 0x0f) - | (temp & 0xf0)); - - outb(vgaIOBase + 4, CrtcDACControl); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, (pCyrix->PrevExt.DACControl & 0x0e) - | (temp & 0xf1)); - - outb(vgaIOBase + 4, CrtcModeSwitchControl); - outb(vgaIOBase + 5, 0x00); - - /* let SoftVGA programming settle before we access DC registers, - but don't wait too long */ - usleep(1000); - CYRIXmarkLinesDirty; - - /* restore display controller hardware registers */ + hwp = VGAHWPTR(pScrn); + vgaHWUnlock(hwp); + vgaReg = &hwp->ModeReg; + + vgaIOBase = VGAHWPTR(pScrn)->IOBase; + + /* restore standard VGA portion */ + outb(vgaIOBase + 4, CrtcModeSwitchControl); + outb(vgaIOBase + 5, 0x01); + CYRIXresetVGA(pScrn, vgaIOBase); + vgaHWRestore(pScrn, vgaReg, VGA_SR_ALL); + + vgaHWProtect(pScrn, TRUE); /* Blank the screen */ + + CYRIXmarkLinesDirty; + + /* restore miscellaneous output registers */ + outb(0x3C2, vgaReg->MiscOutReg); + + /* restore SoftVGA extended registers */ + outb(vgaIOBase + 4, CrtcDriverControl); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, (pCyrix->PrevExt.DriverControl & 0x01) + | (temp & 0xfe)); + + outb(vgaIOBase + 4, CrtcVerticalTimingExtension); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, (pCyrix->PrevExt.VerticalTimingExtension & 0x55) + | (temp & 0xaa)); + + outb(vgaIOBase + 4, CrtcExtendedAddressControl); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, (pCyrix->PrevExt.ExtendedAddressControl & 0x07) + | (temp & 0xf8)); + + outb(vgaIOBase + 4, 19); + outb(vgaIOBase + 5, pCyrix->PrevExt.Offset); + + outb(vgaIOBase + 4, CrtcExtendedOffset); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, ((pCyrix->PrevExt.ExtendedOffset) & 0x03) + | (temp & 0xfc)); + + outb(vgaIOBase + 4, CrtcExtendedColorControl); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, (pCyrix->PrevExt.ExtendedColorControl & 0x07) + | (temp & 0xf8)); + + outb(vgaIOBase + 4, CrtcDisplayCompression); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, (pCyrix->PrevExt.DisplayCompression & 0x0f) + | (temp & 0xf0)); + + outb(vgaIOBase + 4, CrtcDACControl); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, (pCyrix->PrevExt.DACControl & 0x0e) + | (temp & 0xf1)); + + outb(vgaIOBase + 4, CrtcModeSwitchControl); + outb(vgaIOBase + 5, 0x00); + + /* let SoftVGA programming settle before we access DC registers, + but don't wait too long */ + usleep(1000); + CYRIXmarkLinesDirty; + + /* restore display controller hardware registers */ #ifndef MONOVGA #define DCFG_MASK (DC_GCFG_FDTY | DC_GCFG_DECE | DC_GCFG_CMPE | DC_GCFG_FBLC | DC_GCFG_CURE) #define GPBS_MASK (BC_16BPP | BC_FB_WIDTH_2048) - GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; + GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; - GX_REG(DC_CURS_ST_OFFSET) = pCyrix->PrevExt.DcCursStOffset; - GX_REG(DC_CB_ST_OFFSET) = pCyrix->PrevExt.DcCbStOffset; - GX_REG(DC_LINE_DELTA) = (GX_REG(DC_LINE_DELTA) & 0xFFC00FFF) - | (pCyrix->PrevExt.DcLineDelta & 0x003FF000); - GX_REG(DC_BUF_SIZE) = (GX_REG(DC_BUF_SIZE) & 0xFFFF01FF) - | (pCyrix->PrevExt.DcBufSize & 0x0000FE00); - GX_REG(DC_CURSOR_X) = pCyrix->PrevExt.DcCursorX; - GX_REG(DC_CURSOR_Y) = pCyrix->PrevExt.DcCursorY; - GX_REG(DC_CURSOR_COLOR) = pCyrix->PrevExt.DcCursorColor; + GX_REG(DC_CURS_ST_OFFSET) = pCyrix->PrevExt.DcCursStOffset; + GX_REG(DC_CB_ST_OFFSET) = pCyrix->PrevExt.DcCbStOffset; + GX_REG(DC_LINE_DELTA) = (GX_REG(DC_LINE_DELTA) & 0xFFC00FFF) + | (pCyrix->PrevExt.DcLineDelta & 0x003FF000); + GX_REG(DC_BUF_SIZE) = (GX_REG(DC_BUF_SIZE) & 0xFFFF01FF) + | (pCyrix->PrevExt.DcBufSize & 0x0000FE00); + GX_REG(DC_CURSOR_X) = pCyrix->PrevExt.DcCursorX; + GX_REG(DC_CURSOR_Y) = pCyrix->PrevExt.DcCursorY; + GX_REG(DC_CURSOR_COLOR) = pCyrix->PrevExt.DcCursorColor; - GX_REG(DC_GENERAL_CFG) = (GX_REG(DC_GENERAL_CFG) & (~DCFG_MASK)) - | (pCyrix->PrevExt.DcGeneralCfg & DCFG_MASK); + GX_REG(DC_GENERAL_CFG) = (GX_REG(DC_GENERAL_CFG) & (~DCFG_MASK)) + | (pCyrix->PrevExt.DcGeneralCfg & DCFG_MASK); - GX_REG(DC_UNLOCK) = 0; + GX_REG(DC_UNLOCK) = 0; - GX_REG(GP_BLIT_STATUS) = (GX_REG(GP_BLIT_STATUS) & (~GPBS_MASK)) - | (pCyrix->PrevExt.GpBlitStatus & GPBS_MASK); + GX_REG(GP_BLIT_STATUS) = (GX_REG(GP_BLIT_STATUS) & (~GPBS_MASK)) + | (pCyrix->PrevExt.GpBlitStatus & GPBS_MASK); #endif - vgaHWProtect(pScrn, FALSE); /* Turn on screen */ + vgaHWProtect(pScrn, FALSE); /* Turn on screen */ } void * CyrixSave(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg) { - CYRIXPrvPtr pCyrix; - vgaRegPtr vgaReg; - unsigned long vgaIOBase; + CYRIXPrvPtr pCyrix; + vgaRegPtr vgaReg; + unsigned long vgaIOBase; #ifndef MONOVGA - /* If we don't turn on the screen we end up restoring a - blanked display on some boxes whose APM is a bit too smart. - Save the display turned -on- therefore */ - - vgaHWProtect(pScrn, FALSE); /* Turn on screen */ - - /* save graphics pipeline registers */ - pCyrix = CYRIXPTR(pScrn); - vgaIOBase = VGAHWPTR(pScrn)->IOBase; - vgaReg = &VGAHWPTR(pScrn)->SavedReg; - pCyrix->PrevExt.GpBlitStatus = GX_REG(GP_BLIT_STATUS); - - /* save miscellaneous output registers */ - vgaReg->MiscOutReg = inb(0x3CC); - - /* save graphics pipeline registers */ - GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; - pCyrix->PrevExt.DcGeneralCfg = GX_REG(DC_GENERAL_CFG); - pCyrix->PrevExt.DcCursStOffset = GX_REG(DC_CURS_ST_OFFSET); - pCyrix->PrevExt.DcCbStOffset = GX_REG(DC_CB_ST_OFFSET); - pCyrix->PrevExt.DcLineDelta = GX_REG(DC_LINE_DELTA); - pCyrix->PrevExt.DcBufSize = GX_REG(DC_BUF_SIZE); - pCyrix->PrevExt.DcCursorX = GX_REG(DC_CURSOR_X); - pCyrix->PrevExt.DcCursorY = GX_REG(DC_CURSOR_Y); - pCyrix->PrevExt.DcCursorColor = GX_REG(DC_CURSOR_COLOR); - GX_REG(DC_UNLOCK) = 0; + /* If we don't turn on the screen we end up restoring a + blanked display on some boxes whose APM is a bit too smart. + Save the display turned -on- therefore */ + + vgaHWProtect(pScrn, FALSE); /* Turn on screen */ + + /* save graphics pipeline registers */ + pCyrix = CYRIXPTR(pScrn); + vgaIOBase = VGAHWPTR(pScrn)->IOBase; + vgaReg = &VGAHWPTR(pScrn)->SavedReg; + pCyrix->PrevExt.GpBlitStatus = GX_REG(GP_BLIT_STATUS); + + /* save miscellaneous output registers */ + vgaReg->MiscOutReg = inb(0x3CC); + + /* save graphics pipeline registers */ + GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; + pCyrix->PrevExt.DcGeneralCfg = GX_REG(DC_GENERAL_CFG); + pCyrix->PrevExt.DcCursStOffset = GX_REG(DC_CURS_ST_OFFSET); + pCyrix->PrevExt.DcCbStOffset = GX_REG(DC_CB_ST_OFFSET); + pCyrix->PrevExt.DcLineDelta = GX_REG(DC_LINE_DELTA); + pCyrix->PrevExt.DcBufSize = GX_REG(DC_BUF_SIZE); + pCyrix->PrevExt.DcCursorX = GX_REG(DC_CURSOR_X); + pCyrix->PrevExt.DcCursorY = GX_REG(DC_CURSOR_Y); + pCyrix->PrevExt.DcCursorColor = GX_REG(DC_CURSOR_COLOR); + GX_REG(DC_UNLOCK) = 0; #endif - /* save SoftVGA pCyrix->PrevExt.nded registers */ - outb(vgaIOBase + 4, CrtcVerticalTimingExtension); - pCyrix->PrevExt.VerticalTimingExtension = inb(vgaIOBase + 5); + /* save SoftVGA pCyrix->PrevExt.nded registers */ + outb(vgaIOBase + 4, CrtcVerticalTimingExtension); + pCyrix->PrevExt.VerticalTimingExtension = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, CrtcExtendedAddressControl); - pCyrix->PrevExt.ExtendedAddressControl = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, CrtcExtendedAddressControl); + pCyrix->PrevExt.ExtendedAddressControl = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, 19); - pCyrix->PrevExt.Offset = inb(vgaIOBase + 5); - - outb(vgaIOBase + 4, CrtcExtendedOffset); - pCyrix->PrevExt.ExtendedOffset = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, 19); + pCyrix->PrevExt.Offset = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, CrtcExtendedColorControl); - pCyrix->PrevExt.ExtendedColorControl = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, CrtcExtendedOffset); + pCyrix->PrevExt.ExtendedOffset = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, CrtcDisplayCompression); - pCyrix->PrevExt.DisplayCompression = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, CrtcExtendedColorControl); + pCyrix->PrevExt.ExtendedColorControl = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, CrtcDriverControl); - pCyrix->PrevExt.DriverControl = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, CrtcDisplayCompression); + pCyrix->PrevExt.DisplayCompression = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, CrtcDACControl); - pCyrix->PrevExt.DACControl = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, CrtcDriverControl); + pCyrix->PrevExt.DriverControl = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, CrtcClockControl); - pCyrix->PrevExt.ClockControl = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, CrtcDACControl); + pCyrix->PrevExt.DACControl = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, CrtcClockFrequency); - pCyrix->PrevExt.CrtClockFrequency = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, CrtcClockControl); + pCyrix->PrevExt.ClockControl = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, CrtcClockFrequencyFraction); - pCyrix->PrevExt.CrtClockFrequencyFraction = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, CrtcClockFrequency); + pCyrix->PrevExt.CrtClockFrequency = inb(vgaIOBase + 5); - outb(vgaIOBase + 4, CrtcRefreshRate); - pCyrix->PrevExt.RefreshRate = inb(vgaIOBase + 5); + outb(vgaIOBase + 4, CrtcClockFrequencyFraction); + pCyrix->PrevExt.CrtClockFrequencyFraction = inb(vgaIOBase + 5); - /* save standard VGA portion */ - CYRIXresetVGA(pScrn,vgaIOBase); + outb(vgaIOBase + 4, CrtcRefreshRate); + pCyrix->PrevExt.RefreshRate = inb(vgaIOBase + 5); - return((void *)vgaIOBase); -} + /* save standard VGA portion */ + CYRIXresetVGA(pScrn, vgaIOBase); + return ((void *) vgaIOBase); +} Bool CyrixInit(ScrnInfoPtr pScrn, DisplayModePtr mode) { - CYRIXPrvPtr pCyrix; - int offset_shift = (pScrn->bitsPerPixel == 16) ? 2 : - (pScrn->bitsPerPixel == 8) ? 3 : 4; - int line_offset = pScrn->displayWidth >> offset_shift; - - pCyrix = CYRIXPTR(pScrn); - - /* initialize standard VGA portion */ - if (!vgaHWInit(pScrn, mode)) - return(FALSE); - - /* initialize SoftVGA extended registers */ - pCyrix->PrevExt.VerticalTimingExtension = - ((mode->CrtcVSyncStart & 0x400) >> 4) | - (((mode->CrtcVDisplay - 1) & 0x400) >> 8) | - (((mode->CrtcVTotal - 2) & 0x400) >> 10) | - ((mode->CrtcVSyncStart & 0x400) >> 6); - - if (pScrn->bitsPerPixel < 8) - pCyrix->PrevExt.ExtendedAddressControl = EAC_DIRECT_FRAME_BUFFER; - else - pCyrix->PrevExt.ExtendedAddressControl = EAC_DIRECT_FRAME_BUFFER | - EAC_PACKED_CHAIN4; - - pCyrix->PrevExt.ExtendedOffset = ((line_offset >> 8) & 0x03); - pCyrix->PrevExt.Offset = line_offset; - - pCyrix->PrevExt.ExtendedColorControl = (pScrn->bitsPerPixel == 16) - ? ECC_16BPP | ECC_565_FORMAT - : ECC_8BPP; - - /* display compression is set using the DC registers */ - pCyrix->PrevExt.DisplayCompression = 0x00; - - /* we drive the palette through the display controller (in new - chipsets only) in 8bpp and 16bpp (that is, whenever the - hardware cursor is used). */ - if (pScrn->bitsPerPixel < 8) - pCyrix->PrevExt.DriverControl = 0x00; - else - pCyrix->PrevExt.DriverControl = DRVCT_DISPLAY_DRIVER_ACTIVE; - - /* set `16 bit bus' or else compression will hang the - system in 16bpp mode */ - if (pScrn->bitsPerPixel == 16) - pCyrix->PrevExt.DACControl = DACCT_ENABLE_16BIT_BUS; - else - pCyrix->PrevExt.DACControl = 0; - + CYRIXPrvPtr pCyrix; + int offset_shift = (pScrn->bitsPerPixel == 16) ? 2 : + (pScrn->bitsPerPixel == 8) ? 3 : 4; + int line_offset = pScrn->displayWidth >> offset_shift; + + pCyrix = CYRIXPTR(pScrn); + + /* initialize standard VGA portion */ + if (!vgaHWInit(pScrn, mode)) + return (FALSE); + + /* initialize SoftVGA extended registers */ + pCyrix->PrevExt.VerticalTimingExtension = + ((mode->CrtcVSyncStart & 0x400) >> 4) | + (((mode->CrtcVDisplay - 1) & 0x400) >> 8) | + (((mode->CrtcVTotal - 2) & 0x400) >> 10) | + ((mode->CrtcVSyncStart & 0x400) >> 6); + + if (pScrn->bitsPerPixel < 8) + pCyrix->PrevExt.ExtendedAddressControl = EAC_DIRECT_FRAME_BUFFER; + else + pCyrix->PrevExt.ExtendedAddressControl = EAC_DIRECT_FRAME_BUFFER | + EAC_PACKED_CHAIN4; + + pCyrix->PrevExt.ExtendedOffset = ((line_offset >> 8) & 0x03); + pCyrix->PrevExt.Offset = line_offset; + + pCyrix->PrevExt.ExtendedColorControl = (pScrn->bitsPerPixel == 16) + ? ECC_16BPP | ECC_565_FORMAT : ECC_8BPP; + + /* display compression is set using the DC registers */ + pCyrix->PrevExt.DisplayCompression = 0x00; + + /* we drive the palette through the display controller (in new + chipsets only) in 8bpp and 16bpp (that is, whenever the + hardware cursor is used). */ + if (pScrn->bitsPerPixel < 8) + pCyrix->PrevExt.DriverControl = 0x00; + else + pCyrix->PrevExt.DriverControl = DRVCT_DISPLAY_DRIVER_ACTIVE; + + /* set `16 bit bus' or else compression will hang the + system in 16bpp mode */ + if (pScrn->bitsPerPixel == 16) + pCyrix->PrevExt.DACControl = DACCT_ENABLE_16BIT_BUS; + else + pCyrix->PrevExt.DACControl = 0; #ifndef MONOVGA - /* initialize masked contents of display controller - hardware registers. */ - pCyrix->PrevExt.DcCursStOffset = pCyrix->CYRIXcursorAddress; - pCyrix->PrevExt.DcLineDelta = 0 << 12; - pCyrix->PrevExt.DcBufSize = 0x41 << 9; - pCyrix->PrevExt.DcCursorX = 0; - pCyrix->PrevExt.DcCursorY = 0; - pCyrix->PrevExt.DcCursorColor = 0; - - /* Compression is enabled only when a buffer was allocated by - FbInit and provided that the displayed screen is the virtual - screen. If the line delta is not 1024 or 2048, entire frames - will be flagged dirty as opposed to lines. Problems with 16bpp - and line-dirty flagging seem to have been solved now. */ - - if (pCyrix->NoCompress == FALSE && - mode->CrtcVDisplay == pScrn->virtualY && - mode->CrtcHDisplay == pScrn->virtualX && - 0 == GX_REG(DC_FB_ST_OFFSET)) - { - pCyrix->PrevExt.DcGeneralCfg = DC_GCFG_DECE | DC_GCFG_CMPE; - if (/* pScrn->bitsPerPixel != 8 || -- this is OK now */ - (pScrn->displayWidth * (pScrn->bitsPerPixel / 8)) & 0x03FF) - pCyrix->PrevExt.DcGeneralCfg |= DC_GCFG_FDTY; - } - else - pCyrix->PrevExt.DcGeneralCfg = 0; - - - /* initialize the graphics pipeline registers */ - pCyrix->PrevExt.GpBlitStatus = ((pScrn->displayWidth == 2048) ? - BC_FB_WIDTH_2048 : BC_FB_WIDTH_1024) | - ((pScrn->bitsPerPixel == 16) ? - BC_16BPP : BC_8BPP); + /* initialize masked contents of display controller + hardware registers. */ + pCyrix->PrevExt.DcCursStOffset = pCyrix->CYRIXcursorAddress; + pCyrix->PrevExt.DcLineDelta = 0 << 12; + pCyrix->PrevExt.DcBufSize = 0x41 << 9; + pCyrix->PrevExt.DcCursorX = 0; + pCyrix->PrevExt.DcCursorY = 0; + pCyrix->PrevExt.DcCursorColor = 0; + + /* Compression is enabled only when a buffer was allocated by + FbInit and provided that the displayed screen is the virtual + screen. If the line delta is not 1024 or 2048, entire frames + will be flagged dirty as opposed to lines. Problems with 16bpp + and line-dirty flagging seem to have been solved now. */ + + if (pCyrix->NoCompress == FALSE && + mode->CrtcVDisplay == pScrn->virtualY && + mode->CrtcHDisplay == pScrn->virtualX && 0 == GX_REG(DC_FB_ST_OFFSET)) { + pCyrix->PrevExt.DcGeneralCfg = DC_GCFG_DECE | DC_GCFG_CMPE; + if ( /* pScrn->bitsPerPixel != 8 || -- this is OK now */ + (pScrn->displayWidth * (pScrn->bitsPerPixel / 8)) & 0x03FF) + pCyrix->PrevExt.DcGeneralCfg |= DC_GCFG_FDTY; + } + else + pCyrix->PrevExt.DcGeneralCfg = 0; + + /* initialize the graphics pipeline registers */ + pCyrix->PrevExt.GpBlitStatus = ((pScrn->displayWidth == 2048) ? + BC_FB_WIDTH_2048 : BC_FB_WIDTH_1024) | + ((pScrn->bitsPerPixel == 16) ? BC_16BPP : BC_8BPP); #endif - return(TRUE); + return (TRUE); } - static void CYRIXresetVGA(ScrnInfoPtr pScrn, unsigned long vgaIOBase) { CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); unsigned char temp; + /* switch off compression and cursor the hard way */ - GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; - GX_REG(DC_GENERAL_CFG) &= ~(DC_GCFG_CMPE | DC_GCFG_DECE | DC_GCFG_FDTY | DC_GCFG_CURE); - GX_REG(DC_UNLOCK) = 0; - CYRIXmarkLinesDirty; - - /* reset SoftVGA extensions to standard VGA behaviour */ - outb(vgaIOBase + 4, CrtcExtendedAddressControl); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, temp & 0xf8); - outb(vgaIOBase + 4, CrtcExtendedStartAddress); - outb(vgaIOBase + 5, 0x00); - outb(vgaIOBase + 4, CrtcWriteMemoryAperture); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, temp & 0xe0); - outb(vgaIOBase + 4, CrtcReadMemoryAperture); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, temp & 0xe0); - outb(vgaIOBase + 4, CrtcDriverControl); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, temp & 0xfe); - outb(vgaIOBase + 4, CrtcDisplayCompression); - temp = inb(vgaIOBase + 5); - outb(vgaIOBase + 5, temp & 0xf0); + GX_REG(DC_UNLOCK) = DC_UNLOCK_VALUE; + GX_REG(DC_GENERAL_CFG) &= + ~(DC_GCFG_CMPE | DC_GCFG_DECE | DC_GCFG_FDTY | DC_GCFG_CURE); + GX_REG(DC_UNLOCK) = 0; + CYRIXmarkLinesDirty; + + /* reset SoftVGA extensions to standard VGA behaviour */ + outb(vgaIOBase + 4, CrtcExtendedAddressControl); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, temp & 0xf8); + outb(vgaIOBase + 4, CrtcExtendedStartAddress); + outb(vgaIOBase + 5, 0x00); + outb(vgaIOBase + 4, CrtcWriteMemoryAperture); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, temp & 0xe0); + outb(vgaIOBase + 4, CrtcReadMemoryAperture); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, temp & 0xe0); + outb(vgaIOBase + 4, CrtcDriverControl); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, temp & 0xfe); + outb(vgaIOBase + 4, CrtcDisplayCompression); + temp = inb(vgaIOBase + 5); + outb(vgaIOBase + 5, temp & 0xf0); } diff --git a/src/cyrix_shadow.c b/src/cyrix_shadow.c index afb928d..24e238e 100644 --- a/src/cyrix_shadow.c +++ b/src/cyrix_shadow.c @@ -20,34 +20,32 @@ #include "shadowfb.h" #include "servermd.h" - - void CYRIXRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox) { CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); int width, height, Bpp, FBPitch; unsigned char *src, *dst; - + Bpp = pScrn->bitsPerPixel >> 3; FBPitch = BitmapBytePad(pScrn->displayWidth * pScrn->bitsPerPixel); - while(num--) { - width = (pbox->x2 - pbox->x1) * Bpp; - height = pbox->y2 - pbox->y1; - src = pCyrix->ShadowPtr + (pbox->y1 * pCyrix->ShadowPitch) + - (pbox->x1 * Bpp); - dst = pCyrix->FbBase + (pbox->y1 * FBPitch) + (pbox->x1 * Bpp); - - while(height--) { - memcpy(dst, src, width); - dst += FBPitch; - src += pCyrix->ShadowPitch; - } - - pbox++; + while (num--) { + width = (pbox->x2 - pbox->x1) * Bpp; + height = pbox->y2 - pbox->y1; + src = pCyrix->ShadowPtr + (pbox->y1 * pCyrix->ShadowPitch) + + (pbox->x1 * Bpp); + dst = pCyrix->FbBase + (pbox->y1 * FBPitch) + (pbox->x1 * Bpp); + + while (height--) { + memcpy(dst, src, width); + dst += FBPitch; + src += pCyrix->ShadowPitch; + } + + pbox++; } -} +} void CYRIXPointerMoved(int index, int x, int y) @@ -56,15 +54,16 @@ CYRIXPointerMoved(int index, int x, int y) CYRIXPrvPtr pCyrix = CYRIXPTR(pScrn); int newX, newY; - if(pCyrix->Rotate == 1) { - newX = pScrn->pScreen->height - y - 1; - newY = x; - } else { - newX = y; - newY = pScrn->pScreen->width - x - 1; + if (pCyrix->Rotate == 1) { + newX = pScrn->pScreen->height - y - 1; + newY = x; + } + else { + newX = y; + newY = pScrn->pScreen->width - x - 1; } - (*pCyrix->PointerMoved)(index, newX, newY); + (*pCyrix->PointerMoved) (index, newX, newY); } void @@ -78,40 +77,39 @@ CYRIXRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox) dstPitch = pScrn->displayWidth; srcPitch = -pCyrix->Rotate * pCyrix->ShadowPitch; - while(num--) { - width = pbox->x2 - pbox->x1; - y1 = pbox->y1 & ~3; - y2 = (pbox->y2 + 3) & ~3; - height = (y2 - y1) >> 2; /* in dwords */ - - if(pCyrix->Rotate == 1) { - dstPtr = pCyrix->FbBase + - (pbox->x1 * dstPitch) + pScrn->virtualX - y2; - srcPtr = pCyrix->ShadowPtr + ((1 - y2) * srcPitch) + pbox->x1; - } else { - dstPtr = pCyrix->FbBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + y1; - srcPtr = pCyrix->ShadowPtr + (y1 * srcPitch) + pbox->x2 - 1; - } - - while(width--) { - src = srcPtr; - dst = (CARD32*)dstPtr; - count = height; - while(count--) { - *(dst++) = src[0] | (src[srcPitch] << 8) | - (src[srcPitch * 2] << 16) | - (src[srcPitch * 3] << 24); - src += srcPitch * 4; - } - srcPtr += pCyrix->Rotate; - dstPtr += dstPitch; - } - - pbox++; + while (num--) { + width = pbox->x2 - pbox->x1; + y1 = pbox->y1 & ~3; + y2 = (pbox->y2 + 3) & ~3; + height = (y2 - y1) >> 2; /* in dwords */ + + if (pCyrix->Rotate == 1) { + dstPtr = pCyrix->FbBase + + (pbox->x1 * dstPitch) + pScrn->virtualX - y2; + srcPtr = pCyrix->ShadowPtr + ((1 - y2) * srcPitch) + pbox->x1; + } + else { + dstPtr = pCyrix->FbBase + + ((pScrn->virtualY - pbox->x2) * dstPitch) + y1; + srcPtr = pCyrix->ShadowPtr + (y1 * srcPitch) + pbox->x2 - 1; + } + + while (width--) { + src = srcPtr; + dst = (CARD32 *) dstPtr; + count = height; + while (count--) { + *(dst++) = src[0] | (src[srcPitch] << 8) | + (src[srcPitch * 2] << 16) | (src[srcPitch * 3] << 24); + src += srcPitch * 4; + } + srcPtr += pCyrix->Rotate; + dstPtr += dstPitch; + } + + pbox++; } -} - +} void CYRIXRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox) @@ -124,37 +122,37 @@ CYRIXRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox) dstPitch = pScrn->displayWidth; srcPitch = -pCyrix->Rotate * pCyrix->ShadowPitch >> 1; - while(num--) { - width = pbox->x2 - pbox->x1; - y1 = pbox->y1 & ~1; - y2 = (pbox->y2 + 1) & ~1; - height = (y2 - y1) >> 1; /* in dwords */ - - if(pCyrix->Rotate == 1) { - dstPtr = (CARD16*)pCyrix->FbBase + - (pbox->x1 * dstPitch) + pScrn->virtualX - y2; - srcPtr = (CARD16*)pCyrix->ShadowPtr + - ((1 - y2) * srcPitch) + pbox->x1; - } else { - dstPtr = (CARD16*)pCyrix->FbBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + y1; - srcPtr = (CARD16*)pCyrix->ShadowPtr + - (y1 * srcPitch) + pbox->x2 - 1; - } - - while(width--) { - src = srcPtr; - dst = (CARD32*)dstPtr; - count = height; - while(count--) { - *(dst++) = src[0] | (src[srcPitch] << 16); - src += srcPitch * 2; - } - srcPtr += pCyrix->Rotate; - dstPtr += dstPitch; - } - - pbox++; + while (num--) { + width = pbox->x2 - pbox->x1; + y1 = pbox->y1 & ~1; + y2 = (pbox->y2 + 1) & ~1; + height = (y2 - y1) >> 1; /* in dwords */ + + if (pCyrix->Rotate == 1) { + dstPtr = (CARD16 *) pCyrix->FbBase + + (pbox->x1 * dstPitch) + pScrn->virtualX - y2; + srcPtr = (CARD16 *) pCyrix->ShadowPtr + + ((1 - y2) * srcPitch) + pbox->x1; + } + else { + dstPtr = (CARD16 *) pCyrix->FbBase + + ((pScrn->virtualY - pbox->x2) * dstPitch) + y1; + srcPtr = (CARD16 *) pCyrix->ShadowPtr + + (y1 * srcPitch) + pbox->x2 - 1; + } + + while (width--) { + src = srcPtr; + dst = (CARD32 *) dstPtr; + count = height; + while (count--) { + *(dst++) = src[0] | (src[srcPitch] << 16); + src += srcPitch * 2; + } + srcPtr += pCyrix->Rotate; + dstPtr += dstPitch; + } + + pbox++; } } - |