Ignore:
Timestamp:
Jul 13, 2017, 3:24:38 PM (5 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_init.c

    r202 r203  
    419419/* -------------------------------------------------------------------------- */
    420420
     421struct {
     422        bool_t busy[256];
     423} idt_bitmap __in_kdata;
     424
     425int idt_slot_alloc()
     426{
     427        size_t i;
     428
     429        for (i = 0; i < 256; i++) {
     430                if (!idt_bitmap.busy[i])
     431                        break;
     432        }
     433        if (i == 256) {
     434                return -1;
     435        }
     436
     437        idt_bitmap.busy[i] = true;
     438        return (int)i;
     439}
     440
     441void idt_slot_free(int slot)
     442{
     443        idt_bitmap.busy[slot] = false;
     444}
     445
    421446static void
    422447idt_set_seg(struct idt_seg *seg, void *func, int ist, int type, int dpl, int sel)
     
    441466        size_t i;
    442467
     468        memset(&idt_bitmap, 0, sizeof(idt_bitmap));
    443469        idt = (struct idt_seg *)&idtstore;
    444470
     
    453479                idt_set_seg(&idt[i], (void *)x86_traps[i - CPUVEC_MIN], 0,
    454480                    SDT_SYS386IGT, SEL_KPL, GDT_FIXED_SEL(GDT_KCODE_SEL, SEL_KPL));
     481                idt_bitmap.busy[i] = true;
    455482        }
    456483
     
    459486                idt_set_seg(&idt[i], (void *)x86_intrs[i - DYNVEC_MIN], 0,
    460487                    SDT_SYS386IGT, SEL_KPL, GDT_FIXED_SEL(GDT_KCODE_SEL, SEL_KPL));
     488                idt_bitmap.busy[i] = true;
    461489        }
    462490}
Note: See TracChangeset for help on using the changeset viewer.