| // 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_nl80211_vendor_subcmds { |
| MTK_NL80211_VENDOR_SUBCMD_AMNT_CTRL = 0xae, |
| MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL = 0xc2, |
| MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL = 0xc3, |
| MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL = 0xc4, |
| MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5, |
| MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL = 0xc6, |
| }; |
| |
| 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_STA_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_NUM, |
| 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_CHAIN_INFO, |
| |
| /* 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, |
| MTK_VENDOR_ATTR_WIRELESS_CTRL_RTS_SIGTA, |
| |
| /* 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_mu_ctrl { |
| MTK_VENDOR_ATTR_MU_CTRL_UNSPEC, |
| |
| MTK_VENDOR_ATTR_MU_CTRL_ONOFF, |
| |
| /* keep last */ |
| NUM_MTK_VENDOR_ATTRS_MU_CTRL, |
| MTK_VENDOR_ATTR_MU_CTRL_MAX = |
| NUM_MTK_VENDOR_ATTRS_MU_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 |
| }; |
| |
| 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 |
| }; |
| |
| #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 { |
| 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 ext_info; |
| u8 rx_mode; |
| u32 chain_info; |
| u16 tx_idx; |
| u16 rx_idx; |
| u32 segment_num; |
| u8 remain_last; |
| u16 pkt_sn; |
| u8 tr_stream; |
| }; |
| |
| struct amnt_data { |
| u8 idx; |
| u8 addr[ETH_ALEN]; |
| s8 rssi[4]; |
| u32 last_seen; |
| }; |
| |
| extern struct unl unl; |
| |
| int mt76_csi_set(int idx, int argc, char **argv); |
| int mt76_csi_dump(int idx, int argc, char **argv); |
| |
| int mt76_amnt_set(int idx, int argc, char **argv); |
| int mt76_amnt_dump(int idx, int argc, char **argv); |
| |
| int mt76_ap_rfeatures_set(int idx, int argc, char **argv); |
| int mt76_ap_wireless_set(int idx, int argc, char **argv); |
| |
| int mt76_mu_onoff_set(int idx, int argc, char **argv); |
| |
| int mt76_phy_capa_dump(int idx, int argc, char **argv); |
| #endif |