{"@attributes":{"version":"2.0"},"channel":{"title":"The Ares Operating System on Ares","link":"https:\/\/ares-os.org\/","description":"Recent content in The Ares Operating System on Ares","generator":"Hugo -- gohugo.io","language":"en-us","item":[{"title":"writecons","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/writecons\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/writecons\/","description":"writecons # Property Details Name SYS_writecons Syscall number 0 The writecons syscall writes bytes to the kernel console, which is generally a serial console or VGA console. The provided data must consist only of ASCII characters.\nArguments # Register Name Type Description arg1 address uintptr pointer to data to write arg2 length size length of buffer Return value # Returns the amount of data written.\nErrors # INVALID_PARAM: All or part of the range of bytes from address to address + length is not mapped into the current task&rsquo;s vspace."},{"title":"yield","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/yield\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/yield\/","description":"yield # Property Details Name SYS_yield Syscall number 1 The yield syscall yields the current task&rsquo;s remaining time slice to the scheduler.\nArguments # This syscall accepts no arguments.\nReturn value # Zero.\nErrors # This syscall never returns an error."},{"title":"identify","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/identify\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/identify\/","description":"identify # Property Details Name SYS_identify Syscall number 2 The identify syscall determines the identity and rights of a capability.\nArguments # Register Type Description arg1 caddr capability to identify Return value # Details about the capability are returned in ret2:\nBits Description 0 SEND rights (1 = can send) 1 RECV rights (1 = can recv) 2-7 Capability type Errors # INVALID_CADDR: The provided capability address exceeds the bounds of the calling task&rsquo;s cspace."},{"title":"send","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/send\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/send\/","description":" send # Property Details Name SYS_send Syscall number 3 The send syscall invokes a SEND operation on a capability.\nArguments # See IPC.\nReturn value # See IPC.\nErrors # ACCESS: The invoked capability does not have the SEND permission. INVALID_CADDR: The invoked capability address exceeds the current task&rsquo;s cspace. "},{"title":"recv","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/recv\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/recv\/","description":"recv # This page is a stub."},{"title":"signal","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/signal\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/signal\/","description":"signal # This page is a stub."},{"title":"wait","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/wait\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/wait\/","description":"wait # This page is a stub."},{"title":"nbsend","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/nbsend\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/nbsend\/","description":"nbsend # This page is a stub."},{"title":"nbrecv","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/nbrecv\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/nbrecv\/","description":"nbrecv # This page is a stub."},{"title":"nbwait","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/nbwait\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/nbwait\/","description":"nbwait # This page is a stub."},{"title":"call","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/call\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/call\/","description":"call # This page is a stub."},{"title":"reply","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/reply\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/reply\/","description":"reply # This page is a stub."},{"title":"poll","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/poll\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/poll\/","description":"poll # This page is a stub."},{"title":"pollx","link":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/pollx\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/syscalls\/pollx\/","description":"pollx # This page is a stub."},{"title":{},"link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/null\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/null\/","description":"Null # A null capability is stored in an &ldquo;empty&rdquo; capability slot and has no associated operations."},{"title":"ASID control","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/asid-control\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/asid-control\/","description":"ASID Control # The ASID (Address Space IDentifier) control capability is used to manage pools of address space identifiers. The only operation supported by the ASID pool capability is &ldquo;MAKE_POOL&rdquo;, which is used to allocate pools of address space IDs. Each VSpace must be assigned an ASID before use; see ASIDPool::ASSIGN.\nThe number of ASID pools available on each system is fixed. Userspace is responsible for allocating ASIDs and unmapping VSpaces to manage the finite supply per userspace policy."},{"title":"ASID pool","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/asid-pool\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/asid-pool\/","description":"ASID Pool # An ASID (Address Space ID) pool stores a pool of ASIDs which may be assigned to a VSpace. See ASID Control for details.\nOperations # ASIDPool::ASSIGN # Assigns a free ASID from this pool to the given VSpace.\nParameters # This operation accepts no parameters.\nCapabilities # CSlot Usage Type Details 0 In VSpace Assign ASID to this VSpace Results # Error code Meaning NONE Success NOMEM No more ASIDs available INVALID_ASID The provided VSpace already has an assigned ASID Semantics # Destroy # When destroyed, all VSpaces mapped by this ASID pool are unmapped."},{"title":"Build environment","link":"https:\/\/ares-os.org\/docs\/mercury\/buildenv\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/mercury\/buildenv\/","description":"Mercury build environment # Note: These docs describe the desired design of Mercury, but these features are not yet complete.\nIn order to make use of Mercury, the user must activate the Mercury build environment in their shell. This is accomplished by sourcing a shell script which is installed alongside Mercury:\n. mercuryenv This will configure the shell to build drivers for the host architecture. To cross-compile:\n. mercuryenv-aarch64 Then simply run make to build a driver."},{"title":"CSpace","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/cspace\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/cspace\/","description":"CSpace # A CSpace (capability space) stores capabilities. Each CSpace stores a configurable number of capabilities, 2n, where n is provided to Memory::ALLOCATE in the optional size parameter, such that allocating a CSpace with N=8 will create a CSpace which can store 256 capabilities. Upon creation, a CSpace is filled with Null capabilities.\nA notable use of a CSpace is its assignment to a Task, which allows that task to invoke operations against capabilities, which is necessary for most tasks to perform useful operations."},{"title":"Device memory","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/devmem\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/devmem\/","description":"Device memory # Device memory capabilities hold a range of physical memory addresses from which pages may be allocated for the purpose of memory-mapped I\/O. Device memory capabilities may be subdivided into smaller device memory capabilities, and userspace must strategically choose the size of the sub-capabilities in a manner appropriate for the allocation the desired physical memory addresses.\nFor example, consider a device memory capability which represents the physical memory range 0x4000000-0x8000000."},{"title":"Driver manifests","link":"https:\/\/ares-os.org\/docs\/mercury\/manifest.ini\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/mercury\/manifest.ini\/","description":"Driver manifests # Driver manifests are used by the devloader service when loading driver processes to add additional capabilities and services to facilitate driver operations.\nThe manifest is an INI file which is stored in the driver&rsquo;s ELF file in a special &ldquo;.manifest&rdquo; section.\nFollowing this various INI sections may appear to tune various features of the driver loader.\n[capabilities] # The capabilities section of the driver management is used to request specific capabilities from the driver loader."},{"title":"Endpoint","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/endpoint\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/endpoint\/","description":"Endpoint # An endpoint is a general-purpose object used for IPC (inter-process communication) and may be used to send or receive messages, or transfer capabilities, between Tasks.\nEndpoints use a rendezvous model, wherein one end of an operation calls &ldquo;recv&rdquo; and blocks until a sender is available, and the other end calls &ldquo;send&rdquo; and blocks until a receiver is available (or, alternatively, &ldquo;call&rdquo; and &ldquo;reply&rdquo; are used). Once a task is blocked on either end, the operation completes."},{"title":"Faults","link":"https:\/\/ares-os.org\/docs\/helios\/faults\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/faults\/","description":"Faults # This page is a stub."},{"title":"I\/O Control","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/iocontrol\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/iocontrol\/","description":"I\/O Control # This page is a stub."},{"title":"I\/O Port","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/ioport\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/ioport\/","description":"I\/O Port # This page is a stub."},{"title":"IPC","link":"https:\/\/ares-os.org\/docs\/helios\/ipc\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/ipc\/","description":"Interprocess Communication # This page is a stub"},{"title":"ipcgen","link":"https:\/\/ares-os.org\/docs\/mercury\/ipcgen\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/mercury\/ipcgen\/","description":"ipcgen # This page is a stub."},{"title":"IRQ Control","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/irq\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/irq\/","description":"IRQ Control # This page is a stub."},{"title":"IRQ Handler","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/irqhandler\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/irqhandler\/","description":"IRQ Handler # This page is a stub."},{"title":"Memory","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/memory\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/memory\/","description":"Memory # Memory capabilities represent a range of conventional physical memory available for the allocation of pages and kernel objects. The allocation of most other capabilities requires the use of a memory capability in order to store the state associated with its respective kernel object.\nOnly the following capabilities support allocation via this interface:\nCSpace Endpoint Notification Page Task VSpace PDPT, PD, PT (x86_64) L1PT, L2PT, L3PT (aarch64) Operations # Memory::ALLOCATE # Allocates new kernel objects."},{"title":"Notification","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/notification\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/notification\/","description":"Notification # Notification capabilities are used for asynchronous IPC (inter-process communication) between tasks. Two operations are supported: signal and wait. A task calling &ldquo;wait&rdquo; will block until the notification is signalled (or will return immediately if the notification was signalled prior to the wait call). A call to &ldquo;signal&rdquo; never blocks. A non-blocking wait operation is also available via the nbwait syscall.\nIf multiple tasks are blocked on a &ldquo;wait&rdquo; operation, &ldquo;signal&rdquo; wakes up all of them."},{"title":"PD","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/pd\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/pd\/","description":"PD # This page is a stub."},{"title":"PDPT","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/pdpt\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/pdpt\/","description":"PDPT # This page is a stub."},{"title":"PT","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/pt\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/x86_64\/pt\/","description":"PT # This page is a stub."},{"title":"Reply","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/reply\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/reply\/","description":"Reply # This page is a stub."},{"title":"sysinit","link":"https:\/\/ares-os.org\/docs\/mercury\/sysinit\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/mercury\/sysinit\/","description":"sysinit # The sysinit program provided by Mercury initializes the system and provides critical low-level runtime services for drivers and other processes. It provides the following services:\nService Interface Bootstrap filesystem fs Device manager* devmgr Device registry* devregistry Driver loader* devloader Physical memory manager* pmem Process manager procmgr &amp; process Memory manager mmapper &amp; munmapper * Available to drivers via the services manifest\nProcess loader # The process manager service may be used to query running processes or set up new ones."},{"title":"System initialization","link":"https:\/\/ares-os.org\/docs\/helios\/sysinit\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/sysinit\/","description":"System initialization # During boot, the kernel initializes the hardware and prepares the &ldquo;init&rdquo; task. The init process image (an ELF file) is provided to the kernel through the bootloader, such as (on x86_64) via multiboot modules, similar to an initramfs on Unix-like systems. The kernel will allocate an address space and physical pages to map the ELF sections into, as well as a capability space and various architecture-specific objects (such as an IOControl capability to manage I\/O ports on x86_64)."},{"title":"Task","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/task\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/task\/","description":"Task # A Task capability represents a schedulable object which may receive CPU time, i.e. a thread or process. A schedulable Task has an associated VSpace, CSpace, IPC buffer, and stores its registers and other state.\nOperations # Task::CONFIGURE # Configures a task&rsquo;s associated CSpace, VSpace, and IPC buffer address. The caller must ensure that the provided IPC buffer address is mapped into the appropriate VSpace.\nParameters # Register Details r0 IPC buffer virtual address Capabilities # CSlot Usage Type Details 0 In CSpace CSpace to assign to this task 1 In VSpace VSpace to assign to this task Results # Error code Meaning NONE Success INVALID_PARAM IPC buffer address is not page-aligned INVALID_PARAM IPC buffer is not mapped in the given VSpace Task::READ_REGISTERS # TODO"},{"title":"VSpace","link":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/vspace\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ares-os.org\/docs\/helios\/capabilities\/vspace\/","description":"VSpace # This page is a stub."}]}}