Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 5
0
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;
}