Files
kunlun/plc/halmac/hw3/rf_inc/mac_rf_isr.h

313 lines
9.9 KiB
C
Raw Permalink Normal View History

2024-09-28 14:24:04 +08:00
/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef RF_MAC_ISR_H
#define RF_MAC_ISR_H
/* os shim includes */
#include "os_types.h"
/* driver includes */
#include "iot_irq.h"
#include "mac_isr.h"
#ifdef __cplusplus
extern "C" {
#endif
/***********************************************************
* NTOD: hw interrupt show CFG_RF_MAC_COMMON_INT_REG_0_ADDR.
* sw interrupt show CFG_RF_MAC_COMMON_INT_REG_20_ADDR.
* share interrupt show CFG_RF_MAC_COMMON_INT_REG_10_ADDR.
* hw interrupt are interrupts generated by RFMAC;
* sw interrupt are interrupts generated by SW;
* share interrupt indicates the status of txq and rxRing,
* share interrupt is just a status register;
************************************************************/
/* HW interruption id */
/* generate from bb cpu when bb rx done, bb cpu -> rf mac -> main cpu.
* NOTE: don't care about the interruption.
*/
#define RF_MAC_ISR_RX_DONE_ID 0
/* generate from bb cpu when bb tx done, bb cpu -> rf mac -> main cpu.
* NOTE: don't care about the interruption.
*/
#define RF_MAC_ISR_TX_DONE_ID 1
/* generate from rf mac near the end of cmdlist, rf mac -> main cpu.
* NOTE: use by main cpu.
*/
#define RF_MAC_ISR_BC_ALERT_ID 2
/* generate from rf mac when backoff start, rf mac -> bb cpu.
* NOTE: don't care about the interruption.
*/
#define RF_MAC_ISR_BACKOFF_START_ID 3
/* generate from rf mac when backoff start, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_BACKOFF_TIMEOUT_ID 4
/* generate from rf mac when tx start, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_TX_START_ID 5
/* generate from rf mac when rx start, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_RX_START_ID 6
/* generate from rf mac when tx abort, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_TX_ABORT_ID 7
/* generate from rf mac when rx abort, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_RX_ABORT_ID 8
/* generate from rf mac when txq ptr is null, rf mac -> bb cpu.
* NOTE: use by bb cpu or main cpu.
*/
#define RF_MAC_ISR_TXQ_PTR_ERR_ID 9
/* generate from bb when tx complete, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_BB_TX_DONE_ID 10
/* generate from bb when bb force listen stop, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_BB_STOP_LISTEN_ID 11
/* generate from bb when bb rx stf, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_BB_RX_STF_ID 12
/* generate from bb when bb rx sig, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_BB_RX_SIG_ID 13
/* generate from bb when bb rx phr, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_BB_RX_PHR_ID 14
/* generate from bb when bb rx pld start, rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_BB_RX_PLD_START_ID 15
/* generate from main cpu when main cpu need stop schedule,
* main cpu -> rf mac -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_EARLY_STOP_START_ID 16
/* generate from bb cpu when early done, bb cpu -> rf mac -> main cpu.
* NOTE: use by main cpu or not care.
*/
#define RF_MAC_ISR_EARLY_STOP_DONE_ID 17
/* generate from rf mac when cmdlist done, rf mac -> main cpu/bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_CMDLIST_DONE_ID 18
/* generate from rf mac when cmd done, rf mac -> main cpu/bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_ISR_CMD_DONE_ID 19
/* NOTE:keep this the same as the last hw valid ISR ID */
#define RF_MAC_ISR_HW_MAX_ID RF_MAC_ISR_CMD_DONE_ID
/*****************************************************************
* NOTE: 1.the interrupt handled in dsr are interrupted by sw interrupt.
* sw interrupt id 0 ~ 31 bit use driver of sw interrupt.
* 2.interrupt functions that require immediate processing are
* interrupted with timers.
* sw interrupt id 32 ~ 63 bit use driver of timer interrupt.
****************************************************************/
/* NOTE: SW interruption id */
/* generate from main cpu when init bb set option, main cpu -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_SW_ISR_BB_INIT 0
/* generate from main cpu when set channel, main cpu -> bb cpu.
* NOTE: use by main cpu.
*/
#define RF_MAC_SW_ISR_SET_CHANNEL 1
/* generate from bb cpu when tx mpdu complete, bb cpu -> main cpu.
* NOTE: use by main cpu.
*/
#define RF_MAC_SW_ISR_TX_MPDU_COMPLETE 2
/* generate from bb cpu when rx mpdu complete, bb cpu -> main cpu.
* NOTE: use by main cpu.
*/
#define RF_MAC_SW_ISR_RX_MPDU_COMPLETE 3
/* generate from main cpu when trigger hwq, main cpu -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_SW_ISR_CSMA_TX_CHECK 4
/* generate from main cpu when config spi, main cpu -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_SW_ISR_SYNC_SPI_VALUE 5
/* generate from main cpu when tx tone, main cpu -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_SW_ISR_TX_TONE 6
/* generate from main cpu when set power save idle, main cpu -> bb cpu.
* NOTE: use by bb cpu.
*/
#define RF_MAC_SW_ISR_SET_PS_IDLE 7
/* generate from main cpu when tx calibration register need update,
* NOTE: use by bb cpu.
*/
#define RF_MAC_SW_ISR_TX_CAL_UPDATE 8
/* sw int id max */
#define RF_MAC_SW_INT_MAX 32
/* generate from bb cpu when cmdlist real done, bb cpu -> main cpu.
* NOTE: use by main cpu.
*/
#define RF_MAC_SW_ISR_CMDLIST_BBCPU_DONE 32
/* generate from bb cpu when set hplc pcs, bb cpu -> main cpu.
* NOTE: use by main cpu.
*/
#define RF_MAC_SW_ISR_SET_HPLC_PCS 33
/* timer int id max */
#define RF_MAC_SW2_INT_MAX 64
typedef struct _rf_mac_isr_ctx {
/* irq handler for HAL_VECTOR_RFMAC_INT0/HAL_VECTOR_RFMAC_INT1 */
iot_irq_t isr_hw_h;
/* irq handler for HAL_VECTOR_RFMAC_SHARE_INT0/HAL_VECTOR_RFMAC_SHARE_INT1 */
iot_irq_t isr_sw_h;
/* irq handler for HAL_VECTOR_RFMAC_SHARE_INT0/HAL_VECTOR_RFMAC_SHARE_INT1 */
iot_irq_t isr_timer_h;
/* interrupt mask low32 int reg cache, use by hw */
uint32_t isr_hw_mask;
/* interrupt mask share int reg cache, use by sw */
uint32_t isr_sw_mask;
/* interrupt mask share int reg cache, use by sw */
uint32_t isr_timer_mask;
/* callback to receive dsr events */
dsr_notification_func_t rf_dsr_callback;
} rf_mac_isr_ctx_t;
/**
* @brief mac_rf_hw_isr_enable() - mac rf hw isr enable.
* @param id - irq id
* @return void - void
*/
void mac_rf_hw_isr_enable(uint8_t id);
/**
* @brief mac_rf_sw_isr_enable() - mac rf sw isr enable.
* @param id - irq id
* @return void - void
*/
void mac_rf_sw_isr_enable(uint8_t id);
/**
* @brief mac_rf_hw_isr_disable() - mac rf hw isr disenable.
* @param id - irq id
* @return void - void
*/
void mac_rf_hw_isr_disable(uint8_t id);
/**
* @brief mac_rf_sw_isr_disable() - mac rf sw isr disenable.
* @param id - irq id
* @return void - void
*/
void mac_rf_sw_isr_disable(uint8_t id);
/**
* @brief mac_rf_set_sw_irq_to_bbcpu() - mac rf set sw irq to bbcpu.
* @param id - irq id
* @return void - void
*/
void mac_rf_set_sw_irq_to_bbcpu(uint8_t id);
/**
* @brief mac_rf_get_share_interrupt_sts() - mac rf get share intrrupt status.
* @param id - irq id
* @return irq_sts - irq status
*/
uint32_t mac_rf_get_share_interrupt_sts();
/**
* @brief mac_rf_clear_share_interrupt() - mac rf clear share intrrupt status.
* @param irq_sts - irq status
* @return void - void
*/
void mac_rf_clear_share_interrupt(uint32_t irq_sts);
/**
* @brief mac_rf_isr_start() - mac rf isr start.
* @param void - void
* @return void - void
*/
void mac_rf_isr_start();
/**
* @brief mac_rf_dsr_isr_start() - mac rf dsr handle isr start.
* @param void - void
* @return void - void
*/
void mac_rf_dsr_isr_start();
/**
* @brief mac_rf_get_dsr_callback() - mac rf get dsr callback.
* @param void - void
* @return dsr_notification_func_t - callback.
*/
dsr_notification_func_t mac_rf_get_dsr_callback();
/**
* @brief mac_rf_isr_init() - mac rf isr init.
* @param callback - callback function.
* @return void - void
*/
void mac_rf_isr_init(dsr_notification_func_t callback);
#ifdef __cplusplus
}
#endif
#endif /* MAC_ISR_H */