Exemplo n.º 1
0
/*-----------------------------------------------------------------------
* 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);
}
Exemplo n.º 2
0
/*-----------------------------------------------------------------------
* 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);
}
Exemplo n.º 3
0
/*************************************************************************
* 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);

}