Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp598802pxb; Wed, 27 Jan 2021 16:17:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJwSX+sPVADRmTchQHcRFZaIxJC1NXHI1NkNpiAUC4EtfbZSdaB7jck3A7MDgKra61FXvGbv X-Received: by 2002:a17:906:ff43:: with SMTP id zo3mr8579377ejb.542.1611793064175; Wed, 27 Jan 2021 16:17:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611793064; cv=none; d=google.com; s=arc-20160816; b=ZYrR+2iqATWgUyuoTQRcEaLNUOvCmme2QSe0mhVsUOw55cjf+MGxHRMic1d14NBud6 CzidY3yd6QLbT5J9+oEtPxiPZhH1I4YXngzVFFxAJkVdPbhPnjEy7GTnSR9Vn1KWQztW 2gHLuOf63Vm7oOMFbvLe5ykp/AH6q6iqBstvfUMHkVJhBDA3+CKBCM8GBEYfvTZG9mhX L9iZVMwCvMmMhZKvbbREGUyyK+7r6QtSNdGd7NDjgeVlrAqMHONrbB3lNKFMEbkmHYQB iLpB2/lGqkdu/ahXGqmHRHhUtnb6vlSNrGwmIEYXN4slI+duD+iixokpmohzLqF3bpZX nV/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=5PvJhNC0NNC724F3opyZEzEEAB0Q4CACrrX7bGuLo5c=; b=eAUECIrHiiYTrJtcbH2CDjeAbHK41AzJJPluVHvqRE8Iz9gZk5+kzihfb0DfImpdHH xJwj7AWbiZw4JZydPYgk/GSbM0NmKwFZDmJ+IVOuxNPzzrpUsFgLZ4vfas0mDGPfgzpG rcLyc3LXXbmCOatXoVjGCrLCyaST+Q5Eqk1ApuTOCk5ZpNSrN4dv+FwKFrjuXjI1ymjX 2PSHyBJKXfvj9ZWrdvtRNOFPf/+xKHDa6HHxrLRTGNsnHX2q/FF/40+Loc2dSUAGMs++ lURAhaqnj+vc19nSvji+Qfg46GAF6zMrEntuz83bK92y8e2lpOLCSsmtnrJ0LEEilu7C aRZw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l22si1751371edr.554.2021.01.27.16.17.18; Wed, 27 Jan 2021 16:17:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344535AbhA0Tky (ORCPT + 99 others); Wed, 27 Jan 2021 14:40:54 -0500 Received: from mailgw02.mediatek.com ([210.61.82.184]:49633 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1344559AbhA0TgP (ORCPT ); Wed, 27 Jan 2021 14:36:15 -0500 X-UUID: f1fb414da26748b48932384a1fac45f5-20210128 X-UUID: f1fb414da26748b48932384a1fac45f5-20210128 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 81739046; Thu, 28 Jan 2021 03:34:02 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs01n2.mediatek.inc (172.21.101.79) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 28 Jan 2021 03:34:00 +0800 Received: from mtkswgap22.mediatek.inc (172.21.77.33) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 28 Jan 2021 03:34:00 +0800 From: To: , CC: , , , , , , , , , , , Lorenzo Bianconi Subject: [PATCH -next v8 11/20] mt76: mt7921: introduce beacon_loss mcu event Date: Thu, 28 Jan 2021 03:33:48 +0800 Message-ID: X-Mailer: git-send-email 1.7.9.5 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: F33109D796EF5CC484EAD7FADBD83FD705D80FD40B067BDC49A53B02F2E14BD02000:8 X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Sean Wang If device has enabled beacon hw filter rx beacons are not reported to the host. Introduce beacon_loss mcu event to trigger mac80211 mlme connection state machine in this configuration. IEEE80211_VIF_BEACON_FILTER has not set in vif flags since hw beacon filter is not enabled yet Co-developed-by: Lorenzo Bianconi Signed-off-by: Lorenzo Bianconi Co-developed-by: Soul Huang Signed-off-by: Soul Huang Signed-off-by: Sean Wang --- .../net/wireless/mediatek/mt76/mt7921/mcu.c | 35 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7921/mcu.h | 6 ++++ 2 files changed, 41 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c index 768456c7aa7f..02fde1c63ecf 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c @@ -543,6 +543,40 @@ mt7921_mcu_scan_event(struct mt7921_dev *dev, struct sk_buff *skb) MT7921_HW_SCAN_TIMEOUT); } +static void +mt7921_mcu_beacon_loss_iter(void *priv, u8 *mac, struct ieee80211_vif *vif) +{ + struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv; + struct mt7921_beacon_loss_event *event = priv; + + if (mvif->mt76.idx != event->bss_idx) + return; + + if (!(vif->driver_flags & IEEE80211_VIF_BEACON_FILTER)) + return; + + ieee80211_beacon_loss(vif); +} + +static void +mt7921_mcu_beacon_loss_event(struct mt7921_dev *dev, struct sk_buff *skb) +{ + struct mt7921_beacon_loss_event *event; + struct mt76_phy *mphy; + u8 band_idx = 0; /* DBDC support */ + + skb_pull(skb, sizeof(struct mt7921_mcu_rxd)); + event = (struct mt7921_beacon_loss_event *)skb->data; + if (band_idx && dev->mt76.phy2) + mphy = dev->mt76.phy2; + else + mphy = &dev->mt76.phy; + + ieee80211_iterate_active_interfaces_atomic(mphy->hw, + IEEE80211_IFACE_ITER_RESUME_ALL, + mt7921_mcu_beacon_loss_iter, event); +} + static void mt7921_mcu_bss_event(struct mt7921_dev *dev, struct sk_buff *skb) { @@ -593,6 +627,7 @@ mt7921_mcu_rx_unsolicited_event(struct mt7921_dev *dev, struct sk_buff *skb) switch (rxd->eid) { case MCU_EVENT_BSS_BEACON_LOSS: + mt7921_mcu_beacon_loss_event(dev, skb); break; case MCU_EVENT_SCHED_SCAN_DONE: case MCU_EVENT_SCAN_DONE: diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h index de3a9aabec04..bf2e643cd870 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h @@ -784,6 +784,12 @@ struct mt7921_bss_qos_tlv { u8 pad[3]; } __packed; +struct mt7921_beacon_loss_event { + u8 bss_idx; + u8 reason; + u8 pad[2]; +} __packed; + struct mt7921_mcu_scan_ssid { __le32 ssid_len; u8 ssid[IEEE80211_MAX_SSID_LEN]; -- 2.25.1