ast_2dtool.h revision de78e416
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/* Eng Capability Definition */ 2415fb4814Smrg#define ENG_CAP_Sync 0x0001 2515fb4814Smrg#define ENG_CAP_ScreenToScreenCopy 0x0002 2615fb4814Smrg#define ENG_CAP_SolidFill 0x0004 2715fb4814Smrg#define ENG_CAP_SolidLine 0x0008 2815fb4814Smrg#define ENG_CAP_DashedLine 0x0010 2915fb4814Smrg#define ENG_CAP_Mono8x8PatternFill 0x0020 3015fb4814Smrg#define ENG_CAP_Color8x8PatternFill 0x0040 3115fb4814Smrg#define ENG_CAP_CPUToScreenColorExpand 0x0080 3215fb4814Smrg#define ENG_CAP_ScreenToScreenColorExpand 0x0100 3315fb4814Smrg#define ENG_CAP_Clipping 0x0200 3415fb4814Smrg#define ENG_CAP_ALL (ENG_CAP_Sync | ENG_CAP_ScreenToScreenCopy | ENG_CAP_SolidFill | \ 3515fb4814Smrg ENG_CAP_SolidLine | ENG_CAP_DashedLine | \ 3615fb4814Smrg ENG_CAP_Mono8x8PatternFill | ENG_CAP_Color8x8PatternFill | \ 3715fb4814Smrg ENG_CAP_Clipping); 3815fb4814Smrg 3915fb4814Smrg/* CMDQ Definition */ 4015fb4814Smrg#define AGP_CMD_QUEUE 1 4115fb4814Smrg#define VM_CMD_QUEUE 0 4215fb4814Smrg#define VM_CMD_MMIO 2 4315fb4814Smrg 4415fb4814Smrg#define CMD_QUEUE_SIZE_256K 0x00040000 4515fb4814Smrg#define CMD_QUEUE_SIZE_512K 0x00080000 4615fb4814Smrg#define CMD_QUEUE_SIZE_1M 0x00100000 4715fb4814Smrg#define CMD_QUEUE_SIZE_2M 0x00200000 4815fb4814Smrg#define CMD_QUEUE_SIZE_4M 0x00400000 4915fb4814Smrg 5015fb4814Smrg/* CMD Type Info */ 5115fb4814Smrg#define PKT_NULL_CMD 0x00009561 5215fb4814Smrg 5315fb4814Smrg#define PKT_SINGLE_LENGTH 8 5415fb4814Smrg#define PKT_SINGLE_CMD_HEADER 0x00009562 5515fb4814Smrg 5615fb4814Smrgtypedef struct _PKT_SC 5715fb4814Smrg{ 5815fb4814Smrg ULONG PKT_SC_dwHeader; 5915fb4814Smrg ULONG PKT_SC_dwData[1]; 6015fb4814Smrg 6115fb4814Smrg} PKT_SC, *PPKT_SC; 6215fb4814Smrg 6315fb4814Smrg/* Eng Reg. Limitation */ 6415fb4814Smrg#define MAX_SRC_X 0x7FF 6515fb4814Smrg#define MAX_SRC_Y 0x7FF 6615fb4814Smrg#define MAX_DST_X 0x7FF 6715fb4814Smrg#define MAX_DST_Y 0x7FF 6815fb4814Smrg 69de78e416Smrg#define MASK_SRC_PITCH 0x1FFF 70de78e416Smrg#define MASK_DST_PITCH 0x1FFF 71de78e416Smrg#define MASK_DST_HEIGHT 0x7FF 72de78e416Smrg#define MASK_SRC_X 0xFFF 73de78e416Smrg#define MASK_SRC_Y 0xFFF 74de78e416Smrg#define MASK_DST_X 0xFFF 75de78e416Smrg#define MASK_DST_Y 0xFFF 76de78e416Smrg#define MASK_RECT_WIDTH 0x7FF 77de78e416Smrg#define MASK_RECT_HEIGHT 0x7FF 78de78e416Smrg#define MASK_CLIP 0xFFF 79de78e416Smrg 80de78e416Smrg#define MASK_LINE_X 0xFFF 81de78e416Smrg#define MASK_LINE_Y 0xFFF 82de78e416Smrg#define MASK_LINE_ERR 0x3FFFFF 83de78e416Smrg#define MASK_LINE_WIDTH 0x7FF 84de78e416Smrg#define MASK_LINE_K1 0x3FFFFF 85de78e416Smrg#define MASK_LINE_K2 0x3FFFFF 8615fb4814Smrg 8715fb4814Smrg#define MAX_PATReg_Size 256 8815fb4814Smrg 8915fb4814Smrg/* Eng Reg. Definition */ 9015fb4814Smrg/* MMIO Reg */ 9115fb4814Smrg#define MMIOREG_SRC_BASE (pAST->MMIOVirtualAddr + 0x8000) 9215fb4814Smrg#define MMIOREG_SRC_PITCH (pAST->MMIOVirtualAddr + 0x8004) 9315fb4814Smrg#define MMIOREG_DST_BASE (pAST->MMIOVirtualAddr + 0x8008) 9415fb4814Smrg#define MMIOREG_DST_PITCH (pAST->MMIOVirtualAddr + 0x800C) 9515fb4814Smrg#define MMIOREG_DST_XY (pAST->MMIOVirtualAddr + 0x8010) 9615fb4814Smrg#define MMIOREG_SRC_XY (pAST->MMIOVirtualAddr + 0x8014) 9715fb4814Smrg#define MMIOREG_RECT_XY (pAST->MMIOVirtualAddr + 0x8018) 9815fb4814Smrg#define MMIOREG_FG (pAST->MMIOVirtualAddr + 0x801C) 9915fb4814Smrg#define MMIOREG_BG (pAST->MMIOVirtualAddr + 0x8020) 10015fb4814Smrg#define MMIOREG_FG_SRC (pAST->MMIOVirtualAddr + 0x8024) 10115fb4814Smrg#define MMIOREG_BG_SRC (pAST->MMIOVirtualAddr + 0x8028) 10215fb4814Smrg#define MMIOREG_MONO1 (pAST->MMIOVirtualAddr + 0x802C) 10315fb4814Smrg#define MMIOREG_MONO2 (pAST->MMIOVirtualAddr + 0x8030) 10415fb4814Smrg#define MMIOREG_CLIP1 (pAST->MMIOVirtualAddr + 0x8034) 10515fb4814Smrg#define MMIOREG_CLIP2 (pAST->MMIOVirtualAddr + 0x8038) 10615fb4814Smrg#define MMIOREG_CMD (pAST->MMIOVirtualAddr + 0x803C) 10715fb4814Smrg#define MMIOREG_PAT (pAST->MMIOVirtualAddr + 0x8100) 10815fb4814Smrg 10915fb4814Smrg#define MMIOREG_LINE_XY (pAST->MMIOVirtualAddr + 0x8010) 11015fb4814Smrg#define MMIOREG_LINE_Err (pAST->MMIOVirtualAddr + 0x8014) 11115fb4814Smrg#define MMIOREG_LINE_WIDTH (pAST->MMIOVirtualAddr + 0x8018) 11215fb4814Smrg#define MMIOREG_LINE_K1 (pAST->MMIOVirtualAddr + 0x8024) 11315fb4814Smrg#define MMIOREG_LINE_K2 (pAST->MMIOVirtualAddr + 0x8028) 11415fb4814Smrg#define MMIOREG_LINE_STYLE1 (pAST->MMIOVirtualAddr + 0x802C) 11515fb4814Smrg#define MMIOREG_LINE_STYLE2 (pAST->MMIOVirtualAddr + 0x8030) 11615fb4814Smrg 11715fb4814Smrg/* CMDQ Reg */ 11815fb4814Smrg#define CMDQREG_SRC_BASE (0x00 << 24) 11915fb4814Smrg#define CMDQREG_SRC_PITCH (0x01 << 24) 12015fb4814Smrg#define CMDQREG_DST_BASE (0x02 << 24) 12115fb4814Smrg#define CMDQREG_DST_PITCH (0x03 << 24) 12215fb4814Smrg#define CMDQREG_DST_XY (0x04 << 24) 12315fb4814Smrg#define CMDQREG_SRC_XY (0x05 << 24) 12415fb4814Smrg#define CMDQREG_RECT_XY (0x06 << 24) 12515fb4814Smrg#define CMDQREG_FG (0x07 << 24) 12615fb4814Smrg#define CMDQREG_BG (0x08 << 24) 12715fb4814Smrg#define CMDQREG_FG_SRC (0x09 << 24) 12815fb4814Smrg#define CMDQREG_BG_SRC (0x0A << 24) 12915fb4814Smrg#define CMDQREG_MONO1 (0x0B << 24) 13015fb4814Smrg#define CMDQREG_MONO2 (0x0C << 24) 13115fb4814Smrg#define CMDQREG_CLIP1 (0x0D << 24) 13215fb4814Smrg#define CMDQREG_CLIP2 (0x0E << 24) 13315fb4814Smrg#define CMDQREG_CMD (0x0F << 24) 13415fb4814Smrg#define CMDQREG_PAT (0x40 << 24) 13515fb4814Smrg 13615fb4814Smrg#define CMDQREG_LINE_XY (0x04 << 24) 13715fb4814Smrg#define CMDQREG_LINE_Err (0x05 << 24) 13815fb4814Smrg#define CMDQREG_LINE_WIDTH (0x06 << 24) 13915fb4814Smrg#define CMDQREG_LINE_K1 (0x09 << 24) 14015fb4814Smrg#define CMDQREG_LINE_K2 (0x0A << 24) 14115fb4814Smrg#define CMDQREG_LINE_STYLE1 (0x0B << 24) 14215fb4814Smrg#define CMDQREG_LINE_STYLE2 (0x0C << 24) 14315fb4814Smrg 14415fb4814Smrg/* CMD Reg. Definition */ 14515fb4814Smrg#define CMD_BITBLT 0x00000000 14615fb4814Smrg#define CMD_LINEDRAW 0x00000001 14715fb4814Smrg#define CMD_COLOREXP 0x00000002 14815fb4814Smrg#define CMD_ENHCOLOREXP 0x00000003 14915fb4814Smrg#define CMD_MASK 0x00000007 15015fb4814Smrg 15115fb4814Smrg#define CMD_DISABLE_CLIP 0x00000000 15215fb4814Smrg#define CMD_ENABLE_CLIP 0x00000008 15315fb4814Smrg 15415fb4814Smrg#define CMD_COLOR_08 0x00000000 15515fb4814Smrg#define CMD_COLOR_16 0x00000010 15615fb4814Smrg#define CMD_COLOR_32 0x00000020 15715fb4814Smrg 15815fb4814Smrg#define CMD_SRC_SIQ 0x00000040 15915fb4814Smrg 16015fb4814Smrg#define CMD_TRANSPARENT 0x00000080 16115fb4814Smrg 16215fb4814Smrg#define CMD_PAT_FGCOLOR 0x00000000 16315fb4814Smrg#define CMD_PAT_MONOMASK 0x00010000 16415fb4814Smrg#define CMD_PAT_PATREG 0x00020000 16515fb4814Smrg 16615fb4814Smrg#define CMD_OPAQUE 0x00000000 16715fb4814Smrg#define CMD_FONT_TRANSPARENT 0x00040000 16815fb4814Smrg 16915fb4814Smrg#define CMD_X_INC 0x00000000 17015fb4814Smrg#define CMD_X_DEC 0x00200000 17115fb4814Smrg 17215fb4814Smrg#define CMD_Y_INC 0x00000000 17315fb4814Smrg#define CMD_Y_DEC 0x00100000 17415fb4814Smrg 17515fb4814Smrg#define CMD_DRAW_LAST_PIXEL 0x00000000 17615fb4814Smrg#define CMD_NOT_DRAW_LAST_PIXEL 0x00800000 17715fb4814Smrg 17815fb4814Smrg#define CMD_DISABLE_LINE_STYLE 0x00000000 17915fb4814Smrg#define CMD_ENABLE_LINE_STYLE 0x40000000 18015fb4814Smrg 18115fb4814Smrg#define CMD_RESET_STYLE_COUNTER 0x80000000 18215fb4814Smrg#define CMD_NOT_RESET_STYLE_COUNTER 0x00000000 18315fb4814Smrg 18415fb4814Smrg#define BURST_FORCE_CMD 0x80000000 18515fb4814Smrg 18615fb4814Smrg/* Line */ 18715fb4814Smrg#define LINEPARAM_XM 0x00000001 18815fb4814Smrg#define LINEPARAM_X_DEC 0x00000002 18915fb4814Smrg#define LINEPARAM_Y_DEC 0x00000004 19015fb4814Smrg 19115fb4814Smrgtypedef struct _LINEPARAM { 19215fb4814Smrg USHORT dsLineX; 19315fb4814Smrg USHORT dsLineY; 19415fb4814Smrg USHORT dsLineWidth; 19515fb4814Smrg ULONG dwErrorTerm; 19615fb4814Smrg ULONG dwK1Term; 19715fb4814Smrg ULONG dwK2Term; 19815fb4814Smrg ULONG dwLineAttributes; 19915fb4814Smrg} LINEPARAM, *PLINEPARAM; 20015fb4814Smrg 20115fb4814Smrgtypedef struct { 20215fb4814Smrg 203de78e416Smrg LONG X1; 204de78e416Smrg LONG Y1; 205de78e416Smrg LONG X2; 206de78e416Smrg LONG Y2; 20715fb4814Smrg 20815fb4814Smrg} _LINEInfo; 20915fb4814Smrg 21015fb4814Smrg/* Macro */ 21115fb4814Smrg/* MMIO 2D Macro */ 21215fb4814Smrg#define ASTSetupSRCBase_MMIO(base) \ 21315fb4814Smrg { \ 21415fb4814Smrg do { \ 21515fb4814Smrg *(ULONG *)(MMIOREG_SRC_BASE) = (ULONG) (base); \ 216de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_SRC_BASE) != (ULONG) (base)); \ 21715fb4814Smrg } 21815fb4814Smrg#define ASTSetupSRCPitch_MMIO(pitch) \ 21915fb4814Smrg { \ 22015fb4814Smrg do { \ 22115fb4814Smrg *(ULONG *)(MMIOREG_SRC_PITCH) = (ULONG)(pitch << 16); \ 222de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_SRC_PITCH) != (ULONG)(pitch << 16)); \ 22315fb4814Smrg } 22415fb4814Smrg#define ASTSetupDSTBase_MMIO(base) \ 22515fb4814Smrg { \ 22615fb4814Smrg do { \ 22715fb4814Smrg *(ULONG *)(MMIOREG_DST_BASE) = (ULONG)(base); \ 228de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_DST_BASE) != (ULONG)(base)); \ 22915fb4814Smrg } 23015fb4814Smrg#define ASTSetupDSTPitchHeight_MMIO(pitch, height) \ 23115fb4814Smrg { \ 23215fb4814Smrg ULONG dstpitch; \ 233de78e416Smrg dstpitch = (ULONG)((pitch << 16) + ((height) & MASK_DST_HEIGHT)); \ 23415fb4814Smrg do { \ 23515fb4814Smrg *(ULONG *)(MMIOREG_DST_PITCH) = dstpitch; \ 236de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_DST_PITCH) != dstpitch); \ 23715fb4814Smrg } 23815fb4814Smrg#define ASTSetupDSTXY_MMIO(x, y) \ 23915fb4814Smrg { \ 24015fb4814Smrg ULONG dstxy; \ 241de78e416Smrg dstxy = (ULONG)(((x & MASK_DST_X) << 16) + (y & MASK_DST_Y)); \ 24215fb4814Smrg do { \ 24315fb4814Smrg *(ULONG *)(MMIOREG_DST_XY) = dstxy; \ 244de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_DST_XY) != dstxy); \ 24515fb4814Smrg } 24615fb4814Smrg#define ASTSetupSRCXY_MMIO(x, y) \ 24715fb4814Smrg { \ 24815fb4814Smrg ULONG srcxy; \ 249de78e416Smrg srcxy = (ULONG)(((x & MASK_SRC_X) << 16) + (y & MASK_SRC_Y)); \ 25015fb4814Smrg do { \ 25115fb4814Smrg *(ULONG *)(MMIOREG_SRC_XY) = srcxy; \ 252de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_SRC_XY) != srcxy); \ 25315fb4814Smrg } 25415fb4814Smrg#define ASTSetupRECTXY_MMIO(x, y) \ 25515fb4814Smrg { \ 25615fb4814Smrg ULONG rectxy; \ 257de78e416Smrg rectxy = (ULONG)(((x & MASK_RECT_WIDTH) << 16) + (y & MASK_RECT_WIDTH)); \ 25815fb4814Smrg do { \ 25915fb4814Smrg *(ULONG *)(MMIOREG_RECT_XY) = rectxy; \ 260de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_RECT_XY) != rectxy); \ 26115fb4814Smrg } 26215fb4814Smrg#define ASTSetupFG_MMIO(color) \ 26315fb4814Smrg { \ 26415fb4814Smrg do { \ 26515fb4814Smrg *(ULONG *)(MMIOREG_FG) = (ULONG)(color); \ 266de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_FG) != (ULONG)(color)); \ 26715fb4814Smrg } 26815fb4814Smrg#define ASTSetupBG_MMIO(color) \ 26915fb4814Smrg { \ 27015fb4814Smrg do { \ 27115fb4814Smrg *(ULONG *)(MMIOREG_BG) = (ULONG)(color); \ 272de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_BG) != (ULONG)(color)); \ 27315fb4814Smrg } 27415fb4814Smrg#define ASTSetupMONO1_MMIO(pat) \ 27515fb4814Smrg { \ 27615fb4814Smrg do { \ 27715fb4814Smrg *(ULONG *)(MMIOREG_MONO1) = (ULONG)(pat); \ 278de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_MONO1) != (ULONG)(pat)); \ 27915fb4814Smrg } 28015fb4814Smrg#define ASTSetupMONO2_MMIO(pat) \ 28115fb4814Smrg { \ 28215fb4814Smrg do { \ 28315fb4814Smrg *(ULONG *)(MMIOREG_MONO2) = (ULONG)(pat); \ 284de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_MONO2) != (ULONG)(pat)); \ 28515fb4814Smrg } 28615fb4814Smrg#define ASTSetupCLIP1_MMIO(left, top) \ 28715fb4814Smrg { \ 28815fb4814Smrg ULONG clip1; \ 289de78e416Smrg clip1 = (ULONG)(((left & MASK_CLIP) << 16) + (top & MASK_CLIP)); \ 29015fb4814Smrg do { \ 29115fb4814Smrg *(ULONG *)(MMIOREG_CLIP1) = clip1; \ 292de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_CLIP1) != clip1); \ 29315fb4814Smrg } 29415fb4814Smrg#define ASTSetupCLIP2_MMIO(right, bottom) \ 29515fb4814Smrg { \ 29615fb4814Smrg ULONG clip2; \ 297de78e416Smrg clip2 = (ULONG)(((right & MASK_CLIP) << 16) + (bottom & MASK_CLIP)); \ 29815fb4814Smrg do { \ 29915fb4814Smrg *(ULONG *)(MMIOREG_CLIP2) = clip2; \ 300de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_CLIP2) != clip2); \ 30115fb4814Smrg } 30215fb4814Smrg#define ASTSetupCMDReg_MMIO(reg) \ 30315fb4814Smrg { \ 30415fb4814Smrg *(ULONG *)(MMIOREG_CMD) = (ULONG)(reg); \ 30515fb4814Smrg } 30615fb4814Smrg#define ASTSetupPatReg_MMIO(patreg, pat) \ 30715fb4814Smrg { \ 30815fb4814Smrg do { \ 30915fb4814Smrg *(ULONG *)(MMIOREG_PAT + patreg*4) = (ULONG)(pat); \ 310de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_PAT + patreg*4) != (ULONG)(pat)); \ 31115fb4814Smrg } 31215fb4814Smrg 31315fb4814Smrg/* Line CMD */ 31415fb4814Smrg#define ASTSetupLineXY_MMIO(x, y) \ 31515fb4814Smrg { \ 31615fb4814Smrg ULONG linexy; \ 317de78e416Smrg linexy = (ULONG)(((x & MASK_LINE_X) << 16) + (y & MASK_LINE_Y)); \ 31815fb4814Smrg do { \ 31915fb4814Smrg *(ULONG *)(MMIOREG_LINE_XY) = linexy; \ 320de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_LINE_XY) != linexy); \ 32115fb4814Smrg } 32215fb4814Smrg#define ASTSetupLineXMErrTerm_MMIO(xm, err) \ 32315fb4814Smrg { \ 32415fb4814Smrg ULONG lineerr; \ 325de78e416Smrg lineerr = (ULONG)((xm << 24) + (err & MASK_LINE_ERR)); \ 32615fb4814Smrg do { \ 32715fb4814Smrg *(ULONG *)(MMIOREG_LINE_Err) = lineerr; \ 328de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_LINE_Err) != lineerr); \ 32915fb4814Smrg } 33015fb4814Smrg#define ASTSetupLineWidth_MMIO(width) \ 33115fb4814Smrg { \ 33215fb4814Smrg ULONG linewidth; \ 333de78e416Smrg linewidth = (ULONG)((width & MASK_LINE_WIDTH) << 16); \ 33415fb4814Smrg do { \ 33515fb4814Smrg *(ULONG *)(MMIOREG_LINE_WIDTH) = linewidth; \ 336de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_LINE_WIDTH) != linewidth); \ 33715fb4814Smrg } 33815fb4814Smrg#define ASTSetupLineK1Term_MMIO(err) \ 33915fb4814Smrg { \ 34015fb4814Smrg do { \ 341de78e416Smrg *(ULONG *)(MMIOREG_LINE_K1) = (ULONG)(err & MASK_LINE_K1); \ 342de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_LINE_K1) != (ULONG)(err & MASK_LINE_K1)); \ 34315fb4814Smrg } 34415fb4814Smrg#define ASTSetupLineK2Term_MMIO(err) \ 34515fb4814Smrg { \ 34615fb4814Smrg do { \ 347de78e416Smrg *(ULONG *)(MMIOREG_LINE_K2) = (ULONG)(err & MASK_LINE_K2); \ 348de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_LINE_K2) != (ULONG)(err & MASK_LINE_K2)); \ 34915fb4814Smrg } 35015fb4814Smrg#define ASTSetupLineStyle1_MMIO(pat) \ 35115fb4814Smrg { \ 35215fb4814Smrg do { \ 35315fb4814Smrg *(ULONG *)(MMIOREG_LINE_STYLE1) = (ULONG)(pat); \ 354de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_LINE_STYLE1) != (ULONG)(pat)); \ 35515fb4814Smrg } 35615fb4814Smrg#define ASTSetupLineStyle2_MMIO(pat) \ 35715fb4814Smrg { \ 35815fb4814Smrg do { \ 35915fb4814Smrg *(ULONG *)(MMIOREG_LINE_STYLE2) = (ULONG)(pat); \ 360de78e416Smrg } while (*(volatile ULONG *)(MMIOREG_LINE_STYLE2) != (ULONG)(pat)); \ 36115fb4814Smrg } 36215fb4814Smrg 36315fb4814Smrg/* CMDQ Mode Macro */ 36415fb4814Smrg#define mUpdateWritePointer *(ULONG *) (pAST->CMDQInfo.pjWritePort) = (pAST->CMDQInfo.ulWritePointer >>3) 36515fb4814Smrg 36615fb4814Smrg/* General CMD */ 36715fb4814Smrg#define ASTSetupSRCBase(addr, base) \ 36815fb4814Smrg { \ 36915fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_SRC_BASE); \ 37015fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(base); \ 37115fb4814Smrg } 37215fb4814Smrg#define ASTSetupSRCPitch(addr, pitch) \ 37315fb4814Smrg { \ 37415fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_SRC_PITCH); \ 37515fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(pitch << 16); \ 37615fb4814Smrg } 37715fb4814Smrg#define ASTSetupDSTBase(addr, base) \ 37815fb4814Smrg { \ 37915fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_DST_BASE); \ 38015fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(base); \ 38115fb4814Smrg } 38215fb4814Smrg#define ASTSetupDSTPitchHeight(addr, pitch, height) \ 38315fb4814Smrg { \ 38415fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_DST_PITCH); \ 385de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)((pitch << 16) + ((height) & MASK_DST_HEIGHT)); \ 38615fb4814Smrg } 38715fb4814Smrg#define ASTSetupDSTXY(addr, x, y) \ 38815fb4814Smrg { \ 38915fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_DST_XY); \ 390de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)(((x & MASK_DST_X) << 16) + (y & MASK_DST_Y)); \ 39115fb4814Smrg } 39215fb4814Smrg#define ASTSetupSRCXY(addr, x, y) \ 39315fb4814Smrg { \ 39415fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_SRC_XY); \ 395de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)(((x & MASK_SRC_X) << 16) + (y & MASK_SRC_Y)); \ 39615fb4814Smrg } 39715fb4814Smrg#define ASTSetupRECTXY(addr, x, y) \ 39815fb4814Smrg { \ 39915fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_RECT_XY); \ 400de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)(((x & MASK_RECT_WIDTH) << 16) + (y & MASK_RECT_WIDTH)); \ 40115fb4814Smrg } 40215fb4814Smrg#define ASTSetupFG(addr, color) \ 40315fb4814Smrg { \ 40415fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_FG); \ 40515fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(color); \ 40615fb4814Smrg } 40715fb4814Smrg#define ASTSetupBG(addr, color) \ 40815fb4814Smrg { \ 40915fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_BG); \ 41015fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(color); \ 41115fb4814Smrg } 41215fb4814Smrg#define ASTSetupMONO1(addr, pat) \ 41315fb4814Smrg { \ 41415fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_MONO1); \ 41515fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(pat); \ 41615fb4814Smrg } 41715fb4814Smrg#define ASTSetupMONO2(addr, pat) \ 41815fb4814Smrg { \ 41915fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_MONO2); \ 42015fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(pat); \ 42115fb4814Smrg } 42215fb4814Smrg#define ASTSetupCLIP1(addr, left, top) \ 42315fb4814Smrg { \ 42415fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_CLIP1); \ 425de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)(((left & MASK_CLIP) << 16) + (top & MASK_CLIP)); \ 42615fb4814Smrg } 42715fb4814Smrg#define ASTSetupCLIP2(addr, right, bottom) \ 42815fb4814Smrg { \ 42915fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_CLIP2); \ 430de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)(((right & MASK_CLIP) << 16) + (bottom & MASK_CLIP)); \ 43115fb4814Smrg } 43215fb4814Smrg#define ASTSetupCMDReg(addr, reg) \ 43315fb4814Smrg { \ 43415fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_CMD); \ 43515fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(reg); \ 43615fb4814Smrg } 43715fb4814Smrg#define ASTSetupPatReg(addr, patreg, pat) \ 43815fb4814Smrg { \ 43915fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + (CMDQREG_PAT + (patreg << 24))); \ 44015fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(pat); \ 44115fb4814Smrg } 44215fb4814Smrg 44315fb4814Smrg/* Line CMD */ 44415fb4814Smrg#define ASTSetupLineXY(addr, x, y) \ 44515fb4814Smrg { \ 44615fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_LINE_XY); \ 447de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)(((x & MASK_LINE_X) << 16) + (y & MASK_LINE_Y)); \ 44815fb4814Smrg } 44915fb4814Smrg#define ASTSetupLineXMErrTerm(addr, xm, err) \ 45015fb4814Smrg { \ 45115fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_LINE_Err); \ 452de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)((xm << 24) + (err & MASK_LINE_ERR)); \ 45315fb4814Smrg } 45415fb4814Smrg#define ASTSetupLineWidth(addr, width) \ 45515fb4814Smrg { \ 45615fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_LINE_WIDTH); \ 457de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)((width & MASK_LINE_WIDTH) << 16); \ 45815fb4814Smrg } 45915fb4814Smrg#define ASTSetupLineK1Term(addr, err) \ 46015fb4814Smrg { \ 46115fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_LINE_K1); \ 462de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)(err & MASK_LINE_K1); \ 46315fb4814Smrg } 46415fb4814Smrg#define ASTSetupLineK2Term(addr, err) \ 46515fb4814Smrg { \ 46615fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_LINE_K2); \ 467de78e416Smrg addr->PKT_SC_dwData[0] = (ULONG)(err & MASK_LINE_K2); \ 46815fb4814Smrg } 46915fb4814Smrg#define ASTSetupLineStyle1(addr, pat) \ 47015fb4814Smrg { \ 47115fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_LINE_STYLE1); \ 47215fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(pat); \ 47315fb4814Smrg } 47415fb4814Smrg#define ASTSetupLineStyle2(addr, pat) \ 47515fb4814Smrg { \ 47615fb4814Smrg addr->PKT_SC_dwHeader = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_LINE_STYLE2); \ 47715fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG)(pat); \ 47815fb4814Smrg } 47915fb4814Smrg 48015fb4814Smrg#define ASTSetupNULLCMD(addr) \ 48115fb4814Smrg { \ 48215fb4814Smrg addr->PKT_SC_dwHeader = (ULONG) (PKT_NULL_CMD); \ 48315fb4814Smrg addr->PKT_SC_dwData[0] = (ULONG) 0; \ 48415fb4814Smrg } 485