static int sdio_mux_write(struct sk_buff *skb) { int rc, sz; /* HTC */ dbg_dump_buf("SDIO_RMNET->WD#", skb->data, skb->len); mutex_lock(&sdio_mux_lock); sz = sdio_write_avail(sdio_mux_ch); DBG("[lte] %s: avail %d len %d\n", __func__, sz, skb->len); if (skb->len <= sz) { rc = sdio_write(sdio_mux_ch, skb->data, skb->len); DBG("[lte] %s: write returned %d\n", __func__, rc); if (rc) rc = -EAGAIN; else DBG_INC_WRITE_CNT(skb->len); } else { rc = -ENOMEM; /* pr_err("[lte] Error - %s, ENOMEM\n", __func__); */ } mutex_unlock(&sdio_mux_lock); return rc; }
static void bam_mux_write_done(struct work_struct *work) { struct sk_buff *skb; struct bam_mux_hdr *hdr; skb = __skb_dequeue(&bam_mux_write_done_pool); hdr = (struct bam_mux_hdr *)skb->data; DBG_INC_WRITE_CNT(skb->data_len); if (bam_ch[hdr->ch_id].write_done) bam_ch[hdr->ch_id].write_done( bam_ch[hdr->ch_id].priv, skb); else dev_kfree_skb_any(skb); }
static void bam_mux_write_done(struct work_struct *work) { struct sk_buff *skb; struct bam_mux_hdr *hdr; struct tx_pkt_info *info; info = container_of(work, struct tx_pkt_info, work); skb = info->skb; kfree(info); hdr = (struct bam_mux_hdr *)skb->data; DBG_INC_WRITE_CNT(skb->data_len); if (bam_ch[hdr->ch_id].write_done) bam_ch[hdr->ch_id].write_done( bam_ch[hdr->ch_id].priv, skb); else dev_kfree_skb_any(skb); }
static int sdio_mux_write(struct sk_buff *skb) { int rc, sz; mutex_lock(&sdio_mux_lock); sz = sdio_write_avail(sdio_mux_ch); DBG("%s: avail %d len %d\n", __func__, sz, skb->len); if (skb->len <= sz) { rc = sdio_write(sdio_mux_ch, skb->data, skb->len); DBG("%s: write returned %d\n", __func__, rc); if (rc == 0) DBG_INC_WRITE_CNT(skb->len); } else rc = -ENOMEM; mutex_unlock(&sdio_mux_lock); return rc; }
static int sdio_mux_write_cmd(void *data, uint32_t len) { int avail, rc; for (;;) { mutex_lock(&sdio_mux_lock); avail = sdio_write_avail(sdio_mux_ch); DBG("[lte] %s: avail %d len %d\n", __func__, avail, len); if (avail >= len) { rc = sdio_write(sdio_mux_ch, data, len); DBG("[lte] %s: write returned %d\n", __func__, rc); if (!rc) { DBG_INC_WRITE_CNT(len); break; } } mutex_unlock(&sdio_mux_lock); msleep(250); } mutex_unlock(&sdio_mux_lock); return 0; }