1 /*
2  * Driver for the VINO (Video In No Out) system found in SGI Indys.
3  *
4  * This file is subject to the terms and conditions of the GNU General Public
5  * License version 2 as published by the Free Software Foundation.
6  *
7  * Copyright (C) 1999 Ulf Karlsson <ulfc@bun.falkenberg.se>
8  * Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
9  */
10 
11 #ifndef _VINO_H_
12 #define _VINO_H_
13 
14 #define VINO_BASE	0x00080000	/* Vino is in the EISA address space,
15 					 * but it is not an EISA bus card */
16 #define VINO_PAGE_SIZE	4096
17 
18 struct sgi_vino_channel {
19 	u32 _pad_alpha;
20 	volatile u32 alpha;
21 
22 #define VINO_CLIP_X(x)		((x) & 0x3ff)		/* bits 0:9 */
23 #define VINO_CLIP_ODD(x)	(((x) & 0x1ff) << 10)	/* bits 10:18 */
24 #define VINO_CLIP_EVEN(x)	(((x) & 0x1ff) << 19)	/* bits 19:27 */
25 	u32 _pad_clip_start;
26 	volatile u32 clip_start;
27 	u32 _pad_clip_end;
28 	volatile u32 clip_end;
29 
30 #define VINO_FRAMERT_FULL	0xfff
31 #define VINO_FRAMERT_PAL	(1<<0)			/* 0=NTSC 1=PAL */
32 #define VINO_FRAMERT_RT(x)	(((x) & 0xfff) << 1)	/* bits 1:12 */
33 	u32 _pad_frame_rate;
34 	volatile u32 frame_rate;
35 
36 	u32 _pad_field_counter;
37 	volatile u32 field_counter;
38 	u32 _pad_line_size;
39 	volatile u32 line_size;
40 	u32 _pad_line_count;
41 	volatile u32 line_count;
42 	u32 _pad_page_index;
43 	volatile u32 page_index;
44 	u32 _pad_next_4_desc;
45 	volatile u32 next_4_desc;
46 	u32 _pad_start_desc_tbl;
47 	volatile u32 start_desc_tbl;
48 
49 #define VINO_DESC_JUMP		(1<<30)
50 #define VINO_DESC_STOP		(1<<31)
51 #define VINO_DESC_VALID		(1<<32)
52 	u32 _pad_desc_0;
53 	volatile u32 desc_0;
54 	u32 _pad_desc_1;
55 	volatile u32 desc_1;
56 	u32 _pad_desc_2;
57 	volatile u32 desc_2;
58 	u32 _pad_Bdesc_3;
59 	volatile u32 desc_3;
60 
61 	u32 _pad_fifo_thres;
62 	volatile u32 fifo_thres;
63 	u32 _pad_fifo_read;
64 	volatile u32 fifo_read;
65 	u32 _pad_fifo_write;
66 	volatile u32 fifo_write;
67 };
68 
69 struct sgi_vino {
70 #define VINO_CHIP_ID		0xb
71 #define VINO_REV_NUM(x)		((x) & 0x0f)
72 #define VINO_ID_VALUE(x)	(((x) & 0xf0) >> 4)
73 	u32 _pad_rev_id;
74 	volatile u32 rev_id;
75 
76 #define VINO_CTRL_LITTLE_ENDIAN		(1<<0)
77 #define VINO_CTRL_A_EOF_INT		(1<<1)	/* Field transferred int */
78 #define VINO_CTRL_A_FIFO_INT		(1<<2)	/* FIFO overflow int */
79 #define VINO_CTRL_A_EOD_INT		(1<<3)	/* End of desc table int */
80 #define VINO_CTRL_A_INT			(VINO_CTRL_A_EOF_INT | \
81 					 VINO_CTRL_A_FIFO_INT | \
82 					 VINO_CTRL_A_EOD_INT)
83 #define VINO_CTRL_B_EOF_INT		(1<<4)	/* Field transferred int */
84 #define VINO_CTRL_B_FIFO_INT		(1<<5)	/* FIFO overflow int */
85 #define VINO_CTRL_B_EOD_INT		(1<<6)	/* End of desc table int */
86 #define VINO_CTRL_B_INT			(VINO_CTRL_B_EOF_INT | \
87 					 VINO_CTRL_B_FIFO_INT | \
88 					 VINO_CTRL_B_EOD_INT)
89 #define VINO_CTRL_A_DMA_ENBL		(1<<7)
90 #define VINO_CTRL_A_INTERLEAVE_ENBL	(1<<8)
91 #define VINO_CTRL_A_SYNC_ENBL		(1<<9)
92 #define VINO_CTRL_A_SELECT		(1<<10)	/* 1=D1 0=Philips */
93 #define VINO_CTRL_A_RGB			(1<<11)	/* 1=RGB 0=YUV */
94 #define VINO_CTRL_A_LUMA_ONLY		(1<<12)
95 #define VINO_CTRL_A_DEC_ENBL		(1<<13)	/* Decimation */
96 #define VINO_CTRL_A_DEC_SCALE_MASK	0x1c000	/* bits 14:17 */
97 #define VINO_CTRL_A_DEC_SCALE_SHIFT	(14)
98 #define VINO_CTRL_A_DEC_HOR_ONLY	(1<<17)	/* Horizontal only */
99 #define VINO_CTRL_A_DITHER		(1<<18)	/* 24 -> 8 bit dither */
100 #define VINO_CTRL_B_DMA_ENBL		(1<<19)
101 #define VINO_CTRL_B_INTERLEAVE_ENBL	(1<<20)
102 #define VINO_CTRL_B_SYNC_ENBL		(1<<21)
103 #define VINO_CTRL_B_SELECT		(1<<22)	/* 1=D1 0=Philips */
104 #define VINO_CTRL_B_RGB			(1<<23)	/* 1=RGB 0=YUV */
105 #define VINO_CTRL_B_LUMA_ONLY		(1<<24)
106 #define VINO_CTRL_B_DEC_ENBL		(1<<25)	/* Decimation */
107 #define VINO_CTRL_B_DEC_SCALE_MASK	0x1c000000	/* bits 26:28 */
108 #define VINO_CTRL_B_DEC_SCALE_SHIFT	(26)
109 #define VINO_CTRL_B_DEC_HOR_ONLY	(1<<29)	/* Decimation horizontal only */
110 #define VINO_CTRL_B_DITHER		(1<<30)	/* ChanB 24 -> 8 bit dither */
111 	u32 _pad_control;
112 	volatile u32 control;
113 
114 #define VINO_INTSTAT_A_EOF		(1<<0)	/* Field transferred int */
115 #define VINO_INTSTAT_A_FIFO		(1<<1)	/* FIFO overflow int */
116 #define VINO_INTSTAT_A_EOD		(1<<2)	/* End of desc table int */
117 #define VINO_INTSTAT_A			(VINO_INTSTAT_A_EOF | \
118 					 VINO_INTSTAT_A_FIFO | \
119 					 VINO_INTSTAT_A_EOD)
120 #define VINO_INTSTAT_B_EOF		(1<<3)	/* Field transferred int */
121 #define VINO_INTSTAT_B_FIFO		(1<<4)	/* FIFO overflow int */
122 #define VINO_INTSTAT_B_EOD		(1<<5)	/* End of desc table int */
123 #define VINO_INTSTAT_B			(VINO_INTSTAT_B_EOF | \
124 					 VINO_INTSTAT_B_FIFO | \
125 					 VINO_INTSTAT_B_EOD)
126 	u32 _pad_intr_status;
127 	volatile u32 intr_status;
128 
129 	u32 _pad_i2c_control;
130 	volatile u32 i2c_control;
131 	u32 _pad_i2c_data;
132 	volatile u32 i2c_data;
133 
134 	struct sgi_vino_channel a;
135 	struct sgi_vino_channel b;
136 };
137 
138 #endif
139