1 | /* $SourceForge: bktr_reg.h,v 1.3 2003/03/11 23:11:27 thomasklausner Exp $ */ |
2 | |
3 | /* $NetBSD: bktr_reg.h,v 1.22 2012/10/27 17:18:36 chs Exp $ */ |
4 | /* |
5 | * $FreeBSD: src/sys/dev/bktr/bktr_reg.h,v 1.42 2000/10/31 13:09:56 roger Exp$ |
6 | * |
7 | * Copyright (c) 1999 Roger Hardiman |
8 | * Copyright (c) 1998 Amancio Hasty |
9 | * Copyright (c) 1995 Mark Tinguely and Jim Lowe |
10 | * All rights reserved. |
11 | * |
12 | * Redistribution and use in source and binary forms, with or without |
13 | * modification, are permitted provided that the following conditions |
14 | * are met: |
15 | * 1. Redistributions of source code must retain the above copyright |
16 | * notice, this list of conditions and the following disclaimer. |
17 | * 2. Redistributions in binary form must reproduce the above copyright |
18 | * notice, this list of conditions and the following disclaimer in the |
19 | * documentation and/or other materials provided with the distribution. |
20 | * 3. All advertising materials mentioning features or use of this software |
21 | * must display the following acknowledgement: |
22 | * This product includes software developed by Mark Tinguely and Jim Lowe |
23 | * 4. The name of the author may not be used to endorse or promote products |
24 | * derived from this software without specific prior written permission. |
25 | * |
26 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
27 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
28 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
29 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, |
30 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
31 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
32 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
33 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
34 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
35 | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
36 | * POSSIBILITY OF SUCH DAMAGE. |
37 | * |
38 | */ |
39 | |
40 | |
41 | #include <sys/bus.h> |
42 | #include <sys/device.h> /* device_t */ |
43 | #include <sys/select.h> /* struct selinfo */ |
44 | #include <sys/reboot.h> /* AB_* for bootverbose */ |
45 | |
46 | /* |
47 | * The kernel options for the driver now all begin with BKTR. |
48 | * Support the older kernel options on FreeBSD and OpenBSD. |
49 | * |
50 | */ |
51 | |
52 | |
53 | #ifndef PCI_LATENCY_TIMER |
54 | #define PCI_LATENCY_TIMER 0x0c /* pci timer register */ |
55 | #endif |
56 | |
57 | /* |
58 | * Definitions for the Brooktree 848/878 video capture to pci interface. |
59 | */ |
60 | |
61 | #define BROOKTREE_848 1 |
62 | #define BROOKTREE_848A 2 |
63 | #define BROOKTREE_849A 3 |
64 | #define BROOKTREE_878 4 |
65 | #define BROOKTREE_879 5 |
66 | |
67 | typedef volatile u_int bregister_t; |
68 | /* |
69 | * if other persuasion endian, then compiler will probably require that |
70 | * these next |
71 | * macros be reversed |
72 | */ |
73 | #define BTBYTE(what) bregister_t what:8; int :24 |
74 | #define BTWORD(what) bregister_t what:16; int: 16 |
75 | #define BTLONG(what) bregister_t what:32 |
76 | |
77 | struct bt848_registers { |
78 | BTBYTE (dstatus); /* 0, 1,2,3 */ |
79 | #define BT848_DSTATUS_PRES (1<<7) |
80 | #define BT848_DSTATUS_HLOC (1<<6) |
81 | #define BT848_DSTATUS_FIELD (1<<5) |
82 | #define BT848_DSTATUS_NUML (1<<4) |
83 | #define BT848_DSTATUS_CSEL (1<<3) |
84 | #define BT848_DSTATUS_PLOCK (1<<2) |
85 | #define BT848_DSTATUS_LOF (1<<1) |
86 | #define BT848_DSTATUS_COF (1<<0) |
87 | BTBYTE (iform); /* 4, 5,6,7 */ |
88 | #define BT848_IFORM_MUXSEL (0x3<<5) |
89 | # define BT848_IFORM_M_MUX1 (0x03<<5) |
90 | # define BT848_IFORM_M_MUX0 (0x02<<5) |
91 | # define BT848_IFORM_M_MUX2 (0x01<<5) |
92 | # define BT848_IFORM_M_MUX3 (0x0) |
93 | # define BT848_IFORM_M_RSVD (0x00<<5) |
94 | #define BT848_IFORM_XTSEL (0x3<<3) |
95 | # define BT848_IFORM_X_AUTO (0x03<<3) |
96 | # define BT848_IFORM_X_XT1 (0x02<<3) |
97 | # define BT848_IFORM_X_XT0 (0x01<<3) |
98 | # define BT848_IFORM_X_RSVD (0x00<<3) |
99 | BTBYTE (tdec); /* 8, 9,a,b */ |
100 | BTBYTE (e_crop); /* c, d,e,f */ |
101 | BTBYTE (e_vdelay_lo); /* 10, 11,12,13 */ |
102 | BTBYTE (e_vactive_lo); /* 14, 15,16,17 */ |
103 | BTBYTE (e_delay_lo); /* 18, 19,1a,1b */ |
104 | BTBYTE (e_hactive_lo); /* 1c, 1d,1e,1f */ |
105 | BTBYTE (e_hscale_hi); /* 20, 21,22,23 */ |
106 | BTBYTE (e_hscale_lo); /* 24, 25,26,27 */ |
107 | BTBYTE (bright); /* 28, 29,2a,2b */ |
108 | BTBYTE (e_control); /* 2c, 2d,2e,2f */ |
109 | #define BT848_E_CONTROL_LNOTCH (1<<7) |
110 | #define BT848_E_CONTROL_COMP (1<<6) |
111 | #define BT848_E_CONTROL_LDEC (1<<5) |
112 | #define BT848_E_CONTROL_CBSENSE (1<<4) |
113 | #define BT848_E_CONTROL_RSVD (1<<3) |
114 | #define BT848_E_CONTROL_CON_MSB (1<<2) |
115 | #define BT848_E_CONTROL_SAT_U_MSB (1<<1) |
116 | #define BT848_E_CONTROL_SAT_V_MSB (1<<0) |
117 | BTBYTE (contrast_lo); /* 30, 31,32,33 */ |
118 | BTBYTE (sat_u_lo); /* 34, 35,36,37 */ |
119 | BTBYTE (sat_v_lo); /* 38, 39,3a,3b */ |
120 | BTBYTE (hue); /* 3c, 3d,3e,3f */ |
121 | BTBYTE (e_scloop); /* 40, 41,42,43 */ |
122 | #define BT848_E_SCLOOP_RSVD1 (1<<7) |
123 | #define BT848_E_SCLOOP_CAGC (1<<6) |
124 | #define BT848_E_SCLOOP_CKILL (1<<5) |
125 | #define BT848_E_SCLOOP_HFILT (0x3<<3) |
126 | # define BT848_E_SCLOOP_HFILT_ICON (0x3<<3) |
127 | # define BT848_E_SCLOOP_HFILT_QCIF (0x2<<3) |
128 | # define BT848_E_SCLOOP_HFILT_CIF (0x1<<3) |
129 | # define BT848_E_SCLOOP_HFILT_AUTO (0x0<<3) |
130 | #define BT848_E_SCLOOP_RSVD0 (0x7<<0) |
131 | int :32; /* 44, 45,46,47 */ |
132 | BTBYTE (oform); /* 48, 49,4a,4b */ |
133 | BTBYTE (e_vscale_hi); /* 4c, 4d,4e,4f */ |
134 | BTBYTE (e_vscale_lo); /* 50, 51,52,53 */ |
135 | BTBYTE (test); /* 54, 55,56,57 */ |
136 | int :32; /* 58, 59,5a,5b */ |
137 | int :32; /* 5c, 5d,5e,5f */ |
138 | BTLONG (adelay); /* 60, 61,62,63 */ |
139 | BTBYTE (bdelay); /* 64, 65,66,67 */ |
140 | BTBYTE (adc); /* 68, 69,6a,6b */ |
141 | #define BT848_ADC_RESERVED (0x80) /* required pattern */ |
142 | #define BT848_ADC_SYNC_T (1<<5) |
143 | #define BT848_ADC_AGC_EN (1<<4) |
144 | #define BT848_ADC_CLK_SLEEP (1<<3) |
145 | #define BT848_ADC_Y_SLEEP (1<<2) |
146 | #define BT848_ADC_C_SLEEP (1<<1) |
147 | #define BT848_ADC_CRUSH (1<<0) |
148 | BTBYTE (e_vtc); /* 6c, 6d,6e,6f */ |
149 | int :32; /* 70, 71,72,73 */ |
150 | int :32; /* 74, 75,76,77 */ |
151 | int :32; /* 78, 79,7a,7b */ |
152 | BTLONG (sreset); /* 7c, 7d,7e,7f */ |
153 | u_char filler1[0x84-0x80]; |
154 | BTBYTE (tgctrl); /* 84, 85,86,87 */ |
155 | #define BT848_TGCTRL_TGCKI (3<<3) |
156 | #define BT848_TGCTRL_TGCKI_XTAL (0<<3) |
157 | #define BT848_TGCTRL_TGCKI_PLL (1<<3) |
158 | #define BT848_TGCTRL_TGCKI_GPCLK (2<<3) |
159 | #define BT848_TGCTRL_TGCKI_GPCLK_I (3<<3) |
160 | u_char filler[0x8c-0x88]; |
161 | BTBYTE (o_crop); /* 8c, 8d,8e,8f */ |
162 | BTBYTE (o_vdelay_lo); /* 90, 91,92,93 */ |
163 | BTBYTE (o_vactive_lo); /* 94, 95,96,97 */ |
164 | BTBYTE (o_delay_lo); /* 98, 99,9a,9b */ |
165 | BTBYTE (o_hactive_lo); /* 9c, 9d,9e,9f */ |
166 | BTBYTE (o_hscale_hi); /* a0, a1,a2,a3 */ |
167 | BTBYTE (o_hscale_lo); /* a4, a5,a6,a7 */ |
168 | int :32; /* a8, a9,aa,ab */ |
169 | BTBYTE (o_control); /* ac, ad,ae,af */ |
170 | #define BT848_O_CONTROL_LNOTCH (1<<7) |
171 | #define BT848_O_CONTROL_COMP (1<<6) |
172 | #define BT848_O_CONTROL_LDEC (1<<5) |
173 | #define BT848_O_CONTROL_CBSENSE (1<<4) |
174 | #define BT848_O_CONTROL_RSVD (1<<3) |
175 | #define BT848_O_CONTROL_CON_MSB (1<<2) |
176 | #define BT848_O_CONTROL_SAT_U_MSB (1<<1) |
177 | #define BT848_O_CONTROL_SAT_V_MSB (1<<0) |
178 | u_char fillter4[16]; |
179 | BTBYTE (o_scloop); /* c0, c1,c2,c3 */ |
180 | #define BT848_O_SCLOOP_RSVD1 (1<<7) |
181 | #define BT848_O_SCLOOP_CAGC (1<<6) |
182 | #define BT848_O_SCLOOP_CKILL (1<<5) |
183 | #define BT848_O_SCLOOP_HFILT (0x3<<3) |
184 | #define BT848_O_SCLOOP_HFILT_ICON (0x3<<3) |
185 | #define BT848_O_SCLOOP_HFILT_QCIF (0x2<<3) |
186 | #define BT848_O_SCLOOP_HFILT_CIF (0x1<<3) |
187 | #define BT848_O_SCLOOP_HFILT_AUTO (0x0<<3) |
188 | #define BT848_O_SCLOOP_RSVD0 (0x7<<0) |
189 | int :32; /* c4, c5,c6,c7 */ |
190 | int :32; /* c8, c9,ca,cb */ |
191 | BTBYTE (o_vscale_hi); /* cc, cd,ce,cf */ |
192 | BTBYTE (o_vscale_lo); /* d0, d1,d2,d3 */ |
193 | BTBYTE (color_fmt); /* d4, d5,d6,d7 */ |
194 | bregister_t color_ctl_swap :4; /* d8 */ |
195 | #define BT848_COLOR_CTL_WSWAP_ODD (1<<3) |
196 | #define BT848_COLOR_CTL_WSWAP_EVEN (1<<2) |
197 | #define BT848_COLOR_CTL_BSWAP_ODD (1<<1) |
198 | #define BT848_COLOR_CTL_BSWAP_EVEN (1<<0) |
199 | bregister_t color_ctl_gamma :1; |
200 | bregister_t color_ctl_rgb_ded :1; |
201 | bregister_t color_ctl_color_bars :1; |
202 | bregister_t color_ctl_ext_frmrate :1; |
203 | #define BT848_COLOR_CTL_GAMMA (1<<4) |
204 | #define BT848_COLOR_CTL_RGB_DED (1<<5) |
205 | #define BT848_COLOR_CTL_COLOR_BARS (1<<6) |
206 | #define BT848_COLOR_CTL_EXT_FRMRATE (1<<7) |
207 | int :24; /* d9,da,db */ |
208 | BTBYTE (cap_ctl); /* dc, dd,de,df */ |
209 | #define BT848_CAP_CTL_DITH_FRAME (1<<4) |
210 | #define BT848_CAP_CTL_VBI_ODD (1<<3) |
211 | #define BT848_CAP_CTL_VBI_EVEN (1<<2) |
212 | #define BT848_CAP_CTL_ODD (1<<1) |
213 | #define BT848_CAP_CTL_EVEN (1<<0) |
214 | BTBYTE (vbi_pack_size); /* e0, e1,e2,e3 */ |
215 | BTBYTE (vbi_pack_del); /* e4, e5,e6,e7 */ |
216 | int :32; /* e8, e9,ea,eb */ |
217 | BTBYTE (o_vtc); /* ec, ed,ee,ef */ |
218 | BTBYTE (pll_f_lo); /* f0, f1,f2,f3 */ |
219 | BTBYTE (pll_f_hi); /* f4, f5,f6,f7 */ |
220 | BTBYTE (pll_f_xci); /* f8, f9,fa,fb */ |
221 | #define BT848_PLL_F_C (1<<6) |
222 | #define BT848_PLL_F_X (1<<7) |
223 | u_char filler2[0x100-0xfc]; |
224 | BTLONG (int_stat); /* 100, 101,102,103 */ |
225 | BTLONG (int_mask); /* 104, 105,106,107 */ |
226 | #define BT848_INT_RISCS (0xf<<28) |
227 | #define BT848_INT_RISC_EN (1<<27) |
228 | #define BT848_INT_RACK (1<<25) |
229 | #define BT848_INT_FIELD (1<<24) |
230 | #define BT848_INT_MYSTERYBIT (1<<23) |
231 | #define BT848_INT_SCERR (1<<19) |
232 | #define BT848_INT_OCERR (1<<18) |
233 | #define BT848_INT_PABORT (1<<17) |
234 | #define BT848_INT_RIPERR (1<<16) |
235 | #define BT848_INT_PPERR (1<<15) |
236 | #define BT848_INT_FDSR (1<<14) |
237 | #define BT848_INT_FTRGT (1<<13) |
238 | #define BT848_INT_FBUS (1<<12) |
239 | #define BT848_INT_RISCI (1<<11) |
240 | #define BT848_INT_GPINT (1<<9) |
241 | #define BT848_INT_I2CDONE (1<<8) |
242 | #define BT848_INT_RSV1 (1<<7) |
243 | #define BT848_INT_RSV0 (1<<6) |
244 | #define BT848_INT_VPRES (1<<5) |
245 | #define BT848_INT_HLOCK (1<<4) |
246 | #define BT848_INT_OFLOW (1<<3) |
247 | #define BT848_INT_HSYNC (1<<2) |
248 | #define BT848_INT_VSYNC (1<<1) |
249 | #define BT848_INT_FMTCHG (1<<0) |
250 | int :32; /* 108, 109,10a,10b */ |
251 | BTWORD (gpio_dma_ctl); /* 10c, 10d,10e,10f */ |
252 | #define BT848_DMA_CTL_PL23TP4 (0<<6) /* planar1 trigger 4 */ |
253 | #define BT848_DMA_CTL_PL23TP8 (1<<6) /* planar1 trigger 8 */ |
254 | #define BT848_DMA_CTL_PL23TP16 (2<<6) /* planar1 trigger 16 */ |
255 | #define BT848_DMA_CTL_PL23TP32 (3<<6) /* planar1 trigger 32 */ |
256 | #define BT848_DMA_CTL_PL1TP4 (0<<4) /* planar1 trigger 4 */ |
257 | #define BT848_DMA_CTL_PL1TP8 (1<<4) /* planar1 trigger 8 */ |
258 | #define BT848_DMA_CTL_PL1TP16 (2<<4) /* planar1 trigger 16 */ |
259 | #define BT848_DMA_CTL_PL1TP32 (3<<4) /* planar1 trigger 32 */ |
260 | #define BT848_DMA_CTL_PKTP4 (0<<2) /* packed trigger 4 */ |
261 | #define BT848_DMA_CTL_PKTP8 (1<<2) /* packed trigger 8 */ |
262 | #define BT848_DMA_CTL_PKTP16 (2<<2) /* packed trigger 16 */ |
263 | #define BT848_DMA_CTL_PKTP32 (3<<2) /* packed trigger 32 */ |
264 | #define BT848_DMA_CTL_RISC_EN (1<<1) |
265 | #define BT848_DMA_CTL_FIFO_EN (1<<0) |
266 | BTLONG (i2c_data_ctl); /* 110, 111,112,113 */ |
267 | #define BT848_DATA_CTL_I2CDIV (0xf<<4) |
268 | #define BT848_DATA_CTL_I2CSYNC (1<<3) |
269 | #define BT848_DATA_CTL_I2CW3B (1<<2) |
270 | #define BT848_DATA_CTL_I2CSCL (1<<1) |
271 | #define BT848_DATA_CTL_I2CSDA (1<<0) |
272 | BTLONG (risc_strt_add); /* 114, 115,116,117 */ |
273 | BTLONG (gpio_out_en); /* 118, 119,11a,11b */ /* really 24 bits */ |
274 | BTLONG (gpio_reg_inp); /* 11c, 11d,11e,11f */ /* really 24 bits */ |
275 | BTLONG (risc_count); /* 120, 121,122,123 */ |
276 | u_char filler3[0x200-0x124]; |
277 | BTLONG (gpio_data); /* 200, 201,202,203 */ /* really 24 bits */ |
278 | }; |
279 | |
280 | |
281 | #define BKTR_DSTATUS 0x000 |
282 | #define BKTR_IFORM 0x004 |
283 | #define BKTR_TDEC 0x008 |
284 | #define BKTR_E_CROP 0x00C |
285 | #define BKTR_O_CROP 0x08C |
286 | #define BKTR_E_VDELAY_LO 0x010 |
287 | #define BKTR_O_VDELAY_LO 0x090 |
288 | #define BKTR_E_VACTIVE_LO 0x014 |
289 | #define BKTR_O_VACTIVE_LO 0x094 |
290 | #define BKTR_E_DELAY_LO 0x018 |
291 | #define BKTR_O_DELAY_LO 0x098 |
292 | #define BKTR_E_HACTIVE_LO 0x01C |
293 | #define BKTR_O_HACTIVE_LO 0x09C |
294 | #define BKTR_E_HSCALE_HI 0x020 |
295 | #define BKTR_O_HSCALE_HI 0x0A0 |
296 | #define BKTR_E_HSCALE_LO 0x024 |
297 | #define BKTR_O_HSCALE_LO 0x0A4 |
298 | #define BKTR_BRIGHT 0x028 |
299 | #define BKTR_E_CONTROL 0x02C |
300 | #define BKTR_O_CONTROL 0x0AC |
301 | #define BKTR_CONTRAST_LO 0x030 |
302 | #define BKTR_SAT_U_LO 0x034 |
303 | #define BKTR_SAT_V_LO 0x038 |
304 | #define BKTR_HUE 0x03C |
305 | #define BKTR_E_SCLOOP 0x040 |
306 | #define BKTR_O_SCLOOP 0x0C0 |
307 | #define BKTR_OFORM 0x048 |
308 | #define BKTR_E_VSCALE_HI 0x04C |
309 | #define BKTR_O_VSCALE_HI 0x0CC |
310 | #define BKTR_E_VSCALE_LO 0x050 |
311 | #define BKTR_O_VSCALE_LO 0x0D0 |
312 | #define BKTR_TEST 0x054 |
313 | #define BKTR_ADELAY 0x060 |
314 | #define BKTR_BDELAY 0x064 |
315 | #define BKTR_ADC 0x068 |
316 | #define BKTR_E_VTC 0x06C |
317 | #define BKTR_O_VTC 0x0EC |
318 | #define BKTR_SRESET 0x07C |
319 | #define BKTR_COLOR_FMT 0x0D4 |
320 | #define BKTR_COLOR_CTL 0x0D8 |
321 | #define BKTR_CAP_CTL 0x0DC |
322 | #define BKTR_VBI_PACK_SIZE 0x0E0 |
323 | #define BKTR_VBI_PACK_DEL 0x0E4 |
324 | #define BKTR_INT_STAT 0x100 |
325 | #define BKTR_INT_MASK 0x104 |
326 | #define BKTR_RISC_COUNT 0x120 |
327 | #define BKTR_RISC_STRT_ADD 0x114 |
328 | #define BKTR_GPIO_DMA_CTL 0x10C |
329 | #define BKTR_GPIO_OUT_EN 0x118 |
330 | #define BKTR_GPIO_REG_INP 0x11C |
331 | #define BKTR_GPIO_DATA 0x200 |
332 | #define BKTR_I2C_DATA_CTL 0x110 |
333 | #define BKTR_TGCTRL 0x084 |
334 | #define BKTR_PLL_F_LO 0x0F0 |
335 | #define BKTR_PLL_F_HI 0x0F4 |
336 | #define BKTR_PLL_F_XCI 0x0F8 |
337 | |
338 | /* |
339 | * device support for onboard tv tuners |
340 | */ |
341 | |
342 | /* description of the LOGICAL tuner */ |
343 | struct TVTUNER { |
344 | int frequency; |
345 | u_char chnlset; |
346 | u_char channel; |
347 | u_char band; |
348 | u_char afc; |
349 | u_char radio_mode; /* current mode of the radio mode */ |
350 | }; |
351 | |
352 | /* description of the PHYSICAL tuner */ |
353 | struct TUNER { |
354 | const char* name; |
355 | u_char type; |
356 | u_char pllControl[4]; |
357 | u_int bandLimits[2]; |
358 | u_char bandAddrs[4]; /* 3 first for the 3 TV |
359 | ** bands. Last for radio |
360 | ** band (0x00=NoRadio). |
361 | */ |
362 | |
363 | }; |
364 | |
365 | /* description of the card */ |
366 | #define EEPROMBLOCKSIZE 32 |
367 | struct CARDTYPE { |
368 | unsigned int card_id; /* card id (from #define's) */ |
369 | const char* name; |
370 | const struct TUNER* tuner; /* Tuner details */ |
371 | u_char tuner_pllAddr; /* Tuner i2c address */ |
372 | u_char dbx; /* Has DBX chip? */ |
373 | u_char msp3400c; /* Has msp3400c chip? */ |
374 | u_char dpl3518a; /* Has dpl3518a chip? */ |
375 | u_char eepromAddr; |
376 | u_char eepromSize; /* bytes / EEPROMBLOCKSIZE */ |
377 | u_int audiomuxs[5]; /* tuner, ext (line-in) */ |
378 | /* int/unused (radio) */ |
379 | /* mute, present */ |
380 | u_int gpio_mux_bits; /* GPIO mask for audio mux */ |
381 | }; |
382 | |
383 | struct format_params { |
384 | /* Total lines, lines before image, image lines */ |
385 | int vtotal, vdelay, vactive; |
386 | /* Total unscaled horizontal pixels, pixels before image, image pixels */ |
387 | int htotal, hdelay, hactive; |
388 | /* Scaled horizontal image pixels, Total Scaled horizontal pixels */ |
389 | int scaled_hactive, scaled_htotal; |
390 | /* frame rate . for ntsc is 30 frames per second */ |
391 | int frame_rate; |
392 | /* A-delay and B-delay */ |
393 | u_char adelay, bdelay; |
394 | /* Iform XTSEL value */ |
395 | int iform_xtsel; |
396 | /* VBI number of lines per field, and number of samples per line */ |
397 | int vbi_num_lines, vbi_num_samples; |
398 | }; |
399 | |
400 | #if defined(BKTR_USE_FREEBSD_SMBUS) |
401 | struct bktr_i2c_softc { |
402 | device_t iicbus; |
403 | device_t smbus; |
404 | }; |
405 | #endif |
406 | |
407 | |
408 | /* Bt848/878 register access |
409 | * The registers can either be access via a memory mapped structure |
410 | * or accessed via bus_space. |
411 | * bus_space access allows cross platform support, where as the |
412 | * memory mapped structure method only works on 32 bit processors |
413 | * with the right type of endianness. |
414 | */ |
415 | struct bktr_softc; |
416 | |
417 | u_int8_t bktr_INB(struct bktr_softc *, int); |
418 | u_int16_t bktr_INW(struct bktr_softc *, int); |
419 | u_int32_t bktr_INL(struct bktr_softc *, int); |
420 | void bktr_OUTB(struct bktr_softc *, int, u_int8_t); |
421 | void bktr_OUTW(struct bktr_softc *, int, u_int16_t); |
422 | void bktr_OUTL(struct bktr_softc *, int, u_int32_t); |
423 | |
424 | #define INB(bktr,offset) bktr_INB(bktr,offset) |
425 | #define INW(bktr,offset) bktr_INW(bktr,offset) |
426 | #define INL(bktr,offset) bktr_INL(bktr,offset) |
427 | #define OUTB(bktr,offset,value) bktr_OUTB(bktr,offset,value) |
428 | #define OUTW(bktr,offset,value) bktr_OUTW(bktr,offset,value) |
429 | #define OUTL(bktr,offset,value) bktr_OUTL(bktr,offset,value) |
430 | |
431 | typedef struct bktr_clip bktr_clip_t; |
432 | |
433 | /* |
434 | * BrookTree 848 info structure, one per bt848 card installed. |
435 | */ |
436 | struct bktr_softc { |
437 | |
438 | |
439 | device_t bktr_dev; /* base device */ |
440 | bus_dma_tag_t dmat; /* DMA tag */ |
441 | bus_space_tag_t memt; |
442 | bus_space_handle_t memh; |
443 | bus_size_t obmemsz; /* size of en card (bytes) */ |
444 | void *ih; |
445 | bus_dmamap_t dm_prog; |
446 | bus_dmamap_t dm_oprog; |
447 | bus_dmamap_t dm_mem; |
448 | bus_dmamap_t dm_vbidata; |
449 | bus_dmamap_t dm_vbibuffer; |
450 | |
451 | |
452 | |
453 | |
454 | /* The following definitions are for the contiguous memory */ |
455 | vaddr_t bigbuf; /* buffer that holds the captured image */ |
456 | vaddr_t vbidata; /* RISC program puts VBI data from the current frame here */ |
457 | vaddr_t vbibuffer; /* Circular buffer holding VBI data for the user */ |
458 | vaddr_t dma_prog; /* RISC prog for single and/or even field capture*/ |
459 | vaddr_t odd_dma_prog; /* RISC program for Odd field capture */ |
460 | |
461 | |
462 | /* the following definitions are common over all platforms */ |
463 | int alloc_pages; /* number of pages in bigbuf */ |
464 | int vbiinsert; /* Position for next write into circular buffer */ |
465 | int vbistart; /* Position of last read from circular buffer */ |
466 | int vbisize; /* Number of bytes in the circular buffer */ |
467 | u_int vbi_sequence_number; /* sequence number for VBI */ |
468 | int vbi_read_blocked; /* user process blocked on read() from /dev/vbi */ |
469 | struct selinfo vbi_select; /* Data used by select() on /dev/vbi */ |
470 | |
471 | |
472 | struct proc *proc; /* process to receive raised signal */ |
473 | int signal; /* signal to send to process */ |
474 | int clr_on_start; /* clear cap buf on capture start? */ |
475 | #define METEOR_SIG_MODE_MASK 0xffff0000 |
476 | #define METEOR_SIG_FIELD_MODE 0x00010000 |
477 | #define METEOR_SIG_FRAME_MODE 0x00000000 |
478 | char dma_prog_loaded; |
479 | struct meteor_mem *mem; /* used to control sync. multi-frame output */ |
480 | u_int synch_wait; /* wait for free buffer before continuing */ |
481 | short current; /* frame number in buffer (1-frames) */ |
482 | short rows; /* number of rows in a frame */ |
483 | short cols; /* number of columns in a frame */ |
484 | int capture_area_x_offset; /* Usually the full 640x480(NTSC) image is */ |
485 | int capture_area_y_offset; /* captured. The capture area allows for */ |
486 | int capture_area_x_size; /* example 320x200 pixels from the centre */ |
487 | int capture_area_y_size; /* of the video image to be captured. */ |
488 | char capture_area_enabled; /* When TRUE use user's capture area. */ |
489 | int pixfmt; /* active pixel format (idx into fmt tbl) */ |
490 | int pixfmt_compat; /* Y/N - in meteor pix fmt compat mode */ |
491 | u_int format; /* frame format rgb, yuv, etc.. */ |
492 | short frames; /* number of frames allocated */ |
493 | int frame_size; /* number of bytes in a frame */ |
494 | u_int fifo_errors; /* number of fifo capture errors since open */ |
495 | u_int dma_errors; /* number of DMA capture errors since open */ |
496 | u_int frames_captured;/* number of frames captured since open */ |
497 | u_int even_fields_captured; /* number of even fields captured */ |
498 | u_int odd_fields_captured; /* number of odd fields captured */ |
499 | u_int range_enable; /* enable range checking ?? */ |
500 | u_short capcontrol; /* reg 0xdc capture control */ |
501 | u_short bktr_cap_ctl; |
502 | volatile u_int flags; |
503 | #define METEOR_INITIALIZED 0x00000001 |
504 | #define METEOR_OPEN 0x00000002 |
505 | #define METEOR_MMAP 0x00000004 |
506 | #define METEOR_INTR 0x00000008 |
507 | #define METEOR_READ 0x00000010 /* XXX never gets referenced */ |
508 | #define METEOR_SINGLE 0x00000020 /* get single frame */ |
509 | #define METEOR_CONTIN 0x00000040 /* continuously get frames */ |
510 | #define METEOR_SYNCAP 0x00000080 /* synchronously get frames */ |
511 | #define METEOR_CAP_MASK 0x000000f0 |
512 | #define METEOR_NTSC 0x00000100 |
513 | #define METEOR_PAL 0x00000200 |
514 | #define METEOR_SECAM 0x00000400 |
515 | #define BROOKTREE_NTSC 0x00000100 /* used in video open() and */ |
516 | #define BROOKTREE_PAL 0x00000200 /* in the kernel config */ |
517 | #define BROOKTREE_SECAM 0x00000400 /* file */ |
518 | #define METEOR_AUTOMODE 0x00000800 |
519 | #define METEOR_FORM_MASK 0x00000f00 |
520 | #define METEOR_DEV0 0x00001000 |
521 | #define METEOR_DEV1 0x00002000 |
522 | #define METEOR_DEV2 0x00004000 |
523 | #define METEOR_DEV3 0x00008000 |
524 | #define METEOR_DEV_SVIDEO 0x00006000 |
525 | #define METEOR_DEV_RGB 0x0000a000 |
526 | #define METEOR_DEV_MASK 0x0000f000 |
527 | #define METEOR_RGB16 0x00010000 |
528 | #define METEOR_RGB24 0x00020000 |
529 | #define METEOR_YUV_PACKED 0x00040000 |
530 | #define METEOR_YUV_PLANAR 0x00080000 |
531 | #define METEOR_WANT_EVEN 0x00100000 /* want even frame */ |
532 | #define METEOR_WANT_ODD 0x00200000 /* want odd frame */ |
533 | #define METEOR_WANT_MASK 0x00300000 |
534 | #define METEOR_ONLY_EVEN_FIELDS 0x01000000 |
535 | #define METEOR_ONLY_ODD_FIELDS 0x02000000 |
536 | #define METEOR_ONLY_FIELDS_MASK 0x03000000 |
537 | #define METEOR_YUV_422 0x04000000 |
538 | #define METEOR_OUTPUT_FMT_MASK 0x040f0000 |
539 | #define METEOR_WANT_TS 0x08000000 /* time-stamp a frame */ |
540 | #define METEOR_RGB 0x20000000 /* meteor rgb unit */ |
541 | u_char tflags; /* Tuner flags (/dev/tuner) */ |
542 | #define TUNER_INITIALIZED 0x00000001 |
543 | #define TUNER_OPEN 0x00000002 |
544 | u_char vbiflags; /* VBI flags (/dev/vbi) */ |
545 | #define VBI_INITIALIZED 0x00000001 |
546 | #define VBI_OPEN 0x00000002 |
547 | #define VBI_CAPTURE 0x00000004 |
548 | u_short fps; /* frames per second */ |
549 | struct meteor_video video; |
550 | struct TVTUNER tuner; |
551 | struct CARDTYPE card; |
552 | u_char audio_mux_select; /* current mode of the audio */ |
553 | u_char audio_mute_state; /* mute state of the audio */ |
554 | u_char format_params; |
555 | u_int current_sol; |
556 | u_int current_col; |
557 | int clip_start; |
558 | int line_length; |
559 | int last_y; |
560 | int y; |
561 | int y2; |
562 | int yclip; |
563 | int yclip2; |
564 | int max_clip_node; |
565 | bktr_clip_t clip_list[100]; |
566 | int reverse_mute; /* Swap the GPIO values for Mute and TV Audio */ |
567 | int bt848_tuner; |
568 | int bt848_card; |
569 | u_int id; |
570 | #define BT848_USE_XTALS 0 |
571 | #define BT848_USE_PLL 1 |
572 | int xtal_pll_mode; /* Use XTAL or PLL mode for PAL/SECAM */ |
573 | int remote_control; /* remote control detected */ |
574 | int remote_control_addr; /* remote control i2c address */ |
575 | char msp_version_string[9]; /* MSP version string 34xxx-xx */ |
576 | int msp_addr; /* MSP i2c address */ |
577 | char dpl_version_string[9]; /* DPL version string 35xxx-xx */ |
578 | int dpl_addr; /* DPL i2c address */ |
579 | int slow_msp_audio; /* 0 = use fast MSP3410/3415 programming sequence */ |
580 | /* 1 = use slow MSP3410/3415 programming sequence */ |
581 | /* 2 = use Tuner's Mono audio output via the MSP chip */ |
582 | int msp_use_mono_source; /* use Tuner's Mono audio output via the MSP chip */ |
583 | int audio_mux_present; /* 1 = has audio mux on GPIO lines, 0 = no audio mux */ |
584 | int msp_source_selected; /* 0 = TV source, 1 = Line In source, 2 = FM Radio Source */ |
585 | void *sih; |
586 | |
587 | }; |
588 | |
589 | typedef struct bktr_softc bktr_reg_t; |
590 | typedef struct bktr_softc* bktr_ptr_t; |
591 | |
592 | #define Bt848_MAX_SIGN 16 |
593 | |
594 | struct bt848_card_sig { |
595 | int card; |
596 | int tuner; |
597 | u_char signature[Bt848_MAX_SIGN]; |
598 | }; |
599 | |
600 | |
601 | /***********************************************************/ |
602 | /* ioctl_cmd_t int on old versions, u_long on new versions */ |
603 | /***********************************************************/ |
604 | |
605 | |
606 | |
607 | typedef u_long ioctl_cmd_t; |
608 | |
609 | |
610 | |