From 0e27f8448f8cc4b4fd34a507e41a3046bb46acc0 Mon Sep 17 00:00:00 2001 From: JasonHuang Date: Tue, 1 Nov 2022 02:47:44 -0500 Subject: [PATCH 128/296] non-upstream: vendor cmd addition for "wl he muedca_opt_enable" User can set/get HE muedca_opt_enable through iw vendor subcmd 0xb. Signed-off-by: JasonHuang --- .../broadcom/brcm80211/brcmfmac/vendor.c | 7 ++++ .../broadcom/brcm80211/brcmfmac/vendor_ifx.c | 42 +++++++++++++++++++ .../broadcom/brcm80211/brcmfmac/vendor_ifx.h | 5 ++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c index 1d549d1dc6c5..a3c6308caf09 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c @@ -254,6 +254,13 @@ const struct wiphy_vendor_command brcmf_vendor_cmds[] = { VENDOR_CMD_RAW_DATA, brcmf_cfg80211_vndr_cmds_frameburst) }, + { + IFX_SUBCMD(MUEDCA_OPT_ENABLE, + (WIPHY_VENDOR_CMD_NEED_WDEV | + WIPHY_VENDOR_CMD_NEED_NETDEV), + VENDOR_CMD_RAW_DATA, + ifx_cfg80211_vndr_cmds_muedca_opt) + }, { IFX_SUBCMD(TWT, (WIPHY_VENDOR_CMD_NEED_WDEV | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c index 01b0139bcc0d..57069b4cd578 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c @@ -421,3 +421,45 @@ int ifx_cfg80211_vndr_cmds_bsscolor(struct wiphy *wiphy, return ret; } + +int ifx_cfg80211_vndr_cmds_muedca_opt(struct wiphy *wiphy, + struct wireless_dev *wdev, + const void *data, int len) +{ + int ret = 0; + struct brcmf_cfg80211_vif *vif; + struct brcmf_if *ifp; + struct bcm_xtlv *he_tlv; + u8 val = *(u8 *)data; + u8 param[8] = {0}; + + vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev); + ifp = vif->ifp; + he_tlv = (struct bcm_xtlv *)param; + he_tlv->id = cpu_to_le16(IFX_HE_CMD_MUEDCA_OPT); + + if (val == 0xa) { + /* To get fw iovars of the form "wl he muedca_opt_enable" + * using iw, call the parent iovar "he" with the subcmd + * filled and passed along + * ./iw dev wlan0 vendor recv 0x000319 0xb 0xa + */ + ret = brcmf_fil_iovar_data_get(ifp, "he", param, sizeof(param)); + if (ret) { + brcmf_err("get he muedca_opt_enable error:%d\n", ret); + } else { + brcmf_dbg(INFO, + "get he muedca_opt_enable: %d\n", *param); + ifx_cfg80211_vndr_send_cmd_reply(wiphy, param, 1); + } + } else { + he_tlv->len = cpu_to_le16(1); + he_tlv->data[0] = val; + ret = brcmf_fil_iovar_data_set(ifp, "he", + param, sizeof(param)); + if (ret) + brcmf_err("set he muedca_opt_enable error:%d\n", ret); + } + + return ret; +} diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.h index 5d9a5099f230..403972526c3b 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.h @@ -80,7 +80,7 @@ enum ifx_nl80211_vendor_subcmds { SCMD(RSV8) = 8, SCMD(RSV9) = 9, SCMD(RSV10) = 10, - SCMD(RSV11) = 11, + SCMD(MUEDCA_OPT_ENABLE) = 11, SCMD(RSV12) = 12, SCMD(RSV13) = 13, SCMD(TWT) = 14, @@ -481,6 +481,9 @@ int ifx_cfg80211_vndr_cmds_twt(struct wiphy *wiphy, int ifx_cfg80211_vndr_cmds_bsscolor(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, int len); +int ifx_cfg80211_vndr_cmds_muedca_opt(struct wiphy *wiphy, + struct wireless_dev *wdev, + const void *data, int len); #endif /* IFX_VENDOR_H */ -- 2.25.1