Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c53a301 authored by Sarada Prasanna Garnayak's avatar Sarada Prasanna Garnayak
Browse files

cnss: Store and Retrieve WiFi unsafe Channel list



Store WiFi unsafe Channel list in CNSS SDIO platform
driver and return to wlan host driver on query. It adds
support WiFi unsafe Channel list for LTE-WiFi coexistence.

CRs-Fixed: 943220
Change-Id: Ia948df5cf51213b16e424e73f5135d4b5e308b50
Signed-off-by: default avatarKomal Seelam <kseelam@codeaurora.org>
Signed-off-by: default avatarSarada Prasanna Garnayak <sgarna@codeaurora.org>
parent 909a2217
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
@@ -32,6 +32,13 @@
#define WLAN_VREG_XTAL_MIN	1800000
#define POWER_ON_DELAY		4

#define CNSS_MAX_CH_NUM 100

struct cnss_unsafe_channel_list {
	u16 unsafe_ch_count;
	u16 unsafe_ch_list[CNSS_MAX_CH_NUM];
};

struct cnss_dfs_nol_info {
	void *dfs_nol_info;
	u16 dfs_nol_info_len;
@@ -53,8 +60,55 @@ static struct cnss_sdio_data {
	struct platform_device *pdev;
	struct cnss_sdio_wlan_gpio_info pmic_gpio;
	struct cnss_dfs_nol_info dfs_info;
	struct cnss_unsafe_channel_list unsafe_list;
} *cnss_pdata;

int cnss_set_wlan_unsafe_channel(u16 *unsafe_ch_list, u16 ch_count)
{
	struct cnss_unsafe_channel_list *unsafe_list;

	if (!cnss_pdata)
		return -ENODEV;

	if ((!unsafe_ch_list) || (!ch_count) || (ch_count > CNSS_MAX_CH_NUM))
		return -EINVAL;

	unsafe_list = &cnss_pdata->unsafe_list;
	unsafe_list->unsafe_ch_count = ch_count;

	memcpy(
		(char *)unsafe_list->unsafe_ch_list,
		(char *)unsafe_ch_list, ch_count * sizeof(u16));

	return 0;
}
EXPORT_SYMBOL(cnss_set_wlan_unsafe_channel);

int cnss_get_wlan_unsafe_channel(
	u16 *unsafe_ch_list, u16 *ch_count, u16 buf_len)
{
	struct cnss_unsafe_channel_list *unsafe_list;

	if (!cnss_pdata)
		return -ENODEV;

	if (!unsafe_ch_list || !ch_count)
		return -EINVAL;

	unsafe_list = &cnss_pdata->unsafe_list;

	if (buf_len < (unsafe_list->unsafe_ch_count * sizeof(u16)))
		return -ENOMEM;

	*ch_count = unsafe_list->unsafe_ch_count;
	memcpy(
		(char *)unsafe_ch_list, (char *)unsafe_list->unsafe_ch_list,
		unsafe_list->unsafe_ch_count * sizeof(u16));

	return 0;
}
EXPORT_SYMBOL(cnss_get_wlan_unsafe_channel);

int cnss_wlan_set_dfs_nol(void *info, u16 info_len)
{
	void *temp;