/*----------------------------------------------------------------------- * FUNCTION * GPTCB_US_HISR * * DESCRIPTION * GPT Callback HISR : 10ms * * CALLS * * PARAMETERS * void * * RETURNS * None * * GLOBALS AFFECTED * external_global *------------------------------------------------------------------------*/ DEVDRV_LS_INTSRAM_ROCODE void GPTCB_US_HISR(void) { kal_uint32 savedMask; savedMask = SaveAndSetIRQMask(); if( KAL_TRUE == gptCBUS_running ) { gptCBUS_running = KAL_FALSE; RestoreIRQMask(savedMask); #if defined(__CR4__) IFDEF_GPT_CB_MEASURE_TIME(CP15_PMU_GET_CYCLE_CNT(gpt_uscb_enter_time)); #elif defined(__MTK_MMU_V2__) /* __CR4__ */ IFDEF_GPT_CB_MEASURE_TIME(gpt_uscb_enter_time=CACHE_FREE_RUN_CYCLE_COUNTER_GET_CYCLE()); #endif /* __MTK_MMU_V2__ */ gptCBUS_instance.gptimer_func(gptCBUS_instance.parameter); #if defined(__CR4__) IFDEF_GPT_CB_MEASURE_TIME(CP15_PMU_GET_CYCLE_CNT(gpt_uscb_leave_time)); #elif defined(__MTK_MMU_V2__) /* __CR4__ */ IFDEF_GPT_CB_MEASURE_TIME(gpt_uscb_leave_time=CACHE_FREE_RUN_CYCLE_COUNTER_GET_CYCLE()); #endif /* __MTK_MMU_V2__ */ } else { RestoreIRQMask(savedMask); } savedMask = SaveAndSetIRQMask(); DCL_GPT_BUS_CLOCK_TRY_OFF(); RestoreIRQMask(savedMask); }
/*----------------------------------------------------------------------- * FUNCTION * GPTCB_10MS_HISR * * DESCRIPTION * GPT Callback HISR : 10ms * * CALLS * * PARAMETERS * void * * RETURNS * None * * GLOBALS AFFECTED * external_global *------------------------------------------------------------------------*/ DEVDRV_LS_INTSRAM_ROCODE void GPTCB_10MS_HISR(void) { kal_uint8 index; kal_uint32 savedMask; kal_uint32 checkMask = 0xFFFFFFFF; IFDEF_GPT_TRACE(kal_uint32 time1); IFDEF_GPT_TRACE(kal_uint32 time2); gptCB_ticks++; // Bit matched method to check if a GPT items is activated // Search whole GPT items for (index = 0; (index < MAX_GPT_ITEMS)&&(gptCB_status&checkMask); index++) { savedMask = SaveAndSetIRQMask(); if( (gptCB_status & (1 << index)) && (gptCB_ticks >= gptCB_items[index].tick) ) { gptCB_status &= ~(1<<index); RestoreIRQMask(savedMask); IFDEF_GPT_TRACE(time1 = ust_get_current_time()); #if defined(__CR4__) IFDEF_GPT_CB_MEASURE_TIME(CP15_PMU_GET_CYCLE_CNT(gpt_cb_enter_time[index])); #elif defined(__MTK_MMU_V2__) /* __CR4__ */ IFDEF_GPT_CB_MEASURE_TIME(gpt_cb_enter_time[index]=CACHE_FREE_RUN_CYCLE_COUNTER_GET_CYCLE()); #endif /* __MTK_MMU_V2__ */ gptCB_items[index].gptimer_func(gptCB_items[index].parameter); #if defined(__CR4__) IFDEF_GPT_CB_MEASURE_TIME(CP15_PMU_GET_CYCLE_CNT(gpt_cb_leave_time[index])); #elif defined(__MTK_MMU_V2__) /* __CR4__ */ IFDEF_GPT_CB_MEASURE_TIME(gpt_cb_leave_time[index]=CACHE_FREE_RUN_CYCLE_COUNTER_GET_CYCLE()); #endif /* __MTK_MMU_V2__ */ IFDEF_GPT_TRACE(time2 = ust_get_current_time()); GPT_DBG(index, time1, time2); } else { RestoreIRQMask(savedMask); } checkMask ^= (1 << index); } savedMask = SaveAndSetIRQMask(); if (gptCB_status == 0) { // UT Test road test. gptCB_ticks = 0; drv_gpt_stop_timer(DRV_GPT_CALLBACK_TIMER); DCL_GPT_BUS_CLOCK_TRY_OFF(); } RestoreIRQMask(savedMask); }
/************************************************************************* * FUNCTION * isrC_Main * * DESCRIPTION * This function implement IRQ's LISR main dispatch routine * * CALLS * * CALL BY * INT_IRQ_Parse() * * PARAMETERS * * RETURNS * *************************************************************************/ #if !defined(__SSDVT_TEST__) #if defined(MT6290) && defined(__ARM7EJ_S__) void DEVDRV_LS_COPRO_INTSRAM_ROCODE isrC_Main(kal_uint32 irqx) #else /* defined(MT6290) && defined(__ARM7EJ_S__) */ void DEVDRV_LS_INTSRAM_ROCODE isrC_Main(kal_uint32 irqx) #endif /* else of "defined(MT6290) && defined(__ARM7EJ_S__)" */ { #if defined(__UNIFIED_ISR_LEVEL__) // kal_hisr processing_ehisrid; kal_hisrid processing_hisrid; #else /* __UNIFIED_ISR_LEVEL__ */ void *processing_lisr_backup; kal_uint16 processing_irqx_backup; processing_lisr_backup = processing_lisr; processing_irqx_backup = processing_irqx; #endif /* __UNIFIED_ISR_LEVEL__ */ processing_irqx = irqx; processing_lisr = (void*)lisr_dispatch_tbl[irqx].lisr_handler; processing_irqCnt++; #if defined __MALMO_ASM_SWTR__ ST_MALMO_ASM_ChangeContextID(); #endif /* __MALMO_ASM_SWTR */ if (KAL_FALSE == SLA_IsLmuLogging()) { LMU_Write_ISR_CSM(0xaaaa0000 | ((kal_uint32)processing_irqx)); } if (SA_LoggingIndex != 0) { SLA_LoggingLISR(0xaaaa0000 | ((kal_uint32)processing_irqx)); } CPU_SET_CONTEXT_ID(0xaaaa0000 | ((kal_uint32)processing_irqx)); #ifdef __SWDBG_SUPPORT__ *SWDBG_MPCON = ((irqx + 0x100) << 16) | 0x8000; #endif /* __SWDBG_SUPPORT__ */ #ifdef __WAKEUP_IRQ_DEBUG__ if (wkup_intr_log_indx != WKUP_LOG_BUF_MAX) { wkup_intr_log_buf[wkup_intr_log_indx].irq = processing_irqx; wkup_intr_log_indx++; if (wkup_intr_log_indx == WKUP_LOG_BUF_MAX) { wkup_intr_log_indx = 0; } } if (wkup_timer_log_indx != WKUP_LOG_BUF_MAX) { if (wake_tm_name != NULL) { wkup_timer_log_buf[wkup_timer_log_indx].timer_name = wake_tm_name; wake_tm_name = NULL; wkup_timer_log_indx++; if (wkup_timer_log_indx == WKUP_LOG_BUF_MAX) { wkup_timer_log_indx = 0; } } } #endif /* __WAKEUP_IRQ_DEBUG__ */ #if defined(DEBUG_KAL) && defined(DEBUG_TIMER) && defined(__CR4__) if(TimerHISR_State == 1) { GET_CURRENT_TIME(TimerHISR_Exclude_Start_Time); TimerHISR_State = 2; } #endif #if defined(__TP_SUPPORT_TIMING_CHECK__) if(Thread_Protect_State==1) { Thread_Protect_State=2; TP_Exclude_Start_Time = ust_get_current_time(); } #endif #ifdef __DEMAND_PAGING_PERFORMANCE_PROFILING__ demp_preempt_time_start(); #endif #if defined(__UNIFIED_ISR_LEVEL__) // processing_ehisrid = intrID2hisrEID[irqx]; // ASSERT(0xFF != processing_ehisrid); // processing_hisrid = hisrid_g[processing_ehisrid]; processing_hisrid = intrID2hisrID[irqx]; if(processing_hisrid != drv_hisr) { EXT_ASSERT(NULL != processing_hisrid, irqx, processing_irqCnt, (kal_uint32)processing_lisr); kal_activate_hisr(processing_hisrid); } else { drv_active_hisr(irqx); } /* no nested interrupt */ processing_lisr = NULL; processing_irqx = IRQ_NOT_LISR_CONTEXT; #else /* __UNIFIED_ISR_LEVEL__ */ ReEnableIRQ(); #if defined(__CR4__) IFDEF_LISR_MEASURE_TIME(CP15_PMU_GET_CYCLE_CNT(lisr_enter_time[irqx])); #elif defined(__MTK_MMU_V2__) IFDEF_LISR_MEASURE_TIME(lisr_enter_time[irqx]=CACHE_FREE_RUN_CYCLE_COUNTER_GET_CYCLE()); #endif lisr_dispatch_tbl[irqx].lisr_handler(irqx); #if defined(__CR4__) IFDEF_LISR_MEASURE_TIME(CP15_PMU_GET_CYCLE_CNT(lisr_leave_time[irqx])); #elif defined(__MTK_MMU_V2__) IFDEF_LISR_MEASURE_TIME(lisr_leave_time[irqx]=CACHE_FREE_RUN_CYCLE_COUNTER_GET_CYCLE()); #endif DisableIRQ(); processing_irqx = processing_irqx_backup; processing_lisr = processing_lisr_backup; #endif /* __UNIFIED_ISR_LEVEL__ */ if (KAL_FALSE == SLA_IsLmuLogging()) { LMU_Write_ISR_END_CSM(0xaaaaaaaa); } if (SA_LoggingIndex != 0) { SLA_LoggingLISR(0xaaaaaaaa); } CPU_SET_CONTEXT_ID(0xaaaaaaaa); #if defined __MALMO_ASM_SWTR__ ST_MALMO_ASM_ChangeContextID(); #endif /* __MALMO_ASM_SWTR */ /* Binary-coded IRQ idx */ SYS_endIsr((kal_uint8)irqx); }