mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-23 20:09:44 +07:00
wlcore: allow setting sleep_auth before interface init
Hold a value for sta_sleep_auth that is amenable to change by debugfs. When detecting a legal value in this variable on interface init, use it as an override value for sleep_auth. This makes debugging more intuitive using the debugfs value. Increment the conf version since we added an element to the conf structure. Note: An AP going up will always set sleep_auth to PSM_CAM. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
26b5858a67
commit
66340e5b25
@ -246,6 +246,7 @@ static struct wlcore_conf wl12xx_conf = {
|
||||
.forced_ps = false,
|
||||
.keep_alive_interval = 55000,
|
||||
.max_listen_interval = 20,
|
||||
.sta_sleep_auth = WL1271_PSM_ILLEGAL,
|
||||
},
|
||||
.itrim = {
|
||||
.enable = false,
|
||||
|
@ -372,6 +372,7 @@ static struct wlcore_conf wl18xx_conf = {
|
||||
.forced_ps = false,
|
||||
.keep_alive_interval = 55000,
|
||||
.max_listen_interval = 20,
|
||||
.sta_sleep_auth = WL1271_PSM_ILLEGAL,
|
||||
},
|
||||
.itrim = {
|
||||
.enable = false,
|
||||
|
@ -70,7 +70,7 @@ int wl1271_acx_sleep_auth(struct wl1271 *wl, u8 sleep_auth)
|
||||
struct acx_sleep_auth *auth;
|
||||
int ret;
|
||||
|
||||
wl1271_debug(DEBUG_ACX, "acx sleep auth");
|
||||
wl1271_debug(DEBUG_ACX, "acx sleep auth %d", sleep_auth);
|
||||
|
||||
auth = kzalloc(sizeof(*auth), GFP_KERNEL);
|
||||
if (!auth) {
|
||||
|
@ -120,6 +120,9 @@ enum wl1271_psm_mode {
|
||||
WL1271_PSM_ELP = 2,
|
||||
|
||||
WL1271_PSM_MAX = WL1271_PSM_ELP,
|
||||
|
||||
/* illegal out of band value of PSM mode */
|
||||
WL1271_PSM_ILLEGAL = 0xff
|
||||
};
|
||||
|
||||
struct acx_sleep_auth {
|
||||
|
@ -951,6 +951,12 @@ struct conf_conn_settings {
|
||||
* Range: u16
|
||||
*/
|
||||
u8 max_listen_interval;
|
||||
|
||||
/*
|
||||
* Default sleep authorization for a new STA interface. This determines
|
||||
* whether we can go to ELP.
|
||||
*/
|
||||
u8 sta_sleep_auth;
|
||||
} __packed;
|
||||
|
||||
enum {
|
||||
@ -1276,7 +1282,7 @@ struct conf_hangover_settings {
|
||||
* version, the two LSB are the lower driver's private conf
|
||||
* version.
|
||||
*/
|
||||
#define WLCORE_CONF_VERSION (0x0001 << 16)
|
||||
#define WLCORE_CONF_VERSION (0x0002 << 16)
|
||||
#define WLCORE_CONF_MASK 0xffff0000
|
||||
#define WLCORE_CONF_SIZE (sizeof(struct wlcore_conf_header) + \
|
||||
sizeof(struct wlcore_conf))
|
||||
|
@ -995,8 +995,13 @@ static ssize_t sleep_auth_write(struct file *file,
|
||||
|
||||
mutex_lock(&wl->mutex);
|
||||
|
||||
if (wl->state == WL1271_STATE_OFF)
|
||||
wl->conf.conn.sta_sleep_auth = value;
|
||||
|
||||
if (wl->state == WL1271_STATE_OFF) {
|
||||
/* this will show up on "read" in case we are off */
|
||||
wl->sleep_auth = value;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = wl1271_ps_elp_wakeup(wl);
|
||||
if (ret < 0)
|
||||
|
@ -565,7 +565,13 @@ int wl1271_init_vif_specific(struct wl1271 *wl, struct ieee80211_vif *vif)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
} else if (!wl->sta_count) {
|
||||
if (wl->quirks & WLCORE_QUIRK_NO_ELP) {
|
||||
u8 sta_auth = wl->conf.conn.sta_sleep_auth;
|
||||
if (sta_auth != WL1271_PSM_ILLEGAL) {
|
||||
/* Configure for power according to debugfs */
|
||||
ret = wl1271_acx_sleep_auth(wl, sta_auth);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
} else if (wl->quirks & WLCORE_QUIRK_NO_ELP) {
|
||||
/* Configure for power always on */
|
||||
ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
|
||||
if (ret < 0)
|
||||
|
@ -5176,7 +5176,7 @@ struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size)
|
||||
wl->channel_type = NL80211_CHAN_NO_HT;
|
||||
wl->flags = 0;
|
||||
wl->sg_enabled = true;
|
||||
wl->sleep_auth = WL1271_PSM_CAM;
|
||||
wl->sleep_auth = WL1271_PSM_ILLEGAL;
|
||||
wl->hw_pg_ver = -1;
|
||||
wl->ap_ps_map = 0;
|
||||
wl->ap_fw_ps_map = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user