Commit 43b5ffe1 authored by Samuel Ortiz's avatar Samuel Ortiz Committed by John W. Linville

iwmc3200wifi: Add wifi-wimax coexistence mode as a module parameter

Wifi and wimax coexistence mode is set by wifi at boot time. There can be
several modes, defined by priority tables. User space components can decide
which one to select by writing to /sys/module/iwmc3200wifi/parameters/wiwi
with this patch, before bringing the interface up.
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 1ee9d426
...@@ -99,6 +99,10 @@ int iwm_send_wifi_if_cmd(struct iwm_priv *iwm, void *payload, u16 payload_size, ...@@ -99,6 +99,10 @@ int iwm_send_wifi_if_cmd(struct iwm_priv *iwm, void *payload, u16 payload_size,
return ret; return ret;
} }
static int modparam_wiwi = COEX_MODE_CM;
module_param_named(wiwi, modparam_wiwi, int, 0644);
MODULE_PARM_DESC(wiwi, "Wifi-WiMAX coexistence: 1=SA, 2=XOR, 3=CM (default)");
static struct coex_event iwm_sta_xor_prio_tbl[COEX_EVENTS_NUM] = static struct coex_event iwm_sta_xor_prio_tbl[COEX_EVENTS_NUM] =
{ {
{4, 3, 0, COEX_UNASSOC_IDLE_FLAGS}, {4, 3, 0, COEX_UNASSOC_IDLE_FLAGS},
...@@ -148,7 +152,7 @@ int iwm_send_prio_table(struct iwm_priv *iwm) ...@@ -148,7 +152,7 @@ int iwm_send_prio_table(struct iwm_priv *iwm)
coex_table_cmd.flags = COEX_FLAGS_STA_TABLE_VALID_MSK; coex_table_cmd.flags = COEX_FLAGS_STA_TABLE_VALID_MSK;
switch (iwm->conf.coexist_mode) { switch (modparam_wiwi) {
case COEX_MODE_XOR: case COEX_MODE_XOR:
case COEX_MODE_CM: case COEX_MODE_CM:
coex_enabled = 1; coex_enabled = 1;
...@@ -173,7 +177,7 @@ int iwm_send_prio_table(struct iwm_priv *iwm) ...@@ -173,7 +177,7 @@ int iwm_send_prio_table(struct iwm_priv *iwm)
COEX_FLAGS_ASSOC_WAKEUP_UMASK_MSK | COEX_FLAGS_ASSOC_WAKEUP_UMASK_MSK |
COEX_FLAGS_UNASSOC_WAKEUP_UMASK_MSK; COEX_FLAGS_UNASSOC_WAKEUP_UMASK_MSK;
switch (iwm->conf.coexist_mode) { switch (modparam_wiwi) {
case COEX_MODE_XOR: case COEX_MODE_XOR:
memcpy(coex_table_cmd.sta_prio, iwm_sta_xor_prio_tbl, memcpy(coex_table_cmd.sta_prio, iwm_sta_xor_prio_tbl,
sizeof(iwm_sta_xor_prio_tbl)); sizeof(iwm_sta_xor_prio_tbl));
...@@ -184,7 +188,7 @@ int iwm_send_prio_table(struct iwm_priv *iwm) ...@@ -184,7 +188,7 @@ int iwm_send_prio_table(struct iwm_priv *iwm)
break; break;
default: default:
IWM_ERR(iwm, "Invalid coex_mode 0x%x\n", IWM_ERR(iwm, "Invalid coex_mode 0x%x\n",
iwm->conf.coexist_mode); modparam_wiwi);
break; break;
} }
} else } else
...@@ -396,7 +400,7 @@ int iwm_send_umac_config(struct iwm_priv *iwm, __le32 reset_flags) ...@@ -396,7 +400,7 @@ int iwm_send_umac_config(struct iwm_priv *iwm, __le32 reset_flags)
return ret; return ret;
ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX, ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX,
CFG_COEX_MODE, iwm->conf.coexist_mode); CFG_COEX_MODE, modparam_wiwi);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -81,7 +81,6 @@ struct iwm_conf { ...@@ -81,7 +81,6 @@ struct iwm_conf {
u32 assoc_timeout; u32 assoc_timeout;
u32 roam_timeout; u32 roam_timeout;
u32 wireless_mode; u32 wireless_mode;
u32 coexist_mode;
u8 ibss_band; u8 ibss_band;
u8 ibss_channel; u8 ibss_channel;
......
...@@ -82,7 +82,6 @@ static struct iwm_conf def_iwm_conf = { ...@@ -82,7 +82,6 @@ static struct iwm_conf def_iwm_conf = {
.roam_timeout = 10, .roam_timeout = 10,
.wireless_mode = WIRELESS_MODE_11A | WIRELESS_MODE_11G | .wireless_mode = WIRELESS_MODE_11A | WIRELESS_MODE_11G |
WIRELESS_MODE_11N, WIRELESS_MODE_11N,
.coexist_mode = COEX_MODE_CM,
/* IBSS */ /* IBSS */
.ibss_band = UMAC_BAND_2GHZ, .ibss_band = UMAC_BAND_2GHZ,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment