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