Subversion Repositories HelenOS

Rev

Rev 3022 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3022 Rev 4055
Line 47... Line 47...
47
static void pic_spurious(int n, istate_t *istate);
47
static void pic_spurious(int n, istate_t *istate);
48
 
48
 
49
void i8259_init(void)
49
void i8259_init(void)
50
{
50
{
51
    /* ICW1: this is ICW1, ICW4 to follow */
51
    /* ICW1: this is ICW1, ICW4 to follow */
52
    outb(PIC_PIC0PORT1, PIC_ICW1 | PIC_NEEDICW4);
52
    pio_write_8(PIC_PIC0PORT1, PIC_ICW1 | PIC_NEEDICW4);
53
 
53
 
54
    /* ICW2: IRQ 0 maps to INT IRQBASE */
54
    /* ICW2: IRQ 0 maps to INT IRQBASE */
55
    outb(PIC_PIC0PORT2, IVT_IRQBASE);
55
    pio_write_8(PIC_PIC0PORT2, IVT_IRQBASE);
56
 
56
 
57
    /* ICW3: pic1 using IRQ IRQ_PIC1 */
57
    /* ICW3: pic1 using IRQ IRQ_PIC1 */
58
    outb(PIC_PIC0PORT2, 1 << IRQ_PIC1);
58
    pio_write_8(PIC_PIC0PORT2, 1 << IRQ_PIC1);
59
 
59
 
60
    /* ICW4: i8086 mode */
60
    /* ICW4: i8086 mode */
61
    outb(PIC_PIC0PORT2, 1);
61
    pio_write_8(PIC_PIC0PORT2, 1);
62
 
62
 
63
    /* ICW1: ICW1, ICW4 to follow */
63
    /* ICW1: ICW1, ICW4 to follow */
64
    outb(PIC_PIC1PORT1, PIC_ICW1 | PIC_NEEDICW4);
64
    pio_write_8(PIC_PIC1PORT1, PIC_ICW1 | PIC_NEEDICW4);
65
 
65
 
66
    /* ICW2: IRQ 8 maps to INT (IVT_IRQBASE + 8) */
66
    /* ICW2: IRQ 8 maps to INT (IVT_IRQBASE + 8) */
67
    outb(PIC_PIC1PORT2, IVT_IRQBASE + 8);
67
    pio_write_8(PIC_PIC1PORT2, IVT_IRQBASE + 8);
68
 
68
 
69
    /* ICW3: pic1 is known as IRQ_PIC1 */
69
    /* ICW3: pic1 is known as IRQ_PIC1 */
70
    outb(PIC_PIC1PORT2, IRQ_PIC1);
70
    pio_write_8(PIC_PIC1PORT2, IRQ_PIC1);
71
 
71
 
72
    /* ICW4: i8086 mode */
72
    /* ICW4: i8086 mode */
73
    outb(PIC_PIC1PORT2, 1);
73
    pio_write_8(PIC_PIC1PORT2, 1);
74
 
74
 
75
    /*
75
    /*
76
     * Register interrupt handler for the PIC spurious interrupt.
76
     * Register interrupt handler for the PIC spurious interrupt.
77
     */
77
     */
78
    exc_register(VECTOR_PIC_SPUR, "pic_spurious", (iroutine) pic_spurious);
78
    exc_register(VECTOR_PIC_SPUR, "pic_spurious", (iroutine) pic_spurious);
Line 92... Line 92...
92
void pic_enable_irqs(uint16_t irqmask)
92
void pic_enable_irqs(uint16_t irqmask)
93
{
93
{
94
    uint8_t x;
94
    uint8_t x;
95
 
95
 
96
    if (irqmask & 0xff) {
96
    if (irqmask & 0xff) {
97
        x = inb(PIC_PIC0PORT2);
97
        x = pio_read_8(PIC_PIC0PORT2);
98
        outb(PIC_PIC0PORT2, (uint8_t) (x & (~(irqmask & 0xff))));
98
        pio_write_8(PIC_PIC0PORT2, (uint8_t) (x & (~(irqmask & 0xff))));
99
    }
99
    }
100
    if (irqmask >> 8) {
100
    if (irqmask >> 8) {
101
        x = inb(PIC_PIC1PORT2);
101
        x = pio_read_8(PIC_PIC1PORT2);
102
        outb(PIC_PIC1PORT2, (uint8_t) (x & (~(irqmask >> 8))));
102
        pio_write_8(PIC_PIC1PORT2, (uint8_t) (x & (~(irqmask >> 8))));
103
    }
103
    }
104
}
104
}
105
 
105
 
106
void pic_disable_irqs(uint16_t irqmask)
106
void pic_disable_irqs(uint16_t irqmask)
107
{
107
{
108
    uint8_t x;
108
    uint8_t x;
109
 
109
 
110
    if (irqmask & 0xff) {
110
    if (irqmask & 0xff) {
111
        x = inb(PIC_PIC0PORT2);
111
        x = pio_read_8(PIC_PIC0PORT2);
112
        outb(PIC_PIC0PORT2, (uint8_t) (x | (irqmask & 0xff)));
112
        pio_write_8(PIC_PIC0PORT2, (uint8_t) (x | (irqmask & 0xff)));
113
    }
113
    }
114
    if (irqmask >> 8) {
114
    if (irqmask >> 8) {
115
        x = inb(PIC_PIC1PORT2);
115
        x = pio_read_8(PIC_PIC1PORT2);
116
        outb(PIC_PIC1PORT2, (uint8_t) (x | (irqmask >> 8)));
116
        pio_write_8(PIC_PIC1PORT2, (uint8_t) (x | (irqmask >> 8)));
117
    }
117
    }
118
}
118
}
119
 
119
 
120
void pic_eoi(void)
120
void pic_eoi(void)
121
{
121
{
122
    outb(0x20, 0x20);
122
    pio_write_8((ioport8_t *)0x20, 0x20);
123
    outb(0xa0, 0x20);
123
    pio_write_8((ioport8_t *)0xa0, 0x20);
124
}
124
}
125
 
125
 
126
void pic_spurious(int n __attribute__((unused)), istate_t *istate __attribute__((unused)))
126
void pic_spurious(int n __attribute__((unused)), istate_t *istate __attribute__((unused)))
127
{
127
{
128
#ifdef CONFIG_DEBUG
128
#ifdef CONFIG_DEBUG