diff options
Diffstat (limited to 'sys/contrib/dev/rtw89/ser.c')
| -rw-r--r-- | sys/contrib/dev/rtw89/ser.c | 34 | 
1 files changed, 22 insertions, 12 deletions
| diff --git a/sys/contrib/dev/rtw89/ser.c b/sys/contrib/dev/rtw89/ser.c index 6014e765c319..0459a7a73647 100644 --- a/sys/contrib/dev/rtw89/ser.c +++ b/sys/contrib/dev/rtw89/ser.c @@ -156,9 +156,9 @@ static void ser_state_run(struct rtw89_ser *ser, u8 evt)  	rtw89_debug(rtwdev, RTW89_DBG_SER, "ser: %s receive %s\n",  		    ser_st_name(ser), ser_ev_name(ser, evt)); -	mutex_lock(&rtwdev->mutex); +	wiphy_lock(rtwdev->hw->wiphy);  	rtw89_leave_lps(rtwdev); -	mutex_unlock(&rtwdev->mutex); +	wiphy_unlock(rtwdev->hw->wiphy);  	ser->st_tbl[ser->state].st_func(ser, evt);  } @@ -309,6 +309,9 @@ static void ser_reset_vif(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)  		rtw89_core_release_bit_map(rtwdev->hw_port, rtwvif_link->port);  		rtwvif_link->net_type = RTW89_NET_TYPE_NO_LINK;  		rtwvif_link->trigger = false; +		rtwvif_link->rand_tsf_done = false; + +		rtw89_p2p_noa_once_deinit(rtwvif_link);  	}  } @@ -483,10 +486,14 @@ static void ser_l1_reset_pre_st_hdl(struct rtw89_ser *ser, u8 evt)  static void ser_reset_trx_st_hdl(struct rtw89_ser *ser, u8 evt)  {  	struct rtw89_dev *rtwdev = container_of(ser, struct rtw89_dev, ser); +	struct wiphy *wiphy = rtwdev->hw->wiphy;  	switch (evt) {  	case SER_EV_STATE_IN: -		cancel_delayed_work_sync(&rtwdev->track_work); +		wiphy_lock(wiphy); +		wiphy_delayed_work_cancel(wiphy, &rtwdev->track_work); +		wiphy_delayed_work_cancel(wiphy, &rtwdev->track_ps_work); +		wiphy_unlock(wiphy);  		drv_stop_tx(ser);  		if (hal_stop_dma(ser)) { @@ -517,8 +524,10 @@ static void ser_reset_trx_st_hdl(struct rtw89_ser *ser, u8 evt)  		hal_enable_dma(ser);  		drv_resume_rx(ser);  		drv_resume_tx(ser); -		ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->track_work, -					     RTW89_TRACK_WORK_PERIOD); +		wiphy_delayed_work_queue(wiphy, &rtwdev->track_work, +					 RTW89_TRACK_WORK_PERIOD); +		wiphy_delayed_work_queue(wiphy, &rtwdev->track_ps_work, +					 RTW89_TRACK_PS_WORK_PERIOD);  		break;  	default: @@ -560,21 +569,22 @@ static void ser_mac_mem_dump(struct rtw89_dev *rtwdev, u8 *buf,  	const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;  	u32 filter_model_addr = mac->filter_model_addr;  	u32 indir_access_addr = mac->indir_access_addr; +	u32 mem_page_size = mac->mem_page_size;  	u32 *ptr = (u32 *)buf;  	u32 base_addr, start_page, residue;  	u32 cnt = 0;  	u32 i; -	start_page = start_addr / MAC_MEM_DUMP_PAGE_SIZE; -	residue = start_addr % MAC_MEM_DUMP_PAGE_SIZE; +	start_page = start_addr / mem_page_size; +	residue = start_addr % mem_page_size;  	base_addr = mac->mem_base_addrs[sel]; -	base_addr += start_page * MAC_MEM_DUMP_PAGE_SIZE; +	base_addr += start_page * mem_page_size;  	while (cnt < len) {  		rtw89_write32(rtwdev, filter_model_addr, base_addr);  		for (i = indir_access_addr + residue; -		     i < indir_access_addr + MAC_MEM_DUMP_PAGE_SIZE; +		     i < indir_access_addr + mem_page_size;  		     i += 4, ptr++) {  			*ptr = rtw89_read32(rtwdev, i);  			cnt += 4; @@ -583,7 +593,7 @@ static void ser_mac_mem_dump(struct rtw89_dev *rtwdev, u8 *buf,  		}  		residue = 0; -		base_addr += MAC_MEM_DUMP_PAGE_SIZE; +		base_addr += mem_page_size;  	}  } @@ -712,9 +722,9 @@ static void ser_l2_reset_st_hdl(struct rtw89_ser *ser, u8 evt)  	switch (evt) {  	case SER_EV_STATE_IN: -		mutex_lock(&rtwdev->mutex); +		wiphy_lock(rtwdev->hw->wiphy);  		ser_l2_reset_st_pre_hdl(ser); -		mutex_unlock(&rtwdev->mutex); +		wiphy_unlock(rtwdev->hw->wiphy);  		ieee80211_restart_hw(rtwdev->hw);  		ser_set_alarm(ser, SER_RECFG_TIMEOUT, SER_EV_L2_RECFG_TIMEOUT); | 
