From 12d31eefb3efec3308e4417288e5d2cf34229cf6 Mon Sep 17 00:00:00 2001 From: JasonHuang Date: Tue, 1 Nov 2022 03:13:05 -0500 Subject: [PATCH 130/296] non-upstream: vendor cmd addition for "wl ldpc_cap" User can set/get ldpc_cap through iw vendor subcmd 0xc. Signed-off-by: JasonHuang --- .../broadcom/brcm80211/brcmfmac/vendor.c | 7 ++++ .../broadcom/brcm80211/brcmfmac/vendor_ifx.c | 32 +++++++++++++++++++ .../broadcom/brcm80211/brcmfmac/vendor_ifx.h | 5 ++- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c index ce01f6041c61..79b4e8742f42 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c @@ -261,6 +261,13 @@ const struct wiphy_vendor_command brcmf_vendor_cmds[] = { VENDOR_CMD_RAW_DATA, ifx_cfg80211_vndr_cmds_muedca_opt) }, + { + IFX_SUBCMD(LDPC_CAP, + (WIPHY_VENDOR_CMD_NEED_WDEV | + WIPHY_VENDOR_CMD_NEED_NETDEV), + VENDOR_CMD_RAW_DATA, + ifx_cfg80211_vndr_cmds_ldpc_cap) + }, { IFX_SUBCMD(AMSDU, (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 94df8ea1ba32..de397d8963cd 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c @@ -496,3 +496,35 @@ int ifx_cfg80211_vndr_cmds_amsdu(struct wiphy *wiphy, return ret; } + +int ifx_cfg80211_vndr_cmds_ldpc_cap(struct wiphy *wiphy, + struct wireless_dev *wdev, + const void *data, int len) +{ + int ret = 0; + struct brcmf_cfg80211_vif *vif; + struct brcmf_if *ifp; + int val = *(s32 *)data; + s32 buf = 0; + + vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev); + ifp = vif->ifp; + + if (val == 0xa) { + ret = brcmf_fil_iovar_int_get(ifp, "ldpc_cap", &buf); + if (ret) { + brcmf_err("get ldpc_cap error:%d\n", ret); + + return ret; + } + + brcmf_dbg(INFO, "get ldpc_cap: %d\n", buf); + ifx_cfg80211_vndr_send_cmd_reply(wiphy, &buf, sizeof(int)); + } else { + ret = brcmf_fil_iovar_int_set(ifp, "ldpc_cap", val); + if (ret) + brcmf_err("set ldpc_cap 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 2d418135d1b6..35fc3aba3e71 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.h @@ -81,7 +81,7 @@ enum ifx_nl80211_vendor_subcmds { SCMD(RSV9) = 9, SCMD(RSV10) = 10, SCMD(MUEDCA_OPT_ENABLE) = 11, - SCMD(RSV12) = 12, + SCMD(LDPC_CAP) = 12, SCMD(AMSDU) = 13, SCMD(TWT) = 14, SCMD(RSV15) = 15, @@ -487,6 +487,9 @@ int ifx_cfg80211_vndr_cmds_muedca_opt(struct wiphy *wiphy, int ifx_cfg80211_vndr_cmds_amsdu(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, int len); +int ifx_cfg80211_vndr_cmds_ldpc_cap(struct wiphy *wiphy, + struct wireless_dev *wdev, + const void *data, int len); #endif /* IFX_VENDOR_H */ -- 2.25.1