Changes between Initial Version and Version 1 of kernel_syscalls


Ignore:
Timestamp:
Oct 6, 2014, 3:49:13 PM (10 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • kernel_syscalls

    v1 v1  
     1= GIET-VM  / Syscall Handler functions =
     2
     3The [source:soft/giet_vm/giet_kernel/sys_handler.c sys_handler.c] and [source:soft/giet_vm/giet_kernel/sys_handler.h sys_handler.h] files define the kernel data structure and functions that are used to handle the system calls. They are prefixed by ''_'' to remind that they can only be executed by a processor in kernel mode.
     4
     5The [source:soft/giet_vm/giet_kernel/sys_handler.c _syscall_vector![64!]] array contains the 64 kernel functions defined by the GIET-VM to handle system calls. Most of these functions are provided by the peripheral drivers,
     6but some services are provided by the kernel itself:
     7
     8=== void        _sys_ukn() ===
     9Function executed in case of undefined syscall
     10
     11=== void         _proc_xyp( unsigned int* x,  unsigned int*,   unsigned int* p ) ===
     12This function returns the processor (x,y,p) identifiers.
     13
     14=== void         _task_exit() ===
     15The calling task goes to sleeping state, after printing an exit message.
     16It is descheduled and enters the "not runable" mode.
     17
     18 === void         _context_switch() ===
     19This function deschedules the calling task. It mask interrupts before calling the _ctx_switch, and restore it when the task is rescheduled.
     20
     21 === unsigned int _local_task_id() ===
     22Returns current task local index (amongst tasks running on a given processor).
     23
     24 === unsigned int _global_task_id() ===
     25Returns current task global index (amongst all tasks running on all processors).
     26
     27=== unsigned int _thread_id() ===
     28Returns current thread index (amongst all tasks in a given multi-tasks application).
     29
     30 === unsigned int _procs_number( unsigned int  cluster_id, unsigned int* number ) ===
     31Returns in buffer argument the number of processors in cluster specified by the cluster_id argument.
     32
     33 === unsigned int _get_vobj_ptr( char* vspace_name,  char* vobj_name,  mapping_vobj_t**  pvobj ) ===
     34This function returns in the res_vobj argument a pointer on a vobj identified by the (vspace_name / vobj_name ) couple. Returns 0 if success, >0 if not found
     35
     36
     37
     38/////////////////////////////////////////////////////////////////////////////
     39// This function writes in vobj_vbase the virtual base address of a vobj
     40// identified by the (vspace_name / vobj_name ) couple.
     41// returns 0 if success, >0 if not found
     42/////////////////////////////////////////////////////////////////////////////
     43unsigned int _vobj_get_vbase( char*         vspace_name,
     44                              char*         vobj_name,
     45                              unsigned int* vobj_vbase );
     46
     47/////////////////////////////////////////////////////////////////////////////
     48// This function writes in vobj_length the length of a vobj
     49// identified by the (vspace_name / vobj_name ) couple.
     50// returns 0 if success, >0 if not found
     51/////////////////////////////////////////////////////////////////////////////
     52unsigned int _vobj_get_length( char*         vspace_name,
     53                               char*         vobj_name,
     54                               unsigned int* vobj_length );
     55
     56 === unsigned int _get_xy_from_ptr( void* ptr,  unsigned int*  px,  unsigned int*  py ) ===
     57This function returns in the (x,y) arguments the coordinates of the  cluster where is mapped the ptr virtual address. It use the _get_context_slot() function to get the calling task page table, and uses the _v2p_translate() function to obtain the physical address. Returns 0 if success, > 0 if ptr not mapped in the calling task vspace.
     58
     59
     60
     61
     62