summaryrefslogtreecommitdiff
path: root/kernel/drivers
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-02-07 11:36:21 +0100
committerAnton Kling <anton@kling.gg>2024-02-07 22:25:47 +0100
commit35958c8c6b600482f68fef08ac26547b5655e987 (patch)
treea3329136adc1b92885c60462e7dd74c98eaa0953 /kernel/drivers
parentb7fa1457727338416499d1b0144f1042a6878a97 (diff)
A lot of small changes
Diffstat (limited to 'kernel/drivers')
-rw-r--r--kernel/drivers/pit.c15
-rw-r--r--kernel/drivers/rtl8139.c6
2 files changed, 16 insertions, 5 deletions
diff --git a/kernel/drivers/pit.c b/kernel/drivers/pit.c
index 567ac2d..8f9c35c 100644
--- a/kernel/drivers/pit.c
+++ b/kernel/drivers/pit.c
@@ -41,17 +41,24 @@ void set_pit_count(u16 hertz) {
outb(PIT_IO_CHANNEL_0, (divisor & 0xFF00) >> 8);
}
-__attribute__((interrupt)) void
-int_clock(__attribute__((unused)) struct interrupt_frame *frame) {
+__attribute__((interrupt)) void int_clock(registers_t *regs) {
+ process_t *p = get_current_task();
+ if (p) {
+ // FIXME: For some reason eflags is the esp? I have read the
+ // manual multilpe times and still can't figure out why.
+ if (regs->eflags <= 0x90000000 && regs->eflags) {
+ p->useresp = regs->eflags;
+ }
+ }
outb(0x20, 0x20);
pit_counter++;
if (pit_counter >= hertz / 1000) {
pit_counter = 0;
clock_num_ms_ticks++;
}
- switch_task();
+ switch_task(1);
}
void pit_install(void) {
- install_handler(int_clock, INT_32_INTERRUPT_GATE(0x0), 0x20);
+ install_handler(int_clock, INT_32_INTERRUPT_GATE(0x3), 0x20);
}
diff --git a/kernel/drivers/rtl8139.c b/kernel/drivers/rtl8139.c
index dd81533..b07ccef 100644
--- a/kernel/drivers/rtl8139.c
+++ b/kernel/drivers/rtl8139.c
@@ -3,6 +3,7 @@
#include <cpu/io.h>
#include <drivers/pci.h>
#include <drivers/rtl8139.h>
+#include <ipc.h>
#include <mmu.h>
#include <network/arp.h>
#include <network/ethernet.h>
@@ -104,6 +105,9 @@ __attribute__((interrupt)) void rtl8139_handler(void *regs) {
}
void rtl8139_send_data(u8 *data, u16 data_size) {
+ kprintf("ipc_write\n");
+ ipc_write(0, data, data_size);
+ /*
const struct PCI_DEVICE *device = &rtl8139;
// FIXME: It should block or fail if there is too little space for the
// buffer
@@ -120,7 +124,7 @@ void rtl8139_send_data(u8 *data, u16 data_size) {
outl(device->gen.base_mem_io + 0x20 + send_buffers_loop * 4,
(u32)virtual_to_physical(send_buffers[send_buffers_loop], NULL));
outl(device->gen.base_mem_io + 0x10 + send_buffers_loop * 4, data_size);
- send_buffers_loop += 1;
+ send_buffers_loop += 1;*/
}
void get_mac_address(u8 mac[6]) {