Lines Matching full:fifo

143 	struct usb_fifo *owner_fifo;	/* pointer to owner fifo */
149 int fifonum; /* fifo index attached to this structure */
150 int active; /* fifo is currently active */
159 int bit_line; /* how much bits are in the fifo? */
201 usb_fifo fifos[HFCUSB_NUM_FIFOS]; /* structure holding all fifo data */
209 static void collect_rx_frame(usb_fifo * fifo, __u8 * data, int len,
454 start_isoc_chain(usb_fifo * fifo, int num_packets_per_urb, in start_isoc_chain() argument
459 DBG(HFCUSB_DBG_INIT, "HFC-S USB: starting ISO-URBs for fifo:%d\n", in start_isoc_chain()
460 fifo->fifonum); in start_isoc_chain()
464 if (!(fifo->iso[i].purb)) { in start_isoc_chain()
465 fifo->iso[i].purb = in start_isoc_chain()
467 if (!(fifo->iso[i].purb)) { in start_isoc_chain()
469 "alloc urb for fifo %i failed!!!", in start_isoc_chain()
470 fifo->fifonum); in start_isoc_chain()
472 fifo->iso[i].owner_fifo = (struct usb_fifo *) fifo; in start_isoc_chain()
476 (fifo->usb_packet_maxlen * in start_isoc_chain()
478 fill_isoc_urb(fifo->iso[i].purb, in start_isoc_chain()
479 fifo->hfc->dev, fifo->pipe, in start_isoc_chain()
480 fifo->iso[i].buffer, in start_isoc_chain()
482 fifo->usb_packet_maxlen, in start_isoc_chain()
483 fifo->intervall, complete, in start_isoc_chain()
484 &fifo->iso[i]); in start_isoc_chain()
485 memset(fifo->iso[i].buffer, 0, in start_isoc_chain()
486 sizeof(fifo->iso[i].buffer)); in start_isoc_chain()
487 /* defining packet delimeters in fifo->buffer */ in start_isoc_chain()
489 fifo->iso[i].purb-> in start_isoc_chain()
492 fifo->iso[i].purb-> in start_isoc_chain()
501 fifo->bit_line = BITLINE_INF; in start_isoc_chain()
503 errcode = usb_submit_urb(fifo->iso[i].purb, GFP_KERNEL); in start_isoc_chain()
504 fifo->active = (errcode >= 0) ? 1 : 0; in start_isoc_chain()
509 return (fifo->active); in start_isoc_chain()
514 stop_isoc_chain(usb_fifo * fifo) in stop_isoc_chain() argument
519 if (fifo->iso[i].purb) { in stop_isoc_chain()
521 "HFC-S USB: Stopping iso chain for fifo %i.%i", in stop_isoc_chain()
522 fifo->fifonum, i); in stop_isoc_chain()
523 usb_kill_urb(fifo->iso[i].purb); in stop_isoc_chain()
524 usb_free_urb(fifo->iso[i].purb); in stop_isoc_chain()
525 fifo->iso[i].purb = NULL; in stop_isoc_chain()
529 usb_kill_urb(fifo->urb); in stop_isoc_chain()
530 usb_free_urb(fifo->urb); in stop_isoc_chain()
531 fifo->urb = NULL; in stop_isoc_chain()
532 fifo->active = 0; in stop_isoc_chain()
545 usb_fifo *fifo = context_iso_urb->owner_fifo; in tx_iso_complete() local
546 hfcusb_data *hfc = fifo->hfc; in tx_iso_complete()
552 fifon = fifo->fifonum; in tx_iso_complete()
576 if (fifo->active && !status) { in tx_iso_complete()
585 /* predict dataflow to avoid fifo overflow */ in tx_iso_complete()
591 fill_isoc_urb(urb, fifo->hfc->dev, fifo->pipe, in tx_iso_complete()
593 fifo->usb_packet_maxlen, fifo->intervall, in tx_iso_complete()
601 if (fifo->skbuff) { in tx_iso_complete()
602 len = fifo->skbuff->len; in tx_iso_complete()
604 fifo->bit_line -= sink; in tx_iso_complete()
605 current_len = (0 - fifo->bit_line) / 8; in tx_iso_complete()
613 fifo->bit_line += current_len * 8; in tx_iso_complete()
622 fifo->bit_line += 32; in tx_iso_complete()
628 tx_offset + 1, fifo->skbuff->data, in tx_iso_complete()
630 skb_pull(fifo->skbuff, current_len); in tx_iso_complete()
643 fifo->bit_line -= sink; /* we lower data margin every msec */ in tx_iso_complete()
645 if (fifo->bit_line < BITLINE_INF) { in tx_iso_complete()
646 fifo->bit_line = BITLINE_INF; in tx_iso_complete()
651 fifo->delete_flg = 1; in tx_iso_complete()
652 fifo->hif->l1l2(fifo->hif, in tx_iso_complete()
654 (void *) (unsigned long) fifo->skbuff-> in tx_iso_complete()
656 if (fifo->skbuff && fifo->delete_flg) { in tx_iso_complete()
657 dev_kfree_skb_any(fifo->skbuff); in tx_iso_complete()
658 fifo->skbuff = NULL; in tx_iso_complete()
659 fifo->delete_flg = 0; in tx_iso_complete()
683 usb_fifo *fifo = context_iso_urb->owner_fifo; in rx_iso_complete() local
684 hfcusb_data *hfc = fifo->hfc; in rx_iso_complete()
691 fifon = fifo->fifonum; in rx_iso_complete()
696 "HFC-USB: ignoring USB DATAOVERRUN fifo(%i)", fifon); in rx_iso_complete()
709 if (fifo->active && !status) { in rx_iso_complete()
711 maxlen = fifo->usb_packet_maxlen; in rx_iso_complete()
728 fifo->last_urblen, len, maxlen, in rx_iso_complete()
734 if (fifo->last_urblen != maxlen) { in rx_iso_complete()
746 collect_rx_frame(fifo, buf + 2, in rx_iso_complete()
751 collect_rx_frame(fifo, buf, len, in rx_iso_complete()
756 fifo->last_urblen = len; in rx_iso_complete()
759 fill_isoc_urb(urb, fifo->hfc->dev, fifo->pipe, in rx_iso_complete()
761 fifo->usb_packet_maxlen, fifo->intervall, in rx_iso_complete()
781 collect_rx_frame(usb_fifo * fifo, __u8 * data, int len, int finish) in collect_rx_frame() argument
783 hfcusb_data *hfc = fifo->hfc; in collect_rx_frame()
786 fifon = fifo->fifonum; in collect_rx_frame()
791 if (!fifo->skbuff) { in collect_rx_frame()
792 fifo->skbuff = dev_alloc_skb(fifo->max_size + 3); in collect_rx_frame()
793 if (!fifo->skbuff) { in collect_rx_frame()
795 "HFC-S USB: cannot allocate buffer for fifo(%d)\n", in collect_rx_frame()
801 if (fifo->skbuff->len + len < fifo->max_size) { in collect_rx_frame()
802 memcpy(skb_put(fifo->skbuff, len), data, len); in collect_rx_frame()
805 "HCF-USB: got frame exceeded fifo->max_size(%d) fifo(%d)", in collect_rx_frame()
806 fifo->max_size, fifon); in collect_rx_frame()
807 DBG_SKB(HFCUSB_DBG_VERBOSE_USB, fifo->skbuff); in collect_rx_frame()
808 skb_trim(fifo->skbuff, 0); in collect_rx_frame()
811 if (transp_mode && fifo->skbuff->len >= 128) { in collect_rx_frame()
812 fifo->hif->l1l2(fifo->hif, PH_DATA | INDICATION, in collect_rx_frame()
813 fifo->skbuff); in collect_rx_frame()
814 fifo->skbuff = NULL; in collect_rx_frame()
819 if (fifo->skbuff->len > 3 && in collect_rx_frame()
820 !fifo->skbuff->data[fifo->skbuff->len - 1]) { in collect_rx_frame()
824 "HFC-S USB: D-RX len(%d)", fifo->skbuff->len); in collect_rx_frame()
825 DBG_SKB(HFCUSB_DBG_DCHANNEL, fifo->skbuff); in collect_rx_frame()
829 skb_trim(fifo->skbuff, fifo->skbuff->len - 3); in collect_rx_frame()
831 fifo->hif->l1l2(fifo->hif, in collect_rx_frame()
833 fifo->skbuff); in collect_rx_frame()
835 fifo->hif->l1l2(fifo->hif, in collect_rx_frame()
837 fifo->skbuff); in collect_rx_frame()
838 fifo->skbuff = NULL; /* buffer was freed from upper layer */ in collect_rx_frame()
841 "HFC-S USB: ERROR frame len(%d) fifo(%d)", in collect_rx_frame()
842 fifo->skbuff->len, fifon); in collect_rx_frame()
843 DBG_SKB(HFCUSB_DBG_VERBOSE_USB, fifo->skbuff); in collect_rx_frame()
844 skb_trim(fifo->skbuff, 0); in collect_rx_frame()
855 usb_fifo *fifo = (usb_fifo *) urb->context; in rx_int_complete() local
856 hfcusb_data *hfc = fifo->hfc; in rx_int_complete()
861 fifon = fifo->fifonum; in rx_int_complete()
862 if ((!fifo->active) || (urb->status)) { in rx_int_complete()
863 DBG(HFCUSB_DBG_INIT, "HFC-S USB: RX-Fifo %i is going down (%i)", in rx_int_complete()
866 fifo->urb->interval = 0; /* cancel automatic rescheduling */ in rx_int_complete()
867 if (fifo->skbuff) { in rx_int_complete()
868 dev_kfree_skb_any(fifo->skbuff); in rx_int_complete()
869 fifo->skbuff = NULL; in rx_int_complete()
874 buf = fifo->buffer; in rx_int_complete()
875 maxlen = fifo->usb_packet_maxlen; in rx_int_complete()
881 fifo->last_urblen, len, maxlen, in rx_int_complete()
886 if (fifo->last_urblen != fifo->usb_packet_maxlen) { in rx_int_complete()
894 collect_rx_frame(fifo, buf + 2, in rx_int_complete()
898 collect_rx_frame(fifo, buf, urb->actual_length, in rx_int_complete()
901 fifo->last_urblen = urb->actual_length; in rx_int_complete()
905 "HFC-S USB: %s error resubmitting URB fifo(%d)\n", in rx_int_complete()
910 /* start initial INT-URB for certain fifo */
912 start_int_fifo(usb_fifo * fifo) in start_int_fifo() argument
916 DBG(HFCUSB_DBG_INIT, "HFC-S USB: starting RX INT-URB for fifo:%d\n", in start_int_fifo()
917 fifo->fifonum); in start_int_fifo()
919 if (!fifo->urb) { in start_int_fifo()
920 fifo->urb = usb_alloc_urb(0, GFP_KERNEL); in start_int_fifo()
921 if (!fifo->urb) in start_int_fifo()
924 usb_fill_int_urb(fifo->urb, fifo->hfc->dev, fifo->pipe, in start_int_fifo()
925 fifo->buffer, fifo->usb_packet_maxlen, in start_int_fifo()
926 rx_int_complete, fifo, fifo->intervall); in start_int_fifo()
927 fifo->active = 1; /* must be marked active */ in start_int_fifo()
928 errcode = usb_submit_urb(fifo->urb, GFP_KERNEL); in start_int_fifo()
933 fifo->active = 0; in start_int_fifo()
934 fifo->skbuff = NULL; in start_int_fifo()
953 val = 8; /* enable fifo? */ in setup_bchannel()
957 /* set FIFO to transmit register */ in setup_bchannel()
960 /* reset fifo */ in setup_bchannel()
962 /* set FIFO to receive register */ in setup_bchannel()
965 /* reset fifo */ in setup_bchannel()
998 usb_fifo *fifo = my_hisax_if->priv; in hfc_usb_l2l1() local
999 hfcusb_data *hfc = fifo->hfc; in hfc_usb_l2l1()
1003 if (fifo->fifonum == HFCUSB_D_TX) { in hfc_usb_l2l1()
1054 (fifo->fifonum == in hfc_usb_l2l1()
1057 fifo->hif->l1l2(fifo->hif, in hfc_usb_l2l1()
1063 if (fifo->fifonum == HFCUSB_D_TX) { in hfc_usb_l2l1()
1070 (fifo->fifonum == in hfc_usb_l2l1()
1073 fifo->hif->l1l2(fifo->hif, in hfc_usb_l2l1()
1079 if (fifo->skbuff && fifo->delete_flg) { in hfc_usb_l2l1()
1080 dev_kfree_skb_any(fifo->skbuff); in hfc_usb_l2l1()
1081 fifo->skbuff = NULL; in hfc_usb_l2l1()
1082 fifo->delete_flg = 0; in hfc_usb_l2l1()
1084 fifo->skbuff = arg; /* we have a new buffer */ in hfc_usb_l2l1()
1097 usb_fifo *fifo; in hfc_usb_init() local
1136 fifo = hfc->fifos; in hfc_usb_init()
1138 write_usb(hfc, HFCUSB_FIFO, i); /* select the desired fifo */ in hfc_usb_init()
1139 fifo[i].skbuff = NULL; /* init buffer pointer */ in hfc_usb_init()
1140 fifo[i].max_size = in hfc_usb_init()
1142 fifo[i].last_urblen = 0; in hfc_usb_init()
1149 write_usb(hfc, HFCUSB_INC_RES_F, 2); /* reset the fifo */ in hfc_usb_init()
1543 "HFC-S USB: %s stopping ISOC chain Fifo(%i)", in hfc_usb_disconnect()
1550 "HFC-S USB: %s unlinking URB for Fifo(%i)", in hfc_usb_disconnect()