linuxOS_AP06/external/rkwifibt/drivers/infineon/wl_cfg80211_xr.h
2025-06-03 12:28:32 +08:00

660 lines
20 KiB
C
Executable File

/*
* Exported API by wl_cfg80211 Modules
* Common function shared by MASTER driver
*
* Portions of this code are copyright (c) 2023 Cypress Semiconductor Corporation
*
* Copyright (C) 1999-2018, Broadcom Corporation
*
* Unless you and Broadcom execute a separate written software license
* agreement governing use of this software, this software is licensed to you
* under the terms of the GNU General Public License version 2 (the "GPL"),
* available at http://www.broadcom.com/licenses/GPLv2.php, with the
* following added to such license:
*
* As a special exception, the copyright holders of this software give you
* permission to link this software with independent modules, and to copy and
* distribute the resulting executable under terms of your choice, provided that
* you also meet, for each linked independent module, the terms and conditions of
* the license of that module. An independent module is a module which is not
* derived from this software. The special exception does not apply to any
* modifications of the software.
*
* Notwithstanding the above, under no circumstances may you combine this
* software in any way with any other Broadcom software provided under a license
* other than the GPL, without Broadcom's express prior written consent.
*
*
* <<Broadcom-WL-IPTag/Open:>>
*
* $Id$
*/
#ifndef __WL_CFG8021_XR_H__
#define __WL_CFG8021_XR_H__
typedef struct _xr_buf {
#define MAX_XR_CMD_SIZE 1024
char buf[MAX_XR_CMD_SIZE];
int len;
bool sync;
bool in_use;
} xr_buf_t;
enum xr_cmds {
/* sync */
XR_CMD_ADD_IF,
XR_CMD_REPLY_ADD_IF,
/* sync */
XR_CMD_DEL_IF,
XR_CMD_REPLY_DEL_IF,
/* Async */
XR_CMD_SCAN,
/* sync */
XR_CMD_GET_TX_POWER,
XR_CMD_REPLY_GET_TX_POWER,
/* sync */
XR_CMD_SET_POWER_MGMT,
XR_CMD_REPLY_SET_POWER_MGMT,
/* sync */
XR_CMD_FLUSH_PMKSA,
XR_CMD_REPLY_FLUSH_PMKSA,
/* sync */
XR_CMD_CHANGE_VIRUTAL_IFACE,
XR_CMD_REPLY_CHANGE_VIRUTAL_IFACE,
/* sync */
XR_CMD_START_AP,
XR_CMD_REPLY_START_AP,
/* sync */
XR_CMD_SET_MAC_ACL,
XR_CMD_REPLY_SET_MAC_ACL,
/* sync */
XR_CMD_CHANGE_BSS,
XR_CMD_REPLY_CHANGE_BSS,
/* sync */
XR_CMD_ADD_KEY,
XR_CMD_REPLY_ADD_KEY,
/* sync */
XR_CMD_SET_CHANNEL,
XR_CMD_REPLY_SET_CHANNEL,
/* sync */
XR_CMD_CONFIG_DEFAULT_KEY,
XR_CMD_REPLY_CONFIG_DEFAULT_KEY,
/* sync */
XR_CMD_STOP_AP,
XR_CMD_REPLY_STOP_AP,
/* sync */
XR_CMD_DEL_STATION,
XR_CMD_REPLY_DEL_STATION,
/* sync */
XR_CMD_CHANGE_STATION,
XR_CMD_REPLY_CHANGE_STATION,
/* sync */
XR_CMD_MGMT_TX,
XR_CMD_REPLY_MGMT_TX,
/* sync */
XR_CMD_EXTERNAL_AUTH,
XR_CMD_REPLY_EXTERNAL_AUTH,
/* sync */
XR_CMD_DEL_KEY,
XR_CMD_REPLY_DEL_KEY,
/* sync */
XR_CMD_GET_KEY,
XR_CMD_REPLY_GET_KEY,
/* sync */
XR_CMD_DEL_VIRTUAL_IFACE,
XR_CMD_REPLY_DEL_VIRTUAL_IFACE,
/* sync */
XR_CMD_GET_STATION,
XR_CMD_REPLY_GET_STATION,
/* sync */
XR_CMD_BSTR_UPDATE_IFACES,
XR_CMD_REPLY_BSTR_UPDATE_IFACES,
#ifdef WL_6E
/* sync */
XR_CMD_STOP_FILS_6G,
XR_CMD_REPLY_STOP_FILS_6G,
#endif /* WL_6E */
};
typedef struct _xr_cmd {
int cmd_id;
int len;
uint8 data[0];
} xr_cmd_t;
/* add_if */
typedef struct _xr_cmd_add_if {
u8 wl_iftype;
const char *name;
u8 *mac;
} xr_cmd_add_if_t;
typedef struct _xr_cmd_reply_add_if {
struct wireless_dev *wdev;
} xr_cmd_reply_add_if_t;
/* del_if */
typedef struct _xr_cmd_del_if {
struct wireless_dev *wdev;
char *ifname;
} xr_cmd_del_if_t;
typedef struct _xr_cmd_reply_del_if {
s32 status;
} xr_cmd_reply_del_if_t;
typedef struct _xr_cmd_scan {
struct wiphy *wiphy;
struct net_device *ndev;
struct cfg80211_scan_request *request;
} xr_cmd_scan_t;
/* get_tx_power */
typedef struct _xr_cmd_get_tx_power {
struct wiphy *wiphy;
#if defined(WL_CFG80211_P2P_DEV_IF)
struct wireless_dev *wdev;
#endif // endif
s32 *dbm;
}xr_cmd_get_tx_power_t;
typedef struct _xr_cmd_reply_get_tx_power {
s32 status;
}xr_cmd_reply_get_tx_power_t;
/*set_power_mgmt*/
typedef struct _xr_cmd_set_power_mgmt {
struct wiphy *wiphy;
struct net_device *dev;
bool enabled;
s32 timeout;
}xr_cmd_set_power_mgmt_t;
typedef struct _xr_cmd_reply_set_power_mgmt {
s32 status;
}xr_cmd_reply_set_power_mgmt_t;
/* flush pmksa */
typedef struct _xr_cmd_flush_pmksa {
struct wiphy *wiphy;
struct net_device *dev;
}xr_cmd_flush_pmksa_t;
typedef struct _xr_cmd_reply_flush_pmksa {
s32 status;
}xr_cmd_reply_flush_pmksa_t;
typedef struct _xr_cmd_change_virtual_iface {
struct wiphy *wiphy;
struct net_device *ndev;
int type;
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0))
u32 *flags;
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) */
struct vif_params *params;
}xr_cmd_change_virtual_iface_t;
typedef struct _xr_cmd_reply_change_virtual_iface {
s32 status;
}xr_cmd_reply_change_virtual_iface_t;
/* start_ap */
typedef struct _xr_cmd_start_ap {
struct wiphy *wiphy;
struct net_device *dev;
struct cfg80211_ap_settings *info;
} xr_cmd_start_ap_t;
typedef struct _xr_cmd_reply_start_ap {
s32 status;
}xr_cmd_reply_start_ap_t;
#ifdef WL_CFG80211_ACL
/* set_mac_acl */
typedef struct _xr_cmd_set_mac_acl {
struct wiphy *wiphy;
struct net_device *cfgdev;
const struct cfg80211_acl_data *acl;
}xr_cmd_set_mac_acl_t;
typedef struct _xr_cmd_reply_set_mac_acl {
s32 status;
}xr_cmd_reply_set_mac_acl_t;
#endif /* WL_CFG80211_ACL */
/* change_bss */
typedef struct _xr_cmd_change_bss {
struct wiphy *wiphy;
struct net_device *dev;
struct bss_parameters *params;
}xr_cmd_change_bss_t;
typedef struct _xr_cmd_reply_change_bss {
s32 status;
}xr_cmd_reply_change_bss_t;
/* add_key */
typedef struct _xr_cmd_add_key {
struct wiphy *wiphy;
struct net_device *dev;
u8 key_idx;
bool pairwise;
const u8 *mac_addr;
struct key_params *params;
}xr_cmd_add_key_t;
typedef struct _xr_cmd_reply_add_key {
s32 status;
}xr_cmd_reply_add_key_t;
/* set_channel */
typedef struct _xr_cmd_set_channel {
struct wiphy *wiphy;
struct net_device *dev;
struct ieee80211_channel *chan;
int channel_type;
}xr_cmd_set_channel_t;
typedef struct _xr_cmd_reply_set_channel {
s32 status;
}xr_cmd_reply_set_channel_t;
/* config_default_key */
typedef struct _xr_cmd_config_default_key {
struct wiphy *wiphy;
struct net_device *dev;
u8 key_idx;
bool unicast;
bool multicast;
}xr_cmd_config_default_key_t;
typedef struct _xr_cmd_reply_config_default_key {
s32 status;
}xr_cmd_reply_config_default_key_t;
/* stop_ap */
typedef struct _xr_cmd_stop_ap {
struct wiphy *wiphy;
struct net_device *dev;
}xr_cmd_stop_ap_t;
typedef struct _xr_cmd_reply_stop_ap {
s32 status;
}xr_cmd_reply_stop_ap_t;
/* del_station */
typedef struct _xr_cmd_del_station {
struct wiphy *wiphy;
struct net_device *ndev;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0))
struct station_del_parameters *params;
#else
u8* mac_addr;
#endif // endif
}xr_cmd_del_station_t;
typedef struct _xr_cmd_reply_del_station {
s32 status;
}xr_cmd_reply_del_station_t;
/* change_station */
typedef struct _xr_cmd_change_station {
struct wiphy *wiphy;
struct net_device *dev;
const u8 *mac;
struct station_parameters *params;
} xr_cmd_change_station_t;
typedef struct _xr_cmd_reply_change_station {
s32 status;
} xr_cmd_reply_change_station_t;
/* mgmt_tx */
typedef struct _xr_cmd_mgmt_tx {
struct wiphy *wiphy;
#if defined(WL_CFG80211_P2P_DEV_IF)
struct wireless_dev *cfgdev;
#else
struct net_device *cfgdev;
#endif /* WL_CFG80211_P2P_DEV_IF */
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
struct cfg80211_mgmt_tx_params *params;
u64 *cookie;
#else
#if (LINUX_VERSION_CODE <= KERNEL_VERSION(3, 7, 0))
enum nl80211_channel_type channel_type;
bool channel_type_valid;
#endif /* (LINUX_VERSION_CODE <= KERNEL_VERSION(3, 7, 0)) */
unsigned int wait;
const u8* buf;
size_t len;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)) || defined(WL_COMPAT_WIRELESS)
bool no_cck;
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)) || \
defined(WL_COMPAT_WIRELESS) */
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0)) || defined(WL_COMPAT_WIRELESS)
bool dont_wait_for_ack;
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0)) || \
defined(WL_COMPAT_WIRELESS) */
u64 *cookie;
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) */
} xr_cmd_mgmt_tx_t;
typedef struct _xr_cmd_reply_mgmt_tx {
s32 status;
} xr_cmd_reply_mgmt_tx_t;
#ifdef WL_SAE
/* external_auth */
typedef struct _xr_cmd_external_auth {
struct wiphy *wiphy;
struct net_device *dev;
struct cfg80211_external_auth_params *params;
} xr_cmd_external_auth_t;
typedef struct _xr_cmd_reply_external_auth {
s32 status;
} xr_cmd_reply_external_auth_t;
#endif /* WL_SAE */
/* del_key */
typedef struct _xr_cmd_del_key {
struct wiphy *wiphy;
struct net_device *dev;
u8 key_idx;
bool pairwise;
const u8 *mac_addr;
}xr_cmd_del_key_t;
typedef struct _xr_cmd_reply_del_key {
s32 status;
}xr_cmd_reply_del_key_t;
/* get_key */
typedef struct _xr_cmd_get_key {
struct wiphy *wiphy;
struct net_device *dev;
u8 key_idx;
bool pairwise;
const u8 *mac_addr;
void *cookie;
void (*callback) (void *cookie, struct key_params * params);
}xr_cmd_get_key_t;
typedef struct _xr_cmd_reply_get_key {
s32 status;
}xr_cmd_reply_get_key_t;
/* del_virtual_iface */
typedef struct _xr_cmd_del_virtual_iface {
struct wiphy *wiphy;
bcm_struct_cfgdev *cfgdev;
}xr_cmd_del_virtual_iface_t;
typedef struct _xr_cmd_reply_del_virtual_iface {
s32 status;
}xr_cmd_reply_del_virtual_iface_t;
/* get_station */
typedef struct _xr_cmd_get_station {
struct wiphy *wiphy;
struct net_device *dev;
const u8 *mac;
struct station_info *sinfo;
} xr_cmd_get_station_t;
typedef struct _xr_cmd_reply_get_station {
s32 status;
} xr_cmd_reply_get_station_t;
#ifdef DHD_BANDSTEER
/* bstr_update_ifaces */
typedef struct _xr_cmd_bstr_update_ifaces {
struct net_device *ndev;
} xr_cmd_bstr_update_ifaces_t;
typedef struct _xr_cmd_reply_bstr_update_ifaces {
s32 status;
} xr_cmd_reply_bstr_update_ifaces_t;
#endif /* DHD_BANDSTEER */
#ifdef WL_6E
/* stop fils 6g */
typedef struct _xr_cmd_stop_fils_6g {
struct wiphy *wiphy;
struct net_device *dev;
u8 stop_fils_6g_value;
} xr_cmd_stop_fils_6g_t;
typedef struct _xr_cmd_reply_stop_fils_6g {
s32 status;
} xr_cmd_reply_stop_fils_6g_t;
#endif /* WL_6E */
typedef struct _xr_cmd_reply_status {
struct wireless_dev *add_if_wdev;
s32 del_if_status;
s32 get_tx_power_status;
s32 set_power_mgmt_status;
s32 flush_pmksa_status;
s32 change_virtual_iface_status;
s32 start_ap_status;
#ifdef WL_CFG80211_ACL
s32 set_mac_acl_status;
#endif /* WL_CFG80211_ACL */
s32 change_bss_status;
s32 add_key_status;
s32 set_channel_status;
s32 config_default_key_status;
s32 stop_ap_status;
s32 del_station_status;
s32 change_station_status;
s32 mgmt_tx_status;
#ifdef WL_SAE
s32 external_auth_status;
#endif /* WL_SAE */
s32 del_key_status;
s32 get_key_status;
s32 del_virtual_iface_status;
s32 get_station_status;
#ifdef DHD_BANDSTEER
s32 bstr_update_ifaces_status;
#endif /* DHD_BANDSTEER */
#ifdef WL_6E
s32 stop_fils_6g_status;
#endif /* WL_6E */
} xr_cmd_reply_status_t;
typedef struct _xr_comp_wait {
struct completion add_if_wait;
struct completion del_if_wait;
struct completion get_tx_power_wait;
struct completion set_power_mgmt_wait;
struct completion flush_pmksa_wait;
struct completion change_virtual_iface_wait;
struct completion start_ap_wait;
#ifdef WL_CFG80211_ACL
struct completion set_mac_acl_wait;
#endif /* WL_CFG80211_ACL */
struct completion change_bss_wait;
struct completion add_key_wait;
struct completion set_channel_wait;
struct completion config_default_key_wait;
struct completion stop_ap_wait;
struct completion del_station_wait;
struct completion change_station_wait;
struct completion mgmt_tx_wait;
#ifdef WL_SAE
struct completion external_auth_wait;
#endif /* WL_SAE */
struct completion del_key_wait;
struct completion get_key_wait;
struct completion del_virtual_iface_wait;
struct completion get_station_wait;
#ifdef DHD_BANDSTEER
struct completion bstr_update_ifaces_wait;
#endif /* DHD_BANDSTEER */
#ifdef WL_6E
struct completion stop_fils_6g_wait;
#endif /* WL_6E */
} xr_comp_wait_t;
#define XR_CMD_GET_DEST_PUB(cfg, role) ((role == XR_MASTER) ? cfg->xr_slave_dhd_pub : cfg->pub)
#define DHD_XR_GET_SLAVE_WDEV(cfg) (cfg->xr_slave_prim_wdev ? cfg->xr_slave_prim_wdev : NULL)
#define DHD_XR_GET_SLAVE_NDEV(cfg)(DHD_XR_GET_SLAVE_WDEV(cfg) ? DHD_XR_GET_SLAVE_WDEV(cfg)->netdev : NULL)
#define MAX_XR_CMD_NUM 4
typedef struct _xr_ctx {
uint8 xr_role;
xr_buf_t xr_cmd_buf[MAX_XR_CMD_NUM];
uint32 xr_cmd_store_idx;
uint32 xr_cmd_sent_idx;
xr_comp_wait_t xr_cmd_wait;
xr_cmd_reply_status_t xr_cmd_reply_status;
} xr_ctx_t;
#define DHD_GET_XR_ROLE(pub) (((xr_ctx_t*)(pub->xr_ctx))->xr_role)
#define DHD_GET_XR_CTX(pub) (((dhd_pub_t*)pub)->xr_ctx)
/* The level of bus communication with the dongle */
extern int wl_cfg80211_dhd_xr_netdev_attach(struct net_device *ndev, int wl_iftype, void *ifp,
u8 bssidx, u8 ifidx);
extern int wl_cfg80211_dhd_xr_prim_netdev_attach(struct net_device *ndev, wl_iftype_t wl_iftype, void *ifp,
u8 bssidx, u8 ifidx);
extern int dhd_xr_init(dhd_pub_t *dhdp);
extern int dhd_xr_deinit(dhd_pub_t *dhdp);
extern s32 wl_cfg80211_dhd_xr_notify_ifchange(struct net_device *dev, int ifidx, char *name, uint8 *mac, uint8 bssidx);
extern int xr_cmd_handler(dhd_pub_t *pub, xr_buf_t *xr_buf);
extern s32 wl_cfg80211_del_if_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
struct wireless_dev *wdev, char *ifname);
extern struct wireless_dev *wl_cfg80211_add_if_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
u8 wl_iftype, const char *name, u8 *mac);
#if defined(WL_CFG80211_P2P_DEV_IF)
s32
extern wl_cfg80211_scan_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy,
struct cfg80211_scan_request *request);
#else
s32
extern wl_cfg80211_scan_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy,
struct net_device *ndev, struct cfg80211_scan_request *request);
#endif /* WL_CFG80211_P2P_DEV_IF */
#if defined(WL_CFG80211_P2P_DEV_IF)
extern s32 wl_cfg80211_get_tx_power_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy,
struct wireless_dev *wdev, s32 *dbm);
#else
extern s32 wl_cfg80211_get_tx_power_xr(dhd_pub_t *src_pub,dhd_pub_t *dest_pub, struct wiphy *wiphy, s32 *dbm);
#endif /* WL_CFG80211_P2P_DEV_IF */
extern s32 wl_cfg80211_set_power_mgmt_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev,
bool enabled, s32 timeout);
extern s32 wl_cfg80211_flush_pmksa_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev);
extern s32 wl_cfg80211_change_virtual_iface_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *ndev,
enum nl80211_iftype type,
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0))
u32 *flags,
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) */
struct vif_params *params);
extern s32 wl_cfg80211_start_ap_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_settings *info);
extern int wl_cfg80211_set_mac_acl_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *cfgdev, const struct cfg80211_acl_data *acl);
extern s32 wl_cfg80211_change_bss_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev, struct bss_parameters *params);
extern s32 wl_cfg80211_add_key_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev, u8 key_idx, bool pairwise, const u8 *mac_addr,
struct key_params *params);
extern s32
wl_cfg80211_set_channel_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev, struct ieee80211_channel *chan, enum nl80211_channel_type channel_type);
s32
wl_cfg80211_config_default_key_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy,
struct net_device *dev, u8 key_idx, bool unicast, bool multicast);
extern s32
wl_cfg80211_stop_ap_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0))
extern s32 wl_cfg80211_del_station_xr(
dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
struct wiphy *wiphy, struct net_device *ndev,
struct station_del_parameters *params);
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0))
extern s32 wl_cfg80211_del_station_xr(
dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
struct wiphy *wiphy,
struct net_device *ndev,
const u8* mac_addr);
#else
extern s32 wl_cfg80211_del_station_xr(
dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
struct wiphy *wiphy,
struct net_device *ndev,
u8* mac_addr);
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) */
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0))
extern s32
wl_cfg80211_change_station_xr(
dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
struct wiphy *wiphy,
struct net_device *dev,
const u8* mac,
struct station_parameters *params);
#else
extern s32
wl_cfg80211_change_station_xr(
dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
struct wiphy *wiphy,
struct net_device *dev,
u8* mac,
struct station_parameters *params);
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) */
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
s32
wl_cfg80211_mgmt_tx_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, bcm_struct_cfgdev *cfgdev,
struct cfg80211_mgmt_tx_params *params, u64 *cookie);
#else
s32
wl_cfg80211_mgmt_tx_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, bcm_struct_cfgdev *cfgdev,
struct ieee80211_channel *channel, bool offchan,
#if (LINUX_VERSION_CODE <= KERNEL_VERSION(3, 7, 0))
enum nl80211_channel_type channel_type,
bool channel_type_valid,
#endif /* LINUX_VERSION_CODE <= KERNEL_VERSION(3, 7, 0) */
unsigned int wait, const u8* buf, size_t len,
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)) || defined(WL_COMPAT_WIRELESS)
bool no_cck,
#endif // endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0)) || defined(WL_COMPAT_WIRELESS)
bool dont_wait_for_ack,
#endif // endif
u64 *cookie);
#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0) */
#ifdef WL_SAE
extern int
wl_cfg80211_external_auth_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev,
struct cfg80211_external_auth_params *params);
#endif /* WL_SAE */
extern s32 wl_cfg80211_del_key_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev, u8 key_idx, bool pairwise, const u8 *mac_addr);
/* get_key */
extern s32 wl_cfg80211_get_key_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev, u8 key_idx, bool pairwise, const u8 *mac_addr, void *cookie,
void (*callback) (void *cookie, struct key_params * params));
extern s32
wl_cfg80211_del_virtual_iface_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, bcm_struct_cfgdev *cfgdev);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0))
s32
wl_cfg80211_get_station_xr(
dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
struct wiphy *wiphy,
struct net_device *dev,
const u8* mac,
struct station_info *sinfo);
#else
s32
wl_cfg80211_get_station_xr(
dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
struct wiphy *wiphy,
struct net_device *dev,
u8* mac,
struct station_info *sinfo);
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) */
extern int xr_cmd_deferred_handler(dhd_pub_t *pub, xr_buf_t *xr_buf);
#ifdef DHD_BANDSTEER
/* dhd_bandsteer_update_slave_ifaces */
s32 dhd_bandsteer_update_ifaces_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub,
struct net_device *ndev);
#endif /* DHD_BANDSTEER */
#ifdef WL_6E
s32
wl_stop_fils_6g_xr(dhd_pub_t *src_pub, dhd_pub_t *dest_pub, struct wiphy *wiphy, struct net_device *dev, u8 fils_stop);
#endif /* WL_6E */
#endif /* __WL_CFG8021_XR_H__ */