Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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