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