if (!dev->flash_mode) {
u32 eeprom_blk_size = MT7996_EEPROM_BLOCK_SIZE;
u32 block_num = DIV_ROUND_UP(MT7996_EEPROM_SIZE, eeprom_blk_size);
u8 free_block_num; int i;
memset(dev->mt76.eeprom.data, 0, MT7996_EEPROM_SIZE);
ret = mt7996_mcu_get_eeprom_free_block(dev, &free_block_num); if (ret < 0) return ret;
/* efuse info isn't enough */ if (free_block_num >= 59) {
use_default = true; goto out;
}
/* check if eeprom data from fw is valid */ if (mt7996_mcu_get_eeprom(dev, 0, NULL, 0) ||
mt7996_check_eeprom(dev)) {
use_default = true; goto out;
}
/* read eeprom data from fw */ for (i = 1; i < block_num; i++) {
u32 len = eeprom_blk_size;
if (i == block_num - 1)
len = MT7996_EEPROM_SIZE % eeprom_blk_size;
ret = mt7996_mcu_get_eeprom(dev, i * eeprom_blk_size,
NULL, len); if (ret && ret != -EINVAL) {
use_default = true; goto out;
}
}
}
staticint mt7996_eeprom_parse_band_config(struct mt7996_phy *phy)
{
u8 *eeprom = phy->dev->mt76.eeprom.data;
u32 val = eeprom[MT_EE_WIFI_CONF]; int ret = 0;
switch (phy->mt76->band_idx) { case MT_BAND1:
val = FIELD_GET(MT_EE_WIFI_CONF1_BAND_SEL, val); break; case MT_BAND2:
val = eeprom[MT_EE_WIFI_CONF + 1];
val = FIELD_GET(MT_EE_WIFI_CONF2_BAND_SEL, val); break; default:
val = FIELD_GET(MT_EE_WIFI_CONF0_BAND_SEL, val); break;
}
switch (val) { case MT_EE_BAND_SEL_2GHZ:
phy->mt76->cap.has_2ghz = true; break; case MT_EE_BAND_SEL_5GHZ:
phy->mt76->cap.has_5ghz = true; break; case MT_EE_BAND_SEL_6GHZ:
phy->mt76->cap.has_6ghz = true; break; default:
ret = -EINVAL; break;
}
if (band == NL80211_BAND_5GHZ)
val = eeprom[MT_EE_RATE_DELTA_5G]; elseif (band == NL80211_BAND_6GHZ)
val = eeprom[MT_EE_RATE_DELTA_6G]; else
val = eeprom[MT_EE_RATE_DELTA_2G];
if (!(val & MT_EE_RATE_DELTA_EN)) return 0;
delta = FIELD_GET(MT_EE_RATE_DELTA_MASK, val);
return val & MT_EE_RATE_DELTA_SIGN ? delta : -delta;
}
bool mt7996_eeprom_has_background_radar(struct mt7996_dev *dev)
{ switch (mt76_chip(&dev->mt76)) { case MT7996_DEVICE_ID: if (dev->var.type == MT7996_VAR_TYPE_233) returnfalse; break; case MT7992_DEVICE_ID: if (dev->var.type == MT7992_VAR_TYPE_23) returnfalse; break; case MT7990_DEVICE_ID: {
u8 path, rx_path, nss, *eeprom = dev->mt76.eeprom.data;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.