基本介紹
基本簡介,處理程式本身,
基本簡介
處理程式本身
static irqreturn_r rtc_interrupt(int irq,void *dev_id , struct pt_regs *regs)
{
spin_lock(&rtc_lock);
rtc_irq_data += 0x100;
rtc_irq_data &= ~0xff;
rtc_irq_data |= (CMOS_READ(RTC_INTR_FLAGS) & 0xF0);
if ( rtc_status & RTC_TIMERON)
mod_timer(&rtc_irq_timer, jiffers + HZ/rtc_freq + 2*HZ/100);
spin_unlock (&rtc_lock);
spin_lock(&rtc_task_lock);
if (rtc_callback)
rtc_cllback->func(rtc_callback->private_date);
spin_unlock (&rtc_task_lock);
wake_up_interruptible(&rtc_wait);
kill_fasync (&rtc_async_queue, SIGIO, POLL_IN);
return IRQ_HANDLED;
}
只要計算機一接收到RTC中斷,就會調用這個函式。rtc_irq_data變數是無符號長整數,存放有關RTC的信息,每次中斷時都會更新以反映中斷的狀態。接下來,如果設定了RTC周期性定時器,就要通過函式mod_timer()對其更新。
最後,這個函式會返回IRQ_HANDLED,表明已經正確地完成了對此設備的操作。因為這個中斷處理程式不支持,而且RTC也沒什麼用來測試虛假中斷的機制,所以該處理程式總是返回IRQ_HADNLED。