syscall.h
1 /************************************************************************** 2 BuguRTOS-4.0.x (Bugurt real time operating system) 3 Copyright (C) 2018 anonimous 4 5 This program is free software: you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation, either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 Please contact with me by E-mail: shkolnick.kun@gmail.com 19 20 A special exception to the GPL can be applied should you wish to distribute 21 a combined work that includes BuguRTOS, without being obliged to provide 22 the source code for any proprietary components. See the file exception.txt 23 for full details of how and when the exception can be applied. 24 **************************************************************************/ 25 26 /***************************************************************************************** 27 ```````````````````````````````..:+oyhdmNNMMMMMMNmmdhyo+:..``````````````````````````````` 28 ``````````````````````````.:oydNMMMMMMMMMNNNNNNNNMMMMMMMMMNdy+:.`````````````````````````` 29 ```````````````````````:sdNMMMMMNdys+/::----------::/osydNMMMMMNds:``````````````````````` 30 ```````````````````.+hNMMMMmho/-..........................-/shmMMMMNh/.``````````````````` 31 ````````````````./hNMMMNho:...................................-:ohNMMMNh/````````````````` 32 ``````````````.smMMMNy/-.......:////ss++/+-.......................-+yNMMMmo.`````````````` 33 ````````````-sNMMMd+-.....:////:-...-/s::..............+o/-..........-odMMMNs.```````````` 34 ``````````.sNMMNh/....................................-o:--............./hMMMNo.`````````` 35 `````````+mMMMh:-........................................-...............-/dMMMm/````````` 36 ```````.yMMMm/...................-::--..................:-........--........+mMMMy.``````` 37 ``````:mMMMy-.......................-::-...............-:.........-::........-yMMMd:`````` 38 `````/NMMN+-..................::-.....-:-............../--.........-:/-.......-+NMMN:````` 39 ````+NMMm::o/-..--/+o+o+++++o+osys+//::-::.............:/....-:-::-..-++-.......:NMMN/```` 40 ```/NMMm:.-++-+yhs/-`` `dMMMMMmho+:-..............:-/+yho/:/+oyo//o-......./mMMN:``` 41 ``-NMMm/....-/--::/o+o+oo+oo++oosyss+smyo/.............:yyho-` smMMddh-......./NMMN.`` 42 `.hMMM/......-++:-.-:oooooooooosyyhhys/...............-+osyyyyysssssooo+ohhs-......+MMMh.` 43 `+MMMy.......-::/++:-.....-:/++++o+o/--................--/oooo+o++o+++////-y/.......hMMM/` 44 .mMMN:.........--:---...-::/+//::--.......................--//+//-...-.....+/......./NMMd` 45 /MMMy............-::----------....----/+-.....................-++/:---....-o-........hMMN: 46 yMMM/.............--:://///oo+++/+++oo+-.......................-://+/:--::::.........+MMMs 47 mMMN:................----:/h:::/:/::---.........................--/osss+++:..........:NMMd 48 MMMd-....................:mNs:-....................................--:odo:-..........:mMMN 49 MMMd-....................yoshyoso:--................................../mm/...........:mMMM 50 MMMm:..................../-o/h.y-:+dooo+/:--....................-/osydddmh...........:mMMN 51 mMMN:........................+mNs `h. -d/:/+h++ooooy+++s++y+++mo+y` yh.do...........:NMMh 52 sMMM+........................-hmMo/ds oMo`.-o :h s:`h` `Nysd.-Ny-h:...........+MMMo 53 /MMMh........................./smMMMMd+NMMNNMh` sN: .mNNMddNMMMMNmN+..............hMMN: 54 .dMMN/........................./+hMMMMMMMMMMMMmhyyyNMNNMMMMMMMMMMMNsoo-............./NMMd` 55 `+MMMh.........................-/+omMMMMMMMMMMMMMMMMMMMMMMMMMMMMms-/+...............hMMM/` 56 `.hMMM+..........................:/-omMMMMMMMMMMMMMMMdmMdhMMMds/-..-...............oMMMy`` 57 ``.NMMN/............................--/hNN/h.`ys:dmsd:-syos+--+.................../NMMN.`` 58 ```/NMMm:...........................:+/--:+s++oo+osoo+/:-..-/+::-................/mMMN:``` 59 ````/NMMN:............................-/++/:-..........-//+/-..:+.--............/NMMN/```` 60 `````:NMMN+-.............../+-.............-://////////:-.......+s+::.........-oNMMN:````` 61 ``````:mMMMy-..............:/o-.................................:yo//........-hMMMd-`````` 62 ```````.yMMMm+.............:o:++-...............................+y+o-......-+mMMMs.``````` 63 `````````/mMMMd/-...........-++:+/-.---........................-ho+/.....-/dMMMm/````````` 64 ``````````.oNMMMh/............-++:++/////:....................-yo:o-...-+hMMMNo.`````````` 65 ````````````.sNMMMdo-...........-++::++:-:/+//:..............:o:/o-..-omMMMNo.```````````` 66 ``````````````.omMMMNy+-..........-/+-.:/+/:--:+++/++//:/::/+/-+/.-+hMMMMmo``````````````` 67 `````````````````/hNMMMNho:-...............-:/:-....--::::--..-/ohNMMMNy:````````````````` 68 ```````````````````./hNMMMMmhs/-..........................-/shNMMMMNy/.``````````````````` 69 ```````````````````````:sdNMMMMMNdhso+/:----------:/+oshdNMMMMMNho:``````````````````````` 70 ``````````````````````````.:+ydNMMMMMMMMMMNNNNNNMMMMMMMMMMmds+:``````````````````````````` 71 ````````````````````````````````.:/osyhdmNNMMMMNNmdhyso/:.```````````````````````````````` 72 ****************************************************************************************** 73 * * 74 * This logo was graciously delivered by 10003-kun ITT: * 75 * * 76 * http://www.0chan.ru/r/res/9996.html * 77 * * 78 *****************************************************************************************/ 79 #ifndef SYSCALL_H 80 #define SYSCALL_H 81 BGRT_CDECL_BEGIN 82 #include <stdarg.h> 83 /*! 84 \file 85 \brief \~russian Заголовок системных вызовов. 86 87 \warning Все содержимое файла для внутреннего использования! 88 89 \~english System call header. 90 91 \warning This file content is internal usage! 92 */ 93 #define BGRT_SC_ID(syscall) BGRT_CONCAT(BGRT_SC_ENUM_, syscall) /*!< \~russian \brief Получить идентификатор системного вызова по названию. \~english \brief Get system call id. */ 94 95 enum _bgrt_sc_enum 96 { 97 # define BGRT_SC_TBL_ENTRY(syscall,arg) BGRT_SC_ID(syscall), 98 # include <syscall_table.h> /* ADLINT:SF:[W0073] No include guard! */ 99 # undef BGRT_SC_TBL_ENTRY 100 BGRT_SC_ENUM_END 101 }; 102 typedef enum _bgrt_sc_enum bgrt_sc_enum; /*!< \~russian \brief Идентификаторы системных вызовов. \~english \brief Suystem call IDs. */ 103 104 #define BGRT_SC_SR_NAME(syscall) BGRT_CONCAT2(BGRT_SC_, BGRT_CONCAT(syscall, _SR)) /*!< \~russian \brief Имя обработчика системного вызова. \~english \brief System call service routine name. */ 105 #define BGRT_SC_SR(syscall,arg) bgrt_st_t BGRT_SC_SR_NAME(syscall)(arg) /*!< \~russian \brief Обработчик системного вызова. \~english \brief System call service routine. */ 106 typedef bgrt_st_t (* bgrt_scsr_t)(void *); /*!< \~russian \brief Указатель на обработчик системного вызова. \~english \brief System call service routine pointer. */ 107 108 typedef struct _bgrt_va_wr_t bgrt_va_wr_t; /*!< \~russian \brief Обёртка для va_list. \~english \brief va_list wrapper. */ 109 struct _bgrt_va_wr_t 110 { 111 va_list list; 112 }; 113 /*! 114 \~russian 115 \brief 116 Обработка системного вызова. 117 118 Запускает обработчик системного вызова и передаёт ему аргумент. 119 120 \param syscall_num Номер системного вызова. 121 \param syscall_arg Аргумент системного вызова. 122 \return Результат выполнения системного вызова. 123 124 \~english 125 \brief 126 System call processing routine. 127 128 This function calls system call handlers and passes arguments to them. 129 130 \param syscall_num System call number. 131 \param syscall_arg System call argument. 132 \return System call execution status. 133 */ 134 bgrt_st_t bgrt_priv_do_syscall(bgrt_syscall_t syscall_num, void * syscall_arg); 135 136 /*! 137 \~russian 138 \brief 139 Системный вызов. 140 141 Код Ядра всегда выполняется в контексте Ядра. Это нужно для экономии памяти в стеках процессов. 142 Соответственно, если мы хотим выполнить какие либо операции над процессами, мьютексами, семафорами, сигналами, 143 то нам нужно "попросить" Ядро сделать эту работу. 144 145 Именно для этого существует функция bgrt_syscall, которая передаёт управление Ядру для выполнения требуемой работы. 146 147 \warning Для внутреннего использования. 148 149 \param num номер системного вызова (что именно надо выполнить). 150 \~english 151 \brief 152 A system call. 153 154 This function switches a processor core from a process context to the kernel context. 155 The kernel code is always run in the kernel context. This is done to save memory in process stacks. 156 A system calls are done on every operations with processes, mutexes, semaphores and signals. 157 The Kernel does all of this job. 158 159 \warning Internal usage function. 160 161 \param num a number of a system call (what is going to be done). 162 */ 163 bgrt_st_t bgrt_syscall_var(bgrt_syscall_t num, ...); 164 165 /*! 166 \~russian 167 \brief 168 Системный вызов в виде макроса, см. #bgrt_syscall. 169 170 \warning Для внутреннего использования. 171 172 \param sc_name имя системного вызова (что именно надо выполнить). 173 \param arg Указатель на аргумент. 174 \~english 175 \brief 176 A system call macro, see #bgrt_syscall. 177 178 \warning For internal usage. 179 180 \param sc_name A system call name. 181 \param arg A system call argument pointer. 182 */ 183 #define BGRT_SYSCALL_N(sc_name, arg) bgrt_syscall(BGRT_SC_ID(sc_name), arg) 184 185 /*! 186 \~russian 187 \brief 188 Системный вызов в виде макроса, см. #bgrt_syscall_var. 189 190 \warning Для внутреннего использования. 191 192 \param sc_name имя системного вызова (что именно надо выполнить). 193 \~english 194 \brief 195 A system call macro, see #bgrt_syscall_var. 196 197 \warning For internal usage. 198 199 \param sc_name A system call name. 200 */ 201 #define BGRT_SYSCALL_NVAR(sc_name,...) bgrt_syscall_var(BGRT_SC_ID(sc_name), __VA_ARGS__) 202 203 /*User may write his own system calls*/ 204 #ifdef BGRT_CONFIG_CUSTOM_SYSCALL 205 # include <custom_syscall_api.h> 206 #else 207 # include <default/syscall_api.h> /*Default system call dispatcher*/ 208 #endif/*BGRT_CONFIG_USER_SYSCALL*/ 209 210 BGRT_CDECL_END 211 #endif /*SYSCALL_H*/