Files
luban-lite/bsp/peripheral/wireless/aic8800/fdrv/macif/rwnx_utils.h
刘可亮 3e10f578d3 v1.2.2
2025-10-21 13:59:50 +08:00

160 lines
4.5 KiB
C

/**
* rwnx_utils.h
*/
#ifndef _RWNX_UTILS_H_
#define _RWNX_UTILS_H_
#include "aic_plat_types.h"
#include "aic_plat_log.h"
#include "fhost.h"
/// Macro defining an invalid VIF index
#define INVALID_VIF_IDX 0xFF
#define INVALID_STA_IDX 0xFF
#define AICWF_RX_REORDER 1
#define AICWF_RWNX_TIMER_EN 1
#define REORDER_DEBUG 0
#if !REORDER_DEBUG
#define DBG_REORD(...) do {} while (0)
#define WRN_REORD(...) do {} while (0)
#define DBG_TIMER(...) do {} while (0)
#define WRN_TIMER(...) do {} while (0)
#else
#define DBG_REORD(...) DBG_MACIF_VRB(__VA_ARGS__)
#define WRN_REORD(...) DBG_MACIF_WRN(__VA_ARGS__)
#define DBG_TIMER(...) DBG_MACIF_VRB(__VA_ARGS__)
#define WRN_TIMER(...) DBG_MACIF_WRN(__VA_ARGS__)
#endif
#define ERR_REORD(...) DBG_MACIF_ERR(__VA_ARGS__)
#define ERR_TIMER(...) DBG_MACIF_ERR(__VA_ARGS__)
#ifdef CONFIG_RWNX_DBG
#define RWNX_DBG AIC_LOG_PRINTF
#else
#define RWNX_DBG(a...) do {} while (0)
#endif
#define RWNX_FN_ENTRY_STR ">>> %s()\n", __func__
struct rwnx_hw;
typedef uint32_t dma_addr_t;
/// 802.11 Status Code
#define MAC_ST_SUCCESSFUL 0
#define MAC_ST_FAILURE 1
#define MAC_ST_RESERVED 2
#define MAC_ST_CAPA_NOT_SUPPORTED 10
#define MAC_ST_REASSOC_NOT_ASSOC 11
#define MAC_ST_ASSOC_DENIED 12
#define MAC_ST_AUTH_ALGO_NOT_SUPPORTED 13
#define MAC_ST_AUTH_FRAME_WRONG_SEQ 14
#define MAC_ST_AUTH_CHALLENGE_FAILED 15
#define MAC_ST_AUTH_TIMEOUT 16
#define MAC_ST_ASSOC_TOO_MANY_STA 17
#define MAC_ST_ASSOC_RATES_NOT_SUPPORTED 18
#define MAC_ST_ASSOC_PREAMBLE_NOT_SUPPORTED 19
#define MAC_ST_ASSOC_SPECTRUM_REQUIRED 22
#define MAC_ST_ASSOC_POWER_CAPA 23
#define MAC_ST_ASSOC_SUPPORTED_CHANNEL 24
#define MAC_ST_ASSOC_SLOT_NOT_SUPPORTED 25
#define MAC_ST_REFUSED_TEMPORARILY 30
#define MAC_ST_INVALID_MFP_POLICY 31
#define MAC_ST_INVALID_IE 40 // draft 7.0 extention
#define MAC_ST_GROUP_CIPHER_INVALID 41 // draft 7.0 extention
#define MAC_ST_PAIRWISE_CIPHER_INVALID 42 // draft 7.0 extention
#define MAC_ST_AKMP_INVALID 43 // draft 7.0 extention
#define MAC_ST_UNSUPPORTED_RSNE_VERSION 44 // draft 7.0 extention
#define MAC_ST_INVALID_RSNE_CAPA 45 // draft 7.0 extention
#define MAC_ST_CIPHER_SUITE_REJECTED 46 // draft 7.0 extention
#if (AICWF_RWNX_TIMER_EN)
typedef void (*rwnx_timer_cb_t)(void * arg,void * arg1);
enum rwnx_timer_state_e {
RWNX_TIMER_STATE_FREE = 0,
RWNX_TIMER_STATE_POST = 1,
RWNX_TIMER_STATE_STOP = 2,
};
enum rwnx_timer_action_e {
RWNX_TIMER_ACTION_CREATE = 0,
RWNX_TIMER_ACTION_START = 1,
RWNX_TIMER_ACTION_RESTART = 2,
RWNX_TIMER_ACTION_STOP = 3,
RWNX_TIMER_ACTION_DELETE = 4,
RWNX_TIMER_ACTION_NONE = 5,
};
struct rwnx_timer_node_s {
struct co_list_hdr hdr;
rwnx_timer_cb_t cb;
void *arg;
void *arg1;
uint32_t expired_ms; // remained
enum rwnx_timer_state_e state;
enum rwnx_timer_action_e action;
bool periodic;
bool auto_load;
};
typedef struct rwnx_timer_node_s * rwnx_timer_handle;
#endif
#if (AICWF_RX_REORDER)
#define MAX_REORD_RXFRAME 250
#define REORDER_UPDATE_TIME 50
#define AICWF_REORDER_WINSIZE 64
#define SN_LESS(a, b) (((a-b)&0x800) != 0)
#define SN_EQUAL(a, b) (a == b)
struct reord_ctrl {
uint8_t enable;
uint8_t wsize_b;
uint16_t ind_sn;
uint16_t list_cnt;
struct co_list reord_list;
rtos_mutex reord_list_lock;
#if (AICWF_RWNX_TIMER_EN)
rwnx_timer_handle reord_timer;
#else
rtos_timer reord_timer;
#endif
};
struct reord_ctrl_info {
struct co_list_hdr hdr;
uint8_t mac_addr[6];
struct reord_ctrl preorder_ctrl[8];
};
struct fhost_rx_buf_tag;
struct recv_msdu {
struct co_list_hdr hdr;
struct fhost_rx_buf_tag *rx_buf;
#ifdef CONFIG_RX_NOCOPY
void *lwip_msg;
#endif
uint16_t buf_len;
uint16_t seq_num;
uint8_t tid;
uint8_t forward;
//struct reord_ctrl *preorder_ctrl;
};
int rwnx_rxdataind_aicwf(struct fhost_rx_buf_tag *buf);
void rwnx_reord_init(void);
void rwnx_reord_deinit(void);
int reord_single_frame_ind(struct recv_msdu *prframe);
void reord_deinit_sta_by_mac(const uint8_t *mac_addr);
#endif
int8_t data_pkt_rssi_get(uint8_t *mac_addr);
#endif /* _RWNX_UTILS_H_ */