18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: ISC */ 28c2ecf20Sopenharmony_ci/* Copyright (C) 2020 MediaTek Inc. */ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#ifndef __MT7915_EEPROM_H 58c2ecf20Sopenharmony_ci#define __MT7915_EEPROM_H 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include "mt7915.h" 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_cistruct cal_data { 108c2ecf20Sopenharmony_ci u8 count; 118c2ecf20Sopenharmony_ci u16 offset[60]; 128c2ecf20Sopenharmony_ci}; 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_cienum mt7915_eeprom_field { 158c2ecf20Sopenharmony_ci MT_EE_CHIP_ID = 0x000, 168c2ecf20Sopenharmony_ci MT_EE_VERSION = 0x002, 178c2ecf20Sopenharmony_ci MT_EE_MAC_ADDR = 0x004, 188c2ecf20Sopenharmony_ci MT_EE_DDIE_FT_VERSION = 0x050, 198c2ecf20Sopenharmony_ci MT_EE_WIFI_CONF = 0x190, 208c2ecf20Sopenharmony_ci MT_EE_TX0_POWER_2G = 0x2fc, 218c2ecf20Sopenharmony_ci MT_EE_TX0_POWER_5G = 0x34b, 228c2ecf20Sopenharmony_ci MT_EE_ADIE_FT_VERSION = 0x9a0, 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci __MT_EE_MAX = 0xe00 258c2ecf20Sopenharmony_ci}; 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci#define MT_EE_WIFI_CONF_TX_MASK GENMASK(2, 0) 288c2ecf20Sopenharmony_ci#define MT_EE_WIFI_CONF_BAND_SEL GENMASK(7, 6) 298c2ecf20Sopenharmony_ci#define MT_EE_WIFI_CONF_TSSI0_2G BIT(0) 308c2ecf20Sopenharmony_ci#define MT_EE_WIFI_CONF_TSSI0_5G BIT(2) 318c2ecf20Sopenharmony_ci#define MT_EE_WIFI_CONF_TSSI1_5G BIT(4) 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cienum mt7915_eeprom_band { 348c2ecf20Sopenharmony_ci MT_EE_DUAL_BAND, 358c2ecf20Sopenharmony_ci MT_EE_5GHZ, 368c2ecf20Sopenharmony_ci MT_EE_2GHZ, 378c2ecf20Sopenharmony_ci MT_EE_DBDC, 388c2ecf20Sopenharmony_ci}; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci#define SKU_DELTA_VAL GENMASK(5, 0) 418c2ecf20Sopenharmony_ci#define SKU_DELTA_ADD BIT(6) 428c2ecf20Sopenharmony_ci#define SKU_DELTA_EN BIT(7) 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_cienum mt7915_sku_delta_group { 458c2ecf20Sopenharmony_ci SKU_CCK_GROUP0, 468c2ecf20Sopenharmony_ci SKU_CCK_GROUP1, 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci SKU_OFDM_GROUP0 = 0, 498c2ecf20Sopenharmony_ci SKU_OFDM_GROUP1, 508c2ecf20Sopenharmony_ci SKU_OFDM_GROUP2, 518c2ecf20Sopenharmony_ci SKU_OFDM_GROUP3, 528c2ecf20Sopenharmony_ci SKU_OFDM_GROUP4, 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci SKU_MCS_GROUP0 = 0, 558c2ecf20Sopenharmony_ci SKU_MCS_GROUP1, 568c2ecf20Sopenharmony_ci SKU_MCS_GROUP2, 578c2ecf20Sopenharmony_ci SKU_MCS_GROUP3, 588c2ecf20Sopenharmony_ci SKU_MCS_GROUP4, 598c2ecf20Sopenharmony_ci SKU_MCS_GROUP5, 608c2ecf20Sopenharmony_ci SKU_MCS_GROUP6, 618c2ecf20Sopenharmony_ci SKU_MCS_GROUP7, 628c2ecf20Sopenharmony_ci SKU_MCS_GROUP8, 638c2ecf20Sopenharmony_ci SKU_MCS_GROUP9, 648c2ecf20Sopenharmony_ci}; 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_cienum mt7915_sku_rate_group { 678c2ecf20Sopenharmony_ci SKU_CCK, 688c2ecf20Sopenharmony_ci SKU_OFDM, 698c2ecf20Sopenharmony_ci SKU_HT_BW20, 708c2ecf20Sopenharmony_ci SKU_HT_BW40, 718c2ecf20Sopenharmony_ci SKU_VHT_BW20, 728c2ecf20Sopenharmony_ci SKU_VHT_BW40, 738c2ecf20Sopenharmony_ci SKU_VHT_BW80, 748c2ecf20Sopenharmony_ci SKU_VHT_BW160, 758c2ecf20Sopenharmony_ci SKU_HE_RU26, 768c2ecf20Sopenharmony_ci SKU_HE_RU52, 778c2ecf20Sopenharmony_ci SKU_HE_RU106, 788c2ecf20Sopenharmony_ci SKU_HE_RU242, 798c2ecf20Sopenharmony_ci SKU_HE_RU484, 808c2ecf20Sopenharmony_ci SKU_HE_RU996, 818c2ecf20Sopenharmony_ci SKU_HE_RU2x996, 828c2ecf20Sopenharmony_ci MAX_SKU_RATE_GROUP_NUM, 838c2ecf20Sopenharmony_ci}; 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_cistruct sku_group { 868c2ecf20Sopenharmony_ci u8 len; 878c2ecf20Sopenharmony_ci u16 offset[2]; 888c2ecf20Sopenharmony_ci const u8 *delta_map; 898c2ecf20Sopenharmony_ci}; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_cistatic inline int 928c2ecf20Sopenharmony_cimt7915_get_channel_group(int channel) 938c2ecf20Sopenharmony_ci{ 948c2ecf20Sopenharmony_ci if (channel >= 184 && channel <= 196) 958c2ecf20Sopenharmony_ci return 0; 968c2ecf20Sopenharmony_ci if (channel <= 48) 978c2ecf20Sopenharmony_ci return 1; 988c2ecf20Sopenharmony_ci if (channel <= 64) 998c2ecf20Sopenharmony_ci return 2; 1008c2ecf20Sopenharmony_ci if (channel <= 96) 1018c2ecf20Sopenharmony_ci return 3; 1028c2ecf20Sopenharmony_ci if (channel <= 112) 1038c2ecf20Sopenharmony_ci return 4; 1048c2ecf20Sopenharmony_ci if (channel <= 128) 1058c2ecf20Sopenharmony_ci return 5; 1068c2ecf20Sopenharmony_ci if (channel <= 144) 1078c2ecf20Sopenharmony_ci return 6; 1088c2ecf20Sopenharmony_ci return 7; 1098c2ecf20Sopenharmony_ci} 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_cistatic inline bool 1128c2ecf20Sopenharmony_cimt7915_tssi_enabled(struct mt7915_dev *dev, enum nl80211_band band) 1138c2ecf20Sopenharmony_ci{ 1148c2ecf20Sopenharmony_ci u8 *eep = dev->mt76.eeprom.data; 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci /* TODO: DBDC */ 1178c2ecf20Sopenharmony_ci if (band == NL80211_BAND_5GHZ) 1188c2ecf20Sopenharmony_ci return eep[MT_EE_WIFI_CONF + 7] & MT_EE_WIFI_CONF_TSSI0_5G; 1198c2ecf20Sopenharmony_ci else 1208c2ecf20Sopenharmony_ci return eep[MT_EE_WIFI_CONF + 7] & MT_EE_WIFI_CONF_TSSI0_2G; 1218c2ecf20Sopenharmony_ci} 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ciextern const struct sku_group mt7915_sku_groups[]; 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ci#endif 126