Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ppc32/src/drivers/pic.c

    rebbc03c7 rc5429fe  
    3737#include <byteorder.h>
    3838#include <bitops.h>
    39 #include <typedefs.h>
    4039
    41 static ioport32_t *pic = NULL;
     40static volatile uint32_t *pic = NULL;
    4241
    4342void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg)
     
    5150void pic_enable_interrupt(inr_t intnum)
    5251{
    53         if (!pic)
    54                 return;
     52        if (pic) {
     53                if (intnum < 32)
     54                        pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] | (1 << intnum);
     55                else
     56                        pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] | (1 << (intnum - 32));
     57        }
    5558
    56         if (intnum < 32) {
    57                 pio_write_32(&pic[PIC_MASK_LOW],
    58                     pio_read_32(&pic[PIC_MASK_LOW]) | (1 << intnum));
    59         } else {
    60                 pio_write_32(&pic[PIC_MASK_HIGH],
    61                     pio_read_32(&pic[PIC_MASK_HIGH]) | (1 << (intnum - 32)));
    62         }
    6359}
    6460
    6561void pic_disable_interrupt(inr_t intnum)
    6662{
    67         if (!pic)
    68                 return;
    69 
    70         if (intnum < 32) {
    71                 pio_write_32(&pic[PIC_MASK_LOW],
    72                     pio_read_32(&pic[PIC_MASK_LOW]) & (~(1 << intnum)));
    73         } else {
    74                 pio_write_32(&pic[PIC_MASK_HIGH],
    75                     pio_read_32(&pic[PIC_MASK_HIGH]) & (~(1 << (intnum - 32))));
     63        if (pic) {
     64                if (intnum < 32)
     65                        pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] & (~(1 << intnum));
     66                else
     67                        pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] & (~(1 << (intnum - 32)));
    7668        }
    7769}
     
    7971void pic_ack_interrupt(void *arg, inr_t intnum)
    8072{
    81         if (!pic)
    82                 return;
    83 
    84         if (intnum < 32) {
    85                 pio_write_32(&pic[PIC_ACK_LOW], 1 << intnum);
    86         } else {
    87                 pio_write_32(&pic[PIC_ACK_HIGH], 1 << (intnum - 32));
     73        if (pic) {
     74                if (intnum < 32)
     75                        pic[PIC_ACK_LOW] = 1 << intnum;
     76                else
     77                        pic[PIC_ACK_HIGH] = 1 << (intnum - 32);
    8878        }
    8979}
     
    9787                uint32_t pending;
    9888
    99                 pending = pio_read_32(&pic[PIC_PENDING_LOW]);
     89                pending = pic[PIC_PENDING_LOW];
    10090                if (pending != 0)
    10191                        return fnzb32(pending);
    10292
    103                 pending = pio_read_32(&pic[PIC_PENDING_HIGH]);
     93                pending = pic[PIC_PENDING_HIGH];
    10494                if (pending != 0)
    10595                        return fnzb32(pending) + 32;
Note: See TracChangeset for help on using the changeset viewer.