source: rtems/c/src/lib/libbsp/powerpc/mvme2307/pci/isa_interrupts.c @ 19ca797

4.104.114.84.95
Last change on this file since 19ca797 was 19ca797, checked in by Joel Sherrill <joel.sherrill@…>, on 10/04/99 at 20:41:28

Motorola MVME2307 BSP submitted by Jay Kulpinski <jskulpin@…>.
No modifications made.

  • Property mode set to 100644
File size: 2.2 KB
Line 
1#include <bsp.h>
2
3#define PCI_Interrupt_Ack (*(volatile unsigned32 *) 0xFEFF0030)
4#define PIC1_OCW2 (*(volatile char *)IO_TO_LOCAL(0x0020))
5#define PIC2_OCW2 (*(volatile char *)IO_TO_LOCAL(0x00A0))
6#define NonspecificEOI 0x20
7
8#define Master_PIC_Mask (*(unsigned8 *) IO_TO_LOCAL(0x0021))
9#define Slave_PIC_Mask  (*(unsigned8 *) IO_TO_LOCAL(0x00A1))
10
11rtems_isr_entry isa_handlers[16] = {0, 0, 0, 0, 0, 0, 0, 0,
12                                    0, 0, 0, 0, 0, 0, 0, 0};
13
14rtems_status_code isa_interrupt_enable(rtems_vector_number vector) {
15    if (vector < 0 || vector > 15 || vector == 2) {
16        return RTEMS_INVALID_NUMBER;
17    }
18    if (vector < 8) {
19        Master_PIC_Mask &= ~ (1 << vector);
20    } else {
21        Slave_PIC_Mask &= ~ (1 << (vector - 8));
22    }
23    return RTEMS_SUCCESSFUL;
24}
25
26rtems_status_code isa_interrupt_disable(rtems_vector_number vector) {
27    if (vector < 0 || vector > 15 || vector == 2) {
28        return RTEMS_INVALID_NUMBER;
29    }
30    if (vector < 8) {
31        Master_PIC_Mask |= (1 << vector);
32    } else {
33        Slave_PIC_Mask |= (1 << (vector - 8));
34    }
35    return RTEMS_SUCCESSFUL;
36}
37
38rtems_status_code isa_interrupt_catch(rtems_isr_entry      new_isr_handler,
39                                      rtems_vector_number  vector,
40                                      rtems_isr_entry     *old_isr_handler) {
41    if (vector < 0 || vector > 15 || vector == 2) {
42        return RTEMS_INVALID_NUMBER;
43    }
44    if (!old_isr_handler || ((int)new_isr_handler & 3) != 0) {
45        return RTEMS_INVALID_ADDRESS;
46    }
47    *old_isr_handler = isa_handlers[vector];
48    isa_handlers[vector] = new_isr_handler;
49    return RTEMS_SUCCESSFUL;
50}
51
52rtems_isr isa_interrupt_handler(rtems_vector_number vector) {
53    unsigned32          piack_image = PCI_Interrupt_Ack;
54    int                 pic_id      = piack_image >> 27;
55    rtems_vector_number isa_vector  = (piack_image >> 24) & 7;
56
57    if (pic_id == 0x10) {
58        isa_vector += 8;
59    } else if (pic_id != 0x01) {
60        printk("unrecognized PIACK value: %08x\n", piack_image);
61        return;
62    }
63    if (isa_handlers[isa_vector] != 0) {
64        isa_handlers[isa_vector](isa_vector);
65    }
66    PIC1_OCW2 = NonspecificEOI;
67    if (isa_vector >= 8) {
68        PIC2_OCW2 = NonspecificEOI;
69    }
70}
Note: See TracBrowser for help on using the repository browser.