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