172b676d7Smrg/*
272b676d7Smrg * Register access macros and register definitions
372b676d7Smrg *
472b676d7Smrg * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
572b676d7Smrg *
672b676d7Smrg * Redistribution and use in source and binary forms, with or without
772b676d7Smrg * modification, are permitted provided that the following conditions
872b676d7Smrg * are met:
972b676d7Smrg * 1) Redistributions of source code must retain the above copyright
1072b676d7Smrg *    notice, this list of conditions and the following disclaimer.
1172b676d7Smrg * 2) Redistributions in binary form must reproduce the above copyright
1272b676d7Smrg *    notice, this list of conditions and the following disclaimer in the
1372b676d7Smrg *    documentation and/or other materials provided with the distribution.
1472b676d7Smrg * 3) The name of the author may not be used to endorse or promote products
1572b676d7Smrg *    derived from this software without specific prior written permission.
1672b676d7Smrg *
1772b676d7Smrg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1872b676d7Smrg * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1972b676d7Smrg * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2072b676d7Smrg * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2172b676d7Smrg * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2272b676d7Smrg * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2372b676d7Smrg * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2472b676d7Smrg * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2572b676d7Smrg * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2672b676d7Smrg * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2772b676d7Smrg *
2872b676d7Smrg */
2972b676d7Smrg
3072b676d7Smrg#ifndef _SIS_REGS_H_
3172b676d7Smrg#define _SIS_REGS_H_
3272b676d7Smrg
3372b676d7Smrg/*
3472b676d7Smrg#define SIS_NEED_inSISREG
3572b676d7Smrg#define SIS_NEED_inSISREGW
3672b676d7Smrg#define SIS_NEED_inSISREGL
3772b676d7Smrg#define SIS_NEED_outSISREG
3872b676d7Smrg#define SIS_NEED_outSISREGW
3972b676d7Smrg#define SIS_NEED_outSISREGL
4072b676d7Smrg#define SIS_NEED_orSISREG
4172b676d7Smrg#define SIS_NEED_andSISREG
4272b676d7Smrg#define SIS_NEED_inSISIDXREG
4372b676d7Smrg#define SIS_NEED_outSISIDXREG
4472b676d7Smrg#define SIS_NEED_orSISIDXREG
4572b676d7Smrg#define SIS_NEED_andSISIDXREG
4672b676d7Smrg#define SIS_NEED_setSISIDXREG
4772b676d7Smrg#define SIS_NEED_setSISIDXREGmask
4872b676d7Smrg*/
4972b676d7Smrg
5072b676d7Smrg/* Video RAM access macros */
5172b676d7Smrg
5272b676d7Smrg/* (Currently, these are use on all platforms; USB2VGA is handled
5372b676d7Smrg * entirely different in a dedicated driver)
5472b676d7Smrg */
5572b676d7Smrg
5672b676d7Smrg/* dest is video RAM, src is system RAM */
5772b676d7Smrg#define sisfbwritel(dest, data)        	*(dest)     = (data)
5872b676d7Smrg#define sisfbwritelinc(dest, data)     	*((dest)++) = (data)
5972b676d7Smrg#define sisfbwritelp(dest, dataptr)    	*(dest)     = *(dataptr)
6072b676d7Smrg#define sisfbwritelpinc(dest, dataptr) 	*((dest)++) = *((dataptr)++)
6172b676d7Smrg
6272b676d7Smrg#define sisfbwritew(dest, data)        	*(dest)     = (data)
6372b676d7Smrg#define sisfbwritewinc(dest, data)     	*((dest)++) = (data)
6472b676d7Smrg#define sisfbwritewp(dest, dataptr)    	*(dest)     = *(dataptr)
6572b676d7Smrg#define sisfbwritewpinc(dest, dataptr) 	*((dest)++) = *((dataptr)++)
6672b676d7Smrg
6772b676d7Smrg#define sisfbwriteb(dest, data)        	*(dest)     = (data)
6872b676d7Smrg#define sisfbwritebinc(dest, data)     	*((dest)++) = (data)
6972b676d7Smrg#define sisfbwritebp(dest, dataptr)    	*(dest)     = *(dataptr)
7072b676d7Smrg#define sisfbwritebpinc(dest, dataptr) 	*((dest)++) = *((dataptr)++)
7172b676d7Smrg
7272b676d7Smrg/* Source is video RAM */
7372b676d7Smrg#define sisfbreadl(src)        		*(src)
7472b676d7Smrg#define sisfbreadlinc(src)        	*((src)++)
7572b676d7Smrg
7672b676d7Smrg#define sisfbreadw(src)        		*(src)
7772b676d7Smrg#define sisfbreadwinc(src)        	*((src)++)
7872b676d7Smrg
7972b676d7Smrg#define sisfbreadb(src)        		*(src)
8072b676d7Smrg#define sisfbreadbinc(src)        	*((src)++)
8172b676d7Smrg
8272b676d7Smrg/* Register access macros  --------------- */
8372b676d7Smrg
8472b676d7Smrg#ifndef SISUSEDEVPORT
8572b676d7Smrg
8672b676d7Smrg#define inSISREG(base)          inb(base)
8772b676d7Smrg#define inSISREGW(base)         inw(base)
8872b676d7Smrg#define inSISREGL(base)         inl(base)
8972b676d7Smrg
9072b676d7Smrg#define outSISREG(base,val)     outb(base,val)
9172b676d7Smrg#define outSISREGW(base,val)    outw(base,val)
9272b676d7Smrg#define outSISREGL(base,val)    outl(base,val)
9372b676d7Smrg
9472b676d7Smrg#define orSISREG(base,val)      			\
9572b676d7Smrg		    do { 				\
9672b676d7Smrg                      UChar __Temp = inSISREG(base); 	\
9772b676d7Smrg                      outSISREG(base, __Temp | (val)); 	\
9872b676d7Smrg                    } while (0)
9972b676d7Smrg
10072b676d7Smrg#define andSISREG(base,val)     			\
10172b676d7Smrg		    do { 				\
10272b676d7Smrg                      UChar __Temp = inSISREG(base); 	\
10372b676d7Smrg                      outSISREG(base, __Temp & (val)); 	\
10472b676d7Smrg                    } while (0)
10572b676d7Smrg
10672b676d7Smrg#define inSISIDXREG(base,idx,var)   		\
10772b676d7Smrg		    do { 			\
10872b676d7Smrg                      outSISREG(base, idx); 	\
10972b676d7Smrg		      var = inSISREG((base)+1);	\
11072b676d7Smrg                    } while (0)
11172b676d7Smrg
11272b676d7Smrg#define outSISIDXREG(base,idx,val)  		\
11372b676d7Smrg		    do { 			\
11472b676d7Smrg                      outSISREG(base, idx); 	\
11572b676d7Smrg		      outSISREG((base)+1, val); \
11672b676d7Smrg                    } while (0)
11772b676d7Smrg
11872b676d7Smrg#define orSISIDXREG(base,idx,val)   				\
11972b676d7Smrg		    do { 					\
12072b676d7Smrg                      UChar __Temp; 				\
12172b676d7Smrg                      outSISREG(base, idx);   			\
12272b676d7Smrg                      __Temp = inSISREG((base)+1) | (val); 	\
12372b676d7Smrg		      outSISREG((base)+1, __Temp);		\
12472b676d7Smrg                    } while (0)
12572b676d7Smrg
12672b676d7Smrg#define andSISIDXREG(base,idx,and)  				\
12772b676d7Smrg		    do { 					\
12872b676d7Smrg                      UChar __Temp; 				\
12972b676d7Smrg                      outSISREG(base, idx);   			\
13072b676d7Smrg                      __Temp = inSISREG((base)+1) & (and); 	\
13172b676d7Smrg		      outSISREG((base)+1, __Temp);		\
13272b676d7Smrg                    } while (0)
13372b676d7Smrg
13472b676d7Smrg#define setSISIDXREG(base,idx,and,or)   		   		\
13572b676d7Smrg		    do { 				   		\
13672b676d7Smrg                      UChar __Temp; 		   			\
13772b676d7Smrg                      outSISREG(base, idx);   		   		\
13872b676d7Smrg                      __Temp = (inSISREG((base)+1) & (and)) | (or); 	\
13972b676d7Smrg		      outSISREG((base)+1, __Temp);			\
14072b676d7Smrg                    } while (0)
14172b676d7Smrg
14272b676d7Smrg#define setSISIDXREGmask(base,idx,data,mask)		   	\
14372b676d7Smrg		    do {				   	\
14472b676d7Smrg		      UChar __Temp;		   		\
14572b676d7Smrg		      outSISREG(base, idx);			\
14672b676d7Smrg		      __Temp = (inSISREG((base)+1)) & (~(mask));\
14772b676d7Smrg		      __Temp |= ((data) & (mask));	   	\
14872b676d7Smrg		      outSISREG((base)+1, __Temp);		\
14972b676d7Smrg		    } while(0)
15072b676d7Smrg
15172b676d7Smrg#else /* USEDEVPORT */
15272b676d7Smrg
15372b676d7Smrgextern int sisdevport;
15472b676d7Smrg
15572b676d7Smrg/* Note to self: SEEK_SET is faster than SEEK_CUR */
15672b676d7Smrg
15772b676d7Smrg#ifdef SIS_NEED_inSISREG
15872b676d7Smrgstatic UChar inSISREG(ULong base)
15972b676d7Smrg{
16072b676d7Smrg    UChar tmp;
16172b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
16272b676d7Smrg    read(sisdevport, &tmp, 1);
16372b676d7Smrg    return tmp;
16472b676d7Smrg}
16572b676d7Smrg#endif
16672b676d7Smrg
16772b676d7Smrg#ifdef SIS_NEED_inSISREGW
16872b676d7Smrgstatic __inline UShort inSISREGW(ULong base)
16972b676d7Smrg{
17072b676d7Smrg    UShort tmp;
17172b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
17272b676d7Smrg    read(sisdevport, &tmp, 2);
17372b676d7Smrg    return tmp;
17472b676d7Smrg}
17572b676d7Smrg#endif
17672b676d7Smrg
17772b676d7Smrg#ifdef SIS_NEED_inSISREGL
17872b676d7Smrgstatic __inline unsigned int inSISREGL(ULong base)
17972b676d7Smrg{
18072b676d7Smrg    ULong tmp;
18172b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
18272b676d7Smrg    read(sisdevport, &tmp, 4);
18372b676d7Smrg    return tmp;
18472b676d7Smrg}
18572b676d7Smrg#endif
18672b676d7Smrg
18772b676d7Smrg#ifdef SIS_NEED_outSISREG
18872b676d7Smrgstatic void outSISREG(ULong base, UChar val)
18972b676d7Smrg{
19072b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
19172b676d7Smrg    write(sisdevport, &val, 1);
19272b676d7Smrg}
19372b676d7Smrg#endif
19472b676d7Smrg
19572b676d7Smrg#ifdef SIS_NEED_outSISREGW
19672b676d7Smrgstatic __inline void outSISREGW(ULong base, UShort val)
19772b676d7Smrg{
19872b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
19972b676d7Smrg    write(sisdevport, &val, 2);
20072b676d7Smrg}
20172b676d7Smrg#endif
20272b676d7Smrg
20372b676d7Smrg#ifdef SIS_NEED_outSISREGL
20472b676d7Smrgstatic __inline void outSISREGL(ULong base, unsigned int val)
20572b676d7Smrg{
20672b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
20772b676d7Smrg    write(sisdevport, &val, 4);
20872b676d7Smrg}
20972b676d7Smrg#endif
21072b676d7Smrg
21172b676d7Smrg#ifdef SIS_NEED_orSISREG
21272b676d7Smrgstatic void orSISREG(ULong base, UChar val)
21372b676d7Smrg{
21472b676d7Smrg    UChar tmp;
21572b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
21672b676d7Smrg    read(sisdevport, &tmp, 1);
21772b676d7Smrg    tmp |= val;
21872b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
21972b676d7Smrg    write(sisdevport, &tmp, 1);
22072b676d7Smrg}
22172b676d7Smrg#endif
22272b676d7Smrg
22372b676d7Smrg#ifdef SIS_NEED_andSISREG
22472b676d7Smrgstatic void andSISREG(ULong base, UChar val)
22572b676d7Smrg{
22672b676d7Smrg    UChar tmp;
22772b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
22872b676d7Smrg    read(sisdevport, &tmp, 1);
22972b676d7Smrg    tmp &= val;
23072b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
23172b676d7Smrg    write(sisdevport, &tmp, 1);
23272b676d7Smrg}
23372b676d7Smrg#endif
23472b676d7Smrg
23572b676d7Smrg#ifdef SIS_NEED_outSISIDXREG
23672b676d7Smrgstatic void outSISIDXREG(ULong base, UChar idx, UChar val)
23772b676d7Smrg{
23872b676d7Smrg    UChar value[2];
23972b676d7Smrg    value[0] = idx;	/* sic! reads/writes bytewise! */
24072b676d7Smrg    value[1] = val;
24172b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
24272b676d7Smrg    write(sisdevport, &value[0], 2);
24372b676d7Smrg}
24472b676d7Smrg#endif
24572b676d7Smrg
24672b676d7Smrg#ifdef SIS_NEED_inSISIDXREG
24772b676d7Smrgstatic UChar __inSISIDXREG(ULong base, UChar idx)
24872b676d7Smrg{
24972b676d7Smrg    UChar tmp;
25072b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
25172b676d7Smrg    write(sisdevport, &idx, 1);
25272b676d7Smrg    read(sisdevport, &tmp, 1);
25372b676d7Smrg    return tmp;
25472b676d7Smrg}
25572b676d7Smrg#define inSISIDXREG(base,idx,var)  var = __inSISIDXREG(base, idx);
25672b676d7Smrg#endif
25772b676d7Smrg
25872b676d7Smrg#ifdef SIS_NEED_orSISIDXREG
25972b676d7Smrgstatic void orSISIDXREG(ULong base, UChar idx, UChar val)
26072b676d7Smrg{
26172b676d7Smrg    UChar tmp;
26272b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
26372b676d7Smrg    write(sisdevport, &idx, 1);
26472b676d7Smrg    read(sisdevport, &tmp, 1);
26572b676d7Smrg    tmp |= val;
26672b676d7Smrg    lseek(sisdevport, base + 1, SEEK_SET);
26772b676d7Smrg    write(sisdevport, &tmp, 1);
26872b676d7Smrg}
26972b676d7Smrg#endif
27072b676d7Smrg
27172b676d7Smrg#ifdef SIS_NEED_andSISIDXREG
27272b676d7Smrgstatic void andSISIDXREG(ULong base, UChar idx, UChar val)
27372b676d7Smrg{
27472b676d7Smrg    UChar tmp;
27572b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
27672b676d7Smrg    write(sisdevport, &idx, 1);
27772b676d7Smrg    read(sisdevport, &tmp, 1);
27872b676d7Smrg    tmp &= val;
27972b676d7Smrg    lseek(sisdevport, base + 1, SEEK_SET);
28072b676d7Smrg    write(sisdevport, &tmp, 1);
28172b676d7Smrg}
28272b676d7Smrg#endif
28372b676d7Smrg
28472b676d7Smrg#ifdef SIS_NEED_setSISIDXREG
28572b676d7Smrgstatic void setSISIDXREG(ULong base, UChar idx,
28672b676d7Smrg			 UChar myand, UChar myor)
28772b676d7Smrg{
28872b676d7Smrg    UChar tmp;
28972b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
29072b676d7Smrg    write(sisdevport, &idx, 1);
29172b676d7Smrg    read(sisdevport, &tmp, 1);
29272b676d7Smrg    tmp &= myand;
29372b676d7Smrg    tmp |= myor;
29472b676d7Smrg    lseek(sisdevport, base + 1, SEEK_SET);
29572b676d7Smrg    write(sisdevport, &tmp, 1);
29672b676d7Smrg}
29772b676d7Smrg#endif
29872b676d7Smrg
29972b676d7Smrg#ifdef SIS_NEED_setSISIDXREGmask
30072b676d7Smrgstatic void setSISIDXREGmask(ULong base, UChar idx,
30172b676d7Smrg                             UChar data, UChar mask)
30272b676d7Smrg{
30372b676d7Smrg    UChar tmp;
30472b676d7Smrg    lseek(sisdevport, base, SEEK_SET);
30572b676d7Smrg    write(sisdevport, &idx, 1);
30672b676d7Smrg    read(sisdevport, &tmp, 1);
30772b676d7Smrg    tmp &= ~(mask);
30872b676d7Smrg    tmp |= (data & mask);
30972b676d7Smrg    lseek(sisdevport, base + 1, SEEK_SET);
31072b676d7Smrg    write(sisdevport, &tmp, 1);
31172b676d7Smrg}
31272b676d7Smrg#endif
31372b676d7Smrg
31472b676d7Smrg#endif  /* SISUSEDEVPORT */
31572b676d7Smrg
31672b676d7Smrg/* Video RAM and MMIO access macros ----- */
31772b676d7Smrg
31872b676d7Smrg#define sisclearvram(where, howmuch) 	bzero(where, howmuch)
31972b676d7Smrg
32072b676d7Smrg/* MMIO */
32172b676d7Smrg#define SIS_MMIO_OUT8   MMIO_OUT8
32272b676d7Smrg#define SIS_MMIO_OUT16  MMIO_OUT16
32372b676d7Smrg#define SIS_MMIO_OUT32  MMIO_OUT32
32472b676d7Smrg
32572b676d7Smrg#define SIS_MMIO_IN8	MMIO_IN8
32672b676d7Smrg#define SIS_MMIO_IN16	MMIO_IN16
32772b676d7Smrg#define SIS_MMIO_IN32	MMIO_IN32
32872b676d7Smrg
32972b676d7Smrg/* VRAM queue acceleration */
33072b676d7Smrg
33172b676d7Smrg#define SiSWriteQueue(tt)
33272b676d7Smrg
33372b676d7Smrg#define SIS_WQINDEX(i)  ((CARD32 *)(tt))[(i)]
33472b676d7Smrg
33572b676d7Smrg#define SIS_RQINDEX(i)  ((volatile CARD32 *)(tt))[(i)]
33672b676d7Smrg
33772b676d7Smrg/* Port offsets  --------------- */
33872b676d7Smrg
33972b676d7Smrg#define AROFFSET        0x40
34072b676d7Smrg#define ARROFFSET       0x41
34172b676d7Smrg#define GROFFSET        0x4e
34272b676d7Smrg#define SROFFSET        0x44
34372b676d7Smrg#define CROFFSET        0x54
34472b676d7Smrg#define MISCROFFSET     0x4c
34572b676d7Smrg#define MISCWOFFSET     0x42
34672b676d7Smrg#define INPUTSTATOFFSET 0x5A
34772b676d7Smrg#define PART1OFFSET     0x04
34872b676d7Smrg#define PART2OFFSET     0x10
34972b676d7Smrg#define PART3OFFSET     0x12
35072b676d7Smrg#define PART4OFFSET     0x14
35172b676d7Smrg#define PART5OFFSET     0x16
35272b676d7Smrg#define CAPTUREOFFSET   0x00
35372b676d7Smrg#define VIDEOOFFSET     0x02
35472b676d7Smrg#define COLREGOFFSET    0x48
35572b676d7Smrg#define PELMASKOFFSET   0x46
35672b676d7Smrg
35772b676d7Smrg#define SISAR       pSiS->RelIO + AROFFSET
35872b676d7Smrg#define SISARR      pSiS->RelIO + ARROFFSET
35972b676d7Smrg#define SISGR       pSiS->RelIO + GROFFSET
36072b676d7Smrg#define SISSR       pSiS->RelIO + SROFFSET
36172b676d7Smrg#define SISCR       pSiS->RelIO + CROFFSET
36272b676d7Smrg#define SISMISCR    pSiS->RelIO + MISCROFFSET
36372b676d7Smrg#define SISMISCW    pSiS->RelIO + MISCWOFFSET
36472b676d7Smrg#define SISINPSTAT  pSiS->RelIO + INPUTSTATOFFSET
36572b676d7Smrg#define SISPART1    pSiS->RelIO + PART1OFFSET
36672b676d7Smrg#define SISPART2    pSiS->RelIO + PART2OFFSET
36772b676d7Smrg#define SISPART3    pSiS->RelIO + PART3OFFSET
36872b676d7Smrg#define SISPART4    pSiS->RelIO + PART4OFFSET
36972b676d7Smrg#define SISPART5    pSiS->RelIO + PART5OFFSET
37072b676d7Smrg#define SISCAP      pSiS->RelIO + CAPTUREOFFSET
37172b676d7Smrg#define SISVID      pSiS->RelIO + VIDEOOFFSET
37272b676d7Smrg#define SISCOLIDXR  pSiS->RelIO + COLREGOFFSET - 1
37372b676d7Smrg#define SISCOLIDX   pSiS->RelIO + COLREGOFFSET
37472b676d7Smrg#define SISCOLDATA  pSiS->RelIO + COLREGOFFSET + 1
37572b676d7Smrg#define SISCOL2IDX  SISPART5
37672b676d7Smrg#define SISCOL2DATA SISPART5 + 1
37772b676d7Smrg#define SISPEL      pSiS->RelIO + PELMASKOFFSET
37872b676d7Smrg
37972b676d7Smrg/* Video registers (300/315/330/340 series only)  --------------- */
38072b676d7Smrg#define  Index_VI_Passwd                        0x00
38172b676d7Smrg
38272b676d7Smrg/* Video overlay horizontal start/end, unit=screen pixels */
38372b676d7Smrg#define  Index_VI_Win_Hor_Disp_Start_Low        0x01
38472b676d7Smrg#define  Index_VI_Win_Hor_Disp_End_Low          0x02
38572b676d7Smrg#define  Index_VI_Win_Hor_Over                  0x03 /* Overflow */
38672b676d7Smrg
38772b676d7Smrg/* Video overlay vertical start/end, unit=screen pixels */
38872b676d7Smrg#define  Index_VI_Win_Ver_Disp_Start_Low        0x04
38972b676d7Smrg#define  Index_VI_Win_Ver_Disp_End_Low          0x05
39072b676d7Smrg#define  Index_VI_Win_Ver_Over                  0x06 /* Overflow */
39172b676d7Smrg
39272b676d7Smrg/* Y Plane (4:2:0) or YUV (4:2:2) buffer start address, unit=word */
39372b676d7Smrg#define  Index_VI_Disp_Y_Buf_Start_Low          0x07
39472b676d7Smrg#define  Index_VI_Disp_Y_Buf_Start_Middle       0x08
39572b676d7Smrg#define  Index_VI_Disp_Y_Buf_Start_High         0x09
39672b676d7Smrg
39772b676d7Smrg/* U Plane (4:2:0) buffer start address, unit=word */
39872b676d7Smrg#define  Index_VI_U_Buf_Start_Low               0x0A
39972b676d7Smrg#define  Index_VI_U_Buf_Start_Middle            0x0B
40072b676d7Smrg#define  Index_VI_U_Buf_Start_High              0x0C
40172b676d7Smrg
40272b676d7Smrg/* V Plane (4:2:0) buffer start address, unit=word */
40372b676d7Smrg#define  Index_VI_V_Buf_Start_Low               0x0D
40472b676d7Smrg#define  Index_VI_V_Buf_Start_Middle            0x0E
40572b676d7Smrg#define  Index_VI_V_Buf_Start_High              0x0F
40672b676d7Smrg
40772b676d7Smrg/* Pitch for Y, UV Planes, unit=word */
40872b676d7Smrg#define  Index_VI_Disp_Y_Buf_Pitch_Low          0x10
40972b676d7Smrg#define  Index_VI_Disp_UV_Buf_Pitch_Low         0x11
41072b676d7Smrg#define  Index_VI_Disp_Y_UV_Buf_Pitch_Middle    0x12
41172b676d7Smrg
41272b676d7Smrg/* What is this ? */
41372b676d7Smrg#define  Index_VI_Disp_Y_Buf_Preset_Low         0x13
41472b676d7Smrg#define  Index_VI_Disp_Y_Buf_Preset_Middle      0x14
41572b676d7Smrg
41672b676d7Smrg#define  Index_VI_UV_Buf_Preset_Low             0x15
41772b676d7Smrg#define  Index_VI_UV_Buf_Preset_Middle          0x16
41872b676d7Smrg#define  Index_VI_Disp_Y_UV_Buf_Preset_High     0x17
41972b676d7Smrg
42072b676d7Smrg/* Scaling control registers */
42172b676d7Smrg#define  Index_VI_Hor_Post_Up_Scale_Low         0x18
42272b676d7Smrg#define  Index_VI_Hor_Post_Up_Scale_High        0x19
42372b676d7Smrg#define  Index_VI_Ver_Up_Scale_Low              0x1A
42472b676d7Smrg#define  Index_VI_Ver_Up_Scale_High             0x1B
42572b676d7Smrg#define  Index_VI_Scale_Control                 0x1C
42672b676d7Smrg
42772b676d7Smrg/* Playback line buffer control */
42872b676d7Smrg#define  Index_VI_Play_Threshold_Low            0x1D
42972b676d7Smrg#define  Index_VI_Play_Threshold_High           0x1E
43072b676d7Smrg#define  Index_VI_Line_Buffer_Size              0x1F
43172b676d7Smrg
43272b676d7Smrg/* Destination color key */
43372b676d7Smrg#define  Index_VI_Overlay_ColorKey_Red_Min      0x20
43472b676d7Smrg#define  Index_VI_Overlay_ColorKey_Green_Min    0x21
43572b676d7Smrg#define  Index_VI_Overlay_ColorKey_Blue_Min     0x22
43672b676d7Smrg#define  Index_VI_Overlay_ColorKey_Red_Max      0x23
43772b676d7Smrg#define  Index_VI_Overlay_ColorKey_Green_Max    0x24
43872b676d7Smrg#define  Index_VI_Overlay_ColorKey_Blue_Max     0x25
43972b676d7Smrg
44072b676d7Smrg/* Source color key, YUV color space */
44172b676d7Smrg#define  Index_VI_Overlay_ChromaKey_Red_Y_Min   0x26
44272b676d7Smrg#define  Index_VI_Overlay_ChromaKey_Green_U_Min 0x27
44372b676d7Smrg#define  Index_VI_Overlay_ChromaKey_Blue_V_Min  0x28
44472b676d7Smrg#define  Index_VI_Overlay_ChromaKey_Red_Y_Max   0x29
44572b676d7Smrg#define  Index_VI_Overlay_ChromaKey_Green_U_Max 0x2A
44672b676d7Smrg#define  Index_VI_Overlay_ChromaKey_Blue_V_Max  0x2B
44772b676d7Smrg
44872b676d7Smrg/* Contrast enhancement and brightness control */
44972b676d7Smrg#define  Index_VI_Contrast_Factor               0x2C	/* obviously unused/undefined */
45072b676d7Smrg#define  Index_VI_Brightness                    0x2D
45172b676d7Smrg#define  Index_VI_Contrast_Enh_Ctrl             0x2E
45272b676d7Smrg
45372b676d7Smrg#define  Index_VI_Key_Overlay_OP                0x2F
45472b676d7Smrg
45572b676d7Smrg#define  Index_VI_Control_Misc0                 0x30
45672b676d7Smrg#define  Index_VI_Control_Misc1                 0x31
45772b676d7Smrg#define  Index_VI_Control_Misc2                 0x32
45872b676d7Smrg
45972b676d7Smrg/* Subpicture registers */
46072b676d7Smrg#define  Index_VI_SubPict_Buf_Start_Low		0x33
46172b676d7Smrg#define  Index_VI_SubPict_Buf_Start_Middle	0x34
46272b676d7Smrg#define  Index_VI_SubPict_Buf_Start_High	0x35
46372b676d7Smrg
46472b676d7Smrg/* What is this ? */
46572b676d7Smrg#define  Index_VI_SubPict_Buf_Preset_Low	0x36
46672b676d7Smrg#define  Index_VI_SubPict_Buf_Preset_Middle	0x37
46772b676d7Smrg
46872b676d7Smrg/* Subpicture pitch, unit=16 bytes */
46972b676d7Smrg#define  Index_VI_SubPict_Buf_Pitch		0x38
47072b676d7Smrg
47172b676d7Smrg/* Subpicture scaling control */
47272b676d7Smrg#define  Index_VI_SubPict_Hor_Scale_Low		0x39
47372b676d7Smrg#define  Index_VI_SubPict_Hor_Scale_High	0x3A
47472b676d7Smrg#define  Index_VI_SubPict_Vert_Scale_Low	0x3B
47572b676d7Smrg#define  Index_VI_SubPict_Vert_Scale_High	0x3C
47672b676d7Smrg
47772b676d7Smrg#define  Index_VI_SubPict_Scale_Control		0x3D
47872b676d7Smrg/* (0x40 = enable/disable subpicture) */
47972b676d7Smrg
48072b676d7Smrg/* Subpicture line buffer control */
48172b676d7Smrg#define  Index_VI_SubPict_Threshold		0x3E
48272b676d7Smrg
48372b676d7Smrg/* What is this? */
48472b676d7Smrg#define  Index_VI_FIFO_Max			0x3F
48572b676d7Smrg
48672b676d7Smrg/* Subpicture palette; 16 colors, total 32 bytes address space */
48772b676d7Smrg#define  Index_VI_SubPict_Pal_Base_Low		0x40
48872b676d7Smrg#define  Index_VI_SubPict_Pal_Base_High		0x41
48972b676d7Smrg
49072b676d7Smrg/* I wish I knew how to use these ... */
49172b676d7Smrg#define  Index_MPEG_Read_Ctrl0                  0x60	/* MPEG auto flip */
49272b676d7Smrg#define  Index_MPEG_Read_Ctrl1                  0x61	/* MPEG auto flip */
49372b676d7Smrg#define  Index_MPEG_Read_Ctrl2                  0x62	/* MPEG auto flip */
49472b676d7Smrg#define  Index_MPEG_Read_Ctrl3                  0x63	/* MPEG auto flip */
49572b676d7Smrg
49672b676d7Smrg/* MPEG AutoFlip scale */
49772b676d7Smrg#define  Index_MPEG_Ver_Up_Scale_Low            0x64
49872b676d7Smrg#define  Index_MPEG_Ver_Up_Scale_High           0x65
49972b676d7Smrg
50072b676d7Smrg#define  Index_MPEG_Y_Buf_Preset_Low		0x66
50172b676d7Smrg#define  Index_MPEG_Y_Buf_Preset_Middle		0x67
50272b676d7Smrg#define  Index_MPEG_UV_Buf_Preset_Low		0x68
50372b676d7Smrg#define  Index_MPEG_UV_Buf_Preset_Middle	0x69
50472b676d7Smrg#define  Index_MPEG_Y_UV_Buf_Preset_High	0x6A
50572b676d7Smrg
50672b676d7Smrg/* The following registers only exist on the 315/330/340 series */
50772b676d7Smrg
50872b676d7Smrg/* Bit 16:24 of Y_U_V buf start address */
50972b676d7Smrg#define  Index_VI_Y_Buf_Start_Over		0x6B
51072b676d7Smrg#define  Index_VI_U_Buf_Start_Over		0x6C
51172b676d7Smrg#define  Index_VI_V_Buf_Start_Over		0x6D
51272b676d7Smrg
51372b676d7Smrg#define  Index_VI_Disp_Y_Buf_Pitch_High		0x6E
51472b676d7Smrg#define  Index_VI_Disp_UV_Buf_Pitch_High	0x6F
51572b676d7Smrg
51672b676d7Smrg/* Hue and saturation */
51772b676d7Smrg#define	 Index_VI_Hue				0x70
51872b676d7Smrg#define  Index_VI_Saturation			0x71
51972b676d7Smrg
52072b676d7Smrg#define  Index_VI_SubPict_Start_Over		0x72
52172b676d7Smrg#define  Index_VI_SubPict_Buf_Pitch_High	0x73
52272b676d7Smrg
52372b676d7Smrg#define  Index_VI_Control_Misc3			0x74
52472b676d7Smrg
52572b676d7Smrg/* 340 and later: */
52672b676d7Smrg/* DDA registers 0x75 - 0xb4 */
52772b676d7Smrg/* threshold high 0xb5, 0xb6 */
52872b676d7Smrg#define  Index_VI_Line_Buffer_Size_High		0xb7
52972b676d7Smrg
53072b676d7Smrg
53172b676d7Smrg/* Bits in Scale control (0x1c) */
53272b676d7Smrg#define  VI_Scale_Ctrl_Horiz_DDA                0x20
53372b676d7Smrg#define  VI_Scale_Ctrl_Vert_DDA                 0x40
53472b676d7Smrg
53572b676d7Smrg/* Bits (and helpers) for Index_VI_Control_Misc0 */
53672b676d7Smrg#define  VI_Misc0_Enable_Capture_AutoFlip       0x01 /* 340 only? */
53772b676d7Smrg#define  VI_Misc0_Enable_Overlay		0x02
53872b676d7Smrg#define  VI_Misc0_420_Plane_Enable		0x04 /* Select Plane or Packed mode */
53972b676d7Smrg#define  VI_Misc0_422_Enable			0x20 /* Select 422 or 411 mode */
54072b676d7Smrg#define  VI_Misc0_Fmt_YVU420P			0x0C /* YUV420 Planar (I420, YV12) */
54172b676d7Smrg#define  VI_Misc0_Fmt_YUYV			0x28 /* YUYV Packed (=YUY2) */
54272b676d7Smrg#define  VI_Misc0_Fmt_UYVY			0x08 /* (UYVY) */
54372b676d7Smrg#define  VI_Misc0_Fmt_YVYU			0x38 /* (YVYU) (315 series only?) */
54472b676d7Smrg#define  VI_Misc0_Fmt_NV21			0x5c /* (330 series only?) */
54572b676d7Smrg#define  VI_Misc0_Fmt_NV12			0x4c /* (330 series only?) */
54672b676d7Smrg#define  VI_Misc0_ChromaKeyRGBYUV		0x40 /* 300 series only: 0 = RGB, 1 = YUV */
54772b676d7Smrg
54872b676d7Smrg/* Bits for Index_VI_Control_Misc1 */
54972b676d7Smrg#define  VI_Misc1_DisableGraphicsAtOverlay	0x01 /* Disables graphics display in overlay area */
55072b676d7Smrg#define  VI_Misc1_BOB_Enable			0x02 /* Enable BOB de-interlacer */
55172b676d7Smrg#define	 VI_Misc1_Line_Merge			0x04
55272b676d7Smrg#define  VI_Misc1_Field_Mode			0x08 /* ? Assume even/odd fields interleaved in memory ? */
55372b676d7Smrg#define  VI_Misc1_Non_Interleave		0x10 /* ? Odd and Even fields are not interleaved ? */
55472b676d7Smrg#define  VI_Misc1_Buf_Addr_Lock			0x20 /* 315 series only? */
55572b676d7Smrg/* #define  VI_Misc1_?				0x40  */
55672b676d7Smrg/* #define  VI_Misc1_?				0x80  */
55772b676d7Smrg
55872b676d7Smrg/* Bits for Index_VI_Control_Misc2 */
55972b676d7Smrg#define  VI_Misc2_Select_Video2			0x01
56072b676d7Smrg#define  VI_Misc2_Video2_On_Top			0x02
56172b676d7Smrg#define  VI_Misc2_DisableGraphics       	0x04 /* Disable graphics display entirely (<= 650 only, not >= M650, 651) */
56272b676d7Smrg#define  VI_Misc2_Vertical_Interpol		0x08
56372b676d7Smrg#define  VI_Misc2_Dual_Line_Merge		0x10  /* dual-overlay chips only; "dual video windows relative line buffer merge" */
56472b676d7Smrg#define  VI_Misc2_All_Line_Merge		0x20  /* > 315 only */
56572b676d7Smrg#define  VI_Misc2_Auto_Flip_Enable		0x40
56672b676d7Smrg#define  VI_Misc2_Video_Reg_Write_Enable	0x80  /* 315 series only? */
56772b676d7Smrg
56872b676d7Smrg/* Bits for Index_VI_Control_Misc3 */
56972b676d7Smrg#define  VI_Misc3_Submit_Video_1		0x01  /* AKA "address ready" */
57072b676d7Smrg#define  VI_Misc3_Submit_Video_2		0x02  /* AKA "address ready" */
57172b676d7Smrg#define  VI_Misc3_Submit_SubPict		0x04  /* AKA "address ready" */
57272b676d7Smrg
57372b676d7Smrg/* Values for Index_VI_Key_Overlay_OP (0x2F) */
57472b676d7Smrg#define  VI_ROP_Never				0x00
57572b676d7Smrg#define  VI_ROP_DestKey				0x03
57672b676d7Smrg#define  VI_ROP_ChromaKey			0x05
57772b676d7Smrg#define  VI_ROP_NotChromaKey			0x0A
57872b676d7Smrg#define  VI_ROP_Always				0x0F
57972b676d7Smrg
58072b676d7Smrg
58172b676d7Smrg/* Video registers (559x, 6326 and 530/620) --------------- */
58272b676d7Smrg#define  Index_VI6326_Passwd                        0x80
58372b676d7Smrg
58472b676d7Smrg/* Video overlay horizontal start/end, unit=screen pixels */
58572b676d7Smrg#define  Index_VI6326_Win_Hor_Disp_Start_Low        0x81
58672b676d7Smrg#define  Index_VI6326_Win_Hor_Disp_End_Low          0x82
58772b676d7Smrg#define  Index_VI6326_Win_Hor_Over                  0x83 /* Overflow */
58872b676d7Smrg
58972b676d7Smrg/* Video overlay vertical start/end, unit=screen pixels */
59072b676d7Smrg#define  Index_VI6326_Win_Ver_Disp_Start_Low        0x84
59172b676d7Smrg#define  Index_VI6326_Win_Ver_Disp_End_Low          0x85
59272b676d7Smrg#define  Index_VI6326_Win_Ver_Over                  0x86 /* Overflow */
59372b676d7Smrg
59472b676d7Smrg/* Y Plane (4:2:0) or YUV (4:2:2) buffer start address, unit=dword */
59572b676d7Smrg#define  Index_VI6326_Disp_Y_Buf_Start_Low          0x8A
59672b676d7Smrg#define  Index_VI6326_Disp_Y_Buf_Start_Middle       0x8B
59772b676d7Smrg#define  Index_VI6326_Disp_Capt_Y_Buf_Start_High    0x89 /* 6326: 7:4 display, 3:0 capture */
59872b676d7Smrg							 /* 530/620: 7:3 display. 2:0 reserved */
59972b676d7Smrg/* End address of Y plane (in 16k unit) - 6326 ONLY */
60072b676d7Smrg#define  Index_VI6326_Disp_Y_End                    0x8D
60172b676d7Smrg
60272b676d7Smrg/* U Plane (4:2:0) buffer start address, unit=dword */
60372b676d7Smrg#define  Index_VI6326_U_Buf_Start_Low               0xB7
60472b676d7Smrg#define  Index_VI6326_U_Buf_Start_Middle            0xB8
60572b676d7Smrg
60672b676d7Smrg/* V Plane (4:2:0) buffer start address, unit=dword */
60772b676d7Smrg#define  Index_VI6326_V_Buf_Start_Low               0xBA
60872b676d7Smrg#define  Index_VI6326_V_Buf_Start_Middle            0xBB
60972b676d7Smrg
61072b676d7Smrg/* U/V plane start address overflow bits 19:16 */
61172b676d7Smrg#define  Index_VI6326_UV_Buf_Start_High             0xB9
61272b676d7Smrg
61372b676d7Smrg/* Pitch for Y, UV Planes, unit=dword(6326 & 530/620) */
61472b676d7Smrg#define  Index_VI6326_Disp_Y_Buf_Pitch_Low          0x8C  /* 7:0 */
61572b676d7Smrg#define  Index_VI6326_Disp_Y_Buf_Pitch_High         0x8E  /* 11:8 (3:0 here) */
61672b676d7Smrg
61772b676d7Smrg#define  Index_VI6326_Disp_UV_Buf_Pitch_Low         0xBC  /* 7:0 */
61872b676d7Smrg#define  Index_VI6326_Disp_UV_Buf_Pitch_High        0xBD  /* 11:8 (3:0 here) */
61972b676d7Smrg
62072b676d7Smrg/* Scaling control registers */
62172b676d7Smrg#define  Index_VI6326_Hor_Scale         	    0x92
62272b676d7Smrg#define  Index_VI6326_Hor_Scale_Integer		    0x94
62372b676d7Smrg#define  Index_VI6326_Ver_Scale	            	    0x93
62472b676d7Smrg
62572b676d7Smrg/* Playback line buffer control */
62672b676d7Smrg#define  Index_VI6326_Play_Threshold_Low            0x9E
62772b676d7Smrg#define  Index_VI6326_Play_Threshold_High           0x9F
62872b676d7Smrg#define  Index_VI6326_Line_Buffer_Size              0xA0 /* 530 & 6326: quad-word */
62972b676d7Smrg
63072b676d7Smrg/* Destination color key */
63172b676d7Smrg#define  Index_VI6326_Overlay_ColorKey_Red_Min      0x97
63272b676d7Smrg#define  Index_VI6326_Overlay_ColorKey_Green_Min    0x96
63372b676d7Smrg#define  Index_VI6326_Overlay_ColorKey_Blue_Min     0x95
63472b676d7Smrg#define  Index_VI6326_Overlay_ColorKey_Red_Max      0xA3
63572b676d7Smrg#define  Index_VI6326_Overlay_ColorKey_Green_Max    0xA2
63672b676d7Smrg#define  Index_VI6326_Overlay_ColorKey_Blue_Max     0xA1
63772b676d7Smrg
63872b676d7Smrg/* Source color key */
63972b676d7Smrg#define  Index_VI6326_Overlay_ChromaKey_Red_Y_Min   0x9C
64072b676d7Smrg#define  Index_VI6326_Overlay_ChromaKey_Green_U_Min 0x9B
64172b676d7Smrg#define  Index_VI6326_Overlay_ChromaKey_Blue_V_Min  0x9A
64272b676d7Smrg#define  Index_VI6326_Overlay_ChromaKey_Red_Y_Max   0xA6
64372b676d7Smrg#define  Index_VI6326_Overlay_ChromaKey_Green_U_Max 0xA5
64472b676d7Smrg#define  Index_VI6326_Overlay_ChromaKey_Blue_V_Max  0xA4
64572b676d7Smrg
64672b676d7Smrg/* Contrast enhancement and brightness control */
64772b676d7Smrg#define  Index_VI6326_Contrast_Factor               0xB3
64872b676d7Smrg#define  Index_VI6326_Brightness                    0xB4
64972b676d7Smrg#define  Index_VI6326_Contrast_Enh_Ctrl             0xB5
65072b676d7Smrg
65172b676d7Smrg/* Alpha */
65272b676d7Smrg#define  Index_VI6326_AlphaGraph                    0xA7
65372b676d7Smrg#define  Index_VI6326_AlphaVideo                    0xA8
65472b676d7Smrg
65572b676d7Smrg#define  Index_VI6326_Key_Overlay_OP                0xA9
65672b676d7Smrg
65772b676d7Smrg#define  Index_VI6326_Control_Misc0                 0x98
65872b676d7Smrg#define  Index_VI6326_Control_Misc1                 0x99  /* (Datasheet: 6326 ONLY - not correct?) */
65972b676d7Smrg#define  Index_VI6326_Control_Misc3                 0x9D
66072b676d7Smrg#define  Index_VI6326_Control_Misc4                 0xB6
66172b676d7Smrg#define  Index_VI6326_VideoFormatSelect             Index_VI6326_Ver_Scale
66272b676d7Smrg#define  Index_VI6326_Control_Misc5                 0xBE  /* (Datasheet: 530/620 ONLY - not correct) */
66372b676d7Smrg#define  Index_VI6326_Control_Misc6                 0xB2  /* 5597 and 6326 only! */
66472b676d7Smrg
66572b676d7Smrg/* What is this?  not a register, obviously */
66672b676d7Smrg#define  Index_VI6326_FIFO_Max			    0x3F
66772b676d7Smrg
66872b676d7Smrg/* Bits (and helpers) for Index_VI6326_Control_Misc0 */
66972b676d7Smrg#define  VI6326_Misc0_EnableCapture		0x01  /* 1 = on, 0 = off (6326 only) */
67072b676d7Smrg#define  VI6326_Misc0_EnableOverlay		0x02  /* 1 = on, 0 = off */
67172b676d7Smrg#define  VI6326_Misc0_VideoOnly			0x10  /* 1 = video only, 0 = gfx + video */
67272b676d7Smrg#define  VI6326_Misc0_CaptureInterlace		0x20  /* 1 = capture data is interlace, 0 = not (6326 only) */
67372b676d7Smrg#define  VI6326_Misc0_VideoFormat		0x40  /* 1 = YUV, 0 = RGB */
67472b676d7Smrg#define  VI6326_Misc0_FieldPolarity		0x80  /* 1 = *Odd / Even, 0 = Odd / *Even (6326 only) */
67572b676d7Smrg
67672b676d7Smrg/* Bits for Index_VI6326_Control_Misc1 (ALL 6326 ONLY) */
67772b676d7Smrg#define  VI6326_Misc1_EnableYUVCapture		0x01  /* 0 = RGB, 1 = YUV */
67872b676d7Smrg#define  VI6326_Misc1_EnableCaptureDithering    0x02  /* 0 = disable, 1 = enable */
67972b676d7Smrg#define  VI6326_Misc1_CaptureFormat555		0x04  /* 1 = 555, 0 = 565 */
68072b676d7Smrg#define  VI6326_Misc1_FilterModeMask		0x38
68172b676d7Smrg#define  VI6326_Misc1_FilterMode0		0x00  /* 1 */
68272b676d7Smrg#define  VI6326_Misc1_FilterMode1		0x08  /* 1/8(1+3z^-1+3z^-2+z^-3)*/
68372b676d7Smrg#define  VI6326_Misc1_FilterMode2		0x10  /* 1/4(1+2z^-1+z^-2) */
68472b676d7Smrg#define  VI6326_Misc1_FilterMode3		0x18  /* 1/2(1+z^-1) */
68572b676d7Smrg#define  VI6326_Misc1_FilterMode4		0x20  /* 1/8(1+2z^-1+2z^-2+2z^-3+z^-4) */
68672b676d7Smrg#define  VI6326_Misc1_EnableVBSyncIRQ		0x40  /* 1 = Enable IRQ on vertical blank */
68772b676d7Smrg#define  VI6326_Misc1_ClearVBSyncIRQ		0x80  /* Clear pending irq */
68872b676d7Smrg
68972b676d7Smrg/* Bits for Index_VI6326_Control_Misc3 */
69072b676d7Smrg#define  VI6326_Misc3_UVCaptureFormat		0x01  /* 1 = 2's complement, 0 = CCIR 601 (6326 only) */
69172b676d7Smrg#define  VI6326_Misc3_UVOverlayFormat		0x02  /* 1 = 2's complement, 0 = CCIR 601 */
69272b676d7Smrg#define  VI6326_Misc3_ChromaKeyFormat		0x04  /* 1 = YUV, 0 = RGB */
69372b676d7Smrg#define  VI6326_Misc3_VMIAccess			0x08  /* 1 = enable, 0 = disable (6326 only) */
69472b676d7Smrg#define  VI6326_Misc3_VMIEnable			0x10  /* 1 = enable, 0 = disable (6326 only) */
69572b676d7Smrg#define  VI6326_Misc3_VMIIRQ			0x20  /* 1 = enable, 0 = disable (6326 only) */
69672b676d7Smrg#define  VI6326_Misc3_BT819A			0x40  /* 1 = enable, 0 = disable (6326 only) */
69772b676d7Smrg#define  VI6326_Misc3_SystemMemFB		0x80  /* 1 = enable, 0 = disable (6326 only) */
69872b676d7Smrg
69972b676d7Smrg/* Bits for Index_VI6326_Control_Misc4 */
70072b676d7Smrg#define  VI6326_Misc4_CPUVideoFormatMask	0x03
70172b676d7Smrg#define  VI6326_Misc4_CPUVideoFormatRGB555      0x00
70272b676d7Smrg#define  VI6326_Misc4_CPUVideoFormatYUV422      0x01
70372b676d7Smrg#define  VI6326_Misc4_CPUVideoFormatRGB565      0x02
70472b676d7Smrg#define  VI6326_Misc4_EnableYUV420		0x04  /* 1 = enable, 0 = disable */
70572b676d7Smrg/* #define WHATISTHIS                           0x40  */
70672b676d7Smrg
70772b676d7Smrg/* Bits for Index_VI6326_Control_Misc5 (all 530/620 only) */
70872b676d7Smrg#define  VI6326_Misc5_LineBufferMerge           0x10  /* 0 = disable, 1=enable */
70972b676d7Smrg#define  VI6326_Misc5_VPlaneBit20               0x04
71072b676d7Smrg#define  VI6326_Misc5_UPlaneBit20               0x02
71172b676d7Smrg
71272b676d7Smrg/* Bits for Index_VI6326_Control_Misc6  (5597 and 6326 only) */
71372b676d7Smrg#define  VI6326_Misc6_Decimation                0x80  /* 0=disable 1=enable video decimation */
71472b676d7Smrg
71572b676d7Smrg/* Video format selection */
71672b676d7Smrg#define  VI_6326_VideoUYVY422			0x00
71772b676d7Smrg#define  VI_6326_VideoVYUY422                   0x40
71872b676d7Smrg#define  VI_6326_VideoYUYV422                   0x80
71972b676d7Smrg#define  VI_6326_VideoYVYU422                   0xC0
72072b676d7Smrg#define  VI_6326_VideoRGB555                    0x00
72172b676d7Smrg#define  VI_6326_VideoRGB565                    0x40
72272b676d7Smrg
72372b676d7Smrg/* Values for Index_VI6326_Key_Overlay_OP */
72472b676d7Smrg#define  VI6326_ROP_Never			0x00
72572b676d7Smrg#define  VI6326_ROP_DestKey			0x03
72672b676d7Smrg#define  VI6326_ROP_Always			0x0F
72772b676d7Smrg
72872b676d7Smrg/* --- end of 6326 video registers ---------------------------------- */
72972b676d7Smrg
73072b676d7Smrg/* TV register base (6326 only) */
73172b676d7Smrg#define  Index_TV6326_TVOutIndex		    0xE0
73272b676d7Smrg#define  Index_TV6326_TVOutData		    	    0xE1
73372b676d7Smrg
73472b676d7Smrg/* mmio registers for video */
73572b676d7Smrg#define REG_PRIM_CRT_COUNTER    0x8514
73672b676d7Smrg
73772b676d7Smrg/* MPEG MMIO registers (630 and later) ----------------------------------------- */
73872b676d7Smrg
73972b676d7Smrg/* Not public (yet?) */
74072b676d7Smrg
74172b676d7Smrg
74272b676d7Smrg#endif  /* SIS_REGS_H_ */
74372b676d7Smrg
74472b676d7Smrg
745