[][[mt76] Add phy capability vendor command]

[Description]
Add vendor command phy capability ctrl/dump in driver layer

[Release-log]
N/A

Change-Id: I538b011647695e48c4a616f81c57bf9146fbf986
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6142993
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/1116-mt76-mt7915-add-vendor-dump-phy-capa.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/1116-mt76-mt7915-add-vendor-dump-phy-capa.patch
new file mode 100644
index 0000000..c1a19a4
--- /dev/null
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/1116-mt76-mt7915-add-vendor-dump-phy-capa.patch
@@ -0,0 +1,130 @@
+Index: mt76-2022-06-02-1d8af168/mt7915/vendor.c
+===================================================================
+--- mt76-2022-06-02-1d8af168.orig/mt7915/vendor.c
++++ mt76-2022-06-02-1d8af168/mt7915/vendor.c
+@@ -50,6 +50,18 @@ rfeature_ctrl_policy[NUM_MTK_VENDOR_ATTR
+ 	[MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TXBF] = { .type = NLA_U8 },
+ };
+ 
++static const struct nla_policy
++phy_capa_ctrl_policy[NUM_MTK_VENDOR_ATTRS_PHY_CAPA_CTRL] = {
++	[MTK_VENDOR_ATTR_PHY_CAPA_CTRL_SET] = { .type = NLA_NESTED },
++	[MTK_VENDOR_ATTR_PHY_CAPA_CTRL_DUMP] = { .type = NLA_NESTED },
++};
++
++static const struct nla_policy
++phy_capa_dump_policy[NUM_MTK_VENDOR_ATTRS_PHY_CAPA_DUMP] = {
++	[MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_BSS] = { .type = NLA_U16 },
++	[MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_STA] = { .type = NLA_U16 },
++};
++
+ struct csi_null_tone {
+ 	u8 start;
+ 	u8 end;
+@@ -976,6 +988,35 @@ static int mt7915_vendor_hemu_ctrl(struc
+ 	return 0;
+ }
+ 
++static int
++mt7915_vendor_phy_capa_ctrl_dump(struct wiphy *wiphy, struct wireless_dev *wdev,
++			     struct sk_buff *skb, const void *data, int data_len,
++			     unsigned long *storage)
++{
++	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
++	struct mt7915_phy *phy = mt7915_hw_phy(hw);
++	struct mt7915_dev *dev = phy->dev;
++	void *a;
++	int len = 0;
++
++	if (*storage == 1)
++		return -ENOENT;
++	*storage = 1;
++
++	a = nla_nest_start(skb, MTK_VENDOR_ATTR_PHY_CAPA_CTRL_DUMP);
++
++	if (nla_put_u16(skb,
++	    MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_BSS, MT7915_MAX_BSS) ||
++	    nla_put_u16(skb,
++	    MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_STA, MT7915_WTBL_STA))
++		return -ENOMEM;
++	len += 2;
++
++	nla_nest_end(skb, a);
++
++	return len;
++}
++
+ static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
+ 	{
+ 		.info = {
+@@ -1033,6 +1074,17 @@ static const struct wiphy_vendor_command
+ 		.doit = mt7915_vendor_hemu_ctrl,
+ 		.policy = hemu_ctrl_policy,
+ 		.maxattr = MTK_VENDOR_ATTR_HEMU_CTRL_MAX,
++	},
++	{
++		.info = {
++			.vendor_id = MTK_NL80211_VENDOR_ID,
++			.subcmd = MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL,
++		},
++		.flags = WIPHY_VENDOR_CMD_NEED_NETDEV |
++			WIPHY_VENDOR_CMD_NEED_RUNNING,
++		.dumpit = mt7915_vendor_phy_capa_ctrl_dump,
++		.policy = phy_capa_ctrl_policy,
++		.maxattr = MTK_VENDOR_ATTR_PHY_CAPA_CTRL_MAX,
+ 	}
+ };
+ 
+Index: mt76-2022-06-02-1d8af168/mt7915/vendor.h
+===================================================================
+--- mt76-2022-06-02-1d8af168.orig/mt7915/vendor.h
++++ mt76-2022-06-02-1d8af168/mt7915/vendor.h
+@@ -9,6 +9,7 @@ enum mtk_nl80211_vendor_subcmds {
+ 	MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL = 0xc3,
+ 	MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL = 0xc4,
+ 	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
++	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL = 0xc6,
+ };
+ 
+ enum mtk_capi_control_changed {
+@@ -149,4 +150,28 @@ enum mtk_vendor_attr_mnt_dump {
+ 		NUM_MTK_VENDOR_ATTRS_AMNT_DUMP - 1
+ };
+ 
++enum mtk_vendor_attr_phy_capa_ctrl {
++	MTK_VENDOR_ATTR_PHY_CAPA_CTRL_UNSPEC,
++
++	MTK_VENDOR_ATTR_PHY_CAPA_CTRL_SET,
++	MTK_VENDOR_ATTR_PHY_CAPA_CTRL_DUMP,
++
++	/* keep last */
++	NUM_MTK_VENDOR_ATTRS_PHY_CAPA_CTRL,
++	MTK_VENDOR_ATTR_PHY_CAPA_CTRL_MAX =
++		NUM_MTK_VENDOR_ATTRS_PHY_CAPA_CTRL - 1
++};
++
++enum mtk_vendor_attr_phy_capa_dump {
++	MTK_VENDOR_ATTR_PHY_CAPA_DUMP_UNSPEC,
++
++	MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_BSS,
++	MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_STA,
++
++	/* keep last */
++	NUM_MTK_VENDOR_ATTRS_PHY_CAPA_DUMP,
++	MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX =
++		NUM_MTK_VENDOR_ATTRS_PHY_CAPA_DUMP - 1
++};
++
+ #endif
+Index: mt76-2022-06-02-1d8af168/mt7915/mt7915.h
+===================================================================
+--- mt76-2022-06-02-1d8af168.orig/mt7915/mt7915.h
++++ mt76-2022-06-02-1d8af168/mt7915/mt7915.h
+@@ -11,6 +11,7 @@
+ 
+ #define MTK_DEBUG 1
+ #define MT7915_MAX_INTERFACES		19
++#define MT7915_MAX_BSS			16
+ #define MT7915_MAX_WMM_SETS		4
+ #define MT7915_WTBL_SIZE		288
+ #define MT7916_WTBL_SIZE		544