Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/media/video/bt8xx/bttvp.h
10785 views
1
/*
2
3
bttv - Bt848 frame grabber driver
4
5
bttv's *private* header file -- nobody other than bttv itself
6
should ever include this file.
7
8
(c) 2000-2002 Gerd Knorr <[email protected]>
9
10
This program is free software; you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation; either version 2 of the License, or
13
(at your option) any later version.
14
15
This program is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
GNU General Public License for more details.
19
20
You should have received a copy of the GNU General Public License
21
along with this program; if not, write to the Free Software
22
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23
*/
24
25
#ifndef _BTTVP_H_
26
#define _BTTVP_H_
27
28
#include <linux/version.h>
29
#define BTTV_VERSION_CODE KERNEL_VERSION(0,9,18)
30
31
#include <linux/types.h>
32
#include <linux/wait.h>
33
#include <linux/i2c.h>
34
#include <linux/i2c-algo-bit.h>
35
#include <linux/pci.h>
36
#include <linux/input.h>
37
#include <linux/mutex.h>
38
#include <linux/scatterlist.h>
39
#include <asm/io.h>
40
#include <media/v4l2-common.h>
41
#include <linux/device.h>
42
#include <media/videobuf-dma-sg.h>
43
#include <media/tveeprom.h>
44
#include <media/rc-core.h>
45
#include <media/ir-kbd-i2c.h>
46
47
#include "bt848.h"
48
#include "bttv.h"
49
#include "btcx-risc.h"
50
51
#ifdef __KERNEL__
52
53
#define FORMAT_FLAGS_DITHER 0x01
54
#define FORMAT_FLAGS_PACKED 0x02
55
#define FORMAT_FLAGS_PLANAR 0x04
56
#define FORMAT_FLAGS_RAW 0x08
57
#define FORMAT_FLAGS_CrCb 0x10
58
59
#define RISC_SLOT_O_VBI 4
60
#define RISC_SLOT_O_FIELD 6
61
#define RISC_SLOT_E_VBI 10
62
#define RISC_SLOT_E_FIELD 12
63
#define RISC_SLOT_LOOP 14
64
65
#define RESOURCE_OVERLAY 1
66
#define RESOURCE_VIDEO_STREAM 2
67
#define RESOURCE_VBI 4
68
#define RESOURCE_VIDEO_READ 8
69
70
#define RAW_LINES 640
71
#define RAW_BPL 1024
72
73
#define UNSET (-1U)
74
75
/* Min. value in VDELAY register. */
76
#define MIN_VDELAY 2
77
/* Even to get Cb first, odd for Cr. */
78
#define MAX_HDELAY (0x3FF & -2)
79
/* Limits scaled width, which must be a multiple of 4. */
80
#define MAX_HACTIVE (0x3FF & -4)
81
82
#define BTTV_NORMS (\
83
V4L2_STD_PAL | V4L2_STD_PAL_N | \
84
V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \
85
V4L2_STD_NTSC | V4L2_STD_PAL_M | \
86
V4L2_STD_PAL_60)
87
/* ---------------------------------------------------------- */
88
89
struct bttv_tvnorm {
90
int v4l2_id;
91
char *name;
92
u32 Fsc;
93
u16 swidth, sheight; /* scaled standard width, height */
94
u16 totalwidth;
95
u8 adelay, bdelay, iform;
96
u32 scaledtwidth;
97
u16 hdelayx1, hactivex1;
98
u16 vdelay;
99
u8 vbipack;
100
u16 vtotal;
101
int sram;
102
/* ITU-R frame line number of the first VBI line we can
103
capture, of the first and second field. The last possible line
104
is determined by cropcap.bounds. */
105
u16 vbistart[2];
106
/* Horizontally this counts fCLKx1 samples following the leading
107
edge of the horizontal sync pulse, vertically ITU-R frame line
108
numbers of the first field times two (2, 4, 6, ... 524 or 624). */
109
struct v4l2_cropcap cropcap;
110
};
111
extern const struct bttv_tvnorm bttv_tvnorms[];
112
113
struct bttv_format {
114
char *name;
115
int fourcc; /* video4linux 2 */
116
int btformat; /* BT848_COLOR_FMT_* */
117
int btswap; /* BT848_COLOR_CTL_* */
118
int depth; /* bit/pixel */
119
int flags;
120
int hshift,vshift; /* for planar modes */
121
};
122
123
struct bttv_ir {
124
struct rc_dev *dev;
125
struct timer_list timer;
126
127
char name[32];
128
char phys[32];
129
130
/* Usual gpio signalling */
131
u32 mask_keycode;
132
u32 mask_keydown;
133
u32 mask_keyup;
134
u32 polling;
135
u32 last_gpio;
136
int shift_by;
137
int start; // What should RC5_START() be
138
int addr; // What RC5_ADDR() should be.
139
int rc5_remote_gap;
140
141
/* RC5 gpio */
142
bool rc5_gpio; /* Is RC5 legacy GPIO enabled? */
143
u32 last_bit; /* last raw bit seen */
144
u32 code; /* raw code under construction */
145
struct timeval base_time; /* time of last seen code */
146
bool active; /* building raw code */
147
};
148
149
150
/* ---------------------------------------------------------- */
151
152
struct bttv_geometry {
153
u8 vtc,crop,comb;
154
u16 width,hscale,hdelay;
155
u16 sheight,vscale,vdelay,vtotal;
156
};
157
158
struct bttv_buffer {
159
/* common v4l buffer stuff -- must be first */
160
struct videobuf_buffer vb;
161
162
/* bttv specific */
163
const struct bttv_format *fmt;
164
unsigned int tvnorm;
165
int btformat;
166
int btswap;
167
struct bttv_geometry geo;
168
struct btcx_riscmem top;
169
struct btcx_riscmem bottom;
170
struct v4l2_rect crop;
171
unsigned int vbi_skip[2];
172
unsigned int vbi_count[2];
173
};
174
175
struct bttv_buffer_set {
176
struct bttv_buffer *top; /* top field buffer */
177
struct bttv_buffer *bottom; /* bottom field buffer */
178
unsigned int top_irq;
179
unsigned int frame_irq;
180
};
181
182
struct bttv_overlay {
183
unsigned int tvnorm;
184
struct v4l2_rect w;
185
enum v4l2_field field;
186
struct v4l2_clip *clips;
187
int nclips;
188
int setup_ok;
189
};
190
191
struct bttv_vbi_fmt {
192
struct v4l2_vbi_format fmt;
193
194
/* fmt.start[] and count[] refer to this video standard. */
195
const struct bttv_tvnorm *tvnorm;
196
197
/* Earliest possible start of video capturing with this
198
v4l2_vbi_format, in struct bttv_crop.rect units. */
199
__s32 end;
200
};
201
202
/* bttv-vbi.c */
203
void bttv_vbi_fmt_reset(struct bttv_vbi_fmt *f, unsigned int norm);
204
205
struct bttv_crop {
206
/* A cropping rectangle in struct bttv_tvnorm.cropcap units. */
207
struct v4l2_rect rect;
208
209
/* Scaled image size limits with this crop rect. Divide
210
max_height, but not min_height, by two when capturing
211
single fields. See also bttv_crop_reset() and
212
bttv_crop_adjust() in bttv-driver.c. */
213
__s32 min_scaled_width;
214
__s32 min_scaled_height;
215
__s32 max_scaled_width;
216
__s32 max_scaled_height;
217
};
218
219
struct bttv_fh {
220
struct bttv *btv;
221
int resources;
222
#ifdef VIDIOC_G_PRIORITY
223
enum v4l2_priority prio;
224
#endif
225
enum v4l2_buf_type type;
226
227
/* video capture */
228
struct videobuf_queue cap;
229
const struct bttv_format *fmt;
230
int width;
231
int height;
232
233
/* video overlay */
234
const struct bttv_format *ovfmt;
235
struct bttv_overlay ov;
236
237
/* Application called VIDIOC_S_CROP. */
238
int do_crop;
239
240
/* vbi capture */
241
struct videobuf_queue vbi;
242
/* Current VBI capture window as seen through this fh (cannot
243
be global for compatibility with earlier drivers). Protected
244
by struct bttv.lock and struct bttv_fh.vbi.lock. */
245
struct bttv_vbi_fmt vbi_fmt;
246
};
247
248
/* ---------------------------------------------------------- */
249
/* bttv-risc.c */
250
251
/* risc code generators - capture */
252
int bttv_risc_packed(struct bttv *btv, struct btcx_riscmem *risc,
253
struct scatterlist *sglist,
254
unsigned int offset, unsigned int bpl,
255
unsigned int pitch, unsigned int skip_lines,
256
unsigned int store_lines);
257
258
/* control dma register + risc main loop */
259
void bttv_set_dma(struct bttv *btv, int override);
260
int bttv_risc_init_main(struct bttv *btv);
261
int bttv_risc_hook(struct bttv *btv, int slot, struct btcx_riscmem *risc,
262
int irqflags);
263
264
/* capture buffer handling */
265
int bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf);
266
int bttv_buffer_activate_video(struct bttv *btv,
267
struct bttv_buffer_set *set);
268
int bttv_buffer_activate_vbi(struct bttv *btv,
269
struct bttv_buffer *vbi);
270
void bttv_dma_free(struct videobuf_queue *q, struct bttv *btv,
271
struct bttv_buffer *buf);
272
273
/* overlay handling */
274
int bttv_overlay_risc(struct bttv *btv, struct bttv_overlay *ov,
275
const struct bttv_format *fmt,
276
struct bttv_buffer *buf);
277
278
279
/* ---------------------------------------------------------- */
280
/* bttv-vbi.c */
281
282
int bttv_try_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f);
283
int bttv_g_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f);
284
int bttv_s_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f);
285
286
extern struct videobuf_queue_ops bttv_vbi_qops;
287
288
/* ---------------------------------------------------------- */
289
/* bttv-gpio.c */
290
291
extern struct bus_type bttv_sub_bus_type;
292
int bttv_sub_add_device(struct bttv_core *core, char *name);
293
int bttv_sub_del_devices(struct bttv_core *core);
294
295
/* ---------------------------------------------------------- */
296
/* bttv-cards.c */
297
298
extern int no_overlay;
299
300
/* ---------------------------------------------------------- */
301
/* bttv-input.c */
302
303
extern void init_bttv_i2c_ir(struct bttv *btv);
304
extern int fini_bttv_i2c(struct bttv *btv);
305
306
/* ---------------------------------------------------------- */
307
/* bttv-driver.c */
308
309
/* insmod options */
310
extern unsigned int bttv_verbose;
311
extern unsigned int bttv_debug;
312
extern unsigned int bttv_gpio;
313
extern void bttv_gpio_tracking(struct bttv *btv, char *comment);
314
extern int init_bttv_i2c(struct bttv *btv);
315
316
#define bttv_printk if (bttv_verbose) printk
317
#define dprintk if (bttv_debug >= 1) printk
318
#define d2printk if (bttv_debug >= 2) printk
319
320
#define BTTV_MAX_FBUF 0x208000
321
#define BTTV_TIMEOUT msecs_to_jiffies(500) /* 0.5 seconds */
322
#define BTTV_FREE_IDLE msecs_to_jiffies(1000) /* one second */
323
324
325
struct bttv_pll_info {
326
unsigned int pll_ifreq; /* PLL input frequency */
327
unsigned int pll_ofreq; /* PLL output frequency */
328
unsigned int pll_crystal; /* Crystal used for input */
329
unsigned int pll_current; /* Currently programmed ofreq */
330
};
331
332
/* for gpio-connected remote control */
333
struct bttv_input {
334
struct input_dev *dev;
335
char name[32];
336
char phys[32];
337
u32 mask_keycode;
338
u32 mask_keydown;
339
};
340
341
struct bttv_suspend_state {
342
u32 gpio_enable;
343
u32 gpio_data;
344
int disabled;
345
int loop_irq;
346
struct bttv_buffer_set video;
347
struct bttv_buffer *vbi;
348
};
349
350
struct bttv {
351
struct bttv_core c;
352
353
/* pci device config */
354
unsigned short id;
355
unsigned char revision;
356
unsigned char __iomem *bt848_mmio; /* pointer to mmio */
357
358
/* card configuration info */
359
unsigned int cardid; /* pci subsystem id (bt878 based ones) */
360
unsigned int tuner_type; /* tuner chip type */
361
unsigned int tda9887_conf;
362
unsigned int svhs, dig;
363
unsigned int has_saa6588:1;
364
struct bttv_pll_info pll;
365
int triton1;
366
int gpioirq;
367
368
int use_i2c_hw;
369
370
/* old gpio interface */
371
int shutdown;
372
373
void (*volume_gpio)(struct bttv *btv, __u16 volume);
374
void (*audio_mode_gpio)(struct bttv *btv, struct v4l2_tuner *tuner, int set);
375
376
/* new gpio interface */
377
spinlock_t gpio_lock;
378
379
/* i2c layer */
380
struct i2c_algo_bit_data i2c_algo;
381
struct i2c_client i2c_client;
382
int i2c_state, i2c_rc;
383
int i2c_done;
384
wait_queue_head_t i2c_queue;
385
struct v4l2_subdev *sd_msp34xx;
386
struct v4l2_subdev *sd_tvaudio;
387
388
/* video4linux (1) */
389
struct video_device *video_dev;
390
struct video_device *radio_dev;
391
struct video_device *vbi_dev;
392
393
/* infrared remote */
394
int has_remote;
395
struct bttv_ir *remote;
396
397
/* I2C remote data */
398
struct IR_i2c_init_data init_data;
399
400
/* locking */
401
spinlock_t s_lock;
402
struct mutex lock;
403
int resources;
404
#ifdef VIDIOC_G_PRIORITY
405
struct v4l2_prio_state prio;
406
#endif
407
408
/* video state */
409
unsigned int input;
410
unsigned int audio;
411
unsigned int mute;
412
unsigned long freq;
413
unsigned int tvnorm;
414
int hue, contrast, bright, saturation;
415
struct v4l2_framebuffer fbuf;
416
unsigned int field_count;
417
418
/* various options */
419
int opt_combfilter;
420
int opt_lumafilter;
421
int opt_automute;
422
int opt_chroma_agc;
423
int opt_adc_crush;
424
int opt_vcr_hack;
425
int opt_whitecrush_upper;
426
int opt_whitecrush_lower;
427
int opt_uv_ratio;
428
int opt_full_luma_range;
429
int opt_coring;
430
431
/* radio data/state */
432
int has_radio;
433
int radio_user;
434
435
/* miro/pinnacle + Aimslab VHX
436
philips matchbox (tea5757 radio tuner) support */
437
int has_matchbox;
438
int mbox_we;
439
int mbox_data;
440
int mbox_clk;
441
int mbox_most;
442
int mbox_mask;
443
444
/* ISA stuff (Terratec Active Radio Upgrade) */
445
int mbox_ior;
446
int mbox_iow;
447
int mbox_csel;
448
449
/* risc memory management data
450
- must acquire s_lock before changing these
451
- only the irq handler is supported to touch top + bottom + vcurr */
452
struct btcx_riscmem main;
453
struct bttv_buffer *screen; /* overlay */
454
struct list_head capture; /* video capture queue */
455
struct list_head vcapture; /* vbi capture queue */
456
struct bttv_buffer_set curr; /* active buffers */
457
struct bttv_buffer *cvbi; /* active vbi buffer */
458
int loop_irq;
459
int new_input;
460
461
unsigned long cap_ctl;
462
unsigned long dma_on;
463
struct timer_list timeout;
464
struct bttv_suspend_state state;
465
466
/* stats */
467
unsigned int errors;
468
unsigned int framedrop;
469
unsigned int irq_total;
470
unsigned int irq_me;
471
472
unsigned int users;
473
struct bttv_fh init;
474
475
/* used to make dvb-bt8xx autoloadable */
476
struct work_struct request_module_wk;
477
478
/* Default (0) and current (1) video capturing and overlay
479
cropping parameters in bttv_tvnorm.cropcap units. Protected
480
by bttv.lock. */
481
struct bttv_crop crop[2];
482
483
/* Earliest possible start of video capturing in
484
bttv_tvnorm.cropcap line units. Set by check_alloc_btres()
485
and free_btres(). Protected by bttv.lock. */
486
__s32 vbi_end;
487
488
/* Latest possible end of VBI capturing (= crop[x].rect.top when
489
VIDEO_RESOURCES are locked). Set by check_alloc_btres()
490
and free_btres(). Protected by bttv.lock. */
491
__s32 crop_start;
492
};
493
494
static inline struct bttv *to_bttv(struct v4l2_device *v4l2_dev)
495
{
496
return container_of(v4l2_dev, struct bttv, c.v4l2_dev);
497
}
498
499
/* our devices */
500
#define BTTV_MAX 32
501
extern unsigned int bttv_num;
502
extern struct bttv *bttvs[BTTV_MAX];
503
504
static inline unsigned int bttv_muxsel(const struct bttv *btv,
505
unsigned int input)
506
{
507
return (bttv_tvcards[btv->c.type].muxsel >> (input * 2)) & 3;
508
}
509
510
#endif
511
512
#define btwrite(dat,adr) writel((dat), btv->bt848_mmio+(adr))
513
#define btread(adr) readl(btv->bt848_mmio+(adr))
514
515
#define btand(dat,adr) btwrite((dat) & btread(adr), adr)
516
#define btor(dat,adr) btwrite((dat) | btread(adr), adr)
517
#define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr)
518
519
#endif /* _BTTVP_H_ */
520
521
/*
522
* Local variables:
523
* c-basic-offset: 8
524
* End:
525
*/
526
527