ast_accel.c revision b410ddbe
115fb4814Smrg/* 215fb4814Smrg * Copyright (c) 2005 ASPEED Technology Inc. 315fb4814Smrg * 415fb4814Smrg * Permission to use, copy, modify, distribute, and sell this software and its 515fb4814Smrg * documentation for any purpose is hereby granted without fee, provided that 615fb4814Smrg * the above copyright notice appear in all copies and that both that 715fb4814Smrg * copyright notice and this permission notice appear in supporting 815fb4814Smrg * documentation, and that the name of the authors not be used in 915fb4814Smrg * advertising or publicity pertaining to distribution of the software without 1015fb4814Smrg * specific, written prior permission. The authors makes no representations 1115fb4814Smrg * about the suitability of this software for any purpose. It is provided 1215fb4814Smrg * "as is" without express or implied warranty. 1315fb4814Smrg * 1415fb4814Smrg * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 1515fb4814Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 1615fb4814Smrg * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 1715fb4814Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 1815fb4814Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 1915fb4814Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 2015fb4814Smrg * PERFORMANCE OF THIS SOFTWARE. 2115fb4814Smrg */ 2215fb4814Smrg 2315fb4814Smrg#ifdef HAVE_CONFIG_H 2415fb4814Smrg#include <config.h> 2515fb4814Smrg#endif 2615fb4814Smrg#include "xf86.h" 2715fb4814Smrg#include "xf86_OSproc.h" 2815fb4814Smrg#include "xf86cmap.h" 2915fb4814Smrg#include "compiler.h" 3015fb4814Smrg#include "mibstore.h" 3115fb4814Smrg#include "vgaHW.h" 3215fb4814Smrg#include "mipointer.h" 3315fb4814Smrg#include "micmap.h" 3415fb4814Smrg 3515fb4814Smrg#include "fb.h" 3615fb4814Smrg#include "regionstr.h" 3715fb4814Smrg#include "xf86xv.h" 3815fb4814Smrg#include <X11/extensions/Xv.h> 3915fb4814Smrg#include "vbe.h" 4015fb4814Smrg 4115fb4814Smrg#include "xf86PciInfo.h" 4215fb4814Smrg#include "xf86Pci.h" 4315fb4814Smrg 4415fb4814Smrg/* framebuffer offscreen manager */ 4515fb4814Smrg#include "xf86fbman.h" 4615fb4814Smrg 4715fb4814Smrg/* include xaa includes */ 4815fb4814Smrg#include "xaa.h" 4915fb4814Smrg#include "xaarop.h" 5015fb4814Smrg 5115fb4814Smrg/* H/W cursor support */ 5215fb4814Smrg#include "xf86Cursor.h" 5315fb4814Smrg 5415fb4814Smrg/* Driver specific headers */ 5515fb4814Smrg#include "ast.h" 5615fb4814Smrg 5715fb4814Smrg#ifdef Accel_2D 5815fb4814Smrg/* ROP Translation Table */ 5915fb4814Smrgint ASTXAACopyROP[16] = 6015fb4814Smrg{ 6115fb4814Smrg ROP_0, /* GXclear */ 6215fb4814Smrg ROP_DSa, /* GXand */ 6315fb4814Smrg ROP_SDna, /* GXandReverse */ 6415fb4814Smrg ROP_S, /* GXcopy */ 6515fb4814Smrg ROP_DSna, /* GXandInverted */ 6615fb4814Smrg ROP_D, /* GXnoop */ 6715fb4814Smrg ROP_DSx, /* GXxor */ 6815fb4814Smrg ROP_DSo, /* GXor */ 6915fb4814Smrg ROP_DSon, /* GXnor */ 7015fb4814Smrg ROP_DSxn, /* GXequiv */ 7115fb4814Smrg ROP_Dn, /* GXinvert*/ 7215fb4814Smrg ROP_SDno, /* GXorReverse */ 7315fb4814Smrg ROP_Sn, /* GXcopyInverted */ 7415fb4814Smrg ROP_DSno, /* GXorInverted */ 7515fb4814Smrg ROP_DSan, /* GXnand */ 7615fb4814Smrg ROP_1 /* GXset */ 7715fb4814Smrg}; 7815fb4814Smrg 7915fb4814Smrgint ASTXAAPatternROP[16]= 8015fb4814Smrg{ 8115fb4814Smrg ROP_0, 8215fb4814Smrg ROP_DPa, 8315fb4814Smrg ROP_PDna, 8415fb4814Smrg ROP_P, 8515fb4814Smrg ROP_DPna, 8615fb4814Smrg ROP_D, 8715fb4814Smrg ROP_DPx, 8815fb4814Smrg ROP_DPo, 8915fb4814Smrg ROP_DPon, 9015fb4814Smrg ROP_PDxn, 9115fb4814Smrg ROP_Dn, 9215fb4814Smrg ROP_PDno, 9315fb4814Smrg ROP_Pn, 9415fb4814Smrg ROP_DPno, 9515fb4814Smrg ROP_DPan, 9615fb4814Smrg ROP_1 9715fb4814Smrg}; 9815fb4814Smrg 9915fb4814Smrg/* extern function */ 10015fb4814Smrgextern void vWaitEngIdle(ScrnInfoPtr pScrn, ASTRecPtr pAST); 10115fb4814Smrgextern UCHAR *pjRequestCMDQ(ASTRecPtr pAST, ULONG ulDataLen); 10215fb4814Smrgextern Bool bGetLineTerm(_LINEInfo *LineInfo, LINEPARAM *dsLineParam); 10315fb4814Smrg 10415fb4814Smrg/* Prototype type declaration */ 10515fb4814SmrgBool ASTAccelInit(ScreenPtr pScreen); 10615fb4814Smrgstatic void ASTSync(ScrnInfoPtr pScrn); 10715fb4814Smrgstatic void ASTSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, 10815fb4814Smrg int xdir, int ydir, int rop, 10915fb4814Smrg unsigned int planemask, int trans_color); 11015fb4814Smrgstatic void ASTSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int x1, int y1, int x2, 11115fb4814Smrg int y2, int w, int h); 11215fb4814Smrgstatic void ASTSetupForSolidFill(ScrnInfoPtr pScrn, 11315fb4814Smrg int color, int rop, unsigned int planemask); 11415fb4814Smrgstatic void ASTSubsequentSolidFillRect(ScrnInfoPtr pScrn, 11515fb4814Smrg int dst_x, int dst_y, int width, int height); 11615fb4814Smrgstatic void ASTSetupForSolidLine(ScrnInfoPtr pScrn, 11715fb4814Smrg int color, int rop, unsigned int planemask); 11815fb4814Smrgstatic void ASTSubsequentSolidHorVertLine(ScrnInfoPtr pScrn, 11915fb4814Smrg int x, int y, int len, int dir); 12015fb4814Smrgstatic void ASTSubsequentSolidTwoPointLine(ScrnInfoPtr pScrn, 12115fb4814Smrg int x1, int y1, int x2, int y2, int flags); 12215fb4814Smrgstatic void ASTSetupForDashedLine(ScrnInfoPtr pScrn, 12315fb4814Smrg int fg, int bg, int rop, unsigned int planemask, 12415fb4814Smrg int length, UCHAR *pattern); 12515fb4814Smrgstatic void ASTSubsequentDashedTwoPointLine(ScrnInfoPtr pScrn, 12615fb4814Smrg int x1, int y1, int x2, int y2, 12715fb4814Smrg int flags, int phase); 12815fb4814Smrgstatic void ASTSetupForMonoPatternFill(ScrnInfoPtr pScrn, 12915fb4814Smrg int patx, int paty, int fg, int bg, 13015fb4814Smrg int rop, unsigned int planemask); 13115fb4814Smrgstatic void ASTSubsequentMonoPatternFill(ScrnInfoPtr pScrn, 13215fb4814Smrg int patx, int paty, 13315fb4814Smrg int x, int y, int w, int h); 13415fb4814Smrgstatic void ASTSetupForColor8x8PatternFill(ScrnInfoPtr pScrn, int patx, int paty, 13515fb4814Smrg int rop, unsigned int planemask, int trans_col); 13615fb4814Smrgstatic void ASTSubsequentColor8x8PatternFillRect(ScrnInfoPtr pScrn, int patx, int paty, 13715fb4814Smrg int x, int y, int w, int h); 13815fb4814Smrgstatic void ASTSetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, 13915fb4814Smrg int fg, int bg, 14015fb4814Smrg int rop, unsigned int planemask); 14115fb4814Smrgstatic void ASTSubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, 14215fb4814Smrg int x, int y, 14315fb4814Smrg int width, int height, int skipleft); 14415fb4814Smrgstatic void ASTSetupForScreenToScreenColorExpandFill(ScrnInfoPtr pScrn, 14515fb4814Smrg int fg, int bg, 14615fb4814Smrg int rop, unsigned int planemask); 14715fb4814Smrgstatic void ASTSubsequentScreenToScreenColorExpandFill(ScrnInfoPtr pScrn, 14815fb4814Smrg int x, int y, int width, int height, 14915fb4814Smrg int src_x, int src_y, int offset); 15015fb4814Smrgstatic void ASTSetClippingRectangle(ScrnInfoPtr pScrn, 15115fb4814Smrg int left, int top, int right, int bottom); 15215fb4814Smrgstatic void ASTDisableClipping(ScrnInfoPtr pScrn); 153de78e416Smrgstatic void ASTSetHWClipping(ScrnInfoPtr pScrn, int delta_y); 15415fb4814Smrg 155b410ddbeSmrgstatic void AIPSubsequentSolidTwoPointLine(ScrnInfoPtr pScrn, 156b410ddbeSmrg int x1, int y1, int x2, int y2, int flags); 157b410ddbeSmrgstatic void AIPSubsequentDashedTwoPointLine(ScrnInfoPtr pScrn, 158b410ddbeSmrg int x1, int y1, int x2, int y2, 159b410ddbeSmrg int flags, int phase); 160b410ddbeSmrg 16115fb4814SmrgBool 16215fb4814SmrgASTAccelInit(ScreenPtr pScreen) 16315fb4814Smrg{ 16415fb4814Smrg XAAInfoRecPtr infoPtr; 16515fb4814Smrg ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; 16615fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 16715fb4814Smrg 16815fb4814Smrg pAST->AccelInfoPtr = infoPtr = XAACreateInfoRec(); 16915fb4814Smrg if (!infoPtr) return FALSE; 17015fb4814Smrg 17115fb4814Smrg infoPtr->Flags = LINEAR_FRAMEBUFFER | 17215fb4814Smrg OFFSCREEN_PIXMAPS | 17315fb4814Smrg PIXMAP_CACHE; 17415fb4814Smrg 17515fb4814Smrg /* Sync */ 17615fb4814Smrg if (pAST->ENGCaps & ENG_CAP_Sync) 17715fb4814Smrg infoPtr->Sync = ASTSync; 17815fb4814Smrg 17915fb4814Smrg /* Screen To Screen copy */ 18015fb4814Smrg if (pAST->ENGCaps & ENG_CAP_ScreenToScreenCopy) 18115fb4814Smrg { 18215fb4814Smrg infoPtr->SetupForScreenToScreenCopy = ASTSetupForScreenToScreenCopy; 18315fb4814Smrg infoPtr->SubsequentScreenToScreenCopy = ASTSubsequentScreenToScreenCopy; 18415fb4814Smrg infoPtr->ScreenToScreenCopyFlags = NO_TRANSPARENCY | NO_PLANEMASK; 18515fb4814Smrg } 18615fb4814Smrg 18715fb4814Smrg /* Solid fill */ 18815fb4814Smrg if (pAST->ENGCaps & ENG_CAP_SolidFill) 18915fb4814Smrg { 19015fb4814Smrg infoPtr->SetupForSolidFill = ASTSetupForSolidFill; 19115fb4814Smrg infoPtr->SubsequentSolidFillRect = ASTSubsequentSolidFillRect; 19215fb4814Smrg infoPtr->SolidFillFlags = NO_PLANEMASK; 19315fb4814Smrg } 19415fb4814Smrg 19515fb4814Smrg /* Solid Lines */ 19615fb4814Smrg if (pAST->ENGCaps & ENG_CAP_SolidLine) 19715fb4814Smrg { 198b410ddbeSmrg if (pAST->jChipType == AST2300) 199b410ddbeSmrg { 200b410ddbeSmrg infoPtr->SubsequentSolidTwoPointLine = AIPSubsequentSolidTwoPointLine; 201b410ddbeSmrg } 202b410ddbeSmrg else 203b410ddbeSmrg { 204b410ddbeSmrg infoPtr->SubsequentSolidTwoPointLine = ASTSubsequentSolidTwoPointLine; 205b410ddbeSmrg } 206b410ddbeSmrg 207b410ddbeSmrg infoPtr->SetupForSolidLine = ASTSetupForSolidLine; 20815fb4814Smrg infoPtr->SubsequentSolidHorVertLine = ASTSubsequentSolidHorVertLine; 20915fb4814Smrg infoPtr->SolidLineFlags = NO_PLANEMASK; 21015fb4814Smrg } 21115fb4814Smrg 21215fb4814Smrg /* Dashed Lines */ 21315fb4814Smrg if (pAST->ENGCaps & ENG_CAP_DashedLine) 214b410ddbeSmrg { 215b410ddbeSmrg if (pAST->jChipType == AST2300) 216b410ddbeSmrg { 217b410ddbeSmrg infoPtr->SubsequentDashedTwoPointLine = AIPSubsequentDashedTwoPointLine; 218b410ddbeSmrg } 219b410ddbeSmrg else 220b410ddbeSmrg { 221b410ddbeSmrg infoPtr->SubsequentDashedTwoPointLine = ASTSubsequentDashedTwoPointLine; 222b410ddbeSmrg } 223b410ddbeSmrg 224b410ddbeSmrg infoPtr->SetupForDashedLine = ASTSetupForDashedLine; 22515fb4814Smrg infoPtr->DashPatternMaxLength = 64; 22615fb4814Smrg infoPtr->DashedLineFlags = NO_PLANEMASK | 22715fb4814Smrg LINE_PATTERN_MSBFIRST_LSBJUSTIFIED; 22815fb4814Smrg } 22915fb4814Smrg 23015fb4814Smrg /* 8x8 mono pattern fill */ 23115fb4814Smrg if (pAST->ENGCaps & ENG_CAP_Mono8x8PatternFill) 23215fb4814Smrg { 23315fb4814Smrg infoPtr->SetupForMono8x8PatternFill = ASTSetupForMonoPatternFill; 23415fb4814Smrg infoPtr->SubsequentMono8x8PatternFillRect = ASTSubsequentMonoPatternFill; 23515fb4814Smrg infoPtr->Mono8x8PatternFillFlags = NO_PLANEMASK | 23615fb4814Smrg NO_TRANSPARENCY | 23715fb4814Smrg HARDWARE_PATTERN_SCREEN_ORIGIN | 23815fb4814Smrg HARDWARE_PATTERN_PROGRAMMED_BITS | 23915fb4814Smrg BIT_ORDER_IN_BYTE_MSBFIRST; 24015fb4814Smrg } 24115fb4814Smrg 24215fb4814Smrg /* 8x8 color pattern fill */ 24315fb4814Smrg if (pAST->ENGCaps & ENG_CAP_Color8x8PatternFill) 24415fb4814Smrg { 24515fb4814Smrg infoPtr->SetupForColor8x8PatternFill = ASTSetupForColor8x8PatternFill; 24615fb4814Smrg infoPtr->SubsequentColor8x8PatternFillRect = ASTSubsequentColor8x8PatternFillRect; 24715fb4814Smrg infoPtr->Color8x8PatternFillFlags = NO_PLANEMASK | 24815fb4814Smrg NO_TRANSPARENCY | 24915fb4814Smrg HARDWARE_PATTERN_SCREEN_ORIGIN; 25015fb4814Smrg } 25115fb4814Smrg 25215fb4814Smrg /* CPU To Screen Color Expand */ 25315fb4814Smrg if (pAST->ENGCaps & ENG_CAP_CPUToScreenColorExpand) 25415fb4814Smrg { 25515fb4814Smrg infoPtr->SetupForCPUToScreenColorExpandFill = ASTSetupForCPUToScreenColorExpandFill; 25615fb4814Smrg infoPtr->SubsequentCPUToScreenColorExpandFill = ASTSubsequentCPUToScreenColorExpandFill; 25715fb4814Smrg infoPtr->ColorExpandRange = MAX_PATReg_Size; 25815fb4814Smrg infoPtr->ColorExpandBase = MMIOREG_PAT; 25915fb4814Smrg infoPtr->CPUToScreenColorExpandFillFlags = NO_PLANEMASK | 26015fb4814Smrg BIT_ORDER_IN_BYTE_MSBFIRST; 26115fb4814Smrg } 26215fb4814Smrg 26315fb4814Smrg /* Screen To Screen Color Expand */ 26415fb4814Smrg if (pAST->ENGCaps & ENG_CAP_ScreenToScreenColorExpand) 26515fb4814Smrg { 26615fb4814Smrg infoPtr->SetupForScreenToScreenColorExpandFill = ASTSetupForScreenToScreenColorExpandFill; 26715fb4814Smrg infoPtr->SubsequentScreenToScreenColorExpandFill = ASTSubsequentScreenToScreenColorExpandFill; 26815fb4814Smrg infoPtr->ScreenToScreenColorExpandFillFlags = NO_PLANEMASK | 26915fb4814Smrg BIT_ORDER_IN_BYTE_MSBFIRST; 27015fb4814Smrg } 27115fb4814Smrg 27215fb4814Smrg /* Clipping */ 27315fb4814Smrg if (pAST->ENGCaps & ENG_CAP_Clipping) 27415fb4814Smrg { 27515fb4814Smrg infoPtr->SetClippingRectangle = ASTSetClippingRectangle; 27615fb4814Smrg infoPtr->DisableClipping = ASTDisableClipping; 27715fb4814Smrg infoPtr->ClippingFlags = HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY | 27815fb4814Smrg HARDWARE_CLIP_MONO_8x8_FILL | 27915fb4814Smrg HARDWARE_CLIP_COLOR_8x8_FILL | 28015fb4814Smrg HARDWARE_CLIP_SOLID_LINE | 28115fb4814Smrg HARDWARE_CLIP_DASHED_LINE | 28215fb4814Smrg HARDWARE_CLIP_SOLID_LINE; 28315fb4814Smrg } 28415fb4814Smrg 28515fb4814Smrg return(XAAInit(pScreen, infoPtr)); 28615fb4814Smrg 28715fb4814Smrg} /* end of ASTAccelInit */ 28815fb4814Smrg 28915fb4814Smrg 29015fb4814Smrgstatic void 29115fb4814SmrgASTSync(ScrnInfoPtr pScrn) 29215fb4814Smrg{ 29315fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 29415fb4814Smrg 29515fb4814Smrg /* wait engle idle */ 29615fb4814Smrg vWaitEngIdle(pScrn, pAST); 29715fb4814Smrg 29815fb4814Smrg} /* end of ASTSync */ 29915fb4814Smrg 30015fb4814Smrg 30115fb4814Smrgstatic void ASTSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, 30215fb4814Smrg int xdir, int ydir, int rop, 30315fb4814Smrg unsigned int planemask, int trans_color) 30415fb4814Smrg{ 30515fb4814Smrg 30615fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 30715fb4814Smrg PKT_SC *pSingleCMD; 30815fb4814Smrg ULONG cmdreg; 30915fb4814Smrg 31015fb4814Smrg/* 31115fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSetupForScreenToScreenCopy\n"); 31215fb4814Smrg*/ 31315fb4814Smrg /* Modify Reg. Value */ 31415fb4814Smrg cmdreg = CMD_BITBLT; 31515fb4814Smrg switch (pAST->VideoModeInfo.bitsPerPixel) 31615fb4814Smrg { 31715fb4814Smrg case 8: 31815fb4814Smrg cmdreg |= CMD_COLOR_08; 31915fb4814Smrg break; 32015fb4814Smrg case 15: 32115fb4814Smrg case 16: 32215fb4814Smrg cmdreg |= CMD_COLOR_16; 32315fb4814Smrg break; 32415fb4814Smrg case 24: 32515fb4814Smrg case 32: 32615fb4814Smrg cmdreg |= CMD_COLOR_32; 32715fb4814Smrg break; 32815fb4814Smrg } 32915fb4814Smrg cmdreg |= (ASTXAACopyROP[rop] << 8); 33015fb4814Smrg pAST->ulCMDReg = cmdreg; 33115fb4814Smrg 33215fb4814Smrg if (!pAST->MMIO2D) 33315fb4814Smrg { 33415fb4814Smrg /* Write to CMDQ */ 33515fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*2); 33615fb4814Smrg 33715fb4814Smrg ASTSetupSRCPitch(pSingleCMD, pAST->VideoModeInfo.ScreenPitch); 33815fb4814Smrg pSingleCMD++; 33915fb4814Smrg ASTSetupDSTPitchHeight(pSingleCMD, pAST->VideoModeInfo.ScreenPitch, -1); 340de78e416Smrg 341de78e416Smrg /* Update Write Pointer */ 342de78e416Smrg mUpdateWritePointer; 343de78e416Smrg 34415fb4814Smrg } 34515fb4814Smrg else 34615fb4814Smrg { 34715fb4814Smrg /* Write to MMIO */ 34815fb4814Smrg ASTSetupSRCPitch_MMIO(pAST->VideoModeInfo.ScreenPitch); 34915fb4814Smrg ASTSetupDSTPitchHeight_MMIO(pAST->VideoModeInfo.ScreenPitch, -1); 35015fb4814Smrg } 35115fb4814Smrg 35215fb4814Smrg} /* end of ASTSetupForScreenToScreenCopy */ 35315fb4814Smrg 35415fb4814Smrgstatic void 35515fb4814SmrgASTSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int x1, int y1, int x2, 35615fb4814Smrg int y2, int width, int height) 35715fb4814Smrg{ 35815fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 35915fb4814Smrg PKT_SC *pSingleCMD; 36015fb4814Smrg int src_x, src_y, dst_x, dst_y; 36115fb4814Smrg ULONG srcbase, dstbase, cmdreg; 362de78e416Smrg int delta_y = 0; 36315fb4814Smrg/* 36415fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentScreenToScreenCopy\n"); 36515fb4814Smrg*/ 36615fb4814Smrg 367de78e416Smrg if ((width != 0) && (height != 0)) 368de78e416Smrg { 369de78e416Smrg /* Modify Reg. Value */ 370de78e416Smrg cmdreg = pAST->ulCMDReg; 371de78e416Smrg if (pAST->EnableClip) 372de78e416Smrg cmdreg |= CMD_ENABLE_CLIP; 373de78e416Smrg else 374de78e416Smrg cmdreg &= ~CMD_ENABLE_CLIP; 375de78e416Smrg srcbase = dstbase = 0; 376de78e416Smrg 377de78e416Smrg if (x1 < x2) 378de78e416Smrg cmdreg |= CMD_X_DEC; 379de78e416Smrg 380de78e416Smrg if (y1 < y2) 381de78e416Smrg cmdreg |= CMD_Y_DEC; 38215fb4814Smrg 383de78e416Smrg if ((y1 + height) >= MAX_SRC_Y) 384de78e416Smrg { 385de78e416Smrg srcbase=pAST->VideoModeInfo.ScreenPitch*y1; 386de78e416Smrg y1 = 0; 387de78e416Smrg } 388de78e416Smrg 389de78e416Smrg if ((y2 + height) >= pScrn->virtualY) 390de78e416Smrg { 391de78e416Smrg delta_y = y2; 392de78e416Smrg dstbase=pAST->VideoModeInfo.ScreenPitch*y2; 393de78e416Smrg y2 = 0; 394de78e416Smrg } 395de78e416Smrg 396de78e416Smrg if (cmdreg & CMD_X_DEC) 397de78e416Smrg { 398de78e416Smrg src_x = x1 + width - 1; 399de78e416Smrg dst_x = x2 + width - 1; 400de78e416Smrg } 401de78e416Smrg else 402de78e416Smrg { 403de78e416Smrg src_x = x1; 404de78e416Smrg dst_x = x2; 405de78e416Smrg } 406de78e416Smrg 407de78e416Smrg if (cmdreg & CMD_Y_DEC) 408de78e416Smrg { 409de78e416Smrg src_y = y1 + height - 1; 410de78e416Smrg dst_y = y2 + height - 1; 411de78e416Smrg } 412de78e416Smrg else 413de78e416Smrg { 414de78e416Smrg src_y = y1; 415de78e416Smrg dst_y = y2; 416de78e416Smrg } 417de78e416Smrg 418de78e416Smrg if (pAST->EnableClip) 419de78e416Smrg ASTSetHWClipping(pScrn, delta_y); 420de78e416Smrg 421de78e416Smrg if (!pAST->MMIO2D) 422de78e416Smrg { 423de78e416Smrg /* Write to CMDQ */ 424de78e416Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*6); 42515fb4814Smrg 426de78e416Smrg ASTSetupSRCBase(pSingleCMD, srcbase); 427de78e416Smrg pSingleCMD++; 428de78e416Smrg ASTSetupDSTBase(pSingleCMD, dstbase); 429de78e416Smrg pSingleCMD++; 430de78e416Smrg ASTSetupDSTXY(pSingleCMD, dst_x, dst_y); 431de78e416Smrg pSingleCMD++; 432de78e416Smrg ASTSetupSRCXY(pSingleCMD, src_x, src_y); 433de78e416Smrg pSingleCMD++; 434de78e416Smrg ASTSetupRECTXY(pSingleCMD, width, height); 435de78e416Smrg pSingleCMD++; 436de78e416Smrg ASTSetupCMDReg(pSingleCMD, cmdreg); 437de78e416Smrg 438de78e416Smrg /* Update Write Pointer */ 439de78e416Smrg mUpdateWritePointer; 44015fb4814Smrg 441de78e416Smrg } 442de78e416Smrg else 443de78e416Smrg { 444de78e416Smrg ASTSetupSRCBase_MMIO(srcbase); 445de78e416Smrg ASTSetupDSTBase_MMIO(dstbase); 446de78e416Smrg ASTSetupDSTXY_MMIO(dst_x, dst_y); 447de78e416Smrg ASTSetupSRCXY_MMIO(src_x, src_y); 448de78e416Smrg ASTSetupRECTXY_MMIO(width, height); 449de78e416Smrg ASTSetupCMDReg_MMIO(cmdreg); 450de78e416Smrg 451de78e416Smrg vWaitEngIdle(pScrn, pAST); 452de78e416Smrg } 453de78e416Smrg 454de78e416Smrg } /* width & height check */ 45515fb4814Smrg 45615fb4814Smrg} /* end of ASTSubsequentScreenToScreenCopy */ 45715fb4814Smrg 45815fb4814Smrgstatic void 45915fb4814SmrgASTSetupForSolidFill(ScrnInfoPtr pScrn, 46015fb4814Smrg int color, int rop, unsigned int planemask) 46115fb4814Smrg{ 46215fb4814Smrg 46315fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 46415fb4814Smrg PKT_SC *pSingleCMD; 46515fb4814Smrg ULONG cmdreg; 46615fb4814Smrg 46715fb4814Smrg/* 46815fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSetupForSolidFill\n"); 46915fb4814Smrg*/ 47015fb4814Smrg /* Modify Reg. Value */ 47115fb4814Smrg cmdreg = CMD_BITBLT | CMD_PAT_FGCOLOR; 47215fb4814Smrg switch (pAST->VideoModeInfo.bitsPerPixel) 47315fb4814Smrg { 47415fb4814Smrg case 8: 47515fb4814Smrg cmdreg |= CMD_COLOR_08; 47615fb4814Smrg break; 47715fb4814Smrg case 15: 47815fb4814Smrg case 16: 47915fb4814Smrg cmdreg |= CMD_COLOR_16; 48015fb4814Smrg break; 48115fb4814Smrg case 24: 48215fb4814Smrg case 32: 48315fb4814Smrg cmdreg |= CMD_COLOR_32; 48415fb4814Smrg break; 48515fb4814Smrg } 48615fb4814Smrg cmdreg |= (ASTXAAPatternROP[rop] << 8); 48715fb4814Smrg pAST->ulCMDReg = cmdreg; 48815fb4814Smrg 48915fb4814Smrg if (!pAST->MMIO2D) 49015fb4814Smrg { 49115fb4814Smrg /* Write to CMDQ */ 49215fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*2); 49315fb4814Smrg 49415fb4814Smrg ASTSetupDSTPitchHeight(pSingleCMD, pAST->VideoModeInfo.ScreenPitch, -1); 49515fb4814Smrg pSingleCMD++; 496de78e416Smrg ASTSetupFG(pSingleCMD, color); 497de78e416Smrg 498de78e416Smrg /* Update Write Pointer */ 499de78e416Smrg mUpdateWritePointer; 500de78e416Smrg 50115fb4814Smrg } 50215fb4814Smrg else 50315fb4814Smrg { 50415fb4814Smrg ASTSetupDSTPitchHeight_MMIO(pAST->VideoModeInfo.ScreenPitch, -1); 50515fb4814Smrg ASTSetupFG_MMIO(color); 50615fb4814Smrg } 50715fb4814Smrg 50815fb4814Smrg} /* end of ASTSetupForSolidFill */ 50915fb4814Smrg 51015fb4814Smrg 51115fb4814Smrgstatic void 51215fb4814SmrgASTSubsequentSolidFillRect(ScrnInfoPtr pScrn, 51315fb4814Smrg int dst_x, int dst_y, int width, int height) 51415fb4814Smrg{ 51515fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 51615fb4814Smrg PKT_SC *pSingleCMD; 517de78e416Smrg ULONG dstbase, cmdreg; 518de78e416Smrg int delta_y = 0; 519de78e416Smrg 52015fb4814Smrg/* 52115fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentSolidFillRect\n"); 52215fb4814Smrg*/ 52315fb4814Smrg 524de78e416Smrg if ((width != 0) && (height != 0)) 525de78e416Smrg { 526de78e416Smrg /* Modify Reg. Value */ 527de78e416Smrg cmdreg = pAST->ulCMDReg; 528de78e416Smrg if (pAST->EnableClip) 529de78e416Smrg cmdreg |= CMD_ENABLE_CLIP; 530de78e416Smrg else 531de78e416Smrg cmdreg &= ~CMD_ENABLE_CLIP; 532de78e416Smrg dstbase = 0; 533de78e416Smrg 534de78e416Smrg if (dst_y >= pScrn->virtualY) 535de78e416Smrg { 536de78e416Smrg delta_y = dst_y; 537de78e416Smrg dstbase=pAST->VideoModeInfo.ScreenPitch*dst_y; 538de78e416Smrg dst_y=0; 539de78e416Smrg } 54015fb4814Smrg 541de78e416Smrg if (pAST->EnableClip) 542de78e416Smrg ASTSetHWClipping(pScrn, delta_y); 543de78e416Smrg 544de78e416Smrg if (!pAST->MMIO2D) 545de78e416Smrg { 546de78e416Smrg /* Write to CMDQ */ 547de78e416Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*4); 548de78e416Smrg 549de78e416Smrg ASTSetupDSTBase(pSingleCMD, dstbase); 550de78e416Smrg pSingleCMD++; 551de78e416Smrg ASTSetupDSTXY(pSingleCMD, dst_x, dst_y); 552de78e416Smrg pSingleCMD++; 553de78e416Smrg ASTSetupRECTXY(pSingleCMD, width, height); 554de78e416Smrg pSingleCMD++; 555de78e416Smrg ASTSetupCMDReg(pSingleCMD, cmdreg); 556de78e416Smrg 557de78e416Smrg /* Update Write Pointer */ 558de78e416Smrg mUpdateWritePointer; 559de78e416Smrg 560de78e416Smrg } 561de78e416Smrg else 562de78e416Smrg { 563de78e416Smrg ASTSetupDSTBase_MMIO(dstbase); 564de78e416Smrg ASTSetupDSTXY_MMIO(dst_x, dst_y); 565de78e416Smrg ASTSetupRECTXY_MMIO(width, height); 566de78e416Smrg ASTSetupCMDReg_MMIO(cmdreg); 567de78e416Smrg 568de78e416Smrg vWaitEngIdle(pScrn, pAST); 569de78e416Smrg 570de78e416Smrg } 571de78e416Smrg 572de78e416Smrg } /* width & height check */ 57315fb4814Smrg 57415fb4814Smrg 57515fb4814Smrg} /* end of ASTSubsequentSolidFillRect */ 57615fb4814Smrg 57715fb4814Smrg/* Line */ 57815fb4814Smrgstatic void ASTSetupForSolidLine(ScrnInfoPtr pScrn, 57915fb4814Smrg int color, int rop, unsigned int planemask) 58015fb4814Smrg{ 58115fb4814Smrg 58215fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 58315fb4814Smrg PKT_SC *pSingleCMD; 58415fb4814Smrg ULONG cmdreg; 58515fb4814Smrg/* 58615fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSetupForSolidLine\n"); 58715fb4814Smrg*/ 58815fb4814Smrg /* Modify Reg. Value */ 58915fb4814Smrg cmdreg = CMD_BITBLT; 59015fb4814Smrg switch (pAST->VideoModeInfo.bitsPerPixel) 59115fb4814Smrg { 59215fb4814Smrg case 8: 59315fb4814Smrg cmdreg |= CMD_COLOR_08; 59415fb4814Smrg break; 59515fb4814Smrg case 15: 59615fb4814Smrg case 16: 59715fb4814Smrg cmdreg |= CMD_COLOR_16; 59815fb4814Smrg break; 59915fb4814Smrg case 24: 60015fb4814Smrg case 32: 60115fb4814Smrg cmdreg |= CMD_COLOR_32; 60215fb4814Smrg break; 60315fb4814Smrg } 60415fb4814Smrg cmdreg |= (ASTXAAPatternROP[rop] << 8); 60515fb4814Smrg pAST->ulCMDReg = cmdreg; 60615fb4814Smrg 60715fb4814Smrg if (!pAST->MMIO2D) 60815fb4814Smrg { 60915fb4814Smrg /* Write to CMDQ */ 61015fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*3); 61115fb4814Smrg 61215fb4814Smrg ASTSetupDSTPitchHeight(pSingleCMD, pAST->VideoModeInfo.ScreenPitch, -1); 61315fb4814Smrg pSingleCMD++; 61415fb4814Smrg ASTSetupFG(pSingleCMD, color); 61515fb4814Smrg pSingleCMD++; 61615fb4814Smrg ASTSetupBG(pSingleCMD, 0); 61715fb4814Smrg 618de78e416Smrg /* Update Write Pointer */ 619de78e416Smrg mUpdateWritePointer; 620de78e416Smrg 62115fb4814Smrg } 62215fb4814Smrg else 62315fb4814Smrg { 62415fb4814Smrg /* Write to MMIO */ 62515fb4814Smrg ASTSetupDSTPitchHeight_MMIO(pAST->VideoModeInfo.ScreenPitch, -1); 62615fb4814Smrg ASTSetupFG_MMIO(color); 62715fb4814Smrg ASTSetupBG_MMIO(0); 62815fb4814Smrg } 62915fb4814Smrg 63015fb4814Smrg} /* end of ASTSetupForSolidLine */ 63115fb4814Smrg 63215fb4814Smrg 63315fb4814Smrgstatic void ASTSubsequentSolidHorVertLine(ScrnInfoPtr pScrn, 63415fb4814Smrg int x, int y, int len, int dir) 63515fb4814Smrg{ 63615fb4814Smrg 63715fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 63815fb4814Smrg PKT_SC *pSingleCMD; 63915fb4814Smrg ULONG dstbase, cmdreg; 64015fb4814Smrg int width, height; 641de78e416Smrg int delta_y = 0; 64215fb4814Smrg/* 64315fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentSolidHorVertLine\n"); 64415fb4814Smrg*/ 64515fb4814Smrg 646de78e416Smrg if (len != 0) 647de78e416Smrg { 648de78e416Smrg /* Modify Reg. Value */ 649de78e416Smrg cmdreg = (pAST->ulCMDReg & (~CMD_MASK)) | CMD_BITBLT; 650de78e416Smrg if (pAST->EnableClip) 651de78e416Smrg cmdreg |= CMD_ENABLE_CLIP; 652de78e416Smrg else 653de78e416Smrg cmdreg &= ~CMD_ENABLE_CLIP; 654de78e416Smrg dstbase = 0; 655de78e416Smrg 656de78e416Smrg if(dir == DEGREES_0) { /* horizontal */ 657de78e416Smrg width = len; 658de78e416Smrg height = 1; 659de78e416Smrg } else { /* vertical */ 660de78e416Smrg width = 1; 661de78e416Smrg height = len; 662de78e416Smrg } 663de78e416Smrg 664de78e416Smrg if ((y + height) >= pScrn->virtualY) 665de78e416Smrg { 666de78e416Smrg delta_y = y; 667de78e416Smrg dstbase=pAST->VideoModeInfo.ScreenPitch*y; 668de78e416Smrg y=0; 669de78e416Smrg } 670de78e416Smrg 671de78e416Smrg if (pAST->EnableClip) 672de78e416Smrg ASTSetHWClipping(pScrn, delta_y); 673de78e416Smrg 674de78e416Smrg if (!pAST->MMIO2D) 675de78e416Smrg { 676de78e416Smrg /* Write to CMDQ */ 677de78e416Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*4); 678de78e416Smrg 679de78e416Smrg ASTSetupDSTBase(pSingleCMD, dstbase); 680de78e416Smrg pSingleCMD++; 681de78e416Smrg ASTSetupDSTXY(pSingleCMD, x, y); 682de78e416Smrg pSingleCMD++; 683de78e416Smrg ASTSetupRECTXY(pSingleCMD, width, height); 684de78e416Smrg pSingleCMD++; 685de78e416Smrg ASTSetupCMDReg(pSingleCMD, cmdreg); 686de78e416Smrg 687de78e416Smrg /* Update Write Pointer */ 688de78e416Smrg mUpdateWritePointer; 689de78e416Smrg 690de78e416Smrg } 691de78e416Smrg else 692de78e416Smrg { 693de78e416Smrg ASTSetupDSTBase_MMIO(dstbase); 694de78e416Smrg ASTSetupDSTXY_MMIO(x, y); 695de78e416Smrg ASTSetupRECTXY_MMIO(width, height); 696de78e416Smrg ASTSetupCMDReg_MMIO(cmdreg); 697de78e416Smrg 698de78e416Smrg vWaitEngIdle(pScrn, pAST); 699de78e416Smrg 700de78e416Smrg } 701de78e416Smrg 702de78e416Smrg } /* len check */ 70315fb4814Smrg 70415fb4814Smrg} /* end of ASTSubsequentSolidHorVertLine */ 70515fb4814Smrg 70615fb4814Smrgstatic void ASTSubsequentSolidTwoPointLine(ScrnInfoPtr pScrn, 70715fb4814Smrg int x1, int y1, int x2, int y2, int flags) 70815fb4814Smrg{ 70915fb4814Smrg 71015fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 71115fb4814Smrg PKT_SC *pSingleCMD; 71215fb4814Smrg LINEPARAM dsLineParam; 71315fb4814Smrg _LINEInfo LineInfo; 71415fb4814Smrg ULONG dstbase, ulCommand; 71515fb4814Smrg ULONG miny, maxy; 71615fb4814Smrg USHORT usXM; 717de78e416Smrg int delta_y = 0; 718de78e416Smrg 71915fb4814Smrg/* 72015fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentSolidTwoPointLine\n"); 72115fb4814Smrg*/ 72215fb4814Smrg 72315fb4814Smrg /* Modify Reg. Value */ 72415fb4814Smrg ulCommand = (pAST->ulCMDReg & (~CMD_MASK)) | CMD_LINEDRAW; 72515fb4814Smrg if(flags & OMIT_LAST) 72615fb4814Smrg ulCommand |= CMD_NOT_DRAW_LAST_PIXEL; 72715fb4814Smrg else 72815fb4814Smrg ulCommand &= ~CMD_NOT_DRAW_LAST_PIXEL; 72915fb4814Smrg if (pAST->EnableClip) 73015fb4814Smrg ulCommand |= CMD_ENABLE_CLIP; 731de78e416Smrg else 732de78e416Smrg ulCommand &= ~CMD_ENABLE_CLIP; 73315fb4814Smrg dstbase = 0; 73415fb4814Smrg miny = (y1 > y2) ? y2 : y1; 73515fb4814Smrg maxy = (y1 > y2) ? y1 : y2; 73615fb4814Smrg if(maxy >= pScrn->virtualY) { 737de78e416Smrg delta_y = miny; 73815fb4814Smrg dstbase = pAST->VideoModeInfo.ScreenPitch * miny; 73915fb4814Smrg y1 -= miny; 74015fb4814Smrg y2 -= miny; 74115fb4814Smrg } 742de78e416Smrg 74315fb4814Smrg LineInfo.X1 = x1; 74415fb4814Smrg LineInfo.Y1 = y1; 74515fb4814Smrg LineInfo.X2 = x2; 74615fb4814Smrg LineInfo.Y2 = y2; 74715fb4814Smrg 74815fb4814Smrg bGetLineTerm(&LineInfo, &dsLineParam); /* Get Line Parameter */ 74915fb4814Smrg 75015fb4814Smrg if (dsLineParam.dwLineAttributes & LINEPARAM_X_DEC) 75115fb4814Smrg ulCommand |= CMD_X_DEC; 75215fb4814Smrg if (dsLineParam.dwLineAttributes & LINEPARAM_Y_DEC) 75315fb4814Smrg ulCommand |= CMD_Y_DEC; 75415fb4814Smrg 75515fb4814Smrg usXM = (dsLineParam.dwLineAttributes & LINEPARAM_XM) ? 1:0; 756de78e416Smrg 757de78e416Smrg if (pAST->EnableClip) 758de78e416Smrg ASTSetHWClipping(pScrn, delta_y); 75915fb4814Smrg 76015fb4814Smrg if (!pAST->MMIO2D) 76115fb4814Smrg { 76215fb4814Smrg /* Write to CMDQ */ 76315fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*7); 76415fb4814Smrg 76515fb4814Smrg ASTSetupDSTBase(pSingleCMD, dstbase); 76615fb4814Smrg pSingleCMD++; 76715fb4814Smrg ASTSetupLineXY(pSingleCMD, dsLineParam.dsLineX, dsLineParam.dsLineY); 76815fb4814Smrg pSingleCMD++; 76915fb4814Smrg ASTSetupLineXMErrTerm(pSingleCMD, usXM , dsLineParam.dwErrorTerm); 77015fb4814Smrg pSingleCMD++; 77115fb4814Smrg ASTSetupLineWidth(pSingleCMD, dsLineParam.dsLineWidth); 77215fb4814Smrg pSingleCMD++; 77315fb4814Smrg ASTSetupLineK1Term(pSingleCMD, dsLineParam.dwK1Term); 77415fb4814Smrg pSingleCMD++; 77515fb4814Smrg ASTSetupLineK2Term(pSingleCMD, dsLineParam.dwK2Term); 77615fb4814Smrg pSingleCMD++; 77715fb4814Smrg ASTSetupCMDReg(pSingleCMD, ulCommand); 77815fb4814Smrg 77915fb4814Smrg /* Update Write Pointer */ 78015fb4814Smrg mUpdateWritePointer; 781de78e416Smrg 782de78e416Smrg /* Patch KDE pass abnormal point, ycchen@052507 */ 783de78e416Smrg vWaitEngIdle(pScrn, pAST); 78415fb4814Smrg 78515fb4814Smrg } 78615fb4814Smrg else 78715fb4814Smrg { 78815fb4814Smrg ASTSetupDSTBase_MMIO(dstbase); 78915fb4814Smrg ASTSetupLineXY_MMIO(dsLineParam.dsLineX, dsLineParam.dsLineY); 79015fb4814Smrg ASTSetupLineXMErrTerm_MMIO( usXM , dsLineParam.dwErrorTerm); 79115fb4814Smrg ASTSetupLineWidth_MMIO(dsLineParam.dsLineWidth); 79215fb4814Smrg ASTSetupLineK1Term_MMIO(dsLineParam.dwK1Term); 79315fb4814Smrg ASTSetupLineK2Term_MMIO(dsLineParam.dwK2Term); 79415fb4814Smrg ASTSetupCMDReg_MMIO(ulCommand); 79515fb4814Smrg 79615fb4814Smrg vWaitEngIdle(pScrn, pAST); 79715fb4814Smrg 79815fb4814Smrg } 79915fb4814Smrg 80015fb4814Smrg 80115fb4814Smrg} /* end of ASTSubsequentSolidTwoPointLine */ 80215fb4814Smrg 80315fb4814Smrg/* Dash Line */ 80415fb4814Smrgstatic void 80515fb4814SmrgASTSetupForDashedLine(ScrnInfoPtr pScrn, 80615fb4814Smrg int fg, int bg, int rop, unsigned int planemask, 80715fb4814Smrg int length, UCHAR *pattern) 80815fb4814Smrg{ 80915fb4814Smrg 81015fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 81115fb4814Smrg PKT_SC *pSingleCMD; 81215fb4814Smrg ULONG cmdreg; 81315fb4814Smrg/* 81415fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSetupForDashedLine\n"); 81515fb4814Smrg*/ 81615fb4814Smrg /* Modify Reg. Value */ 81715fb4814Smrg cmdreg = CMD_LINEDRAW | CMD_RESET_STYLE_COUNTER | CMD_ENABLE_LINE_STYLE; 81815fb4814Smrg 81915fb4814Smrg switch (pAST->VideoModeInfo.bitsPerPixel) 82015fb4814Smrg { 82115fb4814Smrg case 8: 82215fb4814Smrg cmdreg |= CMD_COLOR_08; 82315fb4814Smrg break; 82415fb4814Smrg case 15: 82515fb4814Smrg case 16: 82615fb4814Smrg cmdreg |= CMD_COLOR_16; 82715fb4814Smrg break; 82815fb4814Smrg case 24: 82915fb4814Smrg case 32: 83015fb4814Smrg cmdreg |= CMD_COLOR_32; 83115fb4814Smrg break; 83215fb4814Smrg } 83315fb4814Smrg cmdreg |= (ASTXAAPatternROP[rop] << 8); 83415fb4814Smrg if(bg == -1) { 83515fb4814Smrg cmdreg |= CMD_TRANSPARENT; 83615fb4814Smrg bg = 0; 83715fb4814Smrg } 83815fb4814Smrg cmdreg |= (((length-1) & 0x3F) << 24); /* line period */ 83915fb4814Smrg pAST->ulCMDReg = cmdreg; 84015fb4814Smrg 84115fb4814Smrg if (!pAST->MMIO2D) 84215fb4814Smrg { 84315fb4814Smrg /* Write to CMDQ */ 84415fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*5); 84515fb4814Smrg 84615fb4814Smrg ASTSetupDSTPitchHeight(pSingleCMD, pAST->VideoModeInfo.ScreenPitch, -1); 84715fb4814Smrg pSingleCMD++; 84815fb4814Smrg ASTSetupFG(pSingleCMD, fg); 84915fb4814Smrg pSingleCMD++; 85015fb4814Smrg ASTSetupBG(pSingleCMD, bg); 85115fb4814Smrg pSingleCMD++; 85215fb4814Smrg ASTSetupLineStyle1(pSingleCMD, *pattern); 85315fb4814Smrg pSingleCMD++; 854de78e416Smrg ASTSetupLineStyle2(pSingleCMD, *(pattern+4)); 855de78e416Smrg 856de78e416Smrg /* Update Write Pointer */ 857de78e416Smrg mUpdateWritePointer; 85815fb4814Smrg 85915fb4814Smrg } 86015fb4814Smrg else 86115fb4814Smrg { 86215fb4814Smrg /* Write to MMIO */ 86315fb4814Smrg ASTSetupDSTPitchHeight_MMIO(pAST->VideoModeInfo.ScreenPitch, -1); 86415fb4814Smrg ASTSetupFG_MMIO(fg); 86515fb4814Smrg ASTSetupBG_MMIO(bg); 86615fb4814Smrg ASTSetupLineStyle1_MMIO(*pattern); 86715fb4814Smrg ASTSetupLineStyle2_MMIO(*(pattern+4)); 86815fb4814Smrg 86915fb4814Smrg } 87015fb4814Smrg 87115fb4814Smrg} 87215fb4814Smrg 87315fb4814Smrgstatic void 87415fb4814SmrgASTSubsequentDashedTwoPointLine(ScrnInfoPtr pScrn, 87515fb4814Smrg int x1, int y1, int x2, int y2, 87615fb4814Smrg int flags, int phase) 87715fb4814Smrg{ 87815fb4814Smrg 87915fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 88015fb4814Smrg PKT_SC *pSingleCMD; 88115fb4814Smrg LINEPARAM dsLineParam; 88215fb4814Smrg _LINEInfo LineInfo; 88315fb4814Smrg ULONG dstbase, ulCommand; 88415fb4814Smrg ULONG miny, maxy; 88515fb4814Smrg USHORT usXM; 886de78e416Smrg int delta_y = 0; 887de78e416Smrg 88815fb4814Smrg/* 88915fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentDashedTwoPointLine\n"); 89015fb4814Smrg*/ 89115fb4814Smrg 89215fb4814Smrg /* Modify Reg. Value */ 89315fb4814Smrg ulCommand = pAST->ulCMDReg; 89415fb4814Smrg if(flags & OMIT_LAST) 89515fb4814Smrg ulCommand |= CMD_NOT_DRAW_LAST_PIXEL; 89615fb4814Smrg else 89715fb4814Smrg ulCommand &= ~CMD_NOT_DRAW_LAST_PIXEL; 89815fb4814Smrg if (pAST->EnableClip) 89915fb4814Smrg ulCommand |= CMD_ENABLE_CLIP; 900de78e416Smrg else 901de78e416Smrg ulCommand &= ~CMD_ENABLE_CLIP; 90215fb4814Smrg dstbase = 0; 90315fb4814Smrg miny = (y1 > y2) ? y2 : y1; 90415fb4814Smrg maxy = (y1 > y2) ? y1 : y2; 90515fb4814Smrg if(maxy >= pScrn->virtualY) { 906de78e416Smrg delta_y = miny; 90715fb4814Smrg dstbase = pAST->VideoModeInfo.ScreenPitch * miny; 90815fb4814Smrg y1 -= miny; 90915fb4814Smrg y2 -= miny; 91015fb4814Smrg } 911de78e416Smrg 91215fb4814Smrg LineInfo.X1 = x1; 91315fb4814Smrg LineInfo.Y1 = y1; 91415fb4814Smrg LineInfo.X2 = x2; 91515fb4814Smrg LineInfo.Y2 = y2; 91615fb4814Smrg 91715fb4814Smrg bGetLineTerm(&LineInfo, &dsLineParam); /* Get Line Parameter */ 91815fb4814Smrg 91915fb4814Smrg if (dsLineParam.dwLineAttributes & LINEPARAM_X_DEC) 92015fb4814Smrg ulCommand |= CMD_X_DEC; 92115fb4814Smrg if (dsLineParam.dwLineAttributes & LINEPARAM_Y_DEC) 92215fb4814Smrg ulCommand |= CMD_Y_DEC; 92315fb4814Smrg 92415fb4814Smrg usXM = (dsLineParam.dwLineAttributes & LINEPARAM_XM) ? 1:0; 925de78e416Smrg 926de78e416Smrg if (pAST->EnableClip) 927de78e416Smrg ASTSetHWClipping(pScrn, delta_y); 92815fb4814Smrg 92915fb4814Smrg if (!pAST->MMIO2D) 93015fb4814Smrg { 93115fb4814Smrg /* Write to CMDQ */ 93215fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*7); 93315fb4814Smrg 93415fb4814Smrg ASTSetupDSTBase(pSingleCMD, dstbase); 93515fb4814Smrg pSingleCMD++; 93615fb4814Smrg ASTSetupLineXY(pSingleCMD, dsLineParam.dsLineX, dsLineParam.dsLineY); 93715fb4814Smrg pSingleCMD++; 93815fb4814Smrg ASTSetupLineXMErrTerm(pSingleCMD, usXM , dsLineParam.dwErrorTerm); 93915fb4814Smrg pSingleCMD++; 94015fb4814Smrg ASTSetupLineWidth(pSingleCMD, dsLineParam.dsLineWidth); 94115fb4814Smrg pSingleCMD++; 94215fb4814Smrg ASTSetupLineK1Term(pSingleCMD, dsLineParam.dwK1Term); 94315fb4814Smrg pSingleCMD++; 94415fb4814Smrg ASTSetupLineK2Term(pSingleCMD, dsLineParam.dwK2Term); 94515fb4814Smrg pSingleCMD++; 94615fb4814Smrg ASTSetupCMDReg(pSingleCMD, ulCommand); 94715fb4814Smrg 94815fb4814Smrg /* Update Write Pointer */ 94915fb4814Smrg mUpdateWritePointer; 950de78e416Smrg 951de78e416Smrg /* Patch KDE pass abnormal point, ycchen@052507 */ 952de78e416Smrg vWaitEngIdle(pScrn, pAST); 95315fb4814Smrg 95415fb4814Smrg } 95515fb4814Smrg else 95615fb4814Smrg { 95715fb4814Smrg ASTSetupDSTBase_MMIO(dstbase); 95815fb4814Smrg ASTSetupLineXY_MMIO(dsLineParam.dsLineX, dsLineParam.dsLineY); 95915fb4814Smrg ASTSetupLineXMErrTerm_MMIO( usXM , dsLineParam.dwErrorTerm); 96015fb4814Smrg ASTSetupLineWidth_MMIO(dsLineParam.dsLineWidth); 96115fb4814Smrg ASTSetupLineK1Term_MMIO(dsLineParam.dwK1Term); 96215fb4814Smrg ASTSetupLineK2Term_MMIO(dsLineParam.dwK2Term); 96315fb4814Smrg ASTSetupCMDReg_MMIO(ulCommand); 96415fb4814Smrg 96515fb4814Smrg vWaitEngIdle(pScrn, pAST); 96615fb4814Smrg 96715fb4814Smrg } 96815fb4814Smrg 96915fb4814Smrg} 97015fb4814Smrg 97115fb4814Smrg/* Mono Pattern Fill */ 97215fb4814Smrgstatic void 97315fb4814SmrgASTSetupForMonoPatternFill(ScrnInfoPtr pScrn, 97415fb4814Smrg int patx, int paty, int fg, int bg, 97515fb4814Smrg int rop, unsigned int planemask) 97615fb4814Smrg{ 97715fb4814Smrg 97815fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 97915fb4814Smrg PKT_SC *pSingleCMD; 98015fb4814Smrg ULONG cmdreg; 98115fb4814Smrg 98215fb4814Smrg/* 98315fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSetupForMonoPatternFill\n"); 98415fb4814Smrg*/ 98515fb4814Smrg /* Modify Reg. Value */ 98615fb4814Smrg cmdreg = CMD_BITBLT | CMD_PAT_MONOMASK; 98715fb4814Smrg switch (pAST->VideoModeInfo.bitsPerPixel) 98815fb4814Smrg { 98915fb4814Smrg case 8: 99015fb4814Smrg cmdreg |= CMD_COLOR_08; 99115fb4814Smrg break; 99215fb4814Smrg case 15: 99315fb4814Smrg case 16: 99415fb4814Smrg cmdreg |= CMD_COLOR_16; 99515fb4814Smrg break; 99615fb4814Smrg case 24: 99715fb4814Smrg case 32: 99815fb4814Smrg cmdreg |= CMD_COLOR_32; 99915fb4814Smrg break; 100015fb4814Smrg } 100115fb4814Smrg cmdreg |= (ASTXAAPatternROP[rop] << 8); 100215fb4814Smrg pAST->ulCMDReg = cmdreg; 100315fb4814Smrg 100415fb4814Smrg if (!pAST->MMIO2D) 100515fb4814Smrg { 100615fb4814Smrg /* Write to CMDQ */ 100715fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*5); 100815fb4814Smrg 100915fb4814Smrg ASTSetupDSTPitchHeight(pSingleCMD, pAST->VideoModeInfo.ScreenPitch, -1); 101015fb4814Smrg pSingleCMD++; 101115fb4814Smrg ASTSetupFG(pSingleCMD, fg); 101215fb4814Smrg pSingleCMD++; 101315fb4814Smrg ASTSetupBG(pSingleCMD, bg); 101415fb4814Smrg pSingleCMD++; 101515fb4814Smrg ASTSetupMONO1(pSingleCMD, patx); 101615fb4814Smrg pSingleCMD++; 1017de78e416Smrg ASTSetupMONO2(pSingleCMD, paty); 1018de78e416Smrg 1019de78e416Smrg /* Update Write Pointer */ 1020de78e416Smrg mUpdateWritePointer; 1021de78e416Smrg 102215fb4814Smrg } 102315fb4814Smrg else 102415fb4814Smrg { 102515fb4814Smrg ASTSetupDSTPitchHeight_MMIO(pAST->VideoModeInfo.ScreenPitch, -1); 102615fb4814Smrg ASTSetupFG_MMIO(fg); 102715fb4814Smrg ASTSetupBG_MMIO(bg); 102815fb4814Smrg ASTSetupMONO1_MMIO(patx); 102915fb4814Smrg ASTSetupMONO2_MMIO(paty); 103015fb4814Smrg } 103115fb4814Smrg 103215fb4814Smrg} /* end of ASTSetupForMonoPatternFill */ 103315fb4814Smrg 103415fb4814Smrg 103515fb4814Smrgstatic void 103615fb4814SmrgASTSubsequentMonoPatternFill(ScrnInfoPtr pScrn, 103715fb4814Smrg int patx, int paty, 103815fb4814Smrg int dst_x, int dst_y, int width, int height) 103915fb4814Smrg{ 104015fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 104115fb4814Smrg PKT_SC *pSingleCMD; 1042de78e416Smrg ULONG dstbase, cmdreg; 1043de78e416Smrg int delta_y = 0; 1044de78e416Smrg 104515fb4814Smrg/* 104615fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentMonoPatternFill\n"); 104715fb4814Smrg*/ 104815fb4814Smrg 104915fb4814Smrg /* Modify Reg. Value */ 105015fb4814Smrg cmdreg = pAST->ulCMDReg; 105115fb4814Smrg if (pAST->EnableClip) 1052de78e416Smrg cmdreg |= CMD_ENABLE_CLIP; 1053de78e416Smrg else 1054de78e416Smrg cmdreg &= ~CMD_ENABLE_CLIP; 105515fb4814Smrg dstbase = 0; 105615fb4814Smrg 105715fb4814Smrg if (dst_y >= pScrn->virtualY) 105815fb4814Smrg { 1059de78e416Smrg delta_y = dst_y; 106015fb4814Smrg dstbase=pAST->VideoModeInfo.ScreenPitch*dst_y; 106115fb4814Smrg dst_y=0; 106215fb4814Smrg } 1063de78e416Smrg 1064de78e416Smrg if (pAST->EnableClip) 1065de78e416Smrg ASTSetHWClipping(pScrn, delta_y); 1066de78e416Smrg 106715fb4814Smrg if (!pAST->MMIO2D) 106815fb4814Smrg { 106915fb4814Smrg /* Write to CMDQ */ 107015fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*4); 107115fb4814Smrg 107215fb4814Smrg ASTSetupDSTBase(pSingleCMD, dstbase); 107315fb4814Smrg pSingleCMD++; 107415fb4814Smrg ASTSetupDSTXY(pSingleCMD, dst_x, dst_y); 107515fb4814Smrg pSingleCMD++; 107615fb4814Smrg ASTSetupRECTXY(pSingleCMD, width, height); 107715fb4814Smrg pSingleCMD++; 107815fb4814Smrg ASTSetupCMDReg(pSingleCMD, cmdreg); 107915fb4814Smrg 108015fb4814Smrg /* Update Write Pointer */ 108115fb4814Smrg mUpdateWritePointer; 108215fb4814Smrg 108315fb4814Smrg } 108415fb4814Smrg else 108515fb4814Smrg { 108615fb4814Smrg ASTSetupDSTBase_MMIO(dstbase); 108715fb4814Smrg ASTSetupDSTXY_MMIO(dst_x, dst_y); 108815fb4814Smrg ASTSetupRECTXY_MMIO(width, height); 108915fb4814Smrg ASTSetupCMDReg_MMIO(cmdreg); 109015fb4814Smrg 109115fb4814Smrg vWaitEngIdle(pScrn, pAST); 109215fb4814Smrg } 109315fb4814Smrg 109415fb4814Smrg} /* end of ASTSubsequentMonoPatternFill */ 109515fb4814Smrg 109615fb4814Smrgstatic void 109715fb4814SmrgASTSetupForColor8x8PatternFill(ScrnInfoPtr pScrn, int patx, int paty, 109815fb4814Smrg int rop, unsigned int planemask, int trans_col) 109915fb4814Smrg{ 110015fb4814Smrg 110115fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 110215fb4814Smrg PKT_SC *pSingleCMD; 110315fb4814Smrg ULONG cmdreg; 110415fb4814Smrg CARD32 *pataddr; 110515fb4814Smrg ULONG ulPatSize; 110615fb4814Smrg int i, j, cpp; 110715fb4814Smrg/* 110815fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSetupForColor8x8PatternFill\n"); 110915fb4814Smrg*/ 111015fb4814Smrg /* Modify Reg. Value */ 111115fb4814Smrg cmdreg = CMD_BITBLT | CMD_PAT_PATREG; 111215fb4814Smrg switch (pAST->VideoModeInfo.bitsPerPixel) 111315fb4814Smrg { 111415fb4814Smrg case 8: 111515fb4814Smrg cmdreg |= CMD_COLOR_08; 111615fb4814Smrg break; 111715fb4814Smrg case 15: 111815fb4814Smrg case 16: 111915fb4814Smrg cmdreg |= CMD_COLOR_16; 112015fb4814Smrg break; 112115fb4814Smrg case 24: 112215fb4814Smrg case 32: 112315fb4814Smrg cmdreg |= CMD_COLOR_32; 112415fb4814Smrg break; 112515fb4814Smrg } 112615fb4814Smrg cmdreg |= (ASTXAAPatternROP[rop] << 8); 112715fb4814Smrg pAST->ulCMDReg = cmdreg; 112815fb4814Smrg cpp = (pScrn->bitsPerPixel + 1) / 8; 112915fb4814Smrg pataddr = (CARD32 *)(pAST->FBVirtualAddr + 113015fb4814Smrg (paty * pAST->VideoModeInfo.ScreenWidth) + (patx * cpp)); 113115fb4814Smrg ulPatSize = 8*8*cpp; 113215fb4814Smrg 113315fb4814Smrg if (!pAST->MMIO2D) 113415fb4814Smrg { 113515fb4814Smrg /* Write to CMDQ */ 113615fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*(1 + ulPatSize/4)); 113715fb4814Smrg ASTSetupDSTPitchHeight(pSingleCMD, pAST->VideoModeInfo.ScreenPitch, -1); 113815fb4814Smrg pSingleCMD++; 113915fb4814Smrg for (i=0; i<8; i++) 114015fb4814Smrg { 114115fb4814Smrg for (j=0; j<8*cpp/4; j++) 114215fb4814Smrg { 114315fb4814Smrg ASTSetupPatReg(pSingleCMD, (i*j + j) , (*(CARD32 *) (pataddr++))); 114415fb4814Smrg pSingleCMD++; 114515fb4814Smrg } 1146de78e416Smrg } 1147de78e416Smrg 1148de78e416Smrg /* Update Write Pointer */ 1149de78e416Smrg mUpdateWritePointer; 1150de78e416Smrg 115115fb4814Smrg } 115215fb4814Smrg else 115315fb4814Smrg { 115415fb4814Smrg ASTSetupDSTPitchHeight_MMIO(pAST->VideoModeInfo.ScreenPitch, -1); 115515fb4814Smrg for (i=0; i<8; i++) 115615fb4814Smrg { 115715fb4814Smrg for (j=0; j<8*cpp/4; j++) 115815fb4814Smrg { 115915fb4814Smrg ASTSetupPatReg_MMIO((i*j + j) , (*(CARD32 *) (pataddr++))); 116015fb4814Smrg } 116115fb4814Smrg } 116215fb4814Smrg 116315fb4814Smrg } 116415fb4814Smrg 116515fb4814Smrg} /* end of ASTSetupForColor8x8PatternFill */ 116615fb4814Smrg 116715fb4814Smrgstatic void 116815fb4814SmrgASTSubsequentColor8x8PatternFillRect(ScrnInfoPtr pScrn, int patx, int paty, 116915fb4814Smrg int dst_x, int dst_y, int width, int height) 117015fb4814Smrg{ 117115fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 117215fb4814Smrg PKT_SC *pSingleCMD; 1173de78e416Smrg ULONG dstbase, cmdreg; 1174de78e416Smrg int delta_y = 0; 1175de78e416Smrg 117615fb4814Smrg/* 117715fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentColor8x8PatternFillRect\n"); 117815fb4814Smrg*/ 117915fb4814Smrg 118015fb4814Smrg /* Modify Reg. Value */ 118115fb4814Smrg cmdreg = pAST->ulCMDReg; 118215fb4814Smrg if (pAST->EnableClip) 1183de78e416Smrg cmdreg |= CMD_ENABLE_CLIP; 1184de78e416Smrg else 1185de78e416Smrg cmdreg &= ~CMD_ENABLE_CLIP; 118615fb4814Smrg dstbase = 0; 118715fb4814Smrg 118815fb4814Smrg if (dst_y >= pScrn->virtualY) 118915fb4814Smrg { 1190de78e416Smrg delta_y = dst_y; 119115fb4814Smrg dstbase=pAST->VideoModeInfo.ScreenPitch*dst_y; 119215fb4814Smrg dst_y=0; 119315fb4814Smrg } 1194de78e416Smrg 1195de78e416Smrg if (pAST->EnableClip) 1196de78e416Smrg ASTSetHWClipping(pScrn, delta_y); 119715fb4814Smrg 119815fb4814Smrg if (!pAST->MMIO2D) 119915fb4814Smrg { 120015fb4814Smrg /* Write to CMDQ */ 120115fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*4); 120215fb4814Smrg 120315fb4814Smrg ASTSetupDSTBase(pSingleCMD, dstbase); 120415fb4814Smrg pSingleCMD++; 120515fb4814Smrg ASTSetupDSTXY(pSingleCMD, dst_x, dst_y); 120615fb4814Smrg pSingleCMD++; 120715fb4814Smrg ASTSetupRECTXY(pSingleCMD, width, height); 120815fb4814Smrg pSingleCMD++; 120915fb4814Smrg ASTSetupCMDReg(pSingleCMD, cmdreg); 121015fb4814Smrg 121115fb4814Smrg /* Update Write Pointer */ 121215fb4814Smrg mUpdateWritePointer; 121315fb4814Smrg 121415fb4814Smrg } 121515fb4814Smrg else 121615fb4814Smrg { 121715fb4814Smrg ASTSetupDSTBase_MMIO(dstbase); 121815fb4814Smrg ASTSetupDSTXY_MMIO(dst_x, dst_y); 121915fb4814Smrg ASTSetupRECTXY_MMIO(width, height); 122015fb4814Smrg ASTSetupCMDReg_MMIO(cmdreg); 122115fb4814Smrg 122215fb4814Smrg vWaitEngIdle(pScrn, pAST); 122315fb4814Smrg } 122415fb4814Smrg 122515fb4814Smrg} /* ASTSubsequentColor8x8PatternFillRect */ 122615fb4814Smrg 122715fb4814Smrg/* CPU to Screen Expand */ 122815fb4814Smrgstatic void 122915fb4814SmrgASTSetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, 123015fb4814Smrg int fg, int bg, 123115fb4814Smrg int rop, unsigned int planemask) 123215fb4814Smrg{ 123315fb4814Smrg 123415fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 123515fb4814Smrg PKT_SC *pSingleCMD; 123615fb4814Smrg ULONG cmdreg; 123715fb4814Smrg 123815fb4814Smrg/* 123915fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSetupForCPUToScreenColorExpandFill\n"); 124015fb4814Smrg*/ 124115fb4814Smrg /* Modify Reg. Value */ 124215fb4814Smrg cmdreg = CMD_COLOREXP; 124315fb4814Smrg switch (pAST->VideoModeInfo.bitsPerPixel) 124415fb4814Smrg { 124515fb4814Smrg case 8: 124615fb4814Smrg cmdreg |= CMD_COLOR_08; 124715fb4814Smrg break; 124815fb4814Smrg case 15: 124915fb4814Smrg case 16: 125015fb4814Smrg cmdreg |= CMD_COLOR_16; 125115fb4814Smrg break; 125215fb4814Smrg case 24: 125315fb4814Smrg case 32: 125415fb4814Smrg cmdreg |= CMD_COLOR_32; 125515fb4814Smrg break; 125615fb4814Smrg } 125715fb4814Smrg cmdreg |= (ASTXAAPatternROP[rop] << 8); 125815fb4814Smrg if(bg == -1) { 125915fb4814Smrg cmdreg |= CMD_FONT_TRANSPARENT; 126015fb4814Smrg bg = 0; 126115fb4814Smrg } 126215fb4814Smrg pAST->ulCMDReg = cmdreg; 126315fb4814Smrg 126415fb4814Smrg if (!pAST->MMIO2D) 126515fb4814Smrg { 126615fb4814Smrg /* Write to CMDQ */ 126715fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*3); 126815fb4814Smrg 126915fb4814Smrg ASTSetupDSTPitchHeight(pSingleCMD, pAST->VideoModeInfo.ScreenPitch, -1); 127015fb4814Smrg pSingleCMD++; 127115fb4814Smrg ASTSetupFG(pSingleCMD, fg); 127215fb4814Smrg pSingleCMD++; 127315fb4814Smrg ASTSetupBG(pSingleCMD, bg); 1274de78e416Smrg 1275de78e416Smrg /* Update Write Pointer */ 1276de78e416Smrg mUpdateWritePointer; 127715fb4814Smrg 127815fb4814Smrg } 127915fb4814Smrg else 128015fb4814Smrg { 128115fb4814Smrg ASTSetupDSTPitchHeight_MMIO(pAST->VideoModeInfo.ScreenPitch, -1); 128215fb4814Smrg ASTSetupFG_MMIO(fg); 128315fb4814Smrg ASTSetupBG_MMIO(bg); 128415fb4814Smrg 128515fb4814Smrg } 128615fb4814Smrg 128715fb4814Smrg} 128815fb4814Smrg 128915fb4814Smrgstatic void 129015fb4814SmrgASTSubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, 129115fb4814Smrg int dst_x, int dst_y, 129215fb4814Smrg int width, int height, int offset) 129315fb4814Smrg{ 129415fb4814Smrg 129515fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 129615fb4814Smrg PKT_SC *pSingleCMD; 129715fb4814Smrg ULONG dstbase, cmdreg; 1298de78e416Smrg int delta_y = 0; 129915fb4814Smrg 130015fb4814Smrg/* 130115fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentCPUToScreenColorExpandFill\n"); 130215fb4814Smrg*/ 130315fb4814Smrg 130415fb4814Smrg /* Modify Reg. Value */ 130515fb4814Smrg cmdreg = pAST->ulCMDReg; 130615fb4814Smrg if (pAST->EnableClip) 1307de78e416Smrg cmdreg |= CMD_ENABLE_CLIP; 1308de78e416Smrg else 1309de78e416Smrg cmdreg &= ~CMD_ENABLE_CLIP; 131015fb4814Smrg dstbase = 0; 131115fb4814Smrg 131215fb4814Smrg if (dst_y >= pScrn->virtualY) 131315fb4814Smrg { 1314de78e416Smrg delta_y = dst_y; 131515fb4814Smrg dstbase=pAST->VideoModeInfo.ScreenPitch*dst_y; 131615fb4814Smrg dst_y=0; 131715fb4814Smrg } 1318de78e416Smrg 1319de78e416Smrg if (pAST->EnableClip) 1320de78e416Smrg ASTSetHWClipping(pScrn, delta_y); 1321de78e416Smrg 132215fb4814Smrg if (!pAST->MMIO2D) 132315fb4814Smrg { 132415fb4814Smrg /* Write to CMDQ */ 132515fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*5); 132615fb4814Smrg 132715fb4814Smrg ASTSetupSRCPitch(pSingleCMD, ((width+7)/8)); 132815fb4814Smrg pSingleCMD++; 132915fb4814Smrg ASTSetupDSTBase(pSingleCMD, dstbase); 133015fb4814Smrg pSingleCMD++; 133115fb4814Smrg ASTSetupDSTXY(pSingleCMD, dst_x, dst_y); 133215fb4814Smrg pSingleCMD++; 133315fb4814Smrg ASTSetupRECTXY(pSingleCMD, width, height); 133415fb4814Smrg pSingleCMD++; 133515fb4814Smrg ASTSetupCMDReg(pSingleCMD, cmdreg); 133615fb4814Smrg 133715fb4814Smrg /* Update Write Pointer */ 133815fb4814Smrg mUpdateWritePointer; 133915fb4814Smrg 134015fb4814Smrg } 134115fb4814Smrg else 134215fb4814Smrg { 134315fb4814Smrg ASTSetupSRCPitch_MMIO((width+7)/8); 134415fb4814Smrg ASTSetupDSTBase_MMIO(dstbase); 134515fb4814Smrg ASTSetupDSTXY_MMIO(dst_x, dst_y); 134615fb4814Smrg ASTSetupSRCXY_MMIO(0, 0); 134715fb4814Smrg 134815fb4814Smrg ASTSetupRECTXY_MMIO(width, height); 134915fb4814Smrg ASTSetupCMDReg_MMIO(cmdreg); 135015fb4814Smrg 135115fb4814Smrg vWaitEngIdle(pScrn, pAST); 135215fb4814Smrg 135315fb4814Smrg } 135415fb4814Smrg 135515fb4814Smrg} 135615fb4814Smrg 135715fb4814Smrg 135815fb4814Smrg/* Screen to Screen Color Expand */ 135915fb4814Smrgstatic void 136015fb4814SmrgASTSetupForScreenToScreenColorExpandFill(ScrnInfoPtr pScrn, 136115fb4814Smrg int fg, int bg, 136215fb4814Smrg int rop, unsigned int planemask) 136315fb4814Smrg{ 136415fb4814Smrg 136515fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 136615fb4814Smrg PKT_SC *pSingleCMD; 136715fb4814Smrg ULONG cmdreg; 136815fb4814Smrg 136915fb4814Smrg/* 137015fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSetupForScreenToScreenColorExpandFill\n"); 137115fb4814Smrg*/ 137215fb4814Smrg 137315fb4814Smrg /* Modify Reg. Value */ 137415fb4814Smrg cmdreg = CMD_ENHCOLOREXP; 137515fb4814Smrg switch (pAST->VideoModeInfo.bitsPerPixel) 137615fb4814Smrg { 137715fb4814Smrg case 8: 137815fb4814Smrg cmdreg |= CMD_COLOR_08; 137915fb4814Smrg break; 138015fb4814Smrg case 15: 138115fb4814Smrg case 16: 138215fb4814Smrg cmdreg |= CMD_COLOR_16; 138315fb4814Smrg break; 138415fb4814Smrg case 24: 138515fb4814Smrg case 32: 138615fb4814Smrg cmdreg |= CMD_COLOR_32; 138715fb4814Smrg break; 138815fb4814Smrg } 138915fb4814Smrg cmdreg |= (ASTXAAPatternROP[rop] << 8); 139015fb4814Smrg if(bg == -1) { 139115fb4814Smrg cmdreg |= CMD_FONT_TRANSPARENT; 139215fb4814Smrg bg = 0; 139315fb4814Smrg } 139415fb4814Smrg pAST->ulCMDReg = cmdreg; 139515fb4814Smrg 139615fb4814Smrg if (!pAST->MMIO2D) 139715fb4814Smrg { 139815fb4814Smrg /* Write to CMDQ */ 139915fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*3); 140015fb4814Smrg 140115fb4814Smrg ASTSetupDSTPitchHeight(pSingleCMD, pAST->VideoModeInfo.ScreenPitch, -1); 140215fb4814Smrg pSingleCMD++; 140315fb4814Smrg ASTSetupFG(pSingleCMD, fg); 140415fb4814Smrg pSingleCMD++; 140515fb4814Smrg ASTSetupBG(pSingleCMD, bg); 1406de78e416Smrg 1407de78e416Smrg /* Update Write Pointer */ 1408de78e416Smrg mUpdateWritePointer; 140915fb4814Smrg 141015fb4814Smrg } 141115fb4814Smrg else 141215fb4814Smrg { 141315fb4814Smrg ASTSetupDSTPitchHeight_MMIO(pAST->VideoModeInfo.ScreenPitch, -1); 141415fb4814Smrg ASTSetupFG_MMIO(fg); 141515fb4814Smrg ASTSetupBG_MMIO(bg); 141615fb4814Smrg 141715fb4814Smrg } 141815fb4814Smrg 141915fb4814Smrg} 142015fb4814Smrg 142115fb4814Smrg 142215fb4814Smrg 142315fb4814Smrgstatic void 142415fb4814SmrgASTSubsequentScreenToScreenColorExpandFill(ScrnInfoPtr pScrn, 142515fb4814Smrg int dst_x, int dst_y, int width, int height, 142615fb4814Smrg int src_x, int src_y, int offset) 142715fb4814Smrg{ 142815fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 142915fb4814Smrg PKT_SC *pSingleCMD; 143015fb4814Smrg ULONG srcbase, dstbase, cmdreg; 143115fb4814Smrg USHORT srcpitch; 1432de78e416Smrg int delta_y = 0; 143315fb4814Smrg 143415fb4814Smrg/* 143515fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentScreenToScreenColorExpandFill\n"); 143615fb4814Smrg*/ 143715fb4814Smrg 143815fb4814Smrg /* Modify Reg. Value */ 143915fb4814Smrg cmdreg = pAST->ulCMDReg; 144015fb4814Smrg if (pAST->EnableClip) 1441de78e416Smrg cmdreg |= CMD_ENABLE_CLIP; 1442de78e416Smrg else 1443de78e416Smrg cmdreg &= ~CMD_ENABLE_CLIP; 144415fb4814Smrg dstbase = 0; 144515fb4814Smrg if (dst_y >= pScrn->virtualY) 144615fb4814Smrg { 1447de78e416Smrg delta_y = dst_y; 144815fb4814Smrg dstbase=pAST->VideoModeInfo.ScreenPitch*dst_y; 144915fb4814Smrg dst_y=0; 145015fb4814Smrg } 145115fb4814Smrg srcbase = pAST->VideoModeInfo.ScreenPitch*src_y + ((pScrn->bitsPerPixel+1)/8)*src_x; 145215fb4814Smrg srcpitch = (pScrn->displayWidth+7)/8; 1453de78e416Smrg 1454de78e416Smrg if (pAST->EnableClip) 1455de78e416Smrg ASTSetHWClipping(pScrn, delta_y); 145615fb4814Smrg 145715fb4814Smrg if (!pAST->MMIO2D) 145815fb4814Smrg { 145915fb4814Smrg /* Write to CMDQ */ 146015fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*6); 146115fb4814Smrg 146215fb4814Smrg ASTSetupSRCBase(pSingleCMD, srcbase); 146315fb4814Smrg pSingleCMD++; 146415fb4814Smrg ASTSetupSRCPitch(pSingleCMD,srcpitch); 146515fb4814Smrg pSingleCMD++; 146615fb4814Smrg ASTSetupDSTBase(pSingleCMD, dstbase); 146715fb4814Smrg pSingleCMD++; 146815fb4814Smrg ASTSetupDSTXY(pSingleCMD, dst_x, dst_y); 146915fb4814Smrg pSingleCMD++; 147015fb4814Smrg ASTSetupRECTXY(pSingleCMD, width, height); 147115fb4814Smrg pSingleCMD++; 147215fb4814Smrg ASTSetupCMDReg(pSingleCMD, cmdreg); 147315fb4814Smrg 147415fb4814Smrg /* Update Write Pointer */ 147515fb4814Smrg mUpdateWritePointer; 147615fb4814Smrg 147715fb4814Smrg } 147815fb4814Smrg else 147915fb4814Smrg { 148015fb4814Smrg ASTSetupSRCBase_MMIO(srcbase); 148115fb4814Smrg ASTSetupSRCPitch_MMIO(srcpitch); 148215fb4814Smrg ASTSetupDSTBase_MMIO(dstbase); 148315fb4814Smrg ASTSetupDSTXY_MMIO(dst_x, dst_y); 148415fb4814Smrg ASTSetupRECTXY_MMIO(width, height); 148515fb4814Smrg ASTSetupCMDReg_MMIO(cmdreg); 148615fb4814Smrg 148715fb4814Smrg vWaitEngIdle(pScrn, pAST); 148815fb4814Smrg 148915fb4814Smrg } 149015fb4814Smrg 149115fb4814Smrg} 149215fb4814Smrg 149315fb4814Smrg 149415fb4814Smrg/* Clipping */ 149515fb4814Smrgstatic void 1496de78e416SmrgASTSetHWClipping(ScrnInfoPtr pScrn, int delta_y) 149715fb4814Smrg{ 149815fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 149915fb4814Smrg PKT_SC *pSingleCMD; 1500de78e416Smrg 150115fb4814Smrg if (!pAST->MMIO2D) 150215fb4814Smrg { 150315fb4814Smrg /* Write to CMDQ */ 150415fb4814Smrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*2); 150515fb4814Smrg 1506de78e416Smrg ASTSetupCLIP1(pSingleCMD, pAST->clip_left, pAST->clip_top - delta_y); 150715fb4814Smrg pSingleCMD++; 1508de78e416Smrg ASTSetupCLIP2(pSingleCMD, pAST->clip_right + 1, pAST->clip_bottom - delta_y + 1); 1509de78e416Smrg 1510de78e416Smrg /* Update Write Pointer */ 1511de78e416Smrg mUpdateWritePointer; 1512de78e416Smrg 151315fb4814Smrg } 151415fb4814Smrg else 151515fb4814Smrg { 1516de78e416Smrg ASTSetupCLIP1_MMIO(pAST->clip_left, pAST->clip_top - delta_y); 1517de78e416Smrg ASTSetupCLIP2_MMIO(pAST->clip_right + 1, pAST->clip_bottom - delta_y + 1); 151815fb4814Smrg } 1519de78e416Smrg 1520de78e416Smrg} 1521de78e416Smrg 1522de78e416Smrgstatic void 1523de78e416SmrgASTSetClippingRectangle(ScrnInfoPtr pScrn, 1524de78e416Smrg int left, int top, int right, int bottom) 1525de78e416Smrg{ 1526de78e416Smrg 1527de78e416Smrg ASTRecPtr pAST = ASTPTR(pScrn); 1528de78e416Smrg PKT_SC *pSingleCMD; 1529de78e416Smrg/* 1530de78e416Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSetClippingRectangle\n"); 1531de78e416Smrg*/ 1532de78e416Smrg pAST->EnableClip = TRUE; 1533de78e416Smrg 1534de78e416Smrg pAST->clip_left = left; 1535de78e416Smrg pAST->clip_top = top; 1536de78e416Smrg pAST->clip_right = right; 1537de78e416Smrg pAST->clip_bottom = bottom; 153815fb4814Smrg 153915fb4814Smrg} 154015fb4814Smrg 154115fb4814Smrgstatic void 154215fb4814SmrgASTDisableClipping(ScrnInfoPtr pScrn) 154315fb4814Smrg{ 154415fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 154515fb4814Smrg/* 154615fb4814Smrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTDisableClipping\n"); 154715fb4814Smrg*/ 154815fb4814Smrg pAST->EnableClip = FALSE; 154915fb4814Smrg} 155015fb4814Smrg 1551b410ddbeSmrgstatic void AIPSubsequentSolidTwoPointLine(ScrnInfoPtr pScrn, 1552b410ddbeSmrg int x1, int y1, int x2, int y2, int flags) 1553b410ddbeSmrg{ 1554b410ddbeSmrg 1555b410ddbeSmrg ASTRecPtr pAST = ASTPTR(pScrn); 1556b410ddbeSmrg PKT_SC *pSingleCMD; 1557b410ddbeSmrg ULONG dstbase, ulCommand; 1558b410ddbeSmrg ULONG miny, maxy; 1559b410ddbeSmrg/* 1560b410ddbeSmrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentSolidTwoPointLine\n"); 1561b410ddbeSmrg*/ 1562b410ddbeSmrg 1563b410ddbeSmrg /* Modify Reg. Value */ 1564b410ddbeSmrg ulCommand = (pAST->ulCMDReg & (~CMD_MASK)) | CMD_LINEDRAW | CMD_NORMAL_LINE; 1565b410ddbeSmrg if(flags & OMIT_LAST) 1566b410ddbeSmrg ulCommand |= CMD_NOT_DRAW_LAST_PIXEL; 1567b410ddbeSmrg else 1568b410ddbeSmrg ulCommand &= ~CMD_NOT_DRAW_LAST_PIXEL; 1569b410ddbeSmrg if (pAST->EnableClip) 1570b410ddbeSmrg ulCommand |= CMD_ENABLE_CLIP; 1571b410ddbeSmrg else 1572b410ddbeSmrg ulCommand &= ~CMD_ENABLE_CLIP; 1573b410ddbeSmrg dstbase = 0; 1574b410ddbeSmrg miny = (y1 > y2) ? y2 : y1; 1575b410ddbeSmrg maxy = (y1 > y2) ? y1 : y2; 1576b410ddbeSmrg if(maxy >= pScrn->virtualY) { 1577b410ddbeSmrg dstbase = pAST->VideoModeInfo.ScreenPitch * miny; 1578b410ddbeSmrg y1 -= miny; 1579b410ddbeSmrg y2 -= miny; 1580b410ddbeSmrg } 1581b410ddbeSmrg 1582b410ddbeSmrg if (!pAST->MMIO2D) 1583b410ddbeSmrg { 1584b410ddbeSmrg /* Write to CMDQ */ 1585b410ddbeSmrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*5); 1586b410ddbeSmrg 1587b410ddbeSmrg ASTSetupDSTBase(pSingleCMD, dstbase); 1588b410ddbeSmrg pSingleCMD++; 1589b410ddbeSmrg AIPSetupLineXY(pSingleCMD, x1, y1); 1590b410ddbeSmrg pSingleCMD++; 1591b410ddbeSmrg AIPSetupLineXY2(pSingleCMD, x2, y2); 1592b410ddbeSmrg pSingleCMD++; 1593b410ddbeSmrg AIPSetupLineNumber(pSingleCMD, 0); 1594b410ddbeSmrg pSingleCMD++; 1595b410ddbeSmrg ASTSetupCMDReg(pSingleCMD, ulCommand); 1596b410ddbeSmrg 1597b410ddbeSmrg /* Update Write Pointer */ 1598b410ddbeSmrg mUpdateWritePointer; 1599b410ddbeSmrg 1600b410ddbeSmrg /* Patch KDE pass abnormal point, ycchen@052507 */ 1601b410ddbeSmrg vWaitEngIdle(pScrn, pAST); 1602b410ddbeSmrg 1603b410ddbeSmrg } 1604b410ddbeSmrg else 1605b410ddbeSmrg { 1606b410ddbeSmrg ASTSetupDSTBase_MMIO(dstbase); 1607b410ddbeSmrg AIPSetupLineXY_MMIO(x1, y1); 1608b410ddbeSmrg AIPSetupLineXY2_MMIO(x2, y2); 1609b410ddbeSmrg AIPSetupLineNumber_MMIO(0); 1610b410ddbeSmrg ASTSetupCMDReg_MMIO(ulCommand); 1611b410ddbeSmrg 1612b410ddbeSmrg vWaitEngIdle(pScrn, pAST); 1613b410ddbeSmrg 1614b410ddbeSmrg } 1615b410ddbeSmrg 1616b410ddbeSmrg 1617b410ddbeSmrg} /* end of AIPSubsequentSolidTwoPointLine */ 1618b410ddbeSmrg 1619b410ddbeSmrgstatic void 1620b410ddbeSmrgAIPSubsequentDashedTwoPointLine(ScrnInfoPtr pScrn, 1621b410ddbeSmrg int x1, int y1, int x2, int y2, 1622b410ddbeSmrg int flags, int phase) 1623b410ddbeSmrg{ 1624b410ddbeSmrg 1625b410ddbeSmrg ASTRecPtr pAST = ASTPTR(pScrn); 1626b410ddbeSmrg PKT_SC *pSingleCMD; 1627b410ddbeSmrg ULONG dstbase, ulCommand; 1628b410ddbeSmrg ULONG miny, maxy; 1629b410ddbeSmrg/* 1630b410ddbeSmrg xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ASTSubsequentDashedTwoPointLine\n"); 1631b410ddbeSmrg*/ 1632b410ddbeSmrg 1633b410ddbeSmrg /* Modify Reg. Value */ 1634b410ddbeSmrg ulCommand = pAST->ulCMDReg | CMD_NORMAL_LINE; 1635b410ddbeSmrg if(flags & OMIT_LAST) 1636b410ddbeSmrg ulCommand |= CMD_NOT_DRAW_LAST_PIXEL; 1637b410ddbeSmrg else 1638b410ddbeSmrg ulCommand &= ~CMD_NOT_DRAW_LAST_PIXEL; 1639b410ddbeSmrg if (pAST->EnableClip) 1640b410ddbeSmrg ulCommand |= CMD_ENABLE_CLIP; 1641b410ddbeSmrg else 1642b410ddbeSmrg ulCommand &= ~CMD_ENABLE_CLIP; 1643b410ddbeSmrg dstbase = 0; 1644b410ddbeSmrg miny = (y1 > y2) ? y2 : y1; 1645b410ddbeSmrg maxy = (y1 > y2) ? y1 : y2; 1646b410ddbeSmrg if(maxy >= pScrn->virtualY) { 1647b410ddbeSmrg dstbase = pAST->VideoModeInfo.ScreenPitch * miny; 1648b410ddbeSmrg y1 -= miny; 1649b410ddbeSmrg y2 -= miny; 1650b410ddbeSmrg } 1651b410ddbeSmrg 1652b410ddbeSmrg if (!pAST->MMIO2D) 1653b410ddbeSmrg { 1654b410ddbeSmrg /* Write to CMDQ */ 1655b410ddbeSmrg pSingleCMD = (PKT_SC *) pjRequestCMDQ(pAST, PKT_SINGLE_LENGTH*5); 1656b410ddbeSmrg 1657b410ddbeSmrg ASTSetupDSTBase(pSingleCMD, dstbase); 1658b410ddbeSmrg pSingleCMD++; 1659b410ddbeSmrg AIPSetupLineXY(pSingleCMD, x1, y1); 1660b410ddbeSmrg pSingleCMD++; 1661b410ddbeSmrg AIPSetupLineXY2(pSingleCMD, x2, y2); 1662b410ddbeSmrg pSingleCMD++; 1663b410ddbeSmrg AIPSetupLineNumber(pSingleCMD, 0); 1664b410ddbeSmrg pSingleCMD++; 1665b410ddbeSmrg ASTSetupCMDReg(pSingleCMD, ulCommand); 1666b410ddbeSmrg 1667b410ddbeSmrg /* Update Write Pointer */ 1668b410ddbeSmrg mUpdateWritePointer; 1669b410ddbeSmrg 1670b410ddbeSmrg /* Patch KDE pass abnormal point, ycchen@052507 */ 1671b410ddbeSmrg vWaitEngIdle(pScrn, pAST); 1672b410ddbeSmrg 1673b410ddbeSmrg } 1674b410ddbeSmrg else 1675b410ddbeSmrg { 1676b410ddbeSmrg ASTSetupDSTBase_MMIO(dstbase); 1677b410ddbeSmrg AIPSetupLineXY_MMIO(x1, y1); 1678b410ddbeSmrg AIPSetupLineXY2_MMIO(x2, y2); 1679b410ddbeSmrg AIPSetupLineNumber_MMIO(0); 1680b410ddbeSmrg ASTSetupCMDReg_MMIO(ulCommand); 1681b410ddbeSmrg 1682b410ddbeSmrg vWaitEngIdle(pScrn, pAST); 1683b410ddbeSmrg 1684b410ddbeSmrg } 1685b410ddbeSmrg 1686b410ddbeSmrg} 1687b410ddbeSmrg 168815fb4814Smrg#endif /* end of Accel_2D */ 1689