/** @brief try to transmit all IPC frames in an skb_txq to CP @param mld the pointer to a mem_link_device instance @param dev the pointer to a mem_ipc_device instance @retval "> 0" accumulated data size written to a circular TXQ @retval "< 0" an error code */ static int tx_frames_to_dev(struct mem_link_device *mld, struct mem_ipc_device *dev) { struct sk_buff_head *skb_txq = dev->skb_txq; int tx_bytes = 0; int ret = 0; while (1) { struct sk_buff *skb; skb = skb_dequeue(skb_txq); if (unlikely(!skb)) break; ret = txq_write(mld, dev, skb); if (unlikely(ret < 0)) { /* Take the skb back to the skb_txq */ skb_queue_head(skb_txq, skb); break; } tx_bytes += ret; } return (ret < 0) ? ret : tx_bytes; }
static int tx_frames_to_dev(struct mem_link_device *mld, struct mem_ipc_device *dev) { struct sk_buff_head *skb_txq = dev->skb_txq; int tx_bytes = 0; int ret = 0; while (1) { struct sk_buff *skb; #ifdef DEBUG_MODEM_IF_LINK_TX u8 *hdr; u8 ch; #endif skb = skb_dequeue(skb_txq); if (unlikely(!skb)) break; ret = txq_write(mld, dev, skb); if (unlikely(ret < 0)) { /* Take the skb back to the skb_txq */ skb_queue_head(skb_txq, skb); break; } tx_bytes += ret; #ifdef DEBUG_MODEM_IF_LINK_TX hdr = skbpriv(skb)->lnk_hdr ? skb->data : NULL; ch = skbpriv(skb)->sipc_ch; log_ipc_pkt(ch, LINK, TX, skb, hdr); #endif dev_kfree_skb_any(skb); } return (ret < 0) ? ret : tx_bytes; }