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