#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/firmware.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/rpmsg.h>
#include <linux/soc/qcom/smem_state.h>
#include <linux/soc/qcom/wcnss_ctrl.h>
#include <net/ipv6.h>
#include "wcn36xx.h"
#include "testmode.h"
#include "firmware.h"
unsigned int wcn36xx_dbg_mask;
module_param_named(debug_mask, wcn36xx_dbg_mask, uint, 0644);
MODULE_PARM_DESC(…) …;
#define CHAN2G(_freq, _idx) …
#define CHAN5G(_freq, _idx, _phy_val) …
static struct ieee80211_channel wcn_2ghz_channels[] = …;
static struct ieee80211_channel wcn_5ghz_channels[] = …;
#define RATE(_bitrate, _hw_rate, _flags) …
static struct ieee80211_rate wcn_2ghz_rates[] = …;
static struct ieee80211_rate wcn_5ghz_rates[] = …;
static struct ieee80211_supported_band wcn_band_2ghz = …;
static struct ieee80211_supported_band wcn_band_5ghz = …;
#ifdef CONFIG_PM
static const struct wiphy_wowlan_support wowlan_support = …;
#endif
static inline u8 get_sta_index(struct ieee80211_vif *vif,
struct wcn36xx_sta *sta_priv)
{ … }
static void wcn36xx_feat_caps_info(struct wcn36xx *wcn)
{ … }
static int wcn36xx_start(struct ieee80211_hw *hw)
{ … }
static void wcn36xx_stop(struct ieee80211_hw *hw, bool suspend)
{ … }
static void wcn36xx_change_ps(struct wcn36xx *wcn, bool enable)
{ … }
static void wcn36xx_change_opchannel(struct wcn36xx *wcn, int ch)
{ … }
static int wcn36xx_config(struct ieee80211_hw *hw, u32 changed)
{ … }
static void wcn36xx_configure_filter(struct ieee80211_hw *hw,
unsigned int changed,
unsigned int *total, u64 multicast)
{ … }
static u64 wcn36xx_prepare_multicast(struct ieee80211_hw *hw,
struct netdev_hw_addr_list *mc_list)
{ … }
static void wcn36xx_tx(struct ieee80211_hw *hw,
struct ieee80211_tx_control *control,
struct sk_buff *skb)
{ … }
static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct ieee80211_key_conf *key_conf)
{ … }
static int wcn36xx_hw_scan(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_scan_request *hw_req)
{ … }
static void wcn36xx_cancel_hw_scan(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static void wcn36xx_sw_scan_start(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
const u8 *mac_addr)
{ … }
static void wcn36xx_sw_scan_complete(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static void wcn36xx_update_allowed_rates(struct ieee80211_sta *sta,
enum nl80211_band band)
{ … }
void wcn36xx_set_default_rates(struct wcn36xx_hal_supported_rates *rates)
{ … }
void wcn36xx_set_default_rates_v1(struct wcn36xx_hal_supported_rates_v1 *rates)
{ … }
static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *bss_conf,
u64 changed)
{ … }
static int wcn36xx_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
{ … }
static void wcn36xx_remove_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int wcn36xx_add_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int wcn36xx_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
static int wcn36xx_sta_remove(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
#ifdef CONFIG_PM
static struct ieee80211_vif *wcn36xx_get_first_assoc_vif(struct wcn36xx *wcn)
{ … }
static int wcn36xx_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wow)
{ … }
static int wcn36xx_resume(struct ieee80211_hw *hw)
{ … }
static void wcn36xx_set_rekey_data(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct cfg80211_gtk_rekey_data *data)
{ … }
#endif
static int wcn36xx_ampdu_action(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_ampdu_params *params)
{ … }
#if IS_ENABLED(CONFIG_IPV6)
static void wcn36xx_ipv6_addr_change(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct inet6_dev *idev)
{ … }
#endif
static void wcn36xx_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
u32 queues, bool drop)
{ … }
static int wcn36xx_get_survey(struct ieee80211_hw *hw, int idx,
struct survey_info *survey)
{ … }
static void wcn36xx_sta_statistics(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct ieee80211_sta *sta, struct station_info *sinfo)
{ … }
static const struct ieee80211_ops wcn36xx_ops = …;
static void
wcn36xx_set_ieee80211_vht_caps(struct ieee80211_sta_vht_cap *vht_cap)
{ … }
static int wcn36xx_init_ieee80211(struct wcn36xx *wcn)
{ … }
static int wcn36xx_platform_get_resources(struct wcn36xx *wcn,
struct platform_device *pdev)
{ … }
static int wcn36xx_probe(struct platform_device *pdev)
{ … }
static void wcn36xx_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id wcn36xx_of_match[] = …;
MODULE_DEVICE_TABLE(of, wcn36xx_of_match);
static struct platform_driver wcn36xx_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_FIRMWARE(…);