static netdev_tx_t baseband_usb_netdev_start_xmit( struct sk_buff *skb, struct net_device *dev) { int i; struct baseband_usb *usb; int err; pr_debug("baseband_usb_netdev_start_xmit\n"); /* check input */ if (!skb) { pr_err("no skb\n"); return NETDEV_TX_BUSY; } if (!dev) { pr_err("no net dev\n"); return NETDEV_TX_BUSY; } /* find index of network device which is transmitting */ for (i = 0; i < max_intfs; i++) { if (usb_net_raw_ip_dev[i] == dev) break; } if (i >= max_intfs) { pr_err("unknown net dev %p\n", dev); return NETDEV_TX_BUSY; } usb = baseband_usb_net[i]; /* autoresume if suspended */ if (usb->usb.interface) { usb_autopm_get_interface_async(usb->usb.interface); } else { pr_err("%s: tx get interface error\n", __func__); netif_stop_queue(dev); usb->stats.tx_errors++; return NETDEV_TX_BUSY; } /* submit tx urb */ err = usb_net_raw_ip_tx_urb_submit(usb, skb); if (err < 0) { pr_err("%s: tx urb submit error\n", __func__); netif_stop_queue(dev); usb->stats.tx_errors++; return NETDEV_TX_BUSY; } return NETDEV_TX_OK; }
static netdev_tx_t baseband_usb_netdev_start_xmit( struct sk_buff *skb, struct net_device *dev) { int i; struct baseband_usb *usb; int err; pr_debug("baseband_usb_netdev_start_xmit\n"); /* check input */ if (!skb) { pr_err("no skb\n"); return NETDEV_TX_BUSY; } if (!dev) { pr_err("no net dev\n"); return NETDEV_TX_BUSY; } /* find index of network device which is transmitting */ for (i = 0; i < max_intfs; i++) { if (usb_net_raw_ip_dev[i] == dev) break; } if (i >= max_intfs) { pr_err("unknown net dev %p\n", dev); return NETDEV_TX_BUSY; } usb = baseband_usb_net[i]; /* submit tx urb */ err = usb_net_raw_ip_tx_urb_submit(usb, skb); if (err < 0) { pr_err("tx urb submit error\n"); netif_stop_queue(dev); return NETDEV_TX_BUSY; } return NETDEV_TX_OK; }
static netdev_tx_t baseband_usb_netdev_start_xmit( struct sk_buff *skb, struct net_device *dev) { /* 77228-5 patch */ int i; struct baseband_usb *usb; /* 77228-5 patch */ int err; //+Sophia:0112 struct rmnet_private *p = netdev_priv(dev); //-Sophia:0112 pr_debug("baseband_usb_netdev_start_xmit\n"); /* check input */ if (!skb) { pr_err("no skb\n"); /* 77969-7 patch */ return NETDEV_TX_BUSY; /* 77969-7 patch */ } /* 77228-5 patch */ if (!dev) { pr_err("no net dev\n"); /* 77969-7 patch */ return NETDEV_TX_BUSY; /* 77969-7 patch */ /* 77228-5 patch */ } /* 77228-5 patch */ /* find index of network device which is transmitting */ for (i = 0; i < max_intfs; i++) { if (usb_net_raw_ip_dev[i] == dev) break; /* 77228-5 patch */ } /* 77228-5 patch */ if (i >= max_intfs) { pr_err("unknown net dev %p\n", dev); /* 77969-7 patch */ return NETDEV_TX_BUSY; /* 77969-7 patch */ /* 77228-5 patch */ } /* 77228-5 patch */ usb = baseband_usb_net[i]; /* 77228-5 patch */ //+Sophia:0112 p->stats.tx_packets++; p->stats.tx_bytes += skb->len - 14; //-Sophia:0112 if (usb->usb.interface) { /* autoresume if suspended */ usb_autopm_get_interface_async(usb->usb.interface); } else{ pr_err("tx urb submit error\n"); netif_stop_queue(dev); return NETDEV_TX_BUSY; } #if 0 if (usb->susp_count > 0) { //pr_info("%s: usb->susp_count %d > 0 (suspended -> autoresume)\n",__func__, usb->susp_count); if (usb_autopm_get_interface_async(usb->usb.interface) >= 0) { usb_autopm_put_interface_async(usb->usb.interface); }else{ pr_debug("usb_autopm_get_interface_async failed!\n"); } //return NETDEV_TX_BUSY; } #endif /* submit tx urb */ /* 77228-5 patch */ err = usb_net_raw_ip_tx_urb_submit(usb, skb); /* 77228-5 patch */ if (err < 0) { /* 77228-5 patch */ pr_err("tx urb submit error\n"); /* 77228-5 patch */ rawlog4("[ref] -- %s(%d) %d\n", __func__, __LINE__, --autopm_refcnt); /*83290-1*/ netif_stop_queue(dev); /*83290-1*/ /* 77969-5 patch */ return NETDEV_TX_BUSY; /* 77969-5 patch */ } return NETDEV_TX_OK; }