431 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			431 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/****************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								****************************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* os shim includes */
							 | 
						||
| 
								 | 
							
								#include "iot_config.h"
							 | 
						||
| 
								 | 
							
								#include "os_types.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* plc public api includes */
							 | 
						||
| 
								 | 
							
								#include "plc_fr.h"
							 | 
						||
| 
								 | 
							
								#include "plc_const.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* driver includes */
							 | 
						||
| 
								 | 
							
								#include "iot_irq.h"
							 | 
						||
| 
								 | 
							
								#include "bb_cpu_mac_isr.h"
							 | 
						||
| 
								 | 
							
								#include "bb_cpu_mac_init.h"
							 | 
						||
| 
								 | 
							
								#include "bb_cpu_fsm.h"
							 | 
						||
| 
								 | 
							
								#include "bb_cpu_timer.h"
							 | 
						||
| 
								 | 
							
								#include "mac_rf_isr.h"
							 | 
						||
| 
								 | 
							
								#include "iot_io.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "hw_reg_api.h"
							 | 
						||
| 
								 | 
							
								#include "rfplc_reg_base.h"
							 | 
						||
| 
								 | 
							
								#include "rf_mac_reg.h"
							 | 
						||
| 
								 | 
							
								#include "mac_sys_reg.h"
							 | 
						||
| 
								 | 
							
								#include "plc_mac_cfg.h"
							 | 
						||
| 
								 | 
							
								#include "mac_rf_common_hw.h"
							 | 
						||
| 
								 | 
							
								#include "mac_rf_timer.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define mac isr ctxt */
							 | 
						||
| 
								 | 
							
								rf_mac_isr_ctx_t g_rf_mac_isr_1 = { 0 };
							 | 
						||
| 
								 | 
							
								rf_mac_isr_ctx_t *p_rf_mac_isr_1 = &g_rf_mac_isr_1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static uint8_t stf_occur = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* get hw intrrupt status, hw interrupt */
							 | 
						||
| 
								 | 
							
								static uint32_t bb_cpu_mac_get_hw_interrupt_sts()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return RF_MAC_READ_REG(CFG_RF_MAC_COMMON_INT_REG_7_ADDR);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* clear hw intrrupt status, hw interrupt */
							 | 
						||
| 
								 | 
							
								static void bb_cpu_mac_clear_hw_interrupt(uint32_t irq_sts)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_5_ADDR, irq_sts);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* get sw intrrupt status, hw interrupt */
							 | 
						||
| 
								 | 
							
								static uint32_t bb_cpu_mac_get_sw_interrupt_sts()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return RF_MAC_READ_REG(CFG_RF_MAC_COMMON_INT_REG_27_ADDR);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* clear sw intrrupt status, hw interrupt */
							 | 
						||
| 
								 | 
							
								static void bb_cpu_mac_clear_sw_interrupt(uint32_t irq_sts)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_25_ADDR, irq_sts);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void bb_cpu_mac_hw_isr_reset(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* disable all mac interrupt */
							 | 
						||
| 
								 | 
							
								    p_rf_mac_isr_1->isr_hw_mask = 0;
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_9_ADDR,
							 | 
						||
| 
								 | 
							
								        p_rf_mac_isr_1->isr_hw_mask);
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_1_ADDR,
							 | 
						||
| 
								 | 
							
								        p_rf_mac_isr_1->isr_hw_mask);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* clean up all pending interrupt */
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_5_ADDR,
							 | 
						||
| 
								 | 
							
								        RF_MAC_COMMON_IRQ_SW_CLR_CPU2_MASK);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void bb_cpu_mac_sw_isr_reset(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* disable all mac interrupt */
							 | 
						||
| 
								 | 
							
								    p_rf_mac_isr_1->isr_sw_mask = 0;
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_29_ADDR,
							 | 
						||
| 
								 | 
							
								        p_rf_mac_isr_1->isr_sw_mask);
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_21_ADDR,
							 | 
						||
| 
								 | 
							
								        p_rf_mac_isr_1->isr_sw_mask);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* clean up all pending interrupt */
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_25_ADDR,
							 | 
						||
| 
								 | 
							
								        RF_MAC_COMMON_SHARE_IRQ_SW_CLR_CPU2_MASK);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void bb_cpu_mac_share_isr_reset(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* disable all mac interrupt */
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_19_ADDR, 0);
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_11_ADDR, 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* clean up all pending interrupt */
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_15_ADDR,
							 | 
						||
| 
								 | 
							
								        RF_MAC_COMMON_SHARE_IRQ_SW_CLR_CPU2_MASK);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_hw_isr_enable(uint8_t id)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t int_mask;
							 | 
						||
| 
								 | 
							
								    int_mask = 1 << id;
							 | 
						||
| 
								 | 
							
								    if (!(p_rf_mac_isr_1->isr_hw_mask & int_mask)) {
							 | 
						||
| 
								 | 
							
								        p_rf_mac_isr_1->isr_hw_mask |= int_mask;
							 | 
						||
| 
								 | 
							
								        RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_9_ADDR,
							 | 
						||
| 
								 | 
							
								            p_rf_mac_isr_1->isr_hw_mask);
							 | 
						||
| 
								 | 
							
								        RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_1_ADDR,
							 | 
						||
| 
								 | 
							
								            p_rf_mac_isr_1->isr_hw_mask);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_sw_isr_enable(uint8_t id)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t int_mask;
							 | 
						||
| 
								 | 
							
								    int_mask = 1 << id;
							 | 
						||
| 
								 | 
							
								    if (!(p_rf_mac_isr_1->isr_sw_mask & int_mask)) {
							 | 
						||
| 
								 | 
							
								        p_rf_mac_isr_1->isr_sw_mask |= int_mask;
							 | 
						||
| 
								 | 
							
								        RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_29_ADDR,
							 | 
						||
| 
								 | 
							
								            p_rf_mac_isr_1->isr_sw_mask);
							 | 
						||
| 
								 | 
							
								        RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_21_ADDR,
							 | 
						||
| 
								 | 
							
								            p_rf_mac_isr_1->isr_sw_mask);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_hw_isr_disable(uint8_t id)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t int_mask;
							 | 
						||
| 
								 | 
							
								    int_mask = 1 << id;
							 | 
						||
| 
								 | 
							
								    if (p_rf_mac_isr_1->isr_hw_mask & int_mask) {
							 | 
						||
| 
								 | 
							
								        p_rf_mac_isr_1->isr_hw_mask &= ~int_mask;
							 | 
						||
| 
								 | 
							
								        RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_9_ADDR,
							 | 
						||
| 
								 | 
							
								            p_rf_mac_isr_1->isr_hw_mask);
							 | 
						||
| 
								 | 
							
								        RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_1_ADDR,
							 | 
						||
| 
								 | 
							
								            p_rf_mac_isr_1->isr_hw_mask);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_sw_isr_disable(uint8_t id)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t int_mask;
							 | 
						||
| 
								 | 
							
								    int_mask = 1 << id;
							 | 
						||
| 
								 | 
							
								    if (p_rf_mac_isr_1->isr_sw_mask & int_mask) {
							 | 
						||
| 
								 | 
							
								        p_rf_mac_isr_1->isr_sw_mask &= ~int_mask;
							 | 
						||
| 
								 | 
							
								        RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_19_ADDR,
							 | 
						||
| 
								 | 
							
								            p_rf_mac_isr_1->isr_sw_mask);
							 | 
						||
| 
								 | 
							
								        RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_11_ADDR,
							 | 
						||
| 
								 | 
							
								            p_rf_mac_isr_1->isr_sw_mask);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_set_sw_irq_to_maincpu(uint8_t id)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (id < RF_MAC_SW_INT_MAX) {
							 | 
						||
| 
								 | 
							
								        RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_22_ADDR, (1 << id));
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        IOT_ASSERT(id < RF_MAC_SW2_INT_MAX);
							 | 
						||
| 
								 | 
							
								        uint32_t timer_id = id - RF_MAC_SW_INT_MAX;
							 | 
						||
| 
								 | 
							
								        mac_rf_timer_stop(timer_id);
							 | 
						||
| 
								 | 
							
								        mac_rf_timer_set(timer_id, 1);
							 | 
						||
| 
								 | 
							
								        mac_rf_timer_start(timer_id);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_set_share_irq_to_maincpu(uint8_t id)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    RF_MAC_WRITE_REG(CFG_RF_MAC_COMMON_INT_REG_12_ADDR, (1 << id));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_isr_start(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* enable soc irq */
							 | 
						||
| 
								 | 
							
								    iot_interrupt_unmask(p_rf_mac_isr_1->isr_hw_h);
							 | 
						||
| 
								 | 
							
								    iot_interrupt_unmask(p_rf_mac_isr_1->isr_sw_h);
							 | 
						||
| 
								 | 
							
								    iot_interrupt_unmask(p_rf_mac_isr_1->isr_timer_h);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_isr_stop(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* disable soc irq */
							 | 
						||
| 
								 | 
							
								    iot_interrupt_mask(p_rf_mac_isr_1->isr_hw_h);
							 | 
						||
| 
								 | 
							
								    iot_interrupt_mask(p_rf_mac_isr_1->isr_sw_h);
							 | 
						||
| 
								 | 
							
								    iot_interrupt_mask(p_rf_mac_isr_1->isr_timer_h);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_isr_enable()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* enable hw interrupt */
							 | 
						||
| 
								 | 
							
								    for (uint32_t i = 0; i < RF_MAC_ISR_HW_MAX_ID; i++) {
							 | 
						||
| 
								 | 
							
								        bb_cpu_mac_hw_isr_enable(i);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /* enable bb init and set channel interrupt */
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_sw_isr_enable(RF_MAC_SW_ISR_BB_INIT);
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_sw_isr_enable(RF_MAC_SW_ISR_SET_CHANNEL);
							 | 
						||
| 
								 | 
							
								    /* enable trigger hwq interrupt */
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_sw_isr_enable(RF_MAC_SW_ISR_CSMA_TX_CHECK);
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_sw_isr_enable(RF_MAC_SW_ISR_SYNC_SPI_VALUE);
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_sw_isr_enable(RF_MAC_SW_ISR_TX_TONE);
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_sw_isr_enable(RF_MAC_SW_ISR_SET_PS_IDLE);
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_sw_isr_enable(RF_MAC_SW_ISR_TX_CAL_UPDATE);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static uint32_t bb_cpu_mac_isr_handler(uint32_t vector, uint32_t data)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)vector;
							 | 
						||
| 
								 | 
							
								    (void)data;
							 | 
						||
| 
								 | 
							
								    uint32_t hw_int_status, sw_int_status, timer_int_sts;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* get interrupt status */
							 | 
						||
| 
								 | 
							
								    hw_int_status = bb_cpu_mac_get_hw_interrupt_sts();
							 | 
						||
| 
								 | 
							
								    /* clear interrupt status */
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_clear_hw_interrupt(hw_int_status);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* get interrupt status */
							 | 
						||
| 
								 | 
							
								    sw_int_status = bb_cpu_mac_get_sw_interrupt_sts();
							 | 
						||
| 
								 | 
							
								    /* clear interrupt status */
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_clear_sw_interrupt(sw_int_status);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* get timer interrupt status */
							 | 
						||
| 
								 | 
							
								    timer_int_sts = bb_cpu_timer_get_timeout_id();
							 | 
						||
| 
								 | 
							
								    bb_cpu_timer_clr_timeout_id(timer_int_sts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* cmdlist done */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_CMDLIST_DONE_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to cmdlist done and stop tx/rx */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_CMDLIST_DONE_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* stop schedule */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_EARLY_STOP_START_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to stop schduel(reset tx/rx) */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_RST_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* vcs timeout
							 | 
						||
| 
								 | 
							
								     * NOTE: the priority of BB_CPU_ISR_VCS_TIMEOUT_ID higher than
							 | 
						||
| 
								 | 
							
								     *       RF_MAC_ISR_BB_RX_STF_ID.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    if (timer_int_sts & (0x1 << BB_CPU_ISR_VCS_TIMEOUT_ID)) {
							 | 
						||
| 
								 | 
							
								        /* stop vcs working */
							 | 
						||
| 
								 | 
							
								        bb_cpu_stop_vcs_working_from_isr();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* rx stf */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_BB_RX_STF_ID)) {
							 | 
						||
| 
								 | 
							
								        /* pull vcs up */
							 | 
						||
| 
								 | 
							
								        bb_cpu_mac_set_vcs_sts_from_isr(1);
							 | 
						||
| 
								 | 
							
								        /* set stf occour */
							 | 
						||
| 
								 | 
							
								        stf_occur = 1;
							 | 
						||
| 
								 | 
							
								        /* set eifs */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_vcs_timer_from_isr(RF_MAC_EIFS_US, 1);
							 | 
						||
| 
								 | 
							
								        /* increase rx stf cnt */
							 | 
						||
| 
								 | 
							
								        mac_rf_rx_stf_cnt_inc();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* tx abort */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_TX_ABORT_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to tx abort */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_TX_ABORT_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* rx abort */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_RX_ABORT_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to rx abort */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_RX_ABORT_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* backoff timeout */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_BACKOFF_TIMEOUT_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to backoff timeout */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_BACKOFF_TIMEOUT_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* rx start */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_RX_START_ID)) {
							 | 
						||
| 
								 | 
							
								        stf_occur = 0;
							 | 
						||
| 
								 | 
							
								        /* set event to rx start */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_MAC_RX_START_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* rx timeout */
							 | 
						||
| 
								 | 
							
								    if (timer_int_sts & (0x1 << BB_CPU_ISR_RX_TIMEOUT_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to rx timeout */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_RX_TIMEOUT_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* tx start */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_TX_START_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to start tx */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_MAC_TX_START_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* tx timeout */
							 | 
						||
| 
								 | 
							
								    if (timer_int_sts & (0x1 << BB_CPU_ISR_TX_TIMEOUT_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to tx timeout */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_TX_TIMEOUT_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* wait sack timeout */
							 | 
						||
| 
								 | 
							
								    if (timer_int_sts & (0x1 << BB_CPU_ISR_WAIT_SACK_TIMEOUT_ID)) {
							 | 
						||
| 
								 | 
							
								        /* in conflict scenarios, backoff eifs */
							 | 
						||
| 
								 | 
							
								        /* pull vcs up */
							 | 
						||
| 
								 | 
							
								        bb_cpu_mac_set_vcs_sts_from_isr(1);
							 | 
						||
| 
								 | 
							
								        /* set eifs */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_vcs_timer_from_isr(RF_MAC_EIFS_US, 0);
							 | 
						||
| 
								 | 
							
								        /* set event to wait sack timeout */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_WAIT_SACK_TIMEOUT_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* wait reset timeout */
							 | 
						||
| 
								 | 
							
								    if (timer_int_sts & (0x1 << BB_CPU_ISR_RST_TIMEOUT_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to wait reset timeout */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_RST_TIMEOUT_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* bb tx done */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_BB_TX_DONE_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to tx complete */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_TX_COMP_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* bb rx sig done */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_BB_RX_SIG_ID)) {
							 | 
						||
| 
								 | 
							
								        if (!stf_occur) {
							 | 
						||
| 
								 | 
							
								            /* pull vcs up */
							 | 
						||
| 
								 | 
							
								            bb_cpu_mac_set_vcs_sts_from_isr(1);
							 | 
						||
| 
								 | 
							
								            /* set eifs */
							 | 
						||
| 
								 | 
							
								            bb_cpu_set_vcs_timer_from_isr(RF_MAC_EIFS_US, 1);
							 | 
						||
| 
								 | 
							
								            mac_rf_lost_stf_cnt_inc();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        /* set event to rx sig */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_RX_SIG_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* bb rx phr done */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_BB_RX_PHR_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to rx phy header */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_RX_PHR_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* bb rx pld start */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_BB_RX_PLD_START_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set event to rx pld start */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_RX_PLD_START_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* bb init */
							 | 
						||
| 
								 | 
							
								    if (sw_int_status & (0x1 << RF_MAC_SW_ISR_BB_INIT)) {
							 | 
						||
| 
								 | 
							
								        /* set event to bb init */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_BB_INIT_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* bb set channel */
							 | 
						||
| 
								 | 
							
								    if (sw_int_status & (0x1 << RF_MAC_SW_ISR_SET_CHANNEL)) {
							 | 
						||
| 
								 | 
							
								        /* set event to set channel */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_SET_CHANNEL_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* bb early stop done */
							 | 
						||
| 
								 | 
							
								    if (hw_int_status & (0x1 << RF_MAC_ISR_EARLY_STOP_DONE_ID)) {
							 | 
						||
| 
								 | 
							
								        /* set isr is vaild */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_isr_vaild_from_isr(1);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* csma q tx check */
							 | 
						||
| 
								 | 
							
								    if (sw_int_status & (0x1 << RF_MAC_SW_ISR_CSMA_TX_CHECK)) {
							 | 
						||
| 
								 | 
							
								        /* csma q tx check */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_CSMA_TX_CHECK_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* hplc cpu sync rf spi */
							 | 
						||
| 
								 | 
							
								    if (sw_int_status & (0x1 << RF_MAC_SW_ISR_SYNC_SPI_VALUE)) {
							 | 
						||
| 
								 | 
							
								        /* csma q tx check */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_SYNC_SPI_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* hplc cpu tx tone */
							 | 
						||
| 
								 | 
							
								    if (sw_int_status & (0x1 << RF_MAC_SW_ISR_TX_TONE)) {
							 | 
						||
| 
								 | 
							
								        /* tx tone */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_TX_TONE_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* hplc cpu set power save idle */
							 | 
						||
| 
								 | 
							
								    if (sw_int_status & (0x1 << RF_MAC_SW_ISR_SET_PS_IDLE)) {
							 | 
						||
| 
								 | 
							
								        /* set power save idle */
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_PS_IDLE_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /* hplc cpu request tx cal update */
							 | 
						||
| 
								 | 
							
								    if (sw_int_status & (0x1 << RF_MAC_SW_ISR_TX_CAL_UPDATE)) {
							 | 
						||
| 
								 | 
							
								        bb_cpu_set_event_from_isr(BB_CPU_EVENT_TX_CAL_UPDATE_ID);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void bb_cpu_mac_isr_init(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_hw_isr_reset();
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_sw_isr_reset();
							 | 
						||
| 
								 | 
							
								    bb_cpu_mac_share_isr_reset();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* just need init hw interrupt(common isr) */
							 | 
						||
| 
								 | 
							
								    /* hw irq need isr handle */
							 | 
						||
| 
								 | 
							
								    p_rf_mac_isr_1->isr_hw_h = iot_interrupt_create(HAL_VECTOR_RFMAC_INT1,
							 | 
						||
| 
								 | 
							
								        HAL_INTR_PRI_7, (iot_addrword_t)NULL, bb_cpu_mac_isr_handler);
							 | 
						||
| 
								 | 
							
								    p_rf_mac_isr_1->isr_sw_h = iot_interrupt_create(HAL_VECTOR_RFMAC_INT1,
							 | 
						||
| 
								 | 
							
								        HAL_INTR_PRI_7, (iot_addrword_t)NULL, bb_cpu_mac_isr_handler);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_interrupt_attach(p_rf_mac_isr_1->isr_hw_h);
							 | 
						||
| 
								 | 
							
								    iot_interrupt_attach(p_rf_mac_isr_1->isr_sw_h);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* timer irq need isr handle */
							 | 
						||
| 
								 | 
							
								    p_rf_mac_isr_1->isr_timer_h =
							 | 
						||
| 
								 | 
							
								        iot_interrupt_create(HAL_VECTOR_RFMAC_TIMEOUT_INT1, HAL_INTR_PRI_6,
							 | 
						||
| 
								 | 
							
								        (iot_addrword_t)NULL, bb_cpu_mac_isr_handler);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_interrupt_attach(p_rf_mac_isr_1->isr_timer_h);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |