mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-07-11 07:19:20 +00:00
Implemented driver support (bad but works)
This commit is contained in:
67
include/driver.hpp
Normal file
67
include/driver.hpp
Normal file
@ -0,0 +1,67 @@
|
||||
#ifndef __FENNIX_KERNEL_DRIVER_H__
|
||||
#define __FENNIX_KERNEL_DRIVER_H__
|
||||
|
||||
#include <types.h>
|
||||
|
||||
#include <interrupts.hpp>
|
||||
#include <vector.hpp>
|
||||
#include <debug.h>
|
||||
#include <cpu.hpp>
|
||||
|
||||
namespace Driver
|
||||
{
|
||||
enum DriverCode
|
||||
{
|
||||
ERROR,
|
||||
OK,
|
||||
INVALID_FEX_HEADER,
|
||||
INVALID_DRIVER_DATA,
|
||||
NOT_DRIVER,
|
||||
DRIVER_RETURNED_ERROR,
|
||||
UNKNOWN_DRIVER_TYPE,
|
||||
PCI_DEVICE_NOT_FOUND
|
||||
};
|
||||
|
||||
class DriverInterruptHook : public Interrupts::Handler
|
||||
{
|
||||
private:
|
||||
void *Handle;
|
||||
void *Data;
|
||||
|
||||
#if defined(__amd64__)
|
||||
void OnInterruptReceived(CPU::x64::TrapFrame *Frame);
|
||||
#elif defined(__i386__)
|
||||
void OnInterruptReceived(void *Frame);
|
||||
#elif defined(__aarch64__)
|
||||
void OnInterruptReceived(void *Frame);
|
||||
#endif
|
||||
|
||||
public:
|
||||
DriverInterruptHook(int Interrupt, void *Address, void *ParamData);
|
||||
~DriverInterruptHook();
|
||||
};
|
||||
|
||||
struct DriverFile
|
||||
{
|
||||
unsigned long DriverUID;
|
||||
void *Address;
|
||||
DriverInterruptHook *InterruptHook;
|
||||
};
|
||||
|
||||
class Driver
|
||||
{
|
||||
private:
|
||||
Vector<DriverFile *> Drivers;
|
||||
unsigned long DriverUIDs = 0;
|
||||
|
||||
DriverCode CallDriverEntryPoint(void *fex);
|
||||
|
||||
public:
|
||||
DriverCode LoadDriver(uint64_t DriverAddress, uint64_t Size);
|
||||
DriverCode StartDrivers();
|
||||
Driver();
|
||||
~Driver();
|
||||
};
|
||||
}
|
||||
|
||||
#endif // !__FENNIX_KERNEL_DRIVER_H__
|
Reference in New Issue
Block a user