173 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			5.1 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
 | 
						|
 | 
						|
/* keep this the same as the last valid ISR ID */
 | 
						|
#define MAC_ISR_MAX_ID                  15
 | 
						|
 | 
						|
/* mac isr ext1 zc capture id */
 | 
						|
#define MAC_ISR_EXT1_ZC0_CAP_ID         0
 | 
						|
#define MAC_ISR_EXT1_ZC1_CAP_ID         1
 | 
						|
#define MAC_ISR_EXT1_ZC2_CAP_ID         2
 | 
						|
#define MAC_ISR_EXT1_ZC3_CAP_ID         3
 | 
						|
#define MAC_ISR_EXT1_ZC4_CAP_ID         4
 | 
						|
#define MAC_ISR_EXT1_ZC5_CAP_ID         5
 | 
						|
 | 
						|
/* keep this the same as the last valid ISR EXT1 ID */
 | 
						|
#define MAC_ISR_EXT1_MAX_ID             5
 | 
						|
 | 
						|
/* 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);
 | 
						|
 | 
						|
/*
 | 
						|
 * mac_isr_ext1_enable() - enable speficied mac ext1 interrupt.
 | 
						|
 * @id:     mac interrupt id to be enabled. see MAC_ISR_EXT1_XXX
 | 
						|
 */
 | 
						|
void mac_isr_ext1_enable(uint8_t id);
 | 
						|
 | 
						|
/*
 | 
						|
 * mac_isr_ext1_disable() - disable speficied mac ext1 interrupt.
 | 
						|
 * @id:     mac interrupt id to be disabled. see MAC_ISR_EXT1_XXX
 | 
						|
 */
 | 
						|
void mac_isr_ext1_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 */
 |