luckfox-pico-sdk/sysdrv/drv_ko/wifi/aic8800_netdrv/rwnx_prof.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

134 lines
3.9 KiB
C

/**
****************************************************************************************
*
* @file rwnx_prof.h
*
* Copyright (C) RivieraWaves 2012-2019
*
****************************************************************************************
*/
#ifndef _RWNX_PROF_H_
#define _RWNX_PROF_H_
#include "reg_access.h"
#include "rwnx_platform.h"
static inline void rwnx_prof_set(struct rwnx_hw *rwnx_hw, int val)
{
struct rwnx_plat *rwnx_plat = rwnx_hw->plat;
RWNX_REG_WRITE(val, rwnx_plat, RWNX_ADDR_SYSTEM, NXMAC_SW_SET_PROFILING_ADDR);
}
static inline void rwnx_prof_clear(struct rwnx_hw *rwnx_hw, int val)
{
struct rwnx_plat *rwnx_plat = rwnx_hw->plat;
RWNX_REG_WRITE(val, rwnx_plat, RWNX_ADDR_SYSTEM, NXMAC_SW_CLEAR_PROFILING_ADDR);
}
#if 0
/* Defines for SW Profiling registers values */
enum {
TX_IPC_IRQ,
TX_IPC_EVT,
TX_PREP_EVT,
TX_DMA_IRQ,
TX_MAC_IRQ,
TX_PAYL_HDL,
TX_CFM_EVT,
TX_IPC_CFM,
RX_MAC_IRQ, // 8
RX_TRIGGER_EVT,
RX_DMA_IRQ,
RX_DMA_EVT,
RX_IPC_IND,
RX_MPDU_XFER,
DBG_PROF_MAX
};
#endif
enum {
SW_PROF_HOSTBUF_IDX = 12,
/****** IPC IRQs related signals ******/
/* E2A direction */
SW_PROF_IRQ_E2A_RXDESC = 16, // to make sure we let 16 bits available for LMAC FW
SW_PROF_IRQ_E2A_TXCFM,
SW_PROF_IRQ_E2A_DBG,
SW_PROF_IRQ_E2A_MSG,
SW_PROF_IPC_MSGPUSH,
SW_PROF_MSGALLOC,
SW_PROF_MSGIND,
SW_PROF_DBGIND,
/* A2E direction */
SW_PROF_IRQ_A2E_TXCFM_BACK,
/****** Driver functions related signals ******/
SW_PROF_WAIT_QUEUE_STOP,
SW_PROF_WAIT_QUEUE_WAKEUP,
SW_PROF_RWNXDATAIND,
SW_PROF_RWNX_IPC_IRQ_HDLR,
SW_PROF_RWNX_IPC_THR_IRQ_HDLR,
SW_PROF_IEEE80211RX,
SW_PROF_RWNX_PATTERN,
SW_PROF_MAX
};
// [LT]For debug purpose only
#if (0)
#define SW_PROF_CHAN_CTXT_CFM_HDL_BIT (21)
#define SW_PROF_CHAN_CTXT_CFM_BIT (22)
#define SW_PROF_CHAN_CTXT_CFM_SWDONE_BIT (23)
#define SW_PROF_CHAN_CTXT_PUSH_BIT (24)
#define SW_PROF_CHAN_CTXT_QUEUE_BIT (25)
#define SW_PROF_CHAN_CTXT_TX_BIT (26)
#define SW_PROF_CHAN_CTXT_TX_PAUSE_BIT (27)
#define SW_PROF_CHAN_CTXT_PSWTCH_BIT (28)
#define SW_PROF_CHAN_CTXT_SWTCH_BIT (29)
// TO DO: update this
#define REG_SW_SET_PROFILING_CHAN(env, bit) \
rwnx_prof_set((struct rwnx_hw*)env, BIT(bit))
#define REG_SW_CLEAR_PROFILING_CHAN(env, bit) \
rwnx_prof_clear((struct rwnx_hw*)env, BIT(bit))
#else
#define SW_PROF_CHAN_CTXT_CFM_HDL_BIT (0)
#define SW_PROF_CHAN_CTXT_CFM_BIT (0)
#define SW_PROF_CHAN_CTXT_CFM_SWDONE_BIT (0)
#define SW_PROF_CHAN_CTXT_PUSH_BIT (0)
#define SW_PROF_CHAN_CTXT_QUEUE_BIT (0)
#define SW_PROF_CHAN_CTXT_TX_BIT (0)
#define SW_PROF_CHAN_CTXT_TX_PAUSE_BIT (0)
#define SW_PROF_CHAN_CTXT_PSWTCH_BIT (0)
#define SW_PROF_CHAN_CTXT_SWTCH_BIT (0)
#define REG_SW_SET_PROFILING_CHAN(env, bit) do {} while (0)
#define REG_SW_CLEAR_PROFILING_CHAN(env, bit) do {} while (0)
#endif
#ifdef CONFIG_RWNX_SW_PROFILING
/* Macros for SW PRofiling registers access */
#define REG_SW_SET_PROFILING(env, bit) \
rwnx_prof_set((struct rwnx_hw*)env, BIT(bit))
#define REG_SW_SET_HOSTBUF_IDX_PROFILING(env, val) \
rwnx_prof_set((struct rwnx_hw*)env, val<<(SW_PROF_HOSTBUF_IDX))
#define REG_SW_CLEAR_PROFILING(env, bit) \
rwnx_prof_clear((struct rwnx_hw*)env, BIT(bit))
#define REG_SW_CLEAR_HOSTBUF_IDX_PROFILING(env) \
rwnx_prof_clear((struct rwnx_hw*)env,0x0F<<(SW_PROF_HOSTBUF_IDX))
#else
#define REG_SW_SET_PROFILING(env, value) do {} while (0)
#define REG_SW_CLEAR_PROFILING(env, value) do {} while (0)
#define REG_SW_SET_HOSTBUF_IDX_PROFILING(env, val) do {} while (0)
#define REG_SW_CLEAR_HOSTBUF_IDX_PROFILING(env) do {} while (0)
#endif
#endif /* _RWNX_PROF_H_ */