diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-22 17:31:52 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-22 17:36:02 +0100 |
| commit | 57e6722453c27d35a3b02309ce21263d225a23e3 (patch) | |
| tree | 7469dce46d063ddc7a3f3a7da6dcff928730488a /kernel/src/apic/apic.c | |
| parent | 2bb4e7fb4c0f5895148bb32da64381b985c8dcef (diff) | |
curr_cpu_apic_id() now works on old amd cpus
Diffstat (limited to 'kernel/src/apic/apic.c')
| -rw-r--r-- | kernel/src/apic/apic.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/kernel/src/apic/apic.c b/kernel/src/apic/apic.c index b947317..ba9138d 100644 --- a/kernel/src/apic/apic.c +++ b/kernel/src/apic/apic.c @@ -15,9 +15,12 @@ uint8_t cpu_apic_ids[256]; uint8_t curr_cpu_apic_id() { - uint8_t apic_id = 0; - __asm__ __volatile__ ("movl $1, %%eax; cpuid; shrl $24, %%ebx;": "=b"(apic_id)); - return apic_id; +// Initial APIC ID +// CPUIDinfo info; +// CpuId(1, 0, &info); +// return (uint8_t)(info.EBX >> 24); + + return (uint8_t)(((*((volatile uint32_t*)((uint64_t)lapic_addr + 0x20))) >> 24) & 0xFF); } void init_ap_cpus() @@ -36,7 +39,6 @@ void init_ap_cpus() if(cpu_apic_ids[i] == bspid) continue; - printf("initializing cpu with apic id 0x%x\n", cpu_apic_ids[i]); // send INIT IPI // clear APIC errors @@ -73,7 +75,7 @@ void init_ap_cpus() } *bspdone = 1; - wait(100); + wait(1000); printf("aprunning: %d\n", *aprunning); printf("cnt: %d\n", cnt); } |
