luckfox-pico-sdk/sysdrv/drv_ko/wifi/ssv6115/fmac/fmac.h
luckfox-eng29 8f34c2760d project:build.sh: Added fastboot support; custom modifications to U-Boot and kernel implemented using patches.
project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between
the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door
for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more
usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp:
Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for
compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem.
sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device
tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately.
sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick
boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades.
sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for
fastboot.

Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
2024-10-14 09:47:04 +08:00

252 lines
6.5 KiB
C

/*
* Copyright (c) 2015 iComm-semi Ltd.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _FMAC_H_
#define _FMAC_H_
#include "utils/debugfs.h"
#include "fmac/fmac_defs.h"
#include "fmac/fmac_tx.h"
#include "hci/ssv_hci.h"
struct ssv6xxx_ping {
// ping
#if 0
struct task_struct *ping_tsk;
unsigned long ping_count;
#endif
volatile bool result;
unsigned long start;
unsigned int seq;
};
struct _ssv6xxx_txtput{
struct task_struct *txtput_tsk;
struct sk_buff *skb;
u32 size_per_frame;
u32 loop_times;
u32 occupied_tx_pages;
};
/**
* struct ssv_tx - tx queue for outgoing frames through interface.
* Each AC queue uniquely associates with a hardware tx queue.
*/
struct ssv_tx {
u32 tx_count;
u32 tx_mgmt_count;
u32 tx_data_count;
u32 tx_auth_count;
u32 tx_deauth_count;
u32 tx_assoc_req_count;
u32 tx_assoc_resp_count;
u32 tx_probe_req_count;
u32 tx_probe_resp_count;
u32 tx_arp_req_count;
u32 tx_arp_reply_count;
u32 tx_icmp_echo;
u32 tx_icmp_echoreply;
u32 tx_dhcp_discv;
u32 tx_dhcp_offer;
u32 tx_dhcp_req;
u32 tx_dhcp_ack;
u32 tx_eapol;
u32 flowctl_stop_count;
u32 flowctl_wake_count;
};
/**
* struct ssv_rx, mib count
*/
struct ssv_rx {
u32 rx_count;
u32 rx_data_count;
u32 rx_mgmt_count;
u32 rx_bcn_count;
u32 rx_proberesp_count;
u32 rx_probereq_count;
u32 rx_assoc_req_count;
u32 rx_assoc_resp_count;
u32 rx_auth_count;
u32 rx_disassoc_count;
u32 rx_deauth_count;
u32 rx_reord_count;
u32 rx_arp_req_count;
u32 rx_arp_reply_count;
u32 rx_icmp_echo;
u32 rx_icmp_echoreply;
u32 rx_dhcp_discv;
u32 rx_dhcp_offer;
u32 rx_dhcp_ack;
u32 rx_dhcp_req;
u32 rx_eapol;
};
enum data_frame_types {
SSV_ARP_REPLY = 1,
SSV_ARP_REQUEST = 2,
SSV_ICMP_ECHO = 3,
SSV_ICMP_ECHOREPLY = 4,
SSV_DHCP_DISCOVER = 5,
SSV_DHCP_OFFER = 6,
SSV_DHCP_REQUEST = 7,
SSV_DHCP_ACK = 8,
SSV_EAPOL = 9,
SSV_DATA_UNKNOW = 0xFF, //keep last
};
struct fw_reset_cmd {
struct list_head list;
u32 msg_type;
u32 msg_len;
u8 data[0];
}__packed;
struct ssv_sta_reconnect_info{
u32 auth_type;
bool connect_retry;
int retry_times;
};
/**
* struct ssv_softc - hold the whole wifi driver data structure.
*
*/
struct ssv_softc {
struct wiphy *wiphy;
struct device *dev;
void *hci_priv;
struct ssv6xxx_hci_ops *hci_ops;
#if 1 //fmac related.
struct ssv_mod_params *mod_params;
bool use_phy_bw_tweaks;
struct list_head vifs;
struct ssv_vif *vif_table[NX_VIRT_DEV_MAX]; /* indexed with fw id */
struct ssv_sta sta_table[NX_REMOTE_STA_MAX + NX_VIRT_DEV_MAX];
struct ssv_survey_info survey[SCAN_CHANNEL_MAX];
struct cfg80211_scan_request *scan_request;
struct ssv_chanctx chanctx_table[NX_CHAN_CTXT_CNT];
u8 cur_chanctx;
struct ssv_sta_reconnect_info sta_reconnect_info;
struct semaphore reconnect_sem;
/* RoC Management */
struct ssv_roc_elem *roc_elem; /* Information provided by cfg80211 in its remain on channel request */
u32 roc_cookie_cnt; /* Counter used to identify RoC request sent by cfg80211 */
struct ssv_cmd_mgr cmd_mgr;
unsigned long drv_flags;
struct ipc_host_env_tag *ipc_env; /* store the IPC environment */
struct mutex cmd_lock;
struct mutex cb_lock; //mutex to protect code from FW confirmation/indication message and cfg80211 operation
struct mm_version_cfm version_cfm; /* Lower layers versions - obtained via MM_VERSION_REQ */
u32 cmd_sent;
struct ssv_sec_phy_chan sec_phy_chan;
u8 phy_cnt;
u8 avail_idx_map;
u8 vif_started;
bool adding_sta;
struct phy_cfg_tag phy_config;
u8 recovery_flag; //temp add for fw recovery flag
#endif
int8_t rssival[RSSI_MAX];
s16 rssiaccu;
u8 rssicnt;
u8 rssiidx;
u16 rate_config; //[15:14] Protection, [13:11] Modulation, [10:9] Guard Interval, [8:7] Bandwidth, [6:0] MCS index
u16 rate_reserve; //[7:6] phy mode, [5] ht40, [4] long/short GI, [3:0] rate index
/* extended capabilities supported */
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)) || defined(IEEE80211_HE_MAC_CAP2_TRS)
u8 ext_capa[10];
#else
u8 ext_capa[8];
#endif
//flow control
bool flowctl_txq_stop;
//for txtput
struct _ssv6xxx_txtput ssv_txtput;
// rxtput
unsigned long throughput_timestamp;
unsigned long rx_evt_size;
//for ping
struct ssv6xxx_ping ssv_ping;
u16 now_ack_seq;
struct sk_buff_head wait_sw_ack_q;
struct ssv_tx tx;
struct ssv_rx rx;
struct ssv_tx tx_bysta[NX_REMOTE_STA_MAX + NX_VIRT_DEV_MAX];
struct ssv_rx rx_bysta[NX_REMOTE_STA_MAX + NX_VIRT_DEV_MAX];
u8 dump_level;
int (*pktrec)(struct sk_buff *rx_skb, struct sk_buff *tx_skb);
u8 phy_ch_bw;
struct cfg80211_chan_def monitor_chandef; /* channel description */
u8 maddr[2][6];
u8 if_mode[2][2];
//for fw reset use, softap need
u16 center_freq;
enum nl80211_channel_type chan_type;
//for fw reset use, check fw alive need
int fw_cur_status_idle_time;
u32 fw_cur_status_cnt;
u32 fw_pre_status_cnt;
//for fw reset use, reset process need
u8 fw_reset_run;
struct work_struct fw_reset_work;
struct workqueue_struct *fw_reset_wq;
struct fw_reset_cmd reset_cmd;
//for fw reset use, debug cmd
bool skip_ke;
#ifdef SSV_PERFORMANCE_WATCH
//for performance watch use
bool skip_fmac_to_hci;
u32 watch_time;
u32 watch_type;
u32 watch_stop;
struct task_struct *watch_tsk;
unsigned long tx_run_cnt;
unsigned long tx_run_size;
unsigned long tx_run_time;
u32 sw_txq_res[SSV_SW_TXQ_NUM][6];
#endif
//stoping apm
bool is_stoping_apm;
//firmware version
u32 fw_version;
};
#endif