1 /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 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_FILTER_FCSFAIL BIT(2) 11 #define MT7925_FILTER_CONTROL BIT(5) 12 #define MT7925_FILTER_OTHER_BSS BIT(6) 13 #define MT7925_FILTER_ENABLE BIT(31) 14 15 #define MT7925_BEACON_RATES_TBL 25 16 17 #define MT7925_TX_RING_SIZE 2048 18 #define MT7925_TX_MCU_RING_SIZE 256 19 #define MT7925_TX_FWDL_RING_SIZE 128 20 21 #define MT7925_RX_RING_SIZE 1536 22 #define MT7925_RX_MCU_RING_SIZE 512 23 #define MT7928_RX_MCU_WA_RING_SIZE 512 24 25 #define MT7925_EEPROM_SIZE 3584 26 #define MT7925_TOKEN_SIZE 8192 27 28 #define MT7925_EEPROM_BLOCK_SIZE 16 29 30 #define MT7925_SKU_RATE_NUM 161 31 #define MT7925_SKU_MAX_DELTA_IDX MT7925_SKU_RATE_NUM 32 #define MT7925_SKU_TABLE_SIZE (MT7925_SKU_RATE_NUM + 1) 33 34 #define MCU_UNI_EVENT_ROC 0x27 35 36 #define HIF_TRAFFIC_IDLE 0x2 37 38 enum { 39 UNI_EVENT_HIF_CTRL_BASIC = 0, 40 UNI_EVENT_HIF_CTRL_TAG_NUM 41 }; 42 43 struct mt7925_mcu_hif_ctrl_basic_tlv { 44 __le16 tag; 45 __le16 len; 46 u8 cid; 47 u8 pad[3]; 48 u32 status; 49 u8 hif_type; 50 u8 hif_tx_traffic_status; 51 u8 hif_rx_traffic_status; 52 u8 hifsuspend; 53 u8 rsv[4]; 54 } __packed; 55 56 enum { 57 UNI_ROC_ACQUIRE, 58 UNI_ROC_ABORT, 59 UNI_ROC_SUB_LINK = 3, 60 UNI_ROC_NUM 61 }; 62 63 enum mt7925_roc_req { 64 MT7925_ROC_REQ_JOIN, 65 MT7925_ROC_REQ_ROC, 66 MT7925_ROC_REQ_SUB_LINK, 67 MT7925_ROC_REQ_MLSR_AG = 10, 68 MT7925_ROC_REQ_MLSR_AA, 69 MT7925_ROC_REQ_NUM 70 }; 71 72 enum { 73 UNI_EVENT_ROC_GRANT = 0, 74 UNI_EVENT_ROC_GRANT_SUB_LINK = 4, 75 UNI_EVENT_ROC_TAG_NUM 76 }; 77 78 struct mt7925_roc_grant_tlv { 79 __le16 tag; 80 __le16 len; 81 u8 bss_idx; 82 u8 tokenid; 83 u8 status; 84 u8 primarychannel; 85 u8 rfsco; 86 u8 rfband; 87 u8 channelwidth; 88 u8 centerfreqseg1; 89 u8 centerfreqseg2; 90 u8 reqtype; 91 u8 dbdcband; 92 u8 rsv[1]; 93 __le32 max_interval; 94 } __packed; 95 96 struct mt7925_beacon_loss_tlv { 97 __le16 tag; 98 __le16 len; 99 u8 reason; 100 u8 nr_btolink; 101 u8 pad[2]; 102 } __packed; 103 104 struct mt7925_uni_beacon_loss_event { 105 struct { 106 u8 bss_idx; 107 u8 pad[3]; 108 } __packed hdr; 109 struct mt7925_beacon_loss_tlv beacon_loss; 110 } __packed; 111 112 struct mt7925_uni_rssi_monitor_event { 113 __le16 tag; 114 __le16 len; 115 __le32 rssi; 116 } __packed; 117 118 #define to_rssi(field, rxv) ((FIELD_GET(field, rxv) - 220) / 2) 119 #define to_rcpi(rssi) (2 * (rssi) + 220) 120 121 enum mt7925_txq_id { 122 MT7925_TXQ_BAND0, 123 MT7925_TXQ_BAND1, 124 MT7925_TXQ_MCU_WM = 15, 125 MT7925_TXQ_FWDL, 126 }; 127 128 enum mt7925_rxq_id { 129 MT7925_RXQ_BAND0 = 2, 130 MT7925_RXQ_BAND1, 131 MT7925_RXQ_MCU_WM = 0, 132 MT7925_RXQ_MCU_WM2, /* for tx done */ 133 }; 134 135 enum mt7927_txq_id { 136 MT7927_TXQ_BAND0 = MT7925_TXQ_BAND0, 137 MT7927_TXQ_BAND1 = MT7925_TXQ_BAND1, 138 MT7927_TXQ_MCU_WM = MT7925_TXQ_MCU_WM, 139 MT7927_TXQ_FWDL = MT7925_TXQ_FWDL, 140 }; 141 142 enum mt7927_rxq_id { 143 MT7927_RXQ_BAND0 = 4, 144 MT7927_RXQ_MCU_WM = 6, 145 MT7927_RXQ_DATA2 = 7, 146 }; 147 148 enum mt7928_rxq_id { 149 MT7928_RXQ_BAND0, 150 MT7928_RXQ_BAND1 = 2, 151 MT7928_RXQ_MCU_WM = 3, 152 MT7928_RXQ_MCU_WM2 = 1, /* for tx done */ 153 }; 154 155 enum { 156 MODE_OPEN = 0, 157 MODE_SHARED = 1, 158 MODE_WPA = 3, 159 MODE_WPA_PSK = 4, 160 MODE_WPA_NONE = 5, 161 MODE_WPA2 = 6, 162 MODE_WPA2_PSK = 7, 163 MODE_WPA3_SAE = 11, 164 }; 165 166 enum { 167 MT7925_CLC_POWER, 168 MT7925_CLC_CHAN, 169 MT7925_CLC_MAX_NUM, 170 }; 171 172 struct mt7925_clc_rule_v2 { 173 u32 flag; 174 u8 alpha2[2]; 175 u8 rsv[10]; 176 } __packed; 177 178 struct mt7925_clc_rule { 179 u8 alpha2[2]; 180 u8 type[2]; 181 u8 seg_idx; 182 u8 flag; /* UNII4~8 ctrl flag */ 183 u8 rsv[2]; 184 } __packed; 185 186 struct mt7925_clc_segment { 187 u8 idx; 188 u8 rsv1[3]; 189 u32 offset; 190 u32 len; 191 u8 rsv2[4]; 192 } __packed; 193 194 struct mt7925_clc_type0 { 195 u8 nr_country; 196 u8 type; 197 u8 nr_seg; 198 u8 rsv[7]; 199 } __packed; 200 201 struct mt7925_clc_type2 { 202 u8 type; 203 u8 rsv[9]; 204 } __packed; 205 206 struct mt7925_clc { 207 __le32 len; 208 u8 idx; 209 u8 ver; 210 union { 211 struct mt7925_clc_type0 t0; 212 struct mt7925_clc_type2 t2; 213 }; 214 u8 data[]; 215 } __packed; 216 217 enum mt7925_eeprom_field { 218 MT_EE_CHIP_ID = 0x000, 219 MT_EE_VERSION = 0x002, 220 MT_EE_MAC_ADDR = 0x004, 221 MT_EE_HW_TYPE = 0xa71, 222 __MT_EE_MAX = 0x9ff 223 }; 224 225 #define MT_EE_HW_TYPE_ENCAP GENMASK(1, 0) 226 227 enum { 228 TXPWR_USER, 229 TXPWR_EEPROM, 230 TXPWR_MAC, 231 TXPWR_MAX_NUM, 232 }; 233 234 struct mt7925_txpwr { 235 s8 cck[4][2]; 236 s8 ofdm[8][2]; 237 s8 ht20[8][2]; 238 s8 ht40[9][2]; 239 s8 vht20[12][2]; 240 s8 vht40[12][2]; 241 s8 vht80[12][2]; 242 s8 vht160[12][2]; 243 s8 he26[12][2]; 244 s8 he52[12][2]; 245 s8 he106[12][2]; 246 s8 he242[12][2]; 247 s8 he484[12][2]; 248 s8 he996[12][2]; 249 s8 he996x2[12][2]; 250 s8 eht26[16][2]; 251 s8 eht52[16][2]; 252 s8 eht106[16][2]; 253 s8 eht242[16][2]; 254 s8 eht484[16][2]; 255 s8 eht996[16][2]; 256 s8 eht996x2[16][2]; 257 s8 eht996x4[16][2]; 258 s8 eht26_52[16][2]; 259 s8 eht26_106[16][2]; 260 s8 eht484_242[16][2]; 261 s8 eht996_484[16][2]; 262 s8 eht996_484_242[16][2]; 263 s8 eht996x2_484[16][2]; 264 s8 eht996x3[16][2]; 265 s8 eht996x3_484[16][2]; 266 }; 267 268 static inline u8 mt7927_band_idx(enum nl80211_band band) 269 { 270 switch (band) { 271 case NL80211_BAND_2GHZ: 272 return 0; 273 case NL80211_BAND_5GHZ: 274 case NL80211_BAND_6GHZ: 275 default: 276 return 1; 277 } 278 } 279 280 extern const struct ieee80211_ops mt7925_ops; 281 282 int __mt7925_start(struct mt792x_phy *phy); 283 int mt7925_register_device(struct mt792x_dev *dev); 284 void mt7925_unregister_device(struct mt792x_dev *dev); 285 int mt7925_run_firmware(struct mt792x_dev *dev); 286 int mt7925_mcu_set_bss_pm(struct mt792x_dev *dev, 287 struct ieee80211_bss_conf *link_conf, 288 bool enable); 289 int mt7925_mcu_sta_update(struct mt792x_dev *dev, 290 struct ieee80211_link_sta *link_sta, 291 struct ieee80211_vif *vif, 292 struct mt792x_link_sta *mlink, 293 bool enable, 294 enum mt76_sta_info_state state, 295 struct mt792x_link_sta *pending); 296 int mt7925_mcu_set_chan_info(struct mt792x_phy *phy, u16 tag); 297 int mt7925_mcu_set_tx(struct mt792x_dev *dev, struct ieee80211_bss_conf *bss_conf); 298 int mt7925_mcu_set_eeprom(struct mt792x_dev *dev); 299 int mt7925_mcu_get_rx_rate(struct mt792x_phy *phy, struct ieee80211_vif *vif, 300 struct ieee80211_sta *sta, struct rate_info *rate); 301 int mt7925_mcu_fw_log_2_host(struct mt792x_dev *dev, u8 ctrl); 302 void mt7925_mcu_rx_event(struct mt792x_dev *dev, struct sk_buff *skb); 303 int mt7925_mcu_chip_config(struct mt792x_dev *dev, const char *cmd); 304 int mt7925_mcu_set_rxfilter(struct mt792x_dev *dev, u32 fif, 305 u8 bit_op, u32 bit_map); 306 307 int mt7925_mac_init(struct mt792x_dev *dev); 308 int mt7925_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif, 309 struct ieee80211_sta *sta); 310 bool mt7925_mac_wtbl_update(struct mt792x_dev *dev, int idx, u32 mask); 311 int mt7925_mac_sta_event(struct mt76_dev *mdev, struct ieee80211_vif *vif, 312 struct ieee80211_sta *sta, enum mt76_sta_event ev); 313 void mt7925_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, 314 struct ieee80211_sta *sta); 315 void mt7925_mac_reset_work(struct work_struct *work); 316 int mt7925e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, 317 enum mt76_txq_id qid, struct mt76_wcid *wcid, 318 struct ieee80211_sta *sta, 319 struct mt76_tx_info *tx_info); 320 321 void mt7925_tx_token_put(struct mt792x_dev *dev); 322 bool mt7925_rx_check(struct mt76_dev *mdev, void *data, int len); 323 void mt7925_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q, 324 struct sk_buff *skb, u32 *info); 325 void mt7925_stats_work(struct work_struct *work); 326 void mt7925_set_stream_he_eht_caps(struct mt792x_phy *phy); 327 int mt7925_init_mlo_caps(struct mt792x_phy *phy); 328 int mt7925_init_debugfs(struct mt792x_dev *dev); 329 330 int mt7925_mcu_set_beacon_filter(struct mt792x_dev *dev, 331 struct ieee80211_vif *vif, 332 bool enable); 333 int mt7925_mcu_uni_tx_ba(struct mt792x_dev *dev, 334 struct ieee80211_ampdu_params *params, 335 struct ieee80211_vif *vif, bool enable); 336 int mt7925_mcu_uni_rx_ba(struct mt792x_dev *dev, 337 struct ieee80211_ampdu_params *params, 338 struct ieee80211_vif *vif, bool enable); 339 void mt7925_mlo_pm_work(struct work_struct *work); 340 void mt7925_scan_work(struct work_struct *work); 341 void mt7925_roc_work(struct work_struct *work); 342 void mt7925_csa_work(struct work_struct *work); 343 int mt7925_mcu_uni_bss_ps(struct mt792x_dev *dev, 344 struct ieee80211_bss_conf *link_conf); 345 void mt7925_coredump_work(struct work_struct *work); 346 int mt7925_get_txpwr_info(struct mt792x_dev *dev, u8 band_idx, 347 struct mt7925_txpwr *txpwr); 348 void mt7925_mac_set_fixed_rate_table(struct mt792x_dev *dev, 349 u8 tbl_idx, u16 rate_idx); 350 void mt7925_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi, 351 struct sk_buff *skb, struct mt76_wcid *wcid, 352 struct ieee80211_key_conf *key, int pid, 353 enum mt76_txq_id qid, u32 changed); 354 void mt7925_txwi_free(struct mt792x_dev *dev, struct mt76_txwi_cache *t, 355 struct ieee80211_sta *sta, struct mt76_wcid *wcid, 356 struct list_head *free_list); 357 int mt7925_mcu_parse_response(struct mt76_dev *mdev, int cmd, 358 struct sk_buff *skb, int seq); 359 360 int mt7925e_mac_reset(struct mt792x_dev *dev); 361 int mt7925e_mcu_init(struct mt792x_dev *dev); 362 void mt7925e_axidma_cal_cache_init(struct mt792x_dev *dev); 363 void mt7925_mac_add_txs(struct mt792x_dev *dev, void *data); 364 void mt7928_mac_add_txs_msg(struct mt792x_dev *dev, void *evt); 365 void mt7925_set_runtime_pm(struct mt792x_dev *dev); 366 void mt7925_mcu_set_suspend_iter(void *priv, u8 *mac, 367 struct ieee80211_vif *vif); 368 void mt7925_connac_mcu_set_suspend_iter(void *priv, u8 *mac, 369 struct ieee80211_vif *vif); 370 void mt7925_set_ipv6_ns_work(struct work_struct *work); 371 void mt7925_nan_deferred_work(struct work_struct *work); 372 373 int mt7925_mcu_set_sniffer(struct mt792x_dev *dev, struct ieee80211_vif *vif, 374 bool enable); 375 int mt7925_mcu_config_sniffer(struct mt792x_vif *vif, 376 struct ieee80211_chanctx_conf *ctx); 377 int mt7925_mcu_get_temperature(struct mt792x_phy *phy); 378 379 int mt7925_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, 380 enum mt76_txq_id qid, struct mt76_wcid *wcid, 381 struct ieee80211_sta *sta, 382 struct mt76_tx_info *tx_info); 383 void mt7925_usb_sdio_tx_complete_skb(struct mt76_dev *mdev, 384 struct mt76_queue_entry *e); 385 bool mt7925_usb_sdio_tx_status_data(struct mt76_dev *mdev, u8 *update); 386 387 int mt7925_mcu_uni_add_beacon_offload(struct mt792x_dev *dev, 388 struct ieee80211_hw *hw, 389 struct ieee80211_vif *vif, 390 bool enable); 391 int mt7925_set_tx_sar_pwr(struct ieee80211_hw *hw, 392 const struct cfg80211_sar_specs *sar); 393 394 int mt7925_mcu_regval(struct mt792x_dev *dev, u32 regidx, u32 *val, bool set); 395 int mt7925_mcu_set_clc(struct mt792x_dev *dev, u8 *alpha2, 396 enum environment_cap env_cap); 397 int mt7925_mcu_set_mlo_roc(struct mt792x_phy *phy, struct mt792x_bss_conf *mconf, 398 u16 sel_links, int duration, u8 token_id); 399 int mt7925_mcu_set_roc(struct mt792x_phy *phy, struct mt792x_bss_conf *mconf, 400 struct ieee80211_channel *chan, int duration, 401 enum mt7925_roc_req type, u8 token_id); 402 int mt7925_mcu_abort_roc(struct mt792x_phy *phy, struct mt792x_bss_conf *mconf, 403 u8 token_id); 404 void mt7925_roc_abort_sync(struct mt792x_dev *dev); 405 int mt7925_mcu_fill_message(struct mt76_dev *mdev, struct sk_buff *skb, 406 int cmd, int *wait_seq); 407 int mt7925_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif, 408 struct mt76_connac_sta_key_conf *sta_key_conf, 409 struct ieee80211_key_conf *key, int mcu_cmd, 410 struct mt76_wcid *wcid, enum set_key_cmd cmd, 411 struct mt792x_sta *msta); 412 int mt7925_mcu_set_rts_thresh(struct mt792x_phy *phy, u32 val); 413 int mt7925_mcu_wtbl_update_hdr_trans(struct mt792x_dev *dev, 414 struct ieee80211_vif *vif, 415 struct mt792x_bss_conf *mconf, 416 struct mt792x_link_sta *mlink); 417 int mt7925_mcu_wf_rf_pin_ctrl(struct mt792x_phy *phy); 418 419 int mt7925_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 420 void *data, int len); 421 int mt7925_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg, 422 struct netlink_callback *cb, void *data, int len); 423 424 int mt7925_mcu_set_rssimonitor(struct mt792x_dev *dev, struct ieee80211_vif *vif); 425 #endif 426