Skip to contentSkip to conversation

Question rate-mask and iw

DISCUSSION Ben Greear 1 participant 2 messages Sep 8, 2015

lore
Share & tools
lore

Ben Greear

author
#0 lore raw

I'm trying to add ability to ath10k to set an arbitrary tx-rate mask.

(ie, enable rates 6 64 vht 3 4 9, etc)

I know firmware will need to be modified...that is not the issue currently.

My problem is that I seem not be mis-understanding how the code to set rates work.

I have this code:

static void ath10k_peer_assoc_h_rate_overrides(struct ath10k *ar,

					       struct ieee80211_vif *vif,
					       struct ieee80211_sta *sta,
					       struct wmi_peer_assoc_complete_arg *arg)
{
	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
	const struct ieee80211_supported_band *sband;
	const struct ieee80211_rate *rates;
	u32 ratemask;
	int i, j;
	int band = ar->hw->conf.chandef.chan->band;

	if (! test_bit(ATH10K_FW_FEATURE_WMI_10X_CT, ar->fw_features))
		return;

	lockdep_assert_held(&ar->conf_mutex);
	
	sband = ar->hw->wiphy->bands[band];
	ratemask = sta->supp_rates[band];
	rates = sband->bitrates;

	ath10k_warn(ar, "band: %d  ratemask: 0x%x\n", band, ratemask);

It is called when I run the command below:

iw wlan0 set bitrates legacy-5 6 12

But, rate-mask has all bits set...I would expect only bits corresponding to rate 6 and 12 to be set.

[ 7487.627841] ath10k_pci 0000:05:00.0: band: 1  ratemask: 0xff

I'll go dig through the stack next..but if anyone has pointers, they would be welcome.

Thanks,
Ben

Signature · 2 lines
Ben Greear <[email protected]>
Candela Technologies Inc  http://www.candelatech.com
author
#1 lore raw
Quoted 8 lines · Ben Greear

I'm trying to add ability to ath10k to set an arbitrary tx-rate mask.

(ie, enable rates 6 64 vht 3 4 9, etc)

I know firmware will need to be modified...that is not the issue currently.

My problem is that I seem not be mis-understanding how the code to set rates work.

Ahhh, I think I see. For HW rate-ctrl, the driver is going to need to keep the config values from the 'set_bitrate_mask' logic in the driver and deal with it accordingly....

Thanks,
Ben

Quoted 43 lines

I have this code:

static void ath10k_peer_assoc_h_rate_overrides(struct ath10k *ar,

                            struct ieee80211_vif *vif,
                            struct ieee80211_sta *sta,
                            struct wmi_peer_assoc_complete_arg *arg)
{
     struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
     const struct ieee80211_supported_band *sband;
     const struct ieee80211_rate *rates;
     u32 ratemask;
     int i, j;
     int band = ar->hw->conf.chandef.chan->band;

     if (! test_bit(ATH10K_FW_FEATURE_WMI_10X_CT, ar->fw_features))
         return;

     lockdep_assert_held(&ar->conf_mutex);

     sband = ar->hw->wiphy->bands[band];
     ratemask = sta->supp_rates[band];
     rates = sband->bitrates;

     ath10k_warn(ar, "band: %d  ratemask: 0x%x\n", band, ratemask);

It is called when I run the command below:

iw wlan0 set bitrates legacy-5 6 12

But, rate-mask has all bits set...I would expect only bits corresponding to rate 6 and 12 to be set.

[ 7487.627841] ath10k_pci 0000:05:00.0: band: 1  ratemask: 0xff

I'll go dig through the stack next..but if anyone has pointers, they would be welcome.

Thanks,
Ben

Signature · 2 lines
Ben Greear <[email protected]>
Candela Technologies Inc  http://www.candelatech.com