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