luckfox-pico-sdk/sysdrv/drv_ko/wifi/atbm/hal_apollo/sta.h
2023-08-08 20:36:47 +08:00

173 lines
6.7 KiB
C

/*
* Mac80211 STA interface for altobeam APOLLO mac80211 drivers
* *
* Copyright (c) 2016, altobeam
* Author:
*
*Based on apollo code
* Copyright (c) 2010, ST-Ericsson
* Author: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef STA_H_INCLUDED
#define STA_H_INCLUDED
/* ******************************************************************** */
/* mac80211 API */
int atbm_start(struct ieee80211_hw *dev);
void atbm_stop(struct ieee80211_hw *dev);
int atbm_add_interface(struct ieee80211_hw *dev,
struct ieee80211_vif *vif);
void atbm_remove_interface(struct ieee80211_hw *dev,
struct ieee80211_vif *vif);
int atbm_change_interface(struct ieee80211_hw *dev,
struct ieee80211_vif *vif,
enum nl80211_iftype new_type,
bool p2p);
int atbm_config(struct ieee80211_hw *dev, u32 changed);
int atbm_change_interface(struct ieee80211_hw *dev,
struct ieee80211_vif *vif,
enum nl80211_iftype new_type,
bool p2p);
void atbm_configure_filter(struct ieee80211_hw *dev,
struct ieee80211_vif *vif,
unsigned int changed_flags,
unsigned int *total_flags,
u64 multicast);
int atbm_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
u16 queue, const struct ieee80211_tx_queue_params *params);
int atbm_get_stats(struct ieee80211_hw *dev,
struct ieee80211_low_level_stats *stats);
/* Not more a part of interface?
int atbm_get_tx_stats(struct ieee80211_hw *dev,
struct ieee80211_tx_queue_stats *stats);
*/
int atbm_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd,
struct ieee80211_vif *vif, struct ieee80211_sta *sta,
struct ieee80211_key_conf *key);
int atbm_set_rts_threshold(struct ieee80211_hw *hw,
struct ieee80211_vif *vif, u32 value);
void atbm_flush(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
bool drop);
#ifdef CONFIG_ATBM_SUPPORT_P2P
int atbm_remain_on_channel(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_channel *chan,
enum nl80211_channel_type channel_type,
int duration, u64 cookie);
int atbm_cancel_remain_on_channel(struct ieee80211_hw *hw);
#endif
#ifdef CONFIG_ATBM_LMAC_FILTER_IP_FRAME
int atbm_set_arpreply(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
#endif
u64 atbm_prepare_multicast(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct netdev_hw_addr_list *mc_list);
int atbm_set_pm(struct atbm_vif *priv, const struct wsm_set_pm *arg);
void atbm_dhcp_retry_work(struct atbm_work_struct *work);
#ifdef CONFIG_ATBM_LMAC_FILTER_IP_FRAME
void atbm_set_data_filter(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
void *data,
int len);
#endif
/* ******************************************************************** */
/* WSM callbacks */
/* void atbm_set_pm_complete_cb(struct atbm_common *hw_priv,
struct wsm_set_pm_complete *arg); */
/* ******************************************************************** */
/* WSM events */
void atbm_free_event_queue(struct atbm_common *hw_priv);
void atbm_event_handler(struct atbm_work_struct *work);
void atbm_keep_alive_work(struct atbm_work_struct *work);
#ifndef CONFIG_TX_NO_CONFIRM
void atbm_tx_failure_work(struct atbm_work_struct *work);
void atbm_bss_loss_work(struct atbm_work_struct *work);
void atbm_connection_loss_work(struct atbm_work_struct *work);
#endif
/* ******************************************************************** */
/* Internal API */
#ifdef CONFIG_ATBM_SUPPORT_P2P
void atbm_pending_offchanneltx_work(struct atbm_work_struct *work);
void atbm_offchannel_work(struct atbm_work_struct *work);
void atbm_rem_chan_timeout(struct atbm_work_struct *work);
#endif
int atbm_setup_mac(struct atbm_common *hw_priv);
void atbm_join_work(struct atbm_work_struct *work);
void atbm_restart_join_bss(struct atbm_vif *priv,struct cfg80211_bss *bss);
void atbm_join_timeout(struct atbm_work_struct *work);
void atbm_unjoin_work(struct atbm_work_struct *work);
void atbm_wep_key_work(struct atbm_work_struct *work);
void atbm_update_filtering(struct atbm_vif *priv);
#ifdef CONFIG_ATBM_MAC80211_NO_USE
void atbm_update_filtering_work(struct atbm_work_struct *work);
#endif
int __atbm_flush(struct atbm_common *hw_priv, bool drop, int if_id);
void atbm_set_beacon_wakeup_period_work(struct atbm_work_struct *work);
#if defined(CONFIG_ATBM_STA_LISTEN) || defined(CONFIG_ATBM_SUPPORT_P2P)
int atbm_enable_listening(struct atbm_vif *priv,
struct ieee80211_channel *chan);
int atbm_disable_listening(struct atbm_vif *priv);
#endif
int atbm_set_uapsd_param(struct atbm_vif *priv,
const struct wsm_edca_params *arg);
#ifdef CONFIG_ATBM_BA_STATUS
void atbm_ba_work(struct atbm_work_struct *work);
void atbm_ba_timer(unsigned long arg);
#endif
const u8 *atbm_get_ie(u8 *start, size_t len, u8 ie);
int atbm_vif_setup(struct atbm_vif *priv);
void atbm_vif_setup_params(struct atbm_vif *priv);
int atbm_setup_mac_pvif(struct atbm_vif *priv);
void atbm_iterate_vifs(void *data, u8 *mac,
struct ieee80211_vif *vif);
#ifdef ATBM_SUPPORT_WOW
int atbm_set_macaddrfilter(struct atbm_common *hw_priv, struct atbm_vif *priv, u8 *data);
#endif
#ifdef CONFIG_ATBM_STA_LISTEN
int atbm_sta_triger_listen(struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_channel *chan);
void atbm_sta_listen_int(struct atbm_common *hw_priv);
int atbm_sta_stop_listen(struct ieee80211_hw *hw,struct ieee80211_vif *vif);
#endif
#ifdef CONFIG_ATBM_SUPPORT_SCHED_SCAN
#ifdef ROAM_OFFLOAD
int atbm_testmode_event(struct wiphy *wiphy, const u32 msg_id,
const void *data, int len, gfp_t gfp);
#endif /*ROAM_OFFLOAD*/
#endif
#ifdef IPV6_FILTERING
int atbm_set_na(struct ieee80211_hw *hw,
struct ieee80211_vif *vif);
#endif /*IPV6_FILTERING*/
#if defined(CONFIG_NL80211_TESTMODE) && defined(CONFIG_ATBM_TEST_TOOL)
int atbm_altmtest_cmd(struct ieee80211_hw *hw, void *data, int len);
#endif
#ifdef CONFIG_ATBM_APOLLO_TESTMODE
void atbm_device_power_calc(struct atbm_common *priv,
s16 max_output_power, s16 fe_cor, u32 band);
int atbm_testmode_cmd(struct ieee80211_hw *hw, void *data, int len);
int atbm_tesmode_event(struct wiphy *wiphy, const u32 msg_id,
const void *data, int len, gfp_t gfp);
int atbm_get_tx_power_range(struct ieee80211_hw *hw);
int atbm_get_tx_power_level(struct ieee80211_hw *hw);
#endif /* CONFIG_ATBM_APOLLO_TESTMODE */
#endif