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>
190 lines
6.8 KiB
C
190 lines
6.8 KiB
C
/*
|
|
* Copyright (c) 2021 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.
|
|
*/
|
|
|
|
/*
|
|
* IPC utility function declarations
|
|
*/
|
|
|
|
|
|
#ifndef __FMAC_UTILS_H__
|
|
#define __FMAC_UTILS_H__
|
|
|
|
|
|
/*******************************************************************************
|
|
* Include Files
|
|
******************************************************************************/
|
|
#include <linux/dma-mapping.h>
|
|
#include <linux/skbuff.h>
|
|
|
|
#include "lmac_msg.h"
|
|
#include "ipc_host.h"
|
|
#include "fmac_cmds.h"
|
|
|
|
|
|
/*******************************************************************************
|
|
* Defines
|
|
******************************************************************************/
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function sets a value of a bit field inside an array of bits,
|
|
* represented as an array of bytes.
|
|
* @param[in] array Array of bits
|
|
* @param[in] lsb Position of the LSB of the field inside the array of bits
|
|
* @param[in] width Width of the field
|
|
* @param[in] val Value to be set
|
|
****************************************************************************************
|
|
*/
|
|
__INLINE void _ssv_co_val_set(u8 array[], int lsb, int width, u8 val)
|
|
{
|
|
int msb = lsb + width - 1;
|
|
int l_byte_idx = lsb/8;
|
|
int m_byte_idx = msb/8;
|
|
|
|
if (m_byte_idx == l_byte_idx)
|
|
{
|
|
u8 mask = CO_BIT(width) - 1;
|
|
int shift = lsb % 8;
|
|
array[l_byte_idx] &= ~(mask << shift);
|
|
array[l_byte_idx] |= (val & mask) << shift;
|
|
}
|
|
else
|
|
{
|
|
u8 l_bits_cnt = m_byte_idx * 8 - lsb;
|
|
u8 l_mask = CO_BIT(l_bits_cnt) - 1;
|
|
u8 m_mask = CO_BIT(width - l_bits_cnt) - 1;
|
|
int l_shift = lsb % 8;
|
|
array[l_byte_idx] &= ~(l_mask << l_shift);
|
|
array[m_byte_idx] &= ~m_mask;
|
|
array[l_byte_idx] |= (val & l_mask) << l_shift;
|
|
array[m_byte_idx] |= (val >> l_bits_cnt) & m_mask;
|
|
}
|
|
}
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function sets a specific bit position inside an array of bits, represented
|
|
* as an array of bytes.
|
|
* @param[in] array Array of bits
|
|
* @param[in] pos Bit position to be set
|
|
****************************************************************************************
|
|
*/
|
|
__INLINE void _ssv_co_bit_set(u8 array[], u8 pos)
|
|
{
|
|
array[pos / 8] |= CO_BIT(pos % 8);
|
|
}
|
|
|
|
|
|
/*******************************************************************************
|
|
* Enumerations
|
|
******************************************************************************/
|
|
enum ssv_dev_flag {
|
|
SSV_DEV_RESTARTING,
|
|
SSV_DEV_STACK_RESTARTING,
|
|
SSV_DEV_STARTED,
|
|
};
|
|
|
|
|
|
/*******************************************************************************
|
|
* Structures
|
|
******************************************************************************/
|
|
struct ssv_dbginfo {
|
|
struct mutex mutex;
|
|
struct dbg_debug_dump_tag *buf;
|
|
dma_addr_t dma_addr;
|
|
int bufsz;
|
|
};
|
|
|
|
/*
|
|
* Structure used to store information regarding Debug msg buffers in the driver
|
|
*/
|
|
struct ssv_dbg_elem {
|
|
struct ipc_dbg_msg *dbgbuf_ptr;
|
|
dma_addr_t dma_addr;
|
|
};
|
|
|
|
|
|
/*******************************************************************************
|
|
* Variables
|
|
******************************************************************************/
|
|
|
|
|
|
/*******************************************************************************
|
|
* Functions
|
|
******************************************************************************/
|
|
/**
|
|
******************************************************************************
|
|
* @brief Initialize IPC interface.
|
|
*
|
|
* This function initializes IPC interface by registering callbacks, setting
|
|
* shared memory area and calling IPC Init function.
|
|
*
|
|
* This function should be called only once during driver's lifetime.
|
|
*
|
|
* @param[in] sc Pointer to main structure storing all the
|
|
* relevant information
|
|
* @param[in] ipc_shared_mem
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
int ssv_ipc_init(struct ssv_softc *sc);
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief Release IPC interface.
|
|
*
|
|
* @param[in] sc Pointer to main structure storing all the relevant
|
|
* information
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
void ssv_ipc_deinit(struct ssv_softc *sc);
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief Function called upon DBG_ERROR_IND message reception.
|
|
* This function triggers the UMH script call that will indicate to the user
|
|
* space the error that occurred and stored the debug dump. Once the UMH script
|
|
* is executed, the ssv_umh_done function has to be called.
|
|
*
|
|
* @param[in] sc Pointer to main structure storing all the relevant
|
|
* information
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
void ssv_error_ind(struct ssv_softc *sc);
|
|
|
|
void ssv_chanctx_link(struct ssv_vif *vif, u8 idx,
|
|
struct cfg80211_chan_def *chandef);
|
|
void ssv_chanctx_unlink(struct ssv_vif *vif);
|
|
int ssv_chanctx_valid(struct ssv_softc *sc, u8 idx);
|
|
|
|
struct ssv_sta *ssv_get_sta(struct ssv_softc *sc, const u8 *mac_addr);
|
|
|
|
void ssv_rxtput_calculation(struct ssv_softc *sc, u32 len, u32 seq_no);
|
|
|
|
void ssv_hex_dump(unsigned char *data, int len);
|
|
int ssv_xmit_deauth_frame(struct ssv_softc *sc, struct ssv_vif *vif, struct ssv_sta *sta,
|
|
u8 *da, u8 *sa, u8 *bssid, u16 reason);
|
|
struct sk_buff *ssv_build_nulldata_frame(u8 *da, u8 *sa, u8 *bssid, bool qos, bool fromds);
|
|
int ssv_fmac_hci_tx(struct ssv_softc *sc, struct sk_buff *skb, int txqid,
|
|
bool force_trigger,u32 tx_flags);
|
|
enum data_frame_types ssv_get_data_frame_type(struct sk_buff *skb);
|
|
#ifdef CONFIG_SSV_CHANNEL_FOLLOW
|
|
void ssv_channel_switch_check(struct ssv_softc *sc, u16 freq, enum nl80211_channel_type chann_type);
|
|
#endif /*CONFIG_SSV_CHANNEL_FOLLOW */
|
|
void ssv6xxx_fw_reset_send_deauth_check(struct ssv_softc *sc, struct ssv_vif *vif);
|
|
#endif /* __FMAC_UTILS_H__ */
|