[BACK]Return to tairqc.c CVS log [TXT][DIR] Up to [local] / funnyos / arch / testarm / dev

Diff for /funnyos/arch/testarm/dev/tairqc.c between version 1.2 and 1.3

version 1.2, 2007/11/01 13:03:01 version 1.3, 2007/11/02 12:35:24
Line 4 
Line 4 
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/device.h>  #include <sys/device.h>
 #include <sys/bus.h>  #include <sys/bus.h>
   #include <sys/kern_irq.h>
   
 #include <arch/testarm/dev/tairqcvar.h>  #include <arch/testarm/dev/tairqcvar.h>
 #include <arch/testarm/dev/tairqcreg.h>  #include <arch/testarm/dev/tairqcreg.h>
   #include <libkern/printf.h>
   
 /*  /*
  * testarm Interrupt Controller Unit support.   * testarm Interrupt Controller Unit support.
  */   */
 int     tairqc_attach(struct device *self, uint32_t loc, uint8_t flags);  int     tairqc_attach(struct device *self, uint32_t loc, uint8_t flags);
   void    tairqc_mask_intr(uint8_t intrno);
   void    tairqc_unmask_intr(uint8_t intrno);
   uint32_t tairqc_intrstatus(void);
 void    tairqc_irq(void);  void    tairqc_irq(void);
   
   extern void (*irq_trampoline_func)(void);
   struct tairqc_dd *irqcdd;                       /* current irq device */
   
 struct driver tairqc_dr = {  struct driver tairqc_dr = {
         sizeof(struct tairqc_dd),          sizeof(struct tairqc_dd),
Line 31 
Line 38 
         /* leap to parent's bus_handle */          /* leap to parent's bus_handle */
         ddp->td_bushandlep = self->dv_parent->dv_aux;          ddp->td_bushandlep = self->dv_parent->dv_aux;
   
           /* save locator */
           ddp->td_ioaddr = loc ? loc : TAIRQC_REG_BASE;
   
           irqcdd = ddp;
   
           printf("testarm IRQ Controller (2=cons, 3=ether, 4=rtc, 6=mp)\n");
   
           /* override trampoline so core irq jumps to us */
           irq_trampoline_func = tairqc_irq;
   
           /* XXX unmask rtc intr */
           tairqc_unmask_intr(4);
 }  }
   
   
 void  void
   tairqc_mask_intr(uint8_t intrno)
   {
           bus_write_1(irqcdd->td_bushandlep, irqcdd->td_ioaddr + TAIRQC_OFF_IRQMASK, intrno);
   }
   
   
   void
   tairqc_unmask_intr(uint8_t intrno)
   {
           bus_write_1(irqcdd->td_bushandlep, irqcdd->td_ioaddr + TAIRQC_OFF_IRQUNMASK, intrno);
   }
   
   
   uint32_t
   tairqc_intrstatus(void)
   {
           bus_read_4(irqcdd->td_bushandlep, irqcdd->td_ioaddr + TAIRQC_OFF_IRQSTATUS);
   }
   
   
   void
 tairqc_irq(void)  tairqc_irq(void)
 {  {
         /*          /*
          * Process an IRQ           * Process an IRQ.
          */           */
            uint32_t irqstatus;
   
           /* read intr status; one bit per intr source */
           irqstatus = tairqc_intrstatus();
   
           printf("irqc: irq status 0x%x\n", irqstatus);
 }  }
   

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

CVSweb