android13/external/wifi_driver/aic8800/aic8800_fdrv/rwnx_prof.h

134 lines
3.9 KiB
C
Raw Normal View History

2024-06-22 08:45:49 -04:00
/**
****************************************************************************************
*
* @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_ */