1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 18:18:12 +00:00

Kernel: Don't use naked new statements in init process

Instead, try to create the device objects in separate static methods,
and if we fail for some odd reason to allocate memory for such devices,
just panic with that reason.
This commit is contained in:
Liav A 2021-06-18 11:37:26 +03:00 committed by Andreas Kling
parent fba3c77a04
commit 29f9a38f76
11 changed files with 74 additions and 18 deletions

View file

@ -7,9 +7,37 @@
#include <Kernel/Devices/SerialDevice.h>
#include <Kernel/IO.h>
#include <Kernel/Panic.h>
namespace Kernel {
#define SERIAL_COM1_ADDR 0x3F8
#define SERIAL_COM2_ADDR 0x2F8
#define SERIAL_COM3_ADDR 0x3E8
#define SERIAL_COM4_ADDR 0x2E8
UNMAP_AFTER_INIT NonnullRefPtr<SerialDevice> SerialDevice::must_create(size_t com_number)
{
SerialDevice* device = nullptr;
switch (com_number) {
case 0:
device = new SerialDevice(IOAddress(SERIAL_COM1_ADDR), 64);
break;
case 1:
device = new SerialDevice(IOAddress(SERIAL_COM2_ADDR), 65);
break;
case 2:
device = new SerialDevice(IOAddress(SERIAL_COM3_ADDR), 66);
break;
case 3:
device = new SerialDevice(IOAddress(SERIAL_COM4_ADDR), 67);
break;
default:
break;
}
return adopt_ref_if_nonnull(device).release_nonnull();
}
UNMAP_AFTER_INIT SerialDevice::SerialDevice(IOAddress base_addr, unsigned minor)
: CharacterDevice(4, minor)
, m_base_addr(base_addr)