cfhsi 71 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = from_timer(cfhsi, t, inactivity_timer); cfhsi 73 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", cfhsi 77 drivers/net/caif/caif_hsi.c if (!test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 78 drivers/net/caif/caif_hsi.c queue_work(cfhsi->wq, &cfhsi->wake_down_work); cfhsi 81 drivers/net/caif/caif_hsi.c static void cfhsi_update_aggregation_stats(struct cfhsi *cfhsi, cfhsi 89 drivers/net/caif/caif_hsi.c hpad = 1 + PAD_POW2((info->hdr_len + 1), cfhsi->cfg.head_align); cfhsi 90 drivers/net/caif/caif_hsi.c tpad = PAD_POW2((skb->len + hpad), cfhsi->cfg.tail_align); cfhsi 94 drivers/net/caif/caif_hsi.c cfhsi->aggregation_len += len; cfhsi 96 drivers/net/caif/caif_hsi.c cfhsi->aggregation_len -= len; cfhsi 99 drivers/net/caif/caif_hsi.c static bool cfhsi_can_send_aggregate(struct cfhsi *cfhsi) cfhsi 103 drivers/net/caif/caif_hsi.c if (cfhsi->cfg.aggregation_timeout == 0) cfhsi 107 drivers/net/caif/caif_hsi.c if (cfhsi->qhead[i].qlen) cfhsi 112 drivers/net/caif/caif_hsi.c if (cfhsi->qhead[CFHSI_PRIO_BEBK].qlen >= CFHSI_MAX_PKTS) cfhsi 118 drivers/net/caif/caif_hsi.c static struct sk_buff *cfhsi_dequeue(struct cfhsi *cfhsi) cfhsi 124 drivers/net/caif/caif_hsi.c skb = skb_dequeue(&cfhsi->qhead[i]); cfhsi 132 drivers/net/caif/caif_hsi.c static int cfhsi_tx_queue_len(struct cfhsi *cfhsi) cfhsi 136 drivers/net/caif/caif_hsi.c len += skb_queue_len(&cfhsi->qhead[i]); cfhsi 140 drivers/net/caif/caif_hsi.c static void cfhsi_abort_tx(struct cfhsi *cfhsi) cfhsi 145 drivers/net/caif/caif_hsi.c spin_lock_bh(&cfhsi->lock); cfhsi 146 drivers/net/caif/caif_hsi.c skb = cfhsi_dequeue(cfhsi); cfhsi 150 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.tx_errors++; cfhsi 151 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.tx_dropped++; cfhsi 152 drivers/net/caif/caif_hsi.c cfhsi_update_aggregation_stats(cfhsi, skb, -1); cfhsi 153 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 156 drivers/net/caif/caif_hsi.c cfhsi->tx_state = CFHSI_TX_STATE_IDLE; cfhsi 157 drivers/net/caif/caif_hsi.c if (!test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 158 drivers/net/caif/caif_hsi.c mod_timer(&cfhsi->inactivity_timer, cfhsi 159 drivers/net/caif/caif_hsi.c jiffies + cfhsi->cfg.inactivity_timeout); cfhsi 160 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 163 drivers/net/caif/caif_hsi.c static int cfhsi_flush_fifo(struct cfhsi *cfhsi) cfhsi 169 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", cfhsi 173 drivers/net/caif/caif_hsi.c ret = cfhsi->ops->cfhsi_fifo_occupancy(cfhsi->ops, cfhsi 176 drivers/net/caif/caif_hsi.c netdev_warn(cfhsi->ndev, cfhsi 185 drivers/net/caif/caif_hsi.c set_bit(CFHSI_FLUSH_FIFO, &cfhsi->bits); cfhsi 186 drivers/net/caif/caif_hsi.c ret = cfhsi->ops->cfhsi_rx(buffer, fifo_occupancy, cfhsi 187 drivers/net/caif/caif_hsi.c cfhsi->ops); cfhsi 189 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_FLUSH_FIFO, &cfhsi->bits); cfhsi 190 drivers/net/caif/caif_hsi.c netdev_warn(cfhsi->ndev, cfhsi 197 drivers/net/caif/caif_hsi.c ret = wait_event_interruptible_timeout(cfhsi->flush_fifo_wait, cfhsi 198 drivers/net/caif/caif_hsi.c !test_bit(CFHSI_FLUSH_FIFO, &cfhsi->bits), ret); cfhsi 201 drivers/net/caif/caif_hsi.c netdev_warn(cfhsi->ndev, cfhsi 207 drivers/net/caif/caif_hsi.c netdev_warn(cfhsi->ndev, cfhsi 217 drivers/net/caif/caif_hsi.c static int cfhsi_tx_frm(struct cfhsi_desc *desc, struct cfhsi *cfhsi) cfhsi 224 drivers/net/caif/caif_hsi.c skb = cfhsi_dequeue(cfhsi); cfhsi 240 drivers/net/caif/caif_hsi.c hpad = 1 + PAD_POW2((info->hdr_len + 1), cfhsi->cfg.head_align); cfhsi 241 drivers/net/caif/caif_hsi.c tpad = PAD_POW2((skb->len + hpad), cfhsi->cfg.tail_align); cfhsi 251 drivers/net/caif/caif_hsi.c spin_lock_bh(&cfhsi->lock); cfhsi 252 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.tx_packets++; cfhsi 253 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.tx_bytes += skb->len; cfhsi 254 drivers/net/caif/caif_hsi.c cfhsi_update_aggregation_stats(cfhsi, skb, -1); cfhsi 255 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 273 drivers/net/caif/caif_hsi.c skb = cfhsi_dequeue(cfhsi); cfhsi 281 drivers/net/caif/caif_hsi.c hpad = 1 + PAD_POW2((info->hdr_len + 1), cfhsi->cfg.head_align); cfhsi 282 drivers/net/caif/caif_hsi.c tpad = PAD_POW2((skb->len + hpad), cfhsi->cfg.tail_align); cfhsi 292 drivers/net/caif/caif_hsi.c spin_lock_bh(&cfhsi->lock); cfhsi 293 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.tx_packets++; cfhsi 294 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.tx_bytes += skb->len; cfhsi 295 drivers/net/caif/caif_hsi.c cfhsi_update_aggregation_stats(cfhsi, skb, -1); cfhsi 296 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 322 drivers/net/caif/caif_hsi.c if (cfhsi_can_send_aggregate(cfhsi)) cfhsi 330 drivers/net/caif/caif_hsi.c static void cfhsi_start_tx(struct cfhsi *cfhsi) cfhsi 332 drivers/net/caif/caif_hsi.c struct cfhsi_desc *desc = (struct cfhsi_desc *)cfhsi->tx_buf; cfhsi 335 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", __func__); cfhsi 337 drivers/net/caif/caif_hsi.c if (test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 342 drivers/net/caif/caif_hsi.c len = cfhsi_tx_frm(desc, cfhsi); cfhsi 344 drivers/net/caif/caif_hsi.c spin_lock_bh(&cfhsi->lock); cfhsi 345 drivers/net/caif/caif_hsi.c if (unlikely(cfhsi_tx_queue_len(cfhsi))) { cfhsi 346 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 350 drivers/net/caif/caif_hsi.c cfhsi->tx_state = CFHSI_TX_STATE_IDLE; cfhsi 352 drivers/net/caif/caif_hsi.c mod_timer(&cfhsi->inactivity_timer, cfhsi 353 drivers/net/caif/caif_hsi.c jiffies + cfhsi->cfg.inactivity_timeout); cfhsi 354 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 359 drivers/net/caif/caif_hsi.c res = cfhsi->ops->cfhsi_tx(cfhsi->tx_buf, len, cfhsi->ops); cfhsi 361 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: TX error %d.\n", cfhsi 366 drivers/net/caif/caif_hsi.c static void cfhsi_tx_done(struct cfhsi *cfhsi) cfhsi 368 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", __func__); cfhsi 370 drivers/net/caif/caif_hsi.c if (test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 377 drivers/net/caif/caif_hsi.c spin_lock_bh(&cfhsi->lock); cfhsi 378 drivers/net/caif/caif_hsi.c if (cfhsi->flow_off_sent && cfhsi 379 drivers/net/caif/caif_hsi.c cfhsi_tx_queue_len(cfhsi) <= cfhsi->cfg.q_low_mark && cfhsi 380 drivers/net/caif/caif_hsi.c cfhsi->cfdev.flowctrl) { cfhsi 382 drivers/net/caif/caif_hsi.c cfhsi->flow_off_sent = 0; cfhsi 383 drivers/net/caif/caif_hsi.c cfhsi->cfdev.flowctrl(cfhsi->ndev, ON); cfhsi 386 drivers/net/caif/caif_hsi.c if (cfhsi_can_send_aggregate(cfhsi)) { cfhsi 387 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 388 drivers/net/caif/caif_hsi.c cfhsi_start_tx(cfhsi); cfhsi 390 drivers/net/caif/caif_hsi.c mod_timer(&cfhsi->aggregation_timer, cfhsi 391 drivers/net/caif/caif_hsi.c jiffies + cfhsi->cfg.aggregation_timeout); cfhsi 392 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 400 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi; cfhsi 402 drivers/net/caif/caif_hsi.c cfhsi = container_of(cb_ops, struct cfhsi, cb_ops); cfhsi 403 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", cfhsi 406 drivers/net/caif/caif_hsi.c if (test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 408 drivers/net/caif/caif_hsi.c cfhsi_tx_done(cfhsi); cfhsi 411 drivers/net/caif/caif_hsi.c static int cfhsi_rx_desc(struct cfhsi_desc *desc, struct cfhsi *cfhsi) cfhsi 420 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Invalid descriptor.\n", cfhsi 441 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Invalid length.\n", cfhsi 449 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Out of memory !\n", cfhsi 459 drivers/net/caif/caif_hsi.c skb->dev = cfhsi->ndev; cfhsi 472 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.rx_packets++; cfhsi 473 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.rx_bytes += len; cfhsi 489 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, cfhsi 526 drivers/net/caif/caif_hsi.c static int cfhsi_rx_pld(struct cfhsi_desc *desc, struct cfhsi *cfhsi) cfhsi 536 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Invalid descriptor.\n", cfhsi 546 drivers/net/caif/caif_hsi.c while (nfrms < cfhsi->rx_state.nfrms) { cfhsi 569 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Invalid length.\n", cfhsi 577 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Out of memory !\n", cfhsi 579 drivers/net/caif/caif_hsi.c cfhsi->rx_state.nfrms = nfrms; cfhsi 588 drivers/net/caif/caif_hsi.c skb->dev = cfhsi->ndev; cfhsi 600 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.rx_packets++; cfhsi 601 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.rx_bytes += len; cfhsi 612 drivers/net/caif/caif_hsi.c static void cfhsi_rx_done(struct cfhsi *cfhsi) cfhsi 620 drivers/net/caif/caif_hsi.c desc = (struct cfhsi_desc *)cfhsi->rx_buf; cfhsi 622 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s\n", __func__); cfhsi 624 drivers/net/caif/caif_hsi.c if (test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 628 drivers/net/caif/caif_hsi.c spin_lock_bh(&cfhsi->lock); cfhsi 629 drivers/net/caif/caif_hsi.c mod_timer_pending(&cfhsi->inactivity_timer, cfhsi 630 drivers/net/caif/caif_hsi.c jiffies + cfhsi->cfg.inactivity_timeout); cfhsi 631 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 633 drivers/net/caif/caif_hsi.c if (cfhsi->rx_state.state == CFHSI_RX_STATE_DESC) { cfhsi 639 drivers/net/caif/caif_hsi.c rx_buf = cfhsi->rx_buf; cfhsi 644 drivers/net/caif/caif_hsi.c rx_buf = cfhsi->rx_flip_buf; cfhsi 646 drivers/net/caif/caif_hsi.c rx_buf = cfhsi->rx_flip_buf; cfhsi 649 drivers/net/caif/caif_hsi.c if (cfhsi->rx_state.pld_len > 0 && cfhsi 654 drivers/net/caif/caif_hsi.c cfhsi->rx_state.pld_len); cfhsi 656 drivers/net/caif/caif_hsi.c cfhsi->rx_state.piggy_desc = true; cfhsi 688 drivers/net/caif/caif_hsi.c if (test_bit(CFHSI_AWAKE, &cfhsi->bits)) { cfhsi 690 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s: Start RX.\n", cfhsi 693 drivers/net/caif/caif_hsi.c res = cfhsi->ops->cfhsi_rx(rx_ptr, rx_len, cfhsi 694 drivers/net/caif/caif_hsi.c cfhsi->ops); cfhsi 696 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: RX error %d.\n", cfhsi 698 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.rx_errors++; cfhsi 699 drivers/net/caif/caif_hsi.c cfhsi->ndev->stats.rx_dropped++; cfhsi 703 drivers/net/caif/caif_hsi.c if (cfhsi->rx_state.state == CFHSI_RX_STATE_DESC) { cfhsi 705 drivers/net/caif/caif_hsi.c if (cfhsi_rx_desc(desc, cfhsi) < 0) cfhsi 709 drivers/net/caif/caif_hsi.c if (cfhsi_rx_pld(desc, cfhsi) < 0) cfhsi 713 drivers/net/caif/caif_hsi.c if (cfhsi_rx_desc(piggy_desc, cfhsi) < 0) cfhsi 721 drivers/net/caif/caif_hsi.c memset(&cfhsi->rx_state, 0, sizeof(cfhsi->rx_state)); cfhsi 722 drivers/net/caif/caif_hsi.c cfhsi->rx_state.state = rx_state; cfhsi 723 drivers/net/caif/caif_hsi.c cfhsi->rx_ptr = rx_ptr; cfhsi 724 drivers/net/caif/caif_hsi.c cfhsi->rx_len = rx_len; cfhsi 725 drivers/net/caif/caif_hsi.c cfhsi->rx_state.pld_len = desc_pld_len; cfhsi 726 drivers/net/caif/caif_hsi.c cfhsi->rx_state.piggy_desc = desc->header & CFHSI_PIGGY_DESC; cfhsi 728 drivers/net/caif/caif_hsi.c if (rx_buf != cfhsi->rx_buf) cfhsi 729 drivers/net/caif/caif_hsi.c swap(cfhsi->rx_buf, cfhsi->rx_flip_buf); cfhsi 733 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Out of sync.\n", __func__); cfhsi 735 drivers/net/caif/caif_hsi.c cfhsi->rx_buf, CFHSI_DESC_SZ); cfhsi 736 drivers/net/caif/caif_hsi.c schedule_work(&cfhsi->out_of_sync_work); cfhsi 741 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = from_timer(cfhsi, t, rx_slowpath_timer); cfhsi 743 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", cfhsi 746 drivers/net/caif/caif_hsi.c cfhsi_rx_done(cfhsi); cfhsi 751 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi; cfhsi 753 drivers/net/caif/caif_hsi.c cfhsi = container_of(cb_ops, struct cfhsi, cb_ops); cfhsi 754 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", cfhsi 757 drivers/net/caif/caif_hsi.c if (test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 760 drivers/net/caif/caif_hsi.c if (test_and_clear_bit(CFHSI_FLUSH_FIFO, &cfhsi->bits)) cfhsi 761 drivers/net/caif/caif_hsi.c wake_up_interruptible(&cfhsi->flush_fifo_wait); cfhsi 763 drivers/net/caif/caif_hsi.c cfhsi_rx_done(cfhsi); cfhsi 768 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = NULL; cfhsi 773 drivers/net/caif/caif_hsi.c cfhsi = container_of(work, struct cfhsi, wake_up_work); cfhsi 775 drivers/net/caif/caif_hsi.c if (test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 778 drivers/net/caif/caif_hsi.c if (unlikely(test_bit(CFHSI_AWAKE, &cfhsi->bits))) { cfhsi 781 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_UP, &cfhsi->bits); cfhsi 782 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_UP_ACK, &cfhsi->bits); cfhsi 787 drivers/net/caif/caif_hsi.c cfhsi->ops->cfhsi_wake_up(cfhsi->ops); cfhsi 789 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s: Start waiting.\n", cfhsi 794 drivers/net/caif/caif_hsi.c ret = wait_event_interruptible_timeout(cfhsi->wake_up_wait, cfhsi 796 drivers/net/caif/caif_hsi.c &cfhsi->bits), ret); cfhsi 799 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Signalled: %ld.\n", cfhsi 802 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_UP, &cfhsi->bits); cfhsi 803 drivers/net/caif/caif_hsi.c cfhsi->ops->cfhsi_wake_down(cfhsi->ops); cfhsi 810 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s: Timeout.\n", cfhsi 814 drivers/net/caif/caif_hsi.c WARN_ON(cfhsi->ops->cfhsi_fifo_occupancy(cfhsi->ops, cfhsi 817 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s: Bytes in FIFO: %u.\n", cfhsi 821 drivers/net/caif/caif_hsi.c WARN_ON(cfhsi->ops->cfhsi_get_peer_wake(cfhsi->ops, cfhsi 825 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: CA Wake missed !.\n", cfhsi 829 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_UP_ACK, &cfhsi->bits); cfhsi 835 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_UP, &cfhsi->bits); cfhsi 836 drivers/net/caif/caif_hsi.c cfhsi->ops->cfhsi_wake_down(cfhsi->ops); cfhsi 840 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s: Woken.\n", cfhsi 844 drivers/net/caif/caif_hsi.c set_bit(CFHSI_AWAKE, &cfhsi->bits); cfhsi 845 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_UP, &cfhsi->bits); cfhsi 848 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s: Start RX.\n", __func__); cfhsi 849 drivers/net/caif/caif_hsi.c res = cfhsi->ops->cfhsi_rx(cfhsi->rx_ptr, cfhsi->rx_len, cfhsi->ops); cfhsi 852 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: RX err %d.\n", __func__, res); cfhsi 855 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_UP_ACK, &cfhsi->bits); cfhsi 857 drivers/net/caif/caif_hsi.c spin_lock_bh(&cfhsi->lock); cfhsi 860 drivers/net/caif/caif_hsi.c if (!cfhsi_tx_queue_len(cfhsi)) { cfhsi 861 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s: Peer wake, start timer.\n", cfhsi 864 drivers/net/caif/caif_hsi.c mod_timer(&cfhsi->inactivity_timer, cfhsi 865 drivers/net/caif/caif_hsi.c jiffies + cfhsi->cfg.inactivity_timeout); cfhsi 866 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 870 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s: Host wake.\n", cfhsi 873 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 876 drivers/net/caif/caif_hsi.c len = cfhsi_tx_frm((struct cfhsi_desc *)cfhsi->tx_buf, cfhsi); cfhsi 880 drivers/net/caif/caif_hsi.c res = cfhsi->ops->cfhsi_tx(cfhsi->tx_buf, len, cfhsi->ops); cfhsi 882 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: TX error %d.\n", cfhsi 884 drivers/net/caif/caif_hsi.c cfhsi_abort_tx(cfhsi); cfhsi 887 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, cfhsi 896 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = NULL; cfhsi 900 drivers/net/caif/caif_hsi.c cfhsi = container_of(work, struct cfhsi, wake_down_work); cfhsi 901 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", __func__); cfhsi 903 drivers/net/caif/caif_hsi.c if (test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 907 drivers/net/caif/caif_hsi.c cfhsi->ops->cfhsi_wake_down(cfhsi->ops); cfhsi 911 drivers/net/caif/caif_hsi.c ret = wait_event_interruptible_timeout(cfhsi->wake_down_wait, cfhsi 913 drivers/net/caif/caif_hsi.c &cfhsi->bits), ret); cfhsi 916 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Signalled: %ld.\n", cfhsi 923 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Timeout.\n", __func__); cfhsi 926 drivers/net/caif/caif_hsi.c WARN_ON(cfhsi->ops->cfhsi_get_peer_wake(cfhsi->ops, cfhsi 929 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: CA Wake missed !.\n", cfhsi 935 drivers/net/caif/caif_hsi.c WARN_ON(cfhsi->ops->cfhsi_fifo_occupancy(cfhsi->ops, cfhsi 947 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: FIFO Timeout.\n", __func__); cfhsi 950 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_AWAKE, &cfhsi->bits); cfhsi 953 drivers/net/caif/caif_hsi.c cfhsi->ops->cfhsi_rx_cancel(cfhsi->ops); cfhsi 958 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = NULL; cfhsi 960 drivers/net/caif/caif_hsi.c cfhsi = container_of(work, struct cfhsi, out_of_sync_work); cfhsi 963 drivers/net/caif/caif_hsi.c dev_close(cfhsi->ndev); cfhsi 969 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = NULL; cfhsi 971 drivers/net/caif/caif_hsi.c cfhsi = container_of(cb_ops, struct cfhsi, cb_ops); cfhsi 972 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", cfhsi 975 drivers/net/caif/caif_hsi.c set_bit(CFHSI_WAKE_UP_ACK, &cfhsi->bits); cfhsi 976 drivers/net/caif/caif_hsi.c wake_up_interruptible(&cfhsi->wake_up_wait); cfhsi 978 drivers/net/caif/caif_hsi.c if (test_bit(CFHSI_SHUTDOWN, &cfhsi->bits)) cfhsi 982 drivers/net/caif/caif_hsi.c if (!test_and_set_bit(CFHSI_WAKE_UP, &cfhsi->bits)) cfhsi 983 drivers/net/caif/caif_hsi.c queue_work(cfhsi->wq, &cfhsi->wake_up_work); cfhsi 988 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = NULL; cfhsi 990 drivers/net/caif/caif_hsi.c cfhsi = container_of(cb_ops, struct cfhsi, cb_ops); cfhsi 991 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", cfhsi 995 drivers/net/caif/caif_hsi.c set_bit(CFHSI_WAKE_DOWN_ACK, &cfhsi->bits); cfhsi 996 drivers/net/caif/caif_hsi.c wake_up_interruptible(&cfhsi->wake_down_wait); cfhsi 1001 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = from_timer(cfhsi, t, aggregation_timer); cfhsi 1003 drivers/net/caif/caif_hsi.c netdev_dbg(cfhsi->ndev, "%s.\n", cfhsi 1006 drivers/net/caif/caif_hsi.c cfhsi_start_tx(cfhsi); cfhsi 1011 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = NULL; cfhsi 1019 drivers/net/caif/caif_hsi.c cfhsi = netdev_priv(dev); cfhsi 1039 drivers/net/caif/caif_hsi.c spin_lock_bh(&cfhsi->lock); cfhsi 1042 drivers/net/caif/caif_hsi.c cfhsi_update_aggregation_stats(cfhsi, skb, 1); cfhsi 1045 drivers/net/caif/caif_hsi.c skb_queue_tail(&cfhsi->qhead[prio], skb); cfhsi 1048 drivers/net/caif/caif_hsi.c if (WARN_ON(test_bit(CFHSI_SHUTDOWN, &cfhsi->bits))) { cfhsi 1049 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 1050 drivers/net/caif/caif_hsi.c cfhsi_abort_tx(cfhsi); cfhsi 1055 drivers/net/caif/caif_hsi.c if (!cfhsi->flow_off_sent && cfhsi 1056 drivers/net/caif/caif_hsi.c cfhsi_tx_queue_len(cfhsi) > cfhsi->cfg.q_high_mark && cfhsi 1057 drivers/net/caif/caif_hsi.c cfhsi->cfdev.flowctrl) { cfhsi 1058 drivers/net/caif/caif_hsi.c cfhsi->flow_off_sent = 1; cfhsi 1059 drivers/net/caif/caif_hsi.c cfhsi->cfdev.flowctrl(cfhsi->ndev, OFF); cfhsi 1062 drivers/net/caif/caif_hsi.c if (cfhsi->tx_state == CFHSI_TX_STATE_IDLE) { cfhsi 1063 drivers/net/caif/caif_hsi.c cfhsi->tx_state = CFHSI_TX_STATE_XFER; cfhsi 1070 drivers/net/caif/caif_hsi.c cfhsi_can_send_aggregate(cfhsi) && cfhsi 1071 drivers/net/caif/caif_hsi.c del_timer(&cfhsi->aggregation_timer) > 0; cfhsi 1072 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 1074 drivers/net/caif/caif_hsi.c cfhsi_start_tx(cfhsi); cfhsi 1079 drivers/net/caif/caif_hsi.c timer_active = del_timer_sync(&cfhsi->inactivity_timer); cfhsi 1081 drivers/net/caif/caif_hsi.c spin_unlock_bh(&cfhsi->lock); cfhsi 1084 drivers/net/caif/caif_hsi.c struct cfhsi_desc *desc = (struct cfhsi_desc *)cfhsi->tx_buf; cfhsi 1089 drivers/net/caif/caif_hsi.c len = cfhsi_tx_frm(desc, cfhsi); cfhsi 1093 drivers/net/caif/caif_hsi.c res = cfhsi->ops->cfhsi_tx(cfhsi->tx_buf, len, cfhsi->ops); cfhsi 1095 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: TX error %d.\n", cfhsi 1097 drivers/net/caif/caif_hsi.c cfhsi_abort_tx(cfhsi); cfhsi 1101 drivers/net/caif/caif_hsi.c if (!test_and_set_bit(CFHSI_WAKE_UP, &cfhsi->bits)) cfhsi 1102 drivers/net/caif/caif_hsi.c queue_work(cfhsi->wq, &cfhsi->wake_up_work); cfhsi 1113 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = netdev_priv(dev); cfhsi 1122 drivers/net/caif/caif_hsi.c skb_queue_head_init(&cfhsi->qhead[i]); cfhsi 1123 drivers/net/caif/caif_hsi.c cfhsi->cfdev.link_select = CAIF_LINK_HIGH_BANDW; cfhsi 1124 drivers/net/caif/caif_hsi.c cfhsi->cfdev.use_frag = false; cfhsi 1125 drivers/net/caif/caif_hsi.c cfhsi->cfdev.use_stx = false; cfhsi 1126 drivers/net/caif/caif_hsi.c cfhsi->cfdev.use_fcs = false; cfhsi 1127 drivers/net/caif/caif_hsi.c cfhsi->ndev = dev; cfhsi 1128 drivers/net/caif/caif_hsi.c cfhsi->cfg = hsi_default_config; cfhsi 1133 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = netdev_priv(ndev); cfhsi 1136 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_SHUTDOWN, &cfhsi->bits); cfhsi 1139 drivers/net/caif/caif_hsi.c cfhsi->tx_state = CFHSI_TX_STATE_IDLE; cfhsi 1140 drivers/net/caif/caif_hsi.c cfhsi->rx_state.state = CFHSI_RX_STATE_DESC; cfhsi 1143 drivers/net/caif/caif_hsi.c cfhsi->flow_off_sent = 0; cfhsi 1149 drivers/net/caif/caif_hsi.c cfhsi->tx_buf = kzalloc(CFHSI_BUF_SZ_TX, GFP_KERNEL); cfhsi 1150 drivers/net/caif/caif_hsi.c if (!cfhsi->tx_buf) { cfhsi 1159 drivers/net/caif/caif_hsi.c cfhsi->rx_buf = kzalloc(CFHSI_BUF_SZ_RX, GFP_KERNEL); cfhsi 1160 drivers/net/caif/caif_hsi.c if (!cfhsi->rx_buf) { cfhsi 1165 drivers/net/caif/caif_hsi.c cfhsi->rx_flip_buf = kzalloc(CFHSI_BUF_SZ_RX, GFP_KERNEL); cfhsi 1166 drivers/net/caif/caif_hsi.c if (!cfhsi->rx_flip_buf) { cfhsi 1172 drivers/net/caif/caif_hsi.c cfhsi->cfg.aggregation_timeout = hsi_default_config.aggregation_timeout; cfhsi 1175 drivers/net/caif/caif_hsi.c cfhsi->rx_ptr = cfhsi->rx_buf; cfhsi 1176 drivers/net/caif/caif_hsi.c cfhsi->rx_len = CFHSI_DESC_SZ; cfhsi 1179 drivers/net/caif/caif_hsi.c spin_lock_init(&cfhsi->lock); cfhsi 1182 drivers/net/caif/caif_hsi.c cfhsi->cb_ops.tx_done_cb = cfhsi_tx_done_cb; cfhsi 1183 drivers/net/caif/caif_hsi.c cfhsi->cb_ops.rx_done_cb = cfhsi_rx_done_cb; cfhsi 1184 drivers/net/caif/caif_hsi.c cfhsi->cb_ops.wake_up_cb = cfhsi_wake_up_cb; cfhsi 1185 drivers/net/caif/caif_hsi.c cfhsi->cb_ops.wake_down_cb = cfhsi_wake_down_cb; cfhsi 1188 drivers/net/caif/caif_hsi.c INIT_WORK(&cfhsi->wake_up_work, cfhsi_wake_up); cfhsi 1189 drivers/net/caif/caif_hsi.c INIT_WORK(&cfhsi->wake_down_work, cfhsi_wake_down); cfhsi 1190 drivers/net/caif/caif_hsi.c INIT_WORK(&cfhsi->out_of_sync_work, cfhsi_out_of_sync); cfhsi 1193 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_UP_ACK, &cfhsi->bits); cfhsi 1194 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_DOWN_ACK, &cfhsi->bits); cfhsi 1195 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_WAKE_UP, &cfhsi->bits); cfhsi 1196 drivers/net/caif/caif_hsi.c clear_bit(CFHSI_AWAKE, &cfhsi->bits); cfhsi 1199 drivers/net/caif/caif_hsi.c cfhsi->wq = alloc_ordered_workqueue(cfhsi->ndev->name, WQ_MEM_RECLAIM); cfhsi 1200 drivers/net/caif/caif_hsi.c if (!cfhsi->wq) { cfhsi 1201 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Failed to create work queue.\n", cfhsi 1208 drivers/net/caif/caif_hsi.c init_waitqueue_head(&cfhsi->wake_up_wait); cfhsi 1209 drivers/net/caif/caif_hsi.c init_waitqueue_head(&cfhsi->wake_down_wait); cfhsi 1210 drivers/net/caif/caif_hsi.c init_waitqueue_head(&cfhsi->flush_fifo_wait); cfhsi 1213 drivers/net/caif/caif_hsi.c timer_setup(&cfhsi->inactivity_timer, cfhsi_inactivity_tout, 0); cfhsi 1215 drivers/net/caif/caif_hsi.c timer_setup(&cfhsi->rx_slowpath_timer, cfhsi_rx_slowpath, 0); cfhsi 1217 drivers/net/caif/caif_hsi.c timer_setup(&cfhsi->aggregation_timer, cfhsi_aggregation_tout, 0); cfhsi 1220 drivers/net/caif/caif_hsi.c res = cfhsi->ops->cfhsi_up(cfhsi->ops); cfhsi 1222 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, cfhsi 1229 drivers/net/caif/caif_hsi.c res = cfhsi_flush_fifo(cfhsi); cfhsi 1231 drivers/net/caif/caif_hsi.c netdev_err(cfhsi->ndev, "%s: Can't flush FIFO: %d.\n", cfhsi 1238 drivers/net/caif/caif_hsi.c cfhsi->ops->cfhsi_down(cfhsi->ops); cfhsi 1240 drivers/net/caif/caif_hsi.c destroy_workqueue(cfhsi->wq); cfhsi 1242 drivers/net/caif/caif_hsi.c kfree(cfhsi->rx_flip_buf); cfhsi 1244 drivers/net/caif/caif_hsi.c kfree(cfhsi->rx_buf); cfhsi 1246 drivers/net/caif/caif_hsi.c kfree(cfhsi->tx_buf); cfhsi 1253 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = netdev_priv(ndev); cfhsi 1257 drivers/net/caif/caif_hsi.c set_bit(CFHSI_SHUTDOWN, &cfhsi->bits); cfhsi 1260 drivers/net/caif/caif_hsi.c del_timer_sync(&cfhsi->inactivity_timer); cfhsi 1261 drivers/net/caif/caif_hsi.c del_timer_sync(&cfhsi->rx_slowpath_timer); cfhsi 1262 drivers/net/caif/caif_hsi.c del_timer_sync(&cfhsi->aggregation_timer); cfhsi 1265 drivers/net/caif/caif_hsi.c cfhsi->ops->cfhsi_rx_cancel(cfhsi->ops); cfhsi 1268 drivers/net/caif/caif_hsi.c destroy_workqueue(cfhsi->wq); cfhsi 1271 drivers/net/caif/caif_hsi.c tx_buf = cfhsi->tx_buf; cfhsi 1272 drivers/net/caif/caif_hsi.c rx_buf = cfhsi->rx_buf; cfhsi 1273 drivers/net/caif/caif_hsi.c flip_buf = cfhsi->rx_flip_buf; cfhsi 1275 drivers/net/caif/caif_hsi.c cfhsi_abort_tx(cfhsi); cfhsi 1278 drivers/net/caif/caif_hsi.c cfhsi->ops->cfhsi_down(cfhsi->ops); cfhsi 1289 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = netdev_priv(dev); cfhsi 1292 drivers/net/caif/caif_hsi.c list_del(&cfhsi->list); cfhsi 1302 drivers/net/caif/caif_hsi.c static void cfhsi_netlink_parms(struct nlattr *data[], struct cfhsi *cfhsi) cfhsi 1319 drivers/net/caif/caif_hsi.c cfhsi->cfg.inactivity_timeout = inactivity_timeout * HZ / 1000; cfhsi 1320 drivers/net/caif/caif_hsi.c if (cfhsi->cfg.inactivity_timeout == 0) cfhsi 1321 drivers/net/caif/caif_hsi.c cfhsi->cfg.inactivity_timeout = 1; cfhsi 1322 drivers/net/caif/caif_hsi.c else if (cfhsi->cfg.inactivity_timeout > NEXT_TIMER_MAX_DELTA) cfhsi 1323 drivers/net/caif/caif_hsi.c cfhsi->cfg.inactivity_timeout = NEXT_TIMER_MAX_DELTA; cfhsi 1328 drivers/net/caif/caif_hsi.c cfhsi->cfg.aggregation_timeout = nla_get_u32(data[i]); cfhsi 1332 drivers/net/caif/caif_hsi.c cfhsi->cfg.head_align = nla_get_u32(data[i]); cfhsi 1336 drivers/net/caif/caif_hsi.c cfhsi->cfg.tail_align = nla_get_u32(data[i]); cfhsi 1340 drivers/net/caif/caif_hsi.c cfhsi->cfg.q_high_mark = nla_get_u32(data[i]); cfhsi 1344 drivers/net/caif/caif_hsi.c cfhsi->cfg.q_low_mark = nla_get_u32(data[i]); cfhsi 1376 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = netdev_priv(dev); cfhsi 1379 drivers/net/caif/caif_hsi.c cfhsi->cfg.inactivity_timeout) || cfhsi 1381 drivers/net/caif/caif_hsi.c cfhsi->cfg.aggregation_timeout) || cfhsi 1383 drivers/net/caif/caif_hsi.c cfhsi->cfg.head_align) || cfhsi 1385 drivers/net/caif/caif_hsi.c cfhsi->cfg.tail_align) || cfhsi 1387 drivers/net/caif/caif_hsi.c cfhsi->cfg.q_high_mark) || cfhsi 1389 drivers/net/caif/caif_hsi.c cfhsi->cfg.q_low_mark)) cfhsi 1399 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi = NULL; cfhsi 1404 drivers/net/caif/caif_hsi.c cfhsi = netdev_priv(dev); cfhsi 1405 drivers/net/caif/caif_hsi.c cfhsi_netlink_parms(data, cfhsi); cfhsi 1414 drivers/net/caif/caif_hsi.c cfhsi->ops = (*get_ops)(); cfhsi 1415 drivers/net/caif/caif_hsi.c if (!cfhsi->ops) { cfhsi 1421 drivers/net/caif/caif_hsi.c cfhsi->ops->cb_ops = &cfhsi->cb_ops; cfhsi 1427 drivers/net/caif/caif_hsi.c list_add_tail(&cfhsi->list, &cfhsi_list); cfhsi 1437 drivers/net/caif/caif_hsi.c .priv_size = sizeof(struct cfhsi), cfhsi 1451 drivers/net/caif/caif_hsi.c struct cfhsi *cfhsi; cfhsi 1457 drivers/net/caif/caif_hsi.c cfhsi = list_entry(list_node, struct cfhsi, list); cfhsi 1458 drivers/net/caif/caif_hsi.c unregister_netdevice(cfhsi->ndev);