| From 81f9124f106441a6ac2f9c43efb9de9f5cc60cb4 Mon Sep 17 00:00:00 2001 |
| From: "himanshu.goyal" <himanshu.goyal@mediatek.com> |
| Date: Tue, 24 Jan 2023 14:32:08 +0800 |
| Subject: [PATCH 1132/1132] mt76: mt7915: Add vendor command attribute for RTS |
| BW signaling. |
| |
| Signed-off-by: himanshu.goyal <himanshu.goyal@mediatek.com> |
| --- |
| mt7915/mcu.c | 6 ++++++ |
| mt7915/mcu.h | 9 +++++++++ |
| mt7915/vendor.c | 4 ++++ |
| mt7915/vendor.h | 1 + |
| 4 files changed, 20 insertions(+) |
| |
| diff --git a/mt7915/mcu.c b/mt7915/mcu.c |
| index dffd1761..e07197d0 100644 |
| --- a/mt7915/mcu.c |
| +++ b/mt7915/mcu.c |
| @@ -4410,6 +4410,12 @@ int mt7915_mcu_set_cfg(struct mt7915_phy *phy, u8 cfg_info, u8 type) |
| req.cert.length = cpu_to_le16(tlv_len); |
| req.cert.cert_program = type; |
| break; |
| + case CFGINFO_RTS_SIGTA_EN_FEATURE: |
| + tlv_len = sizeof(struct rts_sigta_cfg); |
| + req.rts_sigta.tag = cpu_to_le16(cfg_info); |
| + req.rts_sigta.length = cpu_to_le16(tlv_len); |
| + req.rts_sigta.enable = type ? 1: 0; |
| + break; |
| case CFGINFO_3WIRE_EN_CFG: |
| tlv_len = sizeof(struct three_wire_cfg); |
| req.three_wire.tag = cpu_to_le16(cfg_info); |
| diff --git a/mt7915/mcu.h b/mt7915/mcu.h |
| index a07bb9ac..8cbd37ca 100644 |
| --- a/mt7915/mcu.h |
| +++ b/mt7915/mcu.h |
| @@ -867,6 +867,13 @@ struct three_wire_cfg { |
| u8 rsv[3]; |
| } __packed; |
| |
| +struct rts_sigta_cfg { |
| + __le16 tag; |
| + __le16 length; |
| + bool enable; /* 0: Disable, 1: Enable */ |
| + u8 rsv[3]; |
| +} __packed; |
| + |
| struct cfg_basic_info { |
| u8 dbdc_idx; |
| u8 rsv[3]; |
| @@ -874,11 +881,13 @@ struct cfg_basic_info { |
| union { |
| struct cert_cfg cert; |
| struct three_wire_cfg three_wire; |
| + struct rts_sigta_cfg rts_sigta; |
| }; |
| } __packed; |
| |
| enum { |
| CFGINFO_CERT_CFG = 4, |
| + CFGINFO_RTS_SIGTA_EN_FEATURE = 7, |
| CFGINFO_3WIRE_EN_CFG = 10, |
| }; |
| |
| diff --git a/mt7915/vendor.c b/mt7915/vendor.c |
| index 2e5f07c3..3b7ac098 100644 |
| --- a/mt7915/vendor.c |
| +++ b/mt7915/vendor.c |
| @@ -33,6 +33,7 @@ wireless_ctrl_policy[NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL] = { |
| [MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU] = {.type = NLA_U8 }, |
| [MTK_VENDOR_ATTR_WIRELESS_CTRL_MU_EDCA] = {.type = NLA_U8 }, |
| [MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT] = {.type = NLA_U8 }, |
| + [MTK_VENDOR_ATTR_WIRELESS_CTRL_RTS_SIGTA] = {.type = NLA_U8 }, |
| }; |
| |
| static const struct nla_policy |
| @@ -992,6 +993,9 @@ static int mt7915_vendor_wireless_ctrl(struct wiphy *wiphy, |
| } else if (tb[MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU]) { |
| val8 = nla_get_u8(tb[MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU]); |
| mt7915_set_wireless_amsdu(hw, val8); |
| + } else if (tb[MTK_VENDOR_ATTR_WIRELESS_CTRL_RTS_SIGTA]) { |
| + val8 = nla_get_u8(tb[MTK_VENDOR_ATTR_WIRELESS_CTRL_RTS_SIGTA]); |
| + mt7915_mcu_set_cfg(phy, CFGINFO_RTS_SIGTA_EN_FEATURE, val8); |
| } |
| |
| return 0; |
| diff --git a/mt7915/vendor.h b/mt7915/vendor.h |
| index 33c75dc9..6001ce4a 100644 |
| --- a/mt7915/vendor.h |
| +++ b/mt7915/vendor.h |
| @@ -76,6 +76,7 @@ enum mtk_vendor_attr_wireless_ctrl { |
| MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO, |
| MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU, |
| MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT = 9, |
| + MTK_VENDOR_ATTR_WIRELESS_CTRL_RTS_SIGTA, |
| |
| MTK_VENDOR_ATTR_WIRELESS_CTRL_MU_EDCA, /* reserve */ |
| /* keep last */ |
| -- |
| 2.18.0 |
| |