From a5b7d87c0ce1a05c0f4672b4026bf374104cdd98 Mon Sep 17 00:00:00 2001 From: Carter Chen Date: Fri, 17 Feb 2023 06:53:42 -0600 Subject: [PATCH 144/296] non-upstream: supporting giartrx IFX vendor ID add a vendor command to support set/get giantrx value via IFX OUI iw dev wlan0 vendor send 0x000319 0x13 0x1 iw dev wlan0 vendor recv 0x000319 0x13 0xa Fixes: SWLINUX-3157 Signed-off-by: Carter Chen --- .../broadcom/brcm80211/brcmfmac/vendor.c | 7 ++++ .../broadcom/brcm80211/brcmfmac/vendor_ifx.c | 33 +++++++++++++++++++ .../broadcom/brcm80211/brcmfmac/vendor_ifx.h | 8 ++++- 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c index efe9368bb5f1..ff2d03e22e0b 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c @@ -321,6 +321,13 @@ const struct wiphy_vendor_command brcmf_vendor_cmds[] = { VENDOR_CMD_RAW_DATA, ifx_cfg80211_vndr_cmds_mpc) }, + { + IFX_SUBCMD(GIANTRX, + (WIPHY_VENDOR_CMD_NEED_WDEV | + WIPHY_VENDOR_CMD_NEED_NETDEV), + VENDOR_CMD_RAW_DATA, + ifx_cfg80211_vndr_cmds_giantrx) + }, }; const struct nl80211_vendor_cmd_info brcmf_vendor_events[] = { diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c index 1840abe15cab..38e3043694c1 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.c @@ -791,3 +791,36 @@ int ifx_cfg80211_vndr_cmds_mpc(struct wiphy *wiphy, return ret; } + +int ifx_cfg80211_vndr_cmds_giantrx(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, "giantrx", &buf); + if (ret) { + brcmf_err("get giantrx error:%d\n", ret); + return ret; + } + + brcmf_dbg(INFO, "get giantrx: %d\n", buf); + ifx_cfg80211_vndr_send_cmd_reply(wiphy, &buf, sizeof(int)); + } else { + brcmf_fil_cmd_int_set(ifp, BRCMF_C_DOWN, 1); + ret = brcmf_fil_iovar_int_set(ifp, "giantrx", val); + brcmf_fil_cmd_int_set(ifp, BRCMF_C_UP, 1); + if (ret) + brcmf_err("set giantrx 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 a83ad615135f..791f76a6d036 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor_ifx.h @@ -94,6 +94,8 @@ enum ifx_nl80211_vendor_subcmds { * * @IFX_VENDOR_SCMD_MPC: Vendor command to set/get MPC setting. * + * @IFX_VENDOR_SCMD_GIANTRX: Vendor command to set/get GIANTRX setting. + * * @IFX_VENDOR_SCMD_MAX: This acts as a the tail of cmds list. * Make sure it located at the end of the list. */ @@ -119,7 +121,8 @@ enum ifx_nl80211_vendor_subcmds { SCMD(RANDMAC) = 17, SCMD(MBO) = 18, SCMD(MPC) = 19, - SCMD(MAX) = 20 + SCMD(GIANTRX) = 20, + SCMD(MAX) = 21 }; /* enum ifx_vendor_attr - IFX nl80211 vendor attributes @@ -673,6 +676,9 @@ int ifx_cfg80211_vndr_cmds_mbo(struct wiphy *wiphy, int ifx_cfg80211_vndr_cmds_mpc(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, int len); +int ifx_cfg80211_vndr_cmds_giantrx(struct wiphy *wiphy, + struct wireless_dev *wdev, + const void *data, int len); #endif /* IFX_VENDOR_H */ -- 2.25.1