Commit 735f263c authored by Angus Ainslie's avatar Angus Ainslie
Browse files

drivers/net/wireless/rsi : add the RS9116 driver

parent 7ce1fef0
......@@ -24,7 +24,7 @@ config RSI_DEBUGFS
default y
---help---
Say Y, if you would like to enable debug support. This option
creates debugfs entries
creates debugfs entries.
config RSI_SDIO
tristate "Redpine Signals SDIO bus support"
......@@ -42,4 +42,52 @@ config RSI_USB
This option enables the USB bus support in rsi drivers.
Select M (recommended), if you have a RSI 1x1 wireless module.
config RSI_BT_ALONE
bool "Redpine Signals BT alone (classic/LE) mode support"
depends on RSI_91X
default n
---help---
This option enables the BT classic alone upport in rsi drivers.
Say Y, if you want to use this feature.
config RSI_COEX
bool "Redpine Signals Wi-Fi BT Coex support"
depends on RSI_91X
default n
---help---
This option enables the Wi-Fi BT coex support in rsi drivers.
Select Y, if you have to use this feature.
config RSI_WOW
bool "Redpine Signals WoWLAN support"
depends on RSI_91X
default n
---help---
This option enables the WoWLAN support.
Say Y if you want to use this feature.
config RSI_P2P
bool "Redpine Signals Wi-Fi Direct support"
depends on RSI_91X
default n
---help---
This option enables the Wi-Fi Direct support in rsi drivers.
Select Y, if you have to use this feature.
config HW_SCAN_OFFLOAD
bool "Redpine Signals Hardware scan offload feature"
depends on RSI_91X
default n
---help---
This option enables the hardware scan offload option in rsi drivers.
Select Y, if you have to use this feature.
config CARACALLA_BOARD
bool "Redpine device support on Caracalla board"
depends on RSI_91X
default n
---help---
This option is used to support Caracalla board with RSI driver.
Select Y, if you have to use this support.
endif # WLAN_VENDOR_RSI
rsi_91x-y += rsi_91x_main.o
rsi_91x-y += rsi_91x_core.o
rsi_91x-y += rsi_91x_mac80211.o
rsi_91x-y += rsi_91x_mgmt.o
rsi_91x-y += rsi_91x_pkt.o
rsi_91x-$(CONFIG_RSI_DEBUGFS) += rsi_91x_debugfs.o
rsi_usb-y += rsi_91x_usb.o rsi_91x_usb_ops.o
rsi_sdio-y += rsi_91x_sdio.o rsi_91x_sdio_ops.o
obj-$(CONFIG_RSI_91X) += rsi_91x.o
obj-$(CONFIG_RSI_SDIO) += rsi_sdio.o
obj-$(CONFIG_RSI_USB) += rsi_usb.o
#/*
# Copyright (c) 2017 Redpine Signals Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION). HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#*/
SUPP_DIR=$(PWD)/supplicant
KERNELRELEASE=$(shell uname -r)
KERNELDIR=/lib/modules/$(KERNELRELEASE)/build
# uncomment below line for Caracalla board
#CONFIG_CARACALLA_BOARD=y
# uncomment below line to enable hardware scan support
CONFIG_HW_SCAN_OFFLOAD=y
# Uncomment below line for sdio inetrrupt polling
#CONFIG_SDIO_INTR_POLL=y
# Uncomment below line for BT alone (Classic/LE/Dual) mode
#CONFIG_RSI_BT_ALONE=y
# Uncomment below line for Wi-Fi BT coex mode
#CONFIG_RSI_COEX=y
# Uncomment below line for WLAN + Zigbee coex mode
#CONFIG_RSI_ZIGB=y
# Uncomment below line for using WoWLAN
#CONFIG_RSI_WOW=y
# Uncomment below line for using P2P support
#CONFIG_RSI_P2P=y
# Uncomment below line for platforms with no SDIO multiblock support
#CONFIG_RSI_NO_SDIO_MULTIBLOCK=y
# Uncomment below line for enabling RRM feature
#CONFIG_RSI_11K=y
# Uncomment below line for debugging RRM through debugs
#RSI_DEBUG_RRM=y
EXTRA_CFLAGS += -DLINUX -Wimplicit -Wstrict-prototypes -Wall -Werror
EXTRA_CFLAGS += -I$(PWD)/include
EXTRA_CFLAGS += -DCONFIG_RSI_DEBUGFS
COMMON_SDIO_OBJS += rsi_91x_sdio_ops.o rsi_91x_sdio.o
COMMON_USB_OBJS += rsi_91x_usb_ops.o rsi_91x_usb.o
RSI_91X_OBJS := rsi_91x_hal.o \
rsi_91x_main.o \
rsi_91x_mac80211.o \
rsi_91x_mgmt.o \
rsi_91x_core.o \
rsi_91x_ps.o \
rsi_91x_debugfs.o
ifeq ($(CONFIG_CARACALLA_BOARD), y)
EXTRA_CFLAGS += -DCONFIG_CARACALLA_BOARD
#EXTRA_CFLAGS += -DCONFIG_SDIO_INTR_POLL
endif
ifeq ($(CONFIG_HW_SCAN_OFFLOAD), y)
EXTRA_CFLAGS += -DCONFIG_HW_SCAN_OFFLOAD
else
EXTRA_CFLAGS += -DPLATFORM_X86
endif
ifeq ($(CONFIG_SDIO_INTR_POLL), y)
EXTRA_CFLAGS += -DCONFIG_SDIO_INTR_POLL
endif
ifeq ($(CONFIG_RSI_BT_ALONE), y)
EXTRA_CFLAGS += -DCONFIG_RSI_BT_ALONE
RSI_91X_OBJS += rsi_91x_hci.o
endif
ifeq ($(CONFIG_RSI_COEX), y)
EXTRA_CFLAGS += -DCONFIG_RSI_COEX
RSI_91X_OBJS += rsi_91x_hci.o
RSI_91X_OBJS += rsi_91x_coex.o
endif
ifeq ($(CONFIG_RSI_ZIGB), y)
EXTRA_CFLAGS += -DCONFIG_RSI_ZIGB
RSI_91X_OBJS += rsi_91x_zigb.o
endif
ifeq ($(CONFIG_RSI_WOW), y)
EXTRA_CFLAGS += -DCONFIG_RSI_WOW
EXTRA_CFLAGS += -DRSI_HW_CONN_MONITOR
endif
ifeq ($(CONFIG_RSI_P2P), y)
EXTRA_CFLAGS += -DCONFIG_RSI_P2P
endif
ifeq ($(CONFIG_RSI_11K), y)
EXTRA_CFLAGS += -DCONFIG_RSI_11K
RSI_91X_OBJS += rsi_91x_rrm.o
endif
ifeq ($(RSI_DEBUG_RRM), y)
ifeq ($(CONFIG_RSI_11K), y)
EXTRA_CFLAGS += -DRSI_DEBUG_RRM
endif
endif
ifeq ($(CONFIG_RSI_NO_SDIO_MULTIBLOCK), y)
EXTRA_CFLAGS += -DCONFIG_RSI_NO_SDIO_MULTIBLOCK
endif
obj-m := rsi_sdio.o rsi_usb.o rsi_91x.o
rsi_sdio-objs := $(COMMON_SDIO_OBJS)
rsi_usb-objs := $(COMMON_USB_OBJS)
rsi_91x-objs := $(RSI_91X_OBJS)
all:
@echo -e "\033[32mCompiling RSI drivers...\033[0m"
make -C$(KERNELDIR)/ SUBDIRS=$(PWD) modules
clean:
make -C$(KERNELDIR)/ SUBDIRS=$(PWD) clean
#/*
# Copyright (c) 2017 Redpine Signals Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION). HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#*/
rsi_91x-y += rsi_91x_main.o
rsi_91x-y += rsi_91x_core.o
rsi_91x-y += rsi_91x_mac80211.o
rsi_91x-y += rsi_91x_mgmt.o
rsi_91x-y += rsi_91x_hal.o
rsi_91x-y += rsi_91x_ps.o
rsi_91x-$(CONFIG_RSI_DEBUGFS) += rsi_91x_debugfs.o
rsi_91x-$(CONFIG_RSI_BT_ALONE) += rsi_91x_hci.o
rsi_91x-$(CONFIG_RSI_COEX) += rsi_91x_coex.o
rsi_91x-$(CONFIG_RSI_COEX) += rsi_91x_hci.o
rsi_91x-$(CONFIG_RSI_11K) += rsi_91x_rrm.o
rsi_usb-$(CONFIG_RSI_USB) += rsi_91x_usb.o rsi_91x_usb_ops.o
rsi_sdio-$(CONFIG_RSI_SDIO) += rsi_91x_sdio.o rsi_91x_sdio_ops.o
obj-$(CONFIG_RSI_91X) += rsi_91x.o
obj-$(CONFIG_RSI_SDIO) += rsi_sdio.o
obj-$(CONFIG_RSI_USB) += rsi_usb.o
Description:
============
This package contains Redpine open source driver (rsi) package. This file gives the
instruction to build and install the driver. For instructions on complete usage of
the driver and module, please refer RSI_OpenSource_Driver_TRM.pdf in documents folder.
Features Supported:
===================
* Wi-Fi Station Mode
* 802.11 Legacy Power save
* 802.11 UAPSD
* Hardware connection monitor
* Back ground scan and roaming
* 802.11d Regulatory
* Wi-Fi AP Mode
* WoWLAN
* Wi-Fi Direct mode
* BT-EDR mode
* BT-LE mode
* Wi-Fi BT Coex mode
* ZIGB end device mode
* Wi-Fi ZIGB end device coex mode
* ZIGB coordinator mode
* ZIGB router mode
Package:
========
Driver : rsi [Source code]
Firmware : RS9113_WLAN_QSPI.rps [For Wi-Fi only mode]
RS9113_WLAN_BT_DUAL_MODE.rps [Wi-Fi Station + BT Classic + BT LE or BT alone mode]
RS9113_AP_BT_DUAL_MODE.rps [Wi-Fi AP + BT Classic + BT LE]
RS9113_WLAN_ZIGBEE.rps [Wi-Fi Station + ZigB End device mode]
RS9113_ZIGBEE_COORDINATOR.rps [ZigB Cordinator]
RS9113_ZIGBEE_ROUTER.rps [ZigB Router]
Release Notes : Change log of the releases
README : Build, install and usage guide
Build:
======
* Copy relevant firmware file [as mentioned above] to /lib/firmware.
* To build driver from kernel source:
-> copy the driver to <kernel_source_path>/drivers/net/wireless
-> Move Makefile to Makefile_local
-> Move Makefile_ker to Makefile
-> Give 'make menuconfig' from kernel source
$ make menuconfig
-> Go to 'Device Drivers -> Network device support -> Wireless LAN'
-> Select 'Redpine Signals Inc devices'
-> Select required interface (SDIO/USB).
-> Select CONFIG_RSI_HCI option for BT (classic/LE) alone mode.
-> Select CONFIG_RSI_COEX option for Wi-Fi + BT Coex mode.
-> Build driver using below commands
$ make SUBDIRS=drivers/net/wireless/rsi
* To build driver locally:
-> Edit Makefile and configure option as below:
-> Uncomment 'CONFIG_HW_SCAN_OFFLOAD=y' to use Hardware scan offload feature.
By default this flag is enabled. It is recommened not to comment this flag
[Particularly if you want to use back ground scanning and roaming feature].
-> Uncomment 'CONFIG_CARACALLA_BOARD=y' if you are working on Dell Caracalla
board. By default 'EXTRA_CFLAGS += -DPLATFORM_X86' is enabled. For embedded
platforms please comment this flag.
-> Uncomment 'CONFIG_RSI_WOW=y' if you want to use Wake-on-WLAN feature.
-> Uncomment 'CONFIG_RSI_P2P=y' if you want to use Wi-Fi direct (p2p) mode.
-> Uncomment 'CONFIG_RSI_HCI=y' in Makefile to run BT alone (classic/LE) mode.
-> Uncomment 'CONFIG_RSI_COEX=y' in Makefile to run Wi-Fi + BT Coex mode or
Wi-Fi + ZigB end device coex mode.
-> Uncomment 'CONFIG_RSI_NO_SDIO_MULTIBLOCK=y' if your platform's SDIO host controller
does not support multiblock mode. Do not uncomment this if you use USB interface.
-> Build driver using 'make'
$ make
* Binaries prepared:
rsi_91x.ko, rsi_usb.ko and rsi_sdio.ko
Install:
========
* insmod rsi_91x.ko rsi_zone_enabled=0x1f dev_oper_mode=1
where
bit 0 - error zone
bit 1 - info zone (generic debug messages)
bit 2 - init zone
bit 3 - mgmt tx zone
bit 4 - mgmt rx zone
bit 5 - data tx zone
bit 6 - data rx zone
bit 7 - fsm zone
bit 8 - isr zone
To enable error and info zone use below command:
$ insmod rsi_91x.ko rsi_zone_enabled= 0x3 dev_oper_mode=<val>
or
To use multiple modules with multiple opermodes, use below command:
$ insmod rsi_91x.ko rsi_zone_enabled= 0x3 dev_oper_mode=<val1>,<val2>,<val3>,<val4>,<val5> # Max support for mulltiple dev_oper_modes for multiple modules are 5.
where val:
1 - Wi-Fi alone mode
4 - BT alone mode
8 - BT LE alone mode
12 - BT classic + BT LE
5 - Wi-Fi station + BT classic mode
9 - Wi-Fi station + BT LE mode
13 - Wi-Fi station + BT dual mode
6 - Wi-Fi AP + BT classic mode
14 - Wi-Fi AP + BT dual mode
16 - ZigB alone mode
17 - Wi-Fi station + zigb station mode
32 - Wi-Fi station + zigb coordinator mode
48 - Wi-Fi station + zigb router mode
* device operating mode value can be found in the below 'sysfs' entries:
$ cat /sys/module/rsi_sdio/parameters/dev_oper_mode
13
$ cat /sys/module/rsi_usb/parameters/dev_oper_mode
14
* If any invalid mode is given, the default mode 1 (Wi-Fi alone) is used.
* insmod rsi_usb.ko
or
* insmod rsi_sdio.ko
Remove:
=======
* rmmod rsi_usb
or
* rmmod rsi_sdio
* rmmod rsi_91x
Station Mode
============
* Use wpa_supplicant version 2.6 or above to verify the station connnectivity
* To use stand-alone station mode, add below line in wpa_supplicant configuration
file
p2p_disabled=1
AP Mode
=======
* Run start_ap.sh script in scripts folder to start AP
Configure:
==========
* Use iwconfig or iw to configure different parameters in device.
* Check below sections for individual commands usage
Powersave configuration
=======================
* Powersave can be enabled or disable from command line using iwconfig / iw.
* Use below commad to enable power save
$> iwconfig <intf_name> power on
* Use below command to disable power save
$> iwconfig <intf_name> power off
Background scanning:
====================
Background scanning is not directly supported in mac80211. Hence this feature
is supported in rsi driver through debugfs.
Firmware bgcan alone does not work for roaming. Hence it should be enable with
supplicant bgscan.
* To verify the bgscan status and parameters
$> cat /sys/kernel/debug/phy<X>/bgscan
* To enable back ground scan and configure its parameters from debugfs:
$> echo 1 10 10 20 20 100 1 3 1 6 11 > /sys/kernel/debug/phy<X>/bgscan
1 - Enable background scan.
10 - BGscan threshold (in dBM). This is the upper RSSI threshold.
If the signal strength of connected beacon is less than this
threshold at bgscan interval bgscan will be performed otherwise
not performed. To always do bgscan this value can be given 0.
10 - RSSI tolerence threshold used in roaming. If the difference between
the current RSSI value of the connected Access Point and the RSSI
value of the Access Point from the previous background scan is greater
than the RSSI Tolerance Threshold, then the module performs a
background scan. Assigning a large value to this field will eliminate
this method of triggering background scans.
20 - Periodicity (in seconds). This is the back ground scan interval.
Setting this value to 0 will disable the background scan
20 - active scan duraiton (in msecs). Active scan duration in each channel.
Max value is 255ms.
100 - passive scan duration (in msecs). Passive scan duration in DFS channels.
Max value is 255ms.
1 - two probe enable (directed and undirected probe alternates). 0 indicates
sending only broadcast probe.
3 - number of background scan channels. Max channels supported are 24.
1,6,11 - list of channels
* To enable all valid channels in the current regulatory domain, configure 0 in num of channel field
$> echo 1 10 10 20 20 100 0 > /sys/kernel/debug/phy<X>/bgscan
* To disable back ground scan from debugs:
$> echo 0 > /sys/kernel/debug/phy<X>/bgscan
* For checking the list of bgscan channels configured to device use below command
$> cat /sys/kernel/debug/phy<X>/bgscan
This will display the list of bgscan channels configured to device with DFS indication also
Antenna Selection
=================
To select external antenna use the below command
$> iw phy <phyX> set antenna 1 0
To move back to internal antenna
$> iw phy <phyX> set antenna 0 0
Note: Make sure you put interface down before setting antenna and interface up after setting the antenna.
Country Setting
===============
To set a country use below command
$> iw reg set <country_code>
Eg: iw reg set IN (For India)
To check the current regulatory domain
$> iw reg get
Software RF-Kill verification
=============================
* rfkill package needs to be installed to verify software rfkill
* Use below command to list the wireless interfaces in the system
$> rfkill list
* Use below command to block an interface
$> rfkill block <interface_number_listed_in_rfkill_list>
* Use below command to unblock an interface
$> rfkill unblock <interface_number_listed_in_rfkill_list>
/*
* Copyright (c) 2017 Redpine Signals Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION). HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include "rsi_main.h"
#include "rsi_coex.h"
#include "rsi_hal.h"
#include "rsi_mgmt.h"
static u8 rsi_coex_determine_coex_q(struct rsi_coex_ctrl_block *coex_cb)
{
u8 q_num = INVALID_QUEUE;
if (skb_queue_len(&coex_cb->coex_tx_qs[VIP_Q]) > 0)
q_num = VIP_Q;
if (skb_queue_len(&coex_cb->coex_tx_qs[COEX_Q]) > 0)
q_num = COEX_Q;
if (skb_queue_len(&coex_cb->coex_tx_qs[BT_Q]) > 0)
q_num = BT_Q;
if (skb_queue_len(&coex_cb->coex_tx_qs[ZIGB_Q]) > 0)
q_num = ZIGB_Q;
if (skb_queue_len(&coex_cb->coex_tx_qs[WLAN_Q]) > 0)
q_num = WLAN_Q;
return q_num;
}
static void rsi_coex_sched_tx_pkts(struct rsi_coex_ctrl_block *coex_cb)
{
u8 coex_q;
struct sk_buff *skb;
#ifdef CONFIG_RSI_ZIGB
struct rsi_common *common = coex_cb->priv;
#endif
while (1) {
coex_q = rsi_coex_determine_coex_q(coex_cb);
rsi_dbg(INFO_ZONE, "queue = %d\n", coex_q);
if (coex_q == INVALID_QUEUE) {
rsi_dbg(DATA_TX_ZONE, "No more pkt\n");
break;
}
if ((coex_q == BT_Q) || (coex_q == ZIGB_Q)) {
skb = skb_dequeue(&coex_cb->coex_tx_qs[BT_Q]);
#ifdef CONFIG_RSI_ZIGB
if (common->zb_fsm_state == ZB_DEVICE_READY) {
rsi_dbg(DATA_TX_ZONE, "Sending zigbee pkt\n");
rsi_send_zb_pkt(coex_cb->priv, skb);
} else {
#endif
rsi_dbg(DATA_TX_ZONE, "Sending BT pkt\n");
rsi_send_bt_pkt(coex_cb->priv, skb);
#ifdef CONFIG_RSI_ZIGB
}
#endif
}
}
}
/**
* rsi_coex_scheduler_thread() - This function is a kernel thread to schedule
* the coex packets to device
* @common: Pointer to the driver private structure.
*
* Return: None.
*/
static void rsi_coex_scheduler_thread(struct rsi_common *common)