soc: qcom: smd: Transition client drivers from smd to rpmsg
By moving these client drivers to use RPMSG instead of the direct SMD API we can reuse them ontop of the newly added GLINK wire-protocol support found in the 820 and 835 Qualcomm platforms. As the new (RPMSG-based) and old SMD implementations are mutually exclusive we have to change all client drivers in one commit, to make sure we have a working system before and after this transition. Acked-by: Andy Gross <andy.gross@linaro.org> Acked-by: Kalle Valo <kvalo@codeaurora.org> Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
def499c929
commit
5052de8def
@@ -2,7 +2,7 @@ config WCN36XX
|
||||
tristate "Qualcomm Atheros WCN3660/3680 support"
|
||||
depends on MAC80211 && HAS_DMA
|
||||
depends on QCOM_WCNSS_CTRL || QCOM_WCNSS_CTRL=n
|
||||
depends on QCOM_SMD || QCOM_SMD=n
|
||||
depends on RPMSG || RPMSG=n
|
||||
---help---
|
||||
This module adds support for wireless adapters based on
|
||||
Qualcomm Atheros WCN3660 and WCN3680 mobile chipsets.
|
||||
|
@@ -22,7 +22,7 @@
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/soc/qcom/smd.h>
|
||||
#include <linux/rpmsg.h>
|
||||
#include <linux/soc/qcom/smem_state.h>
|
||||
#include <linux/soc/qcom/wcnss_ctrl.h>
|
||||
#include "wcn36xx.h"
|
||||
@@ -1218,15 +1218,13 @@ static int wcn36xx_probe(struct platform_device *pdev)
|
||||
|
||||
INIT_WORK(&wcn->scan_work, wcn36xx_hw_scan_worker);
|
||||
|
||||
wcn->smd_channel = qcom_wcnss_open_channel(wcnss, "WLAN_CTRL", wcn36xx_smd_rsp_process);
|
||||
wcn->smd_channel = qcom_wcnss_open_channel(wcnss, "WLAN_CTRL", wcn36xx_smd_rsp_process, hw);
|
||||
if (IS_ERR(wcn->smd_channel)) {
|
||||
wcn36xx_err("failed to open WLAN_CTRL channel\n");
|
||||
ret = PTR_ERR(wcn->smd_channel);
|
||||
goto out_wq;
|
||||
}
|
||||
|
||||
qcom_smd_set_drvdata(wcn->smd_channel, hw);
|
||||
|
||||
addr = of_get_property(pdev->dev.of_node, "local-mac-address", &ret);
|
||||
if (addr && ret != ETH_ALEN) {
|
||||
wcn36xx_err("invalid local-mac-address\n");
|
||||
|
@@ -19,7 +19,7 @@
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/soc/qcom/smd.h>
|
||||
#include <linux/rpmsg.h>
|
||||
#include "smd.h"
|
||||
|
||||
struct wcn36xx_cfg_val {
|
||||
@@ -254,7 +254,7 @@ static int wcn36xx_smd_send_and_wait(struct wcn36xx *wcn, size_t len)
|
||||
|
||||
init_completion(&wcn->hal_rsp_compl);
|
||||
start = jiffies;
|
||||
ret = qcom_smd_send(wcn->smd_channel, wcn->hal_buf, len);
|
||||
ret = rpmsg_send(wcn->smd_channel, wcn->hal_buf, len);
|
||||
if (ret) {
|
||||
wcn36xx_err("HAL TX failed\n");
|
||||
goto out;
|
||||
@@ -2205,11 +2205,11 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int wcn36xx_smd_rsp_process(struct qcom_smd_channel *channel,
|
||||
const void *buf, size_t len)
|
||||
int wcn36xx_smd_rsp_process(struct rpmsg_device *rpdev,
|
||||
void *buf, int len, void *priv, u32 addr)
|
||||
{
|
||||
const struct wcn36xx_hal_msg_header *msg_header = buf;
|
||||
struct ieee80211_hw *hw = qcom_smd_get_drvdata(channel);
|
||||
struct ieee80211_hw *hw = priv;
|
||||
struct wcn36xx *wcn = hw->priv;
|
||||
struct wcn36xx_hal_ind_msg *msg_ind;
|
||||
wcn36xx_dbg_dump(WCN36XX_DBG_SMD_DUMP, "SMD <<< ", buf, len);
|
||||
|
@@ -51,7 +51,7 @@ struct wcn36xx_hal_ind_msg {
|
||||
};
|
||||
|
||||
struct wcn36xx;
|
||||
struct qcom_smd_channel;
|
||||
struct rpmsg_device;
|
||||
|
||||
int wcn36xx_smd_open(struct wcn36xx *wcn);
|
||||
void wcn36xx_smd_close(struct wcn36xx *wcn);
|
||||
@@ -129,8 +129,8 @@ int wcn36xx_smd_trigger_ba(struct wcn36xx *wcn, u8 sta_index);
|
||||
|
||||
int wcn36xx_smd_update_cfg(struct wcn36xx *wcn, u32 cfg_id, u32 value);
|
||||
|
||||
int wcn36xx_smd_rsp_process(struct qcom_smd_channel *channel,
|
||||
const void *buf, size_t len);
|
||||
int wcn36xx_smd_rsp_process(struct rpmsg_device *rpdev,
|
||||
void *buf, int len, void *priv, u32 addr);
|
||||
|
||||
int wcn36xx_smd_set_mc_list(struct wcn36xx *wcn,
|
||||
struct ieee80211_vif *vif,
|
||||
|
@@ -195,7 +195,7 @@ struct wcn36xx {
|
||||
void __iomem *ccu_base;
|
||||
void __iomem *dxe_base;
|
||||
|
||||
struct qcom_smd_channel *smd_channel;
|
||||
struct rpmsg_endpoint *smd_channel;
|
||||
|
||||
struct qcom_smem_state *tx_enable_state;
|
||||
unsigned tx_enable_state_bit;
|
||||
|
Reference in New Issue
Block a user