bttvp.h

来自「是关于linux2.5.1的完全源码」· C头文件 代码 · 共 367 行

H
367
字号
/*    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_#define BTTV_VERSION_CODE KERNEL_VERSION(0,8,38)#include <linux/types.h>#include <linux/wait.h>#include <linux/i2c.h>#include <linux/i2c-algo-bit.h>#include <linux/videodev.h>#include <linux/iobuf.h>#include <linux/pci.h>#include <asm/scatterlist.h>#include "bt848.h"#include "bttv.h"#include "video-buf.h"#include "audiochip.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_STREAMING     2#define RAW_LINES            640#define RAW_BPL             1024/* ---------------------------------------------------------- */struct bttv_tvnorm {	int v4l2_id;        u32 Fsc;        u16 swidth, sheight; /* scaled standard width, height */	u16 totalwidth;	u8 adelay, bdelay, iform;	u32 scaledtwidth;	u16 hdelayx1, hactivex1;	u16 vdelay;        u8 vbipack;};extern const struct bttv_tvnorm bttv_tvnorms[];extern const int 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   */};extern const struct bttv_format bttv_formats[];extern const int BTTV_FORMATS;/* ---------------------------------------------------------- */struct bttv_geometry {	u8  vtc,crop,comb;	u16 width,hscale,hdelay;	u16 sheight,vscale,vdelay;};struct bttv_riscmem {	unsigned int   size;	unsigned long  *cpu;	unsigned long  *jmp;	dma_addr_t     dma;};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 bttv_riscmem        even;	struct bttv_riscmem        odd;};struct bttv_overlay {	int tvnorm;	int x,y,width,height;	struct video_clip      *clips;	int                    nclips;};struct bttv_vbi {        struct semaphore           lock;	int                        users;	int                        lines;	/* mmap */	int                        streaming;	struct bttv_buffer         *bufs[VIDEO_MAX_FRAME];	struct list_head           stream;	/* read */	int                        reading;	int                        read_off;	struct bttv_buffer         *read_buf;};struct bttv_fh {	struct bttv              *btv;	/* locking */	int resources;	struct semaphore lock;	/* keep current driver settings */	const struct bttv_format *ovfmt;	struct bttv_overlay      ov;	struct bttv_buffer       buf;	/* for read() capture */	struct bttv_buffer       read_buf;	int                      read_off;	/* mmap()'ed buffers */	struct bttv_buffer       *bufs[VIDEO_MAX_FRAME];	struct list_head stream; /* v4l2 QBUF/DQBUF */};/* ---------------------------------------------------------- *//* bttv-risc.c                                                *//* alloc/free memory */int  bttv_riscmem_alloc(struct pci_dev *pci,			struct bttv_riscmem *risc,			unsigned int size);void bttv_riscmem_free(struct pci_dev *pci,		       struct bttv_riscmem *risc);/* risc code generators - capture */int bttv_risc_packed(struct bttv *btv, struct bttv_riscmem *risc,		     struct scatterlist *sglist,		     int offset, int bpl, int pitch, int lines);int bttv_risc_planar(struct bttv *btv, struct bttv_riscmem *risc,		     struct scatterlist *sglist,		     int yoffset, int ybpl, int ypadding, int ylines,		     int uoffset, int voffset, int hshift, int vshift,		     int cpadding);/* risc code generator + helpers - screen overlay */int bttv_screen_clips(struct video_buffer *fbuf,		      int x, int y, int width, int height,		      struct video_clip *clips, int n);void bttv_sort_clips(struct video_clip *clips, int nclips);int bttv_risc_overlay(struct bttv *btv, struct bttv_riscmem *risc,		      const struct bttv_format *fmt,		      struct bttv_overlay *ov, int flags);/* calculate / apply geometry settings */void bttv_calc_geo(struct bttv *btv, struct bttv_geometry *geo,		   int width, int height, int interleaved, int norm);void bttv_apply_geo(struct bttv *btv, struct bttv_geometry *geo, int odd);/* control dma register + risc main loop */void bttv_set_dma(struct bttv *btv, int override, int irqflags);int bttv_risc_init_main(struct bttv *btv);int bttv_risc_hook(struct bttv *btv, int slot, struct bttv_riscmem *risc,		   int irqflags);/* capture buffer handling */int bttv_buffer_field(struct bttv *btv, int field, int def_field,		      int tvnorm, int height);int bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf);int bttv_buffer_activate(struct bttv *btv, struct bttv_buffer *odd,			 struct bttv_buffer *even);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                                                 */extern struct video_device bttv_vbi_template;/* ---------------------------------------------------------- *//* 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 bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg);extern void bttv_reinit_bt848(struct bttv *btv);extern void bttv_field_count(struct bttv *btv);#define vprintk  if (bttv_verbose) printk#define dprintk  if (bttv_debug >= 1) printk#define d2printk if (bttv_debug >= 2) printk/* our devices */#define BTTV_MAX 4extern int bttv_num;extern struct bttv bttvs[BTTV_MAX];#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 */};struct bttv {	/* pci device config */	struct pci_dev *dev;	unsigned short id;	unsigned char revision;	unsigned char *bt848_mmio;   /* pointer to mmio */	/* card configuration info */        unsigned int nr;       /* dev nr (for printk("bttv%d: ...");  */	char name[8];          /* dev name */	int cardid;            /* pci subsystem id (bt878 based ones) */	int type;              /* card type (pointer into tvcards[])  */        int tuner_type;        /* tuner chip type */	struct bttv_pll_info pll;	int triton1;	/* gpio interface */	wait_queue_head_t gpioq;	int shutdown;	/* i2c layer */	struct i2c_adapter         i2c_adap;	struct i2c_algo_bit_data   i2c_algo;	struct i2c_client          i2c_client;	int                        i2c_state, i2c_rc;	struct i2c_client         *i2c_clients[I2C_CLIENTS_MAX];	/* video4linux (1) */	struct video_device video_dev;	struct video_device radio_dev;	struct video_device vbi_dev;	/* locking */	spinlock_t s_lock;        struct semaphore lock;	int resources;        struct semaphore reslock;	/* video state */	int input;	int audio;	unsigned long freq;	int tvnorm,hue,contrast,bright,saturation;	struct video_buffer fbuf;	int field_count;	/* various options */	int opt_combfilter;	int opt_lumafilter;	int opt_automute;	int opt_chroma_agc;	int opt_adc_crush;	/* vbi data/state */	struct bttv_vbi vbi;	/* radio data/state */	int has_radio;	int has_matchbox;        int mbox_we;	int mbox_data;	int mbox_clk;	int mbox_most;	int mbox_mask;	int radio_user;		/* risc memory management data	   - must aquire s_lock before changing these	   - only the irq handler is supported to touch odd + even */	struct bttv_riscmem    main;	struct bttv_buffer     *odd;       /* current active odd field   */	struct bttv_buffer     *even;      /* current active even field  */	struct bttv_buffer     *screen;    /* overlay                    */	struct list_head       capture;    /* capture buffer queue       */	struct bttv_buffer     *vcurr;	struct list_head       vcapture;	unsigned long cap_ctl;	unsigned long dma_on;	struct timer_list timeout;	int errors;	int user;	struct bttv_fh init;};/* 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), (char *) (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 + =
减小字号Ctrl + -
显示快捷键?