diff options
Diffstat (limited to 'src/ast_vgatool.c')
-rw-r--r-- | src/ast_vgatool.c | 484 |
1 files changed, 244 insertions, 240 deletions
diff --git a/src/ast_vgatool.c b/src/ast_vgatool.c index 92013c9..85b105c 100644 --- a/src/ast_vgatool.c +++ b/src/ast_vgatool.c @@ -1,240 +1,244 @@ -/*
- * Copyright (c) 2005 ASPEED Technology Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the authors not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "xf86.h"
-#include "xf86_ansic.h"
-#include "xf86_OSproc.h"
-#include "xf86Resources.h"
-#include "xf86RAC.h"
-#include "xf86cmap.h"
-#include "compiler.h"
-#include "mibstore.h"
-#include "vgaHW.h"
-#include "mipointer.h"
-#include "micmap.h"
-
-#include "fb.h"
-#include "regionstr.h"
-#include "xf86xv.h"
-#include "Xv.h"
-#include "vbe.h"
-
-#include "xf86PciInfo.h"
-#include "xf86Pci.h"
-
-/* framebuffer offscreen manager */
-#include "xf86fbman.h"
-
-/* include xaa includes */
-#include "xaa.h"
-#include "xaarop.h"
-
-/* H/W cursor support */
-#include "xf86Cursor.h"
-
-/* Driver specific headers */
-#include "ast.h"
-
-/* Prototype type declaration*/
-void vASTOpenKey(ScrnInfoPtr pScrn);
-Bool bASTRegInit(ScrnInfoPtr pScrn);
-ULONG GetVRAMInfo(ScrnInfoPtr pScrn);
-void vAST1000DisplayOn(ASTRecPtr pAST);
-void vAST1000DisplayOff(ASTRecPtr pAST);
-void vSetStartAddressCRT1(ASTRecPtr pAST, ULONG base);
-void vASTLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, VisualPtr pVisual);
-void ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
-
-void
-vASTOpenKey(ScrnInfoPtr pScrn)
-{
- ASTRecPtr pAST = ASTPTR(pScrn);
-
- SetIndexReg(CRTC_PORT,0x80, 0xA8);
-
-}
-
-Bool
-bASTRegInit(ScrnInfoPtr pScrn)
-{
- ASTRecPtr pAST = ASTPTR(pScrn);
-
- /* Enable MMIO */
- SetIndexRegMask(CRTC_PORT,0xA1, 0xFF, 0x04);
-
- return (TRUE);
-
-}
-
-ULONG
-GetVRAMInfo(ScrnInfoPtr pScrn)
-{
- ASTRecPtr pAST = ASTPTR(pScrn);
- UCHAR jReg;
-
- GetIndexRegMask(CRTC_PORT, 0xAA, 0xFF, jReg);
-
- switch (jReg & 0x03)
- {
- case 0x00:
- return (VIDEOMEM_SIZE_08M);
- case 0x01:
- return (VIDEOMEM_SIZE_16M);
- case 0x02:
- return (VIDEOMEM_SIZE_32M);
- case 0x03:
- return (VIDEOMEM_SIZE_64M);
- }
-
- return (DEFAULT_VIDEOMEM_SIZE);
-
-}
-
-
-void
-vSetStartAddressCRT1(ASTRecPtr pAST, ULONG base)
-{
- SetIndexReg(CRTC_PORT,0x0D, (UCHAR) (base & 0xFF));
- SetIndexReg(CRTC_PORT,0x0C, (UCHAR) ((base >> 8) & 0xFF));
- SetIndexReg(CRTC_PORT,0xAF, (UCHAR) ((base >> 16) & 0xFF));
-
-}
-
-void
-vAST1000DisplayOff(ASTRecPtr pAST)
-{
- SetIndexRegMask(SEQ_PORT,0x01, 0xDF, 0x20);
-
-}
-
-
-void
-vAST1000DisplayOn(ASTRecPtr pAST)
-{
-
- SetIndexRegMask(SEQ_PORT,0x01, 0xDF, 0x00);
-
-}
-
-
-void
-vASTLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors,
- VisualPtr pVisual)
-{
-
- ASTRecPtr pAST = ASTPTR(pScrn);
- int i, j, index;
- UCHAR DACIndex, DACR, DACG, DACB;
-
- switch (pScrn->bitsPerPixel) {
- case 15:
- for(i=0; i<numColors; i++) {
- index = indices[i];
- for(j=0; j<8; j++) {
- DACIndex = (index * 8) + j;
- DACR = colors[index].red << (8- pScrn->rgbBits);
- DACG = colors[index].green << (8- pScrn->rgbBits);
- DACB = colors[index].blue << (8- pScrn->rgbBits);
-
- VGA_LOAD_PALETTE_INDEX (DACIndex, DACR, DACG, DACB);
- }
- }
- break;
-
- case 16:
- for(i=0; i<numColors; i++) {
- index = indices[i];
- for(j=0; j<4; j++) {
- DACIndex = (index * 4) + j;
- DACR = colors[index/2].red << (8- pScrn->rgbBits);
- DACG = colors[index].green << (8- pScrn->rgbBits);
- DACB = colors[index/2].blue << (8- pScrn->rgbBits);
-
- VGA_LOAD_PALETTE_INDEX (DACIndex, DACR, DACG, DACB);
- }
- }
- break;
-
- case 24:
- for(i=0; i<numColors; i++) {
- index = indices[i];
- DACIndex = index;
- DACR = colors[index].red;
- DACG = colors[index].green;
- DACB = colors[index].blue;
-
- VGA_LOAD_PALETTE_INDEX (DACIndex, DACR, DACG, DACB);
- }
- break;
-
- default:
- for(i=0; i<numColors; i++) {
- index = indices[i];
- DACIndex = index;
- DACR = colors[index].red >> (8 - pScrn->rgbBits);
- DACG = colors[index].green >> (8 - pScrn->rgbBits);
- DACB = colors[index].blue >> (8 - pScrn->rgbBits);
-
- VGA_LOAD_PALETTE_INDEX (DACIndex, DACR, DACG, DACB);
- }
-
- } /* end of switch */
-
-} /* end of vASTLoadPalette */
-
-void
-ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags)
-{
- ASTRecPtr pAST;
- UCHAR SEQ01, CRB6;
-
- pAST = ASTPTR(pScrn);
- SEQ01=CRB6=0;
-
- switch (PowerManagementMode) {
- case DPMSModeOn:
- /* Screen: On; HSync: On, VSync: On */
- SEQ01 = 0x00;
- CRB6 = 0x00;
- break;
- case DPMSModeStandby:
- /* Screen: Off; HSync: Off, VSync: On */
- SEQ01 = 0x20;
- CRB6 = 0x01;
- break;
- case DPMSModeSuspend:
- /* Screen: Off; HSync: On, VSync: Off */
- SEQ01 = 0x20;
- CRB6 = 0x02;
- break;
- case DPMSModeOff:
- /* Screen: Off; HSync: Off, VSync: Off */
- SEQ01 = 0x20;
- CRB6 = 0x03;
- break;
- }
-
- SetIndexRegMask(SEQ_PORT,0x01, 0xDF, SEQ01);
- SetIndexRegMask(CRTC_PORT,0xB6, 0xFC, CRB6);
-
-
-}
+/* + * Copyright (c) 2005 ASPEED Technology Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the authors not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "xf86.h" +#include "xf86_ansic.h" +#include "xf86_OSproc.h" +#include "xf86Resources.h" +#include "xf86RAC.h" +#include "xf86cmap.h" +#include "compiler.h" +#include "mibstore.h" +#include "vgaHW.h" +#include "mipointer.h" +#include "micmap.h" + +#include "fb.h" +#include "regionstr.h" +#include "xf86xv.h" +#include "Xv.h" +#include "vbe.h" + +#include "xf86PciInfo.h" +#include "xf86Pci.h" + +/* framebuffer offscreen manager */ +#include "xf86fbman.h" + +/* include xaa includes */ +#include "xaa.h" +#include "xaarop.h" + +/* H/W cursor support */ +#include "xf86Cursor.h" + +/* Driver specific headers */ +#include "ast.h" + +/* Prototype type declaration*/ +void vASTOpenKey(ScrnInfoPtr pScrn); +Bool bASTRegInit(ScrnInfoPtr pScrn); +ULONG GetVRAMInfo(ScrnInfoPtr pScrn); +void vAST1000DisplayOn(ASTRecPtr pAST); +void vAST1000DisplayOff(ASTRecPtr pAST); +void vSetStartAddressCRT1(ASTRecPtr pAST, ULONG base); +void vASTLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, VisualPtr pVisual); +void ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags); + +void +vASTOpenKey(ScrnInfoPtr pScrn) +{ + ASTRecPtr pAST = ASTPTR(pScrn); + + SetIndexReg(CRTC_PORT,0x80, 0xA8); + +} + +Bool +bASTRegInit(ScrnInfoPtr pScrn) +{ + ASTRecPtr pAST = ASTPTR(pScrn); + + /* Enable MMIO */ + SetIndexRegMask(CRTC_PORT,0xA1, 0xFF, 0x04); + + return (TRUE); + +} + +ULONG +GetVRAMInfo(ScrnInfoPtr pScrn) +{ + ASTRecPtr pAST = ASTPTR(pScrn); + UCHAR jReg; + + vASTOpenKey(pScrn); + + GetIndexRegMask(CRTC_PORT, 0xAA, 0xFF, jReg); + + switch (jReg & 0x03) + { + case 0x00: + return (VIDEOMEM_SIZE_08M); + case 0x01: + return (VIDEOMEM_SIZE_16M); + case 0x02: + return (VIDEOMEM_SIZE_32M); + case 0x03: + return (VIDEOMEM_SIZE_64M); + } + + return (DEFAULT_VIDEOMEM_SIZE); + +} + + +void +vSetStartAddressCRT1(ASTRecPtr pAST, ULONG base) +{ + SetIndexReg(CRTC_PORT,0x0D, (UCHAR) (base & 0xFF)); + SetIndexReg(CRTC_PORT,0x0C, (UCHAR) ((base >> 8) & 0xFF)); + SetIndexReg(CRTC_PORT,0xAF, (UCHAR) ((base >> 16) & 0xFF)); + +} + +void +vAST1000DisplayOff(ASTRecPtr pAST) +{ + SetIndexRegMask(SEQ_PORT,0x01, 0xDF, 0x20); + +} + + +void +vAST1000DisplayOn(ASTRecPtr pAST) +{ + + SetIndexRegMask(SEQ_PORT,0x01, 0xDF, 0x00); + +} + + +void +vASTLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, + VisualPtr pVisual) +{ + + ASTRecPtr pAST = ASTPTR(pScrn); + int i, j, index; + UCHAR DACIndex, DACR, DACG, DACB; + + switch (pScrn->bitsPerPixel) { + case 15: + for(i=0; i<numColors; i++) { + index = indices[i]; + for(j=0; j<8; j++) { + DACIndex = (index * 8) + j; + DACR = colors[index].red << (8- pScrn->rgbBits); + DACG = colors[index].green << (8- pScrn->rgbBits); + DACB = colors[index].blue << (8- pScrn->rgbBits); + + VGA_LOAD_PALETTE_INDEX (DACIndex, DACR, DACG, DACB); + } + } + break; + + case 16: + for(i=0; i<numColors; i++) { + index = indices[i]; + for(j=0; j<4; j++) { + DACIndex = (index * 4) + j; + DACR = colors[index/2].red << (8- pScrn->rgbBits); + DACG = colors[index].green << (8- pScrn->rgbBits); + DACB = colors[index/2].blue << (8- pScrn->rgbBits); + + VGA_LOAD_PALETTE_INDEX (DACIndex, DACR, DACG, DACB); + } + } + break; + + case 24: + for(i=0; i<numColors; i++) { + index = indices[i]; + DACIndex = index; + DACR = colors[index].red; + DACG = colors[index].green; + DACB = colors[index].blue; + + VGA_LOAD_PALETTE_INDEX (DACIndex, DACR, DACG, DACB); + } + break; + + default: + for(i=0; i<numColors; i++) { + index = indices[i]; + DACIndex = index; + DACR = colors[index].red >> (8 - pScrn->rgbBits); + DACG = colors[index].green >> (8 - pScrn->rgbBits); + DACB = colors[index].blue >> (8 - pScrn->rgbBits); + + VGA_LOAD_PALETTE_INDEX (DACIndex, DACR, DACG, DACB); + } + + } /* end of switch */ + +} /* end of vASTLoadPalette */ + +void +ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags) +{ + ASTRecPtr pAST; + UCHAR SEQ01, CRB6; + + pAST = ASTPTR(pScrn); + SEQ01=CRB6=0; + + vASTOpenKey(pScrn); + + switch (PowerManagementMode) { + case DPMSModeOn: + /* Screen: On; HSync: On, VSync: On */ + SEQ01 = 0x00; + CRB6 = 0x00; + break; + case DPMSModeStandby: + /* Screen: Off; HSync: Off, VSync: On */ + SEQ01 = 0x20; + CRB6 = 0x01; + break; + case DPMSModeSuspend: + /* Screen: Off; HSync: On, VSync: Off */ + SEQ01 = 0x20; + CRB6 = 0x02; + break; + case DPMSModeOff: + /* Screen: Off; HSync: Off, VSync: Off */ + SEQ01 = 0x20; + CRB6 = 0x03; + break; + } + + SetIndexRegMask(SEQ_PORT,0x01, 0xDF, SEQ01); + SetIndexRegMask(CRTC_PORT,0xB6, 0xFC, CRB6); + + +} |