1 /*
2  * TTUSB DEC Driver
3  *
4  * Copyright (C) 2003-2004 Alex Woods <linux-dvb@giblets.org>
5  * IR support by Peter Beutner <p.beutner@gmx.net>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  *
21  */
22 
23 #include <linux/list.h>
24 #include <linux/module.h>
25 #include <linux/pci.h>
26 #include <linux/slab.h>
27 #include <linux/spinlock.h>
28 #include <linux/usb.h>
29 #include <linux/interrupt.h>
30 #include <linux/firmware.h>
31 #include <linux/crc32.h>
32 #include <linux/init.h>
33 #include <linux/input.h>
34 
35 #include <linux/mutex.h>
36 
37 #include "dmxdev.h"
38 #include "dvb_demux.h"
39 #include "dvb_filter.h"
40 #include "dvb_frontend.h"
41 #include "dvb_net.h"
42 #include "ttusbdecfe.h"
43 
44 static int debug;
45 static int output_pva;
46 static int enable_rc;
47 
48 module_param(debug, int, 0644);
49 MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
50 module_param(output_pva, int, 0444);
51 MODULE_PARM_DESC(output_pva, "Output PVA from dvr device (default:off)");
52 module_param(enable_rc, int, 0644);
53 MODULE_PARM_DESC(enable_rc, "Turn on/off IR remote control(default: off)");
54 
55 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
56 
57 #define dprintk	if (debug) printk
58 
59 #define DRIVER_NAME		"TechnoTrend/Hauppauge DEC USB"
60 
61 #define COMMAND_PIPE		0x03
62 #define RESULT_PIPE		0x04
63 #define IN_PIPE			0x08
64 #define OUT_PIPE		0x07
65 #define IRQ_PIPE		0x0A
66 
67 #define COMMAND_PACKET_SIZE	0x3c
68 #define ARM_PACKET_SIZE		0x1000
69 #define IRQ_PACKET_SIZE		0x8
70 
71 #define ISO_BUF_COUNT		0x04
72 #define FRAMES_PER_ISO_BUF	0x04
73 #define ISO_FRAME_SIZE		0x0380
74 
75 #define	MAX_PVA_LENGTH		6144
76 
77 enum ttusb_dec_model {
78 	TTUSB_DEC2000T,
79 	TTUSB_DEC2540T,
80 	TTUSB_DEC3000S
81 };
82 
83 enum ttusb_dec_packet_type {
84 	TTUSB_DEC_PACKET_PVA,
85 	TTUSB_DEC_PACKET_SECTION,
86 	TTUSB_DEC_PACKET_EMPTY
87 };
88 
89 enum ttusb_dec_interface {
90 	TTUSB_DEC_INTERFACE_INITIAL,
91 	TTUSB_DEC_INTERFACE_IN,
92 	TTUSB_DEC_INTERFACE_OUT
93 };
94 
95 struct ttusb_dec {
96 	enum ttusb_dec_model		model;
97 	char				*model_name;
98 	char				*firmware_name;
99 	int				can_playback;
100 
101 	/* DVB bits */
102 	struct dvb_adapter		adapter;
103 	struct dmxdev			dmxdev;
104 	struct dvb_demux		demux;
105 	struct dmx_frontend		frontend;
106 	struct dvb_net			dvb_net;
107 	struct dvb_frontend*		fe;
108 
109 	u16			pid[DMX_PES_OTHER];
110 
111 	/* USB bits */
112 	struct usb_device		*udev;
113 	u8				trans_count;
114 	unsigned int			command_pipe;
115 	unsigned int			result_pipe;
116 	unsigned int			in_pipe;
117 	unsigned int			out_pipe;
118 	unsigned int			irq_pipe;
119 	enum ttusb_dec_interface	interface;
120 	struct mutex			usb_mutex;
121 
122 	void			*irq_buffer;
123 	struct urb		*irq_urb;
124 	dma_addr_t		irq_dma_handle;
125 	void			*iso_buffer;
126 	dma_addr_t		iso_dma_handle;
127 	struct urb		*iso_urb[ISO_BUF_COUNT];
128 	int			iso_stream_count;
129 	struct mutex		iso_mutex;
130 
131 	u8				packet[MAX_PVA_LENGTH + 4];
132 	enum ttusb_dec_packet_type	packet_type;
133 	int				packet_state;
134 	int				packet_length;
135 	int				packet_payload_length;
136 	u16				next_packet_id;
137 
138 	int				pva_stream_count;
139 	int				filter_stream_count;
140 
141 	struct dvb_filter_pes2ts	a_pes2ts;
142 	struct dvb_filter_pes2ts	v_pes2ts;
143 
144 	u8			v_pes[16 + MAX_PVA_LENGTH];
145 	int			v_pes_length;
146 	int			v_pes_postbytes;
147 
148 	struct list_head	urb_frame_list;
149 	struct tasklet_struct	urb_tasklet;
150 	spinlock_t		urb_frame_list_lock;
151 
152 	struct dvb_demux_filter	*audio_filter;
153 	struct dvb_demux_filter	*video_filter;
154 	struct list_head	filter_info_list;
155 	spinlock_t		filter_info_list_lock;
156 
157 	struct input_dev	*rc_input_dev;
158 	char			rc_phys[64];
159 
160 	int			active; /* Loaded successfully */
161 };
162 
163 struct urb_frame {
164 	u8			data[ISO_FRAME_SIZE];
165 	int			length;
166 	struct list_head	urb_frame_list;
167 };
168 
169 struct filter_info {
170 	u8			stream_id;
171 	struct dvb_demux_filter	*filter;
172 	struct list_head	filter_info_list;
173 };
174 
175 static u16 rc_keys[] = {
176 	KEY_POWER,
177 	KEY_MUTE,
178 	KEY_1,
179 	KEY_2,
180 	KEY_3,
181 	KEY_4,
182 	KEY_5,
183 	KEY_6,
184 	KEY_7,
185 	KEY_8,
186 	KEY_9,
187 	KEY_0,
188 	KEY_CHANNELUP,
189 	KEY_VOLUMEDOWN,
190 	KEY_OK,
191 	KEY_VOLUMEUP,
192 	KEY_CHANNELDOWN,
193 	KEY_PREVIOUS,
194 	KEY_ESC,
195 	KEY_RED,
196 	KEY_GREEN,
197 	KEY_YELLOW,
198 	KEY_BLUE,
199 	KEY_OPTION,
200 	KEY_M,
201 	KEY_RADIO
202 };
203 
204 static void ttusb_dec_set_model(struct ttusb_dec *dec,
205 				enum ttusb_dec_model model);
206 
207 static void ttusb_dec_handle_irq( struct urb *urb)
208 {
209 	struct ttusb_dec * dec = urb->context;
210 	char *buffer = dec->irq_buffer;
211 	int retval;
212 
213 	switch(urb->status) {
214 		case 0: /*success*/
215 			break;
216 		case -ECONNRESET:
217 		case -ENOENT:
218 		case -ESHUTDOWN:
219 		case -ETIME:
220 			/* this urb is dead, cleanup */
221 			dprintk("%s:urb shutting down with status: %d\n",
222 					__func__, urb->status);
223 			return;
224 		default:
225 			dprintk("%s:nonzero status received: %d\n",
226 					__func__,urb->status);
227 			goto exit;
228 	}
229 
230 	if( (buffer[0] == 0x1) && (buffer[2] == 0x15) )  {
231 		/* IR - Event */
232 		/* this is an fact a bit too simple implementation;
233 		 * the box also reports a keyrepeat signal
234 		 * (with buffer[3] == 0x40) in an intervall of ~100ms.
235 		 * But to handle this correctly we had to imlemenent some
236 		 * kind of timer which signals a 'key up' event if no
237 		 * keyrepeat signal is received for lets say 200ms.
238 		 * this should/could be added later ...
239 		 * for now lets report each signal as a key down and up*/
240 		dprintk("%s:rc signal:%d\n", __func__, buffer[4]);
241 		input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 1);
242 		input_sync(dec->rc_input_dev);
243 		input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 0);
244 		input_sync(dec->rc_input_dev);
245 	}
246 
247 exit:	retval = usb_submit_urb(urb, GFP_ATOMIC);
248 	if(retval)
249 		printk("%s - usb_commit_urb failed with result: %d\n",
250 			__func__, retval);
251 }
252 
253 static u16 crc16(u16 crc, const u8 *buf, size_t len)
254 {
255 	u16 tmp;
256 
257 	while (len--) {
258 		crc ^= *buf++;
259 		crc ^= (u8)crc >> 4;
260 		tmp = (u8)crc;
261 		crc ^= (tmp ^ (tmp << 1)) << 4;
262 	}
263 	return crc;
264 }
265 
266 static int ttusb_dec_send_command(struct ttusb_dec *dec, const u8 command,
267 				  int param_length, const u8 params[],
268 				  int *result_length, u8 cmd_result[])
269 {
270 	int result, actual_len, i;
271 	u8 *b;
272 
273 	dprintk("%s\n", __func__);
274 
275 	b = kmalloc(COMMAND_PACKET_SIZE + 4, GFP_KERNEL);
276 	if (!b)
277 		return -ENOMEM;
278 
279 	if ((result = mutex_lock_interruptible(&dec->usb_mutex))) {
280 		kfree(b);
281 		printk("%s: Failed to lock usb mutex.\n", __func__);
282 		return result;
283 	}
284 
285 	b[0] = 0xaa;
286 	b[1] = ++dec->trans_count;
287 	b[2] = command;
288 	b[3] = param_length;
289 
290 	if (params)
291 		memcpy(&b[4], params, param_length);
292 
293 	if (debug) {
294 		printk("%s: command: ", __func__);
295 		for (i = 0; i < param_length + 4; i++)
296 			printk("0x%02X ", b[i]);
297 		printk("\n");
298 	}
299 
300 	result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
301 			      COMMAND_PACKET_SIZE + 4, &actual_len, 1000);
302 
303 	if (result) {
304 		printk("%s: command bulk message failed: error %d\n",
305 		       __func__, result);
306 		mutex_unlock(&dec->usb_mutex);
307 		kfree(b);
308 		return result;
309 	}
310 
311 	result = usb_bulk_msg(dec->udev, dec->result_pipe, b,
312 			      COMMAND_PACKET_SIZE + 4, &actual_len, 1000);
313 
314 	if (result) {
315 		printk("%s: result bulk message failed: error %d\n",
316 		       __func__, result);
317 		mutex_unlock(&dec->usb_mutex);
318 		kfree(b);
319 		return result;
320 	} else {
321 		if (debug) {
322 			printk("%s: result: ", __func__);
323 			for (i = 0; i < actual_len; i++)
324 				printk("0x%02X ", b[i]);
325 			printk("\n");
326 		}
327 
328 		if (result_length)
329 			*result_length = b[3];
330 		if (cmd_result && b[3] > 0)
331 			memcpy(cmd_result, &b[4], b[3]);
332 
333 		mutex_unlock(&dec->usb_mutex);
334 
335 		kfree(b);
336 		return 0;
337 	}
338 }
339 
340 static int ttusb_dec_get_stb_state (struct ttusb_dec *dec, unsigned int *mode,
341 				    unsigned int *model, unsigned int *version)
342 {
343 	u8 c[COMMAND_PACKET_SIZE];
344 	int c_length;
345 	int result;
346 	__be32 tmp;
347 
348 	dprintk("%s\n", __func__);
349 
350 	result = ttusb_dec_send_command(dec, 0x08, 0, NULL, &c_length, c);
351 	if (result)
352 		return result;
353 
354 	if (c_length >= 0x0c) {
355 		if (mode != NULL) {
356 			memcpy(&tmp, c, 4);
357 			*mode = ntohl(tmp);
358 		}
359 		if (model != NULL) {
360 			memcpy(&tmp, &c[4], 4);
361 			*model = ntohl(tmp);
362 		}
363 		if (version != NULL) {
364 			memcpy(&tmp, &c[8], 4);
365 			*version = ntohl(tmp);
366 		}
367 		return 0;
368 	} else {
369 		return -ENOENT;
370 	}
371 }
372 
373 static int ttusb_dec_audio_pes2ts_cb(void *priv, unsigned char *data)
374 {
375 	struct ttusb_dec *dec = priv;
376 
377 	dec->audio_filter->feed->cb.ts(data, 188, NULL, 0,
378 				       &dec->audio_filter->feed->feed.ts);
379 
380 	return 0;
381 }
382 
383 static int ttusb_dec_video_pes2ts_cb(void *priv, unsigned char *data)
384 {
385 	struct ttusb_dec *dec = priv;
386 
387 	dec->video_filter->feed->cb.ts(data, 188, NULL, 0,
388 				       &dec->video_filter->feed->feed.ts);
389 
390 	return 0;
391 }
392 
393 static void ttusb_dec_set_pids(struct ttusb_dec *dec)
394 {
395 	u8 b[] = { 0x00, 0x00, 0x00, 0x00,
396 		   0x00, 0x00, 0xff, 0xff,
397 		   0xff, 0xff, 0xff, 0xff };
398 
399 	__be16 pcr = htons(dec->pid[DMX_PES_PCR]);
400 	__be16 audio = htons(dec->pid[DMX_PES_AUDIO]);
401 	__be16 video = htons(dec->pid[DMX_PES_VIDEO]);
402 
403 	dprintk("%s\n", __func__);
404 
405 	memcpy(&b[0], &pcr, 2);
406 	memcpy(&b[2], &audio, 2);
407 	memcpy(&b[4], &video, 2);
408 
409 	ttusb_dec_send_command(dec, 0x50, sizeof(b), b, NULL, NULL);
410 
411 	dvb_filter_pes2ts_init(&dec->a_pes2ts, dec->pid[DMX_PES_AUDIO],
412 			       ttusb_dec_audio_pes2ts_cb, dec);
413 	dvb_filter_pes2ts_init(&dec->v_pes2ts, dec->pid[DMX_PES_VIDEO],
414 			       ttusb_dec_video_pes2ts_cb, dec);
415 	dec->v_pes_length = 0;
416 	dec->v_pes_postbytes = 0;
417 }
418 
419 static void ttusb_dec_process_pva(struct ttusb_dec *dec, u8 *pva, int length)
420 {
421 	if (length < 8) {
422 		printk("%s: packet too short - discarding\n", __func__);
423 		return;
424 	}
425 
426 	if (length > 8 + MAX_PVA_LENGTH) {
427 		printk("%s: packet too long - discarding\n", __func__);
428 		return;
429 	}
430 
431 	switch (pva[2]) {
432 
433 	case 0x01: {		/* VideoStream */
434 		int prebytes = pva[5] & 0x03;
435 		int postbytes = (pva[5] & 0x0c) >> 2;
436 		__be16 v_pes_payload_length;
437 
438 		if (output_pva) {
439 			dec->video_filter->feed->cb.ts(pva, length, NULL, 0,
440 				&dec->video_filter->feed->feed.ts);
441 			return;
442 		}
443 
444 		if (dec->v_pes_postbytes > 0 &&
445 		    dec->v_pes_postbytes == prebytes) {
446 			memcpy(&dec->v_pes[dec->v_pes_length],
447 			       &pva[12], prebytes);
448 
449 			dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes,
450 					  dec->v_pes_length + prebytes, 1);
451 		}
452 
453 		if (pva[5] & 0x10) {
454 			dec->v_pes[7] = 0x80;
455 			dec->v_pes[8] = 0x05;
456 
457 			dec->v_pes[9] = 0x21 | ((pva[8] & 0xc0) >> 5);
458 			dec->v_pes[10] = ((pva[8] & 0x3f) << 2) |
459 					 ((pva[9] & 0xc0) >> 6);
460 			dec->v_pes[11] = 0x01 |
461 					 ((pva[9] & 0x3f) << 2) |
462 					 ((pva[10] & 0x80) >> 6);
463 			dec->v_pes[12] = ((pva[10] & 0x7f) << 1) |
464 					 ((pva[11] & 0xc0) >> 7);
465 			dec->v_pes[13] = 0x01 | ((pva[11] & 0x7f) << 1);
466 
467 			memcpy(&dec->v_pes[14], &pva[12 + prebytes],
468 			       length - 12 - prebytes);
469 			dec->v_pes_length = 14 + length - 12 - prebytes;
470 		} else {
471 			dec->v_pes[7] = 0x00;
472 			dec->v_pes[8] = 0x00;
473 
474 			memcpy(&dec->v_pes[9], &pva[8], length - 8);
475 			dec->v_pes_length = 9 + length - 8;
476 		}
477 
478 		dec->v_pes_postbytes = postbytes;
479 
480 		if (dec->v_pes[9 + dec->v_pes[8]] == 0x00 &&
481 		    dec->v_pes[10 + dec->v_pes[8]] == 0x00 &&
482 		    dec->v_pes[11 + dec->v_pes[8]] == 0x01)
483 			dec->v_pes[6] = 0x84;
484 		else
485 			dec->v_pes[6] = 0x80;
486 
487 		v_pes_payload_length = htons(dec->v_pes_length - 6 +
488 					     postbytes);
489 		memcpy(&dec->v_pes[4], &v_pes_payload_length, 2);
490 
491 		if (postbytes == 0)
492 			dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes,
493 					  dec->v_pes_length, 1);
494 
495 		break;
496 	}
497 
498 	case 0x02:		/* MainAudioStream */
499 		if (output_pva) {
500 			dec->audio_filter->feed->cb.ts(pva, length, NULL, 0,
501 				&dec->audio_filter->feed->feed.ts);
502 			return;
503 		}
504 
505 		dvb_filter_pes2ts(&dec->a_pes2ts, &pva[8], length - 8,
506 				  pva[5] & 0x10);
507 		break;
508 
509 	default:
510 		printk("%s: unknown PVA type: %02x.\n", __func__,
511 		       pva[2]);
512 		break;
513 	}
514 }
515 
516 static void ttusb_dec_process_filter(struct ttusb_dec *dec, u8 *packet,
517 				     int length)
518 {
519 	struct list_head *item;
520 	struct filter_info *finfo;
521 	struct dvb_demux_filter *filter = NULL;
522 	unsigned long flags;
523 	u8 sid;
524 
525 	sid = packet[1];
526 	spin_lock_irqsave(&dec->filter_info_list_lock, flags);
527 	for (item = dec->filter_info_list.next; item != &dec->filter_info_list;
528 	     item = item->next) {
529 		finfo = list_entry(item, struct filter_info, filter_info_list);
530 		if (finfo->stream_id == sid) {
531 			filter = finfo->filter;
532 			break;
533 		}
534 	}
535 	spin_unlock_irqrestore(&dec->filter_info_list_lock, flags);
536 
537 	if (filter)
538 		filter->feed->cb.sec(&packet[2], length - 2, NULL, 0,
539 				     &filter->filter);
540 }
541 
542 static void ttusb_dec_process_packet(struct ttusb_dec *dec)
543 {
544 	int i;
545 	u16 csum = 0;
546 	u16 packet_id;
547 
548 	if (dec->packet_length % 2) {
549 		printk("%s: odd sized packet - discarding\n", __func__);
550 		return;
551 	}
552 
553 	for (i = 0; i < dec->packet_length; i += 2)
554 		csum ^= ((dec->packet[i] << 8) + dec->packet[i + 1]);
555 
556 	if (csum) {
557 		printk("%s: checksum failed - discarding\n", __func__);
558 		return;
559 	}
560 
561 	packet_id = dec->packet[dec->packet_length - 4] << 8;
562 	packet_id += dec->packet[dec->packet_length - 3];
563 
564 	if ((packet_id != dec->next_packet_id) && dec->next_packet_id) {
565 		printk("%s: warning: lost packets between %u and %u\n",
566 		       __func__, dec->next_packet_id - 1, packet_id);
567 	}
568 
569 	if (packet_id == 0xffff)
570 		dec->next_packet_id = 0x8000;
571 	else
572 		dec->next_packet_id = packet_id + 1;
573 
574 	switch (dec->packet_type) {
575 	case TTUSB_DEC_PACKET_PVA:
576 		if (dec->pva_stream_count)
577 			ttusb_dec_process_pva(dec, dec->packet,
578 					      dec->packet_payload_length);
579 		break;
580 
581 	case TTUSB_DEC_PACKET_SECTION:
582 		if (dec->filter_stream_count)
583 			ttusb_dec_process_filter(dec, dec->packet,
584 						 dec->packet_payload_length);
585 		break;
586 
587 	case TTUSB_DEC_PACKET_EMPTY:
588 		break;
589 	}
590 }
591 
592 static void swap_bytes(u8 *b, int length)
593 {
594 	length -= length % 2;
595 	for (; length; b += 2, length -= 2)
596 		swap(*b, *(b + 1));
597 }
598 
599 static void ttusb_dec_process_urb_frame(struct ttusb_dec *dec, u8 *b,
600 					int length)
601 {
602 	swap_bytes(b, length);
603 
604 	while (length) {
605 		switch (dec->packet_state) {
606 
607 		case 0:
608 		case 1:
609 		case 2:
610 			if (*b++ == 0xaa)
611 				dec->packet_state++;
612 			else
613 				dec->packet_state = 0;
614 
615 			length--;
616 			break;
617 
618 		case 3:
619 			if (*b == 0x00) {
620 				dec->packet_state++;
621 				dec->packet_length = 0;
622 			} else if (*b != 0xaa) {
623 				dec->packet_state = 0;
624 			}
625 
626 			b++;
627 			length--;
628 			break;
629 
630 		case 4:
631 			dec->packet[dec->packet_length++] = *b++;
632 
633 			if (dec->packet_length == 2) {
634 				if (dec->packet[0] == 'A' &&
635 				    dec->packet[1] == 'V') {
636 					dec->packet_type =
637 						TTUSB_DEC_PACKET_PVA;
638 					dec->packet_state++;
639 				} else if (dec->packet[0] == 'S') {
640 					dec->packet_type =
641 						TTUSB_DEC_PACKET_SECTION;
642 					dec->packet_state++;
643 				} else if (dec->packet[0] == 0x00) {
644 					dec->packet_type =
645 						TTUSB_DEC_PACKET_EMPTY;
646 					dec->packet_payload_length = 2;
647 					dec->packet_state = 7;
648 				} else {
649 					printk("%s: unknown packet type: "
650 					       "%02x%02x\n", __func__,
651 					       dec->packet[0], dec->packet[1]);
652 					dec->packet_state = 0;
653 				}
654 			}
655 
656 			length--;
657 			break;
658 
659 		case 5:
660 			dec->packet[dec->packet_length++] = *b++;
661 
662 			if (dec->packet_type == TTUSB_DEC_PACKET_PVA &&
663 			    dec->packet_length == 8) {
664 				dec->packet_state++;
665 				dec->packet_payload_length = 8 +
666 					(dec->packet[6] << 8) +
667 					dec->packet[7];
668 			} else if (dec->packet_type ==
669 					TTUSB_DEC_PACKET_SECTION &&
670 				   dec->packet_length == 5) {
671 				dec->packet_state++;
672 				dec->packet_payload_length = 5 +
673 					((dec->packet[3] & 0x0f) << 8) +
674 					dec->packet[4];
675 			}
676 
677 			length--;
678 			break;
679 
680 		case 6: {
681 			int remainder = dec->packet_payload_length -
682 					dec->packet_length;
683 
684 			if (length >= remainder) {
685 				memcpy(dec->packet + dec->packet_length,
686 				       b, remainder);
687 				dec->packet_length += remainder;
688 				b += remainder;
689 				length -= remainder;
690 				dec->packet_state++;
691 			} else {
692 				memcpy(&dec->packet[dec->packet_length],
693 				       b, length);
694 				dec->packet_length += length;
695 				length = 0;
696 			}
697 
698 			break;
699 		}
700 
701 		case 7: {
702 			int tail = 4;
703 
704 			dec->packet[dec->packet_length++] = *b++;
705 
706 			if (dec->packet_type == TTUSB_DEC_PACKET_SECTION &&
707 			    dec->packet_payload_length % 2)
708 				tail++;
709 
710 			if (dec->packet_length ==
711 			    dec->packet_payload_length + tail) {
712 				ttusb_dec_process_packet(dec);
713 				dec->packet_state = 0;
714 			}
715 
716 			length--;
717 			break;
718 		}
719 
720 		default:
721 			printk("%s: illegal packet state encountered.\n",
722 			       __func__);
723 			dec->packet_state = 0;
724 		}
725 	}
726 }
727 
728 static void ttusb_dec_process_urb_frame_list(unsigned long data)
729 {
730 	struct ttusb_dec *dec = (struct ttusb_dec *)data;
731 	struct list_head *item;
732 	struct urb_frame *frame;
733 	unsigned long flags;
734 
735 	while (1) {
736 		spin_lock_irqsave(&dec->urb_frame_list_lock, flags);
737 		if ((item = dec->urb_frame_list.next) != &dec->urb_frame_list) {
738 			frame = list_entry(item, struct urb_frame,
739 					   urb_frame_list);
740 			list_del(&frame->urb_frame_list);
741 		} else {
742 			spin_unlock_irqrestore(&dec->urb_frame_list_lock,
743 					       flags);
744 			return;
745 		}
746 		spin_unlock_irqrestore(&dec->urb_frame_list_lock, flags);
747 
748 		ttusb_dec_process_urb_frame(dec, frame->data, frame->length);
749 		kfree(frame);
750 	}
751 }
752 
753 static void ttusb_dec_process_urb(struct urb *urb)
754 {
755 	struct ttusb_dec *dec = urb->context;
756 
757 	if (!urb->status) {
758 		int i;
759 
760 		for (i = 0; i < FRAMES_PER_ISO_BUF; i++) {
761 			struct usb_iso_packet_descriptor *d;
762 			u8 *b;
763 			int length;
764 			struct urb_frame *frame;
765 
766 			d = &urb->iso_frame_desc[i];
767 			b = urb->transfer_buffer + d->offset;
768 			length = d->actual_length;
769 
770 			if ((frame = kmalloc(sizeof(struct urb_frame),
771 					     GFP_ATOMIC))) {
772 				unsigned long flags;
773 
774 				memcpy(frame->data, b, length);
775 				frame->length = length;
776 
777 				spin_lock_irqsave(&dec->urb_frame_list_lock,
778 						     flags);
779 				list_add_tail(&frame->urb_frame_list,
780 					      &dec->urb_frame_list);
781 				spin_unlock_irqrestore(&dec->urb_frame_list_lock,
782 						       flags);
783 
784 				tasklet_schedule(&dec->urb_tasklet);
785 			}
786 		}
787 	} else {
788 		 /* -ENOENT is expected when unlinking urbs */
789 		if (urb->status != -ENOENT)
790 			dprintk("%s: urb error: %d\n", __func__,
791 				urb->status);
792 	}
793 
794 	if (dec->iso_stream_count)
795 		usb_submit_urb(urb, GFP_ATOMIC);
796 }
797 
798 static void ttusb_dec_setup_urbs(struct ttusb_dec *dec)
799 {
800 	int i, j, buffer_offset = 0;
801 
802 	dprintk("%s\n", __func__);
803 
804 	for (i = 0; i < ISO_BUF_COUNT; i++) {
805 		int frame_offset = 0;
806 		struct urb *urb = dec->iso_urb[i];
807 
808 		urb->dev = dec->udev;
809 		urb->context = dec;
810 		urb->complete = ttusb_dec_process_urb;
811 		urb->pipe = dec->in_pipe;
812 		urb->transfer_flags = URB_ISO_ASAP;
813 		urb->interval = 1;
814 		urb->number_of_packets = FRAMES_PER_ISO_BUF;
815 		urb->transfer_buffer_length = ISO_FRAME_SIZE *
816 					      FRAMES_PER_ISO_BUF;
817 		urb->transfer_buffer = dec->iso_buffer + buffer_offset;
818 		buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
819 
820 		for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
821 			urb->iso_frame_desc[j].offset = frame_offset;
822 			urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
823 			frame_offset += ISO_FRAME_SIZE;
824 		}
825 	}
826 }
827 
828 static void ttusb_dec_stop_iso_xfer(struct ttusb_dec *dec)
829 {
830 	int i;
831 
832 	dprintk("%s\n", __func__);
833 
834 	if (mutex_lock_interruptible(&dec->iso_mutex))
835 		return;
836 
837 	dec->iso_stream_count--;
838 
839 	if (!dec->iso_stream_count) {
840 		for (i = 0; i < ISO_BUF_COUNT; i++)
841 			usb_kill_urb(dec->iso_urb[i]);
842 	}
843 
844 	mutex_unlock(&dec->iso_mutex);
845 }
846 
847 /* Setting the interface of the DEC tends to take down the USB communications
848  * for a short period, so it's important not to call this function just before
849  * trying to talk to it.
850  */
851 static int ttusb_dec_set_interface(struct ttusb_dec *dec,
852 				   enum ttusb_dec_interface interface)
853 {
854 	int result = 0;
855 	u8 b[] = { 0x05 };
856 
857 	if (interface != dec->interface) {
858 		switch (interface) {
859 		case TTUSB_DEC_INTERFACE_INITIAL:
860 			result = usb_set_interface(dec->udev, 0, 0);
861 			break;
862 		case TTUSB_DEC_INTERFACE_IN:
863 			result = ttusb_dec_send_command(dec, 0x80, sizeof(b),
864 							b, NULL, NULL);
865 			if (result)
866 				return result;
867 			result = usb_set_interface(dec->udev, 0, 8);
868 			break;
869 		case TTUSB_DEC_INTERFACE_OUT:
870 			result = usb_set_interface(dec->udev, 0, 1);
871 			break;
872 		}
873 
874 		if (result)
875 			return result;
876 
877 		dec->interface = interface;
878 	}
879 
880 	return 0;
881 }
882 
883 static int ttusb_dec_start_iso_xfer(struct ttusb_dec *dec)
884 {
885 	int i, result;
886 
887 	dprintk("%s\n", __func__);
888 
889 	if (mutex_lock_interruptible(&dec->iso_mutex))
890 		return -EAGAIN;
891 
892 	if (!dec->iso_stream_count) {
893 		ttusb_dec_setup_urbs(dec);
894 
895 		dec->packet_state = 0;
896 		dec->v_pes_postbytes = 0;
897 		dec->next_packet_id = 0;
898 
899 		for (i = 0; i < ISO_BUF_COUNT; i++) {
900 			if ((result = usb_submit_urb(dec->iso_urb[i],
901 						     GFP_ATOMIC))) {
902 				printk("%s: failed urb submission %d: "
903 				       "error %d\n", __func__, i, result);
904 
905 				while (i) {
906 					usb_kill_urb(dec->iso_urb[i - 1]);
907 					i--;
908 				}
909 
910 				mutex_unlock(&dec->iso_mutex);
911 				return result;
912 			}
913 		}
914 	}
915 
916 	dec->iso_stream_count++;
917 
918 	mutex_unlock(&dec->iso_mutex);
919 
920 	return 0;
921 }
922 
923 static int ttusb_dec_start_ts_feed(struct dvb_demux_feed *dvbdmxfeed)
924 {
925 	struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
926 	struct ttusb_dec *dec = dvbdmx->priv;
927 	u8 b0[] = { 0x05 };
928 	int result = 0;
929 
930 	dprintk("%s\n", __func__);
931 
932 	dprintk("  ts_type:");
933 
934 	if (dvbdmxfeed->ts_type & TS_DECODER)
935 		dprintk(" TS_DECODER");
936 
937 	if (dvbdmxfeed->ts_type & TS_PACKET)
938 		dprintk(" TS_PACKET");
939 
940 	if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)
941 		dprintk(" TS_PAYLOAD_ONLY");
942 
943 	dprintk("\n");
944 
945 	switch (dvbdmxfeed->pes_type) {
946 
947 	case DMX_PES_VIDEO:
948 		dprintk("  pes_type: DMX_PES_VIDEO\n");
949 		dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
950 		dec->pid[DMX_PES_VIDEO] = dvbdmxfeed->pid;
951 		dec->video_filter = dvbdmxfeed->filter;
952 		ttusb_dec_set_pids(dec);
953 		break;
954 
955 	case DMX_PES_AUDIO:
956 		dprintk("  pes_type: DMX_PES_AUDIO\n");
957 		dec->pid[DMX_PES_AUDIO] = dvbdmxfeed->pid;
958 		dec->audio_filter = dvbdmxfeed->filter;
959 		ttusb_dec_set_pids(dec);
960 		break;
961 
962 	case DMX_PES_TELETEXT:
963 		dec->pid[DMX_PES_TELETEXT] = dvbdmxfeed->pid;
964 		dprintk("  pes_type: DMX_PES_TELETEXT(not supported)\n");
965 		return -ENOSYS;
966 
967 	case DMX_PES_PCR:
968 		dprintk("  pes_type: DMX_PES_PCR\n");
969 		dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
970 		ttusb_dec_set_pids(dec);
971 		break;
972 
973 	case DMX_PES_OTHER:
974 		dprintk("  pes_type: DMX_PES_OTHER(not supported)\n");
975 		return -ENOSYS;
976 
977 	default:
978 		dprintk("  pes_type: unknown (%d)\n", dvbdmxfeed->pes_type);
979 		return -EINVAL;
980 
981 	}
982 
983 	result = ttusb_dec_send_command(dec, 0x80, sizeof(b0), b0, NULL, NULL);
984 	if (result)
985 		return result;
986 
987 	dec->pva_stream_count++;
988 	return ttusb_dec_start_iso_xfer(dec);
989 }
990 
991 static int ttusb_dec_start_sec_feed(struct dvb_demux_feed *dvbdmxfeed)
992 {
993 	struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
994 	u8 b0[] = { 0x00, 0x00, 0x00, 0x01,
995 		    0x00, 0x00, 0x00, 0x00,
996 		    0x00, 0x00, 0x00, 0x00,
997 		    0x00, 0x00, 0x00, 0x00,
998 		    0x00, 0xff, 0x00, 0x00,
999 		    0x00, 0x00, 0x00, 0x00,
1000 		    0x00, 0x00, 0x00, 0x00,
1001 		    0x00 };
1002 	__be16 pid;
1003 	u8 c[COMMAND_PACKET_SIZE];
1004 	int c_length;
1005 	int result;
1006 	struct filter_info *finfo;
1007 	unsigned long flags;
1008 	u8 x = 1;
1009 
1010 	dprintk("%s\n", __func__);
1011 
1012 	pid = htons(dvbdmxfeed->pid);
1013 	memcpy(&b0[0], &pid, 2);
1014 	memcpy(&b0[4], &x, 1);
1015 	memcpy(&b0[5], &dvbdmxfeed->filter->filter.filter_value[0], 1);
1016 
1017 	result = ttusb_dec_send_command(dec, 0x60, sizeof(b0), b0,
1018 					&c_length, c);
1019 
1020 	if (!result) {
1021 		if (c_length == 2) {
1022 			if (!(finfo = kmalloc(sizeof(struct filter_info),
1023 					      GFP_ATOMIC)))
1024 				return -ENOMEM;
1025 
1026 			finfo->stream_id = c[1];
1027 			finfo->filter = dvbdmxfeed->filter;
1028 
1029 			spin_lock_irqsave(&dec->filter_info_list_lock, flags);
1030 			list_add_tail(&finfo->filter_info_list,
1031 				      &dec->filter_info_list);
1032 			spin_unlock_irqrestore(&dec->filter_info_list_lock,
1033 					       flags);
1034 
1035 			dvbdmxfeed->priv = finfo;
1036 
1037 			dec->filter_stream_count++;
1038 			return ttusb_dec_start_iso_xfer(dec);
1039 		}
1040 
1041 		return -EAGAIN;
1042 	} else
1043 		return result;
1044 }
1045 
1046 static int ttusb_dec_start_feed(struct dvb_demux_feed *dvbdmxfeed)
1047 {
1048 	struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
1049 
1050 	dprintk("%s\n", __func__);
1051 
1052 	if (!dvbdmx->dmx.frontend)
1053 		return -EINVAL;
1054 
1055 	dprintk("  pid: 0x%04X\n", dvbdmxfeed->pid);
1056 
1057 	switch (dvbdmxfeed->type) {
1058 
1059 	case DMX_TYPE_TS:
1060 		return ttusb_dec_start_ts_feed(dvbdmxfeed);
1061 		break;
1062 
1063 	case DMX_TYPE_SEC:
1064 		return ttusb_dec_start_sec_feed(dvbdmxfeed);
1065 		break;
1066 
1067 	default:
1068 		dprintk("  type: unknown (%d)\n", dvbdmxfeed->type);
1069 		return -EINVAL;
1070 
1071 	}
1072 }
1073 
1074 static int ttusb_dec_stop_ts_feed(struct dvb_demux_feed *dvbdmxfeed)
1075 {
1076 	struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
1077 	u8 b0[] = { 0x00 };
1078 
1079 	ttusb_dec_send_command(dec, 0x81, sizeof(b0), b0, NULL, NULL);
1080 
1081 	dec->pva_stream_count--;
1082 
1083 	ttusb_dec_stop_iso_xfer(dec);
1084 
1085 	return 0;
1086 }
1087 
1088 static int ttusb_dec_stop_sec_feed(struct dvb_demux_feed *dvbdmxfeed)
1089 {
1090 	struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
1091 	u8 b0[] = { 0x00, 0x00 };
1092 	struct filter_info *finfo = (struct filter_info *)dvbdmxfeed->priv;
1093 	unsigned long flags;
1094 
1095 	b0[1] = finfo->stream_id;
1096 	spin_lock_irqsave(&dec->filter_info_list_lock, flags);
1097 	list_del(&finfo->filter_info_list);
1098 	spin_unlock_irqrestore(&dec->filter_info_list_lock, flags);
1099 	kfree(finfo);
1100 	ttusb_dec_send_command(dec, 0x62, sizeof(b0), b0, NULL, NULL);
1101 
1102 	dec->filter_stream_count--;
1103 
1104 	ttusb_dec_stop_iso_xfer(dec);
1105 
1106 	return 0;
1107 }
1108 
1109 static int ttusb_dec_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
1110 {
1111 	dprintk("%s\n", __func__);
1112 
1113 	switch (dvbdmxfeed->type) {
1114 	case DMX_TYPE_TS:
1115 		return ttusb_dec_stop_ts_feed(dvbdmxfeed);
1116 		break;
1117 
1118 	case DMX_TYPE_SEC:
1119 		return ttusb_dec_stop_sec_feed(dvbdmxfeed);
1120 		break;
1121 	}
1122 
1123 	return 0;
1124 }
1125 
1126 static void ttusb_dec_free_iso_urbs(struct ttusb_dec *dec)
1127 {
1128 	int i;
1129 
1130 	dprintk("%s\n", __func__);
1131 
1132 	for (i = 0; i < ISO_BUF_COUNT; i++)
1133 		usb_free_urb(dec->iso_urb[i]);
1134 
1135 	pci_free_consistent(NULL,
1136 			    ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF *
1137 					      ISO_BUF_COUNT),
1138 			    dec->iso_buffer, dec->iso_dma_handle);
1139 }
1140 
1141 static int ttusb_dec_alloc_iso_urbs(struct ttusb_dec *dec)
1142 {
1143 	int i;
1144 
1145 	dprintk("%s\n", __func__);
1146 
1147 	dec->iso_buffer = pci_zalloc_consistent(NULL,
1148 						ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF * ISO_BUF_COUNT),
1149 						&dec->iso_dma_handle);
1150 
1151 	if (!dec->iso_buffer) {
1152 		dprintk("%s: pci_alloc_consistent - not enough memory\n",
1153 			__func__);
1154 		return -ENOMEM;
1155 	}
1156 
1157 	for (i = 0; i < ISO_BUF_COUNT; i++) {
1158 		struct urb *urb;
1159 
1160 		if (!(urb = usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_ATOMIC))) {
1161 			ttusb_dec_free_iso_urbs(dec);
1162 			return -ENOMEM;
1163 		}
1164 
1165 		dec->iso_urb[i] = urb;
1166 	}
1167 
1168 	ttusb_dec_setup_urbs(dec);
1169 
1170 	return 0;
1171 }
1172 
1173 static void ttusb_dec_init_tasklet(struct ttusb_dec *dec)
1174 {
1175 	spin_lock_init(&dec->urb_frame_list_lock);
1176 	INIT_LIST_HEAD(&dec->urb_frame_list);
1177 	tasklet_init(&dec->urb_tasklet, ttusb_dec_process_urb_frame_list,
1178 		     (unsigned long)dec);
1179 }
1180 
1181 static int ttusb_init_rc( struct ttusb_dec *dec)
1182 {
1183 	struct input_dev *input_dev;
1184 	u8 b[] = { 0x00, 0x01 };
1185 	int i;
1186 	int err;
1187 
1188 	usb_make_path(dec->udev, dec->rc_phys, sizeof(dec->rc_phys));
1189 	strlcat(dec->rc_phys, "/input0", sizeof(dec->rc_phys));
1190 
1191 	input_dev = input_allocate_device();
1192 	if (!input_dev)
1193 		return -ENOMEM;
1194 
1195 	input_dev->name = "ttusb_dec remote control";
1196 	input_dev->phys = dec->rc_phys;
1197 	input_dev->evbit[0] = BIT_MASK(EV_KEY);
1198 	input_dev->keycodesize = sizeof(u16);
1199 	input_dev->keycodemax = 0x1a;
1200 	input_dev->keycode = rc_keys;
1201 
1202 	for (i = 0; i < ARRAY_SIZE(rc_keys); i++)
1203 		  set_bit(rc_keys[i], input_dev->keybit);
1204 
1205 	err = input_register_device(input_dev);
1206 	if (err) {
1207 		input_free_device(input_dev);
1208 		return err;
1209 	}
1210 
1211 	dec->rc_input_dev = input_dev;
1212 	if (usb_submit_urb(dec->irq_urb, GFP_KERNEL))
1213 		printk("%s: usb_submit_urb failed\n",__func__);
1214 	/* enable irq pipe */
1215 	ttusb_dec_send_command(dec,0xb0,sizeof(b),b,NULL,NULL);
1216 
1217 	return 0;
1218 }
1219 
1220 static void ttusb_dec_init_v_pes(struct ttusb_dec *dec)
1221 {
1222 	dprintk("%s\n", __func__);
1223 
1224 	dec->v_pes[0] = 0x00;
1225 	dec->v_pes[1] = 0x00;
1226 	dec->v_pes[2] = 0x01;
1227 	dec->v_pes[3] = 0xe0;
1228 }
1229 
1230 static int ttusb_dec_init_usb(struct ttusb_dec *dec)
1231 {
1232 	int result;
1233 
1234 	dprintk("%s\n", __func__);
1235 
1236 	mutex_init(&dec->usb_mutex);
1237 	mutex_init(&dec->iso_mutex);
1238 
1239 	dec->command_pipe = usb_sndbulkpipe(dec->udev, COMMAND_PIPE);
1240 	dec->result_pipe = usb_rcvbulkpipe(dec->udev, RESULT_PIPE);
1241 	dec->in_pipe = usb_rcvisocpipe(dec->udev, IN_PIPE);
1242 	dec->out_pipe = usb_sndisocpipe(dec->udev, OUT_PIPE);
1243 	dec->irq_pipe = usb_rcvintpipe(dec->udev, IRQ_PIPE);
1244 
1245 	if(enable_rc) {
1246 		dec->irq_urb = usb_alloc_urb(0, GFP_KERNEL);
1247 		if(!dec->irq_urb) {
1248 			return -ENOMEM;
1249 		}
1250 		dec->irq_buffer = usb_alloc_coherent(dec->udev,IRQ_PACKET_SIZE,
1251 					GFP_KERNEL, &dec->irq_dma_handle);
1252 		if(!dec->irq_buffer) {
1253 			usb_free_urb(dec->irq_urb);
1254 			return -ENOMEM;
1255 		}
1256 		usb_fill_int_urb(dec->irq_urb, dec->udev,dec->irq_pipe,
1257 				 dec->irq_buffer, IRQ_PACKET_SIZE,
1258 				 ttusb_dec_handle_irq, dec, 1);
1259 		dec->irq_urb->transfer_dma = dec->irq_dma_handle;
1260 		dec->irq_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1261 	}
1262 
1263 	result = ttusb_dec_alloc_iso_urbs(dec);
1264 	if (result) {
1265 		usb_free_urb(dec->irq_urb);
1266 		usb_free_coherent(dec->udev, IRQ_PACKET_SIZE,
1267 				  dec->irq_buffer, dec->irq_dma_handle);
1268 	}
1269 	return result;
1270 }
1271 
1272 static int ttusb_dec_boot_dsp(struct ttusb_dec *dec)
1273 {
1274 	int i, j, actual_len, result, size, trans_count;
1275 	u8 b0[] = { 0x00, 0x00, 0x00, 0x00,
1276 		    0x00, 0x00, 0x00, 0x00,
1277 		    0x61, 0x00 };
1278 	u8 b1[] = { 0x61 };
1279 	u8 *b;
1280 	char idstring[21];
1281 	const u8 *firmware = NULL;
1282 	size_t firmware_size = 0;
1283 	u16 firmware_csum = 0;
1284 	__be16 firmware_csum_ns;
1285 	__be32 firmware_size_nl;
1286 	u32 crc32_csum, crc32_check;
1287 	__be32 tmp;
1288 	const struct firmware *fw_entry = NULL;
1289 
1290 	dprintk("%s\n", __func__);
1291 
1292 	result = request_firmware(&fw_entry, dec->firmware_name, &dec->udev->dev);
1293 	if (result) {
1294 		printk(KERN_ERR "%s: Firmware (%s) unavailable.\n",
1295 		       __func__, dec->firmware_name);
1296 		return result;
1297 	}
1298 
1299 	firmware = fw_entry->data;
1300 	firmware_size = fw_entry->size;
1301 
1302 	if (firmware_size < 60) {
1303 		printk("%s: firmware size too small for DSP code (%zu < 60).\n",
1304 			__func__, firmware_size);
1305 		release_firmware(fw_entry);
1306 		return -ENOENT;
1307 	}
1308 
1309 	/* a 32 bit checksum over the first 56 bytes of the DSP Code is stored
1310 	   at offset 56 of file, so use it to check if the firmware file is
1311 	   valid. */
1312 	crc32_csum = crc32(~0L, firmware, 56) ^ ~0L;
1313 	memcpy(&tmp, &firmware[56], 4);
1314 	crc32_check = ntohl(tmp);
1315 	if (crc32_csum != crc32_check) {
1316 		printk("%s: crc32 check of DSP code failed (calculated "
1317 		       "0x%08x != 0x%08x in file), file invalid.\n",
1318 			__func__, crc32_csum, crc32_check);
1319 		release_firmware(fw_entry);
1320 		return -ENOENT;
1321 	}
1322 	memcpy(idstring, &firmware[36], 20);
1323 	idstring[20] = '\0';
1324 	printk(KERN_INFO "ttusb_dec: found DSP code \"%s\".\n", idstring);
1325 
1326 	firmware_size_nl = htonl(firmware_size);
1327 	memcpy(b0, &firmware_size_nl, 4);
1328 	firmware_csum = crc16(~0, firmware, firmware_size) ^ ~0;
1329 	firmware_csum_ns = htons(firmware_csum);
1330 	memcpy(&b0[6], &firmware_csum_ns, 2);
1331 
1332 	result = ttusb_dec_send_command(dec, 0x41, sizeof(b0), b0, NULL, NULL);
1333 
1334 	if (result) {
1335 		release_firmware(fw_entry);
1336 		return result;
1337 	}
1338 
1339 	trans_count = 0;
1340 	j = 0;
1341 
1342 	b = kmalloc(ARM_PACKET_SIZE, GFP_KERNEL);
1343 	if (b == NULL) {
1344 		release_firmware(fw_entry);
1345 		return -ENOMEM;
1346 	}
1347 
1348 	for (i = 0; i < firmware_size; i += COMMAND_PACKET_SIZE) {
1349 		size = firmware_size - i;
1350 		if (size > COMMAND_PACKET_SIZE)
1351 			size = COMMAND_PACKET_SIZE;
1352 
1353 		b[j + 0] = 0xaa;
1354 		b[j + 1] = trans_count++;
1355 		b[j + 2] = 0xf0;
1356 		b[j + 3] = size;
1357 		memcpy(&b[j + 4], &firmware[i], size);
1358 
1359 		j += COMMAND_PACKET_SIZE + 4;
1360 
1361 		if (j >= ARM_PACKET_SIZE) {
1362 			result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
1363 					      ARM_PACKET_SIZE, &actual_len,
1364 					      100);
1365 			j = 0;
1366 		} else if (size < COMMAND_PACKET_SIZE) {
1367 			result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
1368 					      j - COMMAND_PACKET_SIZE + size,
1369 					      &actual_len, 100);
1370 		}
1371 	}
1372 
1373 	result = ttusb_dec_send_command(dec, 0x43, sizeof(b1), b1, NULL, NULL);
1374 
1375 	release_firmware(fw_entry);
1376 	kfree(b);
1377 
1378 	return result;
1379 }
1380 
1381 static int ttusb_dec_init_stb(struct ttusb_dec *dec)
1382 {
1383 	int result;
1384 	unsigned int mode = 0, model = 0, version = 0;
1385 
1386 	dprintk("%s\n", __func__);
1387 
1388 	result = ttusb_dec_get_stb_state(dec, &mode, &model, &version);
1389 	if (result)
1390 		return result;
1391 
1392 	if (!mode) {
1393 		if (version == 0xABCDEFAB)
1394 			printk(KERN_INFO "ttusb_dec: no version "
1395 			       "info in Firmware\n");
1396 		else
1397 			printk(KERN_INFO "ttusb_dec: Firmware "
1398 			       "%x.%02x%c%c\n",
1399 			       version >> 24, (version >> 16) & 0xff,
1400 			       (version >> 8) & 0xff, version & 0xff);
1401 
1402 		result = ttusb_dec_boot_dsp(dec);
1403 		if (result)
1404 			return result;
1405 	} else {
1406 		/* We can't trust the USB IDs that some firmwares
1407 		   give the box */
1408 		switch (model) {
1409 		case 0x00070001:
1410 		case 0x00070008:
1411 		case 0x0007000c:
1412 			ttusb_dec_set_model(dec, TTUSB_DEC3000S);
1413 			break;
1414 		case 0x00070009:
1415 		case 0x00070013:
1416 			ttusb_dec_set_model(dec, TTUSB_DEC2000T);
1417 			break;
1418 		case 0x00070011:
1419 			ttusb_dec_set_model(dec, TTUSB_DEC2540T);
1420 			break;
1421 		default:
1422 			printk(KERN_ERR "%s: unknown model returned "
1423 			       "by firmware (%08x) - please report\n",
1424 			       __func__, model);
1425 			return -ENOENT;
1426 		}
1427 		if (version >= 0x01770000)
1428 			dec->can_playback = 1;
1429 	}
1430 	return 0;
1431 }
1432 
1433 static int ttusb_dec_init_dvb(struct ttusb_dec *dec)
1434 {
1435 	int result;
1436 
1437 	dprintk("%s\n", __func__);
1438 
1439 	if ((result = dvb_register_adapter(&dec->adapter,
1440 					   dec->model_name, THIS_MODULE,
1441 					   &dec->udev->dev,
1442 					   adapter_nr)) < 0) {
1443 		printk("%s: dvb_register_adapter failed: error %d\n",
1444 		       __func__, result);
1445 
1446 		return result;
1447 	}
1448 
1449 	dec->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
1450 
1451 	dec->demux.priv = (void *)dec;
1452 	dec->demux.filternum = 31;
1453 	dec->demux.feednum = 31;
1454 	dec->demux.start_feed = ttusb_dec_start_feed;
1455 	dec->demux.stop_feed = ttusb_dec_stop_feed;
1456 	dec->demux.write_to_decoder = NULL;
1457 
1458 	if ((result = dvb_dmx_init(&dec->demux)) < 0) {
1459 		printk("%s: dvb_dmx_init failed: error %d\n", __func__,
1460 		       result);
1461 
1462 		dvb_unregister_adapter(&dec->adapter);
1463 
1464 		return result;
1465 	}
1466 
1467 	dec->dmxdev.filternum = 32;
1468 	dec->dmxdev.demux = &dec->demux.dmx;
1469 	dec->dmxdev.capabilities = 0;
1470 
1471 	if ((result = dvb_dmxdev_init(&dec->dmxdev, &dec->adapter)) < 0) {
1472 		printk("%s: dvb_dmxdev_init failed: error %d\n",
1473 		       __func__, result);
1474 
1475 		dvb_dmx_release(&dec->demux);
1476 		dvb_unregister_adapter(&dec->adapter);
1477 
1478 		return result;
1479 	}
1480 
1481 	dec->frontend.source = DMX_FRONTEND_0;
1482 
1483 	if ((result = dec->demux.dmx.add_frontend(&dec->demux.dmx,
1484 						  &dec->frontend)) < 0) {
1485 		printk("%s: dvb_dmx_init failed: error %d\n", __func__,
1486 		       result);
1487 
1488 		dvb_dmxdev_release(&dec->dmxdev);
1489 		dvb_dmx_release(&dec->demux);
1490 		dvb_unregister_adapter(&dec->adapter);
1491 
1492 		return result;
1493 	}
1494 
1495 	if ((result = dec->demux.dmx.connect_frontend(&dec->demux.dmx,
1496 						      &dec->frontend)) < 0) {
1497 		printk("%s: dvb_dmx_init failed: error %d\n", __func__,
1498 		       result);
1499 
1500 		dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
1501 		dvb_dmxdev_release(&dec->dmxdev);
1502 		dvb_dmx_release(&dec->demux);
1503 		dvb_unregister_adapter(&dec->adapter);
1504 
1505 		return result;
1506 	}
1507 
1508 	dvb_net_init(&dec->adapter, &dec->dvb_net, &dec->demux.dmx);
1509 
1510 	return 0;
1511 }
1512 
1513 static void ttusb_dec_exit_dvb(struct ttusb_dec *dec)
1514 {
1515 	dprintk("%s\n", __func__);
1516 
1517 	dvb_net_release(&dec->dvb_net);
1518 	dec->demux.dmx.close(&dec->demux.dmx);
1519 	dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
1520 	dvb_dmxdev_release(&dec->dmxdev);
1521 	dvb_dmx_release(&dec->demux);
1522 	if (dec->fe) {
1523 		dvb_unregister_frontend(dec->fe);
1524 		if (dec->fe->ops.release)
1525 			dec->fe->ops.release(dec->fe);
1526 	}
1527 	dvb_unregister_adapter(&dec->adapter);
1528 }
1529 
1530 static void ttusb_dec_exit_rc(struct ttusb_dec *dec)
1531 {
1532 	dprintk("%s\n", __func__);
1533 
1534 	if (dec->rc_input_dev) {
1535 		input_unregister_device(dec->rc_input_dev);
1536 		dec->rc_input_dev = NULL;
1537 	}
1538 }
1539 
1540 
1541 static void ttusb_dec_exit_usb(struct ttusb_dec *dec)
1542 {
1543 	int i;
1544 
1545 	dprintk("%s\n", __func__);
1546 
1547 	if (enable_rc) {
1548 		/* we have to check whether the irq URB is already submitted.
1549 		 * As the irq is submitted after the interface is changed,
1550 		 * this is the best method i figured out.
1551 		 * Any others?*/
1552 		if (dec->interface == TTUSB_DEC_INTERFACE_IN)
1553 			usb_kill_urb(dec->irq_urb);
1554 
1555 		usb_free_urb(dec->irq_urb);
1556 
1557 		usb_free_coherent(dec->udev, IRQ_PACKET_SIZE,
1558 				  dec->irq_buffer, dec->irq_dma_handle);
1559 	}
1560 
1561 	dec->iso_stream_count = 0;
1562 
1563 	for (i = 0; i < ISO_BUF_COUNT; i++)
1564 		usb_kill_urb(dec->iso_urb[i]);
1565 
1566 	ttusb_dec_free_iso_urbs(dec);
1567 }
1568 
1569 static void ttusb_dec_exit_tasklet(struct ttusb_dec *dec)
1570 {
1571 	struct list_head *item;
1572 	struct urb_frame *frame;
1573 
1574 	tasklet_kill(&dec->urb_tasklet);
1575 
1576 	while ((item = dec->urb_frame_list.next) != &dec->urb_frame_list) {
1577 		frame = list_entry(item, struct urb_frame, urb_frame_list);
1578 		list_del(&frame->urb_frame_list);
1579 		kfree(frame);
1580 	}
1581 }
1582 
1583 static void ttusb_dec_init_filters(struct ttusb_dec *dec)
1584 {
1585 	INIT_LIST_HEAD(&dec->filter_info_list);
1586 	spin_lock_init(&dec->filter_info_list_lock);
1587 }
1588 
1589 static void ttusb_dec_exit_filters(struct ttusb_dec *dec)
1590 {
1591 	struct list_head *item;
1592 	struct filter_info *finfo;
1593 
1594 	while ((item = dec->filter_info_list.next) != &dec->filter_info_list) {
1595 		finfo = list_entry(item, struct filter_info, filter_info_list);
1596 		list_del(&finfo->filter_info_list);
1597 		kfree(finfo);
1598 	}
1599 }
1600 
1601 static int fe_send_command(struct dvb_frontend* fe, const u8 command,
1602 			   int param_length, const u8 params[],
1603 			   int *result_length, u8 cmd_result[])
1604 {
1605 	struct ttusb_dec* dec = fe->dvb->priv;
1606 	return ttusb_dec_send_command(dec, command, param_length, params, result_length, cmd_result);
1607 }
1608 
1609 static const struct ttusbdecfe_config fe_config = {
1610 	.send_command = fe_send_command
1611 };
1612 
1613 static int ttusb_dec_probe(struct usb_interface *intf,
1614 			   const struct usb_device_id *id)
1615 {
1616 	struct usb_device *udev;
1617 	struct ttusb_dec *dec;
1618 	int result;
1619 
1620 	dprintk("%s\n", __func__);
1621 
1622 	udev = interface_to_usbdev(intf);
1623 
1624 	if (!(dec = kzalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
1625 		printk("%s: couldn't allocate memory.\n", __func__);
1626 		return -ENOMEM;
1627 	}
1628 
1629 	usb_set_intfdata(intf, (void *)dec);
1630 
1631 	switch (id->idProduct) {
1632 	case 0x1006:
1633 		ttusb_dec_set_model(dec, TTUSB_DEC3000S);
1634 		break;
1635 
1636 	case 0x1008:
1637 		ttusb_dec_set_model(dec, TTUSB_DEC2000T);
1638 		break;
1639 
1640 	case 0x1009:
1641 		ttusb_dec_set_model(dec, TTUSB_DEC2540T);
1642 		break;
1643 	}
1644 
1645 	dec->udev = udev;
1646 
1647 	result = ttusb_dec_init_usb(dec);
1648 	if (result)
1649 		goto err_usb;
1650 	result = ttusb_dec_init_stb(dec);
1651 	if (result)
1652 		goto err_stb;
1653 	result = ttusb_dec_init_dvb(dec);
1654 	if (result)
1655 		goto err_stb;
1656 
1657 	dec->adapter.priv = dec;
1658 	switch (id->idProduct) {
1659 	case 0x1006:
1660 		dec->fe = ttusbdecfe_dvbs_attach(&fe_config);
1661 		break;
1662 
1663 	case 0x1008:
1664 	case 0x1009:
1665 		dec->fe = ttusbdecfe_dvbt_attach(&fe_config);
1666 		break;
1667 	}
1668 
1669 	if (dec->fe == NULL) {
1670 		printk("dvb-ttusb-dec: A frontend driver was not found for device [%04x:%04x]\n",
1671 		       le16_to_cpu(dec->udev->descriptor.idVendor),
1672 		       le16_to_cpu(dec->udev->descriptor.idProduct));
1673 	} else {
1674 		if (dvb_register_frontend(&dec->adapter, dec->fe)) {
1675 			printk("budget-ci: Frontend registration failed!\n");
1676 			if (dec->fe->ops.release)
1677 				dec->fe->ops.release(dec->fe);
1678 			dec->fe = NULL;
1679 		}
1680 	}
1681 
1682 	ttusb_dec_init_v_pes(dec);
1683 	ttusb_dec_init_filters(dec);
1684 	ttusb_dec_init_tasklet(dec);
1685 
1686 	dec->active = 1;
1687 
1688 	ttusb_dec_set_interface(dec, TTUSB_DEC_INTERFACE_IN);
1689 
1690 	if (enable_rc)
1691 		ttusb_init_rc(dec);
1692 
1693 	return 0;
1694 err_stb:
1695 	ttusb_dec_exit_usb(dec);
1696 err_usb:
1697 	kfree(dec);
1698 	return result;
1699 }
1700 
1701 static void ttusb_dec_disconnect(struct usb_interface *intf)
1702 {
1703 	struct ttusb_dec *dec = usb_get_intfdata(intf);
1704 
1705 	usb_set_intfdata(intf, NULL);
1706 
1707 	dprintk("%s\n", __func__);
1708 
1709 	if (dec->active) {
1710 		ttusb_dec_exit_tasklet(dec);
1711 		ttusb_dec_exit_filters(dec);
1712 		if(enable_rc)
1713 			ttusb_dec_exit_rc(dec);
1714 		ttusb_dec_exit_usb(dec);
1715 		ttusb_dec_exit_dvb(dec);
1716 	}
1717 
1718 	kfree(dec);
1719 }
1720 
1721 static void ttusb_dec_set_model(struct ttusb_dec *dec,
1722 				enum ttusb_dec_model model)
1723 {
1724 	dec->model = model;
1725 
1726 	switch (model) {
1727 	case TTUSB_DEC2000T:
1728 		dec->model_name = "DEC2000-t";
1729 		dec->firmware_name = "dvb-ttusb-dec-2000t.fw";
1730 		break;
1731 
1732 	case TTUSB_DEC2540T:
1733 		dec->model_name = "DEC2540-t";
1734 		dec->firmware_name = "dvb-ttusb-dec-2540t.fw";
1735 		break;
1736 
1737 	case TTUSB_DEC3000S:
1738 		dec->model_name = "DEC3000-s";
1739 		dec->firmware_name = "dvb-ttusb-dec-3000s.fw";
1740 		break;
1741 	}
1742 }
1743 
1744 static struct usb_device_id ttusb_dec_table[] = {
1745 	{USB_DEVICE(0x0b48, 0x1006)},	/* DEC3000-s */
1746 	/*{USB_DEVICE(0x0b48, 0x1007)},	   Unconfirmed */
1747 	{USB_DEVICE(0x0b48, 0x1008)},	/* DEC2000-t */
1748 	{USB_DEVICE(0x0b48, 0x1009)},	/* DEC2540-t */
1749 	{}
1750 };
1751 
1752 static struct usb_driver ttusb_dec_driver = {
1753 	.name		= "ttusb-dec",
1754 	.probe		= ttusb_dec_probe,
1755 	.disconnect	= ttusb_dec_disconnect,
1756 	.id_table	= ttusb_dec_table,
1757 };
1758 
1759 module_usb_driver(ttusb_dec_driver);
1760 
1761 MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org>");
1762 MODULE_DESCRIPTION(DRIVER_NAME);
1763 MODULE_LICENSE("GPL");
1764 MODULE_DEVICE_TABLE(usb, ttusb_dec_table);
1765