[go: nahoru, domu]

1#ifndef _AV7110_H_
2#define _AV7110_H_
3
4#include <linux/interrupt.h>
5#include <linux/socket.h>
6#include <linux/netdevice.h>
7#include <linux/i2c.h>
8#include <linux/input.h>
9#include <linux/time.h>
10
11#include <linux/dvb/video.h>
12#include <linux/dvb/audio.h>
13#include <linux/dvb/dmx.h>
14#include <linux/dvb/ca.h>
15#include <linux/dvb/osd.h>
16#include <linux/dvb/net.h>
17#include <linux/mutex.h>
18
19#include "dvbdev.h"
20#include "demux.h"
21#include "dvb_demux.h"
22#include "dmxdev.h"
23#include "dvb_filter.h"
24#include "dvb_net.h"
25#include "dvb_ringbuffer.h"
26#include "dvb_frontend.h"
27#include "ves1820.h"
28#include "ves1x93.h"
29#include "stv0299.h"
30#include "tda8083.h"
31#include "sp8870.h"
32#include "stv0297.h"
33#include "l64781.h"
34
35#include <media/saa7146_vv.h>
36
37
38#define ANALOG_TUNER_VES1820 1
39#define ANALOG_TUNER_STV0297 2
40
41extern int av7110_debug;
42
43#define dprintk(level,args...) \
44	    do { if ((av7110_debug & level)) { printk("dvb-ttpci: %s(): ", __func__); printk(args); } } while (0)
45
46#define MAXFILT 32
47
48enum {AV_PES_STREAM, PS_STREAM, TS_STREAM, PES_STREAM};
49
50enum av7110_video_mode {
51	AV7110_VIDEO_MODE_PAL 	= 0,
52	AV7110_VIDEO_MODE_NTSC	= 1
53};
54
55struct av7110_p2t {
56	u8		  pes[TS_SIZE];
57	u8		  counter;
58	long int	  pos;
59	int		  frags;
60	struct dvb_demux_feed *feed;
61};
62
63/* video MPEG decoder events: */
64/* (code copied from dvb_frontend.c, should maybe be factored out...) */
65#define MAX_VIDEO_EVENT 8
66struct dvb_video_events {
67	struct video_event	  events[MAX_VIDEO_EVENT];
68	int			  eventw;
69	int			  eventr;
70	int			  overflow;
71	wait_queue_head_t	  wait_queue;
72	spinlock_t		  lock;
73};
74
75
76struct av7110;
77
78/* infrared remote control */
79struct infrared {
80	u16	key_map[256];
81	struct input_dev	*input_dev;
82	char			input_phys[32];
83	struct timer_list	keyup_timer;
84	struct tasklet_struct	ir_tasklet;
85	void			(*ir_handler)(struct av7110 *av7110, u32 ircom);
86	u32			ir_command;
87	u32			ir_config;
88	u32			device_mask;
89	u8			protocol;
90	u8			inversion;
91	u16			last_key;
92	u16			last_toggle;
93	u8			delay_timer_finished;
94};
95
96
97/* place to store all the necessary device information */
98struct av7110 {
99
100	/* devices */
101
102	struct dvb_device	dvb_dev;
103	struct dvb_net		dvb_net;
104
105	struct video_device	*v4l_dev;
106	struct video_device	*vbi_dev;
107
108	struct saa7146_dev	*dev;
109
110	struct i2c_adapter	i2c_adap;
111
112	char			*card_name;
113
114	/* support for analog module of dvb-c */
115	int			analog_tuner_flags;
116	int			current_input;
117	u32			current_freq;
118
119	struct tasklet_struct	debi_tasklet;
120	struct tasklet_struct	gpio_tasklet;
121
122	int adac_type;	       /* audio DAC type */
123#define DVB_ADAC_TI	  0
124#define DVB_ADAC_CRYSTAL  1
125#define DVB_ADAC_MSP34x0  2
126#define DVB_ADAC_MSP34x5  3
127#define DVB_ADAC_NONE	 -1
128
129
130	/* buffers */
131
132	void		       *iobuf;	 /* memory for all buffers */
133	struct dvb_ringbuffer	avout;   /* buffer for video or A/V mux */
134#define AVOUTLEN (128*1024)
135	struct dvb_ringbuffer	aout;    /* buffer for audio */
136#define AOUTLEN (64*1024)
137	void		       *bmpbuf;
138#define BMPLEN (8*32768+1024)
139
140	/* bitmap buffers and states */
141
142	int			bmpp;
143	int			bmplen;
144	volatile int		bmp_state;
145#define BMP_NONE     0
146#define BMP_LOADING  1
147#define BMP_LOADED   2
148	wait_queue_head_t	bmpq;
149
150
151	/* DEBI and polled command interface */
152
153	spinlock_t		debilock;
154	struct mutex		dcomlock;
155	volatile int		debitype;
156	volatile int		debilen;
157
158
159	/* Recording and playback flags */
160
161	int			rec_mode;
162	int			playing;
163#define RP_NONE  0
164#define RP_VIDEO 1
165#define RP_AUDIO 2
166#define RP_AV	 3
167
168
169	/* OSD */
170
171	int			osdwin;      /* currently active window */
172	u16			osdbpp[8];
173	struct mutex		osd_mutex;
174
175	/* CA */
176
177	ca_slot_info_t		ci_slot[2];
178
179	enum av7110_video_mode	vidmode;
180	struct dmxdev		dmxdev;
181	struct dvb_demux	demux;
182
183	struct dmx_frontend	hw_frontend;
184	struct dmx_frontend	mem_frontend;
185
186	/* for budget mode demux1 */
187	struct dmxdev		dmxdev1;
188	struct dvb_demux	demux1;
189	struct dvb_net		dvb_net1;
190	spinlock_t		feedlock1;
191	int			feeding1;
192	u32			ttbp;
193	unsigned char           *grabbing;
194	struct saa7146_pgtable  pt;
195	struct tasklet_struct   vpe_tasklet;
196	bool			full_ts;
197
198	int			fe_synced;
199	struct mutex		pid_mutex;
200
201	int			video_blank;
202	struct video_status	videostate;
203	u16			display_panscan;
204	int			display_ar;
205	int			trickmode;
206#define TRICK_NONE   0
207#define TRICK_FAST   1
208#define TRICK_SLOW   2
209#define TRICK_FREEZE 3
210	struct audio_status	audiostate;
211
212	struct dvb_demux_filter *handle2filter[32];
213	struct av7110_p2t	 p2t_filter[MAXFILT];
214	struct dvb_filter_pes2ts p2t[2];
215	struct ipack		 ipack[2];
216	u8			*kbuf[2];
217
218	int sinfo;
219	int feeding;
220
221	int arm_errors;
222	int registered;
223
224
225	/* AV711X */
226
227	u32		    arm_fw;
228	u32		    arm_rtsl;
229	u32		    arm_vid;
230	u32		    arm_app;
231	u32		    avtype;
232	int		    arm_ready;
233	struct task_struct *arm_thread;
234	wait_queue_head_t   arm_wait;
235	u16		    arm_loops;
236
237	void		   *debi_virt;
238	dma_addr_t	    debi_bus;
239
240	u16		    pids[DMX_PES_OTHER];
241
242	struct dvb_ringbuffer	 ci_rbuffer;
243	struct dvb_ringbuffer	 ci_wbuffer;
244
245	struct audio_mixer	mixer;
246
247	struct dvb_adapter	 dvb_adapter;
248	struct dvb_device	 *video_dev;
249	struct dvb_device	 *audio_dev;
250	struct dvb_device	 *ca_dev;
251	struct dvb_device	 *osd_dev;
252
253	struct dvb_video_events  video_events;
254	video_size_t		 video_size;
255
256	u16			wssMode;
257	u16			wssData;
258
259	struct infrared		ir;
260
261	/* firmware stuff */
262	unsigned char *bin_fw;
263	unsigned long size_fw;
264
265	unsigned char *bin_dpram;
266	unsigned long size_dpram;
267
268	unsigned char *bin_root;
269	unsigned long size_root;
270
271	struct dvb_frontend* fe;
272	fe_status_t fe_status;
273
274	struct mutex ioctl_mutex;
275
276	/* crash recovery */
277	void				(*recover)(struct av7110* av7110);
278	fe_sec_voltage_t		saved_voltage;
279	fe_sec_tone_mode_t		saved_tone;
280	struct dvb_diseqc_master_cmd	saved_master_cmd;
281	fe_sec_mini_cmd_t		saved_minicmd;
282
283	int (*fe_init)(struct dvb_frontend* fe);
284	int (*fe_read_status)(struct dvb_frontend* fe, fe_status_t* status);
285	int (*fe_diseqc_reset_overload)(struct dvb_frontend* fe);
286	int (*fe_diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
287	int (*fe_diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
288	int (*fe_set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
289	int (*fe_set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
290	int (*fe_dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
291	int (*fe_set_frontend)(struct dvb_frontend *fe);
292};
293
294
295extern int ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid,
296		       u16 subpid, u16 pcrpid);
297
298extern int av7110_check_ir_config(struct av7110 *av7110, int force);
299extern int av7110_ir_init(struct av7110 *av7110);
300extern void av7110_ir_exit(struct av7110 *av7110);
301
302/* msp3400 i2c subaddresses */
303#define MSP_WR_DEM 0x10
304#define MSP_RD_DEM 0x11
305#define MSP_WR_DSP 0x12
306#define MSP_RD_DSP 0x13
307
308extern int i2c_writereg(struct av7110 *av7110, u8 id, u8 reg, u8 val);
309extern u8 i2c_readreg(struct av7110 *av7110, u8 id, u8 reg);
310extern int msp_writereg(struct av7110 *av7110, u8 dev, u16 reg, u16 val);
311
312
313extern int av7110_init_analog_module(struct av7110 *av7110);
314extern int av7110_init_v4l(struct av7110 *av7110);
315extern int av7110_exit_v4l(struct av7110 *av7110);
316
317#endif /* _AV7110_H_ */
318