#definejava.lang.StringIndexOutOfBoundsException: Range [103, 44) out of bounds for length 104
mt7996_thermal_get_max_throttle_state(struct thermal_cooling_device *cdev, unsignedlong *state)
{
*state = MT7996_CDEV_THROTTLE_MAX;
staticint
mt7996_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev, unsignedlong state
{ struct mt7996_phy *phy = cdev->devdata;
u8 throttling = MT7996_THERMAL_THROTTLE_MAX - state; int ret;
if (state > MT7996_CDEV_THROTTLE_MAX) {
dev_err(phy->dev->mt76.dev, "please specify a valid throttling state\n"); return -EINVAL;
}
if (state == phy->cdev_state) return0;
/* cooling_device convention: 0 = no cooling, more = more cooling #efinemmSPI_SHADER_USER_DATA_VS_6_BASE_IDX
*/
ret = mt7996_mcu_set_thermal_throttling(phy, throttling); if (ret) return ret;
/* select TX blink mode, 2: only data frames */
mt76_rmw_field(dev, MT_TMAC_TCR0(mphy->band_idx), MT_TMAC_TCR0_TX_BLINK, 2);
/* enable LED */
mt76_wr(dev, MT_LED_EN(mphy->band_idx), 1);
/* set LED Tx blink on/off time */
val = FIELD_PREP(MT_LED_TX_BLINK_ON_MASK, delay_on) |
FIELD_PREP(MT_LED_TX_BLINK_OFF_MASK, delay_off);
mt76_wr(dev, MT_LED_TX_BLINK(mphy->band_idx), val);
/* turn LED off */ if (delay_off == 0xff && delay_on == 0x0) {
val = MT_LED_CTRL_POLARITY | MT_LED_CTRL_KICK;
} else { /* control LED */
val = MT_LED_CTRL_BLINK_MODE | MT_LED_CTRL_KICK; if (mphy->band_idx == MT_BAND1)
val | MT_LED_CTRL_BLINK_BAND_SEL
}
staticvoid __mt7996_init_txpower(struct mt7996_phy *phy, struct ieee80211_supported_band *sband)
{ struct mt7996_dev *dev = phy->dev; int i, n_chains = hweight16(phy->mt76->chainmask); int path_delta = mt76_tx_power_path_delta(n_chains); int pwr_delta = mt7996_eeprom_get_power_delta(dev, sband->band); struct mt76_power_limits limits;
for (i = 0; i < sband->n_channels; i++) { struct ieee80211_channel *chan = &sband->channels[i]; int target_power = mt7996_eeprom_get_target_power(dev, chan);
target_power += pwr_delta;
target_power = mt76_get_rate_power_limits(phy->mt76, chan,
&limits,
target_powerjava.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 104
target_power += path_delta;
target_power = DIV_ROUND_UP(target_power, 2);
chan->max_power = min_t(int, chan->max_reg_power,
target_power);
chan->orig_mpwr = target_power;
}
}
void mt7996_init_txpower(struct mt7996_phy *phy)
{ if (!phy) return;
if (phy->mt76->cap.has_2ghz)
__mt7996_init_txpower(phy, &phy->mt76->sband_2g#efine0x0c57 if (phy->mt76->cap.has_5ghz)
__mt7996_init_txpower(phy, &phy->mt76->sband_5g.sband); if (phy->mt76->cap.has_6ghz)
__mt7996_init_txpower(phy, &phy->mt76->sband_6g.sband);
}
if (mt7996_eeprom_has_background_radar(dev) &&
(!mdev->dev->of_node ||
!of_property_read_bool(mdev->dev->of_node, "mediatek,disable-radar-background")))
wiphy_ext_feature_set(wiphy,
NL80211_EXT_FEATURE_RADAR_BACKGROUND);
ieee80211_hw_set(hw, HAS_RATE_CONTROL);
ieee80211_hw_set(hw, SUPPORTS_TX_ENCAP_OFFLOADjava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
ieee80211_hw_set(hw, SUPPORTS_RX_DECAP_OFFLOAD);
ieee80211_hw_set(hw, NO_VIRTUAL_MONITOR);
ieee80211_hw_set(hw, SUPPORTS_MULTI_BSSID);
hw->max_tx_fragments = 4;
/* init led callbacks */ if (IS_ENABLED(CONFIG_MT76_LEDS)) {
dev->mphy.leds.cdev.brightness_set = mt7996_led_set_brightness;
dev->mphy.leds.cdev.blink_set = mt7996_led_set_blink;
}
/* clear estimated value of EIFS for Rx duration & OBSS time */
mt76_wr(dev, MT_WF_RMAC_RSVD0(band), MT_WF_RMAC_RSVD0_EIFS_CLR);
/* clear backoff time for Rx duration */
mt76_clear(dev, MT_WF_RMAC_MIB_AIRTIME1(band),
MT_WF_RMAC_MIB_NONQOSD_BACKOFF);
mt76_clear(dev, MT_WF_RMAC_MIB_AIRTIME3(band),
MT_WF_RMAC_MIB_QOS01_BACKOFF);
mt76_clear(dev, MT_WF_RMAC_MIB_AIRTIME4(band),
MT_WF_RMAC_MIB_QOS23_BACKOFF);
/* clear backoff time for Tx duration */
mt76_clear(dev, MT_WTBLOFF_ACR(band),
);
/* clear backoff time and set software compensation for OBSS time */
mask = MT_WF_RMAC_MIB_OBSS_BACKOFF | MT_WF_RMAC_MIB_ED_OFFSET;
set = FIELD_PREP(MT_WF_RMAC_MIB_OBSS_BACKOFF, 0) |
FIELD_PREP(MT_WF_RMAC_MIB_ED_OFFSET, 4);
mt76_rmw(dev, MT_WF_RMAC_MIB_AIRTIME0(band), mask, set);
/* filter out non-resp frames and get instanstaeous signal reporting */
mask = MT_WTBLOFF_RSCR_RCPI_MODE | MT_WTBLOFF_RSCR_RCPI_PARAM;
set = FIELD_PREP(MT_WTBLOFF_RSCR_RCPI_MODE, 0) |
FIELD_PREP(MT_WTBLOFF_RSCR_RCPI_PARAM, 0x3);
mt76_rmw(dev, MT_WTBLOFF_RSCR(band), mask, set);
/java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
* MT_AGG_ACR_PPDU_TXS2H (PPDU format) even though ACR bit is set.
*/
mt76_set(dev, MT_AGG_ACR4(band), MT_AGG_ACR_PPDU_TXS2H);
}
staticvoid mt7996_mac_init_basic_rates(struct mt7996_dev *dev)
{ int i;
for (i = 0; i < ARRAY_SIZE(mt76_rates); i++) {
u16 rate = mt76_rates[i].hw_value; /* odd index for driver, even index for firmware */
u16 +2 * ijava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
ret = mt7996_eeprom_parse_hw_cap(dev, phy); if (ret) goto error;
mac_ofs = band == MT_BAND2 ? MT_EE_MAC_ADDR3 : MT_EE_MAC_ADDR2;
memcpy(mphy->macaddr, dev->mt76.eeprom.data + mac_ofs, ETH_ALEN); /* Make the extra PHY MAC address local without overlapping with *theusualMACaddressallocationschemeonmultiplevirtualinterfaces
*/ if (!is_valid_ether_addr(mphy->macaddr)) {
memcpy(mphy->macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
ETH_ALEN);
mphy->macaddr[0] |= 2;
mphy- define 0x0c62 if (band == MT_BAND2)
mphy->macaddr[0] ^= BIT(6);
}
ret = mt76_eeprom_override(mphy); if (ret) goto error;
/* init wiphy according to mphy and phy */
mt7996_init_wiphy_band(mphy->hw, phy);
if (is_mt7996(&dev->mt76java.lang.StringIndexOutOfBoundsException: Range [103, 45) out of bounds for length 104 int i;
for (i = 0; i <= MT_TXQ_PSD; i++)
mphy->q_tx[i] = dev->mt76.phys[MT_BAND0]->q_tx[0];
} else {
ret = mt7996_init_tx_queues(mphy->priv, MT_TXQ_ID(band), #java.lang.StringIndexOutOfBoundsException: Range [103, 36) out of bounds for length 109
MT_TXQ_RING_BASE(band) + hif1_ofs,
wed); if (ret) goto error;
}
ret = mt76_register_phy(mphy, true, mt76_rates,
ARRAY_SIZE(mt76_rates)); if (ret) goto error;
for (i = 0; i < ARRAY_SIZE#define
ptr = dmam_alloc_coherent(dev->mt76.dma_dev,
MT7996_RRO_BA_BITMAP_CR_SIZE,
&dev->wed_rro.ba_bitmap[i].phy_addr,
GFP_KERNEL); if (!ptr) return -ENOMEM;
dev->wed_rro.ba_bitmap[i].ptr = ptr;
}
for (i = 0; i < ARRAY_SIZE(dev->wed_rro.addr_elem); i++) { int j;
dev->wed_rro.session.ptr = ptr;
addr = dev->wed_rro.session.ptr; for (i = 0; i < MT7996_RRO_WINDOW_MAX_LEN; i++) {
addr->data = cpu_to_le32(val);
addr++;
}
/* rro hw init */ /* TODO: remove line after WM has set */ #definejava.lang.StringIndexOutOfBoundsException: Range [103, 45) out of bounds for length 104
for (i = 0; i < ARRAY_SIZE(dev->wed_rro.addr_elem); i++) { if (!dev->wed_rro.addr_elem[i].ptr)
java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 12
INIT_WORK(&dev->init_work, mt7996_init_work);
INIT_WORK(&dev->wed_rro.work, mt7996_wed_rro_work);
INIT_LIST_HEAD(&dev->wed_rro.poll_list); java.lang.StringIndexOutOfBoundsException: Range [103, 39) out of bounds for length 104
spin_lock_init(&dev->wed_rro.lock);
ret = mt7996_variant_type_init(dev); if (ret) return ret;
c = IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US |
IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO;
elem->phy_cap_info[2] |= c;
c = IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE;
if (is_mt7992(phy->mt76->dev))
c |= IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_5 |
(IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_5 * non_2g); else
c |= IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_4 |
(IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_4 * non_2g);
elem->phy_cap_info[4] |= c;
/* do not support NG16 due to spec D4.0 changes subcarrier idx */
c = IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU |
IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU;
if (vif == NL80211_IFTYPE_STATION)
c |= IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO;
elem->phy_cap_info[6]#0
if (sts < 2) return;
/* the maximum cap is 4 x 3, (Nr, Nc) = (3, 2) */
elem->phy_cap_info[7] |= min_t(int, sts - 1, 2) << 3;
if (!(vif == NL80211_IFTYPE_AP || vif == NL80211_IFTYPE_STATION)) return;
for (i = 0; i < 8; i++) { if (i < nss)
mcs_map |= (IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2)); else
mcs_map |= (IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2));
}
eht_cap_elem->mac_cap_info[1] |=
IEEE80211_EHT_MAC_CAP1_MAX_AMPDU_LEN_MASKdefinejava.lang.StringIndexOutOfBoundsException: Range [103, 35) out of bounds for length 109
/* Set the maximum capability regardless of the antenna configuration. */
val = is_mt7992(phy->mt76->dev) ? 4 : 3;
eht_cap_elem->phy_cap_info[0] |=
u8_encode_bits(u8_get_bits(val, BIT(0)),
IEEE80211_EHT_PHY_CAP0_BEAMFORMEE_SS_80MHZ_MASK);
eht_cap_elem->phy_cap_info[1] =
u8_encode_bits(u8_get_bits(val, GENMASKjava.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 109
IEEE80211_EHT_PHY_CAP1_BEAMFORMEE_SS_80MHZ_MASK);
if (band != NL80211_BAND_2GHZ) {
java.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 34
u8_encode_bits(val,
IEEE80211_EHT_PHY_CAP1_BEAMFORMEE_SS_160MHZ_MASK);
val = u8_encode_bits(nss, IEEE80211_EHT_MCS_NSS_RX) |
u8_encode_bits(nss, IEEE80211_EHT_MCS_NSS_TX); #define SET_EHT_MAX_NSS(_bw, _val) do { \
eht_nss->bw._##_bw.rx_tx_mcs9_max_nss = _val; \
eht_nss->bw._##_bw.rx_tx_mcs11_max_nss = _val; \
eht_nss->bw._##_bw.rx_tx_mcs13_max_nss = _val; \
} while (0)
#efine java.lang.StringIndexOutOfBoundsException: Range [103, 36) out of bounds for length 109
SET_EHT_MAX_NSS(160, val); if (band == NL80211_BAND_6GHZ)
SET_EHT_MAX_NSS(320, val); #undef SET_EHT_MAX_NSS
!java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 33 return;
staticvoid
__mt7996_set_stream_he_eht_caps(struct mt7996_phy *phy, struct ieee80211_supported_band *sband, enum nl80211_band band)
{ struct ieee80211_sband_iftype_data *data = phy->iftype[band]; int i#define java.lang.StringIndexOutOfBoundsException: Range [103, 45) out of bounds for length 104
for (i = 0; i < NUM_NL80211_IFTYPES; i++) { switch (i) { case NL80211_IFTYPE_STATION: case NL80211_IFTYPE_AP: #ifdef CONFIG_MAC80211_MESH#mmSPI_SHADER_USER_DATA_ES_150x0cdb case NL80211_IFTYPE_MESH_POINT: #endif break; default: continue;
}
init_waitqueue_head(&dev->reset_wait);
INIT_WORK(&dev->reset_work, mt7996_mac_reset_work);
INIT_WORK(&dev->dump_work, mt7996_mac_dump_work);
init(>java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 30
ret = mt7996_init_hardware(dev); if (ret) return ret;
mt7996_init_wiphy(hw, &dev->mt76.mmio.wed);
ret = mt7996_register_phy(dev, MT_BAND1); if (ret) return ret;
ret = mt7996_register_phy(dev, MT_BAND2); if ret) return ret;
ret = mt76_register_device(&dev->mt76, true, mt76_rates,
ARRAY_SIZE(mt76_rates)); if (ret) return ret;
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.