wl12xx: move dev_hlid into wlvif
authorEliad Peller <eliad@wizery.com>
Wed, 5 Oct 2011 09:55:57 +0000 (11:55 +0200)
committerLuciano Coelho <coelho@ti.com>
Fri, 7 Oct 2011 05:32:47 +0000 (08:32 +0300)
move dev_hlid into the per-interface data, rather than
being global.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/wl12xx/cmd.c
drivers/net/wireless/wl12xx/main.c
drivers/net/wireless/wl12xx/tx.c
drivers/net/wireless/wl12xx/wl12xx.h

index 89d263e7b569308587ba9239c0ac399819fa0dfa..166d984cb5af243b9adaef2c45f262b8a9d2d06f 100644 (file)
@@ -483,12 +483,12 @@ int wl12xx_cmd_role_start_dev(struct wl1271 *wl, struct wl12xx_vif *wlvif)
                cmd->band = WL12XX_BAND_5GHZ;
        cmd->channel = wl->channel;
 
-       if (wl->dev_hlid == WL12XX_INVALID_LINK_ID) {
-               ret = wl12xx_allocate_link(wl, &wl->dev_hlid);
+       if (wlvif->dev_hlid == WL12XX_INVALID_LINK_ID) {
+               ret = wl12xx_allocate_link(wl, &wlvif->dev_hlid);
                if (ret)
                        goto out_free;
        }
-       cmd->device.hlid = wl->dev_hlid;
+       cmd->device.hlid = wlvif->dev_hlid;
        cmd->device.session = wlvif->session_counter;
 
        wl1271_debug(DEBUG_CMD, "role start: roleid=%d, hlid=%d, session=%d",
@@ -504,9 +504,7 @@ int wl12xx_cmd_role_start_dev(struct wl1271 *wl, struct wl12xx_vif *wlvif)
 
 err_hlid:
        /* clear links on error */
-       __clear_bit(wl->dev_hlid, wl->links_map);
-       wl->dev_hlid = WL12XX_INVALID_LINK_ID;
-
+       wl12xx_free_link(wl, &wlvif->dev_hlid);
 
 out_free:
        kfree(cmd);
@@ -520,7 +518,7 @@ int wl12xx_cmd_role_stop_dev(struct wl1271 *wl, struct wl12xx_vif *wlvif)
        struct wl12xx_cmd_role_stop *cmd;
        int ret;
 
-       if (WARN_ON(wl->dev_hlid == WL12XX_INVALID_LINK_ID))
+       if (WARN_ON(wlvif->dev_hlid == WL12XX_INVALID_LINK_ID))
                return -EINVAL;
 
        cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
@@ -547,7 +545,7 @@ int wl12xx_cmd_role_stop_dev(struct wl1271 *wl, struct wl12xx_vif *wlvif)
                goto out_free;
        }
 
-       wl12xx_free_link(wl, &wl->dev_hlid);
+       wl12xx_free_link(wl, &wlvif->dev_hlid);
 
 out_free:
        kfree(cmd);
index effba53eb3f4b3b4a2018f54fdffe232ba50f2eb..e8d73d70cedf53962bd997de734fbdab7f8d4d3c 100644 (file)
@@ -1884,6 +1884,7 @@ static int wl12xx_init_vif_data(struct ieee80211_vif *vif)
 
        wlvif->role_id = WL12XX_INVALID_ROLE_ID;
        wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID;
+       wlvif->dev_hlid = WL12XX_INVALID_LINK_ID;
 
        if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
            wlvif->bss_type == BSS_TYPE_IBSS) {
@@ -2103,7 +2104,7 @@ static void __wl1271_op_remove_interface(struct wl1271 *wl,
 deinit:
        /* clear all hlids (except system_hlid) */
        wlvif->sta.hlid = WL12XX_INVALID_LINK_ID;
-       wl->dev_hlid = WL12XX_INVALID_LINK_ID;
+       wlvif->dev_hlid = WL12XX_INVALID_LINK_ID;
        wlvif->ap.bcast_hlid = WL12XX_INVALID_LINK_ID;
        wlvif->ap.global_hlid = WL12XX_INVALID_LINK_ID;
 
@@ -4908,7 +4909,6 @@ struct ieee80211_hw *wl1271_alloc_hw(void)
        wl->tx_security_last_seq_lsb = 0;
        wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
        wl->system_hlid = WL12XX_SYSTEM_HLID;
-       wl->dev_hlid = WL12XX_INVALID_LINK_ID;
        wl->active_sta_count = 0;
        setup_timer(&wl->rx_streaming_timer, wl1271_rx_streaming_timer,
                    (unsigned long) wl);
index da8427f5d7a8316fad6d5f0c992284e1e36439d4..8db68c649437f07cdf93ec364c7dd4a2ea7ab888 100644 (file)
@@ -94,7 +94,7 @@ static int wl1271_tx_update_filters(struct wl1271 *wl,
        if (!ieee80211_is_auth(hdr->frame_control))
                return 0;
 
-       if (wl->dev_hlid != WL12XX_INVALID_LINK_ID)
+       if (wlvif->dev_hlid != WL12XX_INVALID_LINK_ID)
                goto out;
 
        wl1271_debug(DEBUG_CMD, "starting device role for roaming");
@@ -202,7 +202,7 @@ static u8 wl1271_tx_get_hlid(struct wl1271 *wl, struct ieee80211_vif *vif,
            !ieee80211_is_assoc_req(hdr->frame_control))
                return wlvif->sta.hlid;
        else
-               return wl->dev_hlid;
+               return wlvif->dev_hlid;
 }
 
 static unsigned int wl12xx_calc_packet_alignment(struct wl1271 *wl,
index 9fcaa03cd737fbcd244503f4d07ca34bf1bce475..752b6b99210c81775f86481a9c49b294932c8f87 100644 (file)
@@ -402,7 +402,6 @@ struct wl1271 {
        u8 mac_addr[ETH_ALEN];
        int channel;
        u8 system_hlid;
-       u8 dev_hlid;
 
        unsigned long links_map[BITS_TO_LONGS(WL12XX_MAX_LINKS)];
        unsigned long roles_map[BITS_TO_LONGS(WL12XX_MAX_ROLES)];
@@ -617,6 +616,7 @@ struct wl12xx_vif {
 
        /* sta/ibss specific */
        u8 dev_role_id;
+       u8 dev_hlid;
 
        union {
                struct {