VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / drivers / media / video / bttvp.h
1 /*
2     bttv - Bt848 frame grabber driver
3
4     bttv's *private* header file  --  nobody other than bttv itself
5     should ever include this file.
6
7     (c) 2000-2002 Gerd Knorr <kraxel@bytesex.org>
8
9     This program is free software; you can redistribute it and/or modify
10     it under the terms of the GNU General Public License as published by
11     the Free Software Foundation; either version 2 of the License, or
12     (at your option) any later version.
13
14     This program is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17     GNU General Public License for more details.
18
19     You should have received a copy of the GNU General Public License
20     along with this program; if not, write to the Free Software
21     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 #ifndef _BTTVP_H_
25 #define _BTTVP_H_
26
27 #include <linux/version.h>
28 #define BTTV_VERSION_CODE KERNEL_VERSION(0,9,15)
29
30 #include <linux/types.h>
31 #include <linux/wait.h>
32 #include <linux/i2c.h>
33 #include <linux/i2c-algo-bit.h>
34 #include <linux/videodev.h>
35 #include <linux/pci.h>
36 #include <linux/input.h>
37 #include <asm/scatterlist.h>
38 #include <asm/io.h>
39
40 #include <linux/device.h>
41 #include <media/video-buf.h>
42 #include <media/audiochip.h>
43 #include <media/tuner.h>
44 #include <media/ir-common.h>
45
46 #include "bt848.h"
47 #include "bttv.h"
48 #include "btcx-risc.h"
49
50 #ifdef __KERNEL__
51
52 #define FORMAT_FLAGS_DITHER       0x01
53 #define FORMAT_FLAGS_PACKED       0x02
54 #define FORMAT_FLAGS_PLANAR       0x04
55 #define FORMAT_FLAGS_RAW          0x08
56 #define FORMAT_FLAGS_CrCb         0x10
57
58 #define RISC_SLOT_O_VBI        4
59 #define RISC_SLOT_O_FIELD      6
60 #define RISC_SLOT_E_VBI       10
61 #define RISC_SLOT_E_FIELD     12
62 #define RISC_SLOT_LOOP        14
63
64 #define RESOURCE_OVERLAY       1
65 #define RESOURCE_VIDEO         2
66 #define RESOURCE_VBI           4
67
68 #define RAW_LINES            640
69 #define RAW_BPL             1024
70
71 #define UNSET (-1U)
72
73 /* ---------------------------------------------------------- */
74
75 struct bttv_tvnorm {
76         int   v4l2_id;
77         char  *name;
78         u32   Fsc;
79         u16   swidth, sheight; /* scaled standard width, height */
80         u16   totalwidth;
81         u8    adelay, bdelay, iform;
82         u32   scaledtwidth;
83         u16   hdelayx1, hactivex1;
84         u16   vdelay;
85         u8    vbipack;
86         u16   vtotal;
87         int   sram;
88 };
89 extern const struct bttv_tvnorm bttv_tvnorms[];
90 extern const unsigned int BTTV_TVNORMS;
91
92 struct bttv_format {
93         char *name;
94         int  palette;         /* video4linux 1      */
95         int  fourcc;          /* video4linux 2      */
96         int  btformat;        /* BT848_COLOR_FMT_*  */
97         int  btswap;          /* BT848_COLOR_CTL_*  */
98         int  depth;           /* bit/pixel          */
99         int  flags;
100         int  hshift,vshift;   /* for planar modes   */
101 };
102 extern const struct bttv_format bttv_formats[];
103 extern const unsigned int BTTV_FORMATS;
104
105 /* ---------------------------------------------------------- */
106
107 struct bttv_geometry {
108         u8  vtc,crop,comb;
109         u16 width,hscale,hdelay;
110         u16 sheight,vscale,vdelay,vtotal;
111 };
112
113 struct bttv_buffer {
114         /* common v4l buffer stuff -- must be first */
115         struct videobuf_buffer     vb;
116
117         /* bttv specific */
118         const struct bttv_format   *fmt;
119         int                        tvnorm;
120         int                        btformat;
121         int                        btswap;
122         struct bttv_geometry       geo;
123         struct btcx_riscmem        top;
124         struct btcx_riscmem        bottom;
125 };
126
127 struct bttv_buffer_set {
128         struct bttv_buffer     *top;       /* top field buffer    */
129         struct bttv_buffer     *bottom;    /* bottom field buffer */
130         unsigned int           irqflags;
131         unsigned int           topirq;
132 };
133
134 struct bttv_overlay {
135         int                    tvnorm;
136         struct v4l2_rect       w;
137         enum v4l2_field        field;
138         struct v4l2_clip       *clips;
139         int                    nclips;
140         int                    setup_ok;
141 };
142
143 struct bttv_fh {
144         struct bttv              *btv;
145         int resources;
146 #ifdef VIDIOC_G_PRIORITY 
147         enum v4l2_priority       prio;
148 #endif
149         enum v4l2_buf_type       type;
150
151         /* video capture */
152         struct videobuf_queue    cap;
153         const struct bttv_format *fmt;
154         int                      width;
155         int                      height;
156
157         /* current settings */
158         const struct bttv_format *ovfmt;
159         struct bttv_overlay      ov;
160
161         /* video overlay */
162         struct videobuf_queue    vbi;
163         int                      lines;
164 };
165
166 /* ---------------------------------------------------------- */
167 /* bttv-risc.c                                                */
168
169 /* risc code generators - capture */
170 int bttv_risc_packed(struct bttv *btv, struct btcx_riscmem *risc,
171                      struct scatterlist *sglist,
172                      unsigned int offset, unsigned int bpl,
173                      unsigned int pitch, unsigned int lines);
174 int bttv_risc_planar(struct bttv *btv, struct btcx_riscmem *risc,
175                      struct scatterlist *sglist,
176                      unsigned int yoffset,  unsigned int ybpl,
177                      unsigned int ypadding, unsigned int ylines,
178                      unsigned int uoffset,  unsigned int voffset,
179                      unsigned int hshift,   unsigned int vshift,
180                      unsigned int cpadding);
181 int bttv_risc_overlay(struct bttv *btv, struct btcx_riscmem *risc,
182                       const struct bttv_format *fmt,
183                       struct bttv_overlay *ov,
184                       int skip_top, int skip_bottom);
185
186 /* calculate / apply geometry settings */
187 void bttv_calc_geo(struct bttv *btv, struct bttv_geometry *geo,
188                    int width, int height, int interleaved, int norm);
189 void bttv_apply_geo(struct bttv *btv, struct bttv_geometry *geo, int top);
190
191 /* control dma register + risc main loop */
192 void bttv_set_dma(struct bttv *btv, int override, int irqflags);
193 int bttv_risc_init_main(struct bttv *btv);
194 int bttv_risc_hook(struct bttv *btv, int slot, struct btcx_riscmem *risc,
195                    int irqflags);
196
197 /* capture buffer handling */
198 int bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf);
199 int bttv_buffer_activate_video(struct bttv *btv,
200                                struct bttv_buffer_set *set);
201 int bttv_buffer_activate_vbi(struct bttv *btv,
202                              struct bttv_buffer *vbi);
203 void bttv_dma_free(struct bttv *btv, struct bttv_buffer *buf);
204
205 /* overlay handling */
206 int bttv_overlay_risc(struct bttv *btv, struct bttv_overlay *ov,
207                       const struct bttv_format *fmt,
208                       struct bttv_buffer *buf);
209
210
211 /* ---------------------------------------------------------- */
212 /* bttv-vbi.c                                                 */
213
214 void bttv_vbi_try_fmt(struct bttv_fh *fh, struct v4l2_format *f);
215 void bttv_vbi_get_fmt(struct bttv_fh *fh, struct v4l2_format *f);
216 void bttv_vbi_setlines(struct bttv_fh *fh, struct bttv *btv, int lines);
217
218 extern struct videobuf_queue_ops bttv_vbi_qops;
219
220 /* ---------------------------------------------------------- */
221 /* bttv-gpio.c */
222
223
224 extern struct bus_type bttv_sub_bus_type;
225 int bttv_sub_add_device(struct bttv_core *core, char *name);
226 int bttv_sub_del_devices(struct bttv_core *core);
227 void bttv_gpio_irq(struct bttv_core *core);
228
229
230 /* ---------------------------------------------------------- */
231 /* bttv-driver.c                                              */
232
233 /* insmod options */
234 extern unsigned int bttv_verbose;
235 extern unsigned int bttv_debug;
236 extern unsigned int bttv_gpio;
237 extern void bttv_gpio_tracking(struct bttv *btv, char *comment);
238 extern int init_bttv_i2c(struct bttv *btv);
239 extern int fini_bttv_i2c(struct bttv *btv);
240 extern int pvr_boot(struct bttv *btv);
241
242 extern int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg);
243 extern void bttv_reinit_bt848(struct bttv *btv);
244 extern void bttv_field_count(struct bttv *btv);
245
246 #define vprintk  if (bttv_verbose) printk
247 #define dprintk  if (bttv_debug >= 1) printk
248 #define d2printk if (bttv_debug >= 2) printk
249
250 /* our devices */
251 #define BTTV_MAX 16
252 extern unsigned int bttv_num;
253 extern struct bttv bttvs[BTTV_MAX];
254
255 #define BTTV_MAX_FBUF   0x208000
256 #define VBIBUF_SIZE     (2048*VBI_MAXLINES*2)
257 #define BTTV_TIMEOUT    (HZ/2) /* 0.5 seconds */
258 #define BTTV_FREE_IDLE  (HZ)   /* one second */
259
260
261 struct bttv_pll_info {
262         unsigned int pll_ifreq;    /* PLL input frequency        */
263         unsigned int pll_ofreq;    /* PLL output frequency       */
264         unsigned int pll_crystal;  /* Crystal used for input     */
265         unsigned int pll_current;  /* Currently programmed ofreq */
266 };
267
268 /* for gpio-connected remote control */
269 struct bttv_input {
270         struct input_dev      dev;
271         struct ir_input_state ir;
272         char                  name[32];
273         char                  phys[32];
274         u32                   mask_keycode;
275         u32                   mask_keydown;
276 };
277
278 struct bttv_suspend_state {
279         u32  pci_cfg[64 / sizeof(u32)];
280         u32  gpio_enable;
281         u32  gpio_data;
282         int  disabled;
283         struct bttv_buffer_set video;
284         struct bttv_buffer     *vbi;
285 };
286
287 struct bttv {
288         struct bttv_core c;
289
290         /* pci device config */
291         unsigned short id;
292         unsigned char revision;
293         unsigned char *bt848_mmio;   /* pointer to mmio */
294
295         /* card configuration info */
296         unsigned int cardid;   /* pci subsystem id (bt878 based ones) */
297         unsigned int tuner_type;  /* tuner chip type */
298         unsigned int pinnacle_id;
299         unsigned int svhs;
300         struct bttv_pll_info pll;
301         int triton1;
302         int gpioirq;
303         int use_i2c_hw;
304
305         /* old gpio interface */
306         wait_queue_head_t gpioq;
307         int shutdown;
308         void (*audio_hook)(struct bttv *btv, struct video_audio *v, int set);
309
310         /* new gpio interface */
311         spinlock_t gpio_lock;
312
313         /* i2c layer */
314         struct i2c_algo_bit_data   i2c_algo;
315         struct i2c_client          i2c_client;
316         int                        i2c_state, i2c_rc;
317         int                        i2c_done;
318         wait_queue_head_t          i2c_queue;
319
320         /* video4linux (1) */
321         struct video_device *video_dev;
322         struct video_device *radio_dev;
323         struct video_device *vbi_dev;
324
325         /* infrared remote */
326         int has_remote;
327         struct bttv_input *remote;
328
329         /* locking */
330         spinlock_t s_lock;
331         struct semaphore lock;
332         int resources;
333         struct semaphore reslock;
334 #ifdef VIDIOC_G_PRIORITY 
335         struct v4l2_prio_state prio;
336 #endif
337         
338         /* video state */
339         unsigned int input;
340         unsigned int audio;
341         unsigned long freq;
342         int tvnorm,hue,contrast,bright,saturation;
343         struct v4l2_framebuffer fbuf;
344         unsigned int field_count;
345
346         /* various options */
347         int opt_combfilter;
348         int opt_lumafilter;
349         int opt_automute;
350         int opt_chroma_agc;
351         int opt_adc_crush;
352         int opt_vcr_hack;
353         int opt_whitecrush_upper;
354         int opt_whitecrush_lower;
355
356         /* radio data/state */
357         int has_radio;
358         int radio_user;
359
360         /* miro/pinnacle + Aimslab VHX
361            philips matchbox (tea5757 radio tuner) support */
362         int has_matchbox;
363         int mbox_we;
364         int mbox_data;
365         int mbox_clk;
366         int mbox_most;
367         int mbox_mask;
368
369         /* ISA stuff (Terratec Active Radio Upgrade) */
370         int mbox_ior;
371         int mbox_iow;
372         int mbox_csel;
373
374         /* risc memory management data
375            - must aquire s_lock before changing these
376            - only the irq handler is supported to touch top + bottom + vcurr */
377         struct btcx_riscmem     main;
378         struct bttv_buffer      *screen;    /* overlay             */
379         struct list_head        capture;    /* video capture queue */
380         struct list_head        vcapture;   /* vbi capture queue   */
381         struct bttv_buffer_set  curr;       /* active buffers      */
382         struct bttv_buffer      *cvbi;      /* active vbi buffer   */
383         int                     new_input;
384
385         unsigned long cap_ctl;
386         unsigned long dma_on;
387         struct timer_list timeout;
388         struct bttv_suspend_state state;
389
390         /* stats */
391         unsigned int errors;
392         unsigned int framedrop;
393         unsigned int irq_total;
394         unsigned int irq_me;
395
396         unsigned int users;
397         struct bttv_fh init;
398 };
399
400 /* private ioctls */
401 #define BTTV_VERSION            _IOR('v' , BASE_VIDIOCPRIVATE+6, int)
402 #define BTTV_VBISIZE            _IOR('v' , BASE_VIDIOCPRIVATE+8, int)
403
404 #endif
405
406 #define btwrite(dat,adr)    writel((dat), (char *) (btv->bt848_mmio+(adr)))
407 #define btread(adr)         readl(btv->bt848_mmio+(adr))
408
409 #define btand(dat,adr)      btwrite((dat) & btread(adr), adr)
410 #define btor(dat,adr)       btwrite((dat) | btread(adr), adr)
411 #define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr)
412
413 #endif /* _BTTVP_H_ */
414
415 /*
416  * Local variables:
417  * c-basic-offset: 8
418  * End:
419  */