Changeset 203 for trunk/hal/x86_64/core/hal_apic.c
- Timestamp:
- Jul 13, 2017, 3:24:38 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/hal/x86_64/core/hal_apic.c
r202 r203 268 268 } 269 269 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) 270 void hal_ioapic_bind_irq(uint8_t irq, uint8_t vec, uint8_t dest) 279 271 { 280 272 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 279 void 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 292 void 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]); 285 303 } 286 304 … … 295 313 /* Explicitly disable (mask) each vector */ 296 314 for (i = 0; i < ioapic_pins; i++) { 297 hal_ioapic_disable_ entry(i);315 hal_ioapic_disable_irq(i); 298 316 } 299 317 … … 301 319 302 320 /* 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); 305 325 } 306 326
Note: See TracChangeset
for help on using the changeset viewer.