Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 247219
b: refs/heads/master
c: bdbfd6b
h: refs/heads/master
i:
  247217: bb323db
  247215: db4b9a7
v: v3
  • Loading branch information
Sujith Manoharan authored and John W. Linville committed Apr 28, 2011
1 parent 87684e9 commit 1e54b21
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8973a6e770fc891f92daacbc1c92c7cd396fcf7e
refs/heads/master: bdbfd6b582f55384059d9ac5e65b3653092e6adf
6 changes: 6 additions & 0 deletions trunk/include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -1822,6 +1822,10 @@ enum ieee80211_ampdu_mlme_action {
*
* @tx_frames_pending: Check if there is any pending frame in the hardware
* queues before entering power save.
*
* @set_bitrate_mask: Set a mask of rates to be used for rate control selection
* when transmitting a frame. Currently only legacy rates are handled.
* The callback can sleep.
*/
struct ieee80211_ops {
void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
Expand Down Expand Up @@ -1910,6 +1914,8 @@ struct ieee80211_ops {
void (*get_ringparam)(struct ieee80211_hw *hw,
u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
bool (*tx_frames_pending)(struct ieee80211_hw *hw);
int (*set_bitrate_mask)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
const struct cfg80211_bitrate_mask *mask);
};

/**
Expand Down
15 changes: 6 additions & 9 deletions trunk/net/mac80211/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -1633,16 +1633,13 @@ static int ieee80211_set_bitrate_mask(struct wiphy *wiphy,
{
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
int i;

/*
* This _could_ be supported by providing a hook for
* drivers for this function, but at this point it
* doesn't seem worth bothering.
*/
if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)
return -EOPNOTSUPP;
int i, ret;

if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) {
ret = drv_set_bitrate_mask(local, sdata, mask);
if (ret)
return ret;
}

for (i = 0; i < IEEE80211_NUM_BANDS; i++)
sdata->rc_rateidx_mask[i] = mask->control[i].legacy;
Expand Down
18 changes: 18 additions & 0 deletions trunk/net/mac80211/driver-ops.h
Original file line number Diff line number Diff line change
Expand Up @@ -565,4 +565,22 @@ static inline bool drv_tx_frames_pending(struct ieee80211_local *local)

return ret;
}

static inline int drv_set_bitrate_mask(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata,
const struct cfg80211_bitrate_mask *mask)
{
int ret = -EOPNOTSUPP;

might_sleep();

trace_drv_set_bitrate_mask(local, sdata, mask);
if (local->ops->set_bitrate_mask)
ret = local->ops->set_bitrate_mask(&local->hw,
&sdata->vif, mask);
trace_drv_return_int(local, ret);

return ret;
}

#endif /* __MAC80211_DRIVER_OPS */
27 changes: 27 additions & 0 deletions trunk/net/mac80211/driver-trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -989,6 +989,33 @@ DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait,
TP_ARGS(local)
);

TRACE_EVENT(drv_set_bitrate_mask,
TP_PROTO(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata,
const struct cfg80211_bitrate_mask *mask),

TP_ARGS(local, sdata, mask),

TP_STRUCT__entry(
LOCAL_ENTRY
VIF_ENTRY
__field(u32, legacy_2g)
__field(u32, legacy_5g)
),

TP_fast_assign(
LOCAL_ASSIGN;
VIF_ASSIGN;
__entry->legacy_2g = mask->control[IEEE80211_BAND_2GHZ].legacy;
__entry->legacy_5g = mask->control[IEEE80211_BAND_5GHZ].legacy;
),

TP_printk(
LOCAL_PR_FMT VIF_PR_FMT " 2G Mask:0x%x 5G Mask:0x%x",
LOCAL_PR_ARG, VIF_PR_ARG, __entry->legacy_2g, __entry->legacy_5g
)
);

/*
* Tracing for API calls that drivers call.
*/
Expand Down

0 comments on commit 1e54b21

Please sign in to comment.