opuntiaOS - an operating system targeting x86 and ARMv7
at master 3.4 kB view raw
1/* 2 * Copyright (C) 2020-2022 The opuntiaOS Project Authors. 3 * + Contributed by Nikita Melekhin <nimelehin@gmail.com> 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9#ifndef _KERNEL_DRIVERS_BITS_DRIVER_H 10#define _KERNEL_DRIVERS_BITS_DRIVER_H 11 12#include <libkern/types.h> 13 14#define MAX_DRIVER_FUNCTION_COUNT 32 15 16// Supported driver's types 17enum DRIVERS_TYPE { 18 DRIVER_STORAGE_DEVICE = (1 << 0), 19 DRIVER_VIDEO_DEVICE = (1 << 1), 20 DRIVER_SOUND_DEVICE = (1 << 2), 21 DRIVER_INPUT_SYSTEMS_DEVICE = (1 << 3), 22 DRIVER_NETWORK_DEVICE = (1 << 4), 23 DRIVER_BUS_CONTROLLER = (1 << 5), 24 DRIVER_CHAR_DEVICE = (1 << 6), 25 DRIVER_VIRTUAL_FILE_SYSTEM = (1 << 7), 26 DRIVER_FILE_SYSTEM = (1 << 8), 27 DRIVER_VIRTUAL = (1 << 9), 28}; 29 30// Api function of DRIVER_STORAGE type 31enum DRIVER_VIDEO_OPERTAION { 32 DRIVER_VIDEO_INIT = 0x1, // function called when a device is found 33 DRIVER_VIDEO_SET_RESOLUTION, 34}; 35 36// Api function of DRIVER_STORAGE type 37enum DRIVER_STORAGE_OPERTAION { 38 DRIVER_STORAGE_ADD_DEVICE = 0x1, // function called when a device is found 39 DRIVER_STORAGE_READ, 40 DRIVER_STORAGE_WRITE, 41 DRIVER_STORAGE_FLUSH, 42 DRIVER_STORAGE_CAPACITY, 43}; 44 45// Api function of DRIVER_INPUT_SYSTEMS type 46enum DRIVER_INPUT_SYSTEMS_OPERTAION { 47 DRIVER_INPUT_SYSTEMS_ADD_DEVICE = 0x1, // function called when a device is found 48 DRIVER_INPUT_SYSTEMS_GET_LAST_KEY, 49 DRIVER_INPUT_SYSTEMS_DISCARD_LAST_KEY 50}; 51 52// Api function of DRIVER_CONTROLLER type 53enum DRIVER_BUS_CONTROLLER_OPERTAION { 54 DRIVER_BUS_CONTROLLER_FIND_DEVICE = 0x1, // function called when a device is found 55}; 56 57// Api function of DRIVER_VIRTUAL_FILE_SYSTEM type 58enum DRIVER_VIRTUAL_FILE_SYSTEM_OPERTAION { 59 DRIVER_VIRTUAL_FILE_SYSTEM_ADD_DRIVER = 0x1, 60 DRIVER_VIRTUAL_FILE_SYSTEM_ADD_DEVICE, 61 DRIVER_VIRTUAL_FILE_SYSTEM_EJECT_DEVICE, 62}; 63 64// Api function of DRIVER_FILE_SYSTEM type 65enum DRIVER_FILE_SYSTEM_OPERTAION { 66 DRIVER_FILE_SYSTEM_RECOGNIZE = 0x1, 67 DRIVER_FILE_SYSTEM_PREPARE_FS, 68 DRIVER_FILE_SYSTEM_EJECT_DEVICE, 69 70 DRIVER_FILE_SYSTEM_OPEN, 71 DRIVER_FILE_SYSTEM_CAN_READ, 72 DRIVER_FILE_SYSTEM_CAN_WRITE, 73 DRIVER_FILE_SYSTEM_READ, 74 DRIVER_FILE_SYSTEM_WRITE, 75 DRIVER_FILE_SYSTEM_TRUNCATE, 76 DRIVER_FILE_SYSTEM_MKDIR, 77 DRIVER_FILE_SYSTEM_RMDIR, 78 79 DRIVER_FILE_SYSTEM_READ_INODE, 80 DRIVER_FILE_SYSTEM_WRITE_INODE, 81 DRIVER_FILE_SYSTEM_FREE_INODE, 82 DRIVER_FILE_SYSTEM_GET_FSDATA, 83 DRIVER_FILE_SYSTEM_LOOKUP, 84 DRIVER_FILE_SYSTEM_GETDENTS, 85 DRIVER_FILE_SYSTEM_CREATE, 86 DRIVER_FILE_SYSTEM_UNLINK, 87 88 DRIVER_FILE_SYSTEM_FSTAT, 89 DRIVER_FILE_SYSTEM_IOCTL, 90 DRIVER_FILE_SYSTEM_MMAP, 91}; 92 93struct driver; 94struct device; 95typedef struct { 96 void (*recieve_notification)(uint32_t key, uint32_t val); 97 int (*on_start)(); 98 int (*on_stop)(); 99 int (*init_with_dev)(struct device* device); 100} driver_system_funcs_t; 101 102enum DRIVER_DESC_FLAGS { 103 DRIVER_DESC_FLAG_START = (1 << 0), 104}; 105 106struct driver_desc { 107 int type; 108 uint32_t flags; 109 uint32_t listened_device_mask; 110 uint32_t listened_driver_mask; 111 void* functions[MAX_DRIVER_FUNCTION_COUNT]; 112 driver_system_funcs_t system_funcs; 113}; 114typedef struct driver_desc driver_desc_t; 115 116struct driver { 117 int id; 118 int status; 119 driver_desc_t desc; 120 const char* name; 121}; 122typedef struct driver driver_t; 123 124#endif // _KERNEL_DRIVERS_BITS_DRIVER_H