cleanup: update syscall man page

This commit is contained in:
2026-08-29 12:38:25 +02:00
parent 5cd5c2e6be
commit 9051b8a16e
+129 -31
View File
@@ -3,10 +3,9 @@
syscalls - overview of MontaukOS system calls syscalls - overview of MontaukOS system calls
.SH DESCRIPTION .SH DESCRIPTION
MontaukOS provides 150 system calls (numbers 0-149, sparsely MontaukOS provides 176 system calls (numbers 0-184, with numbers
assigned -- not every number in the range is in use) for 140-148 reserved) for userspace programs. Syscalls use the x86-64
userspace programs. Syscalls use the x86-64 SYSCALL instruction SYSCALL instruction with the following register convention:
with the following register convention:
RAX Syscall number (in) / return value (out) RAX Syscall number (in) / return value (out)
RDI Argument 1 RDI Argument 1
@@ -44,13 +43,20 @@
int montauk::spawn(const char* path, const char* args = nullptr); int montauk::spawn(const char* path, const char* args = nullptr);
.B SYS_WAITPID (23) .B SYS_WAITPID (23)
Block until the given process has exited. Block until the given process has exited. Returns 0-255 for a normal
void montauk::waitpid(int pid); exit, 256 plus the signal number if it was killed or crashed, or 0 if
the PID is unknown or its exit record is no longer available.
int montauk::waitpid(int pid);
.B SYS_GETARGS (25) .B SYS_GETARGS (25)
Get the argument string passed to this process at spawn time. Get the argument string passed to this process at spawn time.
int montauk::getargs(char* buf, uint64_t maxLen); int montauk::getargs(char* buf, uint64_t maxLen);
.B SYS_GETEXECPATH (151)
Copy the absolute path from which this process was spawned into buf.
Returns the copied path length, or -1 on invalid arguments.
int mtk_getexecpath(char* buf, unsigned long maxLen);
.B SYS_GETENVIRON (171), SYS_SETENVIRON (172), SYS_SPAWN_ENV (173) .B SYS_GETENVIRON (171), SYS_SETENVIRON (172), SYS_SPAWN_ENV (173)
Libc process-environment transport. Environment data is encoded as Libc process-environment transport. Environment data is encoded as
consecutive NAME=VALUE strings with a final empty string. Applications consecutive NAME=VALUE strings with a final empty string. Applications
@@ -95,7 +101,7 @@
int montauk::getuser(char* buf, uint64_t maxLen); int montauk::getuser(char* buf, uint64_t maxLen);
.SH THREADING .SH THREADING
Threads share the spawning process's address space and heap Threads share the calling process's address space and heap
(see montauk/heap.h for the heap lock). Declared in (see montauk/heap.h for the heap lock). Declared in
montauk/thread.h. montauk/thread.h.
@@ -146,9 +152,9 @@
void montauk::close(int handle); void montauk::close(int handle);
.B SYS_READDIR (10) .B SYS_READDIR (10)
List directory entries (max 256 per call for VFS directories, List directory entries (max 256 per call for ramdisk directories,
128 for driver-backed listings such as 0:/os/). For larger 128 for FAT32 and ext2 directories). For larger directories use
directories use SYS_READDIR_AT. SYS_READDIR_AT.
int montauk::readdir(const char* path, const char** names, int max); int montauk::readdir(const char* path, const char** names, int max);
.B SYS_READDIR_AT (136) .B SYS_READDIR_AT (136)
@@ -182,6 +188,15 @@
manager move operations). manager move operations).
int montauk::frename(const char* oldPath, const char* newPath); int montauk::frename(const char* oldPath, const char* newPath);
.B SYS_STAT (152)
Get a path's size, timestamps, mode, and directory status.
int montauk::stat(const char* path, montauk::abi::FileStat* out);
.B SYS_UTIME (167)
Set a path's access and modification timestamps. This is the kernel
transport used by the libc utime(3) interface.
int utime(const char* path, const struct utimbuf* times);
.B SYS_DRIVELIST (79) .B SYS_DRIVELIST (79)
List mounted drive numbers. List mounted drive numbers.
int montauk::drivelist(int* outDrives, int max); int montauk::drivelist(int* outDrives, int max);
@@ -234,13 +249,18 @@
uint64_t montauk::get_milliseconds(); uint64_t montauk::get_milliseconds();
.B SYS_GETTIME (28) .B SYS_GETTIME (28)
Get the current wall-clock date and time (UTC). Get the current wall-clock date and time in the configured timezone.
Fills a montauk::abi::DateTime struct with Year, Month, Day, Fills a montauk::abi::DateTime struct with Year, Month, Day,
Hour, Minute, and Second fields. Hour, Minute, and Second fields.
void montauk::gettime(montauk::abi::DateTime* out); void montauk::gettime(montauk::abi::DateTime* out);
.B SYS_SETUNIXTIME (153)
Set the system wall clock from a UTC Unix timestamp. Returns 0 on
success or -1 if the timestamp is outside the supported range.
int montauk::set_unix_time(int64_t unixSeconds);
.B SYS_SETTZ (90) .B SYS_SETTZ (90)
Set the process/system timezone offset, in minutes from UTC. Set the system-wide timezone offset, in minutes from UTC.
void montauk::settz(int offset_minutes); void montauk::settz(int offset_minutes);
.B SYS_GETTZ (91) .B SYS_GETTZ (91)
@@ -276,7 +296,8 @@
Block until the input serial number differs from Block until the input serial number differs from
observedSerial or the timeout elapses; used to sleep observedSerial or the timeout elapses; used to sleep
efficiently between input-driven redraws. efficiently between input-driven redraws.
uint64_t montauk::input_wait(uint64_t observedSerial, uint64_t timeoutMs); uint64_t montauk::input_wait(uint64_t observedSerial,
uint64_t timeoutMs);
.SH MOUSE .SH MOUSE
.B SYS_MOUSESTATE (47) .B SYS_MOUSESTATE (47)
@@ -315,6 +336,48 @@
and RX/TX packet counters. and RX/TX packet counters.
int montauk::net_status(montauk::abi::NetStatus* out); int montauk::net_status(montauk::abi::NetStatus* out);
.B SYS_NETIFS (165)
List registered link-layer network interfaces. The global IP
configuration belongs to the entry whose active field is set.
int montauk::net_interfaces(montauk::abi::NetIfInfo* buf,
int maxCount);
.SH WI-FI
.B SYS_WIFI_SCAN (158)
Perform a channel scan and block until it finishes or timeoutMs
elapses. Returns the number of results, or -1 if no adapter is ready.
int montauk::wifi_scan(montauk::abi::WifiNetwork* buf,
int maxCount, uint32_t timeoutMs);
.B SYS_WIFI_INFO (159)
Get adapter, link, scan, join, and last-error status.
int montauk::wifi_info(montauk::abi::WifiInfo* out);
.B SYS_WIFI_CONNECT (160)
Join a network and block until the link is up or the attempt fails.
int montauk::wifi_connect(const char* ssid,
const char* password);
.B SYS_WIFI_DISCONNECT (161)
Disconnect from the current Wi-Fi network.
int montauk::wifi_disconnect();
.B SYS_WIFI_SCAN_START (162)
Start a non-blocking channel scan. Returns 0 if started, 1 if a scan
is already running, or -1 if no adapter is ready.
int montauk::wifi_scan_start(uint32_t timeoutMs);
.B SYS_WIFI_RESULTS (163)
Copy results from the most recent scan without accessing the radio.
int montauk::wifi_results(montauk::abi::WifiNetwork* buf,
int maxCount);
.B SYS_WIFI_CONNECT_ASYNC (164)
Start a non-blocking network join. Observe SYS_WIFI_INFO for progress
and the final result.
int montauk::wifi_connect_async(const char* ssid,
const char* password);
.SH SOCKETS .SH SOCKETS
.B SYS_SOCKET (29) .B SYS_SOCKET (29)
Create a socket. type=SOCK_TCP (1) or SOCK_UDP (2). Create a socket. type=SOCK_TCP (1) or SOCK_UDP (2).
@@ -370,6 +433,30 @@
Map the framebuffer into process memory. Map the framebuffer into process memory.
void* montauk::fb_map(); void* montauk::fb_map();
.B SYS_FBFLIP (150)
Flip between double-buffered hardware scanout buffers. Index -1
queries support; index -2 acquires ownership and returns the current
front-buffer index. Flag bit 0 waits for vertical blank.
int64_t montauk::fb_flip(int64_t index, uint64_t flags);
.SH DISPLAY CONTROL
.B SYS_DISPLAYINFO (154)
Get connector, mode, capability, and brightness information.
int montauk::display_info(montauk::abi::DisplayInfo* out);
.B SYS_DISPLAYMODES (155)
Enumerate supported display modes. Returns the number written.
int montauk::display_modes(montauk::abi::DisplayModeInfo* out,
int maxCount);
.B SYS_DISPLAYSETMODE (156)
Switch to a mode returned by SYS_DISPLAYMODES.
int montauk::display_set_mode(int modeIndex);
.B SYS_DISPLAYBRIGHTNESS (157)
Set brightness to 0-100 percent, or pass -1 to query it.
int montauk::display_brightness(int percent = -1);
.SH TERMINAL .SH TERMINAL
.B SYS_TERMSIZE (24) .B SYS_TERMSIZE (24)
Get terminal dimensions (columns and rows). Get terminal dimensions (columns and rows).
@@ -414,8 +501,9 @@
Get the CPU power/thermal snapshot (HWP state, throttling, Get the CPU power/thermal snapshot (HWP state, throttling,
package temperature, base/max/effective frequency). Returns 0 package temperature, base/max/effective frequency). Returns 0
on success, -1 if unsupported by the running hardware. on success, -1 if unsupported by the running hardware.
int montauk::syscall1(SYS_POWERINFO, (uint64_t)&out); montauk::abi::PowerInfo out;
// out: montauk::abi::PowerInfo* int64_t rc = montauk::syscall1(
montauk::abi::SYS_POWERINFO, (uint64_t)&out);
.SH KERNEL LOG .SH KERNEL LOG
.B SYS_LOG (46) .B SYS_LOG (46)
@@ -445,7 +533,8 @@
.B SYS_CHILDIO_WRITEKEY (52) .B SYS_CHILDIO_WRITEKEY (52)
Forward a raw key event to a redirected child. Forward a raw key event to a redirected child.
int montauk::childio_writekey(int childPid, const montauk::abi::KeyEvent* key); int montauk::childio_writekey(
int childPid, const montauk::abi::KeyEvent* key);
.B SYS_CHILDIO_SETTERMSZ (53) .B SYS_CHILDIO_SETTERMSZ (53)
Tell a redirected child its terminal dimensions changed. Tell a redirected child its terminal dimensions changed.
@@ -595,18 +684,21 @@
audio_set_volume, audio_get_volume AUDIO_CTL_{SET,GET}_VOLUME (0/1) audio_set_volume, audio_get_volume AUDIO_CTL_{SET,GET}_VOLUME (0/1)
audio_get_pos AUDIO_CTL_GET_POS (2) audio_get_pos AUDIO_CTL_GET_POS (2)
audio_pause, audio_resume AUDIO_CTL_PAUSE (3) audio_pause, audio_resume AUDIO_CTL_PAUSE (3)
audio_get_output AUDIO_CTL_GET_OUTPUT (4): 0=HDA, 1=Bluetooth audio_get_output GET_OUTPUT (4): 0=HDA, 1=Bluetooth
audio_set_output AUDIO_CTL_SET_OUTPUT (5): switch all streams audio_set_output SET_OUTPUT (5): all streams
(SET_OUTPUT, 5) switch a stream's output route audio_ctl(handle, 5, output) SET_OUTPUT (5): one stream
audio_bt_status AUDIO_CTL_BT_STATUS (6): 0=unavailable, 1=setup, 2=ready audio_bt_status BT_STATUS (6): unavailable/setup/ready
audio_set_master_volume, _get_ AUDIO_CTL_{SET,GET}_MASTER_VOLUME (7/8), 0-100 audio_set_master_volume SET_MASTER_VOLUME (7), 0-100
audio_set_mute, audio_get_mute AUDIO_CTL_{SET,GET}_MUTE (9/10), per-stream audio_get_master_volume GET_MASTER_VOLUME (8)
audio_set_master_mute, _get_ AUDIO_CTL_{SET,GET}_MASTER_MUTE (11/12) audio_set_mute, audio_get_mute MUTE (9/10), per-stream
audio_set_master_mute SET_MASTER_MUTE (11)
audio_get_master_mute GET_MASTER_MUTE (12)
.B SYS_AUDIOLIST (128) .B SYS_AUDIOLIST (128)
Enumerate active mixer streams (owner PID, name, format, Enumerate active mixer streams (owner PID, name, format,
volume, mute/pause state). volume, mute/pause state).
int montauk::audio_list(montauk::abi::AudioStreamInfo* buf, int maxCount); int montauk::audio_list(montauk::abi::AudioStreamInfo* buf,
int maxCount);
.B SYS_AUDIOWAIT (129) .B SYS_AUDIOWAIT (129)
Return the current mixer state serial. With timeoutMs > 0, Return the current mixer state serial. With timeoutMs > 0,
@@ -662,7 +754,8 @@
List currently connected USB interfaces. Each UsbInterfaceInfo contains List currently connected USB interfaces. Each UsbInterfaceInfo contains
stable identifiers for the current connection, endpoint addresses, maximum stable identifiers for the current connection, endpoint addresses, maximum
packet sizes, and kernelDriverBound/claimed flags. packet sizes, and kernelDriverBound/claimed flags.
int montauk::usb_list(montauk::abi::UsbInterfaceInfo* buf, int maxCount); int montauk::usb_list(montauk::abi::UsbInterfaceInfo* buf,
int maxCount);
.B SYS_USB_CLAIM (179) .B SYS_USB_CLAIM (179)
Exclusively claim an unbound interface. Returns a generation-checked handle Exclusively claim an unbound interface. Returns a generation-checked handle
@@ -677,7 +770,8 @@
Execute a USB control transfer on endpoint zero. The requestType direction Execute a USB control transfer on endpoint zero. The requestType direction
bit determines whether data is read or written. request.length must equal bit determines whether data is read or written. request.length must equal
dataLen; control payloads are currently limited to 4096 bytes. dataLen; control payloads are currently limited to 4096 bytes.
int montauk::usb_control(int handle, const montauk::abi::UsbControlRequest* request, int montauk::usb_control(
int handle, const montauk::abi::UsbControlRequest* request,
void* data, uint32_t dataLen); void* data, uint32_t dataLen);
.B SYS_USB_BULK_IN_START (182) .B SYS_USB_BULK_IN_START (182)
@@ -721,7 +815,8 @@
.B SYS_CLIPBOARD_GET_TEXT (121) .B SYS_CLIPBOARD_GET_TEXT (121)
Read the clipboard's text contents. Read the clipboard's text contents.
int montauk::clipboard_get_text(char* buf, uint32_t bufLen, int montauk::clipboard_get_text(char* buf, uint32_t bufLen,
uint32_t* outLen, uint64_t* outSerial = nullptr); uint32_t* outLen,
uint64_t* outSerial = nullptr);
.B SYS_CLIPBOARD_CLEAR (122) .B SYS_CLIPBOARD_CLEAR (122)
Clear the clipboard. Clear the clipboard.
@@ -766,13 +861,15 @@
.B SYS_MAILBOX_SEND (104) .B SYS_MAILBOX_SEND (104)
Send a typed message, optionally attaching a handle to Send a typed message, optionally attaching a handle to
transfer to the receiver. transfer to the receiver.
int montauk::mailbox_send(int handle, uint32_t msgType, const void* data, int montauk::mailbox_send(int handle, uint32_t msgType,
uint16_t len, int attachHandle = -1); const void* data, uint16_t len,
int attachHandle = -1);
.B SYS_MAILBOX_RECV (105) .B SYS_MAILBOX_RECV (105)
Receive a message. Receive a message.
int montauk::mailbox_recv(int handle, uint32_t* outMsgType, void* data, int montauk::mailbox_recv(int handle, uint32_t* outMsgType, void* data,
uint16_t* inOutLen, int* outAttachHandle = nullptr); uint16_t* inOutLen,
int* outAttachHandle = nullptr);
.B SYS_WAITSET_CREATE (106) .B SYS_WAITSET_CREATE (106)
Create a waitset for multiplexing waits across many handles. Create a waitset for multiplexing waits across many handles.
@@ -790,7 +887,8 @@
.B SYS_WAITSET_WAIT (109) .B SYS_WAITSET_WAIT (109)
Block until any member handle's watched signals fire, or Block until any member handle's watched signals fire, or
timeoutMs elapses. timeoutMs elapses.
int montauk::waitset_wait(int waitsetHandle, montauk::abi::IpcWaitResult* outReady, int montauk::waitset_wait(
int waitsetHandle, montauk::abi::IpcWaitResult* outReady,
uint64_t timeoutMs = ~0ULL); uint64_t timeoutMs = ~0ULL);
.B SYS_PROC_OPEN (110) .B SYS_PROC_OPEN (110)