diff --git a/feed/mt76-vendor/src/csi.c b/feed/mt76-vendor/src/csi.c
index d99eb58..ca7732e 100644
--- a/feed/mt76-vendor/src/csi.c
+++ b/feed/mt76-vendor/src/csi.c
@@ -14,6 +14,7 @@
 	[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_STA_INTERVAL] = { .type = NLA_U32 },
 	[MTK_VENDOR_ATTR_CSI_CTRL_DUMP_NUM] = { .type = NLA_U16 },
 	[MTK_VENDOR_ATTR_CSI_CTRL_DATA] = { .type = NLA_NESTED },
 };
@@ -26,13 +27,14 @@
 	[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_NUM] = { .type = NLA_U32 },
 	[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 },
+	[MTK_VENDOR_ATTR_CSI_DATA_CHAIN_INFO] = { .type = NLA_U32 },
 };
 
 static int mt76_csi_dump_cb(struct nl_msg *msg, void *arg)
@@ -71,7 +73,7 @@
 	      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])) {
+	      tb_data[MTK_VENDOR_ATTR_CSI_DATA_CHAIN_INFO])) {
 		fprintf(stderr, "Attributes error for CSI data\n");
 		return NL_SKIP;
 	}
@@ -85,11 +87,13 @@
 	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->ext_info = nla_get_u32(tb_data[MTK_VENDOR_ATTR_CSI_DATA_INFO]);
+	c->chain_info = nla_get_u32(tb_data[MTK_VENDOR_ATTR_CSI_DATA_CHAIN_INFO]);
 
 	c->ts = nla_get_u32(tb_data[MTK_VENDOR_ATTR_CSI_DATA_TS]);
 
+	c->data_num = nla_get_u32(tb_data[MTK_VENDOR_ATTR_CSI_DATA_NUM]);
+
 	idx = 0;
 	nla_for_each_nested(cur, tb_data[MTK_VENDOR_ATTR_CSI_DATA_TA], rem) {
 		if (idx < ETH_ALEN)
@@ -98,13 +102,13 @@
 
 	idx = 0;
 	nla_for_each_nested(cur, tb_data[MTK_VENDOR_ATTR_CSI_DATA_I], rem) {
-		if (idx < CSI_MAX_COUNT)
+		if (idx < c->data_num)
 			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)
+		if (idx < c->data_num)
 			c->data_q[idx++] = nla_get_u16(cur);
 	}
 
@@ -152,21 +156,21 @@
 		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, "%d,", c->chain_info);
+		pos += snprintf(pos, MAX_BUF_SIZE, "%d,", c->ext_info);
 
 		pos += snprintf(pos, MAX_BUF_SIZE, "%c", '[');
-		for (j = 0; j < 256; j++) {
+		for (j = 0; j < c->data_num; j++) {
 			pos += snprintf(pos, MAX_BUF_SIZE, "%d", c->data_i[j]);
-			if (j != 255)
+			if (j != (c->data_num - 1))
 				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++) {
+		for (j = 0; j < c->data_num; j++) {
 			pos += snprintf(pos, MAX_BUF_SIZE, "%d", c->data_q[j]);
-			if (j != 255)
+			if (j != (c->data_num - 1))
 				pos += snprintf(pos, MAX_BUF_SIZE, ",");
 		}
 		pos += snprintf(pos, MAX_BUF_SIZE, "%c", ']');
@@ -241,6 +245,7 @@
 			fprintf(stderr, "nl80211 call failed: %s\n", strerror(-ret));
 
 		unl_free(&unl);
+
 	}
 
 	mt76_csi_to_json(argv[1]);
@@ -278,7 +283,7 @@
 
 		free(s2);
 
-		if (argc == 2 &&
+		if ((argc == 2 || argc == 3) &&
 		!strncmp(argv[1], "mac_addr", strlen("mac_addr"))) {
 			u8 a[ETH_ALEN];
 			int matches, i;
@@ -303,6 +308,24 @@
 
 			nla_nest_end(msg, data);
 		}
+
+		if (argc == 3 &&
+		!strncmp(argv[2], "sta_interval", strlen("sta_interval"))) {
+			u32 sta_interval = 0;
+
+			val = strchr(argv[2], '=');
+
+			*(val++) = 0;
+
+			if (!val)
+				return -EINVAL;
+
+			sta_interval = strtoul(val, NULL, 0);
+
+			nla_put_u32(msg, MTK_VENDOR_ATTR_CSI_CTRL_STA_INTERVAL, sta_interval);
+
+		}
+
 	} else if (!strncmp(argv[0], "interval", 8)) {
 		u32 interval = strtoul(val, NULL, 0);
 
diff --git a/feed/mt76-vendor/src/mt76-vendor.h b/feed/mt76-vendor/src/mt76-vendor.h
index 61b0426..b591575 100644
--- a/feed/mt76-vendor/src/mt76-vendor.h
+++ b/feed/mt76-vendor/src/mt76-vendor.h
@@ -52,6 +52,7 @@
 	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_STA_INTERVAL,
 
 	MTK_VENDOR_ATTR_CSI_CTRL_DUMP_NUM,
 
@@ -74,6 +75,7 @@
 	MTK_VENDOR_ATTR_CSI_DATA_BW,
 	MTK_VENDOR_ATTR_CSI_DATA_CH_IDX,
 	MTK_VENDOR_ATTR_CSI_DATA_TA,
+	MTK_VENDOR_ATTR_CSI_DATA_NUM,
 	MTK_VENDOR_ATTR_CSI_DATA_I,
 	MTK_VENDOR_ATTR_CSI_DATA_Q,
 	MTK_VENDOR_ATTR_CSI_DATA_INFO,
@@ -84,7 +86,7 @@
 	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,
+	MTK_VENDOR_ATTR_CSI_DATA_CHAIN_INFO,
 
 	/* keep last */
 	NUM_MTK_VENDOR_ATTRS_CSI_DATA,
@@ -199,23 +201,33 @@
 		NUM_MTK_VENDOR_ATTRS_PHY_CAPA_DUMP - 1
 };
 
-#define CSI_MAX_COUNT 256
+#define CSI_BW20_DATA_COUNT	64
+#define CSI_BW40_DATA_COUNT	128
+#define CSI_BW80_DATA_COUNT	256
+#define CSI_BW160_DATA_COUNT	512
 #define ETH_ALEN 6
 
 struct csi_data {
-	s16 data_i[CSI_MAX_COUNT];
-	s16 data_q[CSI_MAX_COUNT];
+	u8 ch_bw;
+	u16 data_num;
+	s16 data_i[CSI_BW160_DATA_COUNT];
+	s16 data_q[CSI_BW160_DATA_COUNT];
+	u8 band;
 	s8 rssi;
 	u8 snr;
 	u32 ts;
 	u8 data_bw;
 	u8 pri_ch_idx;
 	u8 ta[ETH_ALEN];
-	u32 info;
+	u32 ext_info;
 	u8 rx_mode;
-	u32 h_idx;
+	u32 chain_info;
 	u16 tx_idx;
 	u16 rx_idx;
+	u32 segment_num;
+	u8 remain_last;
+	u16 pkt_sn;
+	u8 tr_stream;
 };
 
 struct amnt_data {
