[][Remove mwctl in development procedure]

[Description]
Remove mwctl in development procedure because these's a
separate repo exsiting to maintain it.

[Release-log]


Change-Id: Ic5b233568765133d7e46bdfbf7a18581123aaf04
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/5810924
diff --git a/feed/mwctl/src/CMakeLists.txt b/feed/mwctl/src/CMakeLists.txt
deleted file mode 100755
index a7015e9..0000000
--- a/feed/mwctl/src/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-PROJECT(mwctl C)
-ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3)
-
-ADD_EXECUTABLE(mwctl main.c csi.c amnt.c capi.c iwpriv_compat.c ap_security.c)
-TARGET_LINK_LIBRARIES(mwctl nl-tiny)
-
-SET(CMAKE_INSTALL_PREFIX /usr)
-
-INSTALL(TARGETS mwctl
-	RUNTIME DESTINATION sbin
-)
diff --git a/feed/mwctl/src/amnt.c b/feed/mwctl/src/amnt.c
deleted file mode 100755
index 485b882..0000000
--- a/feed/mwctl/src/amnt.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright (C) 2021 Mediatek Inc. */
-#define _GNU_SOURCE
-
-#include "mtk_vendor_nl80211.h"
-#include "mt76-vendor.h"
-#include "mwctl.h"
-
-static struct nla_policy
-amnt_ctrl_policy[NUM_MTK_VENDOR_ATTRS_AMNT_CTRL] = {
-	[MTK_VENDOR_ATTR_AMNT_CTRL_SET] = {.type = NLA_NESTED },
-	[MTK_VENDOR_ATTR_AMNT_CTRL_DUMP] = { .type = NLA_NESTED },
-};
-
-static struct nla_policy
-amnt_dump_policy[NUM_MTK_VENDOR_ATTRS_AMNT_DUMP] = {
-	[MTK_VENDOR_ATTR_AMNT_DUMP_INDEX] = {.type = NLA_U8 },
-	[MTK_VENDOR_ATTR_AMNT_DUMP_LEN] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_AMNT_DUMP_RESULT] = { .type = NLA_NESTED },
-};
-
-static int mt76_amnt_set_attr(struct nl_msg *msg, int argc, char **argv)
-{
-	void *tb1, *tb2;
-	u8 a[ETH_ALEN], idx;
-	int i = 0, matches;
-
-	idx = strtoul(argv[0], NULL, 0);
-	matches = sscanf(argv[1], "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
-			a, a+1, a+2, a+3, a+4, a+5);
-
-	if (matches != ETH_ALEN)
-		return -EINVAL;
-
-	tb1 = nla_nest_start(msg, MTK_VENDOR_ATTR_AMNT_CTRL_SET | NLA_F_NESTED);
-	if (!tb1)
-		return -ENOMEM;
-
-	nla_put_u8(msg, MTK_VENDOR_ATTR_AMNT_SET_INDEX, idx);
-
-	tb2 = nla_nest_start(msg, MTK_VENDOR_ATTR_AMNT_SET_MACADDR | NLA_F_NESTED);
-	if (!tb2) {
-		nla_nest_end(msg, tb1);
-		return -ENOMEM;
-	}
-
-	for (i = 0; i < ETH_ALEN; i++)
-		nla_put_u8(msg, i, a[i]);
-
-	nla_nest_end(msg, tb2);
-	nla_nest_end(msg, tb1);
-
-	return 0;
-}
-
-int mt76_amnt_set(struct nl_msg *msg, int argc,
-	char **argv, void *ctx)
-{
-	void *data;
-	int ret = 0;
-
-	if (argc < 1)
-		return 1;
-
-	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA | NLA_F_NESTED);
-	if (!data)
-		return -ENOMEM;
-
-	mt76_amnt_set_attr(msg, argc, argv);
-
-	nla_nest_end(msg, data);
-
-	return ret;
-}
-
-static int mt76_amnt_dump_cb(struct nl_msg *msg, void *arg)
-{
-	struct nlattr *tb1[NUM_MTK_VENDOR_ATTRS_AMNT_CTRL];
-	struct nlattr *tb2[NUM_MTK_VENDOR_ATTRS_AMNT_DUMP];
-	struct nlattr *attr;
-	struct nlattr *data;
-	struct nlattr *cur;
-	struct amnt_data *res;
-	int len = 0, rem;
-
-	attr = unl_find_attr(&unl, msg, NL80211_ATTR_VENDOR_DATA);
-	if (!attr) {
-		fprintf(stderr, "Testdata attribute not found\n");
-		return NL_SKIP;
-	}
-
-	nla_parse_nested(tb1, MTK_VENDOR_ATTR_AMNT_CTRL_MAX,
-			 attr, amnt_ctrl_policy);
-
-	if (!tb1[MTK_VENDOR_ATTR_AMNT_CTRL_DUMP])
-		return NL_SKIP;
-
-	nla_parse_nested(tb2, NUM_MTK_VENDOR_ATTRS_AMNT_DUMP,
-			 tb1[MTK_VENDOR_ATTR_AMNT_CTRL_DUMP], amnt_dump_policy);
-
-	if (!tb2[MTK_VENDOR_ATTR_AMNT_DUMP_LEN])
-		return NL_SKIP;
-
-	len = nla_get_u8(tb2[MTK_VENDOR_ATTR_AMNT_DUMP_LEN]);
-	if (!len)
-		return 0;
-
-	if (!tb2[MTK_VENDOR_ATTR_AMNT_DUMP_RESULT])
-		return NL_SKIP;
-
-	data = tb2[MTK_VENDOR_ATTR_AMNT_DUMP_RESULT];
-	nla_for_each_nested(cur,data, rem) {
-		res = (struct amnt_data *) nla_data(cur);
-		printf("[vendor] amnt_idx: %d, addr=%x:%x:%x:%x:%x:%x, rssi=%d/%d/%d/%d, last_seen=%u\n",
-			res->idx,
-			res->addr[0], res->addr[1], res->addr[2],
-			res->addr[3], res->addr[4], res->addr[5],
-			res->rssi[0], res->rssi[1], res->rssi[2],
-			res->rssi[3], res->last_seen);
-	}
-	return 0;
-}
-
-int mt76_amnt_dump	(struct nl_msg *msg, int argc,
-	char **argv, void *ctx)
-{
-	void *data, *tb1;
-	u8 amnt_idx;
-
-	if (argc < 1)
-		return 1;
-
-	register_handler(mt76_amnt_dump_cb, NULL);
-	
-	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA | NLA_F_NESTED);
-	if (!data)
-		return -EINVAL;
-
-	tb1 = nla_nest_start(msg, MTK_VENDOR_ATTR_AMNT_CTRL_DUMP | NLA_F_NESTED);
-	if (!tb1)
-		return -EINVAL;
-
-	amnt_idx = strtoul(argv[0], NULL, 0);
-	nla_put_u8(msg, MTK_VENDOR_ATTR_AMNT_DUMP_INDEX, amnt_idx);
-
-	nla_nest_end(msg, tb1);
-
-	nla_nest_end(msg, data);
-
-	return 0;
-}
-
-DECLARE_SECTION(dump);
-
-COMMAND(dump, amnt, "",
-	MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL, 0, CIB_NETDEV, mt76_amnt_dump,
-	"dump amnt <index> (0x0~0xf or 0xff)");
-
-DECLARE_SECTION(set);
-
-COMMAND(set, amnt, "<index>(0x0~0xf) <mac addr>(xx:xx:xx:xx:xx:xx)",
-	MTK_NL80211_VENDOR_SUBCMD_AMNT_CTRL, 0, CIB_NETDEV, mt76_amnt_set,
-	"set amnt <index>(0x0~0xf) <mac addr>(xx:xx:xx:xx:xx:xx)");
-
-
diff --git a/feed/mwctl/src/ap_security.c b/feed/mwctl/src/ap_security.c
deleted file mode 100755
index 3db575e..0000000
--- a/feed/mwctl/src/ap_security.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/* Copyright (C) 2021 Mediatek Inc. */

-#define _GNU_SOURCE

-

-#include "mtk_vendor_nl80211.h"

-#include "mt76-vendor.h"

-#include "mwctl.h"

-

-DECLARE_SECTION(set);

-

-#define AP_SECURITY_OPTIONS "[authmode=[open|shared|wepauto|wpa|wpapsk|wpanone|wpa2|wpa2mix|wpa2psk|wpa3|"	\

-	"wpa3-192|wpa3psk|wpa2pskwpa3psk|wpa2pskmixwpa3psk|wpa1wpa2|wpapskwpa2psk|wpa_aes_wpa2_tkipaes|wpa"	\

-	"_aes_wpa2_tkip|wpa_tkip_wpa2_aes|wpa_tkip_wpa2_tkipaes|wpa_tkipaes_wpa2_aes|wpa_tkipaes_wpa2_tkip"	\

-	"aes|wpa_tkipaes_wpa2_tkip|owe|files_sha256|files_sha384|waicert|waipsk|dpp|dppwpa2psk|dppwap3psk|"	\

-	"dppwpa3pskwpa2psk|wpa2-ent-osen]] [encryptype=[none|wep|tkip|aes|ccmp128|ccmp256|gcmp128|gcmp25" \

-	"6|tkipaes|tkipcmp128|wpa_aes_wpa2_tkipaes|wpa_aes_wpa2_tkip|wpa_tkip_wpa2_aes|wpa_tkip_wpa2_tkipa"	\

-	"es|wpa_tkipaes_wpa2_aes|wpa_tkipaes_wpa2_tkipaes|wpa_tkipaes_wpa2_tkip|sms4]]"	\

-	" [rekeyinterval=<seconds>] [rekeymethod=[time|pkt]] [defaultkeyid=<pairwise key id>]"	\

-	"[wep_key1=<key>] [wep_key2=<key>] [wep_key3=<key>] [wep_key4=<key>] [passphrase=<passphrase>]"	\

-	" [pmf_capable=<0 or 1>] [pmf_require=<0 or 1>] [pmf_sha256=<0 or 1>]"

-

-#define MAX_SEURITY_PARAM_LEN 128

-

-struct security_option {

-	char option_name[MAX_SEURITY_PARAM_LEN];

-	int (* attr_put)(struct nl_msg *msg, char *value);

-};

-

-int auth_attr_put(struct nl_msg *msg, char *value);

-int encryptype_attr_put(struct nl_msg *msg, char *value);

-

-int rekeyinterval_attr_put(struct nl_msg *msg, char *value)

-{

-	unsigned long interval;

-

-	interval = strtoul(value, NULL, 10);

-

-	if (interval < 10 || interval >= 0x3ffffff)

-		return -EINVAL;

-

-	if (nla_put_u32(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_REKEYINTERVAL, interval))

-		return -EMSGSIZE;

-

-	return 0;

-}

-

-int rekeymethod_attr_put(struct nl_msg *msg, char *value)

-{

-	unsigned char method;

-

-	if (strlen(value) == strlen("time") && !strncmp(value, "time", strlen("time")))

-		method = 0;

-	else if (strlen(value) == strlen("pkt") && !strncmp(value, "pkt", strlen("pkt")))

-		method = 1;

-	else

-		return -EINVAL;

-

-	if (nla_put_u8(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_REKEYMETHOD, method))

-		return -EMSGSIZE;

-

-	return 0;

-}

-

-int defaultkeyid_attr_put(struct nl_msg *msg, char *value)

-{

-	unsigned long key_id;

-

-	key_id = strtoul(value, NULL, 10);

-

-	if (key_id < 1 || key_id > 4 )

-		return -EINVAL;

-

-	if (nla_put_u8(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_DEFAULTKEYID, key_id))

-		return -EMSGSIZE;

-

-	return 0;

-}

-

-#define isxdigit(_char)  \

-	(('0' <= (_char) && (_char) <= '9') ||\

-	 ('a' <= (_char) && (_char) <= 'f') || \

-	 ('A' <= (_char) && (_char) <= 'F') \

-	)

-

-int wep_key_attr_put(struct nl_msg *msg, char *value, unsigned char key_idx)

-{

-	struct wep_key_param k;

-	int len, i;

-	char k_v[2];

-	unsigned long tmp_key;

-

-	memset(&k, 0, sizeof(k));

-

-	k.key_idx = key_idx;

-	len = strlen(value);

-

-	switch (len) {

-	case 5: /*wep 40 Ascii type*/

-	case 13: /*wep 104 Ascii type*/

-	case 16: /*wep 128 Ascii type*/

-		k.key_len = len;

-		memcpy(k.key, value, len);

-		break;

-	case 10: /*wep 40 Hex type*/

-	case 26: /*wep 104 Hex type*/

-	case 32: /*wep 128 Hex type*/

-		for (i = 0; i < len; i++) {

-			if (!isxdigit(*(value + i)))

-				return -EINVAL; /*Not Hex value;*/

-		}

-		k.key_len = len / 2;

-		for (i = 0; i < (len / 2); i++) {

-			memcpy(k_v, value + i * 2, 2);

-			tmp_key = strtoul(k_v, NULL, 10);

-			k.key[i] = (unsigned char)tmp_key;

-		}

-		k.key[k.key_len] = '\0';

-		break;

-	default:

-		return -EINVAL;

-	}

-

-	if (nla_put(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_WEPKEY, sizeof(k), &k))

-		return -EMSGSIZE;

-

-	return 0;	

-}

-

-int wep_key1_attr_put(struct nl_msg *msg, char *value)

-{

-	return wep_key_attr_put(msg, value, 0);

-}

-

-int wep_key2_attr_put(struct nl_msg *msg, char *value)

-{

-	return wep_key_attr_put(msg, value, 1);

-}

-

-int wep_key3_attr_put(struct nl_msg *msg, char *value)

-{

-	return wep_key_attr_put(msg, value, 2);

-}

-

-int wep_key4_attr_put(struct nl_msg *msg, char *value)

-{

-	return wep_key_attr_put(msg, value, 3);

-}

-

-int passphrase_attr_put(struct nl_msg *msg, char *value)

-{

-	int len;

-

-	len = strlen(value);

-

-	if (len >= 65)

-		return -EINVAL;

-

-	if (nla_put(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PASSPHRASE, len, value))

-		return -EMSGSIZE;

-

-	return 0;

-}

-

-int pmf_capable_attr_put(struct nl_msg *msg, char *value)

-{

-	unsigned char pmf_capable;

-

-	if (!value)

-		return -EINVAL;

-

-	if (*value == '0')

-		pmf_capable = 0;

-	else if (*value == '1')

-		pmf_capable = 1;

-	else

-		return -EINVAL;

-

-	if (nla_put_u8(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PMF_CAPABLE, pmf_capable))

-		return -EMSGSIZE;

-

-	return 0;

-}

-

-int pmf_require_attr_put(struct nl_msg *msg, char *value)

-{

-	unsigned char pmf_require;

-

-	if (!value)

-		return -EINVAL;

-

-	if (*value == '0')

-		pmf_require = 0;

-	else if (*value == '1')

-		pmf_require = 1;

-	else

-		return -EINVAL;

-

-	if (nla_put_u8(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PMF_REQUIRE, pmf_require))

-		return -EMSGSIZE;

-

-	return 0;

-}

-

-int pmf_sha256_attr_put(struct nl_msg *msg, char *value)

-{

-	unsigned char pmf_sha256;

-

-	if (!value)

-		return -EINVAL;

-

-	if (*value == '0')

-		pmf_sha256 = 0;

-	else if (*value == '1')

-		pmf_sha256 = 1;

-	else

-		return -EINVAL;

-

-	if (nla_put_u8(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PMF_SHA256, pmf_sha256))

-		return -EMSGSIZE;

-

-	return 0;

-}

-

-struct security_option sec_opt[] = {

-	{"authmode", auth_attr_put},

-	{"encryptype", encryptype_attr_put},

-	{"rekeyinterval", rekeyinterval_attr_put},

-	{"rekeymethod", rekeymethod_attr_put},

-	{"defaultkeyid", defaultkeyid_attr_put},

-	{"wep_key1", wep_key1_attr_put},

-	{"wep_key2", wep_key2_attr_put},

-	{"wep_key3", wep_key3_attr_put},

-	{"wep_key4", wep_key4_attr_put},

-	{"passphrase", passphrase_attr_put},

-	{"pmf_capable", pmf_capable_attr_put},

-	{"pmf_require", pmf_require_attr_put},

-	{"pmf_sha256", pmf_sha256_attr_put},

-};

-

-struct auth_mode_option  {

-	char option_name[MAX_SEURITY_PARAM_LEN];

-	enum mtk_vendor_attr_authmode mode;

-};

-

-struct auth_mode_option auth_opt[] = {

-	{"open", NL80211_AUTH_OPEN},

-	{"shared", NL80211_AUTH_SHARED},

-	{"wepauto", NL80211_AUTH_WEPAUTO},

-	{"wpa", NL80211_AUTH_WPA},

-	{"wpapsk", NL80211_AUTH_WPAPSK},

-	{"wpanone", NL80211_AUTH_WPANONE},

-	{"wpa2", NL80211_AUTH_WPA2},

-	{"wpa2mix", NL80211_AUTH_WPA2MIX},

-	{"wpa2psk", NL80211_AUTH_WPA2PSK},

-	{"wpa3", NL80211_AUTH_WPA3},

-	{"wpa3-192", NL80211_AUTH_WPA3_192},

-	{"wpa3psk", NL80211_AUTH_WPA3PSK},

-	{"wpa2pskwpa3psk", NL80211_AUTH_WPA2PSKWPA3PSK},

-	{"wpa2pskmixwpa3psk", NL80211_AUTH_WPA2PSKMIXWPA3PSK},

-	{"wpa1wpa2", NL80211_AUTH_WPA1WPA2},

-	{"wpapskwpa2psk", NL80211_AUTH_WPAPSKWPA2PSK},

-	{"wpa_aes_wpa2_tkipaes", NL80211_AUTH_WPA_AES_WPA2_TKIPAES},

-	{"wpa_aes_wpa2_tkip", NL80211_AUTH_WPA_AES_WPA2_TKIP},

-	{"wpa_tkip_wpa2_aes", NL80211_AUTH_WPA_TKIP_WPA2_AES},

-	{"wpa_tkip_wpa2_tkipaes", NL80211_AUTH_WPA_TKIP_WPA2_TKIPAES},

-	{"wpa_tkipaes_wpa2_aes", NL80211_AUTH_WPA_TKIPAES_WPA2_AES},

-	{"wpa_tkipaes_wpa2_tkipaes", NL80211_AUTH_WPA_TKIPAES_WPA2_TKIPAES},

-	{"wpa_tkipaes_wpa2_tkip", NL80211_AUTH_WPA_TKIPAES_WPA2_TKIP},

-	{"owe", NL80211_AUTH_OWE},

-	{"files_sha256", NL80211_AUTH_FILS_SHA256},

-	{"files_sha384", NL80211_AUTH_FILS_SHA384},

-	{"waicert", NL80211_AUTH_WAICERT},

-	{"waipsk", NL80211_AUTH_WAIPSK},

-	{"dpp", NL80211_AUTH_DPP},

-	{"dppwpa2psk", NL80211_AUTH_DPPWPA2PSK},

-	{"dppwap3psk", NL80211_AUTH_DPPWPA3PSK},

-	{"dppwpa3pskwpa2psk", NL80211_AUTH_DPPWPA3PSKWPA2PSK},

-	{"wpa2-ent-osen", NL80211_AUTH_WPA2_ENT_OSEN},

-};

-

-int auth_attr_put(struct nl_msg *msg, char *value)

-{

-	int i;

-

-	for (i = 0; i < (sizeof(auth_opt)/sizeof(auth_opt[0])); i++) {

-		if (strlen(auth_opt[i].option_name) == strlen(value) &&

-			!strncmp(auth_opt[i].option_name, value, strlen(value))) {

-			if (nla_put_u32(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_AUTHMODE, auth_opt[i].mode))

-				return -EMSGSIZE;

-		}

-	}

-

-	return 0;

-}

-

-struct encryptype_option  {

-	char option_name[MAX_SEURITY_PARAM_LEN];

-	enum mtk_vendor_attr_encryptype type;

-};

-

-struct encryptype_option encryp_opt[] = {

-	{"none", NL80211_ENCRYPTYPE_NONE},

-	{"wep", NL80211_ENCRYPTYPE_WEP},

-	{"tkip", NL80211_ENCRYPTYPE_TKIP},

-	{"aes", NL80211_ENCRYPTYPE_AES},

-	{"ccmp128", NL80211_ENCRYPTYPE_CCMP128},

-	{"ccmp256", NL80211_ENCRYPTYPE_CCMP256},

-	{"gcmp128|gcmp256", NL80211_ENCRYPTYPE_GCMP128},

-	{"tkipaes", NL80211_ENCRYPTYPE_GCMP256},

-	{"tkipcmp128", NL80211_ENCRYPTYPE_TKIPCCMP128},

-	{"wpa_aes_wpa2_tkipaes", NL80211_ENCRYPTYPE_WPA_AES_WPA2_TKIPAES},

-	{"wpa_aes_wpa2_tkip", NL80211_ENCRYPTYPE_WPA_AES_WPA2_TKIP},

-	{"wpa_tkip_wpa2_aes", NL80211_ENCRYPTYPE_WPA_TKIP_WPA2_AES},

-	{"wpa_tkip_wpa2_tkipaes", NL80211_ENCRYPTYPE_WPA_TKIP_WPA2_TKIPAES},

-	{"wpa_tkipaes_wpa2_aes", NL80211_ENCRYPTYPE_WPA_TKIPAES_WPA2_AES},

-	{"wpa_tkipaes_wpa2_tkipaes", NL80211_ENCRYPTYPE_WPA_TKIPAES_WPA2_TKIPAES},

-	{"wpa_tkipaes_wpa2_tkip", NL80211_ENCRYPTYPE_WPA_TKIPAES_WPA2_TKIP},

-	{"sms4", NL80211_ENCRYPTYPE_SMS4},

-};

-

-int encryptype_attr_put(struct nl_msg *msg, char *value)

-{

-	int i;

-

-	for (i = 0; i < (sizeof(encryp_opt)/sizeof(encryp_opt[0])); i++) {

-		if (strlen(encryp_opt[i].option_name) == strlen(value) &&

-			!strncmp(encryp_opt[i].option_name, value, strlen(value))) {

-			if (nla_put_u32(msg, MTK_NL80211_VENDOR_ATTR_AP_SECURITY_ENCRYPTYPE, encryp_opt[i].type))

-				return -EMSGSIZE;

-		}

-	}

-

-	return 0;

-}

-

-int handle_ap_security_set(struct nl_msg *msg, int argc,

-	char **argv, void *ctx)

-{

-	void *data;

-	char *ptr, *param_str, *val_str, invalide = 0;

-	int i, j;

-

-	if (!argc)

-		return -EINVAL;

-

-	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA);

-	if (!data)

-		return -ENOMEM;

-

-	for (i = 0; i < argc; i++) {

-		ptr = argv[i];

-		param_str = ptr;

-		val_str = strchr(ptr, '=');

-

-		if (!val_str)

-			continue;

-

-		*val_str++ = 0;

-

-		for (j = 0; j < (sizeof(sec_opt) / sizeof(sec_opt[0])); j++) {

-			if (strlen(sec_opt[j].option_name) == strlen(param_str) &&

-				!strncmp(sec_opt[j].option_name, param_str, strlen(param_str)))

-				break;

-		}

-

-		if (j != (sizeof(sec_opt) / sizeof(sec_opt[0]))) {

-			if (sec_opt[j].attr_put(msg, val_str) < 0)

-				printf("invalide argument %s=%s, ignore it\n", param_str, val_str);

-			else

-				invalide = 1;

-		}

-	}

-

-	nla_nest_end(msg, data);

-

-	if (!invalide)

-		return -EINVAL;

-

-	return 0;

-}

-

-COMMAND(set, ap_security,

-	AP_SECURITY_OPTIONS,

-	MTK_NL80211_VENDOR_SUBCMD_SET_AP_SECURITY, 0, CIB_NETDEV, handle_ap_security_set,

-	"Set the security information to specific bss\n");

diff --git a/feed/mwctl/src/capi.c b/feed/mwctl/src/capi.c
deleted file mode 100755
index 45a50a1..0000000
--- a/feed/mwctl/src/capi.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/* Copyright (C) 2021 Mediatek Inc. */
-#define _GNU_SOURCE
-
-#include "mtk_vendor_nl80211.h"
-#include "mt76-vendor.h"
-#include "mwctl.h"
-
-static int mt76_ap_rfeatures_set_attr(struct nl_msg *msg, int argc, char **argv)
-{
-	char *val, *s1, *s2, *cur;
-	void *data;
-	int idx = MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_EN;
-
-	val = strchr(argv[0], '=');
-	if (!val)
-		return -EINVAL;
-
-	*(val++) = 0;
-
-	if (!strncmp(argv[0], "he_gi", 5)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_GI, strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "he_ltf", 6)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_LTF, strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "trig_type", 9)) {
-		data = nla_nest_start(msg,
-				      MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_CFG | NLA_F_NESTED);
-		if (!data)
-			return -ENOMEM;
-
-		s1 = s2 = strdup(val);
-		while ((cur = strsep(&s1, ",")) != NULL)
-			nla_put_u8(msg, idx++, strtoul(cur, NULL, 0));
-
-		nla_nest_end(msg, data);
-
-		free(s2);
-	} else if (!strncmp(argv[0], "ack_policy", 10)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY, strtoul(val, NULL, 0));
-	}
-
-	return 0;
-}
-
-int mt76_ap_rfeatures_set(struct nl_msg *msg, int argc,
-	char **argv, void *ctx)
-{
-	void *data;
-	int ret = 0;
-
-	if (argc < 1)
-		return 1;
-
-	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA | NLA_F_NESTED);
-	if (!data)
-		return -ENOMEM;
-
-	mt76_ap_rfeatures_set_attr(msg, argc, argv);
-
-	nla_nest_end(msg, data);
-
-	return ret;
-}
-
-static int mt76_ap_wireless_set_attr(struct nl_msg *msg, int argc, char **argv)
-{
-	char *val;
-
-	val = strchr(argv[0], '=');
-	if (!val)
-		return -EINVAL;
-
-	*(val++) = 0;
-
-	if (!strncmp(argv[0], "fixed_mcs", 9)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_MCS, strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "ofdma", 5)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_OFDMA, strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "ppdu_type", 9)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_WIRELESS_CTRL_PPDU_TX_TYPE, strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "nusers_ofdma", 12)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_WIRELESS_CTRL_NUSERS_OFDMA, strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "add_ba_req_bufsize", 18)) {
-		nla_put_u16(msg, MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE,
-			    strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "mimo", 4)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO, strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "ampdu", 5)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_WIRELESS_CTRL_AMPDU, strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "amsdu", 5)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU, strtoul(val, NULL, 0));
-	} else if (!strncmp(argv[0], "cert", 4)) {
-		nla_put_u8(msg, MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT, strtoul(val, NULL, 0));
-	}
-
-	return 0;
-}
-
-int mt76_ap_wireless_set(struct nl_msg *msg, int argc,
-	char **argv, void *ctx)
-{
-	void *data;
-	int ret = 0;
-
-	if (argc < 1)
-		return 1;
-
-	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA | NLA_F_NESTED);
-	if (!data)
-		return -ENOMEM;
-
-	mt76_ap_wireless_set_attr(msg, argc, argv);
-
-	nla_nest_end(msg, data);
-
-	return ret;
-}
-
-DECLARE_SECTION(set);
-
-COMMAND(set, ap_rfeatures, "he_gi=<val>",
-	MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL, 0, CIB_NETDEV, mt76_ap_rfeatures_set,
-	"set ap_rfeatures he_gi=<val>"
-	"set ap_rfeatures he_ltf=<val>"
-	"set ap_rfeatures trig_type=<enable>,<val> (val: 0-7)"
-	"set ap_rfeatures ack_policy=<val> (val: 0-4)");
-
-DECLARE_SECTION(set);
-
-COMMAND(set, ap_wireless, "he_gi=<val>",
-	MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL, 0, CIB_NETDEV, mt76_ap_wireless_set,
-	"set ap_wireless fixed_mcs=<val>"
-	"set ap_wireless ofdma=<val> (0: disable, 1: DL, 2: UL)"
-	"set ap_wireless nusers_ofdma=<val>"
-	"set ap_wireless ppdu_type=<val> (0: SU, 1: MU, 4: LEGACY)"
-	"set ap_wireless add_ba_req_bufsize=<val>"
-	"set ap_wireless mimo=<val> (0: DL, 1: UL)"
-	"set ap_wireless ampdu=<enable>"
-	"set ap_wireless amsdu=<enable>"
-	"set ap_wireless cert=<enable>");
diff --git a/feed/mwctl/src/csi.c b/feed/mwctl/src/csi.c
deleted file mode 100755
index abbc277..0000000
--- a/feed/mwctl/src/csi.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/* Copyright (C) 2021 Mediatek Inc. */
-#define _GNU_SOURCE
-
-#include "mtk_vendor_nl80211.h"
-#include "mt76-vendor.h"
-#include "mwctl.h"
-
-struct csi_data *csi;
-int csi_idx;
-
-static struct nla_policy csi_ctrl_policy[NUM_MTK_VENDOR_ATTRS_CSI_CTRL] = {
-	[MTK_VENDOR_ATTR_CSI_CTRL_CFG] = { .type = NLA_NESTED },
-	[MTK_VENDOR_ATTR_CSI_CTRL_CFG_MODE] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_CTRL_CFG_TYPE] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL1] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL2] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_CTRL_MAC_ADDR] = { .type = NLA_NESTED },
-	[MTK_VENDOR_ATTR_CSI_CTRL_INTERVAL] = { .type = NLA_U32 },
-	[MTK_VENDOR_ATTR_CSI_CTRL_DUMP_NUM] = { .type = NLA_U16 },
-	[MTK_VENDOR_ATTR_CSI_CTRL_DATA] = { .type = NLA_NESTED },
-};
-
-static struct nla_policy csi_data_policy[NUM_MTK_VENDOR_ATTRS_CSI_DATA] = {
-	[MTK_VENDOR_ATTR_CSI_DATA_VER] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_DATA_TS] = { .type = NLA_U32 },
-	[MTK_VENDOR_ATTR_CSI_DATA_RSSI] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_DATA_SNR] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_DATA_BW] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_DATA_CH_IDX] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_DATA_TA] = { .type = NLA_NESTED },
-	[MTK_VENDOR_ATTR_CSI_DATA_I] = { .type = NLA_NESTED },
-	[MTK_VENDOR_ATTR_CSI_DATA_Q] = { .type = NLA_NESTED },
-	[MTK_VENDOR_ATTR_CSI_DATA_INFO] = { .type = NLA_U32 },
-	[MTK_VENDOR_ATTR_CSI_DATA_TX_ANT] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_DATA_RX_ANT] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_DATA_MODE] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_CSI_DATA_H_IDX] = { .type = NLA_U32 },
-};
-
-static int mt76_csi_dump_cb(struct nl_msg *msg, void *arg)
-{
-	struct nlattr *tb[NUM_MTK_VENDOR_ATTRS_CSI_CTRL];
-	struct nlattr *tb_data[NUM_MTK_VENDOR_ATTRS_CSI_DATA];
-	struct nlattr *attr;
-	struct nlattr *cur;
-	size_t idx;
-	int rem;
-	struct csi_data *c = &csi[csi_idx];
-
-	attr = unl_find_attr(&unl, msg, NL80211_ATTR_VENDOR_DATA);
-	if (!attr) {
-		fprintf(stderr, "Testdata attribute not found\n");
-		return NL_SKIP;
-	}
-
-	nla_parse_nested(tb, MTK_VENDOR_ATTR_CSI_CTRL_MAX,
-			 attr, csi_ctrl_policy);
-
-	if (!tb[MTK_VENDOR_ATTR_CSI_CTRL_DATA])
-		return NL_SKIP;
-
-	nla_parse_nested(tb_data, MTK_VENDOR_ATTR_CSI_DATA_MAX,
-			 tb[MTK_VENDOR_ATTR_CSI_CTRL_DATA], csi_data_policy);
-
-	if (!(tb_data[MTK_VENDOR_ATTR_CSI_DATA_VER] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_TS] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_RSSI] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_SNR] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_BW] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_CH_IDX] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_TA] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_I] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_Q] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_INFO] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_MODE] &&
-	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_H_IDX])) {
-		fprintf(stderr, "Attributes error for CSI data\n");
-		return NL_SKIP;
-	}
-
-	c->rssi = nla_get_u8(tb_data[MTK_VENDOR_ATTR_CSI_DATA_RSSI]);
-	c->snr = nla_get_u8(tb_data[MTK_VENDOR_ATTR_CSI_DATA_SNR]);
-	c->data_bw = nla_get_u8(tb_data[MTK_VENDOR_ATTR_CSI_DATA_BW]);
-	c->pri_ch_idx = nla_get_u8(tb_data[MTK_VENDOR_ATTR_CSI_DATA_CH_IDX]);
-	c->rx_mode = nla_get_u8(tb_data[MTK_VENDOR_ATTR_CSI_DATA_MODE]);
-
-	c->tx_idx = nla_get_u16(tb_data[MTK_VENDOR_ATTR_CSI_DATA_TX_ANT]);
-	c->rx_idx = nla_get_u16(tb_data[MTK_VENDOR_ATTR_CSI_DATA_RX_ANT]);
-
-	c->info = nla_get_u32(tb_data[MTK_VENDOR_ATTR_CSI_DATA_INFO]);
-	c->h_idx = nla_get_u32(tb_data[MTK_VENDOR_ATTR_CSI_DATA_H_IDX]);
-
-	c->ts = nla_get_u32(tb_data[MTK_VENDOR_ATTR_CSI_DATA_TS]);
-
-	idx = 0;
-	nla_for_each_nested(cur, tb_data[MTK_VENDOR_ATTR_CSI_DATA_TA], rem) {
-		if (idx < ETH_ALEN)
-			c->ta[idx++] = nla_get_u8(cur);
-	}
-
-	idx = 0;
-	nla_for_each_nested(cur, tb_data[MTK_VENDOR_ATTR_CSI_DATA_I], rem) {
-		if (idx < CSI_MAX_COUNT)
-			c->data_i[idx++] = nla_get_u16(cur);
-	}
-
-	idx = 0;
-	nla_for_each_nested(cur, tb_data[MTK_VENDOR_ATTR_CSI_DATA_Q], rem) {
-		if (idx < CSI_MAX_COUNT)
-			c->data_q[idx++] = nla_get_u16(cur);
-	}
-
-	csi_idx++;
-
-	return NL_SKIP;
-}
-
-static int mt76_csi_to_json(const char *name)
-{
-#define MAX_BUF_SIZE	6000
-	FILE *f;
-	int i, ret = -ENOMEM;
-
-	f = fopen(name, "a+");
-	if (!f) {
-		printf("open failure");
-		return 1;
-	}
-
-	if (fwrite("[", 1, 1, f) != 1) {
-		perror("fwrite");
-		goto out;
-	}
-
-	for (i = 0; i < csi_idx; i++) {
-		struct csi_data *c = &csi[i];
-		char *pos, *buf;
-		int j;
-
-		buf = malloc(MAX_BUF_SIZE);
-		if (!buf)
-			goto out;
-
-		pos = buf;
-		pos += snprintf(pos, MAX_BUF_SIZE, "%c", '[');
-
-		pos += snprintf(pos, MAX_BUF_SIZE, "%d,", c->ts);
-		pos += snprintf(pos, MAX_BUF_SIZE, "\"%02x%02x%02x%02x%02x%02x\",", c->ta[0], c->ta[1], c->ta[2], c->ta[3], c->ta[4], c->ta[5]);
-
-		pos += snprintf(pos, MAX_BUF_SIZE, "%d,", c->rssi);
-		pos += snprintf(pos, MAX_BUF_SIZE, "%u,", c->snr);
-		pos += snprintf(pos, MAX_BUF_SIZE, "%u,", c->data_bw);
-		pos += snprintf(pos, MAX_BUF_SIZE, "%u,", c->pri_ch_idx);
-		pos += snprintf(pos, MAX_BUF_SIZE, "%u,", c->rx_mode);
-		pos += snprintf(pos, MAX_BUF_SIZE, "%d,", c->tx_idx);
-		pos += snprintf(pos, MAX_BUF_SIZE, "%d,", c->rx_idx);
-		pos += snprintf(pos, MAX_BUF_SIZE, "%d,", c->h_idx);
-		pos += snprintf(pos, MAX_BUF_SIZE, "%d,", c->info);
-
-		pos += snprintf(pos, MAX_BUF_SIZE, "%c", '[');
-		for (j = 0; j < 256; j++) {
-			pos += snprintf(pos, MAX_BUF_SIZE, "%d", c->data_i[j]);
-			if (j != 255)
-				pos += snprintf(pos, MAX_BUF_SIZE, ",");
-		}
-		pos += snprintf(pos, MAX_BUF_SIZE, "%c,", ']');
-
-		pos += snprintf(pos, MAX_BUF_SIZE, "%c", '[');
-		for (j = 0; j < 256; j++) {
-			pos += snprintf(pos, MAX_BUF_SIZE, "%d", c->data_q[j]);
-			if (j != 255)
-				pos += snprintf(pos, MAX_BUF_SIZE, ",");
-		}
-		pos += snprintf(pos, MAX_BUF_SIZE, "%c", ']');
-
-		pos += snprintf(pos, MAX_BUF_SIZE, "%c", ']');
-		if (i != csi_idx - 1)
-			pos += snprintf(pos, MAX_BUF_SIZE, ",");
-
-		if (fwrite(buf, 1, pos - buf, f) != (pos - buf)) {
-			perror("fwrite");
-			free(buf);
-			goto out;
-		}
-
-		free(buf);
-	}
-
-	if (fwrite("]", 1, 1, f) != 1) {
-		perror("fwrite");
-		goto out;
-	}
-
-	ret = 0;
-out:
-	if (fclose(f))
-		perror("fclose");
-
-	return ret;
-}
-
-struct unl unl_mt76;
-
-int mt76_csi_dump(struct nl_msg *nlmsg, int argc,
-	char **argv, void *ctx)
-{
-	int pkt_num, ret = 0, i;
-	struct nl_msg *msg;
-	void *data;
-	int if_idx = 0;
-
-	if (argc < 2)
-		return 1;
-
-	pkt_num = strtol(argv[0], NULL, 10);
-	if (pkt_num < 0 || pkt_num > 30000)
-		return -EINVAL;
-
-#define CSI_DUMP_PER_NUM	3
-	csi_idx = 0;
-	csi = (struct csi_data *)calloc(pkt_num, sizeof(*csi));
-	if_idx = *((int*)ctx);
-
-	for (i = 0; i < pkt_num / CSI_DUMP_PER_NUM; i++) {
-		if (unl_genl_init(&unl_mt76, "nl80211") < 0) {
-			fprintf(stderr, "Failed to connect to nl80211\n");
-			return 2;
-		}
-
-		msg = unl_genl_msg(&unl_mt76, NL80211_CMD_VENDOR, true);
-
-		if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, if_idx) ||
-		nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, MTK_NL80211_VENDOR_ID) ||
-		nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL))
-			return false;
-
-		data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA | NLA_F_NESTED);
-		if (!data)
-			return -ENOMEM;
-
-		if (nla_put_u16(msg, MTK_VENDOR_ATTR_CSI_CTRL_DUMP_NUM, CSI_DUMP_PER_NUM))
-			return false;
-
-		nla_nest_end(msg, data);
-
-		ret = unl_genl_request(&unl_mt76, msg, mt76_csi_dump_cb, NULL);
-		if (ret)
-			fprintf(stderr, "nl80211 call failed: %s\n", strerror(-ret));
-
-		unl_free(&unl_mt76);
-	}
-
-	mt76_csi_to_json(argv[1]);
-	free(csi);
-
-	return ret;
-}
-
-static int mt76_csi_set_attr(struct nl_msg *msg, int argc, char **argv)
-{
-	int idx = MTK_VENDOR_ATTR_CSI_CTRL_CFG_MODE;
-	char *val, *s1, *s2, *cur;
-	void *data;
-
-	val = strchr(argv[0], '=');
-	if (!val)
-		return -EINVAL;
-
-	*(val++) = 0;
-
-	if (!strncmp(argv[0], "ctrl", 4)) {
-		data = nla_nest_start(msg, MTK_VENDOR_ATTR_CSI_CTRL_CFG | NLA_F_NESTED);
-		if (!data)
-			return -ENOMEM;
-
-		s1 = s2 = strdup(val);
-
-		while ((cur = strsep(&s1, ",")) != NULL) {
-			u8 param = strtoul(cur, NULL, 0);
-
-			nla_put_u8(msg, idx++, param);
-		}
-
-		nla_nest_end(msg, data);
-
-		free(s2);
-
-		if (argc == 2 &&
-		!strncmp(argv[1], "mac_addr", strlen("mac_addr"))) {
-			u8 a[ETH_ALEN];
-			int matches, i;
-
-			val = strchr(argv[1], '=');
-			if (!val)
-				return -EINVAL;
-
-			*(val++) = 0;
-			matches = sscanf(val, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
-					a, a+1, a+2, a+3, a+4, a+5);
-
-			if (matches != ETH_ALEN)
-				return -EINVAL;
-
-			data = nla_nest_start(msg, MTK_VENDOR_ATTR_CSI_CTRL_MAC_ADDR | NLA_F_NESTED);
-			if (!data)
-				return -ENOMEM;
-
-			for (i = 0; i < ETH_ALEN; i++)
-				nla_put_u8(msg, i, a[i]);
-
-			nla_nest_end(msg, data);
-		}
-	} else if (!strncmp(argv[0], "interval", 8)) {
-		u32 interval = strtoul(val, NULL, 0);
-
-		nla_put_u32(msg, MTK_VENDOR_ATTR_CSI_CTRL_INTERVAL, interval);
-	}
-
-	return 0;
-}
-
-int mt76_csi_set(struct nl_msg *msg, int argc,
-	char **argv, void *ctx)
-{
-	void *data;
-
-	if (argc < 1)
-		return 1;
-
-	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA | NLA_F_NESTED);
-	if (!data)
-		return -ENOMEM;
-
-	mt76_csi_set_attr(msg, argc, argv);
-
-	nla_nest_end(msg, data);
-
-	return 0;
-}
-
-DECLARE_SECTION(dump);
-
-COMMAND(dump, csi, "",
-	MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL, 0, CIB_NETDEV, mt76_csi_dump,
-	"dump csi <packet num> <filename>");
-
-DECLARE_SECTION(set);
-
-COMMAND(set, csi, "ctrl=<opt1>,<opt2>,<opt3>,<opt4> (macaddr=<macaddr>)",
-	MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL, 0, CIB_NETDEV, mt76_amnt_dump,
-	"set csi ctrl=<opt1>,<opt2>,<opt3>,<opt4> (macaddr=<macaddr>)\n"
-	"set csi interval=<interval (us)>");
-
diff --git a/feed/mwctl/src/iwpriv_compat.c b/feed/mwctl/src/iwpriv_compat.c
deleted file mode 100755
index 22a8dcc..0000000
--- a/feed/mwctl/src/iwpriv_compat.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* Copyright (C) 2021 Mediatek Inc. */

-#define _GNU_SOURCE

-

-#include "mtk_vendor_nl80211.h"

-#include "mt76-vendor.h"

-#include "mwctl.h"

-

-static unsigned char ascii2hex(char *in, unsigned int *out)

-{

-	unsigned int hex_val, val;

-	char *p, asc_val;

-

-	hex_val = 0;

-	p = (char *)in;

-

-	while ((*p) != 0) {

-		val = 0;

-		asc_val = *p;

-

-		if ((asc_val >= 'a') && (asc_val <= 'f'))

-			val = asc_val - 87;

-		else if ((*p >= 'A') && (asc_val <= 'F'))

-			val = asc_val - 55;

-		else if ((asc_val >= '0') && (asc_val <= '9'))

-			val = asc_val - 48;

-		else

-			return 0;

-

-		hex_val = (hex_val << 4) + val;

-		p++;

-	}

-

-	*out = hex_val;

-	return 1;

-}

-

-static int handle_common_command(struct nl_msg *msg,

-			   int argc, char **argv, int attr)

-{

-	void *data;

-	size_t len = 0;

-	char *cmd_str;

-	

-	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA);

-	if (!data)

-		return -ENOMEM;

-

-	if (argc > 0) {

-		cmd_str = argv[0];

-

-		len = strlen(cmd_str);

-		if (len) {

-			if (nla_put(msg, attr, len, (unsigned char*)cmd_str))

-				return -EMSGSIZE;

-		}

-	}

-	nla_nest_end(msg, data);

-

-	return 0;

-}

-

-int handle_set_command(struct nl_msg *msg, int argc,

-	char **argv, void *ctx)

-{	

-	return handle_common_command(msg, argc, argv, MTK_NL80211_VENDOR_ATTR_VENDOR_SET_CMD_STR);

-}

-

-TOPLEVEL(set, "[param]=[value]", MTK_NL80211_VENDOR_SUBCMD_VENDOR_SET, 0, CIB_NETDEV, handle_set_command,

-	 "this command is used to be compatible with old iwpriv set command, e.g iwpriv ra0 set channel=36");

-

-int show_callback(struct nl_msg *msg, void *cb)

-{

-	struct nlattr *tb[NL80211_ATTR_MAX + 1];

-	struct nlattr *vndr_tb[MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_ATTR_MAX + 1];

-	struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));

-	char *show_str = NULL;

-	int err = 0;

-

-	err = nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),

-			  genlmsg_attrlen(gnlh, 0), NULL);

-	if (err < 0)

-		return err;

-

-	if (tb[NL80211_ATTR_VENDOR_DATA]) {

-		err = nla_parse_nested(vndr_tb, MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_ATTR_MAX,

-			tb[NL80211_ATTR_VENDOR_DATA], NULL);

-		if (err < 0)

-			return err;

-

-		if (vndr_tb[MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_RSP_STR]) {

-			show_str = nla_data(vndr_tb[MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_RSP_STR]);

-			printf("%s\n", show_str);

-		}		

-	} else

-		printf("no any show rsp string from driver\n");

-

-	return 0;

-}

-

-static int handle_show_command(struct nl_msg *msg, int argc,

-	char **argv, void *ctx)

-{	

-	register_handler(show_callback, NULL);

-	return handle_common_command(msg, argc, argv, MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_CMD_STR);

-}

-

-TOPLEVEL(show, "param", MTK_NL80211_VENDOR_SUBCMD_VENDOR_SHOW, 0, CIB_NETDEV, handle_show_command,

-	 "this command is used to be compatible with old iwpriv show command, e.g iwpriv ra0 show stainfo");

-

-int stat_callback(struct nl_msg *msg, void *cb)

-{

-	struct nlattr *tb[NL80211_ATTR_MAX + 1];

-	struct nlattr *vndr_tb[MTK_NL80211_VENDOR_ATTR_STATISTICS_ATTR_MAX + 1];

-	struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));

-	char *show_str = NULL;

-	int err = 0;

-

-	err = nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),

-			  genlmsg_attrlen(gnlh, 0), NULL);

-	if (err < 0)

-		return err;

-

-	if (tb[NL80211_ATTR_VENDOR_DATA]) {

-		err = nla_parse_nested(vndr_tb, MTK_NL80211_VENDOR_ATTR_STATISTICS_ATTR_MAX,

-			tb[NL80211_ATTR_VENDOR_DATA], NULL);

-		if (err < 0)

-			return err;

-

-		if (vndr_tb[MTK_NL80211_VENDOR_ATTR_STATISTICS_STR]) {

-			show_str = nla_data(vndr_tb[MTK_NL80211_VENDOR_ATTR_STATISTICS_STR]);

-			printf("%s\n", show_str);

-		}		

-	} else

-		printf("no any statistic string from driver\n");

-

-	return 0;

-}

-

-static int handle_stat_command(struct nl_msg *msg, int argc,

-	char **argv, void *ctx)

-{	

-	register_handler(stat_callback, NULL);

-	return handle_common_command(msg, 0, NULL, 0);

-}

-

-TOPLEVEL(stat, NULL, MTK_NL80211_VENDOR_SUBCMD_STATISTICS, 0, CIB_NETDEV, handle_stat_command,

-	 "this command is used to be compatible with old iwpriv stat command, e.g iwpriv ra0 stat");

-

-

-int mac_callback(struct nl_msg *msg, void *cb)

-{

-	struct nlattr *tb[NL80211_ATTR_MAX + 1];

-	struct nlattr *vndr_tb[MTK_NL80211_VENDOR_ATTR_MAC_ATTR_MAX + 1];

-	struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));

-	char *show_str = NULL;

-	int err = 0;

-

-	err = nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),

-			  genlmsg_attrlen(gnlh, 0), NULL);

-	if (err < 0)

-		return err;

-

-	if (tb[NL80211_ATTR_VENDOR_DATA]) {

-		err = nla_parse_nested(vndr_tb, MTK_NL80211_VENDOR_ATTR_MAC_ATTR_MAX,

-			tb[NL80211_ATTR_VENDOR_DATA], NULL);

-		if (err < 0)

-			return err;

-

-		if (vndr_tb[MTK_NL80211_VENDOR_ATTR_MAC_RSP_STR]) {

-			show_str = nla_data(vndr_tb[MTK_NL80211_VENDOR_ATTR_MAC_RSP_STR]);

-			printf("%s\n", show_str);

-		}		

-	} else

-		printf("no any statistic string from driver\n");

-

-	return 0;

-}

-

-

-static int handle_mac_command(struct nl_msg *msg, int argc,

-	char **argv, void *ctx)

-{

-	void *data;

-	char *ptr, *seg_str, *addr_str, *val_str, *range_str;

-	unsigned char is_write, is_range;

-	unsigned int mac_s = 0, mac_e = 0;

-	unsigned int macVal = 0;

-	struct mac_param param;

-

-	if (!argc)

-		return -EINVAL;

-	

-	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA);

-	if (!data)

-		return -ENOMEM;

-

-	ptr = argv[0];

-

-	while ((seg_str = strsep((char **)&ptr, ",")) != NULL) {

-		is_write = 0;

-		addr_str = seg_str;

-		val_str = NULL;

-		val_str = strchr(seg_str, '=');

-

-		if (val_str != NULL) {

-			*val_str++ = 0;

-			is_write = 1;

-		} else

-			is_write = 0;

-

-		if (addr_str) {

-			range_str = strchr(addr_str, '-');

-

-			if (range_str != NULL) {

-				*range_str++ = 0;

-				is_range = 1;

-			} else

-				is_range = 0;

-

-			if ((ascii2hex(addr_str, &mac_s) == 0)) {

-				printf("Invalid MAC CR Addr, str=%s\n", addr_str);

-				break;

-			}

-

-			if (is_range) {

-				if (ascii2hex(range_str, &mac_e) == 0) {

-					printf("Invalid Range End MAC CR Addr[0x%x], str=%s\n",

-							 mac_e, range_str);

-					break;

-				}

-

-				if (mac_e < mac_s) {

-					printf("Invalid Range MAC Addr[%s - %s] => [0x%x - 0x%x]\n",

-							 addr_str, range_str, mac_s, mac_e);

-					break;

-				}

-			} else

-				mac_e = mac_s;

-		}

-

-		if (val_str) {

-			if ((strlen(val_str) == 0) || ascii2hex(val_str, &macVal) == 0) {

-				printf("Invalid MAC value[0x%s]\n", val_str);

-				break;

-			}

-		}

-

-		memset(&param, 0, sizeof(param));

-		param.start = mac_s;

-		param.value = macVal;

-		param.end = mac_e;

-		if (is_write) {

-			if (nla_put(msg, MTK_NL80211_VENDOR_ATTR_MAC_WRITE_PARAM, sizeof(param), &param))

-				return -EMSGSIZE;

-		} else {

-			if (nla_put(msg, MTK_NL80211_VENDOR_ATTR_MAC_SHOW_PARAM, sizeof(param), &param))

-				return -EMSGSIZE;

-		}

-	}

-

-	nla_nest_end(msg, data);

-	register_handler(mac_callback, NULL);

-	return 0;

-}

-

-

-TOPLEVEL(mac, "addr=hex/addr-addr/addr=hex,addr=hex", MTK_NL80211_VENDOR_SUBCMD_MAC, 0,

-	CIB_NETDEV, handle_mac_command,

-	"this command is used to be compatible with old iwpriv mac, e.g iwpriv ra0 mac 2345");

-

diff --git a/feed/mwctl/src/iwpriv_compat.h b/feed/mwctl/src/iwpriv_compat.h
deleted file mode 100755
index c376594..0000000
--- a/feed/mwctl/src/iwpriv_compat.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef __IWPRIV_COMPAT_H

-#define __IWPRIV_COMPAT_H

-

-int handle_set_command(struct nl_msg *msg, int argc,

-	char **argv, void *ctx);

-

-#endif

diff --git a/feed/mwctl/src/main.c b/feed/mwctl/src/main.c
deleted file mode 100755
index af7b31e..0000000
--- a/feed/mwctl/src/main.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/* Copyright (C) 2021 Mediatek Inc. */
-#define _GNU_SOURCE
-
-#include <net/if.h>
-
-#include "mtk_vendor_nl80211.h"
-#include "mt76-vendor.h"
-#include "iwpriv_compat.h"
-#include "mwctl.h"
-
-static const char *progname;
-struct unl unl;
-
-int (*registered_handler)(struct nl_msg *, void *);
-void *registered_handler_data;
-
-void register_handler(int (*handler)(struct nl_msg *, void *), void *data)
-{
-	registered_handler = handler;
-	registered_handler_data = data;
-}
-
-int valid_handler(struct nl_msg *msg, void *arg)
-{
-	if (registered_handler)
-		return registered_handler(msg, registered_handler_data);
-
-	return NL_OK;
-}
-
-extern struct cmd *__start___cmd[];
-extern struct cmd *__stop___cmd;
-
-#define for_each_cmd(_cmd, i)					\
-	for (i = 0; i < &__stop___cmd - __start___cmd; i++)	\
-		if ((_cmd = __start___cmd[i]))
-
-void usage(void)
-{
-	static const char *const commands[] = {
-		"set csi ctrl=<opt1>,<opt2>,<opt3>,<opt4> (macaddr=<macaddr>)",
-		"set csi interval=<interval (us)>",
-		"dump csi <packet num> <filename>",
-
-		"set amnt <index>(0x0~0xf) <mac addr>(xx:xx:xx:xx:xx:xx)",
-		"dump amnt <index> (0x0~0xf or 0xff)",
-
-		"set ap_rfeatures he_gi=<val>",
-		"set ap_rfeatures he_ltf=<val>",
-		"set ap_rfeatures trig_type=<enable>,<val> (val: 0-7)",
-		"set ap_rfeatures ack_policy=<val> (val: 0-4)",
-		"set ap_wireless fixed_mcs=<val>",
-		"set ap_wireless ofdma=<val> (0: disable, 1: DL, 2: UL)",
-		"set ap_wireless nusers_ofdma=<val>",
-		"set ap_wireless ppdu_type=<val> (0: SU, 1: MU, 4: LEGACY)",
-		"set ap_wireless add_ba_req_bufsize=<val>",
-		"set ap_wireless mimo=<val> (0: DL, 1: UL)",
-		"set ap_wireless ampdu=<enable>",
-		"set ap_wireless amsdu=<enable>",
-		"set ap_wireless cert=<enable>",
-	};
-	int i;
-
-	fprintf(stderr, "Usage:\n");
-	for (i = 0; i < ARRAY_SIZE(commands); i++)
-		printf("  %s wlanX %s\n", progname, commands[i]);
-
-	exit(1);
-}
-SECTION(dump);
-
-int main(int argc, char **argv)
-{
-	int if_idx, ret = 0;
-	const struct cmd *cmd, *match = NULL, *sectcmd;
-	const char *command, *section;
-	enum command_identify_by command_idby = CIB_NONE;
-	int err, i;
-	struct nl_msg *msg;
-
-	progname = argv[0];
-
-	if(argv[1])
-		if_idx = if_nametoindex(argv[1]);
-	else {
-		fprintf(stderr, "wrong argument\n");
-		usage();
-	}
-
-	if (!if_idx) {
-		fprintf(stderr, "%s\n", strerror(errno));
-		return 2;
-	}
-
-	argc -= 2;
-	argv += 2;
-
-#if 0
-	if (!strncmp(cmd_str, "dump", 4)) {
-		if (!strncmp(subcmd, "csi", 3))
-			ret = mt76_csi_dump(if_idx, argc, argv);
-		else if (!strncmp(subcmd, "amnt", 4))
-			ret = mt76_amnt_dump(if_idx, argc, argv);
-	} else if (!strncmp(cmd_str, "set", 3)) {
-		if (!strncmp(subcmd, "csi", 3))
-			ret = mt76_csi_set(if_idx, argc, argv);
-		else if (!strncmp(subcmd, "amnt", 4))
-			ret = mt76_amnt_set(if_idx, argc, argv);
-		else if (!strncmp(subcmd, "ap_rfeatures", 12))
-			ret = mt76_ap_rfeatures_set(if_idx, argc, argv);
-		else if (!strncmp(subcmd, "ap_wireless", 11))
-			ret = mt76_ap_wireless_set(if_idx, argc, argv);
-	} else {
-		usage();
-	}
-#endif
-
-	command_idby = CIB_NETDEV;
-	section = *argv;
-	argc--;
-	argv++;
-
-	for_each_cmd(sectcmd, i) {
-		if (sectcmd->parent)
-			continue;
-		/* ok ... bit of a hack for the dupe 'info' section */
-		if (match && sectcmd->idby != command_idby)
-			continue;
-		if (strcmp(sectcmd->name, section) == 0)
-			match = sectcmd;
-	}
-
-	sectcmd = match;
-	match = NULL;
-	if (!sectcmd)
-		return 1;
-
-	if (argc > 0) {
-		command = *argv;
-
-		for_each_cmd(cmd, i) {
-			if (!cmd->handler)
-				continue;
-			if (cmd->parent != sectcmd)
-				continue;
-			/*
-			 * ignore mismatch id by, but allow WDEV
-			 * in place of NETDEV
-			 */
-			if (cmd->idby != command_idby &&
-			    !(cmd->idby == CIB_NETDEV &&
-			      command_idby == CIB_WDEV))
-				continue;
-			if (strcmp(cmd->name, command))
-				continue;
-			if (argc > 1 && !cmd->args)
-				continue;
-			match = cmd;
-			break;
-		}
-
-		if (match) {
-			argc--;
-			argv++;
-		}
-	}
-
-	
-	if (match)
-		cmd = match;
-	else {
-		/* Use the section itself, if possible. */
-		cmd = sectcmd;
-		if (argc && !cmd->args)
-			return 1;
-		if (cmd->idby != command_idby &&
-			!(cmd->idby == CIB_NETDEV && command_idby == CIB_WDEV))
-			return 1;
-		if (!cmd->handler)
-			return 1;
-	}
-
-	if (unl_genl_init(&unl, "nl80211") < 0) {
-		fprintf(stderr, "Failed to connect to nl80211\n");
-		return 2;
-	}
-
-	msg = unl_genl_msg(&unl, NL80211_CMD_VENDOR, false);
-
-	if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, if_idx) ||
-	    nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, MTK_NL80211_VENDOR_ID) ||
-	    nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, cmd->cmd)) {
-		nlmsg_free(msg);
-		goto out;
-	}
-	
-	err = cmd->handler(msg, argc, argv, (void*)&if_idx);
-	if (err) {
-		nlmsg_free(msg);
-		goto out;
-	}
-
-	ret = unl_genl_request(&unl, msg, valid_handler, NULL);
-	if (ret)
-		fprintf(stderr, "nl80211 call failed: %s\n", strerror(-ret));
-out:
-	unl_free(&unl);
-
-	return ret;
-}
diff --git a/feed/mwctl/src/mt76-vendor.h b/feed/mwctl/src/mt76-vendor.h
deleted file mode 100755
index 6be1056..0000000
--- a/feed/mwctl/src/mt76-vendor.h
+++ /dev/null
@@ -1,203 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
-#ifndef __MT76_VENDOR_H
-#define __MT76_VENDOR_H
-
-#include <errno.h>
-#include <linux/nl80211.h>
-#include <netlink/attr.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <unl.h>
-
-typedef uint8_t u8;
-typedef uint16_t u16;
-typedef uint32_t u32;
-typedef uint64_t u64;
-typedef int8_t s8;
-typedef int16_t s16;
-typedef int32_t s32;
-typedef int64_t s64, ktime_t;
-
-#define MTK_NL80211_VENDOR_ID	0x0ce7
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
-#endif
-
-#ifndef DIV_ROUND_UP
-#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
-#endif
-
-struct nl_msg;
-struct nlattr;
-
-enum mtk_vendor_attr_csi_ctrl {
-	MTK_VENDOR_ATTR_CSI_CTRL_UNSPEC,
-
-	MTK_VENDOR_ATTR_CSI_CTRL_CFG,
-	MTK_VENDOR_ATTR_CSI_CTRL_CFG_MODE,
-	MTK_VENDOR_ATTR_CSI_CTRL_CFG_TYPE,
-	MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL1,
-	MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL2,
-	MTK_VENDOR_ATTR_CSI_CTRL_MAC_ADDR,
-	MTK_VENDOR_ATTR_CSI_CTRL_INTERVAL,
-
-	MTK_VENDOR_ATTR_CSI_CTRL_DUMP_NUM,
-
-	MTK_VENDOR_ATTR_CSI_CTRL_DATA,
-
-	/* keep last */
-	NUM_MTK_VENDOR_ATTRS_CSI_CTRL,
-	MTK_VENDOR_ATTR_CSI_CTRL_MAX =
-		NUM_MTK_VENDOR_ATTRS_CSI_CTRL - 1
-};
-
-enum mtk_vendor_attr_csi_data {
-	MTK_VENDOR_ATTR_CSI_DATA_UNSPEC,
-	MTK_VENDOR_ATTR_CSI_DATA_PAD,
-
-	MTK_VENDOR_ATTR_CSI_DATA_VER,
-	MTK_VENDOR_ATTR_CSI_DATA_TS,
-	MTK_VENDOR_ATTR_CSI_DATA_RSSI,
-	MTK_VENDOR_ATTR_CSI_DATA_SNR,
-	MTK_VENDOR_ATTR_CSI_DATA_BW,
-	MTK_VENDOR_ATTR_CSI_DATA_CH_IDX,
-	MTK_VENDOR_ATTR_CSI_DATA_TA,
-	MTK_VENDOR_ATTR_CSI_DATA_I,
-	MTK_VENDOR_ATTR_CSI_DATA_Q,
-	MTK_VENDOR_ATTR_CSI_DATA_INFO,
-	MTK_VENDOR_ATTR_CSI_DATA_RSVD1,
-	MTK_VENDOR_ATTR_CSI_DATA_RSVD2,
-	MTK_VENDOR_ATTR_CSI_DATA_RSVD3,
-	MTK_VENDOR_ATTR_CSI_DATA_RSVD4,
-	MTK_VENDOR_ATTR_CSI_DATA_TX_ANT,
-	MTK_VENDOR_ATTR_CSI_DATA_RX_ANT,
-	MTK_VENDOR_ATTR_CSI_DATA_MODE,
-	MTK_VENDOR_ATTR_CSI_DATA_H_IDX,
-
-	/* keep last */
-	NUM_MTK_VENDOR_ATTRS_CSI_DATA,
-	MTK_VENDOR_ATTR_CSI_DATA_MAX =
-		NUM_MTK_VENDOR_ATTRS_CSI_DATA - 1
-};
-
-enum mtk_vendor_attr_mnt_ctrl {
-	MTK_VENDOR_ATTR_AMNT_CTRL_UNSPEC,
-
-	MTK_VENDOR_ATTR_AMNT_CTRL_SET,
-	MTK_VENDOR_ATTR_AMNT_CTRL_DUMP,
-	/* keep last */
-	NUM_MTK_VENDOR_ATTRS_AMNT_CTRL,
-	MTK_VENDOR_ATTR_AMNT_CTRL_MAX =
-		NUM_MTK_VENDOR_ATTRS_AMNT_CTRL - 1
-};
-
-enum mtk_vendor_attr_mnt_set {
-	MTK_VENDOR_ATTR_AMNT_SET_UNSPEC,
-
-	MTK_VENDOR_ATTR_AMNT_SET_INDEX,
-	MTK_VENDOR_ATTR_AMNT_SET_MACADDR,
-
-	/* keep last */
-	NUM_MTK_VENDOR_ATTRS_AMNT_SET,
-	MTK_VENDOR_ATTR_AMNT_SET_MAX =
-		NUM_MTK_VENDOR_ATTRS_AMNT_SET - 1
-};
-
-enum mtk_vendor_attr_mnt_dump {
-	MTK_VENDOR_ATTR_AMNT_DUMP_UNSPEC,
-
-	MTK_VENDOR_ATTR_AMNT_DUMP_INDEX,
-	MTK_VENDOR_ATTR_AMNT_DUMP_LEN,
-	MTK_VENDOR_ATTR_AMNT_DUMP_RESULT,
-
-	/* keep last */
-	NUM_MTK_VENDOR_ATTRS_AMNT_DUMP,
-	MTK_VENDOR_ATTR_AMNT_DUMP_MAX =
-		NUM_MTK_VENDOR_ATTRS_AMNT_DUMP - 1
-};
-
-enum mtk_vendor_attr_wireless_ctrl {
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_UNSPEC,
-
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_MCS,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_OFDMA,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_PPDU_TX_TYPE,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_NUSERS_OFDMA,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_AMPDU,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT,
-
-	/* keep last */
-	NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_MAX =
-		NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL - 1
-};
-
-enum mtk_vendor_attr_rfeature_ctrl {
-	MTK_VENDOR_ATTR_RFEATURE_CTRL_UNSPEC,
-
-	MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_GI,
-	MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_LTF,
-	MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_CFG,
-	MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_EN,
-	MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE,
-	MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY,
-
-	/* keep last */
-	NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL,
-	MTK_VENDOR_ATTR_RFEATURE_CTRL_MAX =
-		NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL - 1
-};
-
-#define CSI_MAX_COUNT 256
-#define ETH_ALEN 6
-
-struct csi_data {
-	s16 data_i[CSI_MAX_COUNT];
-	s16 data_q[CSI_MAX_COUNT];
-	s8 rssi;
-	u8 snr;
-	u32 ts;
-	u8 data_bw;
-	u8 pri_ch_idx;
-	u8 ta[ETH_ALEN];
-	u32 info;
-	u8 rx_mode;
-	u32 h_idx;
-	u16 tx_idx;
-	u16 rx_idx;
-};
-
-struct amnt_data {
-	u8 idx;
-	u8 addr[ETH_ALEN];
-	s8 rssi[4];
-	u32 last_seen;
-};
-
-extern struct unl unl;
-
-int mt76_csi_set(struct nl_msg *msg, int argc,
-	char **argv, void *ctx);
-int mt76_csi_dump(struct nl_msg *nlmsg, int argc,
-	char **argv, void *ctx);
-
-int mt76_amnt_set(struct nl_msg *msg, int argc,
-	char **argv, void *ctx);
-int mt76_amnt_dump(struct nl_msg *msg, int argc,
-	char **argv, void *ctx);
-
-int mt76_ap_rfeatures_set(struct nl_msg *msg, int argc,
-	char **argv, void *ctx);
-int mt76_ap_wireless_set(struct nl_msg *msg, int argc,
-	char **argv, void *ctx);
-
-int handle_set_command(struct nl_msg *msg, int argc,
-	char **argv, void *ctx);
-
-#endif
diff --git a/feed/mwctl/src/mwctl.h b/feed/mwctl/src/mwctl.h
deleted file mode 100755
index 15bf92e..0000000
--- a/feed/mwctl/src/mwctl.h
+++ /dev/null
@@ -1,112 +0,0 @@
-#ifndef __WM_H

-#define __WM_H

-

-#include <stdbool.h>

-#include <netlink/netlink.h>

-#include <netlink/genl/genl.h>

-#include <netlink/genl/family.h>

-#include <netlink/genl/ctrl.h>

-#include <endian.h>

-

-enum command_identify_by {

-	CIB_NONE,

-	CIB_PHY,

-	CIB_NETDEV,

-	CIB_WDEV,

-};

-

-/* libnl 1.x compatibility code */

-#if !defined(CONFIG_LIBNL20) && !defined(CONFIG_LIBNL30)

-#  define nl_sock nl_handle

-#endif

-

-struct nl80211_state {

-	struct nl_sock *nl_sock;

-	int nl80211_id;

-};

-

-enum id_input {

-	II_NONE,

-	II_NETDEV,

-	II_PHY_NAME,

-	II_PHY_IDX,

-	II_WDEV,

-};

-

-struct cmd {

-	const char *name;

-	const char *args;

-	const char *help;

-	const enum mtk_nl80211_vendor_commands cmd;

-	int nl_msg_flags;

-	int hidden;

-	const enum command_identify_by idby;

-	/*

-	 * The handler should return a negative error code,

-	 * zero on success, 1 if the arguments were wrong.

-	 * Return 2 iff you provide the error message yourself.

-	 */

-	int (*handler)(struct nl_msg *msg, int argc, 

-					char **argv, void *ctx);

-	const struct cmd *(*selector)(int argc, char **argv);

-	const struct cmd *parent;

-};

-#ifndef ARRAY_SIZE

-#define ARRAY_SIZE(ar) (sizeof(ar)/sizeof(ar[0]))

-#endif

-#ifndef DIV_ROUND_UP

-#define DIV_ROUND_UP(x, y) (((x) + (y - 1)) / (y))

-#endif

-#define __COMMAND(_section, _symname, _name, _args, _nlcmd, _flags, _hidden, _idby, _handler, _help, _sel)\

-	static struct cmd						\

-	__cmd ## _ ## _symname ## _ ## _handler ## _ ## _nlcmd ## _ ## _idby ## _ ## _hidden = {\

-		.name = (_name),					\

-		.args = (_args),					\

-		.cmd = (_nlcmd),					\

-		.nl_msg_flags = (_flags),				\

-		.hidden = (_hidden),					\

-		.idby = (_idby),					\

-		.handler = (_handler),					\

-		.help = (_help),					\

-		.parent = _section,					\

-		.selector = (_sel),					\

-	};								\

-	static struct cmd *__cmd ## _ ## _symname ## _ ## _handler ## _ ## _nlcmd ## _ ## _idby ## _ ## _hidden ## _p \

-	__attribute__((used,section("__cmd"))) =			\

-	&__cmd ## _ ## _symname ## _ ## _handler ## _ ## _nlcmd ## _ ## _idby ## _ ## _hidden

-#define __ACMD(_section, _symname, _name, _args, _nlcmd, _flags, _hidden, _idby, _handler, _help, _sel, _alias)\

-	__COMMAND(_section, _symname, _name, _args, _nlcmd, _flags, _hidden, _idby, _handler, _help, _sel);\

-	static const struct cmd *_alias = &__cmd ## _ ## _symname ## _ ## _handler ## _ ## _nlcmd ## _ ## _idby ## _ ## _hidden

-#define COMMAND(section, name, args, cmd, flags, idby, handler, help)	\

-	__COMMAND(&(__section ## _ ## section), name, #name, args, cmd, flags, 0, idby, handler, help, NULL)

-#define COMMAND_ALIAS(section, name, args, cmd, flags, idby, handler, help, selector, alias)\

-	__ACMD(&(__section ## _ ## section), name, #name, args, cmd, flags, 0, idby, handler, help, selector, alias)

-#define HIDDEN(section, name, args, cmd, flags, idby, handler)		\

-	__COMMAND(&(__section ## _ ## section), name, #name, args, cmd, flags, 1, idby, handler, NULL, NULL)

-

-#define TOPLEVEL(_name, _args, _nlcmd, _flags, _idby, _handler, _help)	\

-	struct cmd __section ## _ ## _name = {				\

-		.name = (#_name),					\

-		.args = (_args),					\

-		.cmd = (_nlcmd),					\

-		.nl_msg_flags = (_flags),				\

-		.idby = (_idby),					\

-		.handler = (_handler),					\

-		.help = (_help),					\

-	 };								\

-	static struct cmd *__section ## _ ## _name ## _p		\

-	__attribute__((used,section("__cmd"))) = &__section ## _ ## _name

-

-#define SECTION(_name)							\

-	struct cmd __section ## _ ## _name = {				\

-		.name = (#_name),					\

-		.hidden = 1,						\

-	};								\

-	static struct cmd *__section ## _ ## _name ## _p		\

-	__attribute__((used,section("__cmd"))) = &__section ## _ ## _name

-

-#define DECLARE_SECTION(_name)						\

-	extern struct cmd __section ## _ ## _name;

-

-void register_handler(int (*handler)(struct nl_msg *, void *), void *data);

-#endif