Dynamic IRQ handling

This commit is contained in:
2025-12-10 01:33:51 +01:00
parent 64b14f3878
commit 6feea1444a
18 changed files with 341 additions and 121 deletions

View File

@@ -30,9 +30,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <libk/types.h>
#include <libk/compiler.h>
#include <sys/pit.h>
#include <sys/ioport.h>
#include <sys/isr.h>
#include <sync/spinlock.h>
#include <irq/irqhandler.h>
#include <config.h>
#define PIT_COUNTER0 0x40
#define PIT_CMD 0x43
@@ -65,14 +69,21 @@ uint32_t ticks_get(void) {
return t;
}
void ticks_increment(void) {
static void ticks_increment(void) {
sl_lock(&ticks_spinlock);
ticks++;
sl_unlock(&ticks_spinlock);
}
static void pit_irqhandler(unused void *cpustate) {
ticks_increment();
}
void pit_init(void) {
sl_init(&ticks_spinlock, "ticks");
irqhandler_register(IRQ_PIT, &pit_irqhandler);
irqhandler_enable(IRQ_PIT);
uint32_t hz = 1000;
uint32_t div = PIT_FREQ / hz;