Ignore:
Timestamp:
Jul 13, 2017, 3:24:38 PM (7 years ago)
Author:
max@…
Message:

start moving the APIC code into the PIC driver

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/hal/x86_64/core/hal_apic.c

    r202 r203  
    268268}
    269269
    270 void hal_ioapic_disable_entry(uint8_t index)
    271 {
    272         const uint64_t data = IOREDTBL_MSK;
    273 
    274         hal_ioapic_write(IOREDTBL + index * 2, (uint32_t)(data & 0xFFFFFFFF));
    275         hal_ioapic_write(IOREDTBL + index * 2 + 1, (uint32_t)(data >> 32));
    276 }
    277 
    278 void hal_ioapic_set_entry(uint8_t index, uint8_t vec, uint8_t dest)
     270void hal_ioapic_bind_irq(uint8_t irq, uint8_t vec, uint8_t dest)
    279271{
    280272        const uint64_t data = ((uint64_t)dest << IOREDTBL_DES_SHIFT) |
    281             IOREDTBL_DEM_PHYS | IOREDTBL_DEL_FIXED | vec;
    282 
    283         hal_ioapic_write(IOREDTBL + index * 2, (uint32_t)(data & 0xFFFFFFFF));
    284         hal_ioapic_write(IOREDTBL + index * 2 + 1, (uint32_t)(data >> 32));
     273            IOREDTBL_DEM_PHYS | IOREDTBL_DEL_FIXED | IOREDTBL_MSK | vec;
     274
     275        hal_ioapic_write(IOREDTBL + irq * 2, (uint32_t)(data & 0xFFFFFFFF));
     276        hal_ioapic_write(IOREDTBL + irq * 2 + 1, (uint32_t)(data >> 32));
     277}
     278
     279void hal_ioapic_enable_irq(uint8_t irq)
     280{
     281        uint32_t data[2];
     282
     283        data[0] = hal_ioapic_read(IOREDTBL + irq * 2);
     284        data[1] = hal_ioapic_read(IOREDTBL + irq * 2 + 1);
     285
     286        data[0] &= ~IOREDTBL_MSK;
     287
     288        hal_ioapic_write(IOREDTBL + irq * 2, data[0]);
     289        hal_ioapic_write(IOREDTBL + irq * 2 + 1, data[1]);
     290}
     291
     292void hal_ioapic_disable_irq(uint8_t irq)
     293{
     294        uint32_t data[2];
     295
     296        data[0] = hal_ioapic_read(IOREDTBL + irq * 2);
     297        data[1] = hal_ioapic_read(IOREDTBL + irq * 2 + 1);
     298
     299        data[0] |= IOREDTBL_MSK;
     300
     301        hal_ioapic_write(IOREDTBL + irq * 2, data[0]);
     302        hal_ioapic_write(IOREDTBL + irq * 2 + 1, data[1]);
    285303}
    286304
     
    295313        /* Explicitly disable (mask) each vector */
    296314        for (i = 0; i < ioapic_pins; i++) {
    297                 hal_ioapic_disable_entry(i);
     315                hal_ioapic_disable_irq(i);
    298316        }
    299317
     
    301319
    302320        /* Now, enable the com1 port and the keyboard */
    303         hal_ioapic_set_entry(IRQ_COM1, IOAPIC_COM1_VECTOR, 0);
    304         hal_ioapic_set_entry(IRQ_KEYBOARD, IOAPIC_KEYBOARD_VECTOR, 0);
     321        hal_ioapic_bind_irq(IRQ_COM1, IOAPIC_COM1_VECTOR, 0);
     322        hal_ioapic_enable_irq(IRQ_COM1);
     323        hal_ioapic_bind_irq(IRQ_KEYBOARD, IOAPIC_KEYBOARD_VECTOR, 0);
     324        hal_ioapic_enable_irq(IRQ_KEYBOARD);
    305325}
    306326
Note: See TracChangeset for help on using the changeset viewer.