diff --git a/Kernel/Devices/SB16.cpp b/Kernel/Devices/SB16.cpp index e65d87605ff..53964c4cc08 100644 --- a/Kernel/Devices/SB16.cpp +++ b/Kernel/Devices/SB16.cpp @@ -100,7 +100,7 @@ void SB16::initialize() disable_irq(); IO::out8(0x226, 1); - IO::delay(); + IO::delay(32); IO::out8(0x226, 0); auto data = dsp_read(); diff --git a/Kernel/Interrupts/APIC.cpp b/Kernel/Interrupts/APIC.cpp index 6eaac955836..6400e24bc4a 100644 --- a/Kernel/Interrupts/APIC.cpp +++ b/Kernel/Interrupts/APIC.cpp @@ -215,20 +215,16 @@ void enable(u32 cpu) write_register(APIC_REG_TPR, 0); if (cpu != 0) { - static volatile u32 foo = 0; - // INIT write_icr(ICRReg(0, ICRReg::INIT, ICRReg::Physical, ICRReg::Assert, ICRReg::TriggerMode::Edge, ICRReg::AllExcludingSelf)); - for (foo = 0; foo < 0x800000; foo++) - ; // TODO: 10 millisecond delay + IO::delay(10 * 1000); for (int i = 0; i < 2; i++) { // SIPI write_icr(ICRReg(0x08, ICRReg::StartUp, ICRReg::Physical, ICRReg::Assert, ICRReg::TriggerMode::Edge, ICRReg::AllExcludingSelf)); // start execution at P8000 - for (foo = 0; foo < 0x80000; foo++) - ; // TODO: 200 microsecond delay + IO::delay(200); } } } diff --git a/Libraries/LibBareMetal/IO.h b/Libraries/LibBareMetal/IO.h index 6e30562b42c..d287801a0dd 100644 --- a/Libraries/LibBareMetal/IO.h +++ b/Libraries/LibBareMetal/IO.h @@ -94,12 +94,10 @@ inline void repeated_out16(u16 port, const u16* data, int data_size) : "d"(port)); } -inline void delay() +inline void delay(size_t microseconds) { - // ~3 microsecs - for (auto i = 0; i < 32; i++) { + for (size_t i = 0; i < microseconds; ++i) IO::in8(0x80); - } } }