diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath11k/wmi.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath11k/wmi.c | 64 | 
1 files changed, 24 insertions, 40 deletions
| diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c index cccfd3bd4d27..5ca2d80679b6 100644 --- a/drivers/net/wireless/ath/ath11k/wmi.c +++ b/drivers/net/wireless/ath/ath11k/wmi.c @@ -5417,31 +5417,6 @@ int ath11k_wmi_pull_fw_stats(struct ath11k_base *ab, struct sk_buff *skb,  	return 0;  } -static int -ath11k_pull_pdev_temp_ev(struct ath11k_base *ab, u8 *evt_buf, -			 u32 len, const struct wmi_pdev_temperature_event *ev) -{ -	const void **tb; -	int ret; - -	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC); -	if (IS_ERR(tb)) { -		ret = PTR_ERR(tb); -		ath11k_warn(ab, "failed to parse tlv: %d\n", ret); -		return ret; -	} - -	ev = tb[WMI_TAG_PDEV_TEMPERATURE_EVENT]; -	if (!ev) { -		ath11k_warn(ab, "failed to fetch pdev temp ev"); -		kfree(tb); -		return -EPROTO; -	} - -	kfree(tb); -	return 0; -} -  size_t ath11k_wmi_fw_stats_num_vdevs(struct list_head *head)  {  	struct ath11k_fw_stats_vdev *i; @@ -6196,10 +6171,8 @@ static void ath11k_mgmt_rx_event(struct ath11k_base *ab, struct sk_buff *skb)  		}  	} -	/* TODO: Pending handle beacon implementation -	 *if (ieee80211_is_beacon(hdr->frame_control)) -	 *	ath11k_mac_handle_beacon(ar, skb); -	 */ +	if (ieee80211_is_beacon(hdr->frame_control)) +		ath11k_mac_handle_beacon(ar, skb);  	ath11k_dbg(ab, ATH11K_DBG_MGMT,  		   "event mgmt rx skb %pK len %d ftype %02x stype %02x\n", @@ -6418,10 +6391,7 @@ static void ath11k_roam_event(struct ath11k_base *ab, struct sk_buff *skb)  	switch (roam_ev.reason) {  	case WMI_ROAM_REASON_BEACON_MISS: -		/* TODO: Pending beacon miss and connection_loss_work -		 * implementation -		 * ath11k_mac_handle_beacon_miss(ar, vdev_id); -		 */ +		ath11k_mac_handle_beacon_miss(ar, roam_ev.vdev_id);  		break;  	case WMI_ROAM_REASON_BETTER_AP:  	case WMI_ROAM_REASON_LOW_RSSI: @@ -6849,23 +6819,37 @@ ath11k_wmi_pdev_temperature_event(struct ath11k_base *ab,  				  struct sk_buff *skb)  {  	struct ath11k *ar; -	struct wmi_pdev_temperature_event ev = {0}; +	const void **tb; +	const struct wmi_pdev_temperature_event *ev; +	int ret; -	if (ath11k_pull_pdev_temp_ev(ab, skb->data, skb->len, &ev) != 0) { -		ath11k_warn(ab, "failed to extract pdev temperature event"); +	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); +	if (IS_ERR(tb)) { +		ret = PTR_ERR(tb); +		ath11k_warn(ab, "failed to parse tlv: %d\n", ret); +		return; +	} + +	ev = tb[WMI_TAG_PDEV_TEMPERATURE_EVENT]; +	if (!ev) { +		ath11k_warn(ab, "failed to fetch pdev temp ev"); +		kfree(tb);  		return;  	}  	ath11k_dbg(ab, ATH11K_DBG_WMI, -		   "pdev temperature ev temp %d pdev_id %d\n", ev.temp, ev.pdev_id); +		   "pdev temperature ev temp %d pdev_id %d\n", ev->temp, ev->pdev_id); -	ar = ath11k_mac_get_ar_by_pdev_id(ab, ev.pdev_id); +	ar = ath11k_mac_get_ar_by_pdev_id(ab, ev->pdev_id);  	if (!ar) { -		ath11k_warn(ab, "invalid pdev id in pdev temperature ev %d", ev.pdev_id); +		ath11k_warn(ab, "invalid pdev id in pdev temperature ev %d", ev->pdev_id); +		kfree(tb);  		return;  	} -	ath11k_thermal_event_temperature(ar, ev.temp); +	ath11k_thermal_event_temperature(ar, ev->temp); + +	kfree(tb);  }  static void ath11k_fils_discovery_event(struct ath11k_base *ab, | 
