📄 bttvp.h
字号:
/* bttv - Bt848 frame grabber driver bttv's *private* header file -- nobody other than bttv itself should ever include this file. (c) 2000-2002 Gerd Knorr <kraxel@bytesex.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/#ifndef _BTTVP_H_#define _BTTVP_H_#include <linux/version.h>#define BTTV_VERSION_CODE KERNEL_VERSION(0,9,16)#include <linux/types.h>#include <linux/wait.h>#include <linux/i2c.h>#include <linux/i2c-algo-bit.h>#include <linux/videodev.h>#include <linux/pci.h>#include <linux/input.h>#include <asm/scatterlist.h>#include <asm/io.h>#include <linux/device.h>#include <media/video-buf.h>#include <media/audiochip.h>#include <media/tuner.h>#include <media/tveeprom.h>#include <media/ir-common.h>#include "bt848.h"#include "bttv.h"#include "btcx-risc.h"#ifdef __KERNEL__#define FORMAT_FLAGS_DITHER 0x01#define FORMAT_FLAGS_PACKED 0x02#define FORMAT_FLAGS_PLANAR 0x04#define FORMAT_FLAGS_RAW 0x08#define FORMAT_FLAGS_CrCb 0x10#define RISC_SLOT_O_VBI 4#define RISC_SLOT_O_FIELD 6#define RISC_SLOT_E_VBI 10#define RISC_SLOT_E_FIELD 12#define RISC_SLOT_LOOP 14#define RESOURCE_OVERLAY 1#define RESOURCE_VIDEO 2#define RESOURCE_VBI 4#define RAW_LINES 640#define RAW_BPL 1024#define UNSET (-1U)/* ---------------------------------------------------------- */struct bttv_tvnorm { int v4l2_id; char *name; u32 Fsc; u16 swidth, sheight; /* scaled standard width, height */ u16 totalwidth; u8 adelay, bdelay, iform; u32 scaledtwidth; u16 hdelayx1, hactivex1; u16 vdelay; u8 vbipack; u16 vtotal; int sram;};extern const struct bttv_tvnorm bttv_tvnorms[];struct bttv_format { char *name; int palette; /* video4linux 1 */ int fourcc; /* video4linux 2 */ int btformat; /* BT848_COLOR_FMT_* */ int btswap; /* BT848_COLOR_CTL_* */ int depth; /* bit/pixel */ int flags; int hshift,vshift; /* for planar modes */};/* ---------------------------------------------------------- */struct bttv_geometry { u8 vtc,crop,comb; u16 width,hscale,hdelay; u16 sheight,vscale,vdelay,vtotal;};struct bttv_buffer { /* common v4l buffer stuff -- must be first */ struct videobuf_buffer vb; /* bttv specific */ const struct bttv_format *fmt; int tvnorm; int btformat; int btswap; struct bttv_geometry geo; struct btcx_riscmem top; struct btcx_riscmem bottom;};struct bttv_buffer_set { struct bttv_buffer *top; /* top field buffer */ struct bttv_buffer *bottom; /* bottom field buffer */ unsigned int top_irq; unsigned int frame_irq;};struct bttv_overlay { int tvnorm; struct v4l2_rect w; enum v4l2_field field; struct v4l2_clip *clips; int nclips; int setup_ok;};struct bttv_fh { struct bttv *btv; int resources;#ifdef VIDIOC_G_PRIORITY enum v4l2_priority prio;#endif enum v4l2_buf_type type; /* video capture */ struct videobuf_queue cap; const struct bttv_format *fmt; int width; int height; /* current settings */ const struct bttv_format *ovfmt; struct bttv_overlay ov; /* video overlay */ struct videobuf_queue vbi; int lines;};/* ---------------------------------------------------------- *//* bttv-risc.c *//* risc code generators - capture */int bttv_risc_packed(struct bttv *btv, struct btcx_riscmem *risc, struct scatterlist *sglist, unsigned int offset, unsigned int bpl, unsigned int pitch, unsigned int lines);/* control dma register + risc main loop */void bttv_set_dma(struct bttv *btv, int override);int bttv_risc_init_main(struct bttv *btv);int bttv_risc_hook(struct bttv *btv, int slot, struct btcx_riscmem *risc, int irqflags);/* capture buffer handling */int bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf);int bttv_buffer_activate_video(struct bttv *btv, struct bttv_buffer_set *set);int bttv_buffer_activate_vbi(struct bttv *btv, struct bttv_buffer *vbi);void bttv_dma_free(struct bttv *btv, struct bttv_buffer *buf);/* overlay handling */int bttv_overlay_risc(struct bttv *btv, struct bttv_overlay *ov, const struct bttv_format *fmt, struct bttv_buffer *buf);/* ---------------------------------------------------------- *//* bttv-vbi.c */void bttv_vbi_try_fmt(struct bttv_fh *fh, struct v4l2_format *f);void bttv_vbi_get_fmt(struct bttv_fh *fh, struct v4l2_format *f);void bttv_vbi_setlines(struct bttv_fh *fh, struct bttv *btv, int lines);extern struct videobuf_queue_ops bttv_vbi_qops;/* ---------------------------------------------------------- *//* bttv-gpio.c */extern struct bus_type bttv_sub_bus_type;int bttv_sub_add_device(struct bttv_core *core, char *name);int bttv_sub_del_devices(struct bttv_core *core);void bttv_gpio_irq(struct bttv_core *core);int bttv_any_irq(struct bttv_core *core);/* ---------------------------------------------------------- *//* bttv-driver.c *//* insmod options */extern unsigned int bttv_verbose;extern unsigned int bttv_debug;extern unsigned int bttv_gpio;extern void bttv_gpio_tracking(struct bttv *btv, char *comment);extern int init_bttv_i2c(struct bttv *btv);extern int fini_bttv_i2c(struct bttv *btv);#define bttv_printk if (bttv_verbose) printk#define dprintk if (bttv_debug >= 1) printk#define d2printk if (bttv_debug >= 2) printk#define BTTV_MAX_FBUF 0x208000#define VBIBUF_SIZE (2048*VBI_MAXLINES*2)#define BTTV_TIMEOUT (HZ/2) /* 0.5 seconds */#define BTTV_FREE_IDLE (HZ) /* one second */struct bttv_pll_info { unsigned int pll_ifreq; /* PLL input frequency */ unsigned int pll_ofreq; /* PLL output frequency */ unsigned int pll_crystal; /* Crystal used for input */ unsigned int pll_current; /* Currently programmed ofreq */};/* for gpio-connected remote control */struct bttv_input { struct input_dev *dev; struct ir_input_state ir; char name[32]; char phys[32]; u32 mask_keycode; u32 mask_keydown;};struct bttv_suspend_state { u32 gpio_enable; u32 gpio_data; int disabled; int loop_irq; struct bttv_buffer_set video; struct bttv_buffer *vbi;};struct bttv { struct bttv_core c; /* pci device config */ unsigned short id; unsigned char revision; unsigned char __iomem *bt848_mmio; /* pointer to mmio */ /* card configuration info */ unsigned int cardid; /* pci subsystem id (bt878 based ones) */ unsigned int tuner_type; /* tuner chip type */ unsigned int pinnacle_id; unsigned int svhs; struct bttv_pll_info pll; int triton1; int gpioirq; int any_irq; int use_i2c_hw; /* old gpio interface */ wait_queue_head_t gpioq; int shutdown; void (*audio_hook)(struct bttv *btv, struct video_audio *v, int set); /* new gpio interface */ spinlock_t gpio_lock; /* i2c layer */ struct i2c_algo_bit_data i2c_algo; struct i2c_client i2c_client; int i2c_state, i2c_rc; int i2c_done; wait_queue_head_t i2c_queue; /* video4linux (1) */ struct video_device *video_dev; struct video_device *radio_dev; struct video_device *vbi_dev; /* infrared remote */ int has_remote; struct bttv_input *remote; /* locking */ spinlock_t s_lock; struct semaphore lock; int resources; struct semaphore reslock;#ifdef VIDIOC_G_PRIORITY struct v4l2_prio_state prio;#endif /* video state */ unsigned int input; unsigned int audio; unsigned long freq; int tvnorm,hue,contrast,bright,saturation; struct v4l2_framebuffer fbuf; unsigned int field_count; /* various options */ int opt_combfilter; int opt_lumafilter; int opt_automute; int opt_chroma_agc; int opt_adc_crush; int opt_vcr_hack; int opt_whitecrush_upper; int opt_whitecrush_lower; int opt_uv_ratio; int opt_full_luma_range; int opt_coring; /* radio data/state */ int has_radio; int radio_user; /* miro/pinnacle + Aimslab VHX philips matchbox (tea5757 radio tuner) support */ int has_matchbox; int mbox_we; int mbox_data; int mbox_clk; int mbox_most; int mbox_mask; /* ISA stuff (Terratec Active Radio Upgrade) */ int mbox_ior; int mbox_iow; int mbox_csel; /* risc memory management data - must aquire s_lock before changing these - only the irq handler is supported to touch top + bottom + vcurr */ struct btcx_riscmem main; struct bttv_buffer *screen; /* overlay */ struct list_head capture; /* video capture queue */ struct list_head vcapture; /* vbi capture queue */ struct bttv_buffer_set curr; /* active buffers */ struct bttv_buffer *cvbi; /* active vbi buffer */ int loop_irq; int new_input; unsigned long cap_ctl; unsigned long dma_on; struct timer_list timeout; struct bttv_suspend_state state; /* stats */ unsigned int errors; unsigned int framedrop; unsigned int irq_total; unsigned int irq_me; unsigned int users; struct bttv_fh init;};/* our devices */#define BTTV_MAX 16extern unsigned int bttv_num;extern struct bttv bttvs[BTTV_MAX];/* private ioctls */#define BTTV_VERSION _IOR('v' , BASE_VIDIOCPRIVATE+6, int)#define BTTV_VBISIZE _IOR('v' , BASE_VIDIOCPRIVATE+8, int)#endif#define btwrite(dat,adr) writel((dat), btv->bt848_mmio+(adr))#define btread(adr) readl(btv->bt848_mmio+(adr))#define btand(dat,adr) btwrite((dat) & btread(adr), adr)#define btor(dat,adr) btwrite((dat) | btread(adr), adr)#define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr)#endif /* _BTTVP_H_ *//* * Local variables: * c-basic-offset: 8 * End: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -