1 2 #ifndef __SYS_SYSCTL_H__ 3 #define __SYS_SYSCTL_H__ 4 5 #include <stdbool.h> 6 7 /* 8 * System Control Macros 9 * SYSCTL_STR(PATH, FLAGS, DESCRIPTION, DEFAULT) 10 * SYSCTL_INT(PATH, FLAGS, DESCRIPTION, DEFAULT) 11 * SYSCTL_BOOL(PATH, FLAGS, DESCRIPTION, DEFAULT) 12 * SYSCTL_END() 13 */ 14 15 #define SYSCTL_TYPE_INVALID 0 16 #define SYSCTL_TYPE_STR 1 17 #define SYSCTL_TYPE_INT 2 18 #define SYSCTL_TYPE_BOOL 3 19 20 #define SYSCTL_FLAG_RO 1 21 #define SYSCTL_FLAG_RW 2 22 23 #define SYSCTL_LIST \ 24 SYSCTL_STR(kern_ostype, SYSCTL_FLAG_RO, "OS Type", "Castor") \ 25 SYSCTL_INT(kern_hz, SYSCTL_FLAG_RW, "Tick frequency", 100) \ 26 SYSCTL_INT(time_tzadj, SYSCTL_FLAG_RW, "Time zone offset in seconds", 0) \ 27 SYSCTL_INT(log_syscall, SYSCTL_FLAG_RW, "Syscall log level", 1) \ 28 SYSCTL_INT(log_loader, SYSCTL_FLAG_RW, "Loader log level", 1) \ 29 SYSCTL_INT(log_vfs, SYSCTL_FLAG_RW, "VFS log level", 1) \ 30 SYSCTL_INT(log_o2fs, SYSCTL_FLAG_RW, "O2FS log level", 0) \ 31 SYSCTL_INT(log_ide, SYSCTL_FLAG_RW, "IDE log level", 0) 32 33 #define SYSCTL_STR_MAXLENGTH 128 34 35 typedef struct SysCtlString { 36 char path[64]; 37 char value[SYSCTL_STR_MAXLENGTH]; 38 } SysCtlString; 39 40 typedef struct SysCtlInt { 41 char path[64]; 42 int64_t value; 43 } SysCtlInt; 44 45 typedef struct SysCtlBool { 46 char path[64]; 47 bool value; 48 } SysCtlBool; 49 50 #define SYSCTL_STR(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \ 51 extern SysCtlString SYSCTL_##_PATH; 52 #define SYSCTL_INT(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \ 53 extern SysCtlInt SYSCTL_##_PATH; 54 #define SYSCTL_BOOL(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \ 55 extern SysCtlBool SYSCTL_##_PATH; 56 SYSCTL_LIST 57 #undef SYSCTL_STR 58 #undef SYSCTL_INT 59 #undef SYSCTL_BOOL 60 61 #define SYSCTL_GETSTR(_PATH) SYSCTL_##_PATH.value 62 #define SYSCTL_SETSTR(_PATH, _VALUE) strncpy(SYSCTL_##_PATH.value, _VALUE, SYSCTL_STR_MAXLENGTH); 63 #define SYSCTL_GETINT(_PATH) SYSCTL_##_PATH.value 64 #define SYSCTL_SETINT(_PATH, _VALUE) SYSCTL_##_PATH.value = _VALUE 65 #define SYSCTL_GETBOOL(_PATH) SYSCTL_##_PATH.value 66 #define SYSCTL_SETBOOL(_PATH, _VALUE) SYSCTL_##_PATH.value = _VALUE 67 68 uint64_t SysCtl_GetType(const char *node); 69 void *SysCtl_GetObject(const char *node); 70 uint64_t SysCtl_SetObject(const char *node, void *obj); 71 72 #endif /* __SYS_SYSCTL_H__ */ 73 74