 .         -
.    .

if (request_irq(RTC_IRQ, rtc_interrupt, SA_INTERRUPT, "rtc", NULL) {

printk(KERN_ERR "rtc: cannot register IRQ %d\n", rtc_irq);

return -;

}

   ,       
RTC_IRQ,        -
   . ,    
   IRQ 8.     -
, rtc_interrupt,        
   SA_INTERRUPT.     , 
    "rtc".        -
         
  -  ,    dev_id 
 NULL.

 ,    .

/*

*    .   

*   SA_INTERRUPT,  

*      set rtc mmss()

* (  rtc    

*       

* ). ,   

*     - rtc_lock,  

*          

* . (  set_rtc_mmss()   

* ./arch/XXXX/kernel/time.c)

*/

static irqreturn_t rtc_interrupt (int irq, void *dev_id, struct pt_regs *regs)

{

/*

*     , 

*     .

*  ()    

*  ,       

*   rtc irq data

*/

spin_lock (&rtc_lock);

rtc_irq_data += 0100;

rtc_irq_data &= -Oxff;

rtc_irq_data \= (CMOS_READ(RTC_INTR_FLAGS) & OxFO);

if (rtc_status & RTC_TIMER_ON)

mod_timer(&rtc_irq_timer, jiffies + HZ/rtc_freq + 2*HZ/100);

118                                                                    6