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