From d4a1bd480003f3e1a0590bc46fbcb24f05652ca7 Mon Sep 17 00:00:00 2001 From: tzh <tanzhtanzh@gmail.com> Date: Thu, 15 Aug 2024 06:56:47 +0000 Subject: [PATCH] feat(wfit/bt): update aic8800 wifi/bt drive and hal --- longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c | 30 +++++++++++++----------------- 1 files changed, 13 insertions(+), 17 deletions(-) diff --git a/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c b/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c old mode 100644 new mode 100755 index 428687d..2b11800 --- a/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c +++ b/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c @@ -21,7 +21,7 @@ int aicwf_bus_init(uint bus_hdrlen, struct device *dev) { - int ret = 0; + int ret = -ENOMEM; struct aicwf_bus *bus_if; if (!dev) { @@ -31,7 +31,6 @@ bus_if = dev_get_drvdata(dev); bus_if->cmd_buf = kzalloc(CMD_BUF_MAX, GFP_KERNEL); if (!bus_if->cmd_buf) { - ret = -ENOMEM; txrx_err("proto_attach failed\n"); goto fail; } @@ -56,7 +55,7 @@ goto fail; } - return ret; + return 0; fail: aicwf_bus_deinit(dev); @@ -72,8 +71,8 @@ txrx_err("device not found\n"); return; } - printk("%s", __func__); - bus_if = dev_get_drvdata(dev); + sdio_dbg("%s", __func__); + bus_if = aicbsp_get_drvdata(dev); aicwf_bus_stop(bus_if); sdiodev = bus_if->bus_priv.sdio; @@ -84,11 +83,10 @@ } if (bus_if->bustx_thread) { - complete(&bus_if->bustx_trgg); + complete_all(&bus_if->bustx_trgg); kthread_stop(bus_if->bustx_thread); bus_if->bustx_thread = NULL; } - printk("exit %s\n", __func__); } void aicwf_frame_tx(void *dev, struct sk_buff *skb) @@ -201,25 +199,23 @@ else adjust_len = aggr_len; - skb_inblock = __dev_alloc_skb(aggr_len+4, GFP_KERNEL); - if (skb_inblock == NULL) { - txrx_err("no more space!\n"); - aicwf_dev_skb_free(skb); - return -EBADE; + skb_inblock = __dev_alloc_skb(aggr_len+4, GFP_KERNEL); + if (skb_inblock == NULL) { + txrx_err("no more space!\n"); + aicwf_dev_skb_free(skb); + return -EBADE; } skb_put(skb_inblock, aggr_len+4); memcpy(skb_inblock->data, data, aggr_len+4); if ((*(skb_inblock->data + 2) & 0x7f) == SDIO_TYPE_CFG_CMD_RSP) rwnx_rx_handle_msg(rx_priv->sdiodev, (struct ipc_e2a_msg *)(skb_inblock->data + 4)); - #if 0 - if ((*(skb_inblock->data + 2) & 0x7f) == SDIO_TYPE_CFG_DATA_CFM) - aicwf_sdio_host_tx_cfm_handler(&(rx_priv->sdiodev->rwnx_hw->sdio_env), (u32 *)(skb_inblock->data + 4)); - #endif skb_pull(skb, adjust_len+4); } } + /* skb_inblock no used currently, just free it! */ + dev_kfree_skb(skb_inblock); dev_kfree_skb(skb); atomic_dec(&rx_priv->rx_cnt); } @@ -288,7 +284,7 @@ void aicwf_rx_deinit(struct aicwf_rx_priv *rx_priv) { if (rx_priv->sdiodev->bus_if->busrx_thread) { - complete(&rx_priv->sdiodev->bus_if->busrx_trgg); + complete_all(&rx_priv->sdiodev->bus_if->busrx_trgg); kthread_stop(rx_priv->sdiodev->bus_if->busrx_thread); rx_priv->sdiodev->bus_if->busrx_thread = NULL; } -- Gitblit v1.6.2