summaryrefslogtreecommitdiff
path: root/kernel/drivers
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-04-26 16:06:35 +0200
committerAnton Kling <anton@kling.gg>2024-04-26 16:20:59 +0200
commit59e3f74a2e1a0806350e1ffd77a528821d1f2be3 (patch)
treea514572b0b9468f6ae3ba7cd075181c58c2371e7 /kernel/drivers
parent15bc439577c49e97c24a074fe6d9e9464f917054 (diff)
Kernel: More out of memory condition checks
Diffstat (limited to 'kernel/drivers')
-rw-r--r--kernel/drivers/ahci.c8
-rw-r--r--kernel/drivers/ahci.h2
-rw-r--r--kernel/drivers/vbe.c6
-rw-r--r--kernel/drivers/vbe.h2
4 files changed, 13 insertions, 5 deletions
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 <multiboot.h>
-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