1e57b7901SRyder Lee /* SPDX-License-Identifier: ISC */ 2e57b7901SRyder Lee /* Copyright (C) 2020 MediaTek Inc. */ 3e57b7901SRyder Lee 4e57b7901SRyder Lee #ifndef __MT7915_EEPROM_H 5e57b7901SRyder Lee #define __MT7915_EEPROM_H 6e57b7901SRyder Lee 7e57b7901SRyder Lee #include "mt7915.h" 8e57b7901SRyder Lee 9e57b7901SRyder Lee struct cal_data { 10e57b7901SRyder Lee u8 count; 11e57b7901SRyder Lee u16 offset[60]; 12e57b7901SRyder Lee }; 13e57b7901SRyder Lee 14e57b7901SRyder Lee enum mt7915_eeprom_field { 15e57b7901SRyder Lee MT_EE_CHIP_ID = 0x000, 16e57b7901SRyder Lee MT_EE_VERSION = 0x002, 17e57b7901SRyder Lee MT_EE_MAC_ADDR = 0x004, 184c430774SLorenzo Bianconi MT_EE_MAC_ADDR2 = 0x00a, 19e57b7901SRyder Lee MT_EE_DDIE_FT_VERSION = 0x050, 20e57b7901SRyder Lee MT_EE_WIFI_CONF = 0x190, 21e57b7901SRyder Lee MT_EE_TX0_POWER_2G = 0x2fc, 22e57b7901SRyder Lee MT_EE_TX0_POWER_5G = 0x34b, 23e57b7901SRyder Lee MT_EE_ADIE_FT_VERSION = 0x9a0, 24e57b7901SRyder Lee 25e57b7901SRyder Lee __MT_EE_MAX = 0xe00 26e57b7901SRyder Lee }; 27e57b7901SRyder Lee 28f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF0_TX_PATH GENMASK(2, 0) 29f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF0_BAND_SEL GENMASK(7, 6) 30f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF1_BAND_SEL GENMASK(7, 6) 31f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF3_TX_PATH_B0 GENMASK(1, 0) 32f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF3_TX_PATH_B1 GENMASK(5, 4) 33f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF7_TSSI0_2G BIT(0) 34f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF7_TSSI0_5G BIT(2) 35f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF7_TSSI1_5G BIT(4) 36e57b7901SRyder Lee 37e57b7901SRyder Lee enum mt7915_eeprom_band { 38*45a8b67aSFelix Fietkau MT_EE_BAND_SEL_DEFAULT, 39*45a8b67aSFelix Fietkau MT_EE_BAND_SEL_5GHZ, 40*45a8b67aSFelix Fietkau MT_EE_BAND_SEL_2GHZ, 41*45a8b67aSFelix Fietkau MT_EE_BAND_SEL_DUAL, 42e57b7901SRyder Lee }; 43e57b7901SRyder Lee 44f1d96236SRyder Lee #define SKU_DELTA_VAL GENMASK(5, 0) 45f1d96236SRyder Lee #define SKU_DELTA_ADD BIT(6) 46f1d96236SRyder Lee #define SKU_DELTA_EN BIT(7) 47f1d96236SRyder Lee 48f1d96236SRyder Lee enum mt7915_sku_delta_group { 49f1d96236SRyder Lee SKU_CCK_GROUP0, 50f1d96236SRyder Lee SKU_CCK_GROUP1, 51f1d96236SRyder Lee 52f1d96236SRyder Lee SKU_OFDM_GROUP0 = 0, 53f1d96236SRyder Lee SKU_OFDM_GROUP1, 54f1d96236SRyder Lee SKU_OFDM_GROUP2, 55f1d96236SRyder Lee SKU_OFDM_GROUP3, 56f1d96236SRyder Lee SKU_OFDM_GROUP4, 57f1d96236SRyder Lee 58f1d96236SRyder Lee SKU_MCS_GROUP0 = 0, 59f1d96236SRyder Lee SKU_MCS_GROUP1, 60f1d96236SRyder Lee SKU_MCS_GROUP2, 61f1d96236SRyder Lee SKU_MCS_GROUP3, 62f1d96236SRyder Lee SKU_MCS_GROUP4, 63f1d96236SRyder Lee SKU_MCS_GROUP5, 64f1d96236SRyder Lee SKU_MCS_GROUP6, 65f1d96236SRyder Lee SKU_MCS_GROUP7, 66f1d96236SRyder Lee SKU_MCS_GROUP8, 67f1d96236SRyder Lee SKU_MCS_GROUP9, 68f1d96236SRyder Lee }; 69f1d96236SRyder Lee 70f1d96236SRyder Lee enum mt7915_sku_rate_group { 71f1d96236SRyder Lee SKU_CCK, 72f1d96236SRyder Lee SKU_OFDM, 73f1d96236SRyder Lee SKU_HT_BW20, 74f1d96236SRyder Lee SKU_HT_BW40, 75f1d96236SRyder Lee SKU_VHT_BW20, 76f1d96236SRyder Lee SKU_VHT_BW40, 77f1d96236SRyder Lee SKU_VHT_BW80, 78f1d96236SRyder Lee SKU_VHT_BW160, 79f1d96236SRyder Lee SKU_HE_RU26, 80f1d96236SRyder Lee SKU_HE_RU52, 81f1d96236SRyder Lee SKU_HE_RU106, 82f1d96236SRyder Lee SKU_HE_RU242, 83f1d96236SRyder Lee SKU_HE_RU484, 84f1d96236SRyder Lee SKU_HE_RU996, 85f1d96236SRyder Lee SKU_HE_RU2x996, 86f1d96236SRyder Lee MAX_SKU_RATE_GROUP_NUM, 87f1d96236SRyder Lee }; 88f1d96236SRyder Lee 89e57b7901SRyder Lee struct sku_group { 90e57b7901SRyder Lee u8 len; 91e57b7901SRyder Lee u16 offset[2]; 92e57b7901SRyder Lee const u8 *delta_map; 93e57b7901SRyder Lee }; 94e57b7901SRyder Lee 95e57b7901SRyder Lee static inline int 96e57b7901SRyder Lee mt7915_get_channel_group(int channel) 97e57b7901SRyder Lee { 98e57b7901SRyder Lee if (channel >= 184 && channel <= 196) 99e57b7901SRyder Lee return 0; 100e57b7901SRyder Lee if (channel <= 48) 101e57b7901SRyder Lee return 1; 102e57b7901SRyder Lee if (channel <= 64) 103e57b7901SRyder Lee return 2; 104e57b7901SRyder Lee if (channel <= 96) 105e57b7901SRyder Lee return 3; 106e57b7901SRyder Lee if (channel <= 112) 107e57b7901SRyder Lee return 4; 108e57b7901SRyder Lee if (channel <= 128) 109e57b7901SRyder Lee return 5; 110e57b7901SRyder Lee if (channel <= 144) 111e57b7901SRyder Lee return 6; 112e57b7901SRyder Lee return 7; 113e57b7901SRyder Lee } 114e57b7901SRyder Lee 115e57b7901SRyder Lee static inline bool 116e57b7901SRyder Lee mt7915_tssi_enabled(struct mt7915_dev *dev, enum nl80211_band band) 117e57b7901SRyder Lee { 118e57b7901SRyder Lee u8 *eep = dev->mt76.eeprom.data; 119e57b7901SRyder Lee 120e57b7901SRyder Lee /* TODO: DBDC */ 121e57b7901SRyder Lee if (band == NL80211_BAND_5GHZ) 122f7fc2bbeSFelix Fietkau return eep[MT_EE_WIFI_CONF + 7] & MT_EE_WIFI_CONF7_TSSI0_5G; 123e57b7901SRyder Lee else 124f7fc2bbeSFelix Fietkau return eep[MT_EE_WIFI_CONF + 7] & MT_EE_WIFI_CONF7_TSSI0_2G; 125e57b7901SRyder Lee } 126e57b7901SRyder Lee 127f1d96236SRyder Lee extern const struct sku_group mt7915_sku_groups[]; 128f1d96236SRyder Lee 129e57b7901SRyder Lee #endif 130