102be438aSmrg
202be438aSmrg
302be438aSmrg#ifndef _TDFX_FIFO_H_
402be438aSmrg#define _TDFX_FIFO_H_
502be438aSmrg
602be438aSmrgtypedef unsigned int   uint32;
702be438aSmrgtypedef unsigned short uint16;
802be438aSmrgtypedef unsigned char  uint8;
902be438aSmrgtypedef int   int32;
1002be438aSmrgtypedef short int16;
1102be438aSmrgtypedef char  int8;
1202be438aSmrg
1302be438aSmrg#define CMDFIFO_PAGES 64
1402be438aSmrg
1502be438aSmrg#define PROPSAREADATA \
1602be438aSmrg  volatile int fifoPtr; \
1702be438aSmrg  volatile int fifoRead;
1802be438aSmrg
1902be438aSmrg#define PROPDATASTD \
2002be438aSmrg  volatile unsigned int *fifoPtr; \
2102be438aSmrg  volatile unsigned int *fifoRead; \
2202be438aSmrg  int fifoSlots; \
2302be438aSmrg  unsigned int *fifoBase; \
2402be438aSmrg  unsigned int *fifoEnd; \
2502be438aSmrg  int fifoOffset; \
2602be438aSmrg  int fifoSize
2702be438aSmrg
2802be438aSmrg#define PROPDATADBG \
2902be438aSmrg  unsigned int *fifoMirrorBase; \
3002be438aSmrg  unsigned int *fifoMirrorPtr;
3102be438aSmrg
3202be438aSmrg#ifdef FIFO_DEBUG
3302be438aSmrg#define PROPDATA PROPDATASTD; \
3402be438aSmrg	PROPDATADBG
3502be438aSmrg#else
3602be438aSmrg#define PROPDATA PROPDATASTD;
3702be438aSmrg#endif
3802be438aSmrg
3902be438aSmrg#ifdef TDFX_DEBUG_CMDS
4002be438aSmrg#define TDFXMakeRoom(p, n) \
4102be438aSmrg  do { \
4202be438aSmrg    if (fifoCnt) \
4302be438aSmrg      ErrorF("Previous TDFXMakeRoom passed incorrect size\n"); \
4402be438aSmrg    cmdCnt=n; \
4502be438aSmrg    TDFXAllocateSlots(p, (n)+1); \
4602be438aSmrg  while (0)
4702be438aSmrg#define TDFXWriteLong(p, a, v)
4802be438aSmrg  do { \
4902be438aSmrg    if (lastAddr & a<lastAddr) \
5002be438aSmrg      ErrorF("TDFXWriteLong not ordered\n"); \
5102be438aSmrg    cmdCnt--; \
5202be438aSmrg    WRITE_FIFO(p, a, v); \
5302be438aSmrg  while (0)
5402be438aSmrg#else
5502be438aSmrg#define TDFXMakeRoom(p, n) TDFXAllocateSlots(p, (n)+1)
5602be438aSmrg#define TDFXWriteLong(p, a, v) WRITE_FIFO(p, a, v)
5702be438aSmrg#endif
5802be438aSmrg#define DECLARE SET_PKT2_HEADER
5902be438aSmrg#define DECLARE_LAUNCH SET_PK1_HEADER_LAUNCH
6002be438aSmrg#define TDFXSendNOP TDFXSendNOPFifo
6102be438aSmrg
6202be438aSmrg/*
6302be438aSmrg** Structures for Banshee AGP/CMD Transfer/MISC registers.
6402be438aSmrg*/
6502be438aSmrgtypedef volatile struct _H3CmdFifo
6602be438aSmrg{
6702be438aSmrg	uint32 baseAddrL;
6802be438aSmrg	uint32 baseSize;
6902be438aSmrg	uint32 bump;
7002be438aSmrg	uint32 readPtrL;
7102be438aSmrg	uint32 readPtrH;
7202be438aSmrg	uint32 aMin;
7302be438aSmrg	uint32 unusedA;
7402be438aSmrg	uint32 aMax;
7502be438aSmrg	uint32 unusedB;
7602be438aSmrg	uint32 depth;
7702be438aSmrg	uint32 holeCount;
7802be438aSmrg	uint32 reserved;
7902be438aSmrg} H3CmdFifo;
8002be438aSmrg
8102be438aSmrgBool TDFXInitFifo(ScreenPtr pScreen);
8202be438aSmrgvoid TDFXShutdownFifo(ScreenPtr pScreen);
8302be438aSmrgvoid TDFXAllocateSlots(TDFXPtr pTDFX, int slots);
8402be438aSmrgvoid TDFXSendNOPFifo2D(ScrnInfoPtr pScreen);
8502be438aSmrg
8602be438aSmrg#define CHECK_FOR_ROOM(_n) \
8702be438aSmrg	if ((pTDFX->fifoSlots -= (_n)) < 0) \
8802be438aSmrg		cmdfifo_make_room(adapter, fifo_ptr, _n); \
8902be438aSmrg
9002be438aSmrg#if X_BYTE_ORDER == X_BIG_ENDIAN
9102be438aSmrg#define BE_BSWAP32(val) ((((val) & 0x000000ff) << 24) | \
9202be438aSmrg                     (((val) & 0x0000ff00) << 8) |  \
9302be438aSmrg                     (((val) & 0x00ff0000) >> 8) |  \
9402be438aSmrg                     (((val) & 0xff000000) >> 24))
9502be438aSmrg
9602be438aSmrg#define BE_WSWAP32(val) ((((val) & 0x0000ffff) << 16) | \
9702be438aSmrg                     (((val) & 0xffff0000) >> 16))
9802be438aSmrg void TDFXWriteFifo_24(TDFXPtr pTDFX, int val);
9902be438aSmrg void TDFXWriteFifo_16(TDFXPtr pTDFX, int val);
10002be438aSmrg void TDFXWriteFifo_8(TDFXPtr pTDFX, int val);
10102be438aSmrg#else
10202be438aSmrg/* Don't swap on little-endian platforms */
10302be438aSmrg#define BE_BSWAP32(val) val
10402be438aSmrg#define BE_WSWAP32(val) val
10502be438aSmrg#endif
10602be438aSmrg
10702be438aSmrg
10802be438aSmrg#ifdef DEBUG_FIFO
10902be438aSmrg#define WRITE_FIFO(ptr, loc, _val) \
11002be438aSmrg  do { \
11102be438aSmrg    *pTDFX->fifoMirrorPtr++ = _val; \
11202be438aSmrg    *pTDFX->fifoPtr++ = _val; \
11302be438aSmrg  } while(0)
11402be438aSmrg#else
11502be438aSmrg#if X_BYTE_ORDER == X_BIG_ENDIAN
11602be438aSmrg#define WRITE_FIFO(ptr, loc, _val) \
11702be438aSmrg  do { \
11802be438aSmrg    pTDFX->writeFifo(ptr, _val); \
11902be438aSmrg  } while (0)
12002be438aSmrg#else
12102be438aSmrg#define WRITE_FIFO(ptr, loc, _val) \
12202be438aSmrg  do { \
12302be438aSmrg    *pTDFX->fifoPtr++ = _val; \
12402be438aSmrg  } while(0)
12502be438aSmrg#endif /* X_BYTE_ORDER == X_BIG_ENDIAN */
12602be438aSmrg#endif /* DEBUG_FIFO */
12702be438aSmrg
12802be438aSmrg#if X_BYTE_ORDER == X_BIG_ENDIAN
12902be438aSmrg#define FLUSH_WCB()
13002be438aSmrg#else
13102be438aSmrg#define FLUSH_WCB() inb(0x80)
13202be438aSmrg#endif
13302be438aSmrg
13402be438aSmrg/*
13502be438aSmrg** Send a packet header type 1 (2D) to the cmdfifo
13602be438aSmrg*/
13702be438aSmrg#define SET_2DPK1_HEADER(_ndwords, _inc, _reg) \
13802be438aSmrg	WRITE_FIFO ( pTDFX, 0, (_ndwords) << SSTCP_PKT1_NWORDS_SHIFT | \
13902be438aSmrg	                ((_inc) ? SSTCP_PKT1_INC : SSTCP_PKT1_NOINC) | \
14002be438aSmrg	                SSTCP_PKT1_2D | \
14102be438aSmrg	                FIELD_OFFSET(H3_2D_REGISTERS, _reg)/4 << SSTCP_REGBASE_SHIFT | \
14202be438aSmrg	                SSTCP_PKT1 \
14302be438aSmrg	              )
14402be438aSmrg
14502be438aSmrg/*
14602be438aSmrg** Send a packet header type 1 to begin at launchArea[0] to the cmdfifo
14702be438aSmrg*/
14802be438aSmrg#define SET_PK1_HEADER_LAUNCH(_ndwords, _inc) \
14902be438aSmrg	WRITE_FIFO ( pTDFX, 0, (_ndwords) << SSTCP_PKT1_NWORDS_SHIFT | \
15002be438aSmrg	                ((_inc) ? SSTCP_PKT1_INC : SSTCP_PKT1_NOINC) | \
15102be438aSmrg	                SSTCP_PKT1_LAUNCH | SSTCP_PKT1 \
15202be438aSmrg	              )
15302be438aSmrg
15402be438aSmrg/*
15502be438aSmrg** Send a packet header type 1 to begin at colorPattern[0] to the cmdfifo
15602be438aSmrg*/
15702be438aSmrg#define SET_PK1_HEADER_COLORPATTERN(_ndwords, _inc) \
15802be438aSmrg	WRITE_FIFO ( pTDFX, 0, (_ndwords) << SSTCP_PKT1_NWORDS_SHIFT | \
15902be438aSmrg	                ((_inc) ? SSTCP_PKT1_INC : SSTCP_PKT1_NOINC) | \
16002be438aSmrg	                SSTCP_PKT1_COLORPATTERN | SSTCP_PKT1 \
16102be438aSmrg	              )
16202be438aSmrg
16302be438aSmrg/*
16402be438aSmrg** Send a packet header type 2 to the cmdfifo
16502be438aSmrg*/
16602be438aSmrg#define SET_PKT2_HEADER(_mask) \
16702be438aSmrg    WRITE_FIFO (pTDFX, 0, ((_mask) << SSTCP_PKT2_MASK_SHIFT) | SSTCP_PKT2)
16802be438aSmrg
16902be438aSmrg/*
17002be438aSmrg** These are used to select a register mask for use with
17102be438aSmrg** command fifo packet type 4.  The defines represent an
17202be438aSmrg** offset register from the base register.
17302be438aSmrg** e.g. R5 = baseReg + 5, R0 = baseReg etc..
17402be438aSmrg*/
17502be438aSmrg#define R0  (1 << 0)
17602be438aSmrg#define R1  (1 << 1)
17702be438aSmrg#define R2  (1 << 2)
17802be438aSmrg#define R3  (1 << 3)
17902be438aSmrg#define R4  (1 << 4)
18002be438aSmrg#define R5  (1 << 5)
18102be438aSmrg#define R6  (1 << 6)
18202be438aSmrg#define R7  (1 << 7)
18302be438aSmrg#define R8  (1 << 8)
18402be438aSmrg#define R9  (1 << 9)
18502be438aSmrg#define R10 (1 << 10)
18602be438aSmrg#define R11 (1 << 11)
18702be438aSmrg#define R12 (1 << 12)
18802be438aSmrg#define R13 (1 << 13)
18902be438aSmrg
19002be438aSmrg#define SET_2DPK4_HEADER(_mask, _reg0) \
19102be438aSmrg	WRITE_FIFO ( pTDFX, 0, ((_mask) << SSTCP_PKT4_MASK_SHIFT) | \
19202be438aSmrg	                SSTCP_PKT4_2D | \
19302be438aSmrg	                (_reg0) | \
19402be438aSmrg	                SSTCP_PKT4 \
19502be438aSmrg	              )
19602be438aSmrg
19702be438aSmrg#define SET_3DPK4_HEADER(_mask, _reg0) \
19802be438aSmrg	WRITE_FIFO ( pTDFX, 0, ((_mask) << SSTCP_PKT4_MASK_SHIFT) | \
19902be438aSmrg	                (_reg0) | \
20002be438aSmrg	                SSTCP_PKT4 \
20102be438aSmrg	              )
20202be438aSmrg
20302be438aSmrg/*----------------- SST cmdFifo*.baseSize bits --------------------------- */
20402be438aSmrg#define SST_CMDFIFO_SIZE		0xFF
20502be438aSmrg#define SST_EN_CMDFIFO			BIT(8)
20602be438aSmrg#define SST_CMDFIFO_AGP			BIT(9)
20702be438aSmrg#define SST_CMDFIFO_DISABLE_HOLES	BIT(10)
20802be438aSmrg
20902be438aSmrg/* SST COMMAND PACKET defines */
21002be438aSmrg#define SSTCP_PKT_SIZE	3
21102be438aSmrg#define SSTCP_PKT	SST_MASK(SSTCP_PKT_SIZE)
21202be438aSmrg#define SSTCP_PKT0	0
21302be438aSmrg#define SSTCP_PKT1	1
21402be438aSmrg#define SSTCP_PKT2	2
21502be438aSmrg#define SSTCP_PKT3	3
21602be438aSmrg#define SSTCP_PKT4	4
21702be438aSmrg#define SSTCP_PKT5	5
21802be438aSmrg#define SSTCP_PKT6	6
21902be438aSmrg#define SSTCP_PKT7	7
22002be438aSmrg
22102be438aSmrg#define SSTCP_BOGUS_WORDS_SHIFT	29
22202be438aSmrg#define SSTCP_BOGUS_WORDS	(7 << SSTCP_BOGUS_WORDS_SHIFT)
22302be438aSmrg
22402be438aSmrg/* packet 0 defines */
22502be438aSmrg#define SSTCP_PKT0_FUNC_SHIFT	3
22602be438aSmrg#define SSTCP_PKT0_FUNC		(7 << SSTCP_PKT0_FUNC_SHIFT)
22702be438aSmrg#define SSTCP_PKT0_NOP		((0<<SSTCP_PKT0_FUNC_SHIFT) | SSTCP_PKT0)
22802be438aSmrg#define SSTCP_PKT0_JSR		((1<<SSTCP_PKT0_FUNC_SHIFT) | SSTCP_PKT0)
22902be438aSmrg#define SSTCP_PKT0_RET		((2<<SSTCP_PKT0_FUNC_SHIFT) | SSTCP_PKT0)
23002be438aSmrg#define SSTCP_PKT0_JMP_LOCAL	((3<<SSTCP_PKT0_FUNC_SHIFT) | SSTCP_PKT0)
23102be438aSmrg#define SSTCP_PKT0_JMP_AGP	((4<<SSTCP_PKT0_FUNC_SHIFT) | SSTCP_PKT0)
23202be438aSmrg#define SSTCP_PKT0_ADDR_SHIFT	6
23302be438aSmrg#define SSTCP_PKT0_ADDR		(0x7FFFFF<<SSTCP_PKT0_ADDR_SHIFT)
23402be438aSmrg
23502be438aSmrg/* packet 1 defines */
23602be438aSmrg#define SSTCP_REGBASE_SHIFT	SSTCP_PKT_SIZE
23702be438aSmrg#ifdef H4
23802be438aSmrg#define SSTCP_REGBASE		(0x7FF<<SSTCP_REGBASE_SHIFT)
23902be438aSmrg#define SSTCP_REGBASE_FROM_ADDR(x) ( (((x)>>2) & 0x7FF) << SSTCP_REGBASE_SHIFT )
24002be438aSmrg#else
24102be438aSmrg#define SSTCP_REGBASE		((0x3FF)<<SSTCP_REGBASE_SHIFT)
24202be438aSmrg#define SSTCP_REGBASE_FROM_ADDR(x) ( (((x)>>2) & 0x3FF) << SSTCP_REGBASE_SHIFT )
24302be438aSmrg#endif
24402be438aSmrg#define SSTCP_PKT1_2D	BIT(14)
24502be438aSmrg#define SSTCP_INC           BIT(15)
24602be438aSmrg#define SSTCP_PKT1_NWORDS_SHIFT	16
24702be438aSmrg#define SSTCP_PKT1_NWORDS	(0xFFFFUL<<SSTCP_PKT1_NWORDS_SHIFT)
24802be438aSmrg
24902be438aSmrg#define SSTCP_PKT1_NOINC           0
25002be438aSmrg#define SSTCP_PKT1_INC             SSTCP_INC
25102be438aSmrg#define SSTCP_PKT1_CLIP0MIN        (SSTCP_PKT1_2D | (0x02 << SSTCP_REGBASE_SHIFT))
25202be438aSmrg#define SSTCP_PKT1_CLIP0MAX        (SSTCP_PKT1_2D | (0x03 << SSTCP_REGBASE_SHIFT))
25302be438aSmrg#define SSTCP_PKT1_DSTBASEADDR     (SSTCP_PKT1_2D | (0x04 << SSTCP_REGBASE_SHIFT))
25402be438aSmrg#define SSTCP_PKT1_DSTFORMAT       (SSTCP_PKT1_2D | (0x05 << SSTCP_REGBASE_SHIFT))
25502be438aSmrg#define SSTCP_PKT1_SRCCOLORKEYMIN  (SSTCP_PKT1_2D | (0x06 << SSTCP_REGBASE_SHIFT))
25602be438aSmrg#define SSTCP_PKT1_SRCCOLORKEYMAX  (SSTCP_PKT1_2D | (0x07 << SSTCP_REGBASE_SHIFT))
25702be438aSmrg#define SSTCP_PKT1_DSTCOLORKEYMIN  (SSTCP_PKT1_2D | (0x08 << SSTCP_REGBASE_SHIFT))
25802be438aSmrg#define SSTCP_PKT1_DSTCOLORKEYMAX  (SSTCP_PKT1_2D | (0x09 << SSTCP_REGBASE_SHIFT))
25902be438aSmrg#define SSTCP_PKT1_BRESERROR0      (SSTCP_PKT1_2D | (0x0a << SSTCP_REGBASE_SHIFT))
26002be438aSmrg#define SSTCP_PKT1_BRESERROR1      (SSTCP_PKT1_2D | (0x0b << SSTCP_REGBASE_SHIFT))
26102be438aSmrg#define SSTCP_PKT1_ROP             (SSTCP_PKT1_2D | (0x0c << SSTCP_REGBASE_SHIFT))
26202be438aSmrg#define SSTCP_PKT1_SRCBASEADDR     (SSTCP_PKT1_2D | (0x0d << SSTCP_REGBASE_SHIFT))
26302be438aSmrg#define SSTCP_PKT1_COMMANDEXTRA    (SSTCP_PKT1_2D | (0x0e << SSTCP_REGBASE_SHIFT))
26402be438aSmrg#define SSTCP_PKT1_LINESTIPPLE     (SSTCP_PKT1_2D | (0x0f << SSTCP_REGBASE_SHIFT))
26502be438aSmrg#define SSTCP_PKT1_LINESTYLE       (SSTCP_PKT1_2D | (0x10 << SSTCP_REGBASE_SHIFT))
26602be438aSmrg#define SSTCP_PKT1_PATTERN0ALIAS   (SSTCP_PKT1_2D | (0x11 << SSTCP_REGBASE_SHIFT))
26702be438aSmrg#define SSTCP_PKT1_PATTERN1ALIAS   (SSTCP_PKT1_2D | (0x12 << SSTCP_REGBASE_SHIFT))
26802be438aSmrg#define SSTCP_PKT1_CLIP1MIN        (SSTCP_PKT1_2D | (0x13 << SSTCP_REGBASE_SHIFT))
26902be438aSmrg#define SSTCP_PKT1_CLIP1MAX        (SSTCP_PKT1_2D | (0x14 << SSTCP_REGBASE_SHIFT))
27002be438aSmrg#define SSTCP_PKT1_SRCFORMAT       (SSTCP_PKT1_2D | (0x15 << SSTCP_REGBASE_SHIFT))
27102be438aSmrg#define SSTCP_PKT1_SRCSIZE         (SSTCP_PKT1_2D | (0x16 << SSTCP_REGBASE_SHIFT))
27202be438aSmrg#define SSTCP_PKT1_SRCXY           (SSTCP_PKT1_2D | (0x17 << SSTCP_REGBASE_SHIFT))
27302be438aSmrg#define SSTCP_PKT1_COLORBACK       (SSTCP_PKT1_2D | (0x18 << SSTCP_REGBASE_SHIFT))
27402be438aSmrg#define SSTCP_PKT1_COLORFORE       (SSTCP_PKT1_2D | (0x19 << SSTCP_REGBASE_SHIFT))
27502be438aSmrg#define SSTCP_PKT1_DSTSIZE         (SSTCP_PKT1_2D | (0x1a << SSTCP_REGBASE_SHIFT))
27602be438aSmrg#define SSTCP_PKT1_DSTXY           (SSTCP_PKT1_2D | (0x1b << SSTCP_REGBASE_SHIFT))
27702be438aSmrg#define SSTCP_PKT1_COMMAND         (SSTCP_PKT1_2D | (0x1c << SSTCP_REGBASE_SHIFT))
27802be438aSmrg#define SSTCP_PKT1_LAUNCH          (SSTCP_PKT1_2D | (0x20 << SSTCP_REGBASE_SHIFT))
27902be438aSmrg#define SSTCP_PKT1_COLORPATTERN    (SSTCP_PKT1_2D | (0x40 << SSTCP_REGBASE_SHIFT))
28002be438aSmrg
28102be438aSmrg/* packet 2 defines */
28202be438aSmrg#define SSTCP_PKT2_MASK_SHIFT	SSTCP_PKT_SIZE
28302be438aSmrg#define SSTCP_PKT2_MASK		(0x1FFFFFFFUL<<SSTCP_PKT2_MASK_SHIFT)
28402be438aSmrg
28502be438aSmrg#define SSTCP_CLIP0MIN         0x00000001L
28602be438aSmrg#define SSTCP_CLIP0MAX         0x00000002L
28702be438aSmrg#define SSTCP_DSTBASEADDR      0x00000004L
28802be438aSmrg#define SSTCP_DSTFORMAT        0x00000008L
28902be438aSmrg#define SSTCP_SRCCOLORKEYMIN   0x00000010L
29002be438aSmrg#define SSTCP_SRCCOLORKEYMAX   0x00000020L
29102be438aSmrg#define SSTCP_DSTCOLORKEYMIN   0x00000040L
29202be438aSmrg#define SSTCP_DSTCOLORKEYMAX   0x00000080L
29302be438aSmrg#define SSTCP_BRESERROR0       0x00000100L
29402be438aSmrg#define SSTCP_BRESERROR1       0x00000200L
29502be438aSmrg#define SSTCP_ROP              0x00000400L
29602be438aSmrg#define SSTCP_SRCBASEADDR      0x00000800L
29702be438aSmrg#define SSTCP_COMMANDEXTRA     0x00001000L
29802be438aSmrg#define SSTCP_LINESTIPPLE      0x00002000L
29902be438aSmrg#define SSTCP_LINESTYLE        0x00004000L
30002be438aSmrg#define SSTCP_PATTERN0ALIAS    0x00008000L
30102be438aSmrg#define SSTCP_PATTERN1ALIAS    0x00010000L
30202be438aSmrg#define SSTCP_CLIP1MIN         0x00020000L
30302be438aSmrg#define SSTCP_CLIP1MAX         0x00040000L
30402be438aSmrg#define SSTCP_SRCFORMAT        0x00080000L
30502be438aSmrg#define SSTCP_SRCSIZE          0x00100000L
30602be438aSmrg#define SSTCP_SRCXY            0x00200000L
30702be438aSmrg#define SSTCP_COLORBACK        0x00400000L
30802be438aSmrg#define SSTCP_COLORFORE        0x00800000L
30902be438aSmrg#define SSTCP_DSTSIZE          0x01000000L
31002be438aSmrg#define SSTCP_DSTXY            0x02000000L
31102be438aSmrg#define SSTCP_COMMAND          0x04000000L
31202be438aSmrg
31302be438aSmrg/* packet 3 defines */
31402be438aSmrg#define SSTCP_PKT3_CMD_SHIFT	SSTCP_PKT_SIZE
31502be438aSmrg#define SSTCP_PKT3_CMD		(0x7<<SSTCP_PKT3_CMD_SHIFT)
31602be438aSmrg#  define SSTCP_PKT3_BDDBDD	(0<<SSTCP_PKT3_CMD_SHIFT)
31702be438aSmrg#  define SSTCP_PKT3_BDDDDD	(1<<SSTCP_PKT3_CMD_SHIFT)
31802be438aSmrg#  define SSTCP_PKT3_DDDDDD	(2<<SSTCP_PKT3_CMD_SHIFT)
31902be438aSmrg#define SSTCP_PKT3_NUMVERTEX_SHIFT (SSTCP_PKT_SIZE+3)
32002be438aSmrg#define SSTCP_PKT3_NUMVERTEX	(0xF << SSTCP_PKT3_NUMVERTEX_SHIFT)
32102be438aSmrg#define SSTCP_PKT3_PMASK_SHIFT	(SSTCP_PKT_SIZE+3+4)
32202be438aSmrg#define SSTCP_PKT3_PMASK	(0xFFFUL<<SSTCP_PKT3_PMASK_SHIFT)
32302be438aSmrg#define SSTCP_PKT3_SMODE_SHIFT	(SSTCP_PKT3_PMASK_SHIFT+12)
32402be438aSmrg#define SSTCP_PKT3_SMODE	(0x3FUL<<SSTCP_PKT3_SMODE_SHIFT)
32502be438aSmrg#define SSTCP_PKT3_PACKEDCOLOR	BIT(28)
32602be438aSmrg
32702be438aSmrg/* packet 4 defines */
32802be438aSmrg#define SSTCP_REGBASE_SHIFT	SSTCP_PKT_SIZE
32902be438aSmrg#ifdef H4
33002be438aSmrg#define SSTCP_REGBASE		((0x7FF)<<SSTCP_REGBASE_SHIFT)
33102be438aSmrg#else
33202be438aSmrg#define SSTCP_REGBASE		((0x3FF)<<SSTCP_REGBASE_SHIFT)
33302be438aSmrg#endif
33402be438aSmrg#define SSTCP_PKT4_2D		BIT(14)
33502be438aSmrg#define SSTCP_PKT4_MASK_SHIFT	15
33602be438aSmrg#define SSTCP_PKT4_MASK		(0x3FFFUL<<SSTCP_PKT4_MASK_SHIFT)
33702be438aSmrg
33802be438aSmrg#define SSTCP_PKT4_CLIP0MIN        (SSTCP_PKT4_2D | (0x02 << SSTCP_REGBASE_SHIFT))
33902be438aSmrg#define SSTCP_PKT4_CLIP0MAX        (SSTCP_PKT4_2D | (0x03 << SSTCP_REGBASE_SHIFT))
34002be438aSmrg#define SSTCP_PKT4_DSTBASEADDR     (SSTCP_PKT4_2D | (0x04 << SSTCP_REGBASE_SHIFT))
34102be438aSmrg#define SSTCP_PKT4_DSTFORMAT       (SSTCP_PKT4_2D | (0x05 << SSTCP_REGBASE_SHIFT))
34202be438aSmrg#define SSTCP_PKT4_SRCCOLORKEYMIN  (SSTCP_PKT4_2D | (0x06 << SSTCP_REGBASE_SHIFT))
34302be438aSmrg#define SSTCP_PKT4_SRCCOLORKEYMAX  (SSTCP_PKT4_2D | (0x07 << SSTCP_REGBASE_SHIFT))
34402be438aSmrg#define SSTCP_PKT4_DSTCOLORKEYMIN  (SSTCP_PKT4_2D | (0x08 << SSTCP_REGBASE_SHIFT))
34502be438aSmrg#define SSTCP_PKT4_DSTCOLORKEYMAX  (SSTCP_PKT4_2D | (0x09 << SSTCP_REGBASE_SHIFT))
34602be438aSmrg#define SSTCP_PKT4_BRESERROR0      (SSTCP_PKT4_2D | (0x0a << SSTCP_REGBASE_SHIFT))
34702be438aSmrg#define SSTCP_PKT4_BRESERROR1      (SSTCP_PKT4_2D | (0x0b << SSTCP_REGBASE_SHIFT))
34802be438aSmrg#define SSTCP_PKT4_ROP             (SSTCP_PKT4_2D | (0x0c << SSTCP_REGBASE_SHIFT))
34902be438aSmrg#define SSTCP_PKT4_SRCBASEADDR     (SSTCP_PKT4_2D | (0x0d << SSTCP_REGBASE_SHIFT))
35002be438aSmrg#define SSTCP_PKT4_COMMANDEXTRA    (SSTCP_PKT4_2D | (0x0e << SSTCP_REGBASE_SHIFT))
35102be438aSmrg#define SSTCP_PKT4_LINESTIPPLE     (SSTCP_PKT4_2D | (0x0f << SSTCP_REGBASE_SHIFT))
35202be438aSmrg#define SSTCP_PKT4_LINESTYLE       (SSTCP_PKT4_2D | (0x10 << SSTCP_REGBASE_SHIFT))
35302be438aSmrg#define SSTCP_PKT4_PATTERN0ALIAS   (SSTCP_PKT4_2D | (0x11 << SSTCP_REGBASE_SHIFT))
35402be438aSmrg#define SSTCP_PKT4_PATTERN1ALIAS   (SSTCP_PKT4_2D | (0x12 << SSTCP_REGBASE_SHIFT))
35502be438aSmrg#define SSTCP_PKT4_CLIP1MIN        (SSTCP_PKT4_2D | (0x13 << SSTCP_REGBASE_SHIFT))
35602be438aSmrg#define SSTCP_PKT4_CLIP1MAX        (SSTCP_PKT4_2D | (0x14 << SSTCP_REGBASE_SHIFT))
35702be438aSmrg#define SSTCP_PKT4_SRCFORMAT       (SSTCP_PKT4_2D | (0x15 << SSTCP_REGBASE_SHIFT))
35802be438aSmrg#define SSTCP_PKT4_SRCSIZE         (SSTCP_PKT4_2D | (0x16 << SSTCP_REGBASE_SHIFT))
35902be438aSmrg#define SSTCP_PKT4_SRCXY           (SSTCP_PKT4_2D | (0x17 << SSTCP_REGBASE_SHIFT))
36002be438aSmrg#define SSTCP_PKT4_COLORBACK       (SSTCP_PKT4_2D | (0x18 << SSTCP_REGBASE_SHIFT))
36102be438aSmrg#define SSTCP_PKT4_COLORFORE       (SSTCP_PKT4_2D | (0x19 << SSTCP_REGBASE_SHIFT))
36202be438aSmrg#define SSTCP_PKT4_DSTSIZE         (SSTCP_PKT4_2D | (0x1a << SSTCP_REGBASE_SHIFT))
36302be438aSmrg#define SSTCP_PKT4_DSTXY           (SSTCP_PKT4_2D | (0x1b << SSTCP_REGBASE_SHIFT))
36402be438aSmrg#define SSTCP_PKT4_COMMAND         (SSTCP_PKT4_2D | (0x1c << SSTCP_REGBASE_SHIFT))
36502be438aSmrg
36602be438aSmrg/* packet 5 defines */
36702be438aSmrg#define SSTCP_PKT5_NWORDS_SHIFT	3
36802be438aSmrg#define SSTCP_PKT5_NWORDS	(0x7FFFFUL<<SSTCP_PKT5_NWORDS_SHIFT)
36902be438aSmrg#define SSTCP_PKT5_BYTEN_WN_SHIFT 22
37002be438aSmrg#define SSTCP_PKT5_BYTEN_WN	(0xFUL<<SSTCP_PKT5_BYTEN_WN_SHIFT)
37102be438aSmrg#define SSTCP_PKT5_BYTEN_W2_SHIFT 26
37202be438aSmrg#define SSTCP_PKT5_BYTEN_W2	(0xFUL<<SSTCP_PKT5_BYTEN_W2_SHIFT)
37302be438aSmrg#define SSTCP_PKT5_SPACE_SHIFT	30
37402be438aSmrg#define SSTCP_PKT5_SPACE	(0x3UL<<SSTCP_PKT5_SPACE_SHIFT)
37502be438aSmrg#define SSTCP_PKT5_LFB		(0x0UL<<SSTCP_PKT5_SPACE_SHIFT)
37602be438aSmrg#define SSTCP_PKT5_YUV		(0x1UL<<SSTCP_PKT5_SPACE_SHIFT)
37702be438aSmrg#define SSTCP_PKT5_3DLFB	(0x2UL<<SSTCP_PKT5_SPACE_SHIFT)
37802be438aSmrg#define SSTCP_PKT5_TEXPORT	(0x3UL<<SSTCP_PKT5_SPACE_SHIFT)
37902be438aSmrg#define SSTCP_PKT5_BASEADDR	0x1FFFFFFUL
38002be438aSmrg
38102be438aSmrg/* packet 6 defines */
38202be438aSmrg#define SSTCP_PKT6_SPACE_SHIFT  3
38302be438aSmrg#define SSTCP_PKT6_SPACE        (0x3UL<<SSTCP_PKT6_SPACE_SHIFT)
38402be438aSmrg#define SSTCP_PKT6_LFB          (0x0UL<<SSTCP_PKT6_SPACE_SHIFT)
38502be438aSmrg#define SSTCP_PKT6_YUV          (0x1UL<<SSTCP_PKT6_SPACE_SHIFT)
38602be438aSmrg#define SSTCP_PKT6_3DLFB        (0x2UL<<SSTCP_PKT6_SPACE_SHIFT)
38702be438aSmrg#define SSTCP_PKT6_TEXPORT      (0x3UL<<SSTCP_PKT6_SPACE_SHIFT)
38802be438aSmrg#define SSTCP_PKT6_NBYTES_SHIFT 5
38902be438aSmrg#define SSTCP_PKT6_NBYTES       (SST_MASK(20) << SSTCP_PKT6_NBYTES_SHIFT)
39002be438aSmrg#define SSTCP_PKT6_SRC_BASELOW            SST_MASK(32)
39102be438aSmrg#define SSTCP_PKT6_SRC_WIDTH              SST_MASK(14)
39202be438aSmrg#define SSTCP_PKT6_SRC_STRIDE_SHIFT       14
39302be438aSmrg#define SSTCP_PKT6_SRC_STRIDE             (SST_MASK(14) <<SSTCP_PKT6_SRC_STRIDE_SHIFT)
39402be438aSmrg#define SSTCP_PKT6_SRC_BASEHIGH_SHIFT     28
39502be438aSmrg#define SSTCP_PKT6_SRC_BASEHIGH           (SST_MASK(4) <<SSTCP_PKT6_SRC_BASEHIGH_SHIFT)
39602be438aSmrg#define SSTCP_PKT6_FRAME_BUFFER_OFFSET    SST_MASK(26)
39702be438aSmrg#define SSTCP_PKT6_DST_STRIDE             SST_MASK(15)
39802be438aSmrg
39902be438aSmrg#define SST_FIFO_OFFSET 0x0080000
40002be438aSmrg#define SST_FIFO_BASEADDR0 SST_FIFO_OFFSET+0x20
40102be438aSmrg#define SST_FIFO_BASESIZE0 SST_FIFO_OFFSET+0x24
40202be438aSmrg#define SST_FIFO_BUMP0 SST_FIFO_OFFSET+0x28
40302be438aSmrg#define SST_FIFO_RDPTRL0 SST_FIFO_OFFSET+0x2c
40402be438aSmrg#define SST_FIFO_RDPTRH0 SST_FIFO_OFFSET+0x30
40502be438aSmrg#define SST_FIFO_AMIN0 SST_FIFO_OFFSET+0x34
40602be438aSmrg#define SST_FIFO_AMAX0 SST_FIFO_OFFSET+0x3c
40702be438aSmrg#define SST_FIFO_DEPTH0 SST_FIFO_OFFSET+0x44
40802be438aSmrg#define SST_FIFO_HOLECNT0 SST_FIFO_OFFSET+0x48
40902be438aSmrg
41002be438aSmrg#define SST_FIFO_BASEADDR1 SST_FIFO_OFFSET+0x50
41102be438aSmrg#define SST_FIFO_BASESIZE1 SST_FIFO_OFFSET+0x54
41202be438aSmrg#define SST_FIFO_BUMP1 SST_FIFO_OFFSET+0x58
41302be438aSmrg#define SST_FIFO_RDPTRL1 SST_FIFO_OFFSET+0x5c
41402be438aSmrg#define SST_FIFO_RDPTRH1 SST_FIFO_OFFSET+0x60
41502be438aSmrg#define SST_FIFO_AMIN1 SST_FIFO_OFFSET+0x64
41602be438aSmrg#define SST_FIFO_AMAX1 SST_FIFO_OFFSET+0x6c
41702be438aSmrg#define SST_FIFO_DEPTH1 SST_FIFO_OFFSET+0x74
41802be438aSmrg#define SST_FIFO_HOLECNT1 SST_FIFO_OFFSET+0x78
41902be438aSmrg
42002be438aSmrg#define SST_FIFO_FIFOTHRESH SST_FIFO_OFFSET+0x80
42102be438aSmrg
42202be438aSmrg#endif
423