diff options
Diffstat (limited to 'doc/syscalls.txt')
-rw-r--r-- | doc/syscalls.txt | 121 |
1 files changed, 30 insertions, 91 deletions
diff --git a/doc/syscalls.txt b/doc/syscalls.txt index 8053b38..28eb636 100644 --- a/doc/syscalls.txt +++ b/doc/syscalls.txt @@ -14,100 +14,39 @@ id=eax Name Parameters Description edx: stack pointer 6 irq_wait ebx: irq number Waits for an IRQ (requires privilege PL_DRIVER) 7 proc_priv none Returns current process privilege level - 8 shm_create ebx: offset Create a shared memory segment at offset (ret = errcode) + 8 proc_setheap + 9 shm_create ebx: offset Create a shared memory segment at offset (ret = errcode) ecx: length - 9 shm_delete ebx: offset Delete a shared memory segment at offset (ret = errcode) - 10 object_create none Creates an object for current process (returns a descriptor to it) - 11 object_owned ebx: object descriptor True (1) if object with this descriptor is ours, false(0) elsewhere - 12 object_close ebx: object descriptor Closes descriptor to an object (deleting it if necessary) - 13 request_get ebx: object descriptor Gets a request pending on object (only if we own it) - ecx: pointer to write request - edx: wait for a request ? - 14 request_has ebx: object descriptor Is there a request waiting on this object ? - 15 request_answer ebx: object descriptor - ecx, edx: answer Answer a request on object - 16 request_mapShm ebx: object descriptor Map shared memory sent with request to receiver's address space - ecx: offset - edx: parameter number (0, 1 or 2) - 17 request ebx: object descriptor Send a blocking request to object - ecx: pointer to user_sendrequest struct with information - 18 send_msg same as above Send a nonblocking request to object, same as above - 19 proc_setheap ebx: start address Creates/resizes/moves the heap segment allocated to this process (one per process) - ecx: end address + 10 shm_delete ebx: offset Delete a shared memory segment at offset (ret = errcode) + 11 msg_register ebx: service id Registers current process as owner of a system channel (ret = errcode) + 12 msg_send ebx: receiver pid Sends a message to pid or owner of system channel + ecx: message data ptr + edx: message length + 13 msg_info ebx: answer struct ptr Get info on the first message of the queue for this process + ecx: wait? + 14 msg_get ebx: pointer to data Gets the data for first message on the queue; deletes message from queue + If a processes wishes to exit with an error code, it HAS to use process_exit. thread_exit will do nothing. ====== SYSCALL DESCRIPTION ====== -= object_create (10) -Parameters: none -Returns: descriptor to created object, 0 if failure (should not happen) -Creates an object belonging to current proces. - -= object_owned (11) -Parameters: an object descriptor -Returns: -- 1 if object belongs to current process -- 0 if object does not belong to current process -- -10 if descriptor does not exist - -= object_close (12) -Parameters: an object descriptor -Returns: nothing -Closes a given descriptor to an object. If descriptor does not exist, call is ignored. - -= request_get (13) -Parameters: an object descriptor, a pointer to a location to write request, a boolean : wait for a request? -Returns: -- -10 if descriptor does not exist -- -2 if object is not possesed by current process -- -3 if a blocking request is currently being processed -- -1 if no request is pending and [wait] is not set -- 0 if a request was written to location (call successful) -Fetches a waiting request or message on object, and deletes it or acknowledge it. - -= request_has (14) -Parameters: an object descriptor -Returns: -- -10 if descriptor does not exist -- -2 if object is not possesed by current process -- 0 if no request is pending -- 1 if a waiting request is there -- 2 if a request is being processed - -= request_answer (15) -Parameters: an object descriptor, two ints forming a long long if necessary, an int which is the return status (error code) of the function -Returns: nothing -Answers a request marked as currently being processed, ignoring cases where : -- descriptor does not exist -- object does not belong to process -- no request was being processed - -= request_mapShm (16) -Parameters: [id] object descriptor, [pos] pointer to a location, [number] int -Returns: -- -9 if [number] < 0 or [number] > 2 -- -10 if descriptor does not exist -- -2 if object is not possesed by current process -- -3 if no request is being processed -- -4 if there is usually no shared memory in parameter [number] -- -7 if sender process is receiver process, in which case memory is already mapped somewhere -- -5 if no shared memory was sent by this parameter -- 0 if shared memory in parameter [number] of currently processed request of object [id] was mapped at [pos] - -= request (17) -Parameters: [id] object descriptor, [pos] pointer to request data -Returns: -- -1 if an unknown error happened (should not happen) -- -10 if descriptor does not exist -- -11 if objet cannot handle requests -- -2 if request was interrupted -- 0 if request was handled and result written in [pos]->answer - -= send_msg (18) -Parameters: [id] object descriptor, [pos] pointer to request data -Returns: -- -1 if an unknown error happened (should not happen) -- -10 if descriptor does not exist -- -11 if object cannot handle requests -- 0 if nonblocking message was sent += msg_register (10) +Parameters: requested system channel id (int) +Returns: errorcode or 0 on success +Registers current process as owner of given system channel. + += msg_send (11) +Parameters: receiver pid (signed! int), data ptr (void*), data len (unsigned) +Returns: errorcode or 0 on success +Sends a message to given PID or owner of given system channel. + += msg_info (12) +Parameters: pointer to answer struct (msg_info_answer*), wait for request? (bool) +Returns: nothing (all is in answer struct) +Gets info on waiting messages for current process. + += msg_get (13) +Parameters: pointer to data struct (void*) +Returns: errorcode or 0 on failure +Gets the data for a message that is in the queue. |