kernel/inc/drivers/driver_manager.h

118 lines
3.4 KiB
C
Raw Normal View History

2023-05-29 13:42:56 +00:00
#ifndef NOXOS_DRIVER_H
#define NOXOS_DRIVER_H
#include "utils/stdtypes.h"
#define DRIVER_COMMAND_SIZE 32
typedef enum {
DRIVER_UNKNOWN = 0x0000,
DRIVER_RESERVED = 0x0001,
// Specific Driver
DRIVER_MASS_STORAGE = 0x0101,
DRIVER_FILESYSTEM = 0x0102,
DRIVER_GRAPHICS = 0x0103,
DRIVER_AUDIO = 0x0104,
// Drivers which define the transmission of data but have multiple
// intended usages, such as USB for mass storage, input, etc..
DRIVER_TRANSMISSION = 0x0201,
DRIVER_USB_DEVICE = 0x0202,
DRIVER_PCI_DEVICE = 0x0203,
DRIVER_PCIE_DEVICE = 0x0204,
DRIVER_NVME_DEVICE = 0x0205,
DRIVER_BLUETOOTH = 0x0206,
DRIVER_ETHERNET = 0x0207,
// MISCELLANEOUS
DRIVER_EMULATION = 0x7fff
} driver_category_E;
typedef struct driver_mass_storage_t {
} driver_mass_storage_T;
typedef struct driver_configuration_t
{
uint16_t category;
uint16_t max_command_buffers;
uint16_t category_dependencies[16];
uint8_t reserved[220];
} driver_configuration_T;
typedef struct driver_command_buffer_config_t
{
uint64_t num_commands;
void *mapping_address;
uint8_t reserved[240];
} driver_command_buffer_config_T;
typedef struct driver_command_buffer_t
{
uint64_t command_capacity;
void *mapping_address;
} driver_command_buffer_T;
typedef struct driver_t // TODO: Accesses must be thread-safe
{
driver_category_E category;
uint32_t id;
uint16_t max_command_buffers;
driver_command_buffer_T *command_buffers;
} driver_T;
typedef struct driver_manager_t {
uint32_t max_drivers;
uint32_t num_drivers;
driver_T *drivers;
} driver_manager_T;
extern driver_manager_T g_driver_manager;
void driver_manager_init ();
void driver_manager_load_single_driver (char *driver_config_path);
void driver_manager_load_drivers (char *main_config_path);
uint32_t driver_manager_register_driver (driver_configuration_T *configuration);
driver_T * driver_manager_resolve_driver_id (uint32_t id);
// driver_add_command_buffer: Adds a command buffer to the 'command_buffers'-array in the given driver.
void driver_add_command_buffer (driver_T *driver, driver_command_buffer_config_T *configuration);
// driver_flush_command_buffer: Flushes the command buffer that 'buffer' points to,
// meaning that it executes all commands stored in it. 'buffer' doesn't need to be the first
// byte; the function will execute from the first command in a buffer even if some byte in the
// middle of the buffer is given into this function.
void driver_flush_command_buffer (driver_T *driver, void *buffer);
#endif