ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / media / dvb / ttpci / av7110.h
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
8 #ifdef CONFIG_DEVFS_FS
9 #include <linux/devfs_fs_kernel.h>
10 #endif
11
12 #include <media/saa7146_vv.h>
13
14 #include <linux/dvb/video.h>
15 #include <linux/dvb/audio.h>
16 #include <linux/dvb/dmx.h>
17 #include <linux/dvb/ca.h>
18 #include <linux/dvb/osd.h>
19 #include <linux/dvb/net.h>
20
21 #include "dvbdev.h"
22 #include "demux.h"
23 #include "dvb_demux.h"
24 #include "dmxdev.h"
25 #include "dvb_filter.h"
26 #include "dvb_net.h"
27 #include "dvb_ringbuffer.h"
28
29
30 #define MAXFILT 32
31
32 enum {AV_PES_STREAM, PS_STREAM, TS_STREAM, PES_STREAM};
33
34 struct av7110_p2t {
35         u8                pes[TS_SIZE];
36         u8                counter;
37         long int          pos;
38         int               frags;
39         struct dvb_demux_feed *feed;
40 };
41
42 /* video MPEG decoder events: */
43 /* (code copied from dvb_frontend.c, should maybe be factored out...) */
44 #define MAX_VIDEO_EVENT 8
45 struct dvb_video_events {
46         struct video_event        events[MAX_VIDEO_EVENT];
47         int                       eventw;
48         int                       eventr;
49         int                       overflow;
50         wait_queue_head_t         wait_queue;
51         spinlock_t                lock;
52 };
53
54
55 /* place to store all the necessary device information */
56 struct av7110 {
57
58         /* devices */
59
60         struct dvb_device       dvb_dev;
61         struct dvb_net               dvb_net;
62
63         struct video_device     v4l_dev;
64         struct video_device     vbi_dev;
65
66         struct saa7146_dev      *dev;
67
68         struct dvb_i2c_bus      *i2c_bus;       
69         char                    *card_name;
70
71         /* support for analog module of dvb-c */
72         int                     has_analog_tuner;
73         int                     current_input;
74         u32                     current_freq;
75                                 
76         struct tasklet_struct   debi_tasklet;
77         struct tasklet_struct   gpio_tasklet;
78
79         int adac_type;         /* audio DAC type */
80 #define DVB_ADAC_TI       0
81 #define DVB_ADAC_CRYSTAL  1
82 #define DVB_ADAC_MSP      2
83 #define DVB_ADAC_NONE    -1
84
85
86         /* buffers */
87
88         void                   *iobuf;   /* memory for all buffers */
89         struct dvb_ringbuffer        avout;   /* buffer for video or A/V mux */
90 #define AVOUTLEN (128*1024)
91         struct dvb_ringbuffer        aout;    /* buffer for audio */
92 #define AOUTLEN (64*1024)
93         void                   *bmpbuf;
94 #define BMPLEN (8*32768+1024)
95
96         /* bitmap buffers and states */
97
98         int                     bmpp;
99         int                     bmplen;
100         int                     bmp_state;
101 #define BMP_NONE     0
102 #define BMP_LOADING  1
103 #define BMP_LOADINGS 2
104 #define BMP_LOADED   3
105         wait_queue_head_t       bmpq;
106
107
108         /* DEBI and polled command interface */
109
110         spinlock_t              debilock;
111         struct semaphore        dcomlock;
112         int                     debitype;
113         int                     debilen;
114
115
116         /* Recording and playback flags */
117
118         int                     rec_mode;
119         int                     playing;
120 #define RP_NONE  0
121 #define RP_VIDEO 1
122 #define RP_AUDIO 2
123 #define RP_AV    3
124
125
126         /* OSD */
127
128         int                     osdwin;      /* currently active window */
129         u16                     osdbpp[8];
130
131
132         /* CA */
133
134         ca_slot_info_t          ci_slot[2];
135
136         int                     vidmode;
137         struct dmxdev           dmxdev;
138         struct dvb_demux             demux;
139
140         struct dmx_frontend     hw_frontend;
141         struct dmx_frontend     mem_frontend;
142
143         int                     fe_synced; 
144         struct semaphore        pid_mutex;
145
146         int                     video_blank;
147         struct video_status     videostate;
148         int                     display_ar;
149         int                     trickmode;
150 #define TRICK_NONE   0
151 #define TRICK_FAST   1
152 #define TRICK_SLOW   2
153 #define TRICK_FREEZE 3
154         struct audio_status      audiostate;
155
156         struct dvb_demux_filter     *handle2filter[32];
157         struct av7110_p2t               p2t_filter[MAXFILT];
158         struct dvb_filter_pes2ts        p2t[2];
159         struct ipack                    ipack[2];
160         u8                     *kbuf[2];
161
162         int sinfo;
163         int feeding;
164
165         int arm_errors;
166         int registered;
167
168
169         /* AV711X */
170
171         u32                 arm_fw;
172         u32                 arm_rtsl;
173         u32                 arm_vid;
174         u32                 arm_app;
175         u32                 avtype;
176         int                 arm_ready;
177         struct task_struct *arm_thread;
178         wait_queue_head_t   arm_wait;
179         u16                 arm_loops;
180         int                 arm_rmmod;
181
182         void               *debi_virt;
183         dma_addr_t          debi_bus;
184
185         u16                 pids[DMX_PES_OTHER];
186         
187         struct dvb_ringbuffer    ci_rbuffer;
188         struct dvb_ringbuffer    ci_wbuffer;
189
190
191         struct dvb_adapter       *dvb_adapter;
192         struct dvb_device        *video_dev;
193         struct dvb_device        *audio_dev;
194         struct dvb_device        *ca_dev;
195         struct dvb_device        *osd_dev;
196
197         struct dvb_video_events  video_events;
198         video_size_t             video_size;
199
200         u32                 ir_config;
201         
202         /* firmware stuff */
203         unsigned int device_initialized;
204
205         unsigned char *bin_fw;
206         unsigned long size_fw;
207
208         unsigned char *bin_dpram;
209         unsigned long size_dpram;
210
211         unsigned char *bin_root;
212         unsigned long size_root;
213 };
214
215
216 extern void ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid,
217                        u16 subpid, u16 pcrpid);
218
219 extern void av7110_register_irc_handler(void (*func)(u32));
220 extern void av7110_unregister_irc_handler(void (*func)(u32)); 
221 extern void av7110_setup_irc_config (struct av7110 *av7110, u32 ir_config);
222
223 extern int av7110_ir_init (void);
224 extern void av7110_ir_exit (void);
225
226 /* msp3400 i2c subaddresses */
227 #define MSP_WR_DEM 0x10
228 #define MSP_RD_DEM 0x11
229 #define MSP_WR_DSP 0x12
230 #define MSP_RD_DSP 0x13
231
232 extern int i2c_writereg(struct av7110 *av7110, u8 id, u8 reg, u8 val);
233 extern u8 i2c_readreg(struct av7110 *av7110, u8 id, u8 reg);
234 extern int msp_writereg(struct av7110 *av7110, u8 dev, u16 reg, u16 val);
235 extern int msp_readreg(struct av7110 *av7110, u8 dev, u16 reg, u16 *val);
236
237
238 extern int av7110_init_analog_module(struct av7110 *av7110);
239 extern int av7110_init_v4l(struct av7110 *av7110);
240 extern int av7110_exit_v4l(struct av7110 *av7110);
241
242 #endif /* _AV7110_H_ */
243