Ejemplo n.º 1
0
void kthread_set_syscall_retval ( kthread_t *kthread, int ret_val )
{
	if ( !kthread )
		kthread = active_thread;
	ASSERT ( kthread );
	arch_syscall_set_retval ( kthread_get_context(kthread), ret_val );
}
/*!
 * Process syscalls
 * (syscall is forwarded from arch interrupt subsystem to k_syscall)
 */
void k_syscall ( uint irqn )
{
	int id, retval;
	void *act_thr, *context, *params;

	ASSERT ( irqn == SOFTWARE_INTERRUPT );

	act_thr = k_get_active_thread ();
	context = k_get_thread_context ( act_thr );

	id = arch_syscall_get_id ( context );

	ASSERT ( id >= 0 && id < SYSFUNCS );

	params = arch_syscall_get_params ( context );

	retval = k_sysfunc[id] ( params );

	if ( id != THREAD_EXIT )
		arch_syscall_set_retval ( context, retval );
}