#define pr_fmt(fmt) …
#include <linux/bitfield.h>
#include <linux/etherdevice.h>
#include <linux/firmware.h>
#include <linux/bitops.h>
#include <linux/rpmsg.h>
#include "smd.h"
#include "firmware.h"
struct wcn36xx_cfg_val { … };
#define WCN36XX_CFG_VAL(id, val) …
static struct wcn36xx_cfg_val wcn36xx_cfg_vals[] = …;
static struct wcn36xx_cfg_val wcn3680_cfg_vals[] = …;
static int put_cfg_tlv_u32(struct wcn36xx *wcn, size_t *len, u32 id, u32 value)
{ … }
static void wcn36xx_smd_set_bss_nw_type(struct wcn36xx *wcn,
struct ieee80211_sta *sta,
struct wcn36xx_hal_config_bss_params *bss_params)
{ … }
static inline u8 is_cap_supported(unsigned long caps, unsigned long flag)
{ … }
static void wcn36xx_smd_set_bss_ht_params(struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wcn36xx_hal_config_bss_params *bss_params)
{ … }
static void
wcn36xx_smd_set_bss_vht_params(struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wcn36xx_hal_config_bss_params_v1 *bss)
{ … }
static void wcn36xx_smd_set_sta_ht_params(struct ieee80211_sta *sta,
struct wcn36xx_hal_config_sta_params *sta_params)
{ … }
static void wcn36xx_smd_set_sta_vht_params(struct wcn36xx *wcn,
struct ieee80211_sta *sta,
struct wcn36xx_hal_config_sta_params_v1 *sta_params)
{ … }
static void wcn36xx_smd_set_sta_ht_ldpc_params(struct ieee80211_sta *sta,
struct wcn36xx_hal_config_sta_params_v1 *sta_params)
{ … }
static void wcn36xx_smd_set_sta_default_ht_params(
struct wcn36xx_hal_config_sta_params *sta_params)
{ … }
static void wcn36xx_smd_set_sta_default_vht_params(struct wcn36xx *wcn,
struct wcn36xx_hal_config_sta_params_v1 *sta_params)
{ … }
static void wcn36xx_smd_set_sta_default_ht_ldpc_params(struct wcn36xx *wcn,
struct wcn36xx_hal_config_sta_params_v1 *sta_params)
{ … }
static void wcn36xx_smd_set_sta_params(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wcn36xx_hal_config_sta_params *sta_params)
{ … }
static int wcn36xx_smd_send_and_wait(struct wcn36xx *wcn, size_t len)
{ … }
#define __INIT_HAL_MSG(msg_body, type, version) … \
#define INIT_HAL_MSG(msg_body, type) …
#define INIT_HAL_MSG_V1(msg_body, type) …
#define INIT_HAL_PTT_MSG(p_msg_body, ppt_msg_len) …
#define PREPARE_HAL_BUF(send_buf, msg_body) … \
#define PREPARE_HAL_PTT_MSG_BUF(send_buf, p_msg_body) …
static int wcn36xx_smd_rsp_status_check(void *buf, size_t len)
{ … }
int wcn36xx_smd_load_nv(struct wcn36xx *wcn)
{ … }
static int wcn36xx_smd_start_rsp(struct wcn36xx *wcn, void *buf, size_t len)
{ … }
int wcn36xx_smd_start(struct wcn36xx *wcn)
{ … }
int wcn36xx_smd_stop(struct wcn36xx *wcn)
{ … }
int wcn36xx_smd_init_scan(struct wcn36xx *wcn, enum wcn36xx_hal_sys_mode mode,
struct ieee80211_vif *vif)
{ … }
int wcn36xx_smd_start_scan(struct wcn36xx *wcn, u8 scan_channel)
{ … }
int wcn36xx_smd_end_scan(struct wcn36xx *wcn, u8 scan_channel)
{ … }
int wcn36xx_smd_finish_scan(struct wcn36xx *wcn,
enum wcn36xx_hal_sys_mode mode,
struct ieee80211_vif *vif)
{ … }
int wcn36xx_smd_start_hw_scan(struct wcn36xx *wcn, struct ieee80211_vif *vif,
struct cfg80211_scan_request *req)
{ … }
int wcn36xx_smd_stop_hw_scan(struct wcn36xx *wcn)
{ … }
int wcn36xx_smd_update_channel_list(struct wcn36xx *wcn, struct cfg80211_scan_request *req)
{ … }
static int wcn36xx_smd_switch_channel_rsp(void *buf, size_t len)
{ … }
int wcn36xx_smd_switch_channel(struct wcn36xx *wcn,
struct ieee80211_vif *vif, int ch)
{ … }
static int wcn36xx_smd_process_ptt_msg_rsp(void *buf, size_t len,
void **p_ptt_rsp_msg)
{ … }
int wcn36xx_smd_process_ptt_msg(struct wcn36xx *wcn,
struct ieee80211_vif *vif, void *ptt_msg, size_t len,
void **ptt_rsp_msg)
{ … }
static int wcn36xx_smd_update_scan_params_rsp(void *buf, size_t len)
{ … }
int wcn36xx_smd_update_scan_params(struct wcn36xx *wcn,
u8 *channels, size_t channel_count)
{ … }
static int wcn36xx_smd_add_sta_self_rsp(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
void *buf,
size_t len)
{ … }
int wcn36xx_smd_add_sta_self(struct wcn36xx *wcn, struct ieee80211_vif *vif)
{ … }
int wcn36xx_smd_delete_sta_self(struct wcn36xx *wcn, u8 *addr)
{ … }
int wcn36xx_smd_delete_sta(struct wcn36xx *wcn, u8 sta_index)
{ … }
static int wcn36xx_smd_join_rsp(void *buf, size_t len)
{ … }
int wcn36xx_smd_join(struct wcn36xx *wcn, const u8 *bssid, u8 *vif, u8 ch)
{ … }
int wcn36xx_smd_set_link_st(struct wcn36xx *wcn, const u8 *bssid,
const u8 *sta_mac,
enum wcn36xx_hal_link_state state)
{ … }
static void wcn36xx_smd_convert_sta_to_v1(struct wcn36xx *wcn,
const struct wcn36xx_hal_config_sta_params *orig,
struct wcn36xx_hal_config_sta_params_v1 *v1)
{ … }
static void
wcn36xx_smd_set_sta_params_v1(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wcn36xx_hal_config_sta_params_v1 *sta_par)
{ … }
static int wcn36xx_smd_config_sta_rsp(struct wcn36xx *wcn,
struct ieee80211_sta *sta,
void *buf,
size_t len)
{ … }
static int wcn36xx_smd_config_sta_v1(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
static int wcn36xx_smd_config_sta_v0(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
int wcn36xx_smd_config_sta(struct wcn36xx *wcn, struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
static void wcn36xx_smd_set_bss_params(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
const u8 *bssid,
bool update,
struct wcn36xx_hal_config_bss_params *bss)
{ … }
static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta_80211,
const u8 *bssid,
bool update)
{ … }
static int wcn36xx_smd_config_bss_v0(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
const u8 *bssid,
bool update)
{ … }
static int wcn36xx_smd_config_bss_rsp(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
void *buf,
size_t len)
{ … }
int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
struct ieee80211_sta *sta, const u8 *bssid,
bool update)
{ … }
int wcn36xx_smd_delete_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif)
{ … }
int wcn36xx_smd_send_beacon(struct wcn36xx *wcn, struct ieee80211_vif *vif,
struct sk_buff *skb_beacon, u16 tim_off,
u16 p2p_off)
{ … }
int wcn36xx_smd_update_proberesp_tmpl(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct sk_buff *skb)
{ … }
int wcn36xx_smd_set_stakey(struct wcn36xx *wcn,
enum ani_ed_type enc_type,
u8 keyidx,
u8 keylen,
u8 *key,
u8 sta_index)
{ … }
int wcn36xx_smd_set_bsskey(struct wcn36xx *wcn,
enum ani_ed_type enc_type,
u8 bssidx,
u8 keyidx,
u8 keylen,
u8 *key)
{ … }
int wcn36xx_smd_remove_stakey(struct wcn36xx *wcn,
enum ani_ed_type enc_type,
u8 keyidx,
u8 sta_index)
{ … }
int wcn36xx_smd_remove_bsskey(struct wcn36xx *wcn,
enum ani_ed_type enc_type,
u8 bssidx,
u8 keyidx)
{ … }
int wcn36xx_smd_enter_bmps(struct wcn36xx *wcn, struct ieee80211_vif *vif)
{ … }
int wcn36xx_smd_exit_bmps(struct wcn36xx *wcn, struct ieee80211_vif *vif)
{ … }
int wcn36xx_smd_enter_imps(struct wcn36xx *wcn)
{ … }
int wcn36xx_smd_exit_imps(struct wcn36xx *wcn)
{ … }
int wcn36xx_smd_set_power_params(struct wcn36xx *wcn, bool ignore_dtim)
{ … }
int wcn36xx_smd_keep_alive_req(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
int packet_type)
{ … }
int wcn36xx_smd_dump_cmd_req(struct wcn36xx *wcn, u32 arg1, u32 arg2,
u32 arg3, u32 arg4, u32 arg5)
{ … }
int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn)
{ … }
static int wcn36xx_smd_add_ba_session_rsp(void *buf, int len, u8 *session)
{ … }
int wcn36xx_smd_add_ba_session(struct wcn36xx *wcn,
struct ieee80211_sta *sta,
u16 tid,
u16 *ssn,
u8 direction,
u8 sta_index)
{ … }
int wcn36xx_smd_add_ba(struct wcn36xx *wcn, u8 session_id)
{ … }
int wcn36xx_smd_del_ba(struct wcn36xx *wcn, u16 tid, u8 direction, u8 sta_index)
{ … }
int wcn36xx_smd_get_stats(struct wcn36xx *wcn, u8 sta_index, u32 stats_mask,
struct station_info *sinfo)
{ … }
static int wcn36xx_smd_trigger_ba_rsp(void *buf, int len, struct add_ba_info *ba_info)
{ … }
int wcn36xx_smd_trigger_ba(struct wcn36xx *wcn, u8 sta_index, u16 tid, u16 *ssn)
{ … }
static int wcn36xx_smd_tx_compl_ind(struct wcn36xx *wcn, void *buf, size_t len)
{ … }
static int wcn36xx_smd_hw_scan_ind(struct wcn36xx *wcn, void *buf, size_t len)
{ … }
static int wcn36xx_smd_missed_beacon_ind(struct wcn36xx *wcn,
void *buf,
size_t len)
{ … }
static int wcn36xx_smd_delete_sta_context_ind(struct wcn36xx *wcn,
void *buf,
size_t len)
{ … }
static int wcn36xx_smd_print_reg_info_ind(struct wcn36xx *wcn,
void *buf,
size_t len)
{ … }
int wcn36xx_smd_update_cfg(struct wcn36xx *wcn, u32 cfg_id, u32 value)
{ … }
int wcn36xx_smd_set_mc_list(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct wcn36xx_hal_rcv_flt_mc_addr_list_type *fp)
{ … }
int wcn36xx_smd_arp_offload(struct wcn36xx *wcn, struct ieee80211_vif *vif,
bool enable)
{ … }
#if IS_ENABLED(CONFIG_IPV6)
int wcn36xx_smd_ipv6_ns_offload(struct wcn36xx *wcn, struct ieee80211_vif *vif,
bool enable)
{ … }
#else
int wcn36xx_smd_ipv6_ns_offload(struct wcn36xx *wcn, struct ieee80211_vif *vif,
bool enable)
{
return 0;
}
#endif
int wcn36xx_smd_gtk_offload(struct wcn36xx *wcn, struct ieee80211_vif *vif,
bool enable)
{ … }
static int wcn36xx_smd_gtk_offload_get_info_rsp(struct wcn36xx *wcn,
struct ieee80211_vif *vif)
{ … }
int wcn36xx_smd_gtk_offload_get_info(struct wcn36xx *wcn,
struct ieee80211_vif *vif)
{ … }
int wcn36xx_smd_wlan_host_suspend_ind(struct wcn36xx *wcn)
{ … }
int wcn36xx_smd_host_resume(struct wcn36xx *wcn)
{ … }
#define BEACON_FILTER(eid, presence, offs, val, mask, ref_val) …
static const struct beacon_filter_ie bcn_filter_ies[] = …;
int wcn36xx_smd_add_beacon_filter(struct wcn36xx *wcn,
struct ieee80211_vif *vif)
{ … }
int wcn36xx_smd_rsp_process(struct rpmsg_device *rpdev,
void *buf, int len, void *priv, u32 addr)
{ … }
static void wcn36xx_ind_smd_work(struct work_struct *work)
{ … }
int wcn36xx_smd_open(struct wcn36xx *wcn)
{ … }
void wcn36xx_smd_close(struct wcn36xx *wcn)
{ … }