qcacmn: Use frequency ranges for copying NOL after mode switch

Current NOL conversion for dynamic mode switch is in such a way
that the NOL data is copied to the pdev ID entry for the targeted
mode. That is, the NOL data is split/merged before mode switch and
copied to a temporary structure before mode switch command is
sent to FW.
At this point, the target pdev's frequency range are still the old
values because of which, certain entries of the NOL data are missed.
Also in case of FW failures, the NOL entry cannot be added back
because they have been merged/split already.

To avoid the above, rearchitecture deinit and reinit NOL for
mode switch in such a way that the NOL data, as-it-is, is copied
before mode switch and is only split/merged after the frequency range
of the pdevs are properly mapped and the FW response is a success.

Change-Id: I4a073d1327ba182c40ced6089aa46d8f5f241d33
CRs-Fixed: 2632582
This commit is contained in:
Vignesh Mohan
2020-03-02 10:57:33 +05:30
zatwierdzone przez nshrivas
rodzic f2e0f22bf7
commit 1d4f7736d3
5 zmienionych plików z 61 dodań i 55 usunięć

Wyświetl plik

@@ -627,8 +627,6 @@ void tgt_dfs_deinit_tmp_psoc_nol(struct wlan_objmgr_pdev *pdev);
* tgt_dfs_save_dfs_nol_in_psoc() - Save NOL data of given pdev.
* @pdev: Pointer to pdev object.
* @pdev_id: The pdev ID which will have the NOL data.
* @low_5ghz_freq: The low 5GHz frequency value of the target pdev id.
* @high_5ghz_freq: The high 5GHz frequency value of the target pdev id.
*
* Based on the frequency of the NOL channel, copy it to the target pdev_id
* structure in psoc.
@@ -636,20 +634,22 @@ void tgt_dfs_deinit_tmp_psoc_nol(struct wlan_objmgr_pdev *pdev);
* Return: void.
*/
void tgt_dfs_save_dfs_nol_in_psoc(struct wlan_objmgr_pdev *pdev,
uint8_t pdev_id,
uint16_t low_5ghz_freq,
uint16_t high_5ghz_freq);
uint8_t pdev_id);
/**
* tgt_dfs_reinit_nol_from_psoc_copy() - Reinit saved NOL data to corresponding
* pdevs.
* @pdev: Pointer to pdev object.
* @pdev_id: pdev_id of the given pdev.
* @low_5ghz_freq: The low 5GHz frequency value of the target pdev id.
* @high_5ghz_freq: The high 5GHz frequency value of the target pdev id.
*
* Return: void.
*/
void tgt_dfs_reinit_nol_from_psoc_copy(struct wlan_objmgr_pdev *pdev,
uint8_t pdev_id);
uint8_t pdev_id,
uint16_t low_5ghz_freq,
uint16_t high_5ghz_freq);
/**
* tgt_dfs_reinit_precac_lists() - Reinit preCAC lists.

Wyświetl plik

@@ -977,9 +977,7 @@ void tgt_dfs_deinit_tmp_psoc_nol(struct wlan_objmgr_pdev *pdev)
qdf_export_symbol(tgt_dfs_deinit_tmp_psoc_nol);
void tgt_dfs_save_dfs_nol_in_psoc(struct wlan_objmgr_pdev *pdev,
uint8_t pdev_id,
uint16_t low_5ghz_freq,
uint16_t high_5ghz_freq)
uint8_t pdev_id)
{
struct wlan_dfs *dfs;
@@ -989,13 +987,15 @@ void tgt_dfs_save_dfs_nol_in_psoc(struct wlan_objmgr_pdev *pdev,
return;
}
dfs_save_dfs_nol_in_psoc(dfs, pdev_id, low_5ghz_freq, high_5ghz_freq);
dfs_save_dfs_nol_in_psoc(dfs, pdev_id);
}
qdf_export_symbol(tgt_dfs_save_dfs_nol_in_psoc);
void tgt_dfs_reinit_nol_from_psoc_copy(struct wlan_objmgr_pdev *pdev,
uint8_t pdev_id)
uint8_t pdev_id,
uint16_t low_5ghz_freq,
uint16_t high_5ghz_freq)
{
struct wlan_dfs *dfs;
@@ -1005,7 +1005,10 @@ void tgt_dfs_reinit_nol_from_psoc_copy(struct wlan_objmgr_pdev *pdev,
return;
}
dfs_reinit_nol_from_psoc_copy(dfs, pdev_id);
dfs_reinit_nol_from_psoc_copy(dfs,
pdev_id,
low_5ghz_freq,
high_5ghz_freq);
}
qdf_export_symbol(tgt_dfs_reinit_nol_from_psoc_copy);