Files
Custom-Operating-System/kernel/include/drivers/bits/driver.h

123 lines
3.3 KiB
C
Raw Normal View History

2025-02-12 09:54:05 -05:00
#ifndef _KERNEL_DRIVERS_BITS_DRIVER_H
#define _KERNEL_DRIVERS_BITS_DRIVER_H
#include <libkern/types.h>
#define MAX_DRIVER_FUNCTION_COUNT 32
// Supported driver's types
enum DRIVERS_TYPE {
DRIVER_STORAGE_DEVICE = (1 << 0),
DRIVER_VIDEO_DEVICE = (1 << 1),
DRIVER_SOUND_DEVICE = (1 << 2),
DRIVER_INPUT_SYSTEMS_DEVICE = (1 << 3),
DRIVER_NETWORK_DEVICE = (1 << 4),
DRIVER_BUS_CONTROLLER = (1 << 5),
DRIVER_CHAR_DEVICE = (1 << 6),
DRIVER_VIRTUAL_FILE_SYSTEM = (1 << 7),
DRIVER_FILE_SYSTEM = (1 << 8),
DRIVER_TIMER = (1 << 9),
DRIVER_RTC = (1 << 10),
DRIVER_TIME_MANAGER = (1 << 11),
DRIVER_VIRTUAL = (1 << 12),
};
// Api function of DRIVER_STORAGE type
enum DRIVER_VIDEO_OPERTAION {
DRIVER_VIDEO_INIT = 0x1, // function called when a device is found
DRIVER_VIDEO_SET_RESOLUTION,
};
// Api function of DRIVER_STORAGE type
enum DRIVER_STORAGE_OPERTAION {
DRIVER_STORAGE_ADD_DEVICE = 0x1, // function called when a device is found
DRIVER_STORAGE_READ,
DRIVER_STORAGE_WRITE,
DRIVER_STORAGE_FLUSH,
DRIVER_STORAGE_CAPACITY,
};
// Api function of DRIVER_INPUT_SYSTEMS type
enum DRIVER_INPUT_SYSTEMS_OPERTAION {
DRIVER_INPUT_SYSTEMS_ADD_DEVICE = 0x1, // function called when a device is found
DRIVER_INPUT_SYSTEMS_GET_LAST_KEY,
DRIVER_INPUT_SYSTEMS_DISCARD_LAST_KEY
};
// Api function of DRIVER_CONTROLLER type
enum DRIVER_BUS_CONTROLLER_OPERTAION {
DRIVER_BUS_CONTROLLER_FIND_DEVICE = 0x1, // function called when a device is found
};
// Api function of DRIVER_VIRTUAL_FILE_SYSTEM type
enum DRIVER_VIRTUAL_FILE_SYSTEM_OPERTAION {
DRIVER_VIRTUAL_FILE_SYSTEM_ADD_DRIVER = 0x1,
DRIVER_VIRTUAL_FILE_SYSTEM_ADD_DEVICE,
DRIVER_VIRTUAL_FILE_SYSTEM_EJECT_DEVICE,
};
// Api function of DRIVER_FILE_SYSTEM type
enum DRIVER_FILE_SYSTEM_OPERTAION {
DRIVER_FILE_SYSTEM_RECOGNIZE = 0x1,
DRIVER_FILE_SYSTEM_PREPARE_FS,
DRIVER_FILE_SYSTEM_EJECT_DEVICE,
DRIVER_FILE_SYSTEM_OPEN,
DRIVER_FILE_SYSTEM_CAN_READ,
DRIVER_FILE_SYSTEM_CAN_WRITE,
DRIVER_FILE_SYSTEM_READ,
DRIVER_FILE_SYSTEM_WRITE,
DRIVER_FILE_SYSTEM_TRUNCATE,
DRIVER_FILE_SYSTEM_MKDIR,
DRIVER_FILE_SYSTEM_RMDIR,
DRIVER_FILE_SYSTEM_READ_INODE,
DRIVER_FILE_SYSTEM_WRITE_INODE,
DRIVER_FILE_SYSTEM_FREE_INODE,
DRIVER_FILE_SYSTEM_LOOKUP,
DRIVER_FILE_SYSTEM_GETDENTS,
DRIVER_FILE_SYSTEM_CREATE,
DRIVER_FILE_SYSTEM_UNLINK,
DRIVER_FILE_SYSTEM_FSTAT,
DRIVER_FILE_SYSTEM_FCHMOD,
DRIVER_FILE_SYSTEM_IOCTL,
DRIVER_FILE_SYSTEM_MMAP,
};
enum DRIVER_RTC_OPERTAION {
DRIVER_RTC_GET_TIME,
};
struct driver;
struct device;
typedef struct {
void (*recieve_notification)(uintptr_t key, uintptr_t val);
int (*on_start)();
int (*on_stop)();
int (*init_with_dev)(struct device* device);
} driver_system_funcs_t;
enum DRIVER_DESC_FLAGS {
DRIVER_DESC_FLAG_START = (1 << 0),
};
struct driver_desc {
int type;
uint32_t flags;
uint32_t listened_device_mask;
uint32_t listened_driver_mask;
void* functions[MAX_DRIVER_FUNCTION_COUNT];
driver_system_funcs_t system_funcs;
};
typedef struct driver_desc driver_desc_t;
struct driver {
int id;
int status;
driver_desc_t desc;
const char* name;
};
typedef struct driver driver_t;
#endif // _KERNEL_DRIVERS_BITS_DRIVER_H