diff options
author | Marvin Borner | 2019-11-24 23:34:32 +0100 |
---|---|---|
committer | Marvin Borner | 2019-11-24 23:34:32 +0100 |
commit | bb57b124d1bb385d41747f50be7dd4f3625539c1 (patch) | |
tree | fe461afad63df40571784565e8d435cba8c8e59c | |
parent | f9c50b9ff23e9a3e8db5826fef7a6e7ebb8af21d (diff) |
Major coding style reformatting -> Kernighan & Ritchie
This project now (hopefully) uses the same style recommended by Kernighan and Ritchie and used in the Linux Kernel
58 files changed, 740 insertions, 554 deletions
@@ -8,10 +8,11 @@ export PATH := $(PREFIX)/bin:$(PATH) clean: @-rm -rf ./build ./iso - @echo Cleaned build directory + @echo "Cleaned build directory" build: clean @set -e; \ + echo "Building..."; \ mkdir ./build/; \ # Assemble ASM files @@ -34,7 +35,7 @@ build: clean nasm ./src/bootloader/cd.asm -f bin -o ./iso/boot/cd.bin || exit; \ nasm ./src/bootloader/hdd1.asm -f bin -o ./iso/boot/hdd1.bin || exit; \ nasm ./src/bootloader/hdd2.asm -f bin -o ./iso/boot/hdd2.bin || exit; \ - genisoimage -no-emul-boot -b boot/cd.bin -o ./build/melvix.iso ./iso; + genisoimage -quiet -input-charset utf-8 -no-emul-boot -b boot/cd.bin -o ./build/melvix.iso ./iso; cross: @set -e; \ diff --git a/src/bootloader/cd.asm b/src/bootloader/cd.asm index 1e83a3a..ec9fc9d 100644 --- a/src/bootloader/cd.asm +++ b/src/bootloader/cd.asm @@ -159,7 +159,7 @@ checkA20: ret welcome db "Melvix", 0x0A, 0x0D, 0x00 -nolba db "BIOS lacks support for LBA addressing.", 0x00 +nolba db "BIOS lacks support for lba addressing.", 0x00 noboot db "Boot directory could not be found.", 0x00 noa20 db "A20 could not be enabled.", 0 loading db "Loading kernel...", 0x0A, 0x0D, 0x00 @@ -169,7 +169,7 @@ nomem db "BIOS does not support memory detection!", 0 memno20 db "BIOS returns memory detection with 24 bytes. This has never been seen!", 0 start: - ; Check if LBA is supported by the BIOS. + ; Check if lba is supported by the BIOS. mov ah, 0x41 mov bx, 0x55AA int 0x13 diff --git a/src/bootloader/hdd1.asm b/src/bootloader/hdd1.asm index c347625..514deca 100644 --- a/src/bootloader/hdd1.asm +++ b/src/bootloader/hdd1.asm @@ -72,7 +72,7 @@ readwholefile: ret welcome db "Melvix", 0x0A, 0x0D, 0x00 -nolba db "BIOS lacks support for LBA addressing.", 0x00 +nolba db "BIOS lacks support for lba addressing.", 0x00 signaturebad db "Bad disk signature.", 0x00 start: diff --git a/src/bootloader/hdd2.asm b/src/bootloader/hdd2.asm index e289c39..3330c96 100644 --- a/src/bootloader/hdd2.asm +++ b/src/bootloader/hdd2.asm @@ -48,17 +48,17 @@ checkA20: popf ret -last_maxlevel db 0 +last_max_level db 0 getrecursive: push edi push esi push ecx mov eax, edi - cmp al, byte [last_maxlevel] - jna .last_maxlevel_updated - mov byte [last_maxlevel], al - .last_maxlevel_updated: + cmp al, byte [last_max_level] + jna .last_max_level_updated + mov byte [last_max_level], al + .last_max_level_updated: mov eax, esi call 0x7c26 @@ -66,19 +66,19 @@ getrecursive: mov eax, dword [esp] sub eax, 10 - cmp byte [last_maxlevel], 1 + cmp byte [last_max_level], 1 jna .check1 mov ebx, 1 shl ebx, 7 sub eax, ebx .check1: - cmp byte [last_maxlevel], 2 + cmp byte [last_max_level], 2 jna .check2 mov ebx, 1 shl ebx, 14 sub eax, ebx .check2: - cmp byte [last_maxlevel], 3 + cmp byte [last_max_level], 3 jna .check3 mov ebx, 1 shl ebx, 21 @@ -102,7 +102,7 @@ getrecursive: mov ecx, [esp] call getrecursive .finish_recursion: - mov byte [last_maxlevel], 0 + mov byte [last_max_level], 0 pop ecx pop esi diff --git a/src/kernel/acpi/acpi.c b/src/kernel/acpi/acpi.c index 919d0be..ab019c8 100644 --- a/src/kernel/acpi/acpi.c +++ b/src/kernel/acpi/acpi.c @@ -20,16 +20,17 @@ int SLP_EN; int SCI_EN; char PM1_CNT_LEN; -unsigned int *acpi_check_rsd_ptr(unsigned int *ptr) { +unsigned int *acpi_check_rsd_ptr(unsigned int *ptr) +{ char *sig = "RSD PTR "; - struct RSDPtr *rsdp = (struct RSDPtr *) ptr; + struct RSD_ptr *rsdp = (struct RSD_ptr *) ptr; char *bptr; char check = 0; unsigned int i; if (memcmp(sig, rsdp, 8) == 0) { bptr = (char *) ptr; - for (i = 0; i < sizeof(struct RSDPtr); i++) { + for (i = 0; i < sizeof(struct RSD_ptr); i++) { check += *bptr; bptr++; } @@ -42,7 +43,8 @@ unsigned int *acpi_check_rsd_ptr(unsigned int *ptr) { return NULL; } -unsigned int *acpi_get_rsd_ptr() { +unsigned int *acpi_get_rsd_ptr() +{ unsigned int *addr; unsigned int *rsdp; @@ -64,20 +66,21 @@ unsigned int *acpi_get_rsd_ptr() { return NULL; } -int acpi_enable() { - if ((receive_w((unsigned int) PM1a_CNT) & SCI_EN) == 0) { +int acpi_enable() +{ + if ((inw((unsigned int) PM1a_CNT) & SCI_EN) == 0) { if (SMI_CMD != 0 && ACPI_ENABLE != 0) { - send_b((unsigned int) SMI_CMD, ACPI_ENABLE); // Enable ACPI + outb((unsigned int) SMI_CMD, ACPI_ENABLE); // Enable ACPI // Try 3s until ACPI is enabled int i; for (i = 0; i < 300; i++) { - if ((receive_w((unsigned int) PM1a_CNT) & SCI_EN) == 1) + if ((inw((unsigned int) PM1a_CNT) & SCI_EN) == 1) break; timer_wait(1); } if (PM1b_CNT != 0) for (; i < 300; i++) { - if ((receive_w((unsigned int) PM1b_CNT) & SCI_EN) == 1) + if ((inw((unsigned int) PM1b_CNT) & SCI_EN) == 1) break; timer_wait(1); } @@ -97,7 +100,8 @@ int acpi_enable() { } } -int acpi_install() { +int acpi_install() +{ unsigned int *ptr = acpi_get_rsd_ptr(); int success = 0; @@ -109,7 +113,7 @@ int acpi_install() { while (0 < entries--) { if (memcmp((unsigned int *) *ptr, "FACP", 4) == 0) { - fadt = (struct FADT *) *ptr; + fadt = (struct FADT *) *ptr; // TODO: Allocate ACPI tables after paging (page fault)! if (memcmp((unsigned int *) fadt->DSDT, "DSDT", 4) == 0) { char *S5Addr = (char *) fadt->DSDT + 36; int dsdt_length = *(fadt->DSDT + 1) - 36; @@ -148,7 +152,7 @@ int acpi_install() { SCI_EN = 1; acpi_enable(); - vga_log("Installed ACPI", 4); + vga_log("Installed ACPI", 3); success = 1; } // Else: \_S5 parse error @@ -169,29 +173,31 @@ int acpi_install() { return success == 1 ? 0 : -1; } -void acpi_poweroff() { - asm volatile ("cli"); +void acpi_poweroff() +{ + asm ("cli"); if (SCI_EN == 0) { warn("ACPI shutdown is not supported\n"); return; } // Send shutdown command - send_w((unsigned int) PM1a_CNT, SLP_TYPa | SLP_EN); + outw((unsigned int) PM1a_CNT, SLP_TYPa | SLP_EN); if (PM1b_CNT != 0) - send_w((unsigned int) PM1b_CNT, SLP_TYPb | SLP_EN); + outw((unsigned int) PM1b_CNT, SLP_TYPb | SLP_EN); else { - send_w(0xB004, 0x2000); // Bochs - send_w(0x604, 0x2000); // QEMU - send_w(0x4004, 0x3400); // VirtualBox + outw(0xB004, 0x2000); // Bochs + outw(0x604, 0x2000); // QEMU + outw(0x4004, 0x3400); // VirtualBox } } -void reboot() { - asm volatile ("cli"); +void reboot() +{ + asm ("cli"); uint8_t good = 0x02; while (good & 0x02) - good = receive_b(0x64); - send_b(0x64, 0xFE); + good = inb(0x64); + outb(0x64, 0xFE); halt_loop(); } diff --git a/src/kernel/acpi/acpi.h b/src/kernel/acpi/acpi.h index 31b4841..43cb61e 100644 --- a/src/kernel/acpi/acpi.h +++ b/src/kernel/acpi/acpi.h @@ -17,7 +17,7 @@ void reboot(); */ void acpi_poweroff(); -struct RSDPtr { +struct RSD_ptr { char signature[8]; char checksum; char oem_id[6]; diff --git a/src/kernel/cmos/rtc.c b/src/kernel/cmos/rtc.c index 20e1b50..044c58b 100644 --- a/src/kernel/cmos/rtc.c +++ b/src/kernel/cmos/rtc.c @@ -9,18 +9,21 @@ unsigned char day; unsigned char month; unsigned int year; -int get_update_in_progress_flag() { - send_b(0x70, 0x0A); - return (receive_b(0x71) & 0x80); +int get_update_in_progress_flag() +{ + outb(0x70, 0x0A); + return (inb(0x71) & 0x80); } -unsigned char get_rtc_register(int reg) { - send_b(0x70, reg); - return receive_b(0x71); +unsigned char get_rtc_register(int reg) +{ + outb(0x70, reg); + return inb(0x71); } -void read_rtc() { - unsigned int century; +void read_rtc() +{ + unsigned int century = 20; // ... unsigned char last_second; unsigned char last_minute; unsigned char last_hour; @@ -37,7 +40,7 @@ void read_rtc() { day = get_rtc_register(0x07); month = get_rtc_register(0x08); year = get_rtc_register(0x09); - century = get_rtc_register(fadt->century); + // century = get_rtc_register(fadt->century); // TODO: Fix fadt table (page fault!) // Try until the values are the same (fix for RTC updates) do { @@ -56,7 +59,7 @@ void read_rtc() { day = get_rtc_register(0x07); month = get_rtc_register(0x08); year = get_rtc_register(0x09); - century = get_rtc_register(fadt->century); + // century = get_rtc_register(fadt->century); } while ((last_second != second) || (last_minute != minute) || (last_hour != hour) || (last_day != day) || (last_month != month) || (last_year != year) || (last_century != century)); @@ -70,7 +73,7 @@ void read_rtc() { day = (day & 0x0F) + ((day / 16) * 10); month = (month & 0x0F) + ((month / 16) * 10); year = (year & 0x0F) + ((year / 16) * 10); - century = (century & 0x0F) + ((century / 16) * 10); + // century = (century & 0x0F) + ((century / 16) * 10); } year += century * 100; @@ -81,7 +84,8 @@ void read_rtc() { } } -void write_time() { +void write_time() +{ read_rtc(); vesa_draw_string("Current time: "); vesa_draw_number(hour); diff --git a/src/kernel/commands/command.c b/src/kernel/commands/command.c index 6b1afcc..9b6060e 100644 --- a/src/kernel/commands/command.c +++ b/src/kernel/commands/command.c @@ -6,13 +6,15 @@ #include <kernel/timer/timer.h> #include <mlibc/string.h> -int32_t starts_with(const char *a, const char *b) { +int32_t starts_with(const char *a, const char *b) +{ size_t length_pre = strlen(b); size_t length_main = strlen(a); return length_main < length_pre ? 0 : memcmp(b, a, length_pre) == 0; } -void exec_command(char *command) { +void exec_command(char *command) +{ if (starts_with(command, "ls")) vesa_draw_string("Listing files\n"); else if (starts_with(command, "help")) diff --git a/src/kernel/fs/ata_pio.c b/src/kernel/fs/ata_pio.c index d3544ba..78cf7ac 100644 --- a/src/kernel/fs/ata_pio.c +++ b/src/kernel/fs/ata_pio.c @@ -3,123 +3,127 @@ #include <kernel/fs/ata_pio.h> #include <kernel/interrupts/interrupts.h> -struct ATA_INTERFACE *new_ATA(uint8_t master, uint16_t portBase) { - struct ATA_INTERFACE *ret = kmalloc(sizeof(struct ATA_INTERFACE)); +struct ata_interface *new_ata(uint8_t master, uint16_t port_base) +{ + struct ata_interface *ret = kmalloc(sizeof(struct ata_interface)); ret->master = master; - ret->dataPort = portBase; - ret->errorPort = portBase + 0x1; - ret->sectorCountPort = portBase + 0x2; - ret->lbaLowPort = portBase + 0x3; - ret->lbaMidPort = portBase + 0x4; - ret->lbaHiPort = portBase + 0x5; - ret->devicePort = portBase + 0x6; - ret->commandPort = portBase + 0x7; - ret->controlPort = portBase + 0x206; - - // isr_ignore(0x06); + ret->data_port = port_base; + ret->error_port = port_base + 0x1; + ret->sector_count_port = port_base + 0x2; + ret->lba_low_port = port_base + 0x3; + ret->lba_mid_port = port_base + 0x4; + ret->lba_high_port = port_base + 0x5; + ret->device_port = port_base + 0x6; + ret->command_port = port_base + 0x7; + ret->control_port = port_base + 0x206; + // isr_ignore(0x2E); // isr_ignore(0x2F); return ret; } -uint8_t ATA_identify(struct ATA_INTERFACE *iface, uint16_t *retdata) { - send_b(iface->devicePort, iface->master ? 0xA0 : 0xB0); - send_b(iface->controlPort, 0); +uint8_t ata_identify(struct ata_interface *interface, uint16_t *ret_data) +{ + outb(interface->device_port, interface->master ? 0xA0 : 0xB0); + outb(interface->control_port, 0); - send_b(iface->devicePort, 0xA0); - uint8_t status = receive_b(iface->commandPort); + outb(interface->device_port, 0xA0); + uint8_t status = inb(interface->command_port); if (status == 0xFF) return 1; - send_b(iface->devicePort, iface->master ? 0xA0 : 0xB0); - send_b(iface->sectorCountPort, 0); - send_b(iface->lbaLowPort, 0); - send_b(iface->lbaMidPort, 0); - send_b(iface->lbaHiPort, 0); - send_b(iface->commandPort, 0xEC); // Identify command + outb(interface->device_port, interface->master ? 0xA0 : 0xB0); + outb(interface->sector_count_port, 0); + outb(interface->lba_low_port, 0); + outb(interface->lba_mid_port, 0); + outb(interface->lba_high_port, 0); + outb(interface->command_port, 0xEC); // Identify command - status = receive_b(iface->commandPort); + status = inb(interface->command_port); if (!status) return 1; while (((status & 0x80) == 0x80) && ((status & 0x01) != 0x01)) { - status = receive_b(iface->commandPort); + status = inb(interface->command_port); } if (status & 0x01) return 1; - for (int i = 0; i < 256; i++) retdata[i] = receive_w(iface->dataPort); + for (int i = 0; i < 256; i++) ret_data[i] = inw(interface->data_port); return 0; } -uint8_t *ATA_read28(struct ATA_INTERFACE *iface, uint32_t sector) { +uint8_t *ata_read28(struct ata_interface *interface, uint32_t sector) +{ if (sector > 0x0FFFFFFF) return 0; - send_b(iface->devicePort, (iface->master ? 0xE0 : 0xF0) | ((sector & 0x0F000000) >> 24)); + outb(interface->device_port, (interface->master ? 0xE0 : 0xF0) | ((sector & 0x0F000000) >> 24)); - uint8_t status; - for (int i = 0; i < 5; i++) status = receive_b(iface->commandPort); + uint8_t status = 0; + for (int i = 0; i < 5; i++) status = inb(interface->command_port); if (status == 0xFF) return 0; - send_b(iface->errorPort, 0); - send_b(iface->sectorCountPort, 1); - send_b(iface->lbaLowPort, sector & 0x000000FF); - send_b(iface->lbaMidPort, (sector & 0x0000FF00) >> 8); - send_b(iface->lbaHiPort, (sector & 0x00FF0000) >> 16); - send_b(iface->commandPort, 0x20); // Read command + outb(interface->error_port, 0); + outb(interface->sector_count_port, 1); + outb(interface->lba_low_port, sector & 0x000000FF); + outb(interface->lba_mid_port, (sector & 0x0000FF00) >> 8); + outb(interface->lba_high_port, (sector & 0x00FF0000) >> 16); + outb(interface->command_port, 0x20); // Read command - status = receive_b(iface->commandPort); - while ((status & 0x80) && !(status & 0x01)) status = receive_b(iface->commandPort); + status = inb(interface->command_port); + while ((status & 0x80) && !(status & 0x01)) status = inb(interface->command_port); uint8_t *ret = kmalloc(BYTES_PER_SECTOR); for (int i = 0; i < BYTES_PER_SECTOR; i += 2) { - uint16_t data = receive_w(iface->dataPort); + uint16_t data = inw(interface->data_port); ret[i] = data & 0xFF; ret[i + 1] = (data >> 8) & 0xFF; } return ret; } -uint8_t ATA_write28(struct ATA_INTERFACE *iface, uint32_t sector, uint8_t *contents) { +uint8_t ata_write28(struct ata_interface *interface, uint32_t sector, const uint8_t *contents) +{ if (sector > 0x0FFFFFFF) return 1; - asm volatile ("cli"); + asm ("cli"); - send_b(iface->devicePort, (iface->master ? 0xE0 : 0xF0) | ((sector & 0x0F000000) >> 24)); + outb(interface->device_port, (interface->master ? 0xE0 : 0xF0) | ((sector & 0x0F000000) >> 24)); - uint8_t status; - for (int i = 0; i < 5; i++) status = receive_b(iface->commandPort); + uint8_t status = 0; + for (int i = 0; i < 5; i++) status = inb(interface->command_port); if (status == 0xFF) return 1; - send_b(iface->errorPort, 0); - send_b(iface->sectorCountPort, 1); - send_b(iface->lbaLowPort, sector & 0x000000FF); - send_b(iface->lbaMidPort, (sector & 0x0000FF00) >> 8); - send_b(iface->lbaHiPort, (sector & 0x00FF0000) >> 16); - send_b(iface->commandPort, 0x30); // Write command + outb(interface->error_port, 0); + outb(interface->sector_count_port, 1); + outb(interface->lba_low_port, sector & 0x000000FF); + outb(interface->lba_mid_port, (sector & 0x0000FF00) >> 8); + outb(interface->lba_high_port, (sector & 0x00FF0000) >> 16); + outb(interface->command_port, 0x30); // Write command - while ((status & 0x80) || !(status & 0x08)) status = receive_b(iface->commandPort); + while ((status & 0x80) || !(status & 0x08)) status = inb(interface->command_port); if (status & (0x01 || 0x20)) return 2; for (int i = 0; i < BYTES_PER_SECTOR; i += 2) { uint16_t data = contents[i]; data |= ((uint16_t) contents[i + 1]) << 8; - send_w(iface->dataPort, data); + outw(interface->data_port, data); } - send_b(iface->commandPort, 0xE7); // Flush command + outb(interface->command_port, 0xE7); // Flush command - for (int i = 0; i < 5; i++) status = receive_b(iface->commandPort); + for (int i = 0; i < 5; i++) status = inb(interface->command_port); if (!status) return 3; while ((status & 0x80) && !(status & 0x01)) { - status = receive_b(iface->commandPort); + status = inb(interface->command_port); } return 0; } -uint8_t ATA_clear28(struct ATA_INTERFACE *iface, uint32_t sector) { - uint8_t emptysector[512] = {0}; - return ATA_write28(iface, sector, emptysector); +uint8_t ata_clear28(struct ata_interface *interface, uint32_t sector) +{ + uint8_t empty_sector[512] = {0}; + return ata_write28(interface, sector, empty_sector); }
\ No newline at end of file diff --git a/src/kernel/fs/ata_pio.h b/src/kernel/fs/ata_pio.h index 3f1439d..fa08a0c 100644 --- a/src/kernel/fs/ata_pio.h +++ b/src/kernel/fs/ata_pio.h @@ -5,27 +5,27 @@ #define BYTES_PER_SECTOR 512 -struct ATA_INTERFACE { +struct ata_interface { uint8_t master; - uint16_t dataPort; - uint16_t errorPort; - uint16_t sectorCountPort; - uint16_t lbaLowPort; - uint16_t lbaMidPort; - uint16_t lbaHiPort; - uint16_t devicePort; - uint16_t commandPort; - uint16_t controlPort; + uint16_t data_port; + uint16_t error_port; + uint16_t sector_count_port; + uint16_t lba_low_port; + uint16_t lba_mid_port; + uint16_t lba_high_port; + uint16_t device_port; + uint16_t command_port; + uint16_t control_port; }; -struct ATA_INTERFACE *new_ATA(uint8_t master, uint16_t portBase); +struct ata_interface *new_ata(uint8_t master, uint16_t port_base); -uint8_t ATA_identify(struct ATA_INTERFACE *iface, uint16_t *retdata); +uint8_t ata_identify(struct ata_interface *interface, uint16_t *ret_data); -uint8_t *ATA_read28(struct ATA_INTERFACE *iface, uint32_t sector); +uint8_t *ata_read28(struct ata_interface *interface, uint32_t sector); -uint8_t ATA_write28(struct ATA_INTERFACE *iface, uint32_t sector, uint8_t *contents); +uint8_t ata_write28(struct ata_interface *interface, uint32_t sector, const uint8_t *contents); -uint8_t ATA_clear28(struct ATA_INTERFACE *iface, uint32_t sector); +uint8_t ata_clear28(struct ata_interface *interface, uint32_t sector); #endif diff --git a/src/kernel/fs/atapi_pio.c b/src/kernel/fs/atapi_pio.c index e64cd75..34cd1e6 100644 --- a/src/kernel/fs/atapi_pio.c +++ b/src/kernel/fs/atapi_pio.c @@ -3,13 +3,14 @@ #include <kernel/system.h> #include <kernel/paging/paging.h> -void ATAPI_read(uint16_t nblocks, uint32_t lba) { +void ATAPI_read(uint16_t nblocks, uint32_t lba) +{ struct dapack *d = (struct dapack *) ATAPI_PIO_DAPACK; d->size = 0x10; d->null = 0x00; - d->blkcount = nblocks; - d->boffset = ATAPI_PIO_BUFFER; - d->bsegment = 0x0000; + d->blk_count = nblocks; + d->b_offset = ATAPI_PIO_BUFFER; + d->b_segment = 0x0000; d->start = lba; d->upper_lba_bits = 0x00000000; @@ -22,7 +23,8 @@ void ATAPI_read(uint16_t nblocks, uint32_t lba) { v86(LBA_READ_INT, ®s); } -void ATAPI_granular_read(uint32_t nblocks, uint32_t lba, uint8_t *output) { +void ATAPI_granular_read(uint32_t nblocks, uint32_t lba, uint8_t *output) +{ for (uint32_t i = 0; i < nblocks; i++) { ATAPI_read(1, lba + i); for (uint16_t j = 0; j < ATAPI_SECTOR_SIZE; j++) output[j + (2048 * i)] = ((uint8_t *) ATAPI_PIO_BUFFER)[j]; diff --git a/src/kernel/fs/atapi_pio.h b/src/kernel/fs/atapi_pio.h index 5e89e85..be48f2f 100644 --- a/src/kernel/fs/atapi_pio.h +++ b/src/kernel/fs/atapi_pio.h @@ -12,9 +12,9 @@ struct dapack { uint8_t size; uint8_t null; - uint16_t blkcount; - uint16_t boffset; - uint16_t bsegment; + uint16_t blk_count; + uint16_t b_offset; + uint16_t b_segment; uint32_t start; uint32_t upper_lba_bits; } __attribute__((packed)); diff --git a/src/kernel/fs/install.c b/src/kernel/fs/install.c index c098266..d5f62b2 100644 --- a/src/kernel/fs/install.c +++ b/src/kernel/fs/install.c @@ -6,16 +6,18 @@ #include <mlibc/stdlib.h> #include <kernel/acpi/acpi.h> #include <kernel/io/io.h> +#include <kernel/timer/timer.h> -void install_melvix() { - info("You're booting from a CD, Melvix will only run after an install"); - asm volatile ("cli"); - struct ATA_INTERFACE *primary_master = new_ATA(1, 0x1F0); +void install_melvix() +{ + info("You're booting from a CD, Melvix will only run after an installation"); + asm ("cli"); + struct ata_interface *primary_master = new_ata(1, 0x1F0); if (marfs_init(primary_master) != 0) { panic("No HDD found!"); } - struct marfs_SUPERBLOCK *currentSB = marfs_read_superblock(); + struct marfs_superblock *currentSB = marfs_read_superblock(); if (currentSB->signature == 0x1083B99F34B59645) { // WEEEOOOWEEEOOO panic("Melvix seems to be already installed!"); } @@ -26,7 +28,7 @@ void install_melvix() { // Copy MBR info("Copying MBR... "); char *stage1_p[] = {"BOOT", "HDD1.BIN"}; - struct ISO9660_entity *stage1_e = ISO9660_get(stage1_p, 2); + struct iso9660_entity *stage1_e = ISO9660_get(stage1_p, 2); if (!stage1_e) panic("Couldn't find the first HDD bootloader!"); uint8_t *stage1 = ISO9660_read(stage1_e); @@ -40,7 +42,7 @@ void install_melvix() { // Copy second stage info("Copying second stage..."); char *stage2_p[] = {"BOOT", "HDD2.BIN"}; - struct ISO9660_entity *stage2_e = ISO9660_get(stage2_p, 2); + struct iso9660_entity *stage2_e = ISO9660_get(stage2_p, 2); if (!stage2_e) panic("Couldn't find the second HDD bootloader!"); uint8_t *stage2 = ISO9660_read(stage2_e); @@ -50,16 +52,17 @@ void install_melvix() { // Copy the kernel info("Copying the kernel... "); char *kernel_p[] = {"BOOT", "KERNEL.BIN"}; - struct ISO9660_entity *kernel_e = ISO9660_get(kernel_p, 2); + struct iso9660_entity *kernel_e = ISO9660_get(kernel_p, 2); if (!kernel_e) panic("WTH Kernel not found!?"); uint8_t *kernel = kmalloc(kernel_e->length + 2048); - ATAPI_granular_read(1 + (kernel_e->length / 2048), kernel_e->LBA, kernel); + ATAPI_granular_read(1 + (kernel_e->length / 2048), kernel_e->lba, kernel); marfs_new_file(kernel_e->length, kernel, 0, 0, 0); kfree(kernel); kfree(kernel_e); info("Installation successful!"); serial_write("Installation successful!\nRebooting...\n"); + timer_wait(200); acpi_poweroff(); }
\ No newline at end of file diff --git a/src/kernel/fs/iso9660/iso9660.c b/src/kernel/fs/iso9660/iso9660.c index f8eddd4..81b1ba6 100644 --- a/src/kernel/fs/iso9660/iso9660.c +++ b/src/kernel/fs/iso9660/iso9660.c @@ -4,21 +4,22 @@ #include <kernel/fs/iso9660/iso9660.h> #include <mlibc/stdlib.h> -struct ISO9660_entity *ISO9660_get(char **dirs, uint8_t dirs_sz) { +struct iso9660_entity *ISO9660_get(char **dirs, uint8_t dirs_sz) +{ ATAPI_read(1, 0x10); uint32_t last_len = *(uint32_t *) ( ATAPI_PIO_BUFFER + ISO9660_ROOT_RECORD_OFFSET + ISO9660_DIR_EAR_LENGTH ); - uint32_t last_LBA = *(uint32_t *) ( + uint32_t last_lba = *(uint32_t *) ( ATAPI_PIO_BUFFER + ISO9660_ROOT_RECORD_OFFSET + ISO9660_DIR_EAR_LBA ); for (uint8_t dirs_i = 0; dirs_i < dirs_sz; dirs_i++) { - ATAPI_read((last_len % 2048 != 0) + (last_len / 2048), last_LBA); + ATAPI_read((last_len % 2048 != 0) + (last_len / 2048), last_lba); uint8_t found = 0; for (uint32_t i = 0; i < last_len && !found;) { @@ -36,7 +37,7 @@ struct ISO9660_entity *ISO9660_get(char **dirs, uint8_t dirs_sz) { if (strcmp(dirs[dirs_i], filename) == 0) { found = 1; - last_LBA = *(uint32_t *) (ATAPI_PIO_BUFFER + i + ISO9660_DIR_EAR_LBA); + last_lba = *(uint32_t *) (ATAPI_PIO_BUFFER + i + ISO9660_DIR_EAR_LBA); last_len = *(uint32_t *) (ATAPI_PIO_BUFFER + i + ISO9660_DIR_EAR_LENGTH); } else { i += *(uint8_t *) (ATAPI_PIO_BUFFER + i + ISO9660_DIR_RECORD_LENGTH); @@ -44,17 +45,18 @@ struct ISO9660_entity *ISO9660_get(char **dirs, uint8_t dirs_sz) { } if (!found) { - return (struct ISO9660_entity *) 0; + return (struct iso9660_entity *) 0; } } - struct ISO9660_entity *ret = (struct ISO9660_entity *) kmalloc(sizeof(struct ISO9660_entity)); - ret->LBA = last_LBA; + struct iso9660_entity *ret = (struct iso9660_entity *) kmalloc(sizeof(struct iso9660_entity)); + ret->lba = last_lba; ret->length = last_len; return ret; } -uint8_t *ISO9660_read(struct ISO9660_entity *entity) { - ATAPI_read((entity->length % 2048 != 0) + (entity->length / 2048), entity->LBA); +uint8_t *ISO9660_read(struct iso9660_entity *entity) +{ + ATAPI_read((entity->length % 2048 != 0) + (entity->length / 2048), entity->lba); return (uint8_t *) ATAPI_PIO_BUFFER; }
\ No newline at end of file diff --git a/src/kernel/fs/iso9660/iso9660.h b/src/kernel/fs/iso9660/iso9660.h index 3de5d1a..86629e4 100644 --- a/src/kernel/fs/iso9660/iso9660.h +++ b/src/kernel/fs/iso9660/iso9660.h @@ -10,13 +10,13 @@ #include <stdint.h> -struct ISO9660_entity { - uint32_t LBA; +struct iso9660_entity { + uint32_t lba; uint32_t length; }; -struct ISO9660_entity *ISO9660_get(char **dirs, uint8_t dirs_sz); +struct iso9660_entity *ISO9660_get(char **dirs, uint8_t dirs_sz); -uint8_t *ISO9660_read(struct ISO9660_entity *entity); +uint8_t *ISO9660_read(struct iso9660_entity *entity); #endif diff --git a/src/kernel/fs/marfs/directory.c b/src/kernel/fs/marfs/directory.c index bf19fc7..210d908 100644 --- a/src/kernel/fs/marfs/directory.c +++ b/src/kernel/fs/marfs/directory.c @@ -3,52 +3,56 @@ #include <mlibc/stdlib.h> #include <kernel/fs/marfs/marfs.h> -uint32_t marfs_new_dir(uint32_t uid) { return marfs_new_file(0, 0, uid, 0, 1); } +uint32_t marfs_new_dir(uint32_t uid) +{ + return marfs_new_file(0, 0, uid, 0, 1); +} -void marfs_add_to_dir(uint32_t LBAinode, char *filename, uint32_t lba) { - struct marfs_INODE *inode = (struct marfs_INODE *) ATA_read28(iface, LBAinode); +void marfs_add_to_dir(uint32_t lba_inode, char *filename, uint32_t lba) +{ + struct marfs_inode *inode = (struct marfs_inode *) ata_read28(interface, lba_inode); // Read the content - uint8_t *old = marfs_allocate_and_read_whole_file(LBAinode); + uint8_t *old = marfs_allocate_and_read_whole_file(lba_inode); // Allocate memory uint8_t *contents = kmalloc(inode->size + strlen(filename) + 1 + 4); // Copy the content - uint8_t lastWasNull = 0; - uint64_t newsize = 0; + uint8_t last_was_null = 0; + uint64_t new_size = 0; for (uint64_t i = 0; i < inode->size; i++) { - if (old[i] == 0 && lastWasNull) continue; + if (old[i] == 0 && last_was_null) continue; - contents[newsize++] = old[i]; - lastWasNull = (old[i] == 0); + contents[new_size++] = old[i]; + last_was_null = (old[i] == 0); } kfree(old); // Append new file - for (uint16_t i = 0; i <= strlen(filename); i++) contents[newsize++] = filename[i]; - for (signed char j = 24; j > 0; j -= 8) contents[newsize++] = (lba >> j) & 0xFF; + for (size_t i = 0; i <= strlen(filename); i++) contents[new_size++] = filename[i]; + for (signed char j = 24; j > 0; j -= 8) contents[new_size++] = (lba >> j) & 0xFF; // Free the blocks - uint32_t newsize_in_blocks = newsize / 512; - if (newsize % 512) newsize_in_blocks++; - for (uint32_t i = 0; i < newsize_in_blocks; i++) + uint32_t new_size_in_blocks = new_size / 512; + if (new_size % 512) new_size_in_blocks++; + for (uint32_t i = 0; i < new_size_in_blocks; i++) marfs_mark_block_as_free(marfs_get_block(inode, i)); // Overwrite - uint32_t aux_inode = marfs_new_file(newsize, contents, 0xDEADBEEF, 0, 0); - struct marfs_INODE *real_aux_inode = (struct marfs_INODE *) ATA_read28(iface, aux_inode); + uint32_t aux_inode = marfs_new_file(new_size, contents, 0xDEADBEEF, 0, 0); + struct marfs_inode *real_aux_inode = (struct marfs_inode *) ata_read28(interface, aux_inode); for (uint8_t i = 0; i < 10; i++) inode->DBPs[i] = real_aux_inode->DBPs[i]; inode->ext_1 = real_aux_inode->ext_1; inode->ext_2 = real_aux_inode->ext_2; inode->ext_3 = real_aux_inode->ext_3; inode->ext_4 = real_aux_inode->ext_4; - real_aux_inode->isUsed = 0; - ATA_write28(iface, aux_inode, (uint8_t *) real_aux_inode); + real_aux_inode->is_used = 0; + ata_write28(interface, aux_inode, (uint8_t *) real_aux_inode); kfree(real_aux_inode); - inode->size = newsize; - ATA_write28(iface, LBAinode, (uint8_t *) inode); + inode->size = new_size; + ata_write28(interface, lba_inode, (uint8_t *) inode); kfree(inode); } diff --git a/src/kernel/fs/marfs/disklevel.c b/src/kernel/fs/marfs/disklevel.c index f54dea1..a902362 100644 --- a/src/kernel/fs/marfs/disklevel.c +++ b/src/kernel/fs/marfs/disklevel.c @@ -2,9 +2,10 @@ #include <kernel/fs/ata_pio.h> #include <kernel/fs/marfs/marfs.h> -void marfs_format(void) { +void marfs_format(void) +{ // Create superblock - struct marfs_SUPERBLOCK sb; + struct marfs_superblock sb; sb.signature = 0x1083B99F34B59645; // Huh, magic?! sb.n_inodes = (marfs_get_max_lba() - 2) >> 5; sb.n_chunks = (marfs_get_max_lba() - (2 + sb.n_inodes)) >> 9; @@ -16,8 +17,8 @@ void marfs_format(void) { marfs_writeSB(&sb); // Initialize the inodes - for (uint32_t i = 0; i < sb.n_inodes; i++) ATA_clear28(iface, 2 + i); + for (uint32_t i = 0; i < sb.n_inodes; i++) ata_clear28(interface, 2 + i); // Initialize the chunks - for (uint32_t i = 0; i < sb.n_chunks; i++) ATA_clear28(iface, sb.s_first_chunk + i * 512); + for (uint32_t i = 0; i < sb.n_chunks; i++) ata_clear28(interface, sb.s_first_chunk + i * 512); } diff --git a/src/kernel/fs/marfs/marfs.h b/src/kernel/fs/marfs/marfs.h index ba6f0b3..f197e5b 100644 --- a/src/kernel/fs/marfs/marfs.h +++ b/src/kernel/fs/marfs/marfs.h @@ -3,7 +3,7 @@ #include <stdint.h> -struct marfs_SUPERBLOCK { +struct marfs_superblock { uint64_t signature; uint32_t n_inodes; uint32_t n_chunks; @@ -12,7 +12,7 @@ struct marfs_SUPERBLOCK { uint32_t s_first_chunk; } __attribute__((packed)); -struct marfs_INODE { +struct marfs_inode { uint64_t size; uint32_t creation_time; uint32_t last_mod_time; @@ -24,41 +24,35 @@ struct marfs_INODE { uint32_t ext_3; uint32_t ext_4; uint32_t uid; - uint8_t isApp; - uint8_t isDir; - uint8_t isUsed; + uint8_t is_app; + uint8_t is_dir; + uint8_t is_used; } __attribute__((packed)); -enum marfs_RESERVED_INODES { - marfs_INODE_JBOOT2, - marfs_INODE_KERNEL, - marfs_INODE_ROOT -}; - -struct ATA_INTERFACE *iface; -struct marfs_SUPERBLOCK sb_cache; -uint32_t maxLBA; +struct ata_interface *interface; +struct marfs_superblock sb_cache; +uint32_t max_lba; // marfs_sectorlevel.c -uint8_t marfs_init(struct ATA_INTERFACE *iface); +uint8_t marfs_init(struct ata_interface *interface); uint32_t marfs_get_max_lba(void); uint8_t marfs_write_mbr(uint8_t *mbr); -struct marfs_SUPERBLOCK *marfs_read_superblock(); +struct marfs_superblock *marfs_read_superblock(); -uint8_t marfs_writeSB(struct marfs_SUPERBLOCK *sb); +uint8_t marfs_writeSB(struct marfs_superblock *sb); uint32_t marfs_get_free_lba_block(void); -uint8_t marfs_mark_block_as_used(uint32_t LBAsector); +uint8_t marfs_mark_block_as_used(uint32_t lba_sector); -uint8_t marfs_mark_block_as_free(uint32_t LBAsector); +uint8_t marfs_mark_block_as_free(uint32_t lba_sector); uint32_t marfs_get_free_lba_inode(void); -void marfs_mark_inode_as_free(uint32_t LBAsector); +void marfs_mark_inode_as_free(uint32_t lba_sector); // marfs_disklevel.c void marfs_format(void); @@ -69,13 +63,13 @@ uint32_t marfs_new_file(uint64_t size, uint8_t *data, uint32_t uid, uint8_t exec // marfs_dir.c uint32_t marfs_new_dir(uint32_t uid); -void marfs_add_to_dir(uint32_t LBAinode, char *filename, uint32_t lba); +void marfs_add_to_dir(uint32_t lba_inode, char *filename, uint32_t lba); // marfs_read_whole_file.c -uint32_t marfs_get_block(struct marfs_INODE *inode, uint32_t i); +uint32_t marfs_get_block(struct marfs_inode *inode, uint32_t i); -void marfs_read_whole_file(uint32_t LBAinode, uint8_t *buffer); +void marfs_read_whole_file(uint32_t lba_inode, uint8_t *buffer); -uint8_t *marfs_allocate_and_read_whole_file(uint32_t LBAinode); +uint8_t *marfs_allocate_and_read_whole_file(uint32_t lba_inode); #endif diff --git a/src/kernel/fs/marfs/new_file.c b/src/kernel/fs/marfs/new_file.c index ebc8152..4503ed1 100644 --- a/src/kernel/fs/marfs/new_file.c +++ b/src/kernel/fs/marfs/new_file.c @@ -3,16 +3,17 @@ #include <mlibc/stdlib.h> #include <kernel/fs/marfs/marfs.h> -static uint8_t last_maxlevel = 0; +static uint8_t last_max_level = 0; -void marfs_update_recursive(uint8_t level, uint32_t i, uint32_t recLBA, uint32_t realLBA) { - if (level > last_maxlevel) last_maxlevel = level; - uint32_t *contents = (uint32_t *) ATA_read28(iface, recLBA); +void marfs_update_recursive(uint8_t level, uint32_t i, uint32_t rec_lba, uint32_t real_lba) +{ + if (level > last_max_level) last_max_level = level; + uint32_t *contents = (uint32_t *) ata_read28(interface, rec_lba); uint32_t idx = i - 10; - if (last_maxlevel > 1) idx -= 1 << 7; - if (last_maxlevel > 2) idx -= 1 << (7 * 2); - if (last_maxlevel > 3) idx -= 1 << (7 * 3); + if (last_max_level > 1) idx -= 1 << 7; + if (last_max_level > 2) idx -= 1 << (7 * 2); + if (last_max_level > 3) idx -= 1 << (7 * 3); idx >>= 7 * (level - 1); if (level > 1) { @@ -21,82 +22,83 @@ void marfs_update_recursive(uint8_t level, uint32_t i, uint32_t recLBA, uint32_t marfs_mark_block_as_used(contents[idx]); } } else { - contents[idx] = realLBA; + contents[idx] = real_lba; } - ATA_write28(iface, recLBA, (uint8_t *) contents); + ata_write28(interface, rec_lba, (uint8_t *) contents); uint32_t contents_idx = contents[idx]; kfree(contents); if (level != 1) { - marfs_update_recursive(level - 1, i, contents_idx, realLBA); + marfs_update_recursive(level - 1, i, contents_idx, real_lba); } - last_maxlevel = 0; + last_max_level = 0; } -uint32_t marfs_new_file(uint64_t size, uint8_t *data, uint32_t uid, uint8_t exec, uint8_t dir) { - struct marfs_INODE *inode = (struct marfs_INODE *) kcalloc(1, 512); +uint32_t marfs_new_file(uint64_t size, uint8_t *data, uint32_t uid, uint8_t exec, uint8_t dir) +{ + struct marfs_inode *inode = (struct marfs_inode *) kcalloc(1, 512); inode->size = size; inode->creation_time = inode->last_mod_time = inode->last_access_time = 0; // TODO: POSIX time inode->n_blocks = size / 512; if (size % 512) inode->n_blocks++; inode->uid = uid; - inode->isApp = exec; - inode->isDir = dir; - inode->isUsed = 1; + inode->is_app = exec; + inode->is_dir = dir; + inode->is_used = 1; uint32_t size_in_blocks = inode->n_blocks; - uint32_t LBA_singly, LBA_doubly, LBA_triply, LBA_quadruply; - LBA_singly = LBA_doubly = LBA_triply = LBA_quadruply = 0; + uint32_t lba_singly, lba_doubly, lba_triply, lba_quadruply; + lba_singly = lba_doubly = lba_triply = lba_quadruply = 0; for (uint32_t i = 0; i < size_in_blocks; i++) { - uint32_t thisblock = marfs_get_free_lba_block(); + uint32_t this_block = marfs_get_free_lba_block(); if (i != size_in_blocks - 1) { - ATA_write28(iface, thisblock, data); + ata_write28(interface, this_block, data); } else if (size % 512) { uint8_t contents[512] = {0}; for (uint16_t i = 0; i < size % 512; i++) contents[i] = data[i]; - ATA_write28(iface, thisblock, contents); + ata_write28(interface, this_block, contents); } data += 512; - marfs_mark_block_as_used(thisblock); + marfs_mark_block_as_used(this_block); if (i > 9 + (128 * 128 * 128)) { - if (!LBA_quadruply) { - LBA_quadruply = marfs_get_free_lba_block(); - marfs_mark_block_as_used(LBA_quadruply); - inode->ext_4 = LBA_quadruply; + if (!lba_quadruply) { + lba_quadruply = marfs_get_free_lba_block(); + marfs_mark_block_as_used(lba_quadruply); + inode->ext_4 = lba_quadruply; } - marfs_update_recursive(4, i, LBA_quadruply, thisblock); + marfs_update_recursive(4, i, lba_quadruply, this_block); } else if (i > 9 + (128 * 128)) { - if (!LBA_triply) { - LBA_triply = marfs_get_free_lba_block(); - marfs_mark_block_as_used(LBA_triply); - inode->ext_3 = LBA_triply; + if (!lba_triply) { + lba_triply = marfs_get_free_lba_block(); + marfs_mark_block_as_used(lba_triply); + inode->ext_3 = lba_triply; } - marfs_update_recursive(3, i, LBA_triply, thisblock); + marfs_update_recursive(3, i, lba_triply, this_block); } else if (i > 9 + 128) { - if (!LBA_doubly) { - LBA_doubly = marfs_get_free_lba_block(); - marfs_mark_block_as_used(LBA_doubly); - inode->ext_2 = LBA_doubly; + if (!lba_doubly) { + lba_doubly = marfs_get_free_lba_block(); + marfs_mark_block_as_used(lba_doubly); + inode->ext_2 = lba_doubly; } - marfs_update_recursive(2, i, LBA_doubly, thisblock); + marfs_update_recursive(2, i, lba_doubly, this_block); } else if (i > 9) { - if (!LBA_singly) { - LBA_singly = marfs_get_free_lba_block(); - marfs_mark_block_as_used(LBA_singly); - inode->ext_1 = LBA_singly; + if (!lba_singly) { + lba_singly = marfs_get_free_lba_block(); + marfs_mark_block_as_used(lba_singly); + inode->ext_1 = lba_singly; } - marfs_update_recursive(1, i, LBA_singly, thisblock); + marfs_update_recursive(1, i, lba_singly, this_block); } else { - inode->DBPs[i] = thisblock; + inode->DBPs[i] = this_block; } } // Write the inode - uint32_t inode_LBA = marfs_get_free_lba_inode(); - ATA_write28(iface, inode_LBA, (uint8_t *) inode); + uint32_t inode_lba = marfs_get_free_lba_inode(); + ata_write28(interface, inode_lba, (uint8_t *) inode); - return inode_LBA; + return inode_lba; }
\ No newline at end of file diff --git a/src/kernel/fs/marfs/read_whole_file.c b/src/kernel/fs/marfs/read_whole_file.c index 0d3af26..324cd9b 100644 --- a/src/kernel/fs/marfs/read_whole_file.c +++ b/src/kernel/fs/marfs/read_whole_file.c @@ -3,28 +3,30 @@ #include <mlibc/stdlib.h> #include <kernel/fs/marfs/marfs.h> -static uint8_t last_maxlevel = 0; +static uint8_t last_max_level = 0; -uint32_t marfs_get_recursive(uint8_t level, uint32_t i, uint32_t recLBA) { - if (level > last_maxlevel) last_maxlevel = level; - uint32_t *contents = (uint32_t *) ATA_read28(iface, recLBA); +uint32_t marfs_get_recursive(uint8_t level, uint32_t i, uint32_t rec_lba) +{ + if (level > last_max_level) last_max_level = level; + uint32_t *contents = (uint32_t *) ata_read28(interface, rec_lba); uint32_t idx = i - 10; - if (last_maxlevel > 1) idx -= 1 << 7; - if (last_maxlevel > 2) idx -= 1 << (7 * 2); - if (last_maxlevel > 3) idx -= 1 << (7 * 3); + if (last_max_level > 1) idx -= 1 << 7; + if (last_max_level > 2) idx -= 1 << (7 * 2); + if (last_max_level > 3) idx -= 1 << (7 * 3); idx >>= 7 * (level - 1); - uint32_t next_recLBA = contents[idx]; + uint32_t next_rec_lba = contents[idx]; kfree(contents); uint32_t toRet; - if (level > 1) toRet = marfs_get_recursive(level - 1, i, next_recLBA); - else toRet = next_recLBA; - last_maxlevel = 0; + if (level > 1) toRet = marfs_get_recursive(level - 1, i, next_rec_lba); + else toRet = next_rec_lba; + last_max_level = 0; return toRet; } -uint32_t marfs_get_block(struct marfs_INODE *inode, uint32_t i) { +uint32_t marfs_get_block(struct marfs_inode *inode, uint32_t i) +{ if (i > 9 + (128 * 128 * 128)) { return marfs_get_recursive(4, i, inode->ext_4); } else if (i > 9 + (128 * 128)) { @@ -38,13 +40,14 @@ uint32_t marfs_get_block(struct marfs_INODE *inode, uint32_t i) { } } -void marfs_read_whole_file(uint32_t LBAinode, uint8_t *buffer) { - struct marfs_INODE *inode = (struct marfs_INODE *) ATA_read28(iface, LBAinode); +void marfs_read_whole_file(uint32_t lba_inode, uint8_t *buffer) +{ + struct marfs_inode *inode = (struct marfs_inode *) ata_read28(interface, lba_inode); uint32_t size_in_blocks = inode->n_blocks; for (uint32_t i = 0; i < size_in_blocks; i++) { uint32_t this_block = marfs_get_block(inode, i); - uint8_t *this_block_contents = ATA_read28(iface, this_block); + uint8_t *this_block_contents = ata_read28(interface, this_block); uint16_t upper_bound = (i != size_in_blocks - 1) ? 512 : (inode->size % 512); for (uint16_t j = 0; j < upper_bound; j++) buffer[(i * 512) + j] = this_block_contents[j]; kfree(this_block_contents); @@ -54,12 +57,13 @@ void marfs_read_whole_file(uint32_t LBAinode, uint8_t *buffer) { } // TODO: Beautify -uint8_t *marfs_allocate_and_read_whole_file(uint32_t LBAinode) { - struct marfs_INODE *inode = (struct marfs_INODE *) ATA_read28(iface, LBAinode); +uint8_t *marfs_allocate_and_read_whole_file(uint32_t lba_inode) +{ + struct marfs_inode *inode = (struct marfs_inode *) ata_read28(interface, lba_inode); uint64_t size = inode->size; kfree(inode); uint8_t *buffer = kmalloc(size); - marfs_read_whole_file(LBAinode, buffer); + marfs_read_whole_file(lba_inode, buffer); return buffer; } diff --git a/src/kernel/fs/marfs/sectorlevel.c b/src/kernel/fs/marfs/sectorlevel.c index d8795fa..d9fa2c4 100644 --- a/src/kernel/fs/marfs/sectorlevel.c +++ b/src/kernel/fs/marfs/sectorlevel.c @@ -3,36 +3,44 @@ #include <kernel/fs/ata_pio.h> #include <kernel/fs/marfs/marfs.h> -uint8_t marfs_init(struct ATA_INTERFACE *_iface) { - iface = _iface; - uint16_t identifydata[256 * 2]; - uint8_t ret = ATA_identify(iface, identifydata); - maxLBA = (identifydata[61] << 16) + identifydata[60]; +uint8_t marfs_init(struct ata_interface *_interface) +{ + interface = _interface; + uint16_t identify_data[256 * 2]; + uint8_t ret = ata_identify(interface, identify_data); + max_lba = (identify_data[61] << 16) + identify_data[60]; return ret; } -uint32_t marfs_get_max_lba(void) { return maxLBA; } +uint32_t marfs_get_max_lba(void) +{ + return max_lba; +} -uint8_t marfs_write_mbr(uint8_t *mbr) { - return ATA_write28(iface, 0, mbr); +uint8_t marfs_write_mbr(uint8_t *mbr) +{ + return ata_write28(interface, 0, mbr); } -struct marfs_SUPERBLOCK *marfs_read_superblock() { - struct marfs_SUPERBLOCK *p = (struct marfs_SUPERBLOCK *) ATA_read28(iface, 1); +struct marfs_superblock *marfs_read_superblock() +{ + struct marfs_superblock *p = (struct marfs_superblock *) ata_read28(interface, 1); sb_cache = *p; return p; } -uint8_t marfs_writeSB(struct marfs_SUPERBLOCK *sb) { +uint8_t marfs_writeSB(struct marfs_superblock *sb) +{ sb_cache = *sb; - return ATA_write28(iface, 1, (uint8_t *) sb); + return ata_write28(interface, 1, (uint8_t *) sb); } -uint32_t marfs_get_free_lba_block(void) { +uint32_t marfs_get_free_lba_block(void) +{ uint32_t offset = 2 + sb_cache.s_first_chunk; uint8_t *p = 0; for (uint32_t i = 0; i < sb_cache.n_chunks; i++) { - p = ATA_read28(iface, offset); + p = ata_read28(interface, offset); if (!(*p & 0x80)) break; kfree(p); offset += 512; @@ -45,19 +53,20 @@ uint32_t marfs_get_free_lba_block(void) { } kfree(p); - ATA_clear28(iface, offset); + ata_clear28(interface, offset); return offset; } -static uint8_t marfs_mark_block(uint32_t lba_sector, uint8_t mode) { +static uint8_t marfs_mark_block(uint32_t lba_sector, uint8_t mode) +{ lba_sector -= 2; lba_sector -= sb_cache.s_first_chunk; uint16_t block_in_chunk = lba_sector % 512; lba_sector /= 512; lba_sector = 2 + sb_cache.s_first_chunk + (512 * lba_sector); - uint8_t *p = ATA_read28(iface, lba_sector); + uint8_t *p = ata_read28(interface, lba_sector); p[block_in_chunk] = mode; if (mode == 0) { @@ -73,29 +82,37 @@ static uint8_t marfs_mark_block(uint32_t lba_sector, uint8_t mode) { p[0] = full_chunk; } - uint8_t ret = ATA_write28(iface, lba_sector, p); + uint8_t ret = ata_write28(interface, lba_sector, p); kfree(p); return ret; } -uint8_t marfs_mark_block_as_free(uint32_t lba_sector) { return marfs_mark_block(lba_sector, 0); } +uint8_t marfs_mark_block_as_free(uint32_t lba_sector) +{ + return marfs_mark_block(lba_sector, 0); +} -uint8_t marfs_mark_block_as_used(uint32_t lba_sector) { return marfs_mark_block(lba_sector, 1); } +uint8_t marfs_mark_block_as_used(uint32_t lba_sector) +{ + return marfs_mark_block(lba_sector, 1); +} -uint32_t marfs_get_free_lba_inode(void) { +uint32_t marfs_get_free_lba_inode(void) +{ uint32_t offset; for (offset = 2; offset < 2 + sb_cache.n_inodes; offset++) { - struct marfs_INODE *inode = (struct marfs_INODE *) ATA_read28(iface, offset); - uint8_t used = inode->isUsed; + struct marfs_inode *inode = (struct marfs_inode *) ata_read28(interface, offset); + uint8_t used = inode->is_used; kfree(inode); if (!used) break; } return offset; } -void marfs_mark_inode_as_free(uint32_t lba_sector) { - struct marfs_INODE *inode = (struct marfs_INODE *) ATA_read28(iface, lba_sector); - inode->isUsed = 0; - ATA_write28(iface, lba_sector, (uint8_t *) inode); +void marfs_mark_inode_as_free(uint32_t lba_sector) +{ + struct marfs_inode *inode = (struct marfs_inode *) ata_read28(interface, lba_sector); + inode->is_used = 0; + ata_write28(interface, lba_sector, (uint8_t *) inode); kfree(inode); }
\ No newline at end of file diff --git a/src/kernel/fs/vfs.c b/src/kernel/fs/vfs.c index 5591a60..702851e 100644 --- a/src/kernel/fs/vfs.c +++ b/src/kernel/fs/vfs.c @@ -2,31 +2,36 @@ fs_node_t *fs_root = 0; -uint32_t read_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer) { +uint32_t read_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer) +{ if (node->read != 0) return node->read(node, offset, size, buffer); else return 0; } -uint32_t write_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer) { +uint32_t write_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer) +{ if (node->write != 0) return node->write(node, offset, size, buffer); else return 0; } -void open_fs(fs_node_t *node, uint8_t read, uint8_t write) { +void open_fs(fs_node_t *node, uint8_t read, uint8_t write) +{ if (node->open != 0) return node->open(node); } -void close_fs(fs_node_t *node) { +void close_fs(fs_node_t *node) +{ if (node->close != 0) return node->close(node); } -struct dirent *readdir_fs(fs_node_t *node, uint32_t index) { +struct dirent *readdir_fs(fs_node_t *node, uint32_t index) +{ if ((node->flags & 0x7) == FS_DIRECTORY && node->readdir != 0) return node->readdir(node, index); @@ -34,7 +39,8 @@ struct dirent *readdir_fs(fs_node_t *node, uint32_t index) { return 0; } -fs_node_t *finddir_fs(fs_node_t *node, char *name) { +fs_node_t *finddir_fs(fs_node_t *node, char *name) +{ if ((node->flags & 0x7) == FS_DIRECTORY && node->finddir != 0) return node->finddir(node, name); diff --git a/src/kernel/gdt/gdt.c b/src/kernel/gdt/gdt.c index 1c69602..70d5b7f 100644 --- a/src/kernel/gdt/gdt.c +++ b/src/kernel/gdt/gdt.c @@ -57,7 +57,8 @@ extern void gdt_flush(); extern void tss_flush(); -void gdt_set_gate(int32_t num, uint32_t base, uint32_t limit, uint8_t access, uint8_t gran) { +void gdt_set_gate(int32_t num, uint32_t base, uint32_t limit, uint8_t access, uint8_t gran) +{ // Set descriptor base address gdt[num].base_low = (base & 0xFFFF); gdt[num].base_middle = (base >> 16) & 0xFF; @@ -72,7 +73,8 @@ void gdt_set_gate(int32_t num, uint32_t base, uint32_t limit, uint8_t access, ui gdt[num].access = access; } -void gdt_install() { +void gdt_install() +{ // Set GDT pointer and limit gp.limit = (sizeof(struct gdt_entry) * 6) - 1; gp.base = &gdt; @@ -99,10 +101,11 @@ void gdt_install() { gdt_flush(); tss_flush(); - vga_log("Installed Global Descriptor Table", 2); + vga_log("Installed Global Descriptor Table", 1); } -void tss_write(int32_t num, uint16_t ss0, uint32_t esp0) { +void tss_write(int32_t num, uint16_t ss0, uint32_t esp0) +{ uint32_t base = (uint32_t) &tss_entry; uint32_t limit = base + sizeof(tss_entry); @@ -117,6 +120,7 @@ void tss_write(int32_t num, uint16_t ss0, uint32_t esp0) { tss_entry.ss = tss_entry.ds = tss_entry.es = tss_entry.fs = tss_entry.gs = 0x13; } -void set_kernel_stack(uint32_t stack) { +void set_kernel_stack(uint32_t stack) +{ tss_entry.esp0 = stack; } diff --git a/src/kernel/graphics/vesa.c b/src/kernel/graphics/vesa.c index 6193401..5e3080c 100644 --- a/src/kernel/graphics/vesa.c +++ b/src/kernel/graphics/vesa.c @@ -7,7 +7,8 @@ #include <mlibc/stdlib.h> #include <kernel/commands/command.h> -void switch_to_vga() { +void switch_to_vga() +{ serial_write("Force switch to VGA!\n"); uint16_t *terminal_buffer = (uint16_t *) 0xB8000; char *error = "Melvix does not support this graphics hardware!"; @@ -16,7 +17,8 @@ void switch_to_vga() { panic("No VESA support!"); } -struct edid_data get_edid() { +struct edid_data get_edid() +{ regs16_t regs; regs.ax = 0x4F15; regs.bx = 0x1; // BL @@ -33,7 +35,8 @@ struct edid_data get_edid() { return *(struct edid_data *) edid; } -void vbe_set_mode(unsigned short mode) { +void vbe_set_mode(unsigned short mode) +{ regs16_t regs; regs.ax = 0x4F02; regs.bx = mode; @@ -44,7 +47,8 @@ void vbe_set_mode(unsigned short mode) { switch_to_vga(); } -uint16_t *vbe_get_modes() { +uint16_t *vbe_get_modes() +{ char *info_address = (char *) 0x7E00; strcpy(info_address, "VBE2"); for (int i = 4; i < 512; i++) *(info_address + i) = 0; @@ -71,7 +75,8 @@ uint16_t *vbe_get_modes() { return mode_ptr; } -struct vbe_mode_info *vbe_get_mode_info(uint16_t mode) { +struct vbe_mode_info *vbe_get_mode_info(uint16_t mode) +{ regs16_t regs; regs.ax = 0x4F01; regs.cx = mode; @@ -94,10 +99,11 @@ struct vbe_mode_info *vbe_get_mode_info(uint16_t mode) { return ret; } -void set_optimal_resolution() { - asm volatile ("sti"); - vga_log("Switching to graphics mode", 9); - vga_log("Trying to detect available modes", 10); +void set_optimal_resolution() +{ + asm ("sti"); + vga_log("Switching to graphics mode", 8); + vga_log("Trying to detect available modes", 9); uint16_t *video_modes = vbe_get_modes(); uint16_t highest = 0; @@ -217,12 +223,14 @@ uint16_t terminal_y = 0; int font_width; int font_height; -void vesa_set_font(int height) { +void vesa_set_font(int height) +{ font_width = height / 2; font_height = height; } -void vesa_convert_color(uint32_t *color_array, uint32_t color) { +void vesa_convert_color(uint32_t *color_array, uint32_t color) +{ uint8_t red = (color >> 16) & 255; uint8_t green = (color >> 8) & 255; uint8_t blue = color & 255; @@ -246,7 +254,8 @@ void vesa_convert_color(uint32_t *color_array, uint32_t color) { } } -void vesa_set_pixel(uint16_t x, uint16_t y, const uint32_t color[3]) { +void vesa_set_pixel(uint16_t x, uint16_t y, const uint32_t color[3]) +{ unsigned pos = x * vbe_bpl + y * vbe_pitch; char *draw = (char *) &fb[pos]; draw[pos] = color[2]; @@ -254,7 +263,8 @@ void vesa_set_pixel(uint16_t x, uint16_t y, const uint32_t color[3]) { draw[pos + 2] = color[0]; } -void vesa_draw_rectangle(int x1, int y1, int x2, int y2, const uint32_t color[3]) { +void vesa_draw_rectangle(int x1, int y1, int x2, int y2, const uint32_t color[3]) +{ int pos1 = x1 * vbe_bpl + y1 * vbe_pitch; char *draw = (char *) &fb[pos1]; for (int i = 0; i <= y2 - y1; i++) { @@ -267,13 +277,15 @@ void vesa_draw_rectangle(int x1, int y1, int x2, int y2, const uint32_t color[3] } } -void vesa_clear() { +void vesa_clear() +{ vesa_draw_rectangle(0, 0, vbe_width - 1, vbe_height - 1, terminal_background); terminal_x = 0; terminal_y = 0; } -void vesa_draw_char(char ch) { +void vesa_draw_char(char ch) +{ if (ch >= ' ') { int pos = terminal_x * vbe_bpl + terminal_y * vbe_pitch; char *draw = (char *) &fb[pos]; @@ -311,7 +323,8 @@ void vesa_draw_char(char ch) { } } -void vesa_keyboard_char(char ch) { +void vesa_keyboard_char(char ch) +{ vesa_draw_rectangle(terminal_x, terminal_y, terminal_x + font_width, terminal_y + font_height, terminal_background); @@ -338,7 +351,8 @@ void vesa_keyboard_char(char ch) { terminal_color); } -void vesa_draw_string(const char *data) { +void vesa_draw_string(const char *data) +{ int i = 0; while (data[i] != '\0') { vesa_draw_char(data[i]); @@ -346,14 +360,16 @@ void vesa_draw_string(const char *data) { } } -void vesa_draw_number(int n) { +void vesa_draw_number(int n) +{ vesa_draw_string(itoa(n)); } char *prev = 0; int prev_coords[2] = {}; -void vesa_draw_cursor(int x, int y) { +void vesa_draw_cursor(int x, int y) +{ // Reset previous area if (prev != 0) { char *reset = (char *) &fb[prev_coords[0] * vbe_bpl + prev_coords[1] * vbe_pitch]; @@ -394,7 +410,8 @@ void vesa_draw_cursor(int x, int y) { } } -void vesa_set_color(uint32_t color) { +void vesa_set_color(uint32_t color) +{ vesa_convert_color(terminal_color, color); vesa_convert_color(terminal_background, default_background_color); } diff --git a/src/kernel/input/ps2/keyboard.c b/src/kernel/input/ps2/keyboard.c index 2a093e5..24802bd 100644 --- a/src/kernel/input/ps2/keyboard.c +++ b/src/kernel/input/ps2/keyboard.c @@ -64,12 +64,13 @@ char shift_keymap[128] = { 0, // Other keys }; -void keyboard_handler(struct regs *r) { +void keyboard_handler(struct regs *r) +{ unsigned char scan_code; char *current_keymap = keymap; if (shift_pressed) current_keymap = shift_keymap; - scan_code = receive_b(0x60); + scan_code = inb(0x60); if ((scan_code & 0x80) == 0) { // PRESS // TODO: Fix caps lock deactivation when pressing shift while shifted @@ -87,18 +88,21 @@ void keyboard_handler(struct regs *r) { } } -void keyboard_acknowledge() { - while (receive_b(0x60) != 0xfa); +void keyboard_acknowledge() +{ + while (inb(0x60) != 0xfa); } -void keyboard_rate() { - send_b(0x60, 0xF3); +void keyboard_rate() +{ + outb(0x60, 0xF3); keyboard_acknowledge(); - send_b(0x60, 0x0); // Rate{00000} Delay{00} 0 + outb(0x60, 0x0); // Rate{00000} Delay{00} 0 } // Installs the keyboard handler into IRQ1 -void keyboard_install() { +void keyboard_install() +{ keyboard_rate(); irq_install_handler(1, keyboard_handler); shift_pressed = 0; diff --git a/src/kernel/input/ps2/mouse.c b/src/kernel/input/ps2/mouse.c index 016b8b0..97ae256 100644 --- a/src/kernel/input/ps2/mouse.c +++ b/src/kernel/input/ps2/mouse.c @@ -10,19 +10,20 @@ int mouse_but_1 = 0; int mouse_but_2 = 0; int mouse_but_3 = 0; -void mouse_handler(struct regs *a_r) { +void mouse_handler(struct regs *a_r) +{ switch (mouse_cycle) { case 0: - mouse_byte[0] = receive_b(0x60); + mouse_byte[0] = inb(0x60); if (((mouse_byte[0] >> 3) & 1) == 1) mouse_cycle++; else mouse_cycle = 0; break; case 1: - mouse_byte[1] = receive_b(0x60); + mouse_byte[1] = inb(0x60); mouse_cycle++; break; case 2: - mouse_byte[2] = receive_b(0x60); + mouse_byte[2] = inb(0x60); mouse_x += mouse_byte[1]; mouse_y -= mouse_byte[2]; mouse_but_1 = mouse_byte[0] & 1; @@ -41,49 +42,53 @@ void mouse_handler(struct regs *a_r) { } } -void mouse_wait(unsigned char a_type) { +void mouse_wait(unsigned char a_type) +{ unsigned int time_out = 100000; if (a_type == 0) { while (time_out--) - if ((receive_b(0x64) & 1) == 1) + if ((inb(0x64) & 1) == 1) return; return; } else { while (time_out--) - if ((receive_b(0x64) & 2) == 0) + if ((inb(0x64) & 2) == 0) return; return; } } -void mouse_write(unsigned char a_write) { +void mouse_write(unsigned char a_write) +{ mouse_wait(1); - send_b(0x64, 0xD4); + outb(0x64, 0xD4); mouse_wait(1); - send_b(0x60, a_write); + outb(0x60, a_write); } -char mouse_read() { +char mouse_read() +{ mouse_wait(0); - return receive_b(0x60); + return inb(0x60); } -void mouse_install() { +void mouse_install() +{ unsigned char status; // Enable auxiliary mouse device mouse_wait(1); - send_b(0x64, 0xA8); + outb(0x64, 0xA8); // Enable interrupts mouse_wait(1); - send_b(0x64, 0x20); + outb(0x64, 0x20); mouse_wait(0); - status = (receive_b(0x60) | 2); + status = (inb(0x60) | 2); mouse_wait(1); - send_b(0x64, 0x60); + outb(0x64, 0x60); mouse_wait(1); - send_b(0x60, status); + outb(0x60, status); // Use default settings mouse_write(0xF6); diff --git a/src/kernel/interrupts/idt.c b/src/kernel/interrupts/idt.c index 5f92294..b06a52a 100644 --- a/src/kernel/interrupts/idt.c +++ b/src/kernel/interrupts/idt.c @@ -21,7 +21,8 @@ struct idt_ptr idtp; // Defined in idt.asm extern void idt_load(); -void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, unsigned char flags) { +void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, unsigned char flags) +{ // Specify the interrupt routine's base address idt[num].base_lo = (base & 0xFFFF); idt[num].base_hi = (base >> 16) & 0xFFFF; @@ -33,7 +34,8 @@ void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, uns } // Install IDT -void idt_install() { +void idt_install() +{ // Set IDT pointer and limit idtp.limit = (sizeof(struct idt_entry) * 256) - 1; idtp.base = &idt; @@ -42,5 +44,5 @@ void idt_install() { memset(&idt, 0, sizeof(struct idt_entry) * 256); idt_load(); - vga_log("Installed Interrupt Descriptor Table", 6); + vga_log("Installed Interrupt Descriptor Table", 5); } diff --git a/src/kernel/interrupts/irq.c b/src/kernel/interrupts/irq.c index 979b25c..a0a396d 100644 --- a/src/kernel/interrupts/irq.c +++ b/src/kernel/interrupts/irq.c @@ -41,35 +41,40 @@ void *irq_routines[16] = { }; // Install custom IRQ handler -void irq_install_handler(int irq, void (*handler)(struct regs *r)) { +void irq_install_handler(int irq, void (*handler)(struct regs *r)) +{ irq_routines[irq] = handler; } // Removes the custom IRQ handler -void irq_uninstall_handler(int irq) { +void irq_uninstall_handler(int irq) +{ irq_routines[irq] = 0; } -int irq_is_installed(int irq) { +int irq_is_installed(int irq) +{ return irq_routines[irq] != 0; } // Remap IRQs for protected mode compatibility via the PIC -void irq_remap(void) { - send_b(0x20, 0x11); - send_b(0xA0, 0x11); - send_b(0x21, 0x20); - send_b(0xA1, 0x28); - send_b(0x21, 0x04); - send_b(0xA1, 0x02); - send_b(0x21, 0x01); - send_b(0xA1, 0x01); - send_b(0x21, 0x0); - send_b(0xA1, 0x0); +void irq_remap(void) +{ + outb(0x20, 0x11); + outb(0xA0, 0x11); + outb(0x21, 0x20); + outb(0xA1, 0x28); + outb(0x21, 0x04); + outb(0xA1, 0x02); + outb(0x21, 0x01); + outb(0xA1, 0x01); + outb(0x21, 0x0); + outb(0xA1, 0x0); } // Map ISRs to the correct entries in the IDT -void irq_install() { +void irq_install() +{ irq_remap(); idt_set_gate(32, (unsigned) irq0, 0x08, 0x8E); idt_set_gate(33, (unsigned) irq1, 0x08, 0x8E); @@ -87,11 +92,12 @@ void irq_install() { idt_set_gate(45, (unsigned) irq13, 0x08, 0x8E); idt_set_gate(46, (unsigned) irq14, 0x08, 0x8E); idt_set_gate(47, (unsigned) irq15, 0x08, 0x8E); - vga_log("Installed Interrupt Requests", 8); + vga_log("Installed Interrupt Requests", 7); } // Handle IRQ ISRs -void irq_handler(struct regs *r) { +void irq_handler(struct regs *r) +{ void (*handler)(struct regs *r); // Execute custom handler if exists @@ -102,9 +108,9 @@ void irq_handler(struct regs *r) { // Send end of interrupt to second (slave) IRQ controller if (r->int_no >= 40) { - send_b(0xA0, 0x20); + outb(0xA0, 0x20); } // Send end of interrupt to master interrupt controller - send_b(0x20, 0x20); + outb(0x20, 0x20); } diff --git a/src/kernel/interrupts/isr.c b/src/kernel/interrupts/isr.c index 28f67ae..d511dda 100644 --- a/src/kernel/interrupts/isr.c +++ b/src/kernel/interrupts/isr.c @@ -73,7 +73,8 @@ extern void isr31(); uint32_t ignored_isr[8] = {0}; // Install ISRs in IDT -void isrs_install() { +void isrs_install() +{ idt_set_gate(0, (unsigned) isr0, 0x08, 0x8E); idt_set_gate(1, (unsigned) isr1, 0x08, 0x8E); idt_set_gate(2, (unsigned) isr2, 0x08, 0x8E); @@ -110,7 +111,7 @@ void isrs_install() { idt_set_gate(30, (unsigned) isr30, 0x08, 0x8E); idt_set_gate(31, (unsigned) isr31, 0x08, 0x8E); - vga_log("Installed Interrupt Service Routines", 7); + vga_log("Installed Interrupt Service Routines", 6); } // Error exception messages @@ -153,10 +154,11 @@ const char *exception_messages[] = { }; // Master exception/interrupt/fault handler - halt via panic -void fault_handler(struct regs *r) { +void fault_handler(struct regs *r) +{ if (r->int_no < 32 && !(ignored_isr[r->int_no / 32] & (1 << (r->int_no % 32)))) { uint32_t faulting_address; - asm volatile("mov %%cr2, %0" : "=r" (faulting_address)); + asm ("mov %%cr2, %0" : "=r" (faulting_address)); serial_write("\n[DEBUG]\nEIP: "); serial_write_hex(r->eip); @@ -174,14 +176,22 @@ void fault_handler(struct regs *r) { serial_write_hex(r->eflags); serial_write("\nError code: "); serial_write_hex(r->err_code); + serial_write("\nInterrupt code: "); + serial_write_hex(r->int_no); + halt_loop(); // Idk loop? char *message = (char *) exception_messages[r->int_no]; strcat(message, " Exception"); - if (r->err_code == 2) halt_loop(); // Idk loop? panic(message); } } -void isr_ignore(uint8_t int_no) { ignored_isr[int_no / 32] |= 1 << (int_no % 32); } +void isr_ignore(uint8_t int_no) +{ + ignored_isr[int_no / 32] |= 1 << (int_no % 32); +} -void isr_remember(uint8_t int_no) { ignored_isr[int_no / 32] &= ~(1 << (int_no % 32)); } +void isr_remember(uint8_t int_no) +{ + ignored_isr[int_no / 32] &= ~(1 << (int_no % 32)); +} diff --git a/src/kernel/io/io.c b/src/kernel/io/io.c index 3abbb18..c5ae657 100644 --- a/src/kernel/io/io.c +++ b/src/kernel/io/io.c @@ -5,64 +5,74 @@ #include <mlibc/string.h> #include <mlibc/stdlib.h> -uint8_t receive_b(uint16_t port) { +uint8_t inb(uint16_t port) +{ uint8_t value; - asm volatile ("inb %1, %0" : "=a"(value) : "Nd"(port)); + asm ("inb %1, %0" : "=a"(value) : "Nd"(port)); return value; } -uint16_t receive_w(uint16_t port) { +uint16_t inw(uint16_t port) +{ uint16_t value; - asm volatile("inw %1, %0" : "=a"(value) : "Nd"(port)); + asm ("inw %1, %0" : "=a"(value) : "Nd"(port)); return value; } -uint32_t receive_l(uint16_t port) { +uint32_t inl(uint16_t port) +{ uint32_t value; - asm volatile ("inb %1, %0" : "=a"(value) : "Nd"(port)); + asm ("inl %1, %0" : "=a"(value) : "Nd"(port)); return value; } -void send_b(uint16_t port, uint8_t data) { - asm volatile ("outb %0, %1"::"a" (data), "Nd"(port)); +void outb(uint16_t port, uint8_t data) +{ + asm ("outb %0, %1"::"a" (data), "Nd"(port)); } -void send_w(uint16_t port, uint16_t data) { - asm volatile ("outw %0, %1"::"a" (data), "Nd"(port)); +void outw(uint16_t port, uint16_t data) +{ + asm ("outw %0, %1"::"a" (data), "Nd"(port)); } -void send_l(uint16_t port, uint32_t data) { - asm volatile ("outl %0, %1"::"a" (data), "Nd"(port)); +void outl(uint16_t port, uint32_t data) +{ + asm ("outl %0, %1"::"a" (data), "Nd"(port)); } -void init_serial() { - send_b(0x3f8 + 1, 0x00); - send_b(0x3f8 + 3, 0x80); - send_b(0x3f8 + 0, 0x03); - send_b(0x3f8 + 1, 0x00); - send_b(0x3f8 + 3, 0x03); - send_b(0x3f8 + 2, 0xC7); - send_b(0x3f8 + 4, 0x0B); - serial_write("Installed serial connection!\n"); - vga_log("Installed serial connection", 3); +void init_serial() +{ + outb(0x3f8 + 1, 0x00); + outb(0x3f8 + 3, 0x80); + outb(0x3f8 + 0, 0x03); + outb(0x3f8 + 1, 0x00); + outb(0x3f8 + 3, 0x03); + outb(0x3f8 + 2, 0xC7); + outb(0x3f8 + 4, 0x0B); + vga_log("Installed serial connection", 2); } -int is_transmit_empty() { - return receive_b(0x3f8 + 5) & 0x20; +int is_transmit_empty() +{ + return inb(0x3f8 + 5) & 0x20; } -void serial_put(char ch) { +void serial_put(char ch) +{ while (is_transmit_empty() == 0); - send_b(0x3f8, ch); + outb(0x3f8, ch); } -void serial_write(const char *data) { +void serial_write(const char *data) +{ for (size_t i = 0; i < strlen(data); i++) { serial_put(data[i]); } } -void serial_write_hex(int n) { +void serial_write_hex(int n) +{ int tmp; serial_write("0x"); @@ -89,6 +99,7 @@ void serial_write_hex(int n) { } } -void serial_write_dec(int n) { +void serial_write_dec(int n) +{ serial_write(itoa(n)); } diff --git a/src/kernel/io/io.h b/src/kernel/io/io.h index 3c618d6..0ad5a54 100644 --- a/src/kernel/io/io.h +++ b/src/kernel/io/io.h @@ -8,42 +8,42 @@ * @param port The hardware port * @return The hardware response */ -uint8_t receive_b(uint16_t port); +uint8_t inb(uint16_t port); /** * Receive from specified hardware port * @param port The hardware port * @return The hardware response */ -uint16_t receive_w(uint16_t port); +uint16_t inw(uint16_t port); /** * Receive from specified hardware port * @param port The hardware port * @return The hardware response */ -uint32_t receive_l(uint16_t port); +uint32_t inl(uint16_t port); /** * Send data to the specified hardware port * @param port The hardware port * @param data The data that should be sent */ -void send_b(uint16_t port, uint8_t data); +void outb(uint16_t port, uint8_t data); /** * Send data to the specified hardware port * @param port The hardware port * @param data The data that should be sent */ -void send_w(uint16_t port, uint16_t data); +void outw(uint16_t port, uint16_t data); /** * Send data to the specified hardware port * @param port The hardware port * @param data The data that should be sent */ -void send_l(uint16_t port, uint32_t data); +void outl(uint16_t port, uint32_t data); /** * Initialize the serial conenction diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 20a7199..b717218 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -13,7 +13,8 @@ extern void switch_to_user(); -void kernel_main() { +void kernel_main() +{ vga_log("Installing basic features of Melvix...", 0); // Install features memory_init(); @@ -27,11 +28,11 @@ void kernel_main() { set_optimal_resolution(); // Install drivers - asm volatile ("cli"); + asm ("cli"); mouse_install(); keyboard_install(); timer_install(); - asm volatile ("sti"); + asm ("sti"); // Get hardware information get_smbios(); @@ -44,14 +45,6 @@ void kernel_main() { install_melvix(); } - // Setup initial ramdisk - /*assert(mboot_ptr->mods_count > 0); - uint32_t initrd_location = *((uint32_t *) mboot_ptr->mods_addr); - uint32_t initrd_end = *(uint32_t *) (mboot_ptr->mods_addr + 4); - paging_set_used(0, (initrd_end >> 12) + 1); - fs_root = initialise_initrd(initrd_location); - initrd_test();*/ - // User mode! /* COMMENTED FOR DEVELOPMENT OF KERNEL info("Switching to user mode..."); @@ -61,8 +54,8 @@ void kernel_main() { panic("This should NOT happen!"); */ - // asm volatile ("div %0" :: "r"(0)); // Exception testing x/0 + // asm ("div %0" :: "r"(0)); // Exception testing x/0 loop: - asm volatile ("hlt"); + asm ("hlt"); goto loop; } diff --git a/src/kernel/lib/memory.c b/src/kernel/lib/memory.c index a80309e..c1c6ee1 100644 --- a/src/kernel/lib/memory.c +++ b/src/kernel/lib/memory.c @@ -2,20 +2,23 @@ #include <stdint.h> #include <kernel/paging/paging.h> -void *memcpy(void *dest, const void *src, size_t count) { +void *memcpy(void *dest, const void *src, size_t count) +{ const char *sp = (const char *) src; char *dp = (char *) dest; for (; count != 0; count--) *dp++ = *sp++; return dest; } -void *memset(void *dest, char val, size_t count) { +void *memset(void *dest, char val, size_t count) +{ char *temp = (char *) dest; for (; count != 0; count--) *temp++ = val; return dest; } -int memcmp(const void *a_ptr, const void *b_ptr, size_t size) { +int memcmp(const void *a_ptr, const void *b_ptr, size_t size) +{ const unsigned char *a = (const unsigned char *) a_ptr; const unsigned char *b = (const unsigned char *) b_ptr; for (size_t i = 0; i < size; i++) { @@ -35,25 +38,31 @@ struct memory_entry { uint32_t type; } __attribute__((packed)); -struct memory_entry *memory_get_entries() { +struct memory_entry *memory_get_entries() +{ return (struct memory_entry *) 0xA000; } -void memory_init() { - uint64_t maxbase = 0; - uint64_t maxlength = 0; +void memory_init() +{ + uint64_t max_base = 0; + uint64_t max_length = 0; for (struct memory_entry *i = memory_get_entries(); i->type; i++) { - if (i->type == 1 && i->base > maxbase) { - maxbase = i->base; - maxlength = i->length; + if (i->type == 1 && i->base > max_base) { + max_base = i->base; + max_length = i->length; } } - total_memory = maxbase + maxlength; + total_memory = max_base + max_length; total_memory /= 1024; } -uint32_t memory_get_free() { +uint32_t memory_get_free() +{ return total_memory - paging_get_used_pages() * 4; } -uint32_t memory_get_all() { return total_memory; }
\ No newline at end of file +uint32_t memory_get_all() +{ + return total_memory; +}
\ No newline at end of file diff --git a/src/kernel/paging/paging.c b/src/kernel/paging/paging.c index 09cbbc0..4c8cb44 100644 --- a/src/kernel/paging/paging.c +++ b/src/kernel/paging/paging.c @@ -8,7 +8,8 @@ int paging_enabled = 0; uint32_t page_directory[1024] __attribute__((aligned(4096))); uint32_t page_tables[1024][1024] __attribute__((aligned(4096))); -void paging_install() { +void paging_install() +{ for (uint32_t i = 0; i < 1024; i++) { for (uint32_t j = 0; j < 1024; j++) { page_tables[i][j] = ((j * 0x1000) + (i * 0x400000)) | PT_RW; @@ -24,50 +25,58 @@ void paging_install() { paging_enable(); serial_write_dec(memory_get_all() >> 10); - vga_log("Installed paging", 5); + + vga_log("Installed paging", 4); } -void paging_disable() { +void paging_disable() +{ uint32_t cr0; - asm volatile("mov %%cr0, %0": "=r"(cr0)); + asm ("mov %%cr0, %0": "=r"(cr0)); cr0 &= 0x7fffffff; - asm volatile("mov %0, %%cr0"::"r"(cr0)); + asm ("mov %0, %%cr0"::"r"(cr0)); paging_enabled = 0; } -void paging_enable() { - asm volatile("mov %0, %%cr3"::"r"(page_directory)); +void paging_enable() +{ + asm ("mov %0, %%cr3"::"r"(page_directory)); uint32_t cr0; - asm volatile("mov %%cr0, %0": "=r"(cr0)); + asm ("mov %%cr0, %0": "=r"(cr0)); cr0 |= 0x80000000; - asm volatile("mov %0, %%cr0"::"r"(cr0)); + asm ("mov %0, %%cr0"::"r"(cr0)); paging_enabled = 1; } -inline void invlpg(uint32_t addr) { - asm volatile("invlpg (%0)"::"r" (addr) : "memory"); +inline void invlpg(uint32_t addr) +{ + asm ("invlpg (%0)"::"r" (addr) : "memory"); } -void paging_map(uint32_t phy, uint32_t virt, uint16_t flags) { +void paging_map(uint32_t phy, uint32_t virt, uint16_t flags) +{ uint32_t pdi = virt >> 22; uint32_t pti = virt >> 12 & 0x03FF; page_tables[pdi][pti] = phy | flags; invlpg(virt); } -uint32_t paging_get_physical_addr(uint32_t virt) { +uint32_t paging_get_physical_addr(uint32_t virt) +{ uint32_t pdi = virt >> 22; uint32_t pti = (virt >> 12) & 0x03FF; return page_tables[pdi][pti] & 0xFFFFF000; } -uint16_t paging_get_flags(uint32_t virt) { +uint16_t paging_get_flags(uint32_t virt) +{ uint32_t pdi = virt >> 22; uint32_t pti = (virt >> 12) & 0x03FF; return page_tables[pdi][pti] & 0xFFF; } -void paging_set_flag_up(uint32_t virt, uint32_t count, uint32_t flag) { +void paging_set_flag_up(uint32_t virt, uint32_t count, uint32_t flag) +{ uint32_t page_n = virt / 4096; for (uint32_t i = page_n; i < page_n + count; i++) { page_tables[i / 1024][i % 1024] |= flag; @@ -75,7 +84,8 @@ void paging_set_flag_up(uint32_t virt, uint32_t count, uint32_t flag) { } } -void paging_set_flag_down(uint32_t virt, uint32_t count, uint32_t flag) { +void paging_set_flag_down(uint32_t virt, uint32_t count, uint32_t flag) +{ uint32_t page_n = virt / 4096; for (uint32_t i = page_n; i < page_n + count; i++) { page_tables[i / 1024][i % 1024] &= ~flag; @@ -83,23 +93,28 @@ void paging_set_flag_down(uint32_t virt, uint32_t count, uint32_t flag) { } } -void paging_set_present(uint32_t virt, uint32_t count) { +void paging_set_present(uint32_t virt, uint32_t count) +{ paging_set_flag_up(virt, count, PT_PRESENT); } -void paging_set_absent(uint32_t virt, uint32_t count) { +void paging_set_absent(uint32_t virt, uint32_t count) +{ paging_set_flag_down(virt, count, PT_PRESENT); } -void paging_set_used(uint32_t virt, uint32_t count) { +void paging_set_used(uint32_t virt, uint32_t count) +{ paging_set_flag_up(virt, count, PT_USED); } -void paging_set_free(uint32_t virt, uint32_t count) { +void paging_set_free(uint32_t virt, uint32_t count) +{ paging_set_flag_down(virt, count, PT_USED); } -void paging_set_user(uint32_t virt, uint32_t count) { +void paging_set_user(uint32_t virt, uint32_t count) +{ uint32_t page_n = virt / 4096; for (uint32_t i = page_n; i < page_n + count; i += 1024) { page_directory[i / 1024] |= PD_ALL_PRIV; @@ -107,7 +122,8 @@ void paging_set_user(uint32_t virt, uint32_t count) { paging_set_flag_up(virt, count, PT_ALL_PRIV); } -uint32_t paging_find_pages(uint32_t count) { +uint32_t paging_find_pages(uint32_t count) +{ uint32_t continous = 0; uint32_t startDir = 0; uint32_t startPage = 0; @@ -128,13 +144,15 @@ uint32_t paging_find_pages(uint32_t count) { return 0; } -uint32_t paging_alloc_pages(uint32_t count) { +uint32_t paging_alloc_pages(uint32_t count) +{ uint32_t ptr = paging_find_pages(count); paging_set_used(ptr, count); return ptr; } -uint32_t paging_get_used_pages() { +uint32_t paging_get_used_pages() +{ uint32_t n = 0; for (uint32_t i = 0; i < 1024; i++) { for (uint32_t j = 0; j < 1024; j++) { diff --git a/src/kernel/smbios/smbios.c b/src/kernel/smbios/smbios.c index 0275f48..95ea70c 100644 --- a/src/kernel/smbios/smbios.c +++ b/src/kernel/smbios/smbios.c @@ -4,33 +4,18 @@ #include <kernel/io/io.h> #include <kernel/smbios/smbios.h> -struct smbios_entry { - int8_t signature[4]; - uint8_t checksum; - uint8_t length; - uint8_t major_version; - uint8_t minor_version; - uint8_t max_structure_size; - int8_t entry_point_revision; - int8_t formatted_area[5]; - int8_t entry_point_signature[5]; - uint8_t checksum2; - uint16_t table_length; - uint32_t table_address; - uint16_t number_of_structures; - uint8_t bcd_revision; -}; - struct smbios_entry *smbios = 0; -size_t smbios_table_len(struct smbios_header *header) { +size_t smbios_table_len(struct smbios_header *header) +{ size_t i; const char *strtab = (char *) header + header->length; for (i = 1; strtab[i - 1] != '\0' || strtab[i] != '\0'; i++); return header->length + i + 1; } -struct smbios_entry *get_smbios() { +struct smbios_entry *get_smbios() +{ if (smbios != 0) return smbios; char *mem = (char *) 0xF0000; @@ -59,7 +44,8 @@ struct smbios_entry *get_smbios() { return smbios; } -void smbios_table(struct smbios_header *header) { +void smbios_table(struct smbios_header *header) +{ serial_write("\n\n"); struct smbios_0 *table = (struct smbios_0 *) (header + sizeof(struct smbios_header)); serial_write(table->bios_version); diff --git a/src/kernel/smbios/smbios.h b/src/kernel/smbios/smbios.h index 384119c..4814a17 100644 --- a/src/kernel/smbios/smbios.h +++ b/src/kernel/smbios/smbios.h @@ -7,6 +7,23 @@ struct smbios_header { uint16_t handle; }; +struct smbios_entry { + int8_t signature[4]; + uint8_t checksum; + uint8_t length; + uint8_t major_version; + uint8_t minor_version; + uint8_t max_structure_size; + int8_t entry_point_revision; + int8_t formatted_area[5]; + int8_t entry_point_signature[5]; + uint8_t checksum2; + uint16_t table_length; + uint32_t table_address; + uint16_t number_of_structures; + uint8_t bcd_revision; +}; + struct smbios_0 { char *vendor; char *bios_version; diff --git a/src/kernel/sound/frequency.c b/src/kernel/sound/frequency.c index 2a88446..5ad76b3 100644 --- a/src/kernel/sound/frequency.c +++ b/src/kernel/sound/frequency.c @@ -2,29 +2,32 @@ #include <kernel/io/io.h> #include <kernel/timer/timer.h> -void play_sound(uint32_t frequency) { +void play_sound(uint32_t frequency) +{ uint32_t divided; uint8_t tmp; divided = 1193180 / frequency; - send_b(0x43, 0xb6); - send_b(0x42, (uint8_t) (divided)); - send_b(0x42, (uint8_t) (divided >> 8)); + outb(0x43, 0xb6); + outb(0x42, (uint8_t) (divided)); + outb(0x42, (uint8_t) (divided >> 8)); - tmp = receive_b(0x61); + tmp = inb(0x61); if (tmp != (tmp | 3)) { - send_b(0x61, tmp | 3); + outb(0x61, tmp | 3); } } -static void shut_up() { - uint8_t tmp = receive_b(0x61) & 0xFC; +static void shut_up() +{ + uint8_t tmp = inb(0x61) & 0xFC; - send_b(0x61, tmp); + outb(0x61, tmp); } // Make a beep -void beep(uint32_t frequency, uint32_t ticks) { +void beep(uint32_t frequency, uint32_t ticks) +{ play_sound(frequency); timer_wait(ticks); shut_up(); diff --git a/src/kernel/syscall/syscall.c b/src/kernel/syscall/syscall.c index dec3e8e..1a8de52 100644 --- a/src/kernel/syscall/syscall.c +++ b/src/kernel/syscall/syscall.c @@ -17,7 +17,8 @@ static void *syscalls[3] = { }; uint32_t num_syscalls = 3; -void syscall_handler(struct regs *r) { +void syscall_handler(struct regs *r) +{ serial_write("SYSCALL"); if (r->eax >= num_syscalls) return; @@ -25,7 +26,7 @@ void syscall_handler(struct regs *r) { void *location = syscalls[r->eax]; int ret; - asm volatile (" \ + asm (" \ push %1; \ push %2; \ push %3; \ @@ -41,6 +42,7 @@ void syscall_handler(struct regs *r) { r->eax = ret; } -void syscalls_install() { +void syscalls_install() +{ irq_install_handler(0x80, syscall_handler); } diff --git a/src/kernel/system.c b/src/kernel/system.c index 560f6a5..2c9a6d2 100644 --- a/src/kernel/system.c +++ b/src/kernel/system.c @@ -8,14 +8,16 @@ char *vga_buffer = (char *) 0x500; -void vga_clear() { +void vga_clear() +{ uint16_t *terminal_buffer = (uint16_t *) 0xB8000; for (size_t y = 0; y < 25; y++) for (size_t x = 0; x < 80; x++) terminal_buffer[y * 80 + x] = 0 | (uint16_t) 0x700; } -void vga_log(char *msg, int line) { +void vga_log(char *msg, int line) +{ if (line == 0) vga_clear(); uint16_t *terminal_buffer = (uint16_t *) 0xB8000; for (size_t i = 0; i < strlen(msg); i++) @@ -30,21 +32,24 @@ void vga_log(char *msg, int line) { strcat(vga_buffer, string); } -void kernel_time() { +void kernel_time() +{ vesa_draw_string("\n"); vesa_draw_string("["); vesa_draw_number((int) get_time()); vesa_draw_string("] "); } -void log(char *msg) { +void log(char *msg) +{ vesa_set_color(vesa_dark_white); kernel_time(); vesa_draw_string(msg); vesa_set_color(default_text_color); } -void info(char *msg) { +void info(char *msg) +{ vesa_set_color(vesa_blue); kernel_time(); vesa_draw_string("INFORMATION: "); @@ -52,7 +57,8 @@ void info(char *msg) { vesa_set_color(default_text_color); } -void warn(char *msg) { +void warn(char *msg) +{ vesa_set_color(vesa_dark_yellow); kernel_time(); vesa_draw_string("WARNING: "); @@ -60,8 +66,9 @@ void warn(char *msg) { vesa_set_color(default_text_color); } -void panic(char *msg) { - asm volatile ("cli"); +void panic(char *msg) +{ + asm ("cli"); vesa_set_color(vesa_dark_red); kernel_time(); serial_write("\nPANIC: "); @@ -73,20 +80,23 @@ void panic(char *msg) { halt_loop(); } -void assert(int x) { +void assert(int x) +{ if (x == 0) { panic("Assertion failed"); } } -void halt_loop() { +void halt_loop() +{ serial_write("\n!!! HALT !!!\n"); loop: - asm volatile ("hlt"); + asm ("hlt"); goto loop; } -void v86(uint8_t code, regs16_t *regs) { +void v86(uint8_t code, regs16_t *regs) +{ paging_disable(); int32(code, regs); paging_enable(); diff --git a/src/kernel/timer/timer.c b/src/kernel/timer/timer.c index 0e10c07..defb95d 100644 --- a/src/kernel/timer/timer.c +++ b/src/kernel/timer/timer.c @@ -4,35 +4,39 @@ unsigned long timer_ticks = 0; -void timer_phase(int hz) { +void timer_phase(int hz) +{ int divisor = (int) (3579545.0 / 3.0 / (double) hz); - send_b(0x43, 0x36); // 01 10 11 0b // CTR, RW, MODE, BCD - send_b(0x40, divisor & 0xFF); - send_b(0x40, divisor >> 8); + outb(0x43, 0x36); // 01 10 11 0b // CTR, RW, MODE, BCD + outb(0x40, divisor & 0xFF); + outb(0x40, divisor >> 8); } // Executed 1000 times per second -void timer_handler(struct regs *r) { +void timer_handler(struct regs *r) +{ timer_ticks++; } // "Delay" function with CPU sleep -void timer_wait(int ticks) { +void timer_wait(int ticks) +{ unsigned int eticks; eticks = timer_ticks + ticks; while (timer_ticks < eticks) { - asm volatile ("sti//hlt//cli"); + asm ("sti//hlt//cli"); } } -unsigned int get_time() { +unsigned int get_time() +{ return timer_ticks; } // Install timer handler into IRQ0 -void timer_install() { +void timer_install() +{ timer_phase(1000); irq_install_handler(0, timer_handler); - vga_log("Installed timer", 1); }
\ No newline at end of file diff --git a/src/mlibc/math/pow.c b/src/mlibc/math/pow.c index 4f040bb..24670a0 100644 --- a/src/mlibc/math/pow.c +++ b/src/mlibc/math/pow.c @@ -1,4 +1,5 @@ -int pow(int base, int exp) { +int pow(int base, int exp) +{ if (exp < 0) return 0; if (!exp) return 1; diff --git a/src/mlibc/stdio/printf.c b/src/mlibc/stdio/printf.c index 11516cf..23d8e6e 100644 --- a/src/mlibc/stdio/printf.c +++ b/src/mlibc/stdio/printf.c @@ -4,11 +4,13 @@ #include <mlibc/string.h> #include <mlibc/stdlib.h> -void __writes(const char *data) { +void __writes(const char *data) +{ for (size_t i = 0; i < strlen(data); i++) writec(data[i]); } -void printf(const char *fmt, ...) { +void printf(const char *fmt, ...) +{ va_list args; va_start(args, fmt); diff --git a/src/mlibc/stdio/writec.c b/src/mlibc/stdio/writec.c index 60f69e8..94d4fed 100644 --- a/src/mlibc/stdio/writec.c +++ b/src/mlibc/stdio/writec.c @@ -1,5 +1,6 @@ #include <kernel/graphics/vesa.h> -void writec(char c) { +void writec(char c) +{ vesa_draw_char(c); }
\ No newline at end of file diff --git a/src/mlibc/stdlib.h b/src/mlibc/stdlib.h index 7ae9c5a..36a3b5f 100644 --- a/src/mlibc/stdlib.h +++ b/src/mlibc/stdlib.h @@ -4,11 +4,15 @@ #include <stdint.h> #ifndef MELVIX_ALLOC_H + #include <mlibc/stdlib/liballoc.h> + #endif #ifndef MELVIX_STRING_H + #include <mlibc/string.h> + #endif char *itoa(int n); diff --git a/src/mlibc/stdlib/atoi.c b/src/mlibc/stdlib/atoi.c index 34f9991..0643372 100644 --- a/src/mlibc/stdlib/atoi.c +++ b/src/mlibc/stdlib/atoi.c @@ -3,7 +3,8 @@ #include <stdint.h> #include <mlibc/string.h> -int atoi(char *str) { +int atoi(char *str) +{ size_t s_str = strlen(str); if (!s_str) return 0; diff --git a/src/mlibc/stdlib/htoa.c b/src/mlibc/stdlib/htoa.c index 5290c74..ab20260 100644 --- a/src/mlibc/stdlib/htoa.c +++ b/src/mlibc/stdlib/htoa.c @@ -4,7 +4,8 @@ static const char __HTOA_TABLE[] = "0123456789ABCDEF"; -char *htoa(uint32_t n) { +char *htoa(uint32_t n) +{ char *ret = kmalloc(10); int i = 0; diff --git a/src/mlibc/stdlib/htoi.c b/src/mlibc/stdlib/htoi.c index 73a583b..c78fe9d 100644 --- a/src/mlibc/stdlib/htoi.c +++ b/src/mlibc/stdlib/htoi.c @@ -2,7 +2,8 @@ #include <stddef.h> #include <mlibc/string.h> -int htoi(char *str) { +int htoi(char *str) +{ size_t s_str = strlen(str); size_t i = 0; diff --git a/src/mlibc/stdlib/itoa.c b/src/mlibc/stdlib/itoa.c index 8c557ab..3c8ee05 100644 --- a/src/mlibc/stdlib/itoa.c +++ b/src/mlibc/stdlib/itoa.c @@ -6,7 +6,8 @@ static const char __ITOA_TABLE[] = "0123456789"; -char *itoa(int n) { +char *itoa(int n) +{ if (paging_enabled == 0) return "0"; // kmalloc isn't available diff --git a/src/mlibc/stdlib/liballoc.c b/src/mlibc/stdlib/liballoc.c index f4015f2..3938215 100644 --- a/src/mlibc/stdlib/liballoc.c +++ b/src/mlibc/stdlib/liballoc.c @@ -3,22 +3,26 @@ #include <kernel/paging/paging.h> #include <mlibc/stdlib/liballoc.h> -int liballoc_lock() { - // asm volatile ("cli"); +int liballoc_lock() +{ + // asm ("cli"); return 0; } -int liballoc_unlock() { - // asm volatile ("sti"); +int liballoc_unlock() +{ + // asm ("sti"); return 0; } -void *liballoc_alloc(size_t p) { +void *liballoc_alloc(size_t p) +{ uint32_t ptr = paging_alloc_pages((uint32_t) p); return (void *) ptr; } -int liballoc_free(void *ptr, size_t p) { +int liballoc_free(void *ptr, size_t p) +{ paging_set_free((uint32_t) ptr, (uint32_t) p); return 0; } @@ -52,8 +56,8 @@ int liballoc_free(void *ptr, size_t p) { } \ } -#define LIBALLOC_MAGIC 0xc001c0de -#define LIBALLOC_DEAD 0xdeaddead +#define LIBALLOC_MAGIC 0x900df00d +#define LIBALLOC_DEAD 0xbaadf00d struct liballoc_major { struct liballoc_major *prev; @@ -85,7 +89,8 @@ static long long l_warningCount = 0; static long long l_errorCount = 0; static long long l_possibleOverruns = 0; -static void *liballoc_memset(void *s, int c, size_t n) { +static void *liballoc_memset(void *s, int c, size_t n) +{ unsigned int i; for (i = 0; i < n; i++) ((char *) s)[i] = c; @@ -93,7 +98,8 @@ static void *liballoc_memset(void *s, int c, size_t n) { return s; } -static void *liballoc_memcpy(void *s1, const void *s2, size_t n) { +static void *liballoc_memcpy(void *s1, const void *s2, size_t n) +{ char *cdest; char *csrc; unsigned int *ldest = (unsigned int *) s1; @@ -114,7 +120,8 @@ static void *liballoc_memcpy(void *s1, const void *s2, size_t n) { return s1; } -static struct liballoc_major *allocate_new_page(unsigned int size) { +static struct liballoc_major *allocate_new_page(unsigned int size) +{ unsigned int st; struct liballoc_major *maj; @@ -147,7 +154,8 @@ static struct liballoc_major *allocate_new_page(unsigned int size) { return maj; } -void *PREFIX(malloc)(size_t req_size) { +void *PREFIX(malloc)(size_t req_size) +{ int startedBet = 0; unsigned long long bestSize = 0; void *p = NULL; @@ -334,7 +342,8 @@ void *PREFIX(malloc)(size_t req_size) { return NULL; } -void PREFIX(free)(void *ptr) { +void PREFIX(free)(void *ptr) +{ struct liballoc_minor *min; struct liballoc_major *maj; @@ -386,7 +395,8 @@ void PREFIX(free)(void *ptr) { liballoc_unlock(); } -void *PREFIX(calloc)(size_t nobj, size_t size) { +void *PREFIX(calloc)(size_t nobj, size_t size) +{ int real_size; void *p; @@ -399,7 +409,8 @@ void *PREFIX(calloc)(size_t nobj, size_t size) { return p; } -void *PREFIX(realloc)(void *p, size_t size) { +void *PREFIX(realloc)(void *p, size_t size) +{ void *ptr; struct liballoc_minor *min; unsigned int real_size; diff --git a/src/mlibc/string/strcat.c b/src/mlibc/string/strcat.c index 3cc56f1..0448430 100644 --- a/src/mlibc/string/strcat.c +++ b/src/mlibc/string/strcat.c @@ -1,6 +1,7 @@ #include <mlibc/string.h> -void strcat(char *dest, const char *orig) { +void strcat(char *dest, const char *orig) +{ size_t s_dest = strlen(dest); size_t s_orig = strlen(orig); diff --git a/src/mlibc/string/strcati.c b/src/mlibc/string/strcati.c index d925eb7..8fdcc1a 100644 --- a/src/mlibc/string/strcati.c +++ b/src/mlibc/string/strcati.c @@ -1,6 +1,7 @@ #include <mlibc/string.h> -void strcati(char *dest, const char *orig) { +void strcati(char *dest, const char *orig) +{ size_t s_orig = strlen(orig); strdisp(dest, (int) s_orig); for (size_t i = 0; i < s_orig; i++) dest[i] = orig[i]; diff --git a/src/mlibc/string/strcmp.c b/src/mlibc/string/strcmp.c index cc719da..be6c17a 100644 --- a/src/mlibc/string/strcmp.c +++ b/src/mlibc/string/strcmp.c @@ -1,6 +1,7 @@ #include <mlibc/string.h> -char strcmp(const char *a, const char *b) { +char strcmp(const char *a, const char *b) +{ if (strlen(a) != strlen(b)) return 1; for (size_t i = 0; i < strlen(a); i++) if (a[i] != b[i]) return 1; diff --git a/src/mlibc/string/strcpy.c b/src/mlibc/string/strcpy.c index 5a1ff4e..8dfa65f 100644 --- a/src/mlibc/string/strcpy.c +++ b/src/mlibc/string/strcpy.c @@ -1,6 +1,7 @@ #include <mlibc/string.h> -void strcpy(char *dest, const char *orig) { +void strcpy(char *dest, const char *orig) +{ size_t s_orig = strlen(orig); for (size_t i = 0; i < s_orig; i++) dest[i] = orig[i]; diff --git a/src/mlibc/string/strdisp.c b/src/mlibc/string/strdisp.c index 6feb4ca..d793718 100644 --- a/src/mlibc/string/strdisp.c +++ b/src/mlibc/string/strdisp.c @@ -1,10 +1,12 @@ #include <mlibc/string.h> -void strdisponce(char *str) { +void strdisponce(char *str) +{ for (size_t i = sizeof(str) + 2; i > 0; i--) str[i] = str[i - 1]; str[0] = 0; } -void strdisp(char *str, int n) { +void strdisp(char *str, int n) +{ for (int i = 0; i < n; i++) strdisponce(str); }
\ No newline at end of file diff --git a/src/mlibc/string/strdup.c b/src/mlibc/string/strdup.c index 0cddd79..0aa36f7 100644 --- a/src/mlibc/string/strdup.c +++ b/src/mlibc/string/strdup.c @@ -1,7 +1,8 @@ #include <mlibc/string.h> #include <mlibc/stdlib.h> -char *strdup(const char *orig) { +char *strdup(const char *orig) +{ size_t s_orig = strlen(orig); char *ret = kmalloc(s_orig + 1); strcpy(ret, orig); diff --git a/src/mlibc/string/strinv.c b/src/mlibc/string/strinv.c index c6dd7fd..71f3355 100644 --- a/src/mlibc/string/strinv.c +++ b/src/mlibc/string/strinv.c @@ -1,6 +1,7 @@ #include <mlibc/string.h> -void strinv(char *str) { +void strinv(char *str) +{ size_t s_str = strlen(str); int iterations = (int) s_str / 2; diff --git a/src/mlibc/string/strlen.c b/src/mlibc/string/strlen.c index 1143683..133ee3d 100644 --- a/src/mlibc/string/strlen.c +++ b/src/mlibc/string/strlen.c @@ -1,6 +1,7 @@ #include <mlibc/string.h> -size_t strlen(const char *str) { +size_t strlen(const char *str) +{ size_t len = 0; while (str[len]) len++; return len; diff --git a/src/userspace/main.c b/src/userspace/main.c index 526144e..73e937f 100644 --- a/src/userspace/main.c +++ b/src/userspace/main.c @@ -1,5 +1,6 @@ #include <kernel/syscall/syscall.h> -void test_user() { +void test_user() +{ syscall_serial_write("Hello, user world!\n"); }
\ No newline at end of file |