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>
179 lines
5.5 KiB
C
179 lines
5.5 KiB
C
/**
|
|
******************************************************************************
|
|
*
|
|
* @file rwnx_radar.h
|
|
*
|
|
* @brief Functions to handle radar detection
|
|
*
|
|
*
|
|
* Copyright (C) RivieraWaves 2012-2019
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
#ifndef _RWNX_RADAR_H_
|
|
#define _RWNX_RADAR_H_
|
|
|
|
#include <linux/nl80211.h>
|
|
#include <linux/version.h>
|
|
|
|
struct rwnx_vif;
|
|
struct rwnx_hw;
|
|
|
|
enum rwnx_radar_chain {
|
|
RWNX_RADAR_RIU = 0,
|
|
RWNX_RADAR_FCU,
|
|
RWNX_RADAR_LAST
|
|
};
|
|
|
|
enum rwnx_radar_detector {
|
|
RWNX_RADAR_DETECT_DISABLE = 0, /* Ignore radar pulses */
|
|
RWNX_RADAR_DETECT_ENABLE = 1, /* Process pattern detection but do not
|
|
report radar to upper layer (for test) */
|
|
RWNX_RADAR_DETECT_REPORT = 2 /* Process pattern detection and report
|
|
radar to upper layer. */
|
|
};
|
|
|
|
#ifdef CONFIG_RWNX_RADAR
|
|
#include <linux/workqueue.h>
|
|
#include <linux/spinlock.h>
|
|
|
|
#define RWNX_RADAR_PULSE_MAX 32
|
|
|
|
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0))
|
|
/**
|
|
* enum nl80211_dfs_regions - regulatory DFS regions
|
|
*
|
|
* @NL80211_DFS_UNSET: Country has no DFS master region specified
|
|
* @NL80211_DFS_FCC_: Country follows DFS master rules from FCC
|
|
* @NL80211_DFS_FCC_: Country follows DFS master rules from ETSI
|
|
* @NL80211_DFS_JP_: Country follows DFS master rules from JP/MKK/Telec
|
|
*/
|
|
enum nl80211_dfs_regions {
|
|
NL80211_DFS_UNSET = 0,
|
|
NL80211_DFS_FCC = 1,
|
|
NL80211_DFS_ETSI = 2,
|
|
NL80211_DFS_JP = 3,
|
|
};
|
|
#endif
|
|
|
|
/**
|
|
* struct rwnx_radar_pulses - List of pulses reported by HW
|
|
* @index: write index
|
|
* @count: number of valid pulses
|
|
* @buffer: buffer of pulses
|
|
*/
|
|
struct rwnx_radar_pulses {
|
|
/* Last radar pulses received */
|
|
int index;
|
|
int count;
|
|
u32 buffer[RWNX_RADAR_PULSE_MAX];
|
|
};
|
|
|
|
/**
|
|
* struct dfs_pattern_detector - DFS pattern detector
|
|
* @region: active DFS region, NL80211_DFS_UNSET until set
|
|
* @num_radar_types: number of different radar types
|
|
* @last_pulse_ts: time stamp of last valid pulse in usecs
|
|
* @prev_jiffies:
|
|
* @radar_detector_specs: array of radar detection specs
|
|
* @channel_detectors: list connecting channel_detector elements
|
|
*/
|
|
struct dfs_pattern_detector {
|
|
u8 enabled;
|
|
enum nl80211_dfs_regions region;
|
|
u8 num_radar_types;
|
|
u64 last_pulse_ts;
|
|
u32 prev_jiffies;
|
|
//const struct radar_detector_specs *radar_spec;
|
|
struct list_head detectors[];
|
|
};
|
|
|
|
#define NX_NB_RADAR_DETECTED 4
|
|
|
|
/**
|
|
* struct rwnx_radar_detected - List of radar detected
|
|
*/
|
|
struct rwnx_radar_detected {
|
|
u16 index;
|
|
u16 count;
|
|
s64 time[NX_NB_RADAR_DETECTED];
|
|
s16 freq[NX_NB_RADAR_DETECTED];
|
|
};
|
|
|
|
|
|
struct rwnx_radar {
|
|
struct rwnx_radar_pulses pulses[RWNX_RADAR_LAST];
|
|
struct dfs_pattern_detector *dpd[RWNX_RADAR_LAST];
|
|
struct rwnx_radar_detected detected[RWNX_RADAR_LAST];
|
|
struct work_struct detection_work; /* Work used to process radar pulses */
|
|
spinlock_t lock; /* lock for pulses processing */
|
|
|
|
/* In softmac cac is handled by mac80211 */
|
|
#ifdef CONFIG_RWNX_FULLMAC
|
|
struct delayed_work cac_work; /* Work used to handle CAC */
|
|
struct rwnx_vif *cac_vif; /* vif on which we started CAC */
|
|
#endif
|
|
};
|
|
|
|
bool rwnx_radar_detection_init(struct rwnx_radar *radar);
|
|
void rwnx_radar_detection_deinit(struct rwnx_radar *radar);
|
|
bool rwnx_radar_set_domain(struct rwnx_radar *radar,
|
|
enum nl80211_dfs_regions region);
|
|
void rwnx_radar_detection_enable(struct rwnx_radar *radar, u8 enable, u8 chain);
|
|
bool rwnx_radar_detection_is_enable(struct rwnx_radar *radar, u8 chain);
|
|
void rwnx_radar_start_cac(struct rwnx_radar *radar, u32 cac_time_ms,
|
|
struct rwnx_vif *vif);
|
|
void rwnx_radar_cancel_cac(struct rwnx_radar *radar);
|
|
void rwnx_radar_detection_enable_on_cur_channel(struct rwnx_hw *rwnx_hw);
|
|
int rwnx_radar_dump_pattern_detector(char *buf, size_t len,
|
|
struct rwnx_radar *radar, u8 chain);
|
|
int rwnx_radar_dump_radar_detected(char *buf, size_t len,
|
|
struct rwnx_radar *radar, u8 chain);
|
|
|
|
#else
|
|
|
|
struct rwnx_radar {
|
|
};
|
|
|
|
static inline bool rwnx_radar_detection_init(struct rwnx_radar *radar)
|
|
{return true;}
|
|
|
|
static inline void rwnx_radar_detection_deinit(struct rwnx_radar *radar)
|
|
{}
|
|
|
|
static inline bool rwnx_radar_set_domain(struct rwnx_radar *radar,
|
|
enum nl80211_dfs_regions region)
|
|
{return true;}
|
|
|
|
static inline void rwnx_radar_detection_enable(struct rwnx_radar *radar,
|
|
u8 enable, u8 chain)
|
|
{}
|
|
|
|
static inline bool rwnx_radar_detection_is_enable(struct rwnx_radar *radar,
|
|
u8 chain)
|
|
{return false;}
|
|
|
|
static inline void rwnx_radar_start_cac(struct rwnx_radar *radar,
|
|
u32 cac_time_ms, struct rwnx_vif *vif)
|
|
{}
|
|
|
|
static inline void rwnx_radar_cancel_cac(struct rwnx_radar *radar)
|
|
{}
|
|
|
|
static inline void rwnx_radar_detection_enable_on_cur_channel(struct rwnx_hw *rwnx_hw)
|
|
{}
|
|
|
|
static inline int rwnx_radar_dump_pattern_detector(char *buf, size_t len,
|
|
struct rwnx_radar *radar,
|
|
u8 chain)
|
|
{return 0;}
|
|
|
|
static inline int rwnx_radar_dump_radar_detected(char *buf, size_t len,
|
|
struct rwnx_radar *radar,
|
|
u8 chain)
|
|
{return 0;}
|
|
|
|
#endif /* CONFIG_RWNX_RADAR */
|
|
|
|
#endif // _RWNX_RADAR_H_
|