mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
x86 now has a driver for rebooting.
This commit is contained in:
parent
fe65e12992
commit
64d191a882
2 changed files with 37 additions and 0 deletions
|
@ -64,5 +64,40 @@ namespace Sortix
|
||||||
asm volatile("inl %1, %0" : "=a" (Result) : "dN" (Port));
|
asm volatile("inl %1, %0" : "=a" (Result) : "dN" (Port));
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Reboot()
|
||||||
|
{
|
||||||
|
// Keyboard interface IO port: data and control.
|
||||||
|
const uint16_t KEYBOARD_INTERFACE = 0x64;
|
||||||
|
|
||||||
|
// Keyboard IO port.
|
||||||
|
const uint16_t KEYBOARD_IO = 0x60;
|
||||||
|
|
||||||
|
// Keyboard data is in buffer (output buffer is empty) (bit 0).
|
||||||
|
const uint8_t KEYBOARD_DATA = (1<<0);
|
||||||
|
|
||||||
|
// User data is in buffer (command buffer is empty) (bit 1).
|
||||||
|
const uint8_t USER_DATA = (1<<1);
|
||||||
|
|
||||||
|
// Disable interrupts.
|
||||||
|
asm volatile("cli");
|
||||||
|
|
||||||
|
// Clear all keyboard buffers (output and command buffers).
|
||||||
|
uint8_t byte;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
byte = InPortB(KEYBOARD_INTERFACE);
|
||||||
|
if ( ( byte & KEYBOARD_DATA ) != 0 ) { InPortB(KEYBOARD_IO); }
|
||||||
|
} while ( ( byte & USER_DATA ) != 0 );
|
||||||
|
|
||||||
|
// CPU reset command.
|
||||||
|
uint8_t KEYBOARD_RESET_CPU = 0xFE;
|
||||||
|
|
||||||
|
// Now pulse the CPU reset line and reset.
|
||||||
|
OutPortB(KEYBOARD_INTERFACE, KEYBOARD_RESET_CPU);
|
||||||
|
|
||||||
|
// If that didn't work, just halt.
|
||||||
|
asm volatile("hlt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,8 @@ namespace Sortix
|
||||||
uint32_t int_no, err_code; // Interrupt number and error code (if applicable)
|
uint32_t int_no, err_code; // Interrupt number and error code (if applicable)
|
||||||
uint32_t eip, cs, eflags, useresp, ss; // Pushed by the processor automatically.
|
uint32_t eip, cs, eflags, useresp, ss; // Pushed by the processor automatically.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void Reboot();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue