1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#ifndef IVTV_DRIVER_H
23#define IVTV_DRIVER_H
24
25#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40#include <linux/module.h>
41#include <linux/init.h>
42#include <linux/delay.h>
43#include <linux/sched/signal.h>
44#include <linux/fs.h>
45#include <linux/pci.h>
46#include <linux/interrupt.h>
47#include <linux/spinlock.h>
48#include <linux/i2c.h>
49#include <linux/i2c-algo-bit.h>
50#include <linux/list.h>
51#include <linux/unistd.h>
52#include <linux/pagemap.h>
53#include <linux/scatterlist.h>
54#include <linux/kthread.h>
55#include <linux/mutex.h>
56#include <linux/slab.h>
57#include <linux/uaccess.h>
58#include <asm/byteorder.h>
59
60#include <linux/dvb/video.h>
61#include <linux/dvb/audio.h>
62#include <media/v4l2-common.h>
63#include <media/v4l2-ioctl.h>
64#include <media/v4l2-ctrls.h>
65#include <media/v4l2-device.h>
66#include <media/v4l2-fh.h>
67#include <media/tuner.h>
68#include <media/drv-intf/cx2341x.h>
69#include <media/i2c/ir-kbd-i2c.h>
70
71#include <linux/ivtv.h>
72
73
74#define IVTV_ENCODER_OFFSET 0x00000000
75#define IVTV_ENCODER_SIZE 0x00800000
76#define IVTV_DECODER_OFFSET 0x01000000
77#define IVTV_DECODER_SIZE 0x00800000
78#define IVTV_REG_OFFSET 0x02000000
79#define IVTV_REG_SIZE 0x00010000
80
81
82
83#define IVTV_MAX_CARDS 32
84
85#define IVTV_ENC_STREAM_TYPE_MPG 0
86#define IVTV_ENC_STREAM_TYPE_YUV 1
87#define IVTV_ENC_STREAM_TYPE_VBI 2
88#define IVTV_ENC_STREAM_TYPE_PCM 3
89#define IVTV_ENC_STREAM_TYPE_RAD 4
90#define IVTV_DEC_STREAM_TYPE_MPG 5
91#define IVTV_DEC_STREAM_TYPE_VBI 6
92#define IVTV_DEC_STREAM_TYPE_VOUT 7
93#define IVTV_DEC_STREAM_TYPE_YUV 8
94#define IVTV_MAX_STREAMS 9
95
96#define IVTV_DMA_SG_OSD_ENT (2883584/PAGE_SIZE)
97
98
99#define IVTV_REG_DMAXFER (0x0000)
100#define IVTV_REG_DMASTATUS (0x0004)
101#define IVTV_REG_DECDMAADDR (0x0008)
102#define IVTV_REG_ENCDMAADDR (0x000c)
103#define IVTV_REG_DMACONTROL (0x0010)
104#define IVTV_REG_IRQSTATUS (0x0040)
105#define IVTV_REG_IRQMASK (0x0048)
106
107
108#define IVTV_REG_ENC_SDRAM_REFRESH (0x07F8)
109#define IVTV_REG_ENC_SDRAM_PRECHARGE (0x07FC)
110#define IVTV_REG_DEC_SDRAM_REFRESH (0x08F8)
111#define IVTV_REG_DEC_SDRAM_PRECHARGE (0x08FC)
112#define IVTV_REG_VDM (0x2800)
113#define IVTV_REG_AO (0x2D00)
114#define IVTV_REG_BYTEFLUSH (0x2D24)
115#define IVTV_REG_SPU (0x9050)
116#define IVTV_REG_HW_BLOCKS (0x9054)
117#define IVTV_REG_VPU (0x9058)
118#define IVTV_REG_APU (0xA064)
119
120
121#define IVTV_REG_DEC_LINE_FIELD (0x28C0)
122
123
124extern int ivtv_debug;
125#ifdef CONFIG_VIDEO_ADV_DEBUG
126extern int ivtv_fw_debug;
127#endif
128
129#define IVTV_DBGFLG_WARN (1 << 0)
130#define IVTV_DBGFLG_INFO (1 << 1)
131#define IVTV_DBGFLG_MB (1 << 2)
132#define IVTV_DBGFLG_IOCTL (1 << 3)
133#define IVTV_DBGFLG_FILE (1 << 4)
134#define IVTV_DBGFLG_DMA (1 << 5)
135#define IVTV_DBGFLG_IRQ (1 << 6)
136#define IVTV_DBGFLG_DEC (1 << 7)
137#define IVTV_DBGFLG_YUV (1 << 8)
138#define IVTV_DBGFLG_I2C (1 << 9)
139
140#define IVTV_DBGFLG_HIGHVOL (1 << 10)
141
142#define IVTV_DEBUG(x, type, fmt, args...) \
143 do { \
144 if ((x) & ivtv_debug) \
145 v4l2_info(&itv->v4l2_dev, " " type ": " fmt , ##args); \
146 } while (0)
147#define IVTV_DEBUG_WARN(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_WARN, "warn", fmt , ## args)
148#define IVTV_DEBUG_INFO(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_INFO, "info", fmt , ## args)
149#define IVTV_DEBUG_MB(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_MB, "mb", fmt , ## args)
150#define IVTV_DEBUG_DMA(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_DMA, "dma", fmt , ## args)
151#define IVTV_DEBUG_IOCTL(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_IOCTL, "ioctl", fmt , ## args)
152#define IVTV_DEBUG_FILE(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_FILE, "file", fmt , ## args)
153#define IVTV_DEBUG_I2C(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_I2C, "i2c", fmt , ## args)
154#define IVTV_DEBUG_IRQ(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_IRQ, "irq", fmt , ## args)
155#define IVTV_DEBUG_DEC(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_DEC, "dec", fmt , ## args)
156#define IVTV_DEBUG_YUV(fmt, args...) IVTV_DEBUG(IVTV_DBGFLG_YUV, "yuv", fmt , ## args)
157
158#define IVTV_DEBUG_HIGH_VOL(x, type, fmt, args...) \
159 do { \
160 if (((x) & ivtv_debug) && (ivtv_debug & IVTV_DBGFLG_HIGHVOL)) \
161 v4l2_info(&itv->v4l2_dev, " " type ": " fmt , ##args); \
162 } while (0)
163#define IVTV_DEBUG_HI_WARN(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_WARN, "warn", fmt , ## args)
164#define IVTV_DEBUG_HI_INFO(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_INFO, "info", fmt , ## args)
165#define IVTV_DEBUG_HI_MB(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_MB, "mb", fmt , ## args)
166#define IVTV_DEBUG_HI_DMA(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_DMA, "dma", fmt , ## args)
167#define IVTV_DEBUG_HI_IOCTL(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_IOCTL, "ioctl", fmt , ## args)
168#define IVTV_DEBUG_HI_FILE(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_FILE, "file", fmt , ## args)
169#define IVTV_DEBUG_HI_I2C(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_I2C, "i2c", fmt , ## args)
170#define IVTV_DEBUG_HI_IRQ(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_IRQ, "irq", fmt , ## args)
171#define IVTV_DEBUG_HI_DEC(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_DEC, "dec", fmt , ## args)
172#define IVTV_DEBUG_HI_YUV(fmt, args...) IVTV_DEBUG_HIGH_VOL(IVTV_DBGFLG_YUV, "yuv", fmt , ## args)
173
174
175#define IVTV_ERR(fmt, args...) v4l2_err(&itv->v4l2_dev, fmt , ## args)
176#define IVTV_WARN(fmt, args...) v4l2_warn(&itv->v4l2_dev, fmt , ## args)
177#define IVTV_INFO(fmt, args...) v4l2_info(&itv->v4l2_dev, fmt , ## args)
178
179
180#define OUT_NONE 0
181#define OUT_MPG 1
182#define OUT_YUV 2
183#define OUT_UDMA_YUV 3
184#define OUT_PASSTHROUGH 4
185
186#define IVTV_MAX_PGM_INDEX (400)
187
188
189#define IVTV_DEFAULT_I2C_CLOCK_PERIOD 20
190
191struct ivtv_options {
192 int kilobytes[IVTV_MAX_STREAMS];
193 int cardtype;
194 int tuner;
195 int radio;
196 int newi2c;
197 int i2c_clock_period;
198};
199
200
201struct ivtv_mailbox {
202 u32 flags;
203 u32 cmd;
204 u32 retval;
205 u32 timeout;
206 u32 data[CX2341X_MBOX_MAX_DATA];
207};
208
209struct ivtv_api_cache {
210 unsigned long last_jiffies;
211 u32 data[CX2341X_MBOX_MAX_DATA];
212};
213
214struct ivtv_mailbox_data {
215 volatile struct ivtv_mailbox __iomem *mbox;
216
217
218 unsigned long busy;
219 u8 max_mbox;
220};
221
222
223#define IVTV_F_B_NEED_BUF_SWAP (1 << 0)
224
225
226#define IVTV_F_S_DMA_PENDING 0
227#define IVTV_F_S_DMA_HAS_VBI 1
228#define IVTV_F_S_NEEDS_DATA 2
229
230#define IVTV_F_S_CLAIMED 3
231#define IVTV_F_S_STREAMING 4
232#define IVTV_F_S_INTERNAL_USE 5
233#define IVTV_F_S_PASSTHROUGH 6
234#define IVTV_F_S_STREAMOFF 7
235#define IVTV_F_S_APPL_IO 8
236
237#define IVTV_F_S_PIO_PENDING 9
238#define IVTV_F_S_PIO_HAS_VBI 1
239
240
241#define IVTV_F_I_DMA 0
242#define IVTV_F_I_UDMA 1
243#define IVTV_F_I_UDMA_PENDING 2
244#define IVTV_F_I_SPEED_CHANGE 3
245#define IVTV_F_I_EOS 4
246#define IVTV_F_I_RADIO_USER 5
247#define IVTV_F_I_DIG_RST 6
248#define IVTV_F_I_DEC_YUV 7
249#define IVTV_F_I_UPDATE_CC 9
250#define IVTV_F_I_UPDATE_WSS 10
251#define IVTV_F_I_UPDATE_VPS 11
252#define IVTV_F_I_DECODING_YUV 12
253#define IVTV_F_I_ENC_PAUSED 13
254#define IVTV_F_I_VALID_DEC_TIMINGS 14
255#define IVTV_F_I_HAVE_WORK 15
256#define IVTV_F_I_WORK_HANDLER_VBI 16
257#define IVTV_F_I_WORK_HANDLER_YUV 17
258#define IVTV_F_I_WORK_HANDLER_PIO 18
259#define IVTV_F_I_PIO 19
260#define IVTV_F_I_DEC_PAUSED 20
261#define IVTV_F_I_INITED 21
262#define IVTV_F_I_FAILED 22
263#define IVTV_F_I_WORK_HANDLER_PCM 23
264
265
266#define IVTV_F_I_EV_DEC_STOPPED 28
267#define IVTV_F_I_EV_VSYNC 29
268#define IVTV_F_I_EV_VSYNC_FIELD 30
269#define IVTV_F_I_EV_VSYNC_ENABLED 31
270
271
272struct ivtv_sg_element {
273 __le32 src;
274 __le32 dst;
275 __le32 size;
276};
277
278struct ivtv_sg_host_element {
279 u32 src;
280 u32 dst;
281 u32 size;
282};
283
284struct ivtv_user_dma {
285 struct mutex lock;
286 int page_count;
287 struct page *map[IVTV_DMA_SG_OSD_ENT];
288
289 struct page *bouncemap[IVTV_DMA_SG_OSD_ENT];
290
291
292 struct ivtv_sg_element SGarray[IVTV_DMA_SG_OSD_ENT];
293 dma_addr_t SG_handle;
294 int SG_length;
295
296
297 struct scatterlist SGlist[IVTV_DMA_SG_OSD_ENT];
298};
299
300struct ivtv_dma_page_info {
301 unsigned long uaddr;
302 unsigned long first;
303 unsigned long last;
304 unsigned int offset;
305 unsigned int tail;
306 int page_count;
307};
308
309struct ivtv_buffer {
310 struct list_head list;
311 dma_addr_t dma_handle;
312 unsigned short b_flags;
313 unsigned short dma_xfer_cnt;
314 char *buf;
315 u32 bytesused;
316 u32 readpos;
317};
318
319struct ivtv_queue {
320 struct list_head list;
321 u32 buffers;
322 u32 length;
323 u32 bytesused;
324};
325
326struct ivtv;
327
328struct ivtv_stream {
329
330
331 struct video_device vdev;
332 struct ivtv *itv;
333 const char *name;
334 int type;
335 u32 caps;
336
337 struct v4l2_fh *fh;
338 spinlock_t qlock;
339 unsigned long s_flags;
340 int dma;
341 u32 pending_offset;
342 u32 pending_backup;
343 u64 pending_pts;
344
345 u32 dma_offset;
346 u32 dma_backup;
347 u64 dma_pts;
348
349 int subtype;
350 wait_queue_head_t waitq;
351 u32 dma_last_offset;
352
353
354 u32 buffers;
355 u32 buf_size;
356 u32 buffers_stolen;
357
358
359 struct ivtv_queue q_free;
360 struct ivtv_queue q_full;
361 struct ivtv_queue q_io;
362 struct ivtv_queue q_dma;
363 struct ivtv_queue q_predma;
364
365
366
367 u16 dma_xfer_cnt;
368
369
370 struct ivtv_sg_host_element *sg_pending;
371 struct ivtv_sg_host_element *sg_processing;
372 struct ivtv_sg_element *sg_dma;
373 dma_addr_t sg_handle;
374 int sg_pending_size;
375 int sg_processing_size;
376 int sg_processed;
377
378
379 struct scatterlist *SGlist;
380};
381
382struct ivtv_open_id {
383 struct v4l2_fh fh;
384 int type;
385 int yuv_frames;
386 struct ivtv *itv;
387};
388
389static inline struct ivtv_open_id *fh2id(struct v4l2_fh *fh)
390{
391 return container_of(fh, struct ivtv_open_id, fh);
392}
393
394struct yuv_frame_info
395{
396 u32 update;
397 s32 src_x;
398 s32 src_y;
399 u32 src_w;
400 u32 src_h;
401 s32 dst_x;
402 s32 dst_y;
403 u32 dst_w;
404 u32 dst_h;
405 s32 pan_x;
406 s32 pan_y;
407 u32 vis_w;
408 u32 vis_h;
409 u32 interlaced_y;
410 u32 interlaced_uv;
411 s32 tru_x;
412 u32 tru_w;
413 u32 tru_h;
414 u32 offset_y;
415 s32 lace_mode;
416 u32 sync_field;
417 u32 delay;
418 u32 interlaced;
419};
420
421#define IVTV_YUV_MODE_INTERLACED 0x00
422#define IVTV_YUV_MODE_PROGRESSIVE 0x01
423#define IVTV_YUV_MODE_AUTO 0x02
424#define IVTV_YUV_MODE_MASK 0x03
425
426#define IVTV_YUV_SYNC_EVEN 0x00
427#define IVTV_YUV_SYNC_ODD 0x04
428#define IVTV_YUV_SYNC_MASK 0x04
429
430#define IVTV_YUV_BUFFERS 8
431
432struct yuv_playback_info
433{
434 u32 reg_2834;
435 u32 reg_2838;
436 u32 reg_283c;
437 u32 reg_2840;
438 u32 reg_2844;
439 u32 reg_2848;
440 u32 reg_2854;
441 u32 reg_285c;
442 u32 reg_2864;
443
444 u32 reg_2870;
445 u32 reg_2874;
446 u32 reg_2890;
447 u32 reg_2898;
448 u32 reg_289c;
449
450 u32 reg_2918;
451 u32 reg_291c;
452 u32 reg_2920;
453 u32 reg_2924;
454 u32 reg_2928;
455 u32 reg_292c;
456 u32 reg_2930;
457
458 u32 reg_2934;
459
460 u32 reg_2938;
461 u32 reg_293c;
462 u32 reg_2940;
463 u32 reg_2944;
464 u32 reg_2948;
465 u32 reg_294c;
466 u32 reg_2950;
467 u32 reg_2954;
468 u32 reg_2958;
469 u32 reg_295c;
470 u32 reg_2960;
471 u32 reg_2964;
472 u32 reg_2968;
473 u32 reg_296c;
474
475 u32 reg_2970;
476
477 int v_filter_1;
478 int v_filter_2;
479 int h_filter;
480
481 u8 track_osd;
482
483 u32 osd_x_offset;
484 u32 osd_y_offset;
485
486 u32 osd_x_pan;
487 u32 osd_y_pan;
488
489 u32 osd_vis_w;
490 u32 osd_vis_h;
491
492 u32 osd_full_w;
493 u32 osd_full_h;
494
495 int decode_height;
496
497 int lace_mode;
498 int lace_threshold;
499 int lace_sync_field;
500
501 atomic_t next_dma_frame;
502 atomic_t next_fill_frame;
503
504 u32 yuv_forced_update;
505 int update_frame;
506
507 u8 fields_lapsed;
508
509 struct yuv_frame_info new_frame_info[IVTV_YUV_BUFFERS];
510 struct yuv_frame_info old_frame_info;
511 struct yuv_frame_info old_frame_info_args;
512
513 void *blanking_ptr;
514 dma_addr_t blanking_dmaptr;
515
516 int stream_size;
517
518 u8 draw_frame;
519 u8 max_frames_buffered;
520
521 struct v4l2_rect main_rect;
522 u32 v4l2_src_w;
523 u32 v4l2_src_h;
524
525 u8 running;
526};
527
528#define IVTV_VBI_FRAMES 32
529
530
531struct vbi_cc {
532 u8 odd[2];
533 u8 even[2]; ;
534};
535
536struct vbi_vps {
537 u8 data[5];
538};
539
540struct vbi_info {
541
542
543 u32 raw_decoder_line_size;
544 u8 raw_decoder_sav_odd_field;
545 u8 raw_decoder_sav_even_field;
546 u32 sliced_decoder_line_size;
547 u8 sliced_decoder_sav_odd_field;
548 u8 sliced_decoder_sav_even_field;
549
550 u32 start[2];
551 u32 count;
552 u32 raw_size;
553 u32 sliced_size;
554
555 u32 dec_start;
556 u32 enc_start;
557 u32 enc_size;
558 int fpi;
559
560 struct v4l2_format in;
561 struct v4l2_sliced_vbi_format *sliced_in;
562 int insert_mpeg;
563
564
565
566 u32 frame;
567
568
569
570
571 struct vbi_cc cc_payload[256];
572
573
574 int cc_payload_idx;
575 u8 cc_missing_cnt;
576 int wss_payload;
577 u8 wss_missing_cnt;
578 struct vbi_vps vps_payload;
579
580
581
582 struct v4l2_sliced_vbi_data sliced_data[36];
583 struct v4l2_sliced_vbi_data sliced_dec_data[36];
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600 u8 *sliced_mpeg_data[IVTV_VBI_FRAMES];
601 u32 sliced_mpeg_size[IVTV_VBI_FRAMES];
602 struct ivtv_buffer sliced_mpeg_buf;
603 u32 inserted_frame;
604
605};
606
607
608struct ivtv_card;
609
610
611struct ivtv {
612
613 struct pci_dev *pdev;
614 const struct ivtv_card *card;
615 const char *card_name;
616 const struct ivtv_card_tuner_i2c *card_i2c;
617 u8 has_cx23415;
618 u8 pvr150_workaround;
619 u8 nof_inputs;
620 u8 nof_audio_inputs;
621 u32 v4l2_cap;
622 u32 hw_flags;
623 v4l2_std_id tuner_std;
624 struct v4l2_subdev *sd_video;
625 struct v4l2_subdev *sd_audio;
626 struct v4l2_subdev *sd_muxer;
627 resource_size_t base_addr;
628 volatile void __iomem *enc_mem;
629 volatile void __iomem *dec_mem;
630 volatile void __iomem *reg_mem;
631 struct ivtv_options options;
632
633 struct v4l2_device v4l2_dev;
634 struct cx2341x_handler cxhdl;
635 struct {
636
637 struct v4l2_ctrl *ctrl_pts;
638 struct v4l2_ctrl *ctrl_frame;
639 };
640 struct {
641
642 struct v4l2_ctrl *ctrl_audio_playback;
643 struct v4l2_ctrl *ctrl_audio_multilingual_playback;
644 };
645 struct v4l2_ctrl_handler hdl_gpio;
646 struct v4l2_subdev sd_gpio;
647 u16 instance;
648
649
650 unsigned long i_flags;
651 u8 is_50hz;
652 u8 is_60hz ;
653 u8 is_out_50hz ;
654 u8 is_out_60hz ;
655 int output_mode;
656 u32 audio_input;
657 u32 active_input;
658 u32 active_output;
659 v4l2_std_id std;
660 v4l2_std_id std_out;
661 u8 audio_stereo_mode;
662 u8 audio_bilingual_mode;
663
664
665 spinlock_t lock;
666 struct mutex serialize_lock;
667
668
669 int stream_buf_size[IVTV_MAX_STREAMS];
670 struct ivtv_stream streams[IVTV_MAX_STREAMS];
671 atomic_t capturing;
672 atomic_t decoding;
673
674
675 struct snd_ivtv_card *alsa;
676 void (*pcm_announce_callback)(struct snd_ivtv_card *card, u8 *pcm_data,
677 size_t num_bytes);
678
679
680 struct work_struct request_module_wk;
681
682
683 u32 irqmask;
684 u32 irq_rr_idx;
685 struct kthread_worker irq_worker;
686 struct task_struct *irq_worker_task;
687 struct kthread_work irq_work;
688 spinlock_t dma_reg_lock;
689 int cur_dma_stream;
690 int cur_pio_stream;
691 u32 dma_data_req_offset;
692 u32 dma_data_req_size;
693 int dma_retries;
694 struct ivtv_user_dma udma;
695 struct timer_list dma_timer;
696 u32 last_vsync_field;
697 wait_queue_head_t dma_waitq;
698 wait_queue_head_t eos_waitq;
699 wait_queue_head_t event_waitq;
700 wait_queue_head_t vsync_waitq;
701
702
703
704 struct ivtv_mailbox_data enc_mbox;
705 struct ivtv_mailbox_data dec_mbox;
706 struct ivtv_api_cache api_cache[256];
707
708
709
710 struct i2c_adapter i2c_adap;
711 struct i2c_algo_bit_data i2c_algo;
712 struct i2c_client i2c_client;
713 int i2c_state;
714 struct mutex i2c_bus_lock;
715
716 struct IR_i2c_init_data ir_i2c_init_data;
717
718
719 u32 pgm_info_offset;
720 u32 pgm_info_num;
721 u32 pgm_info_write_idx;
722 u32 pgm_info_read_idx;
723 struct v4l2_enc_idx_entry pgm_info[IVTV_MAX_PGM_INDEX];
724
725
726
727 u32 open_id;
728 int search_pack_header;
729 int speed;
730 u8 speed_mute_audio;
731 u64 mpg_data_received;
732 u64 vbi_data_inserted;
733 u32 last_dec_timing[3];
734 unsigned long dualwatch_jiffies;
735 u32 dualwatch_stereo_mode;
736
737
738
739 struct vbi_info vbi;
740
741
742
743 struct yuv_playback_info yuv_info;
744
745
746
747 unsigned long osd_video_pbase;
748 int osd_global_alpha_state;
749 int osd_local_alpha_state;
750 int osd_chroma_key_state;
751 u8 osd_global_alpha;
752 u32 osd_chroma_key;
753 struct v4l2_rect osd_rect;
754 struct v4l2_rect main_rect;
755 struct osd_info *osd_info;
756 void (*ivtvfb_restore)(struct ivtv *itv);
757};
758
759static inline struct ivtv *to_ivtv(struct v4l2_device *v4l2_dev)
760{
761 return container_of(v4l2_dev, struct ivtv, v4l2_dev);
762}
763
764
765extern int (*ivtv_ext_init)(struct ivtv *);
766
767
768extern int ivtv_first_minor;
769
770
771
772
773void ivtv_set_irq_mask(struct ivtv *itv, u32 mask);
774void ivtv_clear_irq_mask(struct ivtv *itv, u32 mask);
775
776
777int ivtv_set_output_mode(struct ivtv *itv, int mode);
778
779
780struct ivtv_stream *ivtv_get_output_stream(struct ivtv *itv);
781
782
783int ivtv_msleep_timeout(unsigned int msecs, int intr);
784
785
786int ivtv_waitq(wait_queue_head_t *waitq);
787
788
789struct tveeprom;
790void ivtv_read_eeprom(struct ivtv *itv, struct tveeprom *tv);
791
792
793int ivtv_init_on_first_open(struct ivtv *itv);
794
795
796static inline int ivtv_raw_vbi(const struct ivtv *itv)
797{
798 return itv->vbi.in.type == V4L2_BUF_TYPE_VBI_CAPTURE;
799}
800
801
802
803
804
805
806
807
808
809
810#define write_sync(val, reg) \
811 do { writel(val, reg); readl(reg); } while (0)
812
813#define read_reg(reg) readl(itv->reg_mem + (reg))
814#define write_reg(val, reg) writel(val, itv->reg_mem + (reg))
815#define write_reg_sync(val, reg) \
816 do { write_reg(val, reg); read_reg(reg); } while (0)
817
818#define read_enc(addr) readl(itv->enc_mem + (u32)(addr))
819#define write_enc(val, addr) writel(val, itv->enc_mem + (u32)(addr))
820#define write_enc_sync(val, addr) \
821 do { write_enc(val, addr); read_enc(addr); } while (0)
822
823#define read_dec(addr) readl(itv->dec_mem + (u32)(addr))
824#define write_dec(val, addr) writel(val, itv->dec_mem + (u32)(addr))
825#define write_dec_sync(val, addr) \
826 do { write_dec(val, addr); read_dec(addr); } while (0)
827
828
829
830#define ivtv_call_hw(itv, hw, o, f, args...) \
831 v4l2_device_mask_call_all(&(itv)->v4l2_dev, hw, o, f, ##args)
832
833#define ivtv_call_all(itv, o, f, args...) ivtv_call_hw(itv, 0, o, f , ##args)
834
835
836
837
838#define ivtv_call_hw_err(itv, hw, o, f, args...) \
839 v4l2_device_mask_call_until_err(&(itv)->v4l2_dev, hw, o, f, ##args)
840
841#define ivtv_call_all_err(itv, o, f, args...) ivtv_call_hw_err(itv, 0, o, f , ##args)
842
843#endif
844