Commit fbc2caf1 authored by Ching-Te Ku's avatar Ching-Te Ku Committed by Kalle Valo

wifi: rtw89: coex: Change Wi-Fi role info related logic to version separate

The Wi-Fi role info structure will need to H2C to firmware, firmware
need these information to do some multi-role operation. v1 add DBCC
and NOA information in the structure. And driver side also need to
put/get values at the corresponding version of structure.
Signed-off-by: default avatarChing-Te Ku <ku920601@realtek.com>
Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230106120844.17441-8-pkshih@realtek.com
parent 447a3267
...@@ -2075,6 +2075,7 @@ static void _set_bt_afh_info(struct rtw89_dev *rtwdev) ...@@ -2075,6 +2075,7 @@ static void _set_bt_afh_info(struct rtw89_dev *rtwdev)
{ {
const struct rtw89_chip_info *chip = rtwdev->chip; const struct rtw89_chip_info *chip = rtwdev->chip;
struct rtw89_btc *btc = &rtwdev->btc; struct rtw89_btc *btc = &rtwdev->btc;
const struct rtw89_btc_ver *ver = btc->ver;
struct rtw89_btc_wl_info *wl = &btc->cx.wl; struct rtw89_btc_wl_info *wl = &btc->cx.wl;
struct rtw89_btc_bt_info *bt = &btc->cx.bt; struct rtw89_btc_bt_info *bt = &btc->cx.bt;
struct rtw89_btc_bt_link_info *b = &bt->link_info; struct rtw89_btc_bt_link_info *b = &bt->link_info;
...@@ -2088,7 +2089,7 @@ static void _set_bt_afh_info(struct rtw89_dev *rtwdev) ...@@ -2088,7 +2089,7 @@ static void _set_bt_afh_info(struct rtw89_dev *rtwdev)
if (btc->ctrl.manual || wl->status.map.scan) if (btc->ctrl.manual || wl->status.map.scan)
return; return;
if (chip->chip_id == RTL8852A) { if (ver->fwlrole == 0) {
mode = wl_rinfo->link_mode; mode = wl_rinfo->link_mode;
connect_cnt = wl_rinfo->connect_cnt; connect_cnt = wl_rinfo->connect_cnt;
} else { } else {
...@@ -2107,13 +2108,13 @@ static void _set_bt_afh_info(struct rtw89_dev *rtwdev) ...@@ -2107,13 +2108,13 @@ static void _set_bt_afh_info(struct rtw89_dev *rtwdev)
r = &wl_rinfo->active_role[i]; r = &wl_rinfo->active_role[i];
r1 = &wl_rinfo_v1->active_role_v1[i]; r1 = &wl_rinfo_v1->active_role_v1[i];
if (chip->chip_id == RTL8852A && if (ver->fwlrole == 0 &&
(r->role == RTW89_WIFI_ROLE_P2P_GO || (r->role == RTW89_WIFI_ROLE_P2P_GO ||
r->role == RTW89_WIFI_ROLE_P2P_CLIENT)) { r->role == RTW89_WIFI_ROLE_P2P_CLIENT)) {
ch = r->ch; ch = r->ch;
bw = r->bw; bw = r->bw;
break; break;
} else if (chip->chip_id != RTL8852A && } else if (ver->fwlrole == 1 &&
(r1->role == RTW89_WIFI_ROLE_P2P_GO || (r1->role == RTW89_WIFI_ROLE_P2P_GO ||
r1->role == RTW89_WIFI_ROLE_P2P_CLIENT)) { r1->role == RTW89_WIFI_ROLE_P2P_CLIENT)) {
ch = r1->ch; ch = r1->ch;
...@@ -2128,12 +2129,12 @@ static void _set_bt_afh_info(struct rtw89_dev *rtwdev) ...@@ -2128,12 +2129,12 @@ static void _set_bt_afh_info(struct rtw89_dev *rtwdev)
r = &wl_rinfo->active_role[i]; r = &wl_rinfo->active_role[i];
r1 = &wl_rinfo_v1->active_role_v1[i]; r1 = &wl_rinfo_v1->active_role_v1[i];
if (chip->chip_id == RTL8852A && if (ver->fwlrole == 0 &&
r->connected && r->band == RTW89_BAND_2G) { r->connected && r->band == RTW89_BAND_2G) {
ch = r->ch; ch = r->ch;
bw = r->bw; bw = r->bw;
break; break;
} else if (chip->chip_id != RTL8852A && } else if (ver->fwlrole == 1 &&
r1->connected && r1->band == RTW89_BAND_2G) { r1->connected && r1->band == RTW89_BAND_2G) {
ch = r1->ch; ch = r1->ch;
bw = r1->bw; bw = r1->bw;
...@@ -3581,8 +3582,8 @@ static void _action_wl_rfk(struct rtw89_dev *rtwdev) ...@@ -3581,8 +3582,8 @@ static void _action_wl_rfk(struct rtw89_dev *rtwdev)
static void _set_btg_ctrl(struct rtw89_dev *rtwdev) static void _set_btg_ctrl(struct rtw89_dev *rtwdev)
{ {
const struct rtw89_chip_info *chip = rtwdev->chip;
struct rtw89_btc *btc = &rtwdev->btc; struct rtw89_btc *btc = &rtwdev->btc;
const struct rtw89_btc_ver *ver = btc->ver;
struct rtw89_btc_wl_info *wl = &btc->cx.wl; struct rtw89_btc_wl_info *wl = &btc->cx.wl;
struct rtw89_btc_wl_role_info *wl_rinfo = &wl->role_info; struct rtw89_btc_wl_role_info *wl_rinfo = &wl->role_info;
struct rtw89_btc_wl_role_info_v1 *wl_rinfo_v1 = &wl->role_info_v1; struct rtw89_btc_wl_role_info_v1 *wl_rinfo_v1 = &wl->role_info_v1;
...@@ -3593,7 +3594,7 @@ static void _set_btg_ctrl(struct rtw89_dev *rtwdev) ...@@ -3593,7 +3594,7 @@ static void _set_btg_ctrl(struct rtw89_dev *rtwdev)
if (btc->ctrl.manual) if (btc->ctrl.manual)
return; return;
if (chip->chip_id == RTL8852A) if (ver->fwlrole == 0)
mode = wl_rinfo->link_mode; mode = wl_rinfo->link_mode;
else else
mode = wl_rinfo_v1->link_mode; mode = wl_rinfo_v1->link_mode;
...@@ -3686,8 +3687,8 @@ static void rtw89_tx_time_iter(void *data, struct ieee80211_sta *sta) ...@@ -3686,8 +3687,8 @@ static void rtw89_tx_time_iter(void *data, struct ieee80211_sta *sta)
static void _set_wl_tx_limit(struct rtw89_dev *rtwdev) static void _set_wl_tx_limit(struct rtw89_dev *rtwdev)
{ {
const struct rtw89_chip_info *chip = rtwdev->chip;
struct rtw89_btc *btc = &rtwdev->btc; struct rtw89_btc *btc = &rtwdev->btc;
const struct rtw89_btc_ver *ver = btc->ver;
struct rtw89_btc_cx *cx = &btc->cx; struct rtw89_btc_cx *cx = &btc->cx;
struct rtw89_btc_dm *dm = &btc->dm; struct rtw89_btc_dm *dm = &btc->dm;
struct rtw89_btc_wl_info *wl = &cx->wl; struct rtw89_btc_wl_info *wl = &cx->wl;
...@@ -3707,7 +3708,7 @@ static void _set_wl_tx_limit(struct rtw89_dev *rtwdev) ...@@ -3707,7 +3708,7 @@ static void _set_wl_tx_limit(struct rtw89_dev *rtwdev)
if (btc->ctrl.manual) if (btc->ctrl.manual)
return; return;
if (chip->chip_id == RTL8852A) if (ver->fwlrole == 0)
mode = wl_rinfo->link_mode; mode = wl_rinfo->link_mode;
else else
mode = wl_rinfo_v1->link_mode; mode = wl_rinfo_v1->link_mode;
...@@ -3755,8 +3756,8 @@ static void _set_wl_tx_limit(struct rtw89_dev *rtwdev) ...@@ -3755,8 +3756,8 @@ static void _set_wl_tx_limit(struct rtw89_dev *rtwdev)
static void _set_bt_rx_agc(struct rtw89_dev *rtwdev) static void _set_bt_rx_agc(struct rtw89_dev *rtwdev)
{ {
const struct rtw89_chip_info *chip = rtwdev->chip;
struct rtw89_btc *btc = &rtwdev->btc; struct rtw89_btc *btc = &rtwdev->btc;
const struct rtw89_btc_ver *ver = btc->ver;
struct rtw89_btc_wl_info *wl = &btc->cx.wl; struct rtw89_btc_wl_info *wl = &btc->cx.wl;
struct rtw89_btc_wl_role_info *wl_rinfo = &wl->role_info; struct rtw89_btc_wl_role_info *wl_rinfo = &wl->role_info;
struct rtw89_btc_wl_role_info_v1 *wl_rinfo_v1 = &wl->role_info_v1; struct rtw89_btc_wl_role_info_v1 *wl_rinfo_v1 = &wl->role_info_v1;
...@@ -3764,7 +3765,7 @@ static void _set_bt_rx_agc(struct rtw89_dev *rtwdev) ...@@ -3764,7 +3765,7 @@ static void _set_bt_rx_agc(struct rtw89_dev *rtwdev)
bool bt_hi_lna_rx = false; bool bt_hi_lna_rx = false;
u8 mode; u8 mode;
if (chip->chip_id == RTL8852A) if (ver->fwlrole == 0)
mode = wl_rinfo->link_mode; mode = wl_rinfo->link_mode;
else else
mode = wl_rinfo_v1->link_mode; mode = wl_rinfo_v1->link_mode;
...@@ -4628,8 +4629,8 @@ static bool _chk_wl_rfk_request(struct rtw89_dev *rtwdev) ...@@ -4628,8 +4629,8 @@ static bool _chk_wl_rfk_request(struct rtw89_dev *rtwdev)
static static
void _run_coex(struct rtw89_dev *rtwdev, enum btc_reason_and_action reason) void _run_coex(struct rtw89_dev *rtwdev, enum btc_reason_and_action reason)
{ {
const struct rtw89_chip_info *chip = rtwdev->chip;
struct rtw89_btc *btc = &rtwdev->btc; struct rtw89_btc *btc = &rtwdev->btc;
const struct rtw89_btc_ver *ver = btc->ver;
struct rtw89_btc_dm *dm = &rtwdev->btc.dm; struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
struct rtw89_btc_cx *cx = &btc->cx; struct rtw89_btc_cx *cx = &btc->cx;
struct rtw89_btc_wl_info *wl = &btc->cx.wl; struct rtw89_btc_wl_info *wl = &btc->cx.wl;
...@@ -4644,7 +4645,7 @@ void _run_coex(struct rtw89_dev *rtwdev, enum btc_reason_and_action reason) ...@@ -4644,7 +4645,7 @@ void _run_coex(struct rtw89_dev *rtwdev, enum btc_reason_and_action reason)
_update_dm_step(rtwdev, reason); _update_dm_step(rtwdev, reason);
_update_btc_state_map(rtwdev); _update_btc_state_map(rtwdev);
if (chip->chip_id == RTL8852A) if (ver->fwlrole == 0)
mode = wl_rinfo->link_mode; mode = wl_rinfo->link_mode;
else else
mode = wl_rinfo_v1->link_mode; mode = wl_rinfo_v1->link_mode;
...@@ -4766,9 +4767,9 @@ void _run_coex(struct rtw89_dev *rtwdev, enum btc_reason_and_action reason) ...@@ -4766,9 +4767,9 @@ void _run_coex(struct rtw89_dev *rtwdev, enum btc_reason_and_action reason)
break; break;
case BTC_WLINK_2G_SCC: case BTC_WLINK_2G_SCC:
bt->scan_rx_low_pri = true; bt->scan_rx_low_pri = true;
if (chip->chip_id == RTL8852A) if (ver->fwlrole == 0)
_action_wl_2g_scc(rtwdev); _action_wl_2g_scc(rtwdev);
else if (chip->chip_id == RTL8852C) else if (ver->fwlrole == 1)
_action_wl_2g_scc_v1(rtwdev); _action_wl_2g_scc_v1(rtwdev);
break; break;
case BTC_WLINK_2G_MCC: case BTC_WLINK_2G_MCC:
...@@ -5206,10 +5207,10 @@ void rtw89_btc_ntfy_role_info(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif ...@@ -5206,10 +5207,10 @@ void rtw89_btc_ntfy_role_info(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif
struct rtw89_sta *rtwsta, enum btc_role_state state) struct rtw89_sta *rtwsta, enum btc_role_state state)
{ {
const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_SUB_ENTITY_0); const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_SUB_ENTITY_0);
const struct rtw89_chip_info *chip = rtwdev->chip;
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif); struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif);
struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta); struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta);
struct rtw89_btc *btc = &rtwdev->btc; struct rtw89_btc *btc = &rtwdev->btc;
const struct rtw89_btc_ver *ver = btc->ver;
struct rtw89_btc_wl_info *wl = &btc->cx.wl; struct rtw89_btc_wl_info *wl = &btc->cx.wl;
struct rtw89_btc_wl_link_info r = {0}; struct rtw89_btc_wl_link_info r = {0};
struct rtw89_btc_wl_link_info *wlinfo = NULL; struct rtw89_btc_wl_link_info *wlinfo = NULL;
...@@ -5273,7 +5274,7 @@ void rtw89_btc_ntfy_role_info(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif ...@@ -5273,7 +5274,7 @@ void rtw89_btc_ntfy_role_info(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif
wlinfo = &wl->link_info[r.pid]; wlinfo = &wl->link_info[r.pid];
memcpy(wlinfo, &r, sizeof(*wlinfo)); memcpy(wlinfo, &r, sizeof(*wlinfo));
if (chip->chip_id == RTL8852A) if (ver->fwlrole == 0)
_update_wl_info(rtwdev); _update_wl_info(rtwdev);
else else
_update_wl_info_v1(rtwdev); _update_wl_info_v1(rtwdev);
...@@ -5789,8 +5790,8 @@ static void _show_wl_role_info(struct rtw89_dev *rtwdev, struct seq_file *m) ...@@ -5789,8 +5790,8 @@ static void _show_wl_role_info(struct rtw89_dev *rtwdev, struct seq_file *m)
static void _show_wl_info(struct rtw89_dev *rtwdev, struct seq_file *m) static void _show_wl_info(struct rtw89_dev *rtwdev, struct seq_file *m)
{ {
const struct rtw89_chip_info *chip = rtwdev->chip;
struct rtw89_btc *btc = &rtwdev->btc; struct rtw89_btc *btc = &rtwdev->btc;
const struct rtw89_btc_ver *ver = btc->ver;
struct rtw89_btc_cx *cx = &btc->cx; struct rtw89_btc_cx *cx = &btc->cx;
struct rtw89_btc_wl_info *wl = &cx->wl; struct rtw89_btc_wl_info *wl = &cx->wl;
struct rtw89_btc_wl_role_info *wl_rinfo = &wl->role_info; struct rtw89_btc_wl_role_info *wl_rinfo = &wl->role_info;
...@@ -5802,7 +5803,7 @@ static void _show_wl_info(struct rtw89_dev *rtwdev, struct seq_file *m) ...@@ -5802,7 +5803,7 @@ static void _show_wl_info(struct rtw89_dev *rtwdev, struct seq_file *m)
seq_puts(m, "========== [WL Status] ==========\n"); seq_puts(m, "========== [WL Status] ==========\n");
if (chip->chip_id == RTL8852A) if (ver->fwlrole == 0)
mode = wl_rinfo->link_mode; mode = wl_rinfo->link_mode;
else else
mode = wl_rinfo_v1->link_mode; mode = wl_rinfo_v1->link_mode;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment