Dynamic IRQ handling
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user