153e90a53Smrg/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/imstt/imstt_reg.h,v 1.5 2002/08/06 19:57:30 herrb Exp $ */
253e90a53Smrg
353e90a53Smrg#ifndef _IMSTT_REG_H
453e90a53Smrg#define _IMSTT_REG_H
553e90a53Smrg
653e90a53Smrg
753e90a53Smrg
853e90a53Smrg#if defined(__powerpc__)
953e90a53Smrg
1053e90a53Smrgstatic __inline__ void regw(unsigned long base_addr, unsigned long regindex, unsigned long regdata)
1153e90a53Smrg{
1253e90a53Smrg	__asm__ __volatile__ ("stwbrx %1,%2,%3; eieio"
1353e90a53Smrg		      : "=m" (*(volatile unsigned *)(base_addr+regindex))
1453e90a53Smrg		      : "r" (regdata), "b" (regindex), "r" (base_addr));
1553e90a53Smrg}
1653e90a53Smrg
1753e90a53Smrg
1853e90a53Smrgstatic __inline__ unsigned long regr(unsigned long base_addr, unsigned long regindex)
1953e90a53Smrg{
2053e90a53Smrg	register unsigned long val;
2153e90a53Smrg
2253e90a53Smrg	__asm__ __volatile__ ("lwbrx %0,%1,%2; eieio"
2353e90a53Smrg		      : "=r" (val)
2453e90a53Smrg		      : "b" (regindex), "r" (base_addr),
2553e90a53Smrg		      "m" (*(volatile unsigned *)(base_addr+regindex)));
2653e90a53Smrg
2753e90a53Smrg	return (val);
2853e90a53Smrg}
2953e90a53Smrg
3053e90a53Smrg
3153e90a53Smrg#define INREG(addr)		regr(((unsigned long)(iptr->MMIOBase)), (addr))
3253e90a53Smrg#define OUTREG(addr, val)	regw(((unsigned long)(iptr->MMIOBase)), (addr), (val))
3353e90a53Smrg
3453e90a53Smrg#else
3553e90a53Smrg
3653e90a53Smrg#define INREG(addr)		MMIO_IN32(iptr->MMIOBase, addr)
3753e90a53Smrg#define OUTREG(addr, val)	MMIO_OUT32(iptr->MMIOBase, addr, val)
3853e90a53Smrg
3953e90a53Smrg#endif
4053e90a53Smrg
4153e90a53Smrg#define OUTREGPI(addr, val)	iptr->CMAPBase[IBM624_PIDXLO] = addr;	eieio(); \
4253e90a53Smrg				iptr->CMAPBase[IBM624_PIDXDATA] = val;	eieio()
4353e90a53Smrg#define OUTREGPT(addr, val)	iptr->CMAPBase[TVP_ADDRW] = addr;	eieio(); \
4453e90a53Smrg				iptr->CMAPBase[TVP_IDATA] = val;	eieio()
4553e90a53Smrg
4653e90a53Smrg#define IMSTTMMIO_VARS()	\
4753e90a53Smrg	unsigned long *IMSTTMMIO = IMSTTPTR(pScrn)->MMIOBase
4853e90a53Smrg
4953e90a53Smrg
5053e90a53Smrg/* TwinTurbo (Cosmo) registers */
5153e90a53Smrg
5253e90a53Smrg#define	IMSTT_S1SA	0x00
5353e90a53Smrg#define IMSTT_S2SA	0x04
5453e90a53Smrg#define IMSTT_SP	0x08
5553e90a53Smrg#define IMSTT_DSA	0x0c
5653e90a53Smrg#define IMSTT_CNT	0x10
5753e90a53Smrg#define IMSTT_DP_OCTL	0x14
5853e90a53Smrg#define	IMSTT_CLR	0x18
5953e90a53Smrg#define	IMSTT_BI	0x20
6053e90a53Smrg#define	IMSTT_MBC	0x24
6153e90a53Smrg#define	IMSTT_BLTCTL	0x28
6253e90a53Smrg
6353e90a53Smrg/* scan timing generator registers */
6453e90a53Smrg
6553e90a53Smrg#define	IMSTT_HES	0x30
6653e90a53Smrg#define	IMSTT_HEB	0x34
6753e90a53Smrg#define	IMSTT_HSB	0x38
6853e90a53Smrg#define	IMSTT_HT	0x3c
6953e90a53Smrg#define	IMSTT_VES	0x40
7053e90a53Smrg#define	IMSTT_VEB	0x44
7153e90a53Smrg#define	IMSTT_VSB	0x48
7253e90a53Smrg#define	IMSTT_VT	0x4c
7353e90a53Smrg#define	IMSTT_HCIV	0x50
7453e90a53Smrg#define	IMSTT_VCIV	0x54
7553e90a53Smrg#define	IMSTT_TCDR	0x58
7653e90a53Smrg#define	IMSTT_VIL	0x5c
7753e90a53Smrg#define	IMSTT_STGCTL	0x60
7853e90a53Smrg
7953e90a53Smrg/* screen refresh generator registers */
8053e90a53Smrg
8153e90a53Smrg#define	IMSTT_SSR	0x64
8253e90a53Smrg#define	IMSTT_HRIR	0x68
8353e90a53Smrg#define	IMSTT_SPR	0x6c
8453e90a53Smrg#define	IMSTT_CMR	0x70
8553e90a53Smrg#define	IMSTT_SRGCTL	0x74
8653e90a53Smrg
8753e90a53Smrg/* RAM refresh generator registers */
8853e90a53Smrg
8953e90a53Smrg#define	IMSTT_RRCIV	0x78
9053e90a53Smrg#define	IMSTT_RRSC	0x7c
9153e90a53Smrg#define	IMSTT_RRCR	0x88
9253e90a53Smrg
9353e90a53Smrg/* system registers */
9453e90a53Smrg
9553e90a53Smrg#define	IMSTT_GIOE	0x80
9653e90a53Smrg#define	IMSTT_GIO	0x84
9753e90a53Smrg#define	IMSTT_SCR	0x8c
9853e90a53Smrg#define	IMSTT_SSTATUS	0x90
9953e90a53Smrg#define	IMSTT_PRC	0x94
10053e90a53Smrg
10153e90a53Smrg
10253e90a53Smrg/* IBM 624 RAMDAC direct registers */
10353e90a53Smrg
10453e90a53Smrg#define	IBM624_PADDRW	0x00
10553e90a53Smrg#define	IBM624_PDATA	0x04
10653e90a53Smrg#define	IBM624_PPMASK	0x08
10753e90a53Smrg#define	IBM624_PADDRR	0x0c
10853e90a53Smrg#define	IBM624_PIDXLO	0x10
10953e90a53Smrg#define	IBM624_PIDXHI	0x14
11053e90a53Smrg#define	IBM624_PIDXDATA	0x18
11153e90a53Smrg#define	IBM624_PIDXCTL	0x1c
11253e90a53Smrg
11353e90a53Smrg/* IBM 624 RAMDAC indirect registers */
11453e90a53Smrg
11553e90a53Smrg#define IBM624_CLKCTL	0x02	/* Misc Clock Control */
11653e90a53Smrg#define IBM624_SYNCCTL	0x03	/* Sync Control */
11753e90a53Smrg#define IBM624_HSYNCPOS	0x04	/* Horiz Sync Position */
11853e90a53Smrg#define IBM624_PWRMNGMT	0x05	/* Power Management */
11953e90a53Smrg#define IBM624_DACOP	0x06	/* DAC Operation */
12053e90a53Smrg#define IBM624_PALETCTL	0x07	/* Palette Control */
12153e90a53Smrg#define IBM624_SYSCLKCTL 0x08	/* System Clock Control */
12253e90a53Smrg#define IBM624_PIXFMT	0x0a	/* Pixel Format [bpp >> 3 + 2] */
12353e90a53Smrg#define IBM624_BPP8	0x0b	/* 8bpp */
12453e90a53Smrg#define IBM624_BPP16	0x0c	/* 16bpp */
12553e90a53Smrg#define IBM624_BPP24	0x0d	/* 24bpp */
12653e90a53Smrg#define IBM624_BPP32	0x0e	/* 32bpp */
12753e90a53Smrg#define IBM624_PIXCTL1	0x10	/* Pixel PLL Control 1 */
12853e90a53Smrg#define IBM624_PIXCTL2	0x11	/* Pixel PLL Control 2 */
12953e90a53Smrg#define IBM624_SYSCLKN	0x15	/* System Clock N */
13053e90a53Smrg#define IBM624_SYSCLKM	0x16	/* System Clock M */
13153e90a53Smrg#define IBM624_SYSCLKP	0x17	/* System Clock P */
13253e90a53Smrg#define IBM624_SYSCLKC	0x18	/* System Clock C */
13353e90a53Smrg#define IBM624_PIXM0	0x20	/* Pixel M 0 */
13453e90a53Smrg#define IBM624_PIXN0	0x21	/* Pixel N 0 */
13553e90a53Smrg#define IBM624_PIXP0	0x22	/* Pixel P 0 */
13653e90a53Smrg#define IBM624_PIXC0	0x23	/* Pixel C 0 */
13753e90a53Smrg#define IBM624_CURSCTL	0x30	/* Cursor Control */
13853e90a53Smrg#define IBM624_CURSXLO	0x31	/* Cursor X position, low 8 bits */
13953e90a53Smrg#define IBM624_CURSXHI	0x32	/* Cursor X position, high 8 bits */
14053e90a53Smrg#define IBM624_CURSYLO	0x33	/* Cursor Y position, low 8 bits */
14153e90a53Smrg#define IBM624_CURSYHI	0x34	/* Cursor Y postition, high 8 bits */
14253e90a53Smrg#define IBM624_CURSHOTX	0x35	/* Cursor Hot Spot X */
14353e90a53Smrg#define IBM624_CURSHOTY	0x36	/* Cursor Hot Spot Y */
14453e90a53Smrg#define IBM624_CURSACCTL 0x37	/* Advanced Cursor Control Enable */
14553e90a53Smrg#define IBM624_CURSACATTR 0x38	/* Advanced Cursor Attribute */
14653e90a53Smrg#define IBM624_CURS1R	0x40	/* Cursor 1 red */
14753e90a53Smrg#define IBM624_CURS1G	0x41	/* Cursor 1 green */
14853e90a53Smrg#define IBM624_CURS1B	0x42	/* Cursor 1 blue */
14953e90a53Smrg#define IBM624_CURS2R	0x43	/* Cursor 2 red */
15053e90a53Smrg#define IBM624_CURS2G	0x44	/* Cursor 2 green */
15153e90a53Smrg#define IBM624_CURS2B	0x45	/* Cursor 2 blue */
15253e90a53Smrg#define IBM624_CURS3R	0x46	/* Cursor 3 red */
15353e90a53Smrg#define IBM624_CURS3G	0x47	/* Cursor 3 green */
15453e90a53Smrg#define IBM624_CURS3B	0x48	/* Cursor 3 blue */
15553e90a53Smrg#define IBM624_BORDR	0x60	/* Border color red */
15653e90a53Smrg#define IBM624_BORDG	0x61	/* Border color green */
15753e90a53Smrg#define IBM624_BORDB	0x62	/* Border color blue */
15853e90a53Smrg#define IBM624_MISCTL1	0x70	/* Misc control 1 */
15953e90a53Smrg#define IBM624_MISCTL2	0x71	/* Misc control 2 */
16053e90a53Smrg#define IBM624_MISCTL3	0x72	/* Misc control 3 */
16153e90a53Smrg#define IBM624_KEYCTL	0x78	/* Key Control/DB operation */
16253e90a53Smrg
16353e90a53Smrg/* TI TVP 3030 RAMDAC direct registers */
16453e90a53Smrg
16553e90a53Smrg#define	TVP_ADDRW	0x00
16653e90a53Smrg#define	TVP_PDATA	0x04
16753e90a53Smrg#define	TVP_PMASK	0x08
16853e90a53Smrg#define	TVP_PADRR	0x0c
16953e90a53Smrg#define	TVP_CADRW	0x10
17053e90a53Smrg#define	TVP_CDATA	0x14
17153e90a53Smrg#define	TVP_CADRR	0x1c
17253e90a53Smrg#define	TVP_DCCTL	0x24
17353e90a53Smrg#define	TVP_IDATA	0x28
17453e90a53Smrg#define	TVP_CRDAT	0x2c
17553e90a53Smrg#define	TVP_CXPOL	0x30
17653e90a53Smrg#define	TVP_CXPOH	0x34
17753e90a53Smrg#define	TVP_CYPOL	0x38
17853e90a53Smrg#define	TVP_CYPOH	0x3c
17953e90a53Smrg
18053e90a53Smrg/* TI TVP 3030 RAMDAC indirect registers */
18153e90a53Smrg
18253e90a53Smrg
18353e90a53Smrg#define	TVP_IRREV	0x01
18453e90a53Smrg#define	TVP_IRICC	0x06
18553e90a53Smrg#define	TVP_IRBRC	0x07
18653e90a53Smrg#define	TVP_IRLAC	0x0f
18753e90a53Smrg#define	TVP_IRTCC	0x18
18853e90a53Smrg#define	TVP_IRMXC	0x19
18953e90a53Smrg#define	TVP_IRCLS	0x1a
19053e90a53Smrg#define	TVP_IRPPG	0x1c
19153e90a53Smrg#define	TVP_IRGEC	0x1d
19253e90a53Smrg#define	TVP_IRMIC	0x1e
19353e90a53Smrg#define	TVP_IRPLA	0x2c
19453e90a53Smrg#define	TVP_IRPPD	0x2d
19553e90a53Smrg#define	TVP_IRMPD	0x2e
19653e90a53Smrg#define	TVP_IRLPD	0x2f
19753e90a53Smrg#define	TVP_IRCKL	0x30
19853e90a53Smrg#define	TVP_IRCKH	0x31
19953e90a53Smrg#define	TVP_IRCRL	0x32
20053e90a53Smrg#define	TVP_IRCRH	0x33
20153e90a53Smrg#define	TVP_IRCGL	0x34
20253e90a53Smrg#define	TVP_IRCGH	0x35
20353e90a53Smrg#define	TVP_IRCBL	0x36
20453e90a53Smrg#define	TVP_IRCBH	0x37
20553e90a53Smrg#define	TVP_IRCKC	0x38
20653e90a53Smrg#define	TVP_IRMLC	0x39
20753e90a53Smrg#define	TVP_IRSEN	0x3a
20853e90a53Smrg#define	TVP_IRTMD	0x3b
20953e90a53Smrg#define	TVP_IRRML	0x3c
21053e90a53Smrg#define	TVP_IRRMM	0x3d
21153e90a53Smrg#define	TVP_IRRMS	0x3e
21253e90a53Smrg#define	TVP_IRDID	0x3f
21353e90a53Smrg#define	TVP_IRRES	0xff
21453e90a53Smrg
21553e90a53Smrg#endif /* _IMSTT_REG_H */
216