156 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			156 lines
		
	
	
		
			4.5 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 MAC_ISR_H
 | ||
|  | #define MAC_ISR_H
 | ||
|  | 
 | ||
|  | /* os shim includes */ | ||
|  | #include "os_types.h"
 | ||
|  | 
 | ||
|  | /* driver includes */ | ||
|  | #include "iot_irq.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* BEACON */ | ||
|  | /* generate before TBTT, should happen at next_tbtt - cfg_bcn_alert_ahead */ | ||
|  | #define MAC_ISR_BC_ALERT_ID             0
 | ||
|  | 
 | ||
|  | /* generate when cfg number bcn missed, or a period of time without bcn seen */ | ||
|  | #define MAC_ISR_BC_MISS_ID              1
 | ||
|  | 
 | ||
|  | /* generate when self's beacon received */ | ||
|  | #define MAC_ISR_BC_RX_ID                2
 | ||
|  | 
 | ||
|  | /* SCHEDULER */ | ||
|  | /* generate when HW scheduler stop done */ | ||
|  | #define MAC_ISR_SCH_STOP_ID             3
 | ||
|  | 
 | ||
|  | /* TX */ | ||
|  | /* when sw disable the hwq, hwq need to complete the current transmit, after
 | ||
|  |  * it done, generate this INT. | ||
|  |  */ | ||
|  | #define MAC_ISR_HWQ_STOP_ID             4
 | ||
|  | 
 | ||
|  | /* generate when a mpdu tx complete */ | ||
|  | #define MAC_ISR_MPDU_TX_COMP_ID         5
 | ||
|  | 
 | ||
|  | /* generate when a list of mpdus tx complete */ | ||
|  | #define MAC_ISR_MPDU_LIST_TX_COMP_ID    6
 | ||
|  | 
 | ||
|  | /* generate when HW read tx start desc err */ | ||
|  | #define MAC_ISR_START_DESC_ERR_ID       7
 | ||
|  | 
 | ||
|  | /* generate when HW read tx end desc err */ | ||
|  | #define MAC_ISR_END_DESC_ERR_ID         8
 | ||
|  | 
 | ||
|  | /* generate when HW read pb desc err */ | ||
|  | #define MAC_ISR_TX_UNDERRUN_ID          9
 | ||
|  | 
 | ||
|  | /* RX */ | ||
|  | /* generate when a mpdu rx complete */ | ||
|  | #define MAC_ISR_MPDU_RX_ID              10
 | ||
|  | 
 | ||
|  | /* generate when a pb rx complete */ | ||
|  | #define MAC_ISR_PB_RX_ID                11
 | ||
|  | 
 | ||
|  | /* generate when a fc rx complete */ | ||
|  | #define MAC_ISR_FC_RX_ID                12
 | ||
|  | 
 | ||
|  | /* generate when RX buf is run out for the desc */ | ||
|  | #define MAC_ISR_RX_DESC_OVERFLOW_ID     13
 | ||
|  | 
 | ||
|  | /* generate when RX buf is not enough for the payload */ | ||
|  | #define MAC_ISR_RX_LOAD_OVERFLOW_ID     14
 | ||
|  | 
 | ||
|  | /* RX ring buf num is under water mark */ | ||
|  | #define MAC_ISR_RX_LOW_WATERMARK_ID     15
 | ||
|  | 
 | ||
|  | /* OTHERS */ | ||
|  | /* Zero cross report indication */ | ||
|  | #define MAC_ISR_ZERO_CROSS_ID           16
 | ||
|  | 
 | ||
|  | #define MAC_ISR_ZC_UPPER_BOUND_ID       19
 | ||
|  | 
 | ||
|  | /* keep this the same as the last valid ISR ID */ | ||
|  | #define MAC_ISR_MAX_ID                  19
 | ||
|  | 
 | ||
|  | /* function callback to receive dsr from ISR context.
 | ||
|  |  * @dsr:    list of dsr id to be set. See MAC_DSR_XXX | ||
|  |  * @cnt:    number of ids in the list | ||
|  |  */ | ||
|  | typedef void (*dsr_notification_func_t)(uint8_t *dsr, uint8_t cnt); | ||
|  | 
 | ||
|  | typedef struct _mac_isr_ctx { | ||
|  |     /* irq handler for HAL_VECTOR_MAC_0 */ | ||
|  |     iot_irq_t               isr_0_h; | ||
|  |     /* irq handler for HAL_VECTOR_MAC_1 */ | ||
|  |     iot_irq_t               isr_1_h; | ||
|  |     /* irq handler for HAL_VECTOR_MAC_2 */ | ||
|  |     iot_irq_t               isr_2_h; | ||
|  |     /* irq handler for HAL_VECTOR_MAC_3 */ | ||
|  |     iot_irq_t               isr_3_h; | ||
|  |     /* interrupt mask reg cache */ | ||
|  |     uint32_t                isr_mask; | ||
|  |     /* callback to receive dsr events */ | ||
|  |     dsr_notification_func_t dsr_callback; | ||
|  | } mac_isr_ctx_t; | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * mac_isr_init() - mac interrupt service init | ||
|  |  * callback:    function callback to receive the dsr from ISR context. | ||
|  |  */ | ||
|  | void mac_isr_init(dsr_notification_func_t callback); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * mac_isr_start() - start mac interrupt service. after this call, interrupt | ||
|  |  *                   service will be enabled. | ||
|  |  */ | ||
|  | void mac_isr_start(); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * mac_isr_stop() - start mac interrupt service. after this call, interrupt | ||
|  |  *                  service will be disabled. | ||
|  |  */ | ||
|  | void mac_isr_stop(); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * mac_isr_enable() - enable speficied mac interrupt. | ||
|  |  * @id:     mac interrupt id to be enabled. see MAC_ISR_XXX | ||
|  |  */ | ||
|  | void mac_isr_enable(uint8_t id); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * mac_isr_disable() - disable speficied mac interrupt. | ||
|  |  * @id:     mac interrupt id to be disabled. see MAC_ISR_XXX | ||
|  |  */ | ||
|  | void mac_isr_disable(uint8_t id); | ||
|  | 
 | ||
|  | void mac_timer_ctxt(); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * mac_isr_clear() - clear speficied mac interrupt. | ||
|  |  * @isr_evt:       - mac interrupt id to be clear. see MAC_ISR_XXX | ||
|  |  */ | ||
|  | void mac_isr_clear(uint32_t isr_evt); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* MAC_ISR_H */
 |