1 /* SPDX-License-Identifier: ISC */ 2 /* Copyright (C) 2023 MediaTek Inc. */ 3 4 #ifndef __MT7925_H 5 #define __MT7925_H 6 7 #include "../mt792x.h" 8 #include "regs.h" 9 10 #define MT7925_BEACON_RATES_TBL 25 11 12 #define MT7925_TX_RING_SIZE 2048 13 #define MT7925_TX_MCU_RING_SIZE 256 14 #define MT7925_TX_FWDL_RING_SIZE 128 15 16 #define MT7925_RX_RING_SIZE 1536 17 #define MT7925_RX_MCU_RING_SIZE 512 18 19 #define MT7925_EEPROM_SIZE 3584 20 #define MT7925_TOKEN_SIZE 8192 21 22 #define MT7925_EEPROM_BLOCK_SIZE 16 23 24 #define MT7925_SKU_RATE_NUM 161 25 #define MT7925_SKU_MAX_DELTA_IDX MT7925_SKU_RATE_NUM 26 #define MT7925_SKU_TABLE_SIZE (MT7925_SKU_RATE_NUM + 1) 27 28 #define MCU_UNI_EVENT_ROC 0x27 29 30 enum { 31 UNI_ROC_ACQUIRE, 32 UNI_ROC_ABORT, 33 UNI_ROC_NUM 34 }; 35 36 enum mt7925_roc_req { 37 MT7925_ROC_REQ_JOIN, 38 MT7925_ROC_REQ_ROC, 39 MT7925_ROC_REQ_NUM 40 }; 41 42 enum { 43 UNI_EVENT_ROC_GRANT = 0, 44 UNI_EVENT_ROC_TAG_NUM 45 }; 46 47 struct mt7925_roc_grant_tlv { 48 __le16 tag; 49 __le16 len; 50 u8 bss_idx; 51 u8 tokenid; 52 u8 status; 53 u8 primarychannel; 54 u8 rfsco; 55 u8 rfband; 56 u8 channelwidth; 57 u8 centerfreqseg1; 58 u8 centerfreqseg2; 59 u8 reqtype; 60 u8 dbdcband; 61 u8 rsv[1]; 62 __le32 max_interval; 63 } __packed; 64 65 struct mt7925_beacon_loss_tlv { 66 __le16 tag; 67 __le16 len; 68 u8 reason; 69 u8 nr_btolink; 70 u8 pad[2]; 71 } __packed; 72 73 struct mt7925_uni_beacon_loss_event { 74 struct { 75 u8 bss_idx; 76 u8 pad[3]; 77 } __packed hdr; 78 struct mt7925_beacon_loss_tlv beacon_loss; 79 } __packed; 80 81 #define to_rssi(field, rxv) ((FIELD_GET(field, rxv) - 220) / 2) 82 #define to_rcpi(rssi) (2 * (rssi) + 220) 83 84 enum mt7925_txq_id { 85 MT7925_TXQ_BAND0, 86 MT7925_TXQ_BAND1, 87 MT7925_TXQ_MCU_WM = 15, 88 MT7925_TXQ_FWDL, 89 }; 90 91 enum mt7925_rxq_id { 92 MT7925_RXQ_BAND0 = 2, 93 MT7925_RXQ_BAND1, 94 MT7925_RXQ_MCU_WM = 0, 95 MT7925_RXQ_MCU_WM2, /* for tx done */ 96 }; 97 98 enum { 99 MODE_OPEN = 0, 100 MODE_SHARED = 1, 101 MODE_WPA = 3, 102 MODE_WPA_PSK = 4, 103 MODE_WPA_NONE = 5, 104 MODE_WPA2 = 6, 105 MODE_WPA2_PSK = 7, 106 MODE_WPA3_SAE = 11, 107 }; 108 109 enum { 110 MT7925_CLC_POWER, 111 MT7925_CLC_CHAN, 112 MT7925_CLC_MAX_NUM, 113 }; 114 115 struct mt7925_clc_rule { 116 u8 alpha2[2]; 117 u8 type[2]; 118 u8 seg_idx; 119 u8 rsv[3]; 120 } __packed; 121 122 struct mt7925_clc_segment { 123 u8 idx; 124 u8 rsv1[3]; 125 u32 offset; 126 u32 len; 127 u8 rsv2[4]; 128 } __packed; 129 130 struct mt7925_clc { 131 __le32 len; 132 u8 idx; 133 u8 ver; 134 u8 nr_country; 135 u8 type; 136 u8 nr_seg; 137 u8 rsv[7]; 138 u8 data[]; 139 } __packed; 140 141 enum mt7925_eeprom_field { 142 MT_EE_CHIP_ID = 0x000, 143 MT_EE_VERSION = 0x002, 144 MT_EE_MAC_ADDR = 0x004, 145 __MT_EE_MAX = 0x9ff 146 }; 147 148 enum { 149 TXPWR_USER, 150 TXPWR_EEPROM, 151 TXPWR_MAC, 152 TXPWR_MAX_NUM, 153 }; 154 155 struct mt7925_txpwr { 156 s8 cck[4][2]; 157 s8 ofdm[8][2]; 158 s8 ht20[8][2]; 159 s8 ht40[9][2]; 160 s8 vht20[12][2]; 161 s8 vht40[12][2]; 162 s8 vht80[12][2]; 163 s8 vht160[12][2]; 164 s8 he26[12][2]; 165 s8 he52[12][2]; 166 s8 he106[12][2]; 167 s8 he242[12][2]; 168 s8 he484[12][2]; 169 s8 he996[12][2]; 170 s8 he996x2[12][2]; 171 s8 eht26[16][2]; 172 s8 eht52[16][2]; 173 s8 eht106[16][2]; 174 s8 eht242[16][2]; 175 s8 eht484[16][2]; 176 s8 eht996[16][2]; 177 s8 eht996x2[16][2]; 178 s8 eht996x4[16][2]; 179 s8 eht26_52[16][2]; 180 s8 eht26_106[16][2]; 181 s8 eht484_242[16][2]; 182 s8 eht996_484[16][2]; 183 s8 eht996_484_242[16][2]; 184 s8 eht996x2_484[16][2]; 185 s8 eht996x3[16][2]; 186 s8 eht996x3_484[16][2]; 187 }; 188 189 extern const struct ieee80211_ops mt7925_ops; 190 191 int __mt7925_start(struct mt792x_phy *phy); 192 int mt7925_register_device(struct mt792x_dev *dev); 193 void mt7925_unregister_device(struct mt792x_dev *dev); 194 int mt7925_run_firmware(struct mt792x_dev *dev); 195 int mt7925_mcu_set_bss_pm(struct mt792x_dev *dev, struct ieee80211_vif *vif, 196 bool enable); 197 int mt7925_mcu_sta_update(struct mt792x_dev *dev, struct ieee80211_sta *sta, 198 struct ieee80211_vif *vif, bool enable, 199 enum mt76_sta_info_state state); 200 int mt7925_mcu_set_chan_info(struct mt792x_phy *phy, u16 tag); 201 int mt7925_mcu_set_tx(struct mt792x_dev *dev, struct ieee80211_vif *vif); 202 int mt7925_mcu_set_eeprom(struct mt792x_dev *dev); 203 int mt7925_mcu_get_rx_rate(struct mt792x_phy *phy, struct ieee80211_vif *vif, 204 struct ieee80211_sta *sta, struct rate_info *rate); 205 int mt7925_mcu_fw_log_2_host(struct mt792x_dev *dev, u8 ctrl); 206 void mt7925_mcu_rx_event(struct mt792x_dev *dev, struct sk_buff *skb); 207 int mt7925_mcu_chip_config(struct mt792x_dev *dev, const char *cmd); 208 int mt7925_mcu_set_rxfilter(struct mt792x_dev *dev, u32 fif, 209 u8 bit_op, u32 bit_map); 210 211 int mt7925_mac_init(struct mt792x_dev *dev); 212 int mt7925_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif, 213 struct ieee80211_sta *sta); 214 bool mt7925_mac_wtbl_update(struct mt792x_dev *dev, int idx, u32 mask); 215 void mt7925_mac_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif, 216 struct ieee80211_sta *sta); 217 void mt7925_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, 218 struct ieee80211_sta *sta); 219 void mt7925_mac_reset_work(struct work_struct *work); 220 int mt7925e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, 221 enum mt76_txq_id qid, struct mt76_wcid *wcid, 222 struct ieee80211_sta *sta, 223 struct mt76_tx_info *tx_info); 224 225 void mt7925_tx_token_put(struct mt792x_dev *dev); 226 bool mt7925_rx_check(struct mt76_dev *mdev, void *data, int len); 227 void mt7925_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q, 228 struct sk_buff *skb, u32 *info); 229 void mt7925_stats_work(struct work_struct *work); 230 void mt7925_set_stream_he_eht_caps(struct mt792x_phy *phy); 231 int mt7925_init_debugfs(struct mt792x_dev *dev); 232 233 int mt7925_mcu_set_beacon_filter(struct mt792x_dev *dev, 234 struct ieee80211_vif *vif, 235 bool enable); 236 int mt7925_mcu_uni_tx_ba(struct mt792x_dev *dev, 237 struct ieee80211_ampdu_params *params, 238 bool enable); 239 int mt7925_mcu_uni_rx_ba(struct mt792x_dev *dev, 240 struct ieee80211_ampdu_params *params, 241 bool enable); 242 void mt7925_scan_work(struct work_struct *work); 243 void mt7925_roc_work(struct work_struct *work); 244 int mt7925_mcu_uni_bss_ps(struct mt792x_dev *dev, struct ieee80211_vif *vif); 245 void mt7925_coredump_work(struct work_struct *work); 246 int mt7925_get_txpwr_info(struct mt792x_dev *dev, u8 band_idx, 247 struct mt7925_txpwr *txpwr); 248 void mt7925_mac_set_fixed_rate_table(struct mt792x_dev *dev, 249 u8 tbl_idx, u16 rate_idx); 250 void mt7925_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi, 251 struct sk_buff *skb, struct mt76_wcid *wcid, 252 struct ieee80211_key_conf *key, int pid, 253 enum mt76_txq_id qid, u32 changed); 254 void mt7925_txwi_free(struct mt792x_dev *dev, struct mt76_txwi_cache *t, 255 struct ieee80211_sta *sta, bool clear_status, 256 struct list_head *free_list); 257 int mt7925_mcu_parse_response(struct mt76_dev *mdev, int cmd, 258 struct sk_buff *skb, int seq); 259 260 int mt7925e_mac_reset(struct mt792x_dev *dev); 261 int mt7925e_mcu_init(struct mt792x_dev *dev); 262 void mt7925_mac_add_txs(struct mt792x_dev *dev, void *data); 263 void mt7925_set_runtime_pm(struct mt792x_dev *dev); 264 void mt7925_mcu_set_suspend_iter(void *priv, u8 *mac, 265 struct ieee80211_vif *vif); 266 void mt7925_connac_mcu_set_suspend_iter(void *priv, u8 *mac, 267 struct ieee80211_vif *vif); 268 void mt7925_set_ipv6_ns_work(struct work_struct *work); 269 270 int mt7925_mcu_set_sniffer(struct mt792x_dev *dev, struct ieee80211_vif *vif, 271 bool enable); 272 int mt7925_mcu_config_sniffer(struct mt792x_vif *vif, 273 struct ieee80211_chanctx_conf *ctx); 274 int mt7925_mcu_get_temperature(struct mt792x_phy *phy); 275 276 int mt7925_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, 277 enum mt76_txq_id qid, struct mt76_wcid *wcid, 278 struct ieee80211_sta *sta, 279 struct mt76_tx_info *tx_info); 280 void mt7925_usb_sdio_tx_complete_skb(struct mt76_dev *mdev, 281 struct mt76_queue_entry *e); 282 bool mt7925_usb_sdio_tx_status_data(struct mt76_dev *mdev, u8 *update); 283 284 int mt7925_mcu_uni_add_beacon_offload(struct mt792x_dev *dev, 285 struct ieee80211_hw *hw, 286 struct ieee80211_vif *vif, 287 bool enable); 288 int mt7925_set_tx_sar_pwr(struct ieee80211_hw *hw, 289 const struct cfg80211_sar_specs *sar); 290 291 int mt7925_mcu_regval(struct mt792x_dev *dev, u32 regidx, u32 *val, bool set); 292 int mt7925_mcu_set_clc(struct mt792x_dev *dev, u8 *alpha2, 293 enum environment_cap env_cap); 294 int mt7925_mcu_set_roc(struct mt792x_phy *phy, struct mt792x_vif *vif, 295 struct ieee80211_channel *chan, int duration, 296 enum mt7925_roc_req type, u8 token_id); 297 int mt7925_mcu_abort_roc(struct mt792x_phy *phy, struct mt792x_vif *vif, 298 u8 token_id); 299 int mt7925_mcu_fill_message(struct mt76_dev *mdev, struct sk_buff *skb, 300 int cmd, int *wait_seq); 301 int mt7925_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif, 302 struct mt76_connac_sta_key_conf *sta_key_conf, 303 struct ieee80211_key_conf *key, int mcu_cmd, 304 struct mt76_wcid *wcid, enum set_key_cmd cmd); 305 int mt7925_mcu_set_rts_thresh(struct mt792x_phy *phy, u32 val); 306 int mt7925_mcu_wtbl_update_hdr_trans(struct mt792x_dev *dev, 307 struct ieee80211_vif *vif, 308 struct ieee80211_sta *sta); 309 310 #endif 311