From 59e3f74a2e1a0806350e1ffd77a528821d1f2be3 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Fri, 26 Apr 2024 16:06:35 +0200 Subject: Kernel: More out of memory condition checks --- kernel/drivers/ahci.c | 8 ++++++-- kernel/drivers/ahci.h | 2 +- kernel/drivers/vbe.c | 6 +++++- kernel/drivers/vbe.h | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) (limited to 'kernel/drivers') diff --git a/kernel/drivers/ahci.c b/kernel/drivers/ahci.c index f655709..1fad0a3 100644 --- a/kernel/drivers/ahci.c +++ b/kernel/drivers/ahci.c @@ -496,10 +496,10 @@ void add_devfs_drive_file(u8 port) { inode->inode_num = port; } -void ahci_init(void) { +int ahci_init(void) { struct PCI_DEVICE device; if (!pci_devices_by_id(0x01, 0x06, &device)) { - return; + return 0; } kprintf("vendor: %x\n", device.vendor); kprintf("device: %x\n", device.device); @@ -509,6 +509,9 @@ void ahci_init(void) { pci_get_bar(&device, 5, &bar); u8 *HBA_base = mmu_map_frames((void *)bar.address, bar.size); + if (!HBA_base) { + return 0; + } hba = (volatile struct HBA_MEM *)(HBA_base); for (u8 i = 0; i < 32; i++) { if (!((hba->pi >> i) & 1)) { @@ -535,4 +538,5 @@ void ahci_init(void) { break; } } + return 1; } diff --git a/kernel/drivers/ahci.h b/kernel/drivers/ahci.h index d075f07..6ec9a97 100644 --- a/kernel/drivers/ahci.h +++ b/kernel/drivers/ahci.h @@ -1 +1 @@ -void ahci_init(void); +int ahci_init(void); diff --git a/kernel/drivers/vbe.c b/kernel/drivers/vbe.c index 9c6fa4a..e67a3d9 100644 --- a/kernel/drivers/vbe.c +++ b/kernel/drivers/vbe.c @@ -24,7 +24,7 @@ struct DISPLAY_INFO { struct DISPLAY_INFO vbe_info; -void display_driver_init(multiboot_info_t *mbi) { +int display_driver_init(multiboot_info_t *mbi) { assert(CHECK_FLAG(mbi->flags, 12)); framebuffer_width = mbi->framebuffer_width; framebuffer_height = mbi->framebuffer_height; @@ -37,10 +37,14 @@ void display_driver_init(multiboot_info_t *mbi) { framebuffer_physical = mbi->framebuffer_addr; framebuffer = mmu_map_frames((void *)(u32)mbi->framebuffer_addr, framebuffer_size); + if(!framebuffer) { + return 0; + } vbe_info.width = framebuffer_width; vbe_info.height = framebuffer_height; vbe_info.bpp = mbi->framebuffer_bpp; + return 1; } vfs_vm_object_t *vbe_get_vm_object(u64 length, u64 offset, vfs_fd_t *fd) { diff --git a/kernel/drivers/vbe.h b/kernel/drivers/vbe.h index 4df2221..369f384 100644 --- a/kernel/drivers/vbe.h +++ b/kernel/drivers/vbe.h @@ -1,7 +1,7 @@ #ifndef VBE_H #define VBE_H #include -void display_driver_init(multiboot_info_t *mb); +int display_driver_init(multiboot_info_t *mb); void display_driver_cross(multiboot_info_t *mbi); void add_vbe_device(void); #endif // VBE_H -- cgit v1.2.3