Rev 2071 | Rev 2217 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2071 | Rev 2101 | ||
|---|---|---|---|
| Line 144... | Line 144... | ||
| 144 | 144 | ||
| 145 | /** Initialize APIC on BSP. */ |
145 | /** Initialize APIC on BSP. */ |
| 146 | void apic_init(void) |
146 | void apic_init(void) |
| 147 | { |
147 | { |
| 148 | io_apic_id_t idreg; |
148 | io_apic_id_t idreg; |
| 149 | int i; |
149 | unsigned int i; |
| 150 | 150 | ||
| 151 | exc_register(VECTOR_APIC_SPUR, "apic_spurious", (iroutine) apic_spurious); |
151 | exc_register(VECTOR_APIC_SPUR, "apic_spurious", (iroutine) apic_spurious); |
| 152 | 152 | ||
| 153 | enable_irqs_function = io_apic_enable_irqs; |
153 | enable_irqs_function = io_apic_enable_irqs; |
| 154 | disable_irqs_function = io_apic_disable_irqs; |
154 | disable_irqs_function = io_apic_disable_irqs; |
| Line 170... | Line 170... | ||
| 170 | 170 | ||
| 171 | for (i = 0; i < IRQ_COUNT; i++) { |
171 | for (i = 0; i < IRQ_COUNT; i++) { |
| 172 | int pin; |
172 | int pin; |
| 173 | 173 | ||
| 174 | if ((pin = smp_irq_to_pin(i)) != -1) |
174 | if ((pin = smp_irq_to_pin(i)) != -1) |
| 175 | io_apic_change_ioredtbl(pin, DEST_ALL, IVT_IRQBASE+i, LOPRI); |
175 | io_apic_change_ioredtbl(pin, DEST_ALL, IVT_IRQBASE + i, LOPRI); |
| 176 | } |
176 | } |
| 177 | 177 | ||
| 178 | /* |
178 | /* |
| 179 | * Ensure that io_apic has unique ID. |
179 | * Ensure that io_apic has unique ID. |
| 180 | */ |
180 | */ |
| Line 532... | Line 532... | ||
| 532 | * @param irqmask Bitmask of IRQs to be masked (0 = do not mask, 1 = mask). |
532 | * @param irqmask Bitmask of IRQs to be masked (0 = do not mask, 1 = mask). |
| 533 | */ |
533 | */ |
| 534 | void io_apic_disable_irqs(uint16_t irqmask) |
534 | void io_apic_disable_irqs(uint16_t irqmask) |
| 535 | { |
535 | { |
| 536 | io_redirection_reg_t reg; |
536 | io_redirection_reg_t reg; |
| - | 537 | unsigned int i; |
|
| 537 | int i, pin; |
538 | int pin; |
| 538 | 539 | ||
| 539 | for (i=0;i<16;i++) { |
540 | for (i = 0; i < 16; i++) { |
| 540 | if (irqmask & (1<<i)) { |
541 | if (irqmask & (1 << i)) { |
| 541 | /* |
542 | /* |
| 542 | * Mask the signal input in IO APIC if there is a |
543 | * Mask the signal input in IO APIC if there is a |
| 543 | * mapping for the respective IRQ number. |
544 | * mapping for the respective IRQ number. |
| 544 | */ |
545 | */ |
| 545 | pin = smp_irq_to_pin(i); |
546 | pin = smp_irq_to_pin(i); |
| 546 | if (pin != -1) { |
547 | if (pin != -1) { |
| 547 | reg.lo = io_apic_read(IOREDTBL + pin*2); |
548 | reg.lo = io_apic_read(IOREDTBL + pin * 2); |
| 548 | reg.masked = true; |
549 | reg.masked = true; |
| 549 | io_apic_write(IOREDTBL + pin*2, reg.lo); |
550 | io_apic_write(IOREDTBL + pin * 2, reg.lo); |
| 550 | } |
551 | } |
| 551 | 552 | ||
| 552 | } |
553 | } |
| 553 | } |
554 | } |
| 554 | } |
555 | } |
| Line 557... | Line 558... | ||
| 557 | * |
558 | * |
| 558 | * @param irqmask Bitmask of IRQs to be unmasked (0 = do not unmask, 1 = unmask). |
559 | * @param irqmask Bitmask of IRQs to be unmasked (0 = do not unmask, 1 = unmask). |
| 559 | */ |
560 | */ |
| 560 | void io_apic_enable_irqs(uint16_t irqmask) |
561 | void io_apic_enable_irqs(uint16_t irqmask) |
| 561 | { |
562 | { |
| - | 563 | unsigned int i; |
|
| 562 | int i, pin; |
564 | int pin; |
| 563 | io_redirection_reg_t reg; |
565 | io_redirection_reg_t reg; |
| 564 | 566 | ||
| 565 | for (i=0;i<16;i++) { |
567 | for (i = 0;i < 16; i++) { |
| 566 | if (irqmask & (1<<i)) { |
568 | if (irqmask & (1 << i)) { |
| 567 | /* |
569 | /* |
| 568 | * Unmask the signal input in IO APIC if there is a |
570 | * Unmask the signal input in IO APIC if there is a |
| 569 | * mapping for the respective IRQ number. |
571 | * mapping for the respective IRQ number. |
| 570 | */ |
572 | */ |
| 571 | pin = smp_irq_to_pin(i); |
573 | pin = smp_irq_to_pin(i); |
| 572 | if (pin != -1) { |
574 | if (pin != -1) { |
| 573 | reg.lo = io_apic_read(IOREDTBL + pin*2); |
575 | reg.lo = io_apic_read(IOREDTBL + pin * 2); |
| 574 | reg.masked = false; |
576 | reg.masked = false; |
| 575 | io_apic_write(IOREDTBL + pin*2, reg.lo); |
577 | io_apic_write(IOREDTBL + pin * 2, reg.lo); |
| 576 | } |
578 | } |
| 577 | 579 | ||
| 578 | } |
580 | } |
| 579 | } |
581 | } |
| 580 | } |
582 | } |