summaryrefslogblamecommitdiff
path: root/doc/syscalls.txt
blob: 67b4b3c4a7e05fa11efd2c4dcca72c810d72c31b (plain) (tree)
1
2
3
4
5
6
7
8
9
10





                                                                                   
                                                                                                                              


                                                                                                                                
                                                                                         

                                                                                            
                                                                                                                       



                                                                                                                                        














                                                                                                                                  

                                                                                                                                          

                                                                                                          







































                                                                                                           
                                                                                                                                           

































                                                                                                            
Syscalls pass by int64. The identifier of the called function is in eax, parameters
are in ebx, ecx, edx, esi, edi.

Syscall list :

id=eax	Name			Parameters				Description
  0		thread_exit		none					Signal kernel that current thread has finished
  1		schedule		none					Switch to next thread (might be the current one)
  2		thread_sleep	ebx: time (int) msecs	Tell kernel to put current thread to sleep
  3		process_exit	ebx: return value (int)	Tell kernel to end current process, cleaning up everything
  4		printk			ebx: addr of a string	Print a message to screen
  5		thread_new		ebx: entry point		Creates a new thread
						ecx: data 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)
						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

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