Esempio n. 1
0
/*!
 * Create new alarm
 * \param alarm Alarm parameters
 * \return status (0 for success), but also in 'param->alarm_id' is pointer to
 *		newly created alarm (handler)
 */
int sys__alarm_new ( void **id, alarm_t *alarm )
{
	int retval;

	ASSERT_ERRNO_AND_EXIT ( id && alarm, E_INVALID_HANDLE );

	disable_interrupts ();
	retval = k_alarm_new ( id, alarm );
	enable_interrupts ();

	return retval;
}
/*!
 * Create new alarm
 * \param alarm Alarm parameters
 * \returns status (0 for success), but also in 'param->alarm_id' is pointer to
 *		newly created alarm (handler)
 */
int sys__alarm_new ( void *p )
{
	void **id;
	alarm_t *alarm;

	id = *( (void **) p );	p += sizeof ( void *);
	alarm = *( (void **) p );

	ASSERT_ERRNO_AND_EXIT ( id && alarm, E_INVALID_HANDLE );

	return k_alarm_new ( id, alarm );
}
Esempio n. 3
0
static int edf_arm_deadline ( kthread_t *kthread )
{
	kthread_sched_data_t *tsched = kthread_get_sched_param ( kthread );
	alarm_t alarm;
	
	alarm.action = edf_deadline_timer;
	alarm.param = kthread;
	alarm.flags = 0;
	alarm.period.sec = alarm.period.nsec = 0;
	alarm.exp_time.sec = alarm.exp_time.nsec = 0;

	return k_alarm_new (	&tsched->params.edf.edf_deadline_alarm,
				&alarm,
				KERNELCALL );
}
Esempio n. 4
0
static int edf_arm_period ( kthread_t *kthread )
{
	kthread_sched_data_t *tsched = kthread_get_sched_param ( kthread );
	alarm_t alarm;


	alarm.action = edf_period_timer;
	alarm.param = kthread;
	alarm.flags = ALARM_PERIODIC;
	alarm.period = tsched->params.edf.period;
	alarm.exp_time = tsched->params.edf.next_run;

	return k_alarm_new (	&tsched->params.edf.edf_period_alarm,
				&alarm,
				KERNELCALL );
}
//int sys__alarm_new ( alarm_t *alarm )
int sys__alarm_new ( void *p )
{
	void **id;
	alarm_t *alarm;

	id = *( (void **) p );	p += sizeof ( void *);
	alarm = *( (void **) p );

	ASSERT_ERRNO_AND_EXIT ( id && alarm, E_INVALID_HANDLE );

	id = U2K_GET_ADR ( id, k_get_active_process() );
	alarm = U2K_GET_ADR ( alarm, k_get_active_process() );

	ASSERT_ERRNO_AND_EXIT ( id && alarm, E_INVALID_HANDLE );

	return k_alarm_new ( id, alarm );
}
Esempio n. 6
0
/*! Init RR scheduler */
static int rr_init ( ksched_t *self )
{
	*self = ksched_rr;

	/* reserve an empty alarm */
	self->params.rr.alarm.exp_time.sec = 0;
	self->params.rr.alarm.exp_time.nsec = 0;
	self->params.rr.alarm.period.sec = 0;
	self->params.rr.alarm.period.nsec = 0;
	self->params.rr.alarm.action = rr_timer;
	self->params.rr.alarm.param = NULL;
	self->params.rr.alarm.flags = 0;

	k_alarm_new ( &self->params.rr.rr_alarm, &self->params.rr.alarm,
		      KERNELCALL );

	return 0;
}