Lines Matching refs:port

244 						struct rmnet_port *port,
297 struct rmnet_port *port,
309 if (port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV5)
343 struct rmnet_port *port)
358 if (port->data_format & RMNET_FLAGS_INGRESS_MAP_CKSUMV4) {
360 } else if (port->data_format & RMNET_FLAGS_INGRESS_MAP_CKSUMV5) {
475 struct rmnet_port *port,
484 rmnet_map_v5_checksum_uplink_packet(skb, port, orig_dev);
525 static void reset_aggr_params(struct rmnet_port *port)
527 port->skbagg_head = NULL;
528 port->agg_count = 0;
529 port->agg_state = 0;
530 memset(&port->agg_time, 0, sizeof(struct timespec64));
533 static void rmnet_send_skb(struct rmnet_port *port, struct sk_buff *skb)
535 if (skb_needs_linearize(skb, port->dev->features)) {
539 priv = netdev_priv(port->rmnet_dev);
552 struct rmnet_port *port;
554 port = container_of(work, struct rmnet_port, agg_wq);
556 spin_lock_bh(&port->agg_lock);
557 if (likely(port->agg_state == -EINPROGRESS)) {
559 if (likely(port->skbagg_head)) {
560 skb = port->skbagg_head;
561 reset_aggr_params(port);
563 port->agg_state = 0;
566 spin_unlock_bh(&port->agg_lock);
568 rmnet_send_skb(port, skb);
573 struct rmnet_port *port;
575 port = container_of(t, struct rmnet_port, hrtimer);
577 schedule_work(&port->agg_wq);
582 unsigned int rmnet_map_tx_aggregate(struct sk_buff *skb, struct rmnet_port *port,
590 spin_lock_bh(&port->agg_lock);
591 memcpy(&last, &port->agg_last, sizeof(struct timespec64));
592 ktime_get_real_ts64(&port->agg_last);
594 if (!port->skbagg_head) {
599 diff = timespec64_sub(port->agg_last, last);
600 size = port->egress_agg_params.bytes - skb->len;
604 spin_unlock_bh(&port->agg_lock);
612 port->skbagg_head = skb_copy_expand(skb, 0, size, GFP_ATOMIC);
613 if (!port->skbagg_head)
617 port->skbagg_head->protocol = htons(ETH_P_MAP);
618 port->agg_count = 1;
619 ktime_get_real_ts64(&port->agg_time);
620 skb_frag_list_init(port->skbagg_head);
623 diff = timespec64_sub(port->agg_last, port->agg_time);
624 size = port->egress_agg_params.bytes - port->skbagg_head->len;
627 agg_skb = port->skbagg_head;
628 reset_aggr_params(port);
629 spin_unlock_bh(&port->agg_lock);
630 hrtimer_cancel(&port->hrtimer);
631 rmnet_send_skb(port, agg_skb);
632 spin_lock_bh(&port->agg_lock);
636 if (skb_has_frag_list(port->skbagg_head))
637 port->skbagg_tail->next = skb;
639 skb_shinfo(port->skbagg_head)->frag_list = skb;
641 port->skbagg_head->len += skb->len;
642 port->skbagg_head->data_len += skb->len;
643 port->skbagg_head->truesize += skb->truesize;
644 port->skbagg_tail = skb;
645 port->agg_count++;
647 if (diff.tv_sec > 0 || diff.tv_nsec > port->egress_agg_params.time_nsec ||
648 port->agg_count >= port->egress_agg_params.count ||
649 port->skbagg_head->len == port->egress_agg_params.bytes) {
650 agg_skb = port->skbagg_head;
651 reset_aggr_params(port);
652 spin_unlock_bh(&port->agg_lock);
653 hrtimer_cancel(&port->hrtimer);
654 rmnet_send_skb(port, agg_skb);
659 if (!hrtimer_active(&port->hrtimer) && port->agg_state != -EINPROGRESS) {
660 port->agg_state = -EINPROGRESS;
661 hrtimer_start(&port->hrtimer,
662 ns_to_ktime(port->egress_agg_params.time_nsec),
665 spin_unlock_bh(&port->agg_lock);
670 spin_unlock_bh(&port->agg_lock);
677 void rmnet_map_update_ul_agg_config(struct rmnet_port *port, u32 size,
680 spin_lock_bh(&port->agg_lock);
681 port->egress_agg_params.bytes = size;
682 WRITE_ONCE(port->egress_agg_params.count, count);
683 port->egress_agg_params.time_nsec = time * NSEC_PER_USEC;
684 spin_unlock_bh(&port->agg_lock);
687 void rmnet_map_tx_aggregate_init(struct rmnet_port *port)
689 hrtimer_init(&port->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
690 port->hrtimer.function = rmnet_map_flush_tx_packet_queue;
691 spin_lock_init(&port->agg_lock);
692 rmnet_map_update_ul_agg_config(port, 4096, 1, 800);
693 INIT_WORK(&port->agg_wq, rmnet_map_flush_tx_packet_work);
696 void rmnet_map_tx_aggregate_exit(struct rmnet_port *port)
698 hrtimer_cancel(&port->hrtimer);
699 cancel_work_sync(&port->agg_wq);
701 spin_lock_bh(&port->agg_lock);
702 if (port->agg_state == -EINPROGRESS) {
703 if (port->skbagg_head) {
704 dev_kfree_skb_any(port->skbagg_head);
705 reset_aggr_params(port);
708 port->agg_state = 0;
710 spin_unlock_bh(&port->agg_lock);