From: <sean.wang@mediatek.com> To: <nbd@nbd.name>, <lorenzo.bianconi@redhat.com> Cc: <sean.wang@mediatek.com>, <Soul.Huang@mediatek.com>, <YN.Chen@mediatek.com>, <robin.chiu@mediatek.com>, <ch.yeh@mediatek.com>, <posh.sun@mediatek.com>, <Eric.Liang@mediatek.com>, <Stella.Chang@mediatek.com>, <Ryder.Lee@mediatek.com>, <linux-wireless@vger.kernel.org>, <linux-mediatek@lists.infradead.org>, Lorenzo Bianconi <lorenzo@kernel.org> Subject: [PATCH -next v8 08/20] mt76: mt7921: introduce schedule scan support Date: Thu, 28 Jan 2021 03:33:45 +0800 [thread overview] Message-ID: <a26b11b405013edd68c7d2903c8ee3bc61221f2a.1611774181.git.objelf@gmail.com> (raw) In-Reply-To: <cover.1611774181.git.objelf@gmail.com> From: Sean Wang <sean.wang@mediatek.com> introduce schedule scan to control mt7921 firmware to do background scan in defined plan to see if the matched SSID is available. Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Co-developed-by: Soul Huang <Soul.Huang@mediatek.com> Signed-off-by: Soul Huang <Soul.Huang@mediatek.com> Signed-off-by: Sean Wang <sean.wang@mediatek.com> --- .../net/wireless/mediatek/mt76/mt7921/init.c | 5 ++ .../net/wireless/mediatek/mt76/mt7921/main.c | 38 +++++++++ .../net/wireless/mediatek/mt76/mt7921/mcu.c | 83 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7921/mcu.h | 20 +++++ .../wireless/mediatek/mt76/mt7921/mt7921.h | 9 ++ 5 files changed, 155 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c index 1ce87a4bfdd9..14d78370d525 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c @@ -70,6 +70,11 @@ mt7921_init_wiphy(struct ieee80211_hw *hw) wiphy->n_iface_combinations = ARRAY_SIZE(if_comb); wiphy->max_scan_ie_len = MT7921_SCAN_IE_LEN; wiphy->max_scan_ssids = 4; + wiphy->max_sched_scan_plan_interval = MT7921_MAX_SCHED_SCAN_INTERVAL; + wiphy->max_sched_scan_ie_len = IEEE80211_MAX_DATA_LEN; + wiphy->max_sched_scan_ssids = MT7921_MAX_SCHED_SCAN_SSID; + wiphy->max_match_sets = MT7921_MAX_SCAN_MATCH; + wiphy->max_sched_scan_reqs = 1; wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH; wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_SET_SCAN_DWELL); diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c index ed82dc193bf3..018025a666a2 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c @@ -868,6 +868,42 @@ mt7921_cancel_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif) mutex_unlock(&dev->mt76.mutex); } +static int +mt7921_start_sched_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif, + struct cfg80211_sched_scan_request *req, + struct ieee80211_scan_ies *ies) +{ + struct mt7921_dev *dev = mt7921_hw_dev(hw); + struct mt76_phy *mphy = hw->priv; + int err; + + mutex_lock(&dev->mt76.mutex); + + err = mt7921_mcu_sched_scan_req(mphy->priv, vif, req); + if (err < 0) + goto out; + + err = mt7921_mcu_sched_scan_enable(mphy->priv, vif, true); +out: + mutex_unlock(&dev->mt76.mutex); + + return err; +} + +static int +mt7921_stop_sched_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +{ + struct mt7921_dev *dev = mt7921_hw_dev(hw); + struct mt76_phy *mphy = hw->priv; + int err; + + mutex_lock(&dev->mt76.mutex); + err = mt7921_mcu_sched_scan_enable(mphy->priv, vif, false); + mutex_unlock(&dev->mt76.mutex); + + return err; +} + static int mt7921_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant) { @@ -957,4 +993,6 @@ const struct ieee80211_ops mt7921_ops = { .hw_scan = mt7921_hw_scan, .cancel_hw_scan = mt7921_cancel_hw_scan, .sta_statistics = mt7921_sta_statistics, + .sched_scan_start = mt7921_start_sched_scan, + .sched_scan_stop = mt7921_stop_sched_scan, }; diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c index ee4b52558974..6f2b4086ca81 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c @@ -2361,6 +2361,89 @@ int mt7921_mcu_cancel_hw_scan(struct mt7921_phy *phy, sizeof(req), false); } +int mt7921_mcu_sched_scan_req(struct mt7921_phy *phy, + struct ieee80211_vif *vif, + struct cfg80211_sched_scan_request *sreq) +{ + struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv; + struct ieee80211_channel **scan_list = sreq->channels; + struct mt7921_dev *dev = phy->dev; + struct mt7921_mcu_scan_channel *chan; + struct mt7921_sched_scan_req *req; + struct cfg80211_match_set *match; + struct cfg80211_ssid *ssid; + struct sk_buff *skb; + int i; + + skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, + sizeof(*req) + sreq->ie_len); + if (!skb) + return -ENOMEM; + + mvif->mt76.scan_seq_num = (mvif->mt76.scan_seq_num + 1) & 0x7f; + + req = (struct mt7921_sched_scan_req *)skb_put(skb, sizeof(*req)); + req->version = 1; + req->seq_num = mvif->mt76.scan_seq_num; + + req->ssids_num = sreq->n_ssids; + for (i = 0; i < req->ssids_num; i++) { + ssid = &sreq->ssids[i]; + memcpy(req->ssids[i].ssid, ssid->ssid, ssid->ssid_len); + req->ssids[i].ssid_len = cpu_to_le32(ssid->ssid_len); + } + + req->match_num = sreq->n_match_sets; + for (i = 0; i < req->match_num; i++) { + match = &sreq->match_sets[i]; + memcpy(req->match[i].ssid, match->ssid.ssid, + match->ssid.ssid_len); + req->match[i].rssi_th = cpu_to_le32(match->rssi_thold); + req->match[i].ssid_len = match->ssid.ssid_len; + } + + req->channel_type = sreq->n_channels ? 4 : 0; + req->channels_num = min_t(u8, sreq->n_channels, 64); + for (i = 0; i < req->channels_num; i++) { + chan = &req->channels[i]; + chan->band = scan_list[i]->band == NL80211_BAND_2GHZ ? 1 : 2; + chan->channel_num = scan_list[i]->hw_value; + } + + req->intervals_num = sreq->n_scan_plans; + for (i = 0; i < req->intervals_num; i++) + req->intervals[i] = cpu_to_le16(sreq->scan_plans[i].interval); + + if (sreq->ie_len > 0) { + req->ie_len = cpu_to_le16(sreq->ie_len); + memcpy(skb_put(skb, sreq->ie_len), sreq->ie, sreq->ie_len); + } + + return mt76_mcu_skb_send_msg(&dev->mt76, skb, MCU_CMD_SCHED_SCAN_REQ, + false); +} + +int mt7921_mcu_sched_scan_enable(struct mt7921_phy *phy, + struct ieee80211_vif *vif, + bool enable) +{ + struct mt7921_dev *dev = phy->dev; + struct { + u8 active; /* 0: enabled 1: disabled */ + u8 rsv[3]; + } __packed req = { + .active = !enable, + }; + + if (enable) + set_bit(MT76_HW_SCHED_SCANNING, &phy->mt76->state); + else + clear_bit(MT76_HW_SCHED_SCANNING, &phy->mt76->state); + + return mt76_mcu_send_msg(&dev->mt76, MCU_CMD_SCHED_SCAN_ENABLE, &req, + sizeof(req), false); +} + u32 mt7921_get_wtbl_info(struct mt7921_dev *dev, u16 wlan_idx) { struct mt7921_mcu_wlan_info wtbl_info = { diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h index 96eecea22d94..6894b44ff62d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h @@ -879,6 +879,26 @@ struct mt7921_hw_scan_done { __le32 beacon_5g_num; } __packed; +struct mt7921_sched_scan_req { + u8 version; + u8 seq_num; + u8 stop_on_match; + u8 ssids_num; + u8 match_num; + u8 pad; + __le16 ie_len; + struct mt7921_mcu_scan_ssid ssids[MT7921_MAX_SCHED_SCAN_SSID]; + struct mt7921_mcu_scan_match match[MT7921_MAX_SCAN_MATCH]; + u8 channel_type; + u8 channels_num; + u8 intervals_num; + u8 scan_func; + struct mt7921_mcu_scan_channel channels[64]; + __le16 intervals[MT7921_MAX_SCHED_SCAN_INTERVAL]; + u8 bss_idx; + u8 pad2[64]; +} __packed; + struct mt7921_mcu_bss_event { u8 bss_idx; u8 is_absent; diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h index b08ece8544ff..8cd9d3e214ed 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h @@ -44,6 +44,9 @@ #define MT7921_SKU_TABLE_SIZE (MT7921_SKU_RATE_NUM + 1) #define MT7921_SCAN_IE_LEN 600 +#define MT7921_MAX_SCHED_SCAN_INTERVAL 10 +#define MT7921_MAX_SCHED_SCAN_SSID 10 +#define MT7921_MAX_SCAN_MATCH 16 struct mt7921_vif; struct mt7921_sta; @@ -343,6 +346,12 @@ void mt7921_scan_work(struct work_struct *work); int mt7921_mcu_set_channel_domain(struct mt7921_phy *phy); int mt7921_mcu_hw_scan(struct mt7921_phy *phy, struct ieee80211_vif *vif, struct ieee80211_scan_request *scan_req); +int mt7921_mcu_sched_scan_req(struct mt7921_phy *phy, + struct ieee80211_vif *vif, + struct cfg80211_sched_scan_request *sreq); +int mt7921_mcu_sched_scan_enable(struct mt7921_phy *phy, + struct ieee80211_vif *vif, + bool enable); int mt7921_mcu_cancel_hw_scan(struct mt7921_phy *phy, struct ieee80211_vif *vif); u32 mt7921_get_wtbl_info(struct mt7921_dev *dev, u16 wlan_idx); -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: <sean.wang@mediatek.com> To: <nbd@nbd.name>, <lorenzo.bianconi@redhat.com> Cc: Ryder.Lee@mediatek.com, robin.chiu@mediatek.com, ch.yeh@mediatek.com, Eric.Liang@mediatek.com, sean.wang@mediatek.com, linux-wireless@vger.kernel.org, posh.sun@mediatek.com, YN.Chen@mediatek.com, linux-mediatek@lists.infradead.org, Soul.Huang@mediatek.com, Lorenzo Bianconi <lorenzo@kernel.org>, Stella.Chang@mediatek.com Subject: [PATCH -next v8 08/20] mt76: mt7921: introduce schedule scan support Date: Thu, 28 Jan 2021 03:33:45 +0800 [thread overview] Message-ID: <a26b11b405013edd68c7d2903c8ee3bc61221f2a.1611774181.git.objelf@gmail.com> (raw) In-Reply-To: <cover.1611774181.git.objelf@gmail.com> From: Sean Wang <sean.wang@mediatek.com> introduce schedule scan to control mt7921 firmware to do background scan in defined plan to see if the matched SSID is available. Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Co-developed-by: Soul Huang <Soul.Huang@mediatek.com> Signed-off-by: Soul Huang <Soul.Huang@mediatek.com> Signed-off-by: Sean Wang <sean.wang@mediatek.com> --- .../net/wireless/mediatek/mt76/mt7921/init.c | 5 ++ .../net/wireless/mediatek/mt76/mt7921/main.c | 38 +++++++++ .../net/wireless/mediatek/mt76/mt7921/mcu.c | 83 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7921/mcu.h | 20 +++++ .../wireless/mediatek/mt76/mt7921/mt7921.h | 9 ++ 5 files changed, 155 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c index 1ce87a4bfdd9..14d78370d525 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c @@ -70,6 +70,11 @@ mt7921_init_wiphy(struct ieee80211_hw *hw) wiphy->n_iface_combinations = ARRAY_SIZE(if_comb); wiphy->max_scan_ie_len = MT7921_SCAN_IE_LEN; wiphy->max_scan_ssids = 4; + wiphy->max_sched_scan_plan_interval = MT7921_MAX_SCHED_SCAN_INTERVAL; + wiphy->max_sched_scan_ie_len = IEEE80211_MAX_DATA_LEN; + wiphy->max_sched_scan_ssids = MT7921_MAX_SCHED_SCAN_SSID; + wiphy->max_match_sets = MT7921_MAX_SCAN_MATCH; + wiphy->max_sched_scan_reqs = 1; wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH; wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_SET_SCAN_DWELL); diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c index ed82dc193bf3..018025a666a2 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c @@ -868,6 +868,42 @@ mt7921_cancel_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif) mutex_unlock(&dev->mt76.mutex); } +static int +mt7921_start_sched_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif, + struct cfg80211_sched_scan_request *req, + struct ieee80211_scan_ies *ies) +{ + struct mt7921_dev *dev = mt7921_hw_dev(hw); + struct mt76_phy *mphy = hw->priv; + int err; + + mutex_lock(&dev->mt76.mutex); + + err = mt7921_mcu_sched_scan_req(mphy->priv, vif, req); + if (err < 0) + goto out; + + err = mt7921_mcu_sched_scan_enable(mphy->priv, vif, true); +out: + mutex_unlock(&dev->mt76.mutex); + + return err; +} + +static int +mt7921_stop_sched_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +{ + struct mt7921_dev *dev = mt7921_hw_dev(hw); + struct mt76_phy *mphy = hw->priv; + int err; + + mutex_lock(&dev->mt76.mutex); + err = mt7921_mcu_sched_scan_enable(mphy->priv, vif, false); + mutex_unlock(&dev->mt76.mutex); + + return err; +} + static int mt7921_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant) { @@ -957,4 +993,6 @@ const struct ieee80211_ops mt7921_ops = { .hw_scan = mt7921_hw_scan, .cancel_hw_scan = mt7921_cancel_hw_scan, .sta_statistics = mt7921_sta_statistics, + .sched_scan_start = mt7921_start_sched_scan, + .sched_scan_stop = mt7921_stop_sched_scan, }; diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c index ee4b52558974..6f2b4086ca81 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c @@ -2361,6 +2361,89 @@ int mt7921_mcu_cancel_hw_scan(struct mt7921_phy *phy, sizeof(req), false); } +int mt7921_mcu_sched_scan_req(struct mt7921_phy *phy, + struct ieee80211_vif *vif, + struct cfg80211_sched_scan_request *sreq) +{ + struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv; + struct ieee80211_channel **scan_list = sreq->channels; + struct mt7921_dev *dev = phy->dev; + struct mt7921_mcu_scan_channel *chan; + struct mt7921_sched_scan_req *req; + struct cfg80211_match_set *match; + struct cfg80211_ssid *ssid; + struct sk_buff *skb; + int i; + + skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, + sizeof(*req) + sreq->ie_len); + if (!skb) + return -ENOMEM; + + mvif->mt76.scan_seq_num = (mvif->mt76.scan_seq_num + 1) & 0x7f; + + req = (struct mt7921_sched_scan_req *)skb_put(skb, sizeof(*req)); + req->version = 1; + req->seq_num = mvif->mt76.scan_seq_num; + + req->ssids_num = sreq->n_ssids; + for (i = 0; i < req->ssids_num; i++) { + ssid = &sreq->ssids[i]; + memcpy(req->ssids[i].ssid, ssid->ssid, ssid->ssid_len); + req->ssids[i].ssid_len = cpu_to_le32(ssid->ssid_len); + } + + req->match_num = sreq->n_match_sets; + for (i = 0; i < req->match_num; i++) { + match = &sreq->match_sets[i]; + memcpy(req->match[i].ssid, match->ssid.ssid, + match->ssid.ssid_len); + req->match[i].rssi_th = cpu_to_le32(match->rssi_thold); + req->match[i].ssid_len = match->ssid.ssid_len; + } + + req->channel_type = sreq->n_channels ? 4 : 0; + req->channels_num = min_t(u8, sreq->n_channels, 64); + for (i = 0; i < req->channels_num; i++) { + chan = &req->channels[i]; + chan->band = scan_list[i]->band == NL80211_BAND_2GHZ ? 1 : 2; + chan->channel_num = scan_list[i]->hw_value; + } + + req->intervals_num = sreq->n_scan_plans; + for (i = 0; i < req->intervals_num; i++) + req->intervals[i] = cpu_to_le16(sreq->scan_plans[i].interval); + + if (sreq->ie_len > 0) { + req->ie_len = cpu_to_le16(sreq->ie_len); + memcpy(skb_put(skb, sreq->ie_len), sreq->ie, sreq->ie_len); + } + + return mt76_mcu_skb_send_msg(&dev->mt76, skb, MCU_CMD_SCHED_SCAN_REQ, + false); +} + +int mt7921_mcu_sched_scan_enable(struct mt7921_phy *phy, + struct ieee80211_vif *vif, + bool enable) +{ + struct mt7921_dev *dev = phy->dev; + struct { + u8 active; /* 0: enabled 1: disabled */ + u8 rsv[3]; + } __packed req = { + .active = !enable, + }; + + if (enable) + set_bit(MT76_HW_SCHED_SCANNING, &phy->mt76->state); + else + clear_bit(MT76_HW_SCHED_SCANNING, &phy->mt76->state); + + return mt76_mcu_send_msg(&dev->mt76, MCU_CMD_SCHED_SCAN_ENABLE, &req, + sizeof(req), false); +} + u32 mt7921_get_wtbl_info(struct mt7921_dev *dev, u16 wlan_idx) { struct mt7921_mcu_wlan_info wtbl_info = { diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h index 96eecea22d94..6894b44ff62d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.h @@ -879,6 +879,26 @@ struct mt7921_hw_scan_done { __le32 beacon_5g_num; } __packed; +struct mt7921_sched_scan_req { + u8 version; + u8 seq_num; + u8 stop_on_match; + u8 ssids_num; + u8 match_num; + u8 pad; + __le16 ie_len; + struct mt7921_mcu_scan_ssid ssids[MT7921_MAX_SCHED_SCAN_SSID]; + struct mt7921_mcu_scan_match match[MT7921_MAX_SCAN_MATCH]; + u8 channel_type; + u8 channels_num; + u8 intervals_num; + u8 scan_func; + struct mt7921_mcu_scan_channel channels[64]; + __le16 intervals[MT7921_MAX_SCHED_SCAN_INTERVAL]; + u8 bss_idx; + u8 pad2[64]; +} __packed; + struct mt7921_mcu_bss_event { u8 bss_idx; u8 is_absent; diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h index b08ece8544ff..8cd9d3e214ed 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h @@ -44,6 +44,9 @@ #define MT7921_SKU_TABLE_SIZE (MT7921_SKU_RATE_NUM + 1) #define MT7921_SCAN_IE_LEN 600 +#define MT7921_MAX_SCHED_SCAN_INTERVAL 10 +#define MT7921_MAX_SCHED_SCAN_SSID 10 +#define MT7921_MAX_SCAN_MATCH 16 struct mt7921_vif; struct mt7921_sta; @@ -343,6 +346,12 @@ void mt7921_scan_work(struct work_struct *work); int mt7921_mcu_set_channel_domain(struct mt7921_phy *phy); int mt7921_mcu_hw_scan(struct mt7921_phy *phy, struct ieee80211_vif *vif, struct ieee80211_scan_request *scan_req); +int mt7921_mcu_sched_scan_req(struct mt7921_phy *phy, + struct ieee80211_vif *vif, + struct cfg80211_sched_scan_request *sreq); +int mt7921_mcu_sched_scan_enable(struct mt7921_phy *phy, + struct ieee80211_vif *vif, + bool enable); int mt7921_mcu_cancel_hw_scan(struct mt7921_phy *phy, struct ieee80211_vif *vif); u32 mt7921_get_wtbl_info(struct mt7921_dev *dev, u16 wlan_idx); -- 2.25.1 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek
next prev parent reply other threads:[~2021-01-27 19:41 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-27 19:33 [PATCH -next v8 00/20]introduce mt7921e support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 01/20] mt76: mt7921: add MAC support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 02/20] mt76: mt7921: add MCU support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 03/20] mt76: mt7921: add DMA support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 04/20] mt76: mt7921: add EEPROM support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 05/20] mt76: mt7921: add ieee80211_ops sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 06/20] mt76: mt7921: introduce mt7921e support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 07/20] mt76: mt7921: add debugfs support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` sean.wang [this message] 2021-01-27 19:33 ` [PATCH -next v8 08/20] mt76: mt7921: introduce schedule scan support sean.wang 2021-01-27 19:33 ` [PATCH -next v8 09/20] mt76: mt7921: introduce 802.11 PS support in sta mode sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 10/20] mt76: mt7921: introduce support for hardware beacon filter sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 11/20] mt76: mt7921: introduce beacon_loss mcu event sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 12/20] mt76: mt7921: introduce PM support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 13/20] mt76: mt7921: rely on mt76_connac_mcu common library sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 14/20] mt76: mt7921: rely on mt76_connac_mcu module for sched_scan and hw_scan sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 15/20] mt76: mt7921: rely on mt76_connac_mcu module for suspend and WoW support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 16/20] mt76: mt7921: introduce Runtime PM support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 17/20] mt76: mt7921: introduce regdomain notifier support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 18/20] mt76: mt7921: enable MSI interrupts sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 19/20] mt76: mt7921: add coredump support sean.wang 2021-01-27 19:33 ` sean.wang 2021-01-27 19:33 ` [PATCH -next v8 20/20] mt76: mt7663: introduce " sean.wang 2021-01-27 19:33 ` sean.wang
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=a26b11b405013edd68c7d2903c8ee3bc61221f2a.1611774181.git.objelf@gmail.com \ --to=sean.wang@mediatek.com \ --cc=Eric.Liang@mediatek.com \ --cc=Ryder.Lee@mediatek.com \ --cc=Soul.Huang@mediatek.com \ --cc=Stella.Chang@mediatek.com \ --cc=YN.Chen@mediatek.com \ --cc=ch.yeh@mediatek.com \ --cc=linux-mediatek@lists.infradead.org \ --cc=linux-wireless@vger.kernel.org \ --cc=lorenzo.bianconi@redhat.com \ --cc=lorenzo@kernel.org \ --cc=nbd@nbd.name \ --cc=posh.sun@mediatek.com \ --cc=robin.chiu@mediatek.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.