⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ivtv-driver.h

📁 linux内核源码
💻 H
📖 第 1 页 / 共 2 页
字号:
	u32 dst_w;	u32 dst_h;	s32 pan_x;	s32 pan_y;	u32 vis_w;	u32 vis_h;	u32 interlaced_y;	u32 interlaced_uv;	s32 tru_x;	u32 tru_w;	u32 tru_h;	u32 offset_y;	s32 lace_mode;};#define IVTV_YUV_MODE_INTERLACED	0x00#define IVTV_YUV_MODE_PROGRESSIVE	0x01#define IVTV_YUV_MODE_AUTO		0x02#define IVTV_YUV_MODE_MASK		0x03#define IVTV_YUV_SYNC_EVEN		0x00#define IVTV_YUV_SYNC_ODD		0x04#define IVTV_YUV_SYNC_MASK		0x04struct yuv_playback_info{	u32 reg_2834;	u32 reg_2838;	u32 reg_283c;	u32 reg_2840;	u32 reg_2844;	u32 reg_2848;	u32 reg_2854;	u32 reg_285c;	u32 reg_2864;	u32 reg_2870;	u32 reg_2874;	u32 reg_2890;	u32 reg_2898;	u32 reg_289c;	u32 reg_2918;	u32 reg_291c;	u32 reg_2920;	u32 reg_2924;	u32 reg_2928;	u32 reg_292c;	u32 reg_2930;	u32 reg_2934;	u32 reg_2938;	u32 reg_293c;	u32 reg_2940;	u32 reg_2944;	u32 reg_2948;	u32 reg_294c;	u32 reg_2950;	u32 reg_2954;	u32 reg_2958;	u32 reg_295c;	u32 reg_2960;	u32 reg_2964;	u32 reg_2968;	u32 reg_296c;	u32 reg_2970;	int v_filter_1;	int v_filter_2;	int h_filter;	u32 osd_x_offset;	u32 osd_y_offset;	u32 osd_x_pan;	u32 osd_y_pan;	u32 osd_vis_w;	u32 osd_vis_h;	int decode_height;	int frame_interlaced;	int lace_mode;	int lace_threshold;	int lace_sync_field;	atomic_t next_dma_frame;	atomic_t next_fill_frame;	u32 yuv_forced_update;	int update_frame;	int sync_field[4];  /* Field to sync on */	int field_delay[4]; /* Flag to extend duration of previous frame */	u8 fields_lapsed;   /* Counter used when delaying a frame */	struct yuv_frame_info new_frame_info[4];	struct yuv_frame_info old_frame_info;	struct yuv_frame_info old_frame_info_args;	void *blanking_ptr;	dma_addr_t blanking_dmaptr;};#define IVTV_VBI_FRAMES 32/* VBI data */struct vbi_cc {	u8 odd[2];	/* two-byte payload of odd field */	u8 even[2];	/* two-byte payload of even field */;};struct vbi_vps {	u8 data[5];	/* five-byte VPS payload */};struct vbi_info {	/* VBI general data, does not change during streaming */	u32 raw_decoder_line_size;              /* raw VBI line size from digitizer */	u8 raw_decoder_sav_odd_field;           /* raw VBI Start Active Video digitizer code of odd field */	u8 raw_decoder_sav_even_field;          /* raw VBI Start Active Video digitizer code of even field */	u32 sliced_decoder_line_size;           /* sliced VBI line size from digitizer */	u8 sliced_decoder_sav_odd_field;        /* sliced VBI Start Active Video digitizer code of odd field */	u8 sliced_decoder_sav_even_field;       /* sliced VBI Start Active Video digitizer code of even field */	u32 start[2];				/* start of first VBI line in the odd/even fields */	u32 count;				/* number of VBI lines per field */	u32 raw_size;				/* size of raw VBI line from the digitizer */	u32 sliced_size;			/* size of sliced VBI line from the digitizer */	u32 dec_start;				/* start in decoder memory of VBI re-insertion buffers */	u32 enc_start;				/* start in encoder memory of VBI capture buffers */	u32 enc_size;				/* size of VBI capture area */	int fpi;				/* number of VBI frames per interrupt */	struct v4l2_format in;			/* current VBI capture format */	struct v4l2_sliced_vbi_format *sliced_in; /* convenience pointer to sliced struct in vbi.in union */	int insert_mpeg;			/* if non-zero, then embed VBI data in MPEG stream */	/* Raw VBI compatibility hack */	u32 frame; 				/* frame counter hack needed for backwards compatibility						   of old VBI software */	/* Sliced VBI output data */	struct vbi_cc cc_payload[256];		/* sliced VBI CC payload array: it is an array to						   prevent dropping CC data if they couldn't be						   processed fast enough */	int cc_payload_idx;			/* index in cc_payload */	u8 cc_missing_cnt;			/* counts number of frames without CC for passthrough mode */	int wss_payload;			/* sliced VBI WSS payload */	u8 wss_missing_cnt;			/* counts number of frames without WSS for passthrough mode */	struct vbi_vps vps_payload;		/* sliced VBI VPS payload */	/* Sliced VBI capture data */	struct v4l2_sliced_vbi_data sliced_data[36];	/* sliced VBI storage for VBI encoder stream */	struct v4l2_sliced_vbi_data sliced_dec_data[36];/* sliced VBI storage for VBI decoder stream */	/* VBI Embedding data */	/* Buffer for VBI data inserted into MPEG stream.	   The first byte is a dummy byte that's never used.	   The next 16 bytes contain the MPEG header for the VBI data,	   the remainder is the actual VBI data.	   The max size accepted by the MPEG VBI reinsertion turns out	   to be 1552 bytes, which happens to be 4 + (1 + 42) * (2 * 18) bytes,	   where 4 is a four byte header, 42 is the max sliced VBI payload, 1 is	   a single line header byte and 2 * 18 is the number of VBI lines per frame.	   However, it seems that the data must be 1K aligned, so we have to	   pad the data until the 1 or 2 K boundary.	   This pointer array will allocate 2049 bytes to store each VBI frame. */	u8 *sliced_mpeg_data[IVTV_VBI_FRAMES];	u32 sliced_mpeg_size[IVTV_VBI_FRAMES];	struct ivtv_buffer sliced_mpeg_buf;	/* temporary buffer holding data from sliced_mpeg_data */	u32 inserted_frame;			/* index in sliced_mpeg_size of next sliced data						   to be inserted in the MPEG stream */};/* forward declaration of struct defined in ivtv-cards.h */struct ivtv_card;/* Struct to hold info about ivtv cards */struct ivtv {	/* General fixed card data */	int num;			/* board number, -1 during init! */	char name[8];			/* board name for printk and interrupts (e.g. 'ivtv0') */	struct pci_dev *dev;		/* PCI device */	const struct ivtv_card *card;	/* card information */	const char *card_name;          /* full name of the card */	u8 has_cx23415;			/* 1 if it is a cx23415 based card, 0 for cx23416 */	u8 pvr150_workaround;           /* 1 if the cx25840 needs to workaround a PVR150 bug */	u8 nof_inputs;			/* number of video inputs */	u8 nof_audio_inputs;		/* number of audio inputs */	u32 v4l2_cap;			/* V4L2 capabilities of card */	u32 hw_flags; 			/* hardware description of the board */	int tunerid;			/* userspace tuner ID for experimental Xceive tuner support */	v4l2_std_id tuner_std;		/* the norm of the card's tuner (fixed) */					/* controlling video decoder function */	int (*video_dec_func)(struct ivtv *, unsigned int, void *);	u32 base_addr;                  /* PCI resource base address */	volatile void __iomem *enc_mem; /* pointer to mapped encoder memory */	volatile void __iomem *dec_mem; /* pointer to mapped decoder memory */	volatile void __iomem *reg_mem; /* pointer to mapped registers */	struct ivtv_options options; 	/* user options */	/* High-level state info */	unsigned long i_flags;          /* global ivtv flags */	u8 is_50hz;                     /* 1 if the current capture standard is 50 Hz */	u8 is_60hz                      /* 1 if the current capture standard is 60 Hz */;	u8 is_out_50hz                  /* 1 if the current TV output standard is 50 Hz */;	u8 is_out_60hz                  /* 1 if the current TV output standard is 60 Hz */;	int output_mode;                /* decoder output mode: NONE, MPG, YUV, UDMA YUV, passthrough */	u32 audio_input;                /* current audio input */	u32 active_input;               /* current video input */	u32 active_output;              /* current video output */	v4l2_std_id std;                /* current capture TV standard */	v4l2_std_id std_out;            /* current TV output standard */	u8 audio_stereo_mode;           /* decoder setting how to handle stereo MPEG audio */	u8 audio_bilingual_mode;        /* decoder setting how to handle bilingual MPEG audio */	struct cx2341x_mpeg_params params;              /* current encoder parameters */	/* Locking */	spinlock_t lock;                /* lock access to this struct */	struct mutex serialize_lock;    /* mutex used to serialize open/close/start/stop/ioctl operations */	/* Streams */	int stream_buf_size[IVTV_MAX_STREAMS];          /* stream buffer size */	struct ivtv_stream streams[IVTV_MAX_STREAMS]; 	/* stream data */	atomic_t capturing;		/* count number of active capture streams */	atomic_t decoding;		/* count number of active decoding streams */	/* Interrupts & DMA */	u32 irqmask;                    /* active interrupts */	u32 irq_rr_idx;                 /* round-robin stream index */	struct workqueue_struct *irq_work_queues;       /* workqueue for PIO/YUV/VBI actions */	struct work_struct irq_work_queue;              /* work entry */	spinlock_t dma_reg_lock;        /* lock access to DMA engine registers */	int cur_dma_stream;		/* index of current stream doing DMA (-1 if none) */	int cur_pio_stream;		/* index of current stream doing PIO (-1 if none) */	u32 dma_data_req_offset;        /* store offset in decoder memory of current DMA request */	u32 dma_data_req_size;          /* store size of current DMA request */	int dma_retries;                /* current DMA retry attempt */	struct ivtv_user_dma udma;      /* user based DMA for OSD */	struct timer_list dma_timer;    /* timer used to catch unfinished DMAs */	u32 last_vsync_field;           /* last seen vsync field */	wait_queue_head_t dma_waitq;    /* wake up when the current DMA is finished */	wait_queue_head_t eos_waitq;    /* wake up when EOS arrives */	wait_queue_head_t event_waitq;  /* wake up when the next decoder event arrives */	wait_queue_head_t vsync_waitq;  /* wake up when the next decoder vsync arrives */	/* Mailbox */	struct ivtv_mailbox_data enc_mbox;              /* encoder mailboxes */	struct ivtv_mailbox_data dec_mbox;              /* decoder mailboxes */	struct ivtv_api_cache api_cache[256]; 		/* cached API commands */	/* I2C */	struct i2c_adapter i2c_adap;	struct i2c_algo_bit_data i2c_algo;	struct i2c_client i2c_client;	struct i2c_client *i2c_clients[I2C_CLIENTS_MAX];/* pointers to all I2C clients */	int i2c_state;                  /* i2c bit state */	struct mutex i2c_bus_lock;      /* lock i2c bus */	/* Program Index information */	u32 pgm_info_offset;            /* start of pgm info in encoder memory */	u32 pgm_info_num;               /* number of elements in the pgm cyclic buffer in encoder memory */	u32 pgm_info_write_idx;         /* last index written by the card that was transferred to pgm_info[] */	u32 pgm_info_read_idx;          /* last index in pgm_info read by the application */	struct v4l2_enc_idx_entry pgm_info[IVTV_MAX_PGM_INDEX]; /* filled from the pgm cyclic buffer on the card */	/* Miscellaneous */	u32 open_id;			/* incremented each time an open occurs, is >= 1 */	struct v4l2_prio_state prio;    /* priority state */	int search_pack_header;         /* 1 if ivtv_copy_buf_to_user() is scanning for a pack header (0xba) */	int speed;                      /* current playback speed setting */	u8 speed_mute_audio;            /* 1 if audio should be muted when fast forward */	u64 mpg_data_received;          /* number of bytes received from the MPEG stream */	u64 vbi_data_inserted;          /* number of VBI bytes inserted into the MPEG stream */	u32 last_dec_timing[3];         /* cache last retrieved pts/scr/frame values */	unsigned long dualwatch_jiffies;/* jiffies value of the previous dualwatch check */	u16 dualwatch_stereo_mode;      /* current detected dualwatch stereo mode */	/* VBI state info */	struct vbi_info vbi;            /* VBI-specific data */	/* YUV playback */	struct yuv_playback_info yuv_info;              /* YUV playback data */	/* OSD support */	unsigned long osd_video_pbase;	int osd_global_alpha_state;     /* 1 = global alpha is on */	int osd_local_alpha_state;      /* 1 = local alpha is on */	int osd_chroma_key_state;       /* 1 = chroma-keying is on */	u8  osd_global_alpha;           /* current global alpha */	u32 osd_chroma_key;             /* current chroma key */	struct v4l2_rect osd_rect;      /* current OSD position and size */	struct v4l2_rect main_rect;     /* current Main window position and size */	struct osd_info *osd_info;      /* ivtvfb private OSD info */};/* Globals */extern struct ivtv *ivtv_cards[];extern int ivtv_cards_active;extern int ivtv_first_minor;extern spinlock_t ivtv_cards_lock;/*==============Prototypes==================*//* Hardware/IRQ */void ivtv_set_irq_mask(struct ivtv *itv, u32 mask);void ivtv_clear_irq_mask(struct ivtv *itv, u32 mask);/* try to set output mode, return current mode. */int ivtv_set_output_mode(struct ivtv *itv, int mode);/* return current output stream based on current mode */struct ivtv_stream *ivtv_get_output_stream(struct ivtv *itv);/* Return non-zero if a signal is pending */int ivtv_msleep_timeout(unsigned int msecs, int intr);/* Wait on queue, returns -EINTR if interrupted */int ivtv_waitq(wait_queue_head_t *waitq);/* Read Hauppauge eeprom */struct tveeprom; /* forward reference */void ivtv_read_eeprom(struct ivtv *itv, struct tveeprom *tv);/* First-open initialization: load firmware, init cx25840, etc. */int ivtv_init_on_first_open(struct ivtv *itv);/* This is a PCI post thing, where if the pci register is not read, then   the write doesn't always take effect right away. By reading back the   register any pending PCI writes will be performed (in order), and so   you can be sure that the writes are guaranteed to be done.   Rarely needed, only in some timing sensitive cases.   Apparently if this is not done some motherboards seem   to kill the firmware and get into the broken state until computer is   rebooted. */#define write_sync(val, reg) \	do { writel(val, reg); readl(reg); } while (0)#define read_reg(reg) readl(itv->reg_mem + (reg))#define write_reg(val, reg) writel(val, itv->reg_mem + (reg))#define write_reg_sync(val, reg) \	do { write_reg(val, reg); read_reg(reg); } while (0)#define read_enc(addr) readl(itv->enc_mem + (u32)(addr))#define write_enc(val, addr) writel(val, itv->enc_mem + (u32)(addr))#define write_enc_sync(val, addr) \	do { write_enc(val, addr); read_enc(addr); } while (0)#define read_dec(addr) readl(itv->dec_mem + (u32)(addr))#define write_dec(val, addr) writel(val, itv->dec_mem + (u32)(addr))#define write_dec_sync(val, addr) \	do { write_dec(val, addr); read_dec(addr); } while (0)#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -