From 06c1497624e9f821e75378ee4cc72d3ebe074011 Mon Sep 17 00:00:00 2001 From: Burer Date: Thu, 26 Feb 2026 17:25:16 +0000 Subject: [PATCH] system/docs: update docs and SF constants to match actual kernel (#306) - Update sysfuncs.txt and sysfuncr.txt to match actual kernel code: - Add missing SF's info - Add missing constants - Fix some mistakes - Update KOSfuncs.inc to match actual kernel code: - Remove obsolete constants - Add missing constants - Rename some constants to match their names in docs Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/306 Reviewed-by: Max Logaev Reviewed-by: Mikhail Frolov Co-authored-by: Burer Co-committed-by: Burer --- kernel/trunk/docs/sysfuncr.txt | 187 +++++++++++++++++------- kernel/trunk/docs/sysfuncs.txt | 252 +++++++++++++++++++++++++-------- programs/KOSfuncs.inc | 26 ++-- 3 files changed, 345 insertions(+), 120 deletions(-) diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 2c4230a5d..66c188672 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -1985,7 +1985,7 @@ path db 'HD0/1',0 подфункция 2 функции 15. ---------------------- Константы для регистров: ---------------------- - eax - SF_BACKGROUND_GET_RECT (39) + eax - SF_BACKGROUND_GET (39) ====================================================================== == Функция 39, подфункция 3 - получить прямоугольную область фона = ====================================================================== @@ -2169,7 +2169,7 @@ path db 'HD0/1',0 * ebx = 2 - номер подфункции * ecx = указатель на таблицу цветов * edx = размер таблицы цветов - (должен быть 40 байт для будущей совместимости) + (до 192 байт; 40 байт для базовой структуры) Формат таблицы цветов указан в описании подфункции 3. Возвращаемое значение: * функция не возвращает значения @@ -2196,32 +2196,33 @@ path db 'HD0/1',0 * ecx = указатель на буфер размером edx байт, куда будет записана таблица * edx = размер таблицы цветов - (должен быть 40 байт для будущей совместимости) + (до 192 байт; 40 байт для базовой структуры) Возвращаемое значение: * функция не возвращает значения Формат таблицы цветов: каждый элемент - dword-значение цвета 0x00RRGGBB - * +0: dword: none - зарезервировано - * +4: dword: none - зарезервировано + * +0: dword: frame + * +4: dword: grab * +8: dword: work_dark - темный цвет рабочей области для придания объемна элементам интерфейса * +12 = +0xC: dword: work_light - светлый цвет рабочей области для придания объемна элементам интерфейса * +16 = +0x10: dword: grab_text - цвет текста на заголовке * +20 = +0x14: dword: work - цвет рабочей области - * +24 = +0x18: dword: button - цвет кнопки в рабочей области - * +28 = +0x1C: dword: button_text - цвет текста на кнопке + * +24 = +0x18: dword: work_button - цвет кнопки в рабочей области + * +28 = +0x1C: dword: work_button_text - цвет текста на кнопке в рабочей области * +32 = +0x20: dword: work_text - цвет текста в рабочей области * +36 = +0x24: dword: graph - цвет графики в рабочей области Замечания: * Структура таблицы цветов описана в стандартном включаемом файле macros.inc под названием system_colors; например, можно писать: - sc system_colors ; объявление переменной - ... ; где-то надо вызвать - ; описываемую функцию с ecx=sc - mov ecx, [sc.button_text] ; читаем цвет текста - ; на кнопке в рабочей области + sc system_colors ; объявление переменной + ... ; вызов описываемой функции с ecx = sc + mov ecx, [sc.work_button_text] ; устанавливаем цвет текста + ; на кнопке в рабочей области + * Таблица может быть больше (до 192 байт); дополнительные поля + копируются как есть и интерпретируются скинами. * Использование/неиспользование этих цветов - дело исключительно самой программы. Для использования нужно просто при вызове функций рисования указывать цвет, взятый из этой таблицы. @@ -2491,6 +2492,7 @@ dword-значение цвета 0x00RRGGBB ---------------------- Константы для регистров: ---------------------- eax - SF_SET_WINDOW_SHAPE (50) + ====================================================================== ===================== Функция 51, подфункция 1 ======================= ========================== Создать поток ============================= @@ -2505,16 +2507,19 @@ dword-значение цвета 0x00RRGGBB * иначе eax = TID - идентификатор потока ---------------------- Константы для регистров: ---------------------- - eax - SF_CREATE_THREAD (51) + eax - SF_CREATE_THREAD (51) / + ebx - SSF_CREATE_THREAD (1), SSF_GET_CURR_THREAD_SLOT (2), + SSF_GET_THREAD_PRIORITY (3), SSF_SET_THREAD_PRIORITY (4) + ====================================================================== ===================== Функция 51, подфункция 2 ======================= -=================== Получить номер слота потока ====================== +============= Получить номер слота текущего потока =================== ====================================================================== Параметры: * eax = 51 - номер функции * ebx = 2 - номер подфункции Возвращаемое значение: - * eax = номер слота потока + * eax = номер слота текущего потока ====================================================================== ===================== Функция 51, подфункция 3 ======================= @@ -2755,10 +2760,10 @@ IPC применяется для посылок сообщений от одн Программе доступны данные графического экрана (область памяти, которая собственно и отображает содержимое экрана) напрямую без вызовов системных функций через селектор gs: - mov eax, [gs:0] + mov eax, [gs:0] поместит в eax первый dword буфера, содержащий информацию о цвете левой верхней точки (и, возможно, цвета нескольких следующих). - mov [gs:0], eax + mov [gs:0], eax при работе в режимах VESA c LFB установит цвет левой верхней точки (и возможно, цвета нескольких следующих). @@ -3356,6 +3361,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); ---------------------- Константы для регистров: ---------------------- eax - SF_SYS_MISC (68) ebx - SSF_MEM_FREE (13) + ====================================================================== ====================== Функция 68, подфункция 14 ===================== ====== Ожидать получения сигнала от других приложений/драйверов. ===== @@ -3368,12 +3374,16 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * eax разрушается * буфер, на который указывает ecx, содержит следующую информацию: * +0: dword: идентификатор последующих данных сигнала - * +4: данные принятого сигнала (20 байт), формат которых + * +4: 5 dword: данные принятого сигнала, формат которых определяется первым dword-ом +Замечания: + * Бесконечно ожидает любое событие в очереди событий текущего потока. + * Сбрасывает байт приоритета в буфере. ---------------------- Константы для регистров: ---------------------- eax - SF_SYS_MISC (68) ebx - SSF_WAIT_SIGNAL (14) + ====================================================================== =========== Функция 68, подфункция 16 - загрузить драйвер. =========== ====================================================================== @@ -3382,19 +3392,20 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * ebx = 16 - номер подфункции * ecx = указатель на ASCIIZ-строку с именем драйвера Возвращаемое значение: - * eax = 0 - неудача - * иначе eax = хэндл драйвера + * eax = хэндл драйвера + 0 при ошибке Замечания: * Если драйвер ещё не загружен, он загружается; если драйвер уже загружен, ничего не меняется. * Имя драйвера чувствительно к регистру символов. Максимальная длина имени - 16 символов, включая завершающий нулевой символ, остальные символы игнорируются. - * Драйвер с именем ABC загружается из файла /sys/drivers/ABC.sys. + * Драйвер с именем "ABC" загружается из файла /sys/drivers/ABC.sys. ---------------------- Константы для регистров: ---------------------- eax - SF_SYS_MISC (68) ebx - SSF_LOAD_DRIVER (16) + ====================================================================== ========== Функция 68, подфункция 17 - управление драйвером. ========= ====================================================================== @@ -3405,19 +3416,21 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +0: dword: хэндл драйвера * +4: dword: код функции драйвера * +8: dword: указатель на входные данные - * +12 = +0xC: dword: размер входных данных + * +12 = +0x0C: dword: размер входных данных * +16 = +0x10: dword: указатель на выходные данные * +20 = +0x14: dword: размер выходных данных Возвращаемое значение: * eax = определяется драйвером + -1 при ошибке Замечания: * Коды функций и структура входных/выходных данных определяются драйвером. - * Предварительно должен быть получен хэндл драйвера подфункцией 16. + * Хэндл драйвера необходимо предварительно получить подфункцией 16. ---------------------- Константы для регистров: ---------------------- eax - SF_SYS_MISC (68) ebx - SSF_CONTROL_DRIVER (17) + ====================================================================== == Функция 68, подфункция 18 - загрузить DLL с указанием кодировки. == ====================================================================== @@ -3482,7 +3495,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); Параметры: * eax = 68 - номер функции * ebx = 21 - номер подфункции - * ecx = указатель на ASCIIZ-строку с именем драйвера + * ecx = указатель на ASCIIZ-строку с путем к файлу драйвера * edx = указатель на командную строку Возвращаемое значение: * eax = 0 - неудача @@ -3674,22 +3687,40 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * функция загружает и, при необходимости, распаковывает файл (kunpack) ====================================================================== -======== Функция 68, подфункция 29 - allocate ring memory. ========= +======= Функция 68, подфункция 29 - выделить кольцевую память. ======= ====================================================================== -Parameters: - * eax = 68 - function number - * ebx = 29 - subfunction number - * ecx = required size in bytes -Returned value: - * eax = 0 - failed - * eax = pointer to the allocated ring -Remarks: - * The requested size must be an exact multiple of pagesize (4 Kb) - * The function allocates memory in such a way that you can read and - write beyond the size of the allocated memory and will reach the - beginning of the buffer again. +Параметры: + * eax = 68 - номер функции + * ebx = 29 - номер подфункции + * ecx = требуемый размер в байтах +Возвращаемое значение: + * eax = 0 - неудача + * eax = указатель на выделенную кольцевую память +Замечания: + * Запрошенный размер должен быть кратен размеру страницы (4 Кб). + * Память выделяется так, что доступ за пределами буфера приводит + к чтению/записи в его начало. +====================================================================== +=========== Функция 68, подфункция 30 - выгрузить драйвер. =========== +====================================================================== +Параметры: + * eax = 68 - номер функции + * ebx = 30 - номер подфункции + * ecx = указатель на структуру SRV (хэндл драйвера) + * edx = указатель на командную строку (может быть 0) +Возвращаемое значение: + * eax = -1 - неверные параметры + * eax = -2 - ошибка при освобождении памяти драйвера + * иначе eax = указатель на следующую структуру SRV (бывший SRV.fd) +Замечания: + * Перед выгрузкой вызывается точка входа драйвера с DRV_EXIT. + +---------------------- Константы для регистров: ---------------------- + eax - SF_SYS_MISC (68) + ebx - SSF_UNLOAD_DRIVER (30) + ====================================================================== ======== Функция 68, подфункция 31 - получить данные драйвера. ======= ====================================================================== @@ -3788,7 +3819,7 @@ Remarks: и при поступлении нового сообщения система будет ждать. Для синхронизации обрамляйте всю работу с буфером операциями блокировки/разблокировки - neg [bufsize] + neg [bufsize] * Данные в буфере трактуются как массив элементов переменной длины - сообщений. Формат сообщения указан в общем описании. @@ -4527,7 +4558,7 @@ Remarks: ---------------------- Константы для регистров: ---------------------- eax - SF_NETWORK_GET (74) - bl - SSF_DEVICE_COUNT (255) + bl - SSF_DEVICE_COUNT (-1) ====================================================================== ==== Функция 74, подфункция 0, Получить тип сетевого устройства. ===== ====================================================================== @@ -4723,10 +4754,11 @@ Remarks: Возвращаемое значение: * eax = число пакетов, полученных с ошибкой с момента запуска устройства, -1 при ошибке - + ---------------------- Константы для регистров: ---------------------- eax - SF_NETWORK_GET (74) bl - SSF_RX_PACKET_ERROR_COUNT (14) + ====================================================================== == Функция 74.15, Получить число пакетов отброшенных при получении. == ====================================================================== @@ -4740,7 +4772,7 @@ Remarks: ---------------------- Константы для регистров: ---------------------- eax - SF_NETWORK_GET (74) - bl - SSF_RX_PACKET_DROP_COUNT (12) + bl - SSF_RX_PACKET_DROP_COUNT (15) ====================================================================== === Функция 74.16, Получить число пакетов утерянных при получении. === ====================================================================== @@ -4990,13 +5022,39 @@ Remarks: ---------------------- Константы для регистров: ---------------------- eax - SF_NETWORK_PROTOCOL (76) + ebx - SSF_ETHERNET_READ_MAC (0x0000) + ebx - SSF_IP4_PACKETS_SENT (0x10000) + ebx - SSF_IP4_PACKETS_RECEIVED (0x10001) + ebx - SSF_IP4_READ_IP (0x10002) + ebx - SSF_IP4_WRITE_IP (0x10003) + ebx - SSF_IP4_READ_DNS (0x10004) + ebx - SSF_IP4_WRITE_DNS (0x10005) + ebx - SSF_IP4_READ_SUBNET (0x10006) + ebx - SSF_IP4_WRITE_SUBNET (0x10007) + ebx - SSF_IP4_READ_GATEWAY (0x10008) + ebx - SSF_IP4_WRITE_GATEWAY (0x10009) + ebx - SSF_ICMP_PACKETS_SENT (0x20000) + ebx - SSF_ICMP_PACKETS_RECEIVED (0x20001) + ebx - SSF_ICMP_ECHO_REPLY (0x20003) + ebx - SSF_UDP_PACKETS_SENT (0x30000) + ebx - SSF_UDP_PACKETS_RECEIVED (0x30001) + ebx - SSF_TCP_PACKETS_SENT (0x40000) + ebx - SSF_TCP_PACKETS_RECEIVED (0x40001) + ebx - SSF_ARP_PACKETS_SENT (0x50000) + ebx - SSF_ARP_PACKETS_RECEIVED (0x50001) + ebx - SSF_ARP_GET_ENTRY_COUNT (0x50002) + ebx - SSF_ARP_READ_ENTRY (0x50003) + ebx - SSF_ARP_ADD_STATIC_ENTRY (0x50004) + ebx - SSF_ARP_DEL_ENTRY (0x50005) + ebx - SSF_ARP_SEND_ANNOUNCE (0x50006) + ebx - SSF_ARP_CONFLICTS_COUNT (0x50007) ====================================================================== ============= Функция 77, подфункция 0, Создать фьютекс. ============= ====================================================================== Параметры: * eax = 77 - номер функции * ebx = 0 - номер подфункции - * ecx = указатель на контрольное значение фьютекса (dword) + * ecx = контрольное значение фьютекса (dword) Возвращаемое значение: * eax = дескриптор фьютекса, 0 при ошибке @@ -5025,11 +5083,12 @@ Remarks: * eax = 77 - номер функции * ebx = 2 - номер подфункции * ecx = дескриптор фьютекса - * edx = контрольное значение + * edx = контрольное значение фьютекса (dword) * esi = таймаут в сотых секунды, 0 - ждать бесконечно Возвращаемое значение: - * eax = 0 - успешно, -1 - таймаут, - -2 - контрольное значение не соответствует + * eax = 0 - успешно, + -1 - таймаут, + -2 - контрольное значение фьютекса не соответствует ---------------------- Константы для регистров: ---------------------- eax - SF_FUTEX (77) @@ -5049,7 +5108,11 @@ Remarks: eax - SF_FUTEX (77) ebx - SSF_WAKE (3) ====================================================================== -======= Функция 77, подфункция 10, Прочитать из файла в буфер. ======= +Замечания: + * Подфункции 4-7 зарезервированы и сейчас возвращают -1. + * Подфункции 8, 9 и 12 не реализованы и возвращают -EBADF (-9). +====================================================================== +=========== Функция 77, подфункция 10, Прочитать из файла. =========== ====================================================================== Параметры: * eax = 77 - номер функции @@ -5059,10 +5122,15 @@ Remarks: * esi = сколько байт прочитать Возвращаемое значение: * eax = количество прочитанных байт + 0 при EOF + -EBADF (-9) при ошибке +Замечания: + * Поддерживаются только pipe-дескрипторы. ---------------------- Константы для регистров: ---------------------- eax - SF_FUTEX (77) - ebx - ... + ebx - SSF_FILE_READ (10) + ====================================================================== ======== Функция 77, подфункция 11, Записать из буфера в файл. ======= ====================================================================== @@ -5070,14 +5138,19 @@ Remarks: * eax = 77 - номер функции * ebx = 11 - номер подфункции * ecx = дескриптор файла - * edx = указатель на буфер, откуда брать данные для записи + * edx = указатель на буфер, откуда брать данные для записи * esi = сколько байт записать Возвращаемое значение: * eax = количество записанных байт + -EBADF (-9) при ошибке + -EPIPE (-32) если нет читателей +Замечания: + * Поддерживаются только pipe-дескрипторы. ---------------------- Константы для регистров: ---------------------- eax - SF_FUTEX (77) - ebx - ... + ebx - SSF_FILE_WRITE (11) + ====================================================================== =========== Функция 77, подфункция 13, Создать новый pipe. =========== ====================================================================== @@ -5089,15 +5162,20 @@ Remarks: * eax = 77 - номер функции * ebx = 13 - номер подфункции * ecx = адрес pipefd - * edx = флаги. На данный момент если поднят O_CLOEXEC (0x40000), то - сисфункция завершится с ошибкой. Поэтому в качестве флагов можно - передать просто 0. + * edx = флаги. Разрешен только O_CLOEXEC (0x40000). + Любые другие биты приводят к -EINVAL (-11). Возвращаемое значение: - * eax = 0 если успех, иначе ошибка. + * eax = 0 если успех, + иначе отрицательный код ошибки: + -EINVAL (-11), -EFAULT (-14), -ENFILE (-23), -EMFILE (-24) +Примечания: + * В случае успеха pipefd[0] является дескриптором чтения, а pipefd[1] + - дескриптором записи. ---------------------- Константы для регистров: ---------------------- eax - SF_FUTEX (77) - ebx - ... + ebx - SSF_PIPE_CREATE (13) + ====================================================================== ========== Функция -1 - завершить выполнение потока/процесса ========= ====================================================================== @@ -5115,6 +5193,7 @@ Remarks: ---------------------- Константы для регистров: ---------------------- eax - SF_TERMINATE_PROCESS (-1) + ====================================================================== === Функция 80 - работа с файловой системой с указанием кодировки. === ====================================================================== diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 504892967..572405127 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -1972,7 +1972,7 @@ Remarks: subfunction 2 of function 15. ---------------------- Constants for registers: ---------------------- - eax - SF_BACKGROUND_GET_RECT (39) + eax - SF_BACKGROUND_GET (39) ====================================================================== == Function 39, subfunction 3 - get rect from the background image. = ====================================================================== @@ -2152,7 +2152,7 @@ Parameters: * ebx = 2 - subfunction number * ecx = pointer to the color table * edx = size of the color table - (must be 40 bytes for future compatibility) + (up to 192 bytes; 40 bytes for the base structure) Format of the color table is shown in description of subfunction 3. Returned value: * function does not return value @@ -2179,21 +2179,21 @@ Parameters: * ecx = pointer to the buffer with size edx bytes, where table will be written * edx = size of color table - (must be 40 bytes for future compatibility) + (up to 192 bytes; 40 bytes for the base structure) Returned value: * function does not return value Format of the color table: each item is dword-value for color 0x00RRGGBB - * +0: dword: none - reserved - * +4: dword: none - reserved + * +0: dword: frame + * +4: dword: grab * +8: dword: work_dark - dark color of working area used to give a user 3D-like feelings about interface elements * +12 = +0xC: dword: work_light - light color of working area used to give a user 3D-like feelings about interface elements * +16 = +0x10: dword: grab_text - color of text on header * +20 = +0x14: dword: work - color of working area - * +24 = +0x18: dword: button - color of button in working area - * +28 = +0x1C: dword: button_text - color of text on button + * +24 = +0x18: dword: work_button - color of button in working area + * +28 = +0x1C: dword: work_button_text - color of text on button in working area * +32 = +0x20: dword: work_text - color of text in working area * +36 = +0x24: dword: graph - color of graphics in working area @@ -2206,6 +2206,8 @@ Remarks: ; this function with ecx=sc mov ecx, [sc.work_button_text] ; read text color on ; button in working area + * The table may be longer (up to 192 bytes); extra fields are copied + as-is and are interpreted by skins. * A program itself decides to use or not to use color table. For usage program must simply at calls to drawing functions select color taken from the table. @@ -2478,11 +2480,11 @@ Remarks: ---------------------- Constants for registers: ---------------------- eax - SF_SET_WINDOW_SHAPE (50) ====================================================================== -==================== Function 51 - create thread. ==================== +============= Function 51, subfunction 1 - create thread. ============ ====================================================================== Parameters: * eax = 51 - function number - * ebx = 1 - unique subfunction + * ebx = 1 - subfunction number * ecx = address of thread entry point (starting eip) * edx = pointer to thread stack (starting esp) Returned value: @@ -2491,6 +2493,49 @@ Returned value: ---------------------- Constants for registers: ---------------------- eax - SF_CREATE_THREAD (51) + ebx - SSF_CREATE_THREAD (1), SSF_GET_CURR_THREAD_SLOT (2), + SSF_GET_THREAD_PRIORITY (3), SSF_SET_THREAD_PRIORITY (4) +====================================================================== +================== Function 51, subfunction 2 ======================== +================== Get current thread slot number ==================== +====================================================================== +Parameters: + * eax = 51 - function number + * ebx = 2 - subfunction number +Returned value: + * eax = slot number of the current thread + +====================================================================== +================== Function 51, subfunction 3 ======================== +===================== Get thread priority ============================ +====================================================================== +Parameters: + * eax = 51 - function number + * ebx = 3 - subfunction number + * ecx = slot number of the thread or -1 (current thread) +Returned value: + * eax = -1 - error (invalid slot number or thread terminated) + * otherwise eax = thread priority +Remarks: + * Priority range is 0..255. + 0 is the highest priority and is set by default at creation. + +====================================================================== +================== Function 51, subfunction 4 ======================== +===================== Set thread priority ============================ +====================================================================== +Parameters: + * eax = 51 - function number + * ebx = 4 - subfunction number + * ecx = slot number of the thread or -1 (current thread) + * edx = new thread priority +Returned value: + * eax = -1 - error (invalid slot number or thread terminated) + * otherwise eax = previous thread priority +Remarks: + * Priority range is 0..255. + 0 is the highest priority and is set by default at creation. + ====================================================================== ==================== Function 54, subfunction 0 ====================== ============== Get the number of slots in the clipboard. ============= @@ -3289,61 +3334,63 @@ Remarks: ebx - SSF_MEM_FREE (13) ====================================================================== ===================== Function 68, subfunction 14 ==================== -============ Wait for signal from another program/driver. ============ +======= Wait for a signal from other applications/drivers. =========== ====================================================================== Parameters: * eax = 68 - function number * ebx = 14 - subfunction number - * ecx = pointer to the buffer for information (24 bytes) + * ecx = pointer to data buffer (6 dword = 24 bytes) Returned value: + * eax is destroyed * buffer pointed to by ecx contains the following information: - * +0: dword: identifier for following data of signal - * +4: dword: data of signal (20 bytes), format of which is defined - by the first dword + * +0: dword: EVENT.code (identifier of following data) + * +4: 5 dword: EVENT.data, format depends on EVENT.code +Remarks: + * Waits indefinitely for any event in the current thread event queue. + * The priority byte in the buffer is cleared by the kernel. ---------------------- Constants for registers: ---------------------- eax - SF_SYS_MISC (68) ebx - SSF_WAIT_SIGNAL (14) ====================================================================== -============= Function 68, subfunction 16 - load driver. ============= +=========== Function 68, subfunction 16 - load driver. =============== ====================================================================== Parameters: * eax = 68 - function number * ebx = 16 - subfunction number * ecx = pointer to ASCIIZ-string with driver name Returned value: - * eax = 0 - failed - * otherwise eax = driver handle + * eax = driver handle, 0 on error Remarks: - * If the driver was not loaded yet, it is loaded; - if the driver was loaded yet, nothing happens. + * If the driver is not loaded yet, it is loaded; + if the driver is already loaded, nothing changes. * Driver name is case-sensitive. Maximum length of the name is 16 characters, including terminating null character, the rest is ignored. - * Driver ABC is loaded from file /sys/drivers/ABC.sys. + * Driver with name "ABC" is loaded from /sys/drivers/ABC.sys. ---------------------- Constants for registers: ---------------------- eax - SF_SYS_MISC (68) ebx - SSF_LOAD_DRIVER (16) ====================================================================== -============ Function 68, subfunction 17 - driver control. =========== +========== Function 68, subfunction 17 - control driver. ============= ====================================================================== Parameters: * eax = 68 - function number * ebx = 17 - subfunction number * ecx = pointer to the control structure: - * +0: dword: handle of driver - * +4: dword: code of driver function - * +8: dword: pointer to input data - * +12 = +0xC: dword: size of input data - * +16 = +0x10: dword: pointer to output data - * +20 = +0x14: dword: size of output data + * +0: dword: driver handle + * +4: dword: driver function code + * +8: dword: pointer to input data + * +12: dword: size of input data + * +16: dword: pointer to output data + * +20: dword: size of output data Returned value: - * eax = determined by driver + * eax = determined by driver, -1 on error Remarks: * Function codes and the structure of input/output data - are defined by driver. - * Previously one must obtain driver handle by subfunction 16. + are defined by the driver. + * Driver handle can be obtained by subfunction 16. ---------------------- Constants for registers: ---------------------- eax - SF_SYS_MISC (68) @@ -3411,7 +3458,7 @@ Remarks: Parameters: * eax = 68 - function number * ebx = 21 - subfunction number - * ecx = pointer to ASCIIZ-string with driver name + * ecx = pointer to ASCIIZ-string with path to driver file * edx = pointer to command line Returned value: * eax = 0 - failed @@ -3616,9 +3663,24 @@ Remarks: write beyond the size of the allocated memory and will reach the beginning of the buffer again. +====================================================================== +=========== Function 68, subfunction 30 - unload driver. ============ +====================================================================== +Parameters: + * eax = 68 - function number + * ebx = 30 - subfunction number + * ecx = pointer to SRV structure (driver handle) + * edx = pointer to command line (may be 0) +Returned value: + * eax = -1 - invalid parameters + * eax = -2 - error while freeing driver memory + * otherwise eax = pointer to the next SRV structure (former SRV.fd) +Remarks: + * The driver entry is called with DRV_EXIT before unloading. + ---------------------- Constants for registers: ---------------------- eax - SF_SYS_MISC (68) - ebx - SSF_MEM_ALLOC_RING (29) + ebx - SSF_UNLOAD_DRIVER (30) ====================================================================== =========== Function 68, subfunction 31 - get driver data. =========== @@ -3833,7 +3895,7 @@ Remarks: eax - SF_DEBUG (69) ebx - SSF_RESUME (5) ====================================================================== -= Fucntion 69, subfunction 6 - read from memory of debugged process. = += Function 69, subfunction 6 - read from memory of debugged process. = ====================================================================== Parameters: * eax = 69 - function number @@ -4442,17 +4504,17 @@ Returned value: ---------------------- Constants for registers: ---------------------- eax - SF_BLITTER (73) ====================================================================== -= Function 74, Subfunction 255, Get number of active network devices. = += Function 74, Subfunction -1, Get number of active network devices. = ====================================================================== Parameters: * eax = 74 - function number - * bl = 255 - subfunction number + * bl = -1 - subfunction number Returned value: * eax = number of active network devices ---------------------- Constants for registers: ---------------------- eax - SF_NETWORK_GET (74) - bl - SSF_DEVICE_COUNT (255) + bl - SSF_DEVICE_COUNT (-1) ====================================================================== ======== Function 74, Subfunction 0, Get network device type. ======== ====================================================================== @@ -4605,7 +4667,7 @@ Parameters: * bl = 11 - subfunction number * bh = device number Returned value: - * eax = Number of erroneous packets received since device start, -1 on error + * eax = Number of erroneous packets transmitted since device start, -1 on error ---------------------- Constants for registers: ---------------------- eax - SF_NETWORK_GET (74) @@ -4661,7 +4723,7 @@ Returned value: ---------------------- Constants for registers: ---------------------- eax - SF_NETWORK_GET (74) - bl - SSF_RX_PACKET_DROP_COUNT (12) + bl - SSF_RX_PACKET_DROP_COUNT (15) ====================================================================== ==== Function 74, Subfunction 16, Get RX missed packets counter. ===== ====================================================================== @@ -5174,19 +5236,41 @@ Returned value: ---------------------- Constants for registers: ---------------------- eax - SF_NETWORK_PROTOCOL (76) + ebx - SSF_ETHERNET_READ_MAC (0x0000) + ebx - SSF_IP4_PACKETS_SENT (0x10000) + ebx - SSF_IP4_PACKETS_RECEIVED (0x10001) + ebx - SSF_IP4_READ_IP (0x10002) + ebx - SSF_IP4_WRITE_IP (0x10003) + ebx - SSF_IP4_READ_DNS (0x10004) + ebx - SSF_IP4_WRITE_DNS (0x10005) + ebx - SSF_IP4_READ_SUBNET (0x10006) + ebx - SSF_IP4_WRITE_SUBNET (0x10007) + ebx - SSF_IP4_READ_GATEWAY (0x10008) + ebx - SSF_IP4_WRITE_GATEWAY (0x10009) + ebx - SSF_ICMP_PACKETS_SENT (0x20000) + ebx - SSF_ICMP_PACKETS_RECEIVED (0x20001) + ebx - SSF_ICMP_ECHO_REPLY (0x20003) + ebx - SSF_UDP_PACKETS_SENT (0x30000) + ebx - SSF_UDP_PACKETS_RECEIVED (0x30001) + ebx - SSF_TCP_PACKETS_SENT (0x40000) + ebx - SSF_TCP_PACKETS_RECEIVED (0x40001) + ebx - SSF_ARP_PACKETS_SENT (0x50000) + ebx - SSF_ARP_PACKETS_RECEIVED (0x50001) + ebx - SSF_ARP_GET_ENTRY_COUNT (0x50002) + ebx - SSF_ARP_READ_ENTRY (0x50003) + ebx - SSF_ARP_ADD_STATIC_ENTRY (0x50004) + ebx - SSF_ARP_DEL_ENTRY (0x50005) + ebx - SSF_ARP_SEND_ANNOUNCE (0x50006) + ebx - SSF_ARP_CONFLICTS_COUNT (0x50007) ====================================================================== ========== Function 77, Subfunction 0, Create futex object =========== ====================================================================== Parameters: * eax = 77 - function number * ebx = 0 - subfunction number - * ecx = pointer to futex dword + * ecx = futex control value (dword) Returned value: * eax = futex handle, 0 on error -Remarks: - * Use subfunction 1 to destroy the futex. - The kernel destroys the futexes automatically when the process - terminates. ---------------------- Constants for registers: ---------------------- eax - SF_FUTEX (77) @@ -5201,7 +5285,8 @@ Parameters: Returned value: * eax = 0 - successfull, -1 on error Remarks: - * The futex handle must have been created by subfunction 0 + * The kernel destroys the futexes automatically when the process + terminates. ---------------------- Constants for registers: ---------------------- eax - SF_FUTEX (77) @@ -5213,17 +5298,12 @@ Parameters: * eax = 77 - function number * ebx = 2 - subfunction number * ecx = futex handle - * edx = control value - * esi = timeout in system ticks or 0 for infinity + * edx = futex control value (dword) + * esi = timeout in hundredths of a second, 0 - wait forever Returned value: * eax = 0 - successfull - -1 - timeout - -2 - futex dword does not have the same value as edx -Remarks: - * This functionn tests that the value at the futex dword still - contains the expected control value, and if so, then sleeps - waiting for a wake operation on the futex. - * The futex handle must have been created by subfunction 0 + -1 - timeout + -2 - futex control value doesn't match ---------------------- Constants for registers: ---------------------- eax - SF_FUTEX (77) @@ -5239,15 +5319,71 @@ Parameters: Returned value: * eax = number of waiters that were woken up -Remarks: - * This function wakes at most edx of the waiters that are - waiting (e.g., inside futex wait) on the futex dword - * The futex handle must have been created by subfunction 0 - ---------------------- Constants for registers: ---------------------- eax - SF_FUTEX (77) ebx - SSF_WAKE (3) ====================================================================== +Remarks: + * Subfunctions 4-7 are reserved and currently return -1. + * Subfunctions 8-9 and 12 are not implemented and return -EBADF (-9). +====================================================================== +============ Function 77, Subfunction 10, Read from file. ============ +====================================================================== +Parameters: + * eax = 77 - function number + * ebx = 10 - subfunction number + * ecx = file handle + * edx = pointer to destination buffer + * esi = number of bytes to read +Returned value: + * eax = number of bytes read, + 0 on EOF, + -EBADF (-9) on error +Remarks: + * Only pipe descriptors are supported. + +---------------------- Constants for registers: ---------------------- + eax - SF_FUTEX (77) + ebx - SSF_FILE_READ (10) +====================================================================== +=========== Function 77, Subfunction 11, Write to file. ============= +====================================================================== +Parameters: + * eax = 77 - function number + * ebx = 11 - subfunction number + * ecx = file handle + * edx = pointer to source buffer + * esi = number of bytes to write +Returned value: + * eax = number of bytes written, + -EBADF (-9) on error, + -EPIPE (-32) if no readers +Remarks: + * Only pipe descriptors are supported. + +---------------------- Constants for registers: ---------------------- + eax - SF_FUTEX (77) + ebx - SSF_FILE_WRITE (11) +====================================================================== +========== Function 77, Subfunction 13, Create pipe. ================ +====================================================================== +Parameters: + * eax = 77 - function number + * ebx = 13 - subfunction number + * ecx = pointer to pipefd[2] array (two dword handles) + * edx = flags (only O_CLOEXEC is allowed) +Returned value: + * eax = 0 on success, + negative errno value on error: + -EINVAL (-11), -EFAULT (-14), -ENFILE (-23), -EMFILE (-24) +Remarks: + * On success, pipefd[0] is a read handle and pipefd[1] is a + write handle. + +---------------------- Constants for registers: ---------------------- + eax - SF_FUTEX (77) + ebx - SSF_PIPE_CREATE (13) +====================================================================== === Function 80 - file system interface with parameter of encoding === ====================================================================== Parameters: diff --git a/programs/KOSfuncs.inc b/programs/KOSfuncs.inc index 4c484ae25..5f2d6d3a7 100644 --- a/programs/KOSfuncs.inc +++ b/programs/KOSfuncs.inc @@ -70,11 +70,11 @@ SF_SYSTEM=18 SSF_WINDOW_BEHAVIOR=25 ; window focus relation with other windows SSSF_GET_WB=1 SSSF_SET_WB=2 -SF_MIDI=20 - SSF_RESET=1 - SSF_OUTPUT=2 +SF_MIDI=20 ; deprecated/undefined in current kernel + SSF_RESET=1 ; deprecated + SSF_OUTPUT=2 ; deprecated SF_SYSTEM_SET=21 - SSF_MPU_MIDI_BASE=1 + SSF_MPU_MIDI_BASE=1 ; not used (reserved) SSF_KEYBOARD_LAYOUT=2 SSF_SYS_LANG=5 SSF_ACCESS_HD_LBA=11 ; setting of low-level access to HD @@ -112,7 +112,7 @@ SF_BACKGROUND_GET=39 ;SSF_PIXEL_BG=2 ;SSF_MODE_BG=4 SF_SET_EVENTS_MASK=40 ; turn on/off desired events -SF_PORT_IN_OUT=43 ; input/output to a port +SF_PORT_IN_OUT=43 ; deprecated/undefined in current kernel SF_SET_PORTS=46 ; reserve/free a group of input/output ports SF_DRAW_NUMBER=47 ; draw number to the window SF_STYLE_SETTINGS=48 @@ -132,6 +132,10 @@ SF_STYLE_SETTINGS=48 SF_APM=49 SF_SET_WINDOW_SHAPE=50 SF_CREATE_THREAD=51 + SSF_CREATE_THREAD=1 + SSF_GET_CURR_THREAD_SLOT=2 + SSF_GET_THREAD_PRIORITY=3 + SSF_SET_THREAD_PRIORITY=4 SF_CLIPBOARD=54 SSF_GET_SLOT_COUNT=0 ; get the number of slots in the clipboard SSF_READ_CB=1 @@ -184,7 +188,7 @@ SF_SYS_MISC=68 SSF_HEAP_INIT=11 SSF_MEM_ALLOC=12 SSF_MEM_FREE=13 - SSF_WAIT_SIGNAL=14 ; wait for signal from another program/driver + SSF_WAIT_SIGNAL=14 ; wait for a signal from other process SSF_LOAD_DRIVER=16 SSF_CONTROL_DRIVER=17 SSF_LOAD_DLL=19 @@ -196,6 +200,9 @@ SF_SYS_MISC=68 SSF_SET_EXCEPTION_STATE=25 SSF_MEM_FREE_EXT=26 SSF_LOAD_FILE=27 + SSF_MEM_ALLOC_RING=29 + SSF_UNLOAD_DRIVER=30 + SSF_GET_DRIVER_DATA=31 SF_DEBUG=69 SSF_SET_MESSAGE_AREA=0 SSF_GET_REGISTERS=1 @@ -221,7 +228,7 @@ SF_FILE=70 SF_SET_CAPTION=71 SF_SEND_MESSAGE=72 SF_BLITTER=73 -SF_NETWORK_DEVICE=74 +SF_NETWORK_GET=74 SSF_DEVICE_COUNT=255 ; get number of active network devices SSF_DEVICE_TYPE=0 SSF_DEVICE_NAME=1 @@ -250,7 +257,7 @@ SF_NETWORK_SOCKET=75 SSF_RECEIVE=7 SSF_SET_OPTIONS=8 SSF_GET_OPTIONS=9 - SSF_SOCKET_PAIR=10 + SSF_GET_PAIR=10 SF_NETWORK_PROTOCOL=76 SSF_ETHERNET_READ_MAC=0 SSF_IP4_PACKETS_SENT=10000h @@ -283,6 +290,9 @@ SF_FUTEX=77 SSF_DESTROY=1 SSF_WAIT=2 SSF_WAKE=3 + SSF_FILE_READ=10 + SSF_FILE_WRITE=11 + SSF_PIPE_CREATE=13 ; File system errors: FSERR_SUCCESS=0