p54: implement set_coverage_class
The callback sets slot time as specified in IEEE 802.11-2007 section 17.3.8.6 and raises round trip delay accordingly. Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
41cae2d013
commit
3083e83c86
|
@ -559,6 +559,7 @@ int p54_set_edcf(struct p54_common *priv)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
struct p54_edcf *edcf;
|
struct p54_edcf *edcf;
|
||||||
|
u8 rtd;
|
||||||
|
|
||||||
skb = p54_alloc_skb(priv, P54_HDR_FLAG_CONTROL_OPSET, sizeof(*edcf),
|
skb = p54_alloc_skb(priv, P54_HDR_FLAG_CONTROL_OPSET, sizeof(*edcf),
|
||||||
P54_CONTROL_TYPE_DCFINIT, GFP_ATOMIC);
|
P54_CONTROL_TYPE_DCFINIT, GFP_ATOMIC);
|
||||||
|
@ -575,9 +576,15 @@ int p54_set_edcf(struct p54_common *priv)
|
||||||
edcf->sifs = 0x0a;
|
edcf->sifs = 0x0a;
|
||||||
edcf->eofpad = 0x06;
|
edcf->eofpad = 0x06;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* calculate the extra round trip delay according to the
|
||||||
|
* formula from 802.11-2007 17.3.8.6.
|
||||||
|
*/
|
||||||
|
rtd = 3 * priv->coverage_class;
|
||||||
|
edcf->slottime += rtd;
|
||||||
|
edcf->round_trip_delay = cpu_to_le16(rtd);
|
||||||
/* (see prism54/isl_oid.h for further details) */
|
/* (see prism54/isl_oid.h for further details) */
|
||||||
edcf->frameburst = cpu_to_le16(0);
|
edcf->frameburst = cpu_to_le16(0);
|
||||||
edcf->round_trip_delay = cpu_to_le16(0);
|
|
||||||
edcf->flags = 0;
|
edcf->flags = 0;
|
||||||
memset(edcf->mapping, 0, sizeof(edcf->mapping));
|
memset(edcf->mapping, 0, sizeof(edcf->mapping));
|
||||||
memcpy(edcf->queue, priv->qos_params, sizeof(edcf->queue));
|
memcpy(edcf->queue, priv->qos_params, sizeof(edcf->queue));
|
||||||
|
|
|
@ -566,6 +566,17 @@ static void p54_flush(struct ieee80211_hw *dev, bool drop)
|
||||||
WARN(total, "tx flush timeout, unresponsive firmware");
|
WARN(total, "tx flush timeout, unresponsive firmware");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void p54_set_coverage_class(struct ieee80211_hw *dev, u8 coverage_class)
|
||||||
|
{
|
||||||
|
struct p54_common *priv = dev->priv;
|
||||||
|
|
||||||
|
mutex_lock(&priv->conf_mutex);
|
||||||
|
/* support all coverage class values as in 802.11-2007 Table 7-27 */
|
||||||
|
priv->coverage_class = clamp_t(u8, coverage_class, 0, 31);
|
||||||
|
p54_set_edcf(priv);
|
||||||
|
mutex_unlock(&priv->conf_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct ieee80211_ops p54_ops = {
|
static const struct ieee80211_ops p54_ops = {
|
||||||
.tx = p54_tx_80211,
|
.tx = p54_tx_80211,
|
||||||
.start = p54_start,
|
.start = p54_start,
|
||||||
|
@ -584,6 +595,7 @@ static const struct ieee80211_ops p54_ops = {
|
||||||
.conf_tx = p54_conf_tx,
|
.conf_tx = p54_conf_tx,
|
||||||
.get_stats = p54_get_stats,
|
.get_stats = p54_get_stats,
|
||||||
.get_survey = p54_get_survey,
|
.get_survey = p54_get_survey,
|
||||||
|
.set_coverage_class = p54_set_coverage_class,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ieee80211_hw *p54_init_common(size_t priv_data_len)
|
struct ieee80211_hw *p54_init_common(size_t priv_data_len)
|
||||||
|
|
|
@ -217,6 +217,7 @@ struct p54_common {
|
||||||
u32 tsf_low32, tsf_high32;
|
u32 tsf_low32, tsf_high32;
|
||||||
u32 basic_rate_mask;
|
u32 basic_rate_mask;
|
||||||
u16 aid;
|
u16 aid;
|
||||||
|
u8 coverage_class;
|
||||||
bool powersave_override;
|
bool powersave_override;
|
||||||
__le32 beacon_req_id;
|
__le32 beacon_req_id;
|
||||||
struct completion beacon_comp;
|
struct completion beacon_comp;
|
||||||
|
|
Loading…
Reference in New Issue