313 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			313 lines
		
	
	
		
			9.9 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.
 | |
| 
 | |
| ****************************************************************************/
 | |
| 
 | |
| #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 */
 |