mirror of https://gitee.com/openkylin/linux.git
wl1271: add support for HW TX fragmentation
Indicate to mac80211 we support HW fragmentation. Support updates of the fragmentation threshold via the set_frag_threshold callback. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
This commit is contained in:
parent
fa97f46b30
commit
68d069c45f
|
@ -862,7 +862,7 @@ int wl1271_acx_tid_cfg(struct wl1271 *wl, u8 queue_id, u8 channel_type,
|
|||
return ret;
|
||||
}
|
||||
|
||||
int wl1271_acx_frag_threshold(struct wl1271 *wl)
|
||||
int wl1271_acx_frag_threshold(struct wl1271 *wl, u16 frag_threshold)
|
||||
{
|
||||
struct acx_frag_threshold *acx;
|
||||
int ret = 0;
|
||||
|
@ -876,7 +876,7 @@ int wl1271_acx_frag_threshold(struct wl1271 *wl)
|
|||
goto out;
|
||||
}
|
||||
|
||||
acx->frag_threshold = cpu_to_le16(wl->conf.tx.frag_threshold);
|
||||
acx->frag_threshold = cpu_to_le16(frag_threshold);
|
||||
ret = wl1271_cmd_configure(wl, ACX_FRAG_CFG, acx, sizeof(*acx));
|
||||
if (ret < 0) {
|
||||
wl1271_warning("Setting of frag threshold failed: %d", ret);
|
||||
|
|
|
@ -1161,7 +1161,7 @@ int wl1271_acx_ac_cfg(struct wl1271 *wl, u8 ac, u8 cw_min, u16 cw_max,
|
|||
int wl1271_acx_tid_cfg(struct wl1271 *wl, u8 queue_id, u8 channel_type,
|
||||
u8 tsid, u8 ps_scheme, u8 ack_policy,
|
||||
u32 apsd_conf0, u32 apsd_conf1);
|
||||
int wl1271_acx_frag_threshold(struct wl1271 *wl);
|
||||
int wl1271_acx_frag_threshold(struct wl1271 *wl, u16 frag_threshold);
|
||||
int wl1271_acx_tx_config_options(struct wl1271 *wl);
|
||||
int wl1271_acx_mem_cfg(struct wl1271 *wl);
|
||||
int wl1271_acx_init_mem_config(struct wl1271 *wl);
|
||||
|
|
|
@ -290,7 +290,7 @@ int wl1271_hw_init(struct wl1271 *wl)
|
|||
goto out_free_memmap;
|
||||
|
||||
/* Default fragmentation threshold */
|
||||
ret = wl1271_acx_frag_threshold(wl);
|
||||
ret = wl1271_acx_frag_threshold(wl, wl->conf.tx.frag_threshold);
|
||||
if (ret < 0)
|
||||
goto out_free_memmap;
|
||||
|
||||
|
|
|
@ -425,7 +425,7 @@ static int wl1271_plt_init(struct wl1271 *wl)
|
|||
goto out_free_memmap;
|
||||
|
||||
/* Default fragmentation threshold */
|
||||
ret = wl1271_acx_frag_threshold(wl);
|
||||
ret = wl1271_acx_frag_threshold(wl, wl->conf.tx.frag_threshold);
|
||||
if (ret < 0)
|
||||
goto out_free_memmap;
|
||||
|
||||
|
@ -1745,6 +1745,34 @@ static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
|
||||
{
|
||||
struct wl1271 *wl = hw->priv;
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&wl->mutex);
|
||||
|
||||
if (unlikely(wl->state == WL1271_STATE_OFF)) {
|
||||
ret = -EAGAIN;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = wl1271_ps_elp_wakeup(wl, false);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
ret = wl1271_acx_frag_threshold(wl, (u16)value);
|
||||
if (ret < 0)
|
||||
wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
|
||||
|
||||
wl1271_ps_elp_sleep(wl);
|
||||
|
||||
out:
|
||||
mutex_unlock(&wl->mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
|
||||
{
|
||||
struct wl1271 *wl = hw->priv;
|
||||
|
@ -2421,6 +2449,7 @@ static const struct ieee80211_ops wl1271_ops = {
|
|||
.set_key = wl1271_op_set_key,
|
||||
.hw_scan = wl1271_op_hw_scan,
|
||||
.bss_info_changed = wl1271_op_bss_info_changed,
|
||||
.set_frag_threshold = wl1271_op_set_frag_threshold,
|
||||
.set_rts_threshold = wl1271_op_set_rts_threshold,
|
||||
.conf_tx = wl1271_op_conf_tx,
|
||||
.get_tsf = wl1271_op_get_tsf,
|
||||
|
|
Loading…
Reference in New Issue