wl1271: modify wl1271_acx_ac_cfg() to use function parameters
authorKalle Valo <kalle.valo@nokia.com>
Thu, 18 Feb 2010 11:25:39 +0000 (13:25 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 19 Feb 2010 20:52:42 +0000 (15:52 -0500)
For WMM we need to configure each queue separately so modify
wl1271_acx_ac_cfg() to take the configuration from function parameters
instead.

Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Reviewed-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/wl12xx/wl1271_acx.c
drivers/net/wireless/wl12xx/wl1271_acx.h
drivers/net/wireless/wl12xx/wl1271_init.c

index 0b34348..4b052ee 100644 (file)
@@ -830,12 +830,14 @@ out:
        return ret;
 }
 
-int wl1271_acx_ac_cfg(struct wl1271 *wl)
+int wl1271_acx_ac_cfg(struct wl1271 *wl, u8 ac, u8 cw_min, u16 cw_max,
+                     u8 aifsn, u16 txop)
 {
        struct acx_ac_cfg *acx;
-       int i, ret = 0;
+       int ret = 0;
 
-       wl1271_debug(DEBUG_ACX, "acx access category config");
+       wl1271_debug(DEBUG_ACX, "acx ac cfg %d cw_ming %d cw_max %d "
+                    "aifs %d txop %d", ac, cw_min, cw_max, aifsn, txop);
 
        acx = kzalloc(sizeof(*acx), GFP_KERNEL);
 
@@ -844,21 +846,16 @@ int wl1271_acx_ac_cfg(struct wl1271 *wl)
                goto out;
        }
 
-       for (i = 0; i < wl->conf.tx.ac_conf_count; i++) {
-               struct conf_tx_ac_category *c = &(wl->conf.tx.ac_conf[i]);
-               acx->ac = c->ac;
-               acx->cw_min = c->cw_min;
-               acx->cw_max = cpu_to_le16(c->cw_max);
-               acx->aifsn = c->aifsn;
-               acx->reserved = 0;
-               acx->tx_op_limit = cpu_to_le16(c->tx_op_limit);
+       acx->ac = ac;
+       acx->cw_min = cw_min;
+       acx->cw_max = cpu_to_le16(cw_max);
+       acx->aifsn = aifsn;
+       acx->tx_op_limit = cpu_to_le16(txop);
 
-               ret = wl1271_cmd_configure(wl, ACX_AC_CFG, acx, sizeof(*acx));
-               if (ret < 0) {
-                       wl1271_warning("Setting of access category "
-                                      "config: %d", ret);
-                       goto out;
-               }
+       ret = wl1271_cmd_configure(wl, ACX_AC_CFG, acx, sizeof(*acx));
+       if (ret < 0) {
+               wl1271_warning("acx ac cfg failed: %d", ret);
+               goto out;
        }
 
 out:
index 1bb63af..e5f5cbd 100644 (file)
@@ -1070,7 +1070,8 @@ int wl1271_acx_cts_protect(struct wl1271 *wl,
                           enum acx_ctsprotect_type ctsprotect);
 int wl1271_acx_statistics(struct wl1271 *wl, struct acx_statistics *stats);
 int wl1271_acx_rate_policies(struct wl1271 *wl);
-int wl1271_acx_ac_cfg(struct wl1271 *wl);
+int wl1271_acx_ac_cfg(struct wl1271 *wl, u8 ac, u8 cw_min, u16 cw_max,
+                     u8 aifsn, u16 txop);
 int wl1271_acx_tid_cfg(struct wl1271 *wl);
 int wl1271_acx_frag_threshold(struct wl1271 *wl);
 int wl1271_acx_tx_config_options(struct wl1271 *wl);
index c9848ee..2b56a9e 100644 (file)
@@ -195,7 +195,8 @@ static int wl1271_init_beacon_broadcast(struct wl1271 *wl)
 
 int wl1271_hw_init(struct wl1271 *wl)
 {
-       int ret;
+       struct conf_tx_ac_category *conf_ac;
+       int ret, i;
 
        ret = wl1271_cmd_general_parms(wl);
        if (ret < 0)
@@ -279,9 +280,14 @@ int wl1271_hw_init(struct wl1271 *wl)
                goto out_free_memmap;
 
        /* Default AC configuration */
-       ret = wl1271_acx_ac_cfg(wl);
-       if (ret < 0)
-               goto out_free_memmap;
+       for (i = 0; i < wl->conf.tx.ac_conf_count; i++) {
+               conf_ac = &wl->conf.tx.ac_conf[i];
+               ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
+                                       conf_ac->cw_max, conf_ac->aifsn,
+                                       conf_ac->tx_op_limit);
+               if (ret < 0)
+                       goto out_free_memmap;
+       }
 
        /* Configure TX rate classes */
        ret = wl1271_acx_rate_policies(wl);