From ec91e81a4fcfd7ee6bc4150f06d8740e82f808da Mon Sep 17 00:00:00 2001 From: Anton Kling <anton@kling.gg> Date: Wed, 22 Nov 2023 21:58:30 +0100 Subject: Networking: Split network packets if they are too large --- kernel/drivers/rtl8139.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'kernel/drivers/rtl8139.c') diff --git a/kernel/drivers/rtl8139.c b/kernel/drivers/rtl8139.c index 4b53ef4..dd81533 100644 --- a/kernel/drivers/rtl8139.c +++ b/kernel/drivers/rtl8139.c @@ -103,12 +103,16 @@ __attribute__((interrupt)) void rtl8139_handler(void *regs) { EOI(0xB); } -int rtl8139_send_data(u8 *data, u16 data_size) { +void rtl8139_send_data(u8 *data, u16 data_size) { const struct PCI_DEVICE *device = &rtl8139; // FIXME: It should block or fail if there is too little space for the // buffer - if (data_size > 0x1000) - return 0; + if (data_size > 0x1000) { + rtl8139_send_data(data, 0x1000); + data += 0x1000; + data_size -= 0x1000; + return rtl8139_send_data(data, data_size); + } if (send_buffers_loop > 3) { send_buffers_loop = 0; } @@ -117,7 +121,6 @@ int rtl8139_send_data(u8 *data, u16 data_size) { (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; - return 1; } void get_mac_address(u8 mac[6]) { -- cgit v1.2.3