From patchwork Mon Apr 20 16:02:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= X-Patchwork-Id: 1273533 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=silabs.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-silabs-onmicrosoft-com header.b=HqqGQUt7; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 495WhZ1KrYz9sSd for ; Tue, 21 Apr 2020 02:03:42 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728339AbgDTQDl (ORCPT ); Mon, 20 Apr 2020 12:03:41 -0400 Received: from mail-dm6nam10on2078.outbound.protection.outlook.com ([40.107.93.78]:42592 "EHLO NAM10-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726973AbgDTQDi (ORCPT ); Mon, 20 Apr 2020 12:03:38 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HEXz+8peau+UYuxV4ZR2fwbFfLeUgR8wCtUxqhvav0TfGLxUkJpXLhMm0WFD61mQs7K8uQu3t+JLUs/X3XT2HZcypa0aUxn8avSmuTG/WMMU5DB6Ni8QQTmxC/+zIOJNaaCD+wfDmngEgBj/uViZh/NNFqjkBEhahfpcMrHRk0Dmoal2gV6l8AmePc5jwIjm8a/qQCUjixCbIp/PXLOEam+yYZzPCPkbeAnbzUYUnYmPsHc8KFBgHeJDyzWRdsJzqW94MqeLZ51oXNjBdDX4HmqM3Uztjg6q4El/AF3fFiXVGgv9RykNkJWYOzLnJWKu3Cs5c1pNrIULuRrARKVlRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4rFrMcu/Tn2AvjEWwiJmrsBWjUUpAZGtbNMnDrXfhUg=; b=OGy+dkqNghVble3mlGE0CoY9tzHnniW0fgjkARP0CCgGc2tHgRLRBz5Dx8TpnfR9IKtOQNMbN7n7xZ/FW8r9fZjROaG1Q3bZo6WSulsfSX5gXHe+qfQzlAzbbxrXO5HLOm5JlVy5GU/z46qVsUFIXv6k18w3rh4gWpU+9XQYjb7ZV5xu7umSNclM501HPV2yESsstpAGjypiKkR5crFcXCNy4N0DEuDYlKcsBiXLNGq3aDXLiz0KlM1EOskwQZWNsab6BCW1cT0FYN3c8Uo3uDQFIATg+r3oTU3/XTZkQFPBF+PlI/sQ0qJeFzV1jGH/frsUrFhnhExi15S8/POFzw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4rFrMcu/Tn2AvjEWwiJmrsBWjUUpAZGtbNMnDrXfhUg=; b=HqqGQUt7EbpcHWaCfbEulOuU65gIGi0yk8ho8f+si5N55WY60iVA0gSpejD/L2P5seKyrhb6/Ti0KZIjHVvxCZlz8WxSpPVlsVMsiw5QvLGgCsdu8r1bYDMBxpv3y00Wgo5JH+bKGxeozGxf6eoT8p7HzTHBGBZpL98DPSWRQ7I= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerome.Pouiller@silabs.com; Received: from MWHPR11MB1775.namprd11.prod.outlook.com (2603:10b6:300:10e::14) by MWHPR11MB1792.namprd11.prod.outlook.com (2603:10b6:300:10b::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.29; Mon, 20 Apr 2020 16:03:32 +0000 Received: from MWHPR11MB1775.namprd11.prod.outlook.com ([fe80::81d5:b62b:3770:ffbe]) by MWHPR11MB1775.namprd11.prod.outlook.com ([fe80::81d5:b62b:3770:ffbe%10]) with mapi id 15.20.2921.030; Mon, 20 Apr 2020 16:03:32 +0000 From: Jerome Pouiller To: devel@driverdev.osuosl.org, linux-wireless@vger.kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= Subject: [PATCH 02/16] staging: wfx: use ieee80211_beacon_loss() provided by mac80211 Date: Mon, 20 Apr 2020 18:02:57 +0200 Message-Id: <20200420160311.57323-3-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.26.1 In-Reply-To: <20200420160311.57323-1-Jerome.Pouiller@silabs.com> References: <20200420160311.57323-1-Jerome.Pouiller@silabs.com> X-ClientProxiedBy: DM6PR07CA0065.namprd07.prod.outlook.com (2603:10b6:5:74::42) To MWHPR11MB1775.namprd11.prod.outlook.com (2603:10b6:300:10e::14) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (2a01:e35:2435:66a0:544b:f17b:7ae8:fb7) by DM6PR07CA0065.namprd07.prod.outlook.com (2603:10b6:5:74::42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.26 via Frontend Transport; Mon, 20 Apr 2020 16:03:30 +0000 X-Mailer: git-send-email 2.26.1 X-Originating-IP: [2a01:e35:2435:66a0:544b:f17b:7ae8:fb7] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1e5398b1-a095-43d0-76f3-08d7e5445f57 X-MS-TrafficTypeDiagnostic: MWHPR11MB1792: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2733; X-Forefront-PRVS: 03793408BA X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1775.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(10009020)(39850400004)(346002)(376002)(366004)(396003)(136003)(66476007)(66556008)(186003)(66946007)(4326008)(86362001)(16526019)(107886003)(6666004)(81156014)(7696005)(478600001)(52116002)(8676002)(66574012)(54906003)(316002)(6486002)(1076003)(2616005)(36756003)(8936002)(5660300002)(2906002);DIR:OUT;SFP:1101; Received-SPF: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5nX6MqCZSajDJnU/VITWx3jArImCZDYQPXI8MJ9RPqmDyoDReblNeDx5AK+mbmCLq18PlzWHbTqUovYMGKGNZ8Squ2x6cHKS0+xpZmWPCcQB+jveWTNfJeyBw61/Lnc/1VpP6lg5uXleBOyqxCK6Th5TACgttPxMAV2mqu3rucTJ62D8CtyptM0B416GnQN+RE9eKE3y/Kr1hmZ0W5xBWPxlwjUQ/oMH834viMWuK82Xac/jMPGCn6pwORt6IPjR1Fu4plAfmtzd/CLf4mp+qFMyq7dNdiP9HKc1f0ErEmgsU18NUzGcxT1rpEb56GVllIdXIILe5DYFmrkP+Dh7AnikcPFwvuLcvjXlv7h6tBSQ68X5LXOzfuJhY/JV41dLugcIBNfXvcBwh5TcuaJSjPV67zxvx2gnEjgx9Jt9nBlPSbUI/NLuc9zlpQf47pah X-MS-Exchange-AntiSpam-MessageData: d53S+KlMjAKWPh+Txa3yDmYQiIcjNcH0YzOYLcVIs7yV1eyg/BMcFh7gsLae1U4GCaOMsMKZ5KUDAoZ8Di65sAl6eaNVVN1RdCXm+ScKE4MpuMgqBpI99asQx1TK8e2RfZesD5gVDur8TtWQK2zaXOG6F8DEd7klH8qI97t8VChfxVFpTbVOgc2ufxylwskc8lLXmoITa4AA3ojdyLt8vE8Ilndpr2klxLCFZI0mJHH6ITLBBd2M3v6+bZDVRTte8yWLb709g3PqiKpXbu5UXb6UfjYWxq+bgPwGPl/+/NqAXqlx2jHaCkZ91XwfQS9d7pPINx8PMtLW7hbN0hJZkf2R9y5zXjku+eT8igNmbLmMr7AjiJOSLEAjKxbZrG3OQUoddA8S7PIyY9/4V68Hwxv0wZmJ7lkf6WS8JLwv36rSsESDg9vYdqOfvt6uHRi6Z9LLW52M5/p26Xjzmz63pZ6aKjXQ/CdIMyyXNXp4HDcaLA9U3pEqaf7fsejxX4jSiXMownl0ol37zRYR5SUuPbBRkzbfNz0XjtZWXlo/mSR5mcextFc/vq0yy7e3Je7wSdH5HFnsgRcGiZI0v0yeWCoGIiLNmbWJImw0oTOyoAY4T6G3YDHbbaSRkHxUQlBILjT3aZUm7ErtxRzCJ648b+vov2ChPaUYCVnp0JGLqIe2N2iw7LjI+a0HaShLV/UYOEJ169is9GGE3xD79quazle5xNDqoChSQntsbFy94Ij47VSougo6Bf/8hOPBujbCcNuVyxiU1HU0QjhGeN/LFnqXdfQjdnA2sP4FGNOYnQSv+vUPVKz8m0P3PQwbzkzSOAfPHG0raybLjwOngpa9u6Jp6kowOE8YOR1UL/wZC2s= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e5398b1-a095-43d0-76f3-08d7e5445f57 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2020 16:03:32.1086 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9Lf1l+zU81nvD2qPLMU8D2bTncwhh2IGw89Wv+uxZQghAy5iNsyP2aC2NM/lz/MZKdYJ1PpLQAZxIA7jjrDSzQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1792 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jérôme Pouiller The firmware is able to filter beacons and send a notification if one or multiple beacons are not received. Note that it send this notification only once. Only if it receive beacons gain, it send a new notification. Currently, the driver handle the connection loss itself (see wfx_cqm_bssloss_sm()). It send null frames and watch the answers. This patch fixes all this mess: - settle firmware to send a notification on the first beacon loss - call ieee80211_beacon_loss() and let mac80211 handle all the process - since we do have notification for each beacon loss, add a period task that call ieee80211_beacon_loss() until we receive "REGAIN" notification. Thus, we can drop the ugly wfx_cqm_bssloss_sm() and wfx_bss_params_work(). Signed-off-by: Jérôme Pouiller --- drivers/staging/wfx/data_tx.c | 7 --- drivers/staging/wfx/queue.c | 11 ---- drivers/staging/wfx/sta.c | 106 ++++++---------------------------- drivers/staging/wfx/sta.h | 1 - drivers/staging/wfx/wfx.h | 7 +-- 5 files changed, 20 insertions(+), 112 deletions(-) diff --git a/drivers/staging/wfx/data_tx.c b/drivers/staging/wfx/data_tx.c index c30e4f5b6e2d..9c1a91207dd8 100644 --- a/drivers/staging/wfx/data_tx.c +++ b/drivers/staging/wfx/data_tx.c @@ -547,9 +547,6 @@ void wfx_tx_confirm_cb(struct wfx_vif *wvif, const struct hif_cnf_tx *arg) memset(tx_info->pad, 0, sizeof(tx_info->pad)); if (!arg->status) { - if (wvif->bss_loss_state && - arg->packet_id == wvif->bss_loss_confirm_id) - wfx_cqm_bssloss_sm(wvif, 0, 1, 0); tx_info->status.tx_time = arg->media_delay - arg->tx_queue_delay; if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK) @@ -563,10 +560,6 @@ void wfx_tx_confirm_cb(struct wfx_vif *wvif, const struct hif_cnf_tx *arg) schedule_work(&wvif->update_tim_work); } tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED; - } else { - if (wvif->bss_loss_state && - arg->packet_id == wvif->bss_loss_confirm_id) - wfx_cqm_bssloss_sm(wvif, 0, 0, 1); } wfx_skb_dtor(wvif->wdev, skb); } diff --git a/drivers/staging/wfx/queue.c b/drivers/staging/wfx/queue.c index e6d7d0e45156..e9573e9d009f 100644 --- a/drivers/staging/wfx/queue.c +++ b/drivers/staging/wfx/queue.c @@ -266,17 +266,6 @@ static bool wfx_handle_tx_data(struct wfx_dev *wdev, struct sk_buff *skb) if (!wvif) return false; - // FIXME: mac80211 is smart enough to handle BSS loss. Driver should not - // try to do anything about that. - if (ieee80211_is_nullfunc(frame->frame_control)) { - mutex_lock(&wvif->bss_loss_lock); - if (wvif->bss_loss_state) { - wvif->bss_loss_confirm_id = req->packet_id; - req->queue_id.queue_id = HIF_QUEUE_ID_VOICE; - } - mutex_unlock(&wvif->bss_loss_lock); - } - // FIXME: identify the exact scenario matched by this condition. Does it // happen yet? if (ieee80211_has_protected(frame->frame_control) && diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c index c0c3eb945967..ca84724e531c 100644 --- a/drivers/staging/wfx/sta.c +++ b/drivers/staging/wfx/sta.c @@ -59,60 +59,6 @@ static void wfx_free_event_queue(struct wfx_vif *wvif) __wfx_free_event_queue(&list); } -void wfx_cqm_bssloss_sm(struct wfx_vif *wvif, int init, int good, int bad) -{ - int tx = 0; - - mutex_lock(&wvif->bss_loss_lock); - cancel_work_sync(&wvif->bss_params_work); - - if (init) { - schedule_delayed_work(&wvif->bss_loss_work, HZ); - wvif->bss_loss_state = 0; - - if (!atomic_read(&wvif->wdev->tx_lock)) - tx = 1; - } else if (good) { - cancel_delayed_work_sync(&wvif->bss_loss_work); - wvif->bss_loss_state = 0; - schedule_work(&wvif->bss_params_work); - } else if (bad) { - /* FIXME Should we just keep going until we time out? */ - if (wvif->bss_loss_state < 3) - tx = 1; - } else { - cancel_delayed_work_sync(&wvif->bss_loss_work); - wvif->bss_loss_state = 0; - } - - /* Spit out a NULL packet to our AP if necessary */ - // FIXME: call ieee80211_beacon_loss/ieee80211_connection_loss instead - if (tx) { - struct sk_buff *skb; - struct ieee80211_hdr *hdr; - struct ieee80211_tx_control control = { }; - - wvif->bss_loss_state++; - - skb = ieee80211_nullfunc_get(wvif->wdev->hw, wvif->vif, false); - if (!skb) - goto end; - hdr = (struct ieee80211_hdr *)skb->data; - memset(IEEE80211_SKB_CB(skb), 0, - sizeof(*IEEE80211_SKB_CB(skb))); - IEEE80211_SKB_CB(skb)->control.vif = wvif->vif; - IEEE80211_SKB_CB(skb)->driver_rates[0].idx = 0; - IEEE80211_SKB_CB(skb)->driver_rates[0].count = 1; - IEEE80211_SKB_CB(skb)->driver_rates[1].idx = -1; - rcu_read_lock(); // protect control.sta - control.sta = ieee80211_find_sta(wvif->vif, hdr->addr1); - wfx_tx(wvif->wdev->hw, &control, skb); - rcu_read_unlock(); - } -end: - mutex_unlock(&wvif->bss_loss_lock); -} - static void wfx_filter_beacon(struct wfx_vif *wvif, bool filter_beacon) { const struct hif_ie_table_entry filter_ies[] = { @@ -339,6 +285,17 @@ static void wfx_event_report_rssi(struct wfx_vif *wvif, u8 raw_rcpi_rssi) ieee80211_cqm_rssi_notify(wvif->vif, cqm_evt, rcpi_rssi, GFP_KERNEL); } +static void wfx_beacon_loss_work(struct work_struct *work) +{ + struct wfx_vif *wvif = container_of(to_delayed_work(work), + struct wfx_vif, beacon_loss_work); + struct ieee80211_bss_conf *bss_conf = &wvif->vif->bss_conf; + + ieee80211_beacon_loss(wvif->vif); + schedule_delayed_work(to_delayed_work(work), + msecs_to_jiffies(bss_conf->beacon_int)); +} + static void wfx_event_handler_work(struct work_struct *work) { struct wfx_vif *wvif = @@ -354,12 +311,10 @@ static void wfx_event_handler_work(struct work_struct *work) list_for_each_entry(event, &list, link) { switch (event->evt.event_id) { case HIF_EVENT_IND_BSSLOST: - mutex_lock(&wvif->scan_lock); - wfx_cqm_bssloss_sm(wvif, 1, 0, 0); - mutex_unlock(&wvif->scan_lock); + schedule_delayed_work(&wvif->beacon_loss_work, 0); break; case HIF_EVENT_IND_BSSREGAINED: - wfx_cqm_bssloss_sm(wvif, 0, 0, 0); + cancel_delayed_work(&wvif->beacon_loss_work); break; case HIF_EVENT_IND_RCPI_RSSI: wfx_event_report_rssi(wvif, @@ -379,26 +334,6 @@ static void wfx_event_handler_work(struct work_struct *work) __wfx_free_event_queue(&list); } -static void wfx_bss_loss_work(struct work_struct *work) -{ - struct wfx_vif *wvif = container_of(work, struct wfx_vif, - bss_loss_work.work); - - ieee80211_connection_loss(wvif->vif); -} - -static void wfx_bss_params_work(struct work_struct *work) -{ - struct wfx_vif *wvif = container_of(work, struct wfx_vif, - bss_params_work); - - mutex_lock(&wvif->wdev->conf_mutex); - wvif->bss_params.bss_flags.lost_count_only = 1; - hif_set_bss_params(wvif, &wvif->bss_params); - wvif->bss_params.bss_flags.lost_count_only = 0; - mutex_unlock(&wvif->wdev->conf_mutex); -} - // Call it with wdev->conf_mutex locked static void wfx_do_unjoin(struct wfx_vif *wvif) { @@ -418,10 +353,10 @@ static void wfx_do_unjoin(struct wfx_vif *wvif) hif_set_block_ack_policy(wvif, 0xFF, 0xFF); wfx_free_event_queue(wvif); cancel_work_sync(&wvif->event_handler_work); - wfx_cqm_bssloss_sm(wvif, 0, 0, 0); memset(&wvif->bss_params, 0, sizeof(wvif->bss_params)); wfx_tx_unlock(wvif->wdev); + cancel_delayed_work_sync(&wvif->beacon_loss_work); } static void wfx_set_mfp(struct wfx_vif *wvif, @@ -615,9 +550,9 @@ static void wfx_join_finalize(struct wfx_vif *wvif, else hif_dual_cts_protection(wvif, false); - wfx_cqm_bssloss_sm(wvif, 0, 0, 0); - - wvif->bss_params.beacon_lost_count = 20; + // beacon_loss_count is defined to 7 in net/mac80211/mlme.c. Let's use + // the same value. + wvif->bss_params.beacon_lost_count = 7; wvif->bss_params.aid = info->aid; hif_set_association_mode(wvif, info); @@ -904,12 +839,10 @@ int wfx_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) wvif->link_id_map = 1; // link-id 0 is reserved for multicast INIT_WORK(&wvif->update_tim_work, wfx_update_tim_work); + INIT_DELAYED_WORK(&wvif->beacon_loss_work, wfx_beacon_loss_work); memset(&wvif->bss_params, 0, sizeof(wvif->bss_params)); - mutex_init(&wvif->bss_loss_lock); - INIT_DELAYED_WORK(&wvif->bss_loss_work, wfx_bss_loss_work); - wvif->wep_default_key_id = -1; INIT_WORK(&wvif->wep_key_work, wfx_wep_key_work); @@ -919,7 +852,6 @@ int wfx_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) init_completion(&wvif->set_pm_mode_complete); complete(&wvif->set_pm_mode_complete); - INIT_WORK(&wvif->bss_params_work, wfx_bss_params_work); INIT_WORK(&wvif->tx_policy_upload_work, wfx_tx_policy_upload_work); mutex_init(&wvif->scan_lock); @@ -974,8 +906,8 @@ void wfx_remove_interface(struct ieee80211_hw *hw, /* FIXME: In add to reset MAC address, try to reset interface */ hif_set_macaddr(wvif, NULL); - wfx_cqm_bssloss_sm(wvif, 0, 0, 0); wfx_free_event_queue(wvif); + cancel_delayed_work_sync(&wvif->beacon_loss_work); wdev->vif[wvif->id] = NULL; wvif->vif = NULL; diff --git a/drivers/staging/wfx/sta.h b/drivers/staging/wfx/sta.h index 31097057563a..6d7734c65902 100644 --- a/drivers/staging/wfx/sta.h +++ b/drivers/staging/wfx/sta.h @@ -81,7 +81,6 @@ void wfx_unassign_vif_chanctx(struct ieee80211_hw *hw, void wfx_suspend_resume_mc(struct wfx_vif *wvif, enum sta_notify_cmd cmd); // Other Helpers -void wfx_cqm_bssloss_sm(struct wfx_vif *wvif, int init, int good, int bad); u32 wfx_rate_mask_to_hw(struct wfx_dev *wdev, u32 rates); #endif /* WFX_STA_H */ diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h index b5d2d0f07740..2747c7cdf4d1 100644 --- a/drivers/staging/wfx/wfx.h +++ b/drivers/staging/wfx/wfx.h @@ -69,14 +69,10 @@ struct wfx_vif { int id; enum wfx_state state; - int bss_loss_state; - u32 bss_loss_confirm_id; - struct mutex bss_loss_lock; - struct delayed_work bss_loss_work; - u32 link_id_map; bool after_dtim_tx_allowed; + struct delayed_work beacon_loss_work; s8 wep_default_key_id; struct sk_buff *wep_pending_skb; @@ -92,7 +88,6 @@ struct wfx_vif { unsigned long uapsd_mask; struct hif_req_set_bss_params bss_params; - struct work_struct bss_params_work; int join_complete_status;