]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - wl12xx/wl12xx.git/commitdiff
wl12xx:support ap a2dp coex
authorEyal Reizer <eyalr@ti.com>
Tue, 5 Mar 2013 15:57:32 +0000 (17:57 +0200)
committerVictor Goldenshtein <victorg@ti.com>
Tue, 19 Mar 2013 13:37:02 +0000 (15:37 +0200)
Add functionality to support AP A2DP co-existence:

1. Add configuration for enable/disable of CTS protection in AP mode
2. Add indication for completion of connection establishment in ap
   mode. This is used by the firmware to change coex parameters
   when a station is in the process and connecting to the ap and
   change them back after the connection has been established.

Signed-off-by: Eyal Reizer <eyalr@ti.com>
drivers/net/wireless/wl12xx/acx.c
drivers/net/wireless/wl12xx/acx.h
drivers/net/wireless/wl12xx/main.c

index 56ec78e1478aad585e188d0104ba6108c153fbbc..0f65f7bc5bdd60e0043f2628236f67879092439b 100644 (file)
@@ -1867,3 +1867,23 @@ out:
        kfree(stat_info);
        return ret;
 }
+
+int wl1271_acx_ap_conn_estab_complete(struct wl1271 *wl)
+{
+       struct acx_header_only_cfg *acx;
+       int ret;
+
+       wl1271_debug(DEBUG_ACX, "Sending AP Connection Establishment complete indication");
+
+       acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+       if (!acx)
+               return -ENOMEM;
+
+       ret = wl1271_cmd_configure(wl, ACX_AP_CONN_ESTAB_COMPLETE,
+                                  acx, sizeof(*acx));
+       if (ret < 0)
+               wl1271_warning("failed to send Connection Establishment complete indication: %d", ret);
+
+       kfree(acx);
+       return ret;
+}
index a0c90fbc06fd13c9d20972d95c7c12d4da4e7a07..cdc86e18ab55d6bfcc43f1f9e45760b8e686278f 100644 (file)
@@ -1195,6 +1195,10 @@ struct acx_rx_data_filter_cfg {
        u8 fields[0];
 } __packed;
 
+struct acx_header_only_cfg {
+       struct acx_header header;
+} __packed;
+
 enum {
        ACX_WAKE_UP_CONDITIONS           = 0x0000,
        ACX_MEM_CFG                      = 0x0001,
@@ -1265,6 +1269,7 @@ enum {
        ACX_CONFIG_HANGOVER              = 0x0042,
        ACX_FEATURE_CFG                  = 0x0043,
        ACX_PROTECTION_CFG               = 0x0044,
+       ACX_AP_CONN_ESTAB_COMPLETE       = 0x0045,
 };
 
 
@@ -1359,4 +1364,5 @@ int wl1271_acx_set_rx_data_filter(struct wl1271 *wl, u8 index, bool enable,
                                  struct wl12xx_rx_data_filter *filter);
 int wl12xx_acx_sta_get_rssi(struct wl1271 *wl, struct wl12xx_vif *wlvif,
                            int *rssi);
+int wl1271_acx_ap_conn_estab_complete(struct wl1271 *wl);
 #endif /* __WL1271_ACX_H__ */
index 279a7fac91465059a30f00a5e9ee48cec2bb153a..50d4364f8ed5359fb2f8e113a48c15d032b1ed56 100644 (file)
@@ -108,7 +108,7 @@ static struct conf_drv_settings default_conf = {
                        [CONF_SG_RXT] = 1200,
                        [CONF_SG_TXT] = 1000,
                        [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
-                       [CONF_SG_GENERAL_USAGE_BIT_MAP] = 3,
+                       [CONF_SG_GENERAL_USAGE_BIT_MAP] = 19,
                        [CONF_SG_HV3_MAX_SERVED] = 6,
                        [CONF_SG_PS_POLL_TIMEOUT] = 10,
                        [CONF_SG_UPSD_TIMEOUT] = 10,
@@ -5375,6 +5375,10 @@ static void wl12xx_update_sta_state(struct wl1271 *wl,
                                                     hlid);
                if (ret < 0)
                        return;
+
+               ret = wl1271_acx_ap_conn_estab_complete(wl);
+               if (ret < 0)
+                       return;
        }
 }