Example #1
0
static void tstack_thread_isr(struct k_stack *pstack)
{
	k_sem_init(&end_sema, 0, 1);
	/**TESTPOINT: thread-isr data passing via stack*/
	irq_offload(tIsr_entry_push, pstack);
	tstack_pop(pstack);

	tstack_push(pstack);
	irq_offload(tIsr_entry_pop, pstack);
}
Example #2
0
static int ipm_dummy_send(struct device *d, int wait, uint32_t id,
			  const void *data, int size)
{
	struct ipm_dummy_driver_data *driver_data;
	volatile uint8_t *datareg;
	const uint8_t *data8;
	int i;

	driver_data = d->driver_data;
	if (size > ipm_max_data_size_get(d)) {
		return -EMSGSIZE;
	}

	if (driver_data->regs.busy) {
		return -EBUSY;
	}

	data8 = (const uint8_t *)data;
	datareg = (volatile uint8_t *)driver_data->regs.data;

	for (i = 0; i < size; ++i) {
		datareg[i] = data8[i];
	}
	driver_data->regs.id = id;
	driver_data->regs.busy = 1;

	irq_offload(ipm_dummy_isr, d);

	if (wait) {
		while (driver_data->regs.busy) {
			/* busy-wait */
		}
	}
	return 0;
}
Example #3
0
static void isr_alert(void)
{
	handler_executed = 0;
	/**TESTPOINT: thread-isr sync via alert*/
	irq_offload(tIsr_entry, NULL);
	k_sleep(TIMEOUT);
	alert_recv();
}
Example #4
0
/**
 *
 * @brief Interrupt preparation fiber
 *
 * Fiber makes all the test preparations: registers the interrupt handler,
 * gets the first timestamp and invokes the software interrupt.
 *
 * @return N/A
 */
static void fiberInt(void)
{
	flagVar = 0;
	irq_offload(latencyTestIsr, NULL);
	if (flagVar != 1) {
		PRINT_FORMAT(" Flag variable has not changed. FAILED");
	} else {
		timestamp = TIME_STAMP_DELTA_GET(timestamp);
	}
}
Example #5
0
static int ipm_dummy_set_enabled(struct device *d, int enable)
{
	struct ipm_dummy_driver_data *driver_data = d->driver_data;

	driver_data->regs.enabled = enable;
	if (enable) {
		/* In case there are pending messages */
		irq_offload(ipm_dummy_isr, d);
	}
	return 0;
}
Example #6
0
static void helper_fiber(int arg1, int arg2)
{
	nano_fiber_sem_take(&helper_fiber_sem, TICKS_UNLIMITED);

	/* Wake the test fiber */
	fiber_fiber_wakeup(test_fiber_id);
	nano_fiber_sem_take(&helper_fiber_sem, TICKS_UNLIMITED);

	/* Wake the test fiber from an ISR */
	irq_offload(irq_offload_isr, (void *)test_fiber_id);
}
Example #7
0
static void helper_thread(int arg1, int arg2)
{

	k_sem_take(&helper_thread_sem, K_FOREVER);

	/* Wake the test fiber */
	k_wakeup(test_thread_id);
	k_sem_take(&helper_thread_sem, K_FOREVER);

	/* Wake the test fiber from an ISR */
	irq_offload(irq_offload_isr, (void *)test_thread_id);
}
/*test cases*/
void test_sched_is_preempt_thread(void)
{
	k_sem_init(&end_sema, 0, 1);

	/*create preempt thread*/
	k_tid_t tid = k_thread_spawn(tstack, STACK_SIZE,
		tpreempt_ctx, NULL, NULL, NULL,
		K_PRIO_PREEMPT(1), 0, 0);
	k_sem_take(&end_sema, K_FOREVER);
	k_thread_abort(tid);

	/*create coop thread*/
	tid = k_thread_spawn(tstack, STACK_SIZE,
		tcoop_ctx, NULL, NULL, NULL,
		K_PRIO_COOP(1), 0, 0);
	k_sem_take(&end_sema, K_FOREVER);
	k_thread_abort(tid);

	/*invoke isr*/
	irq_offload(tIsr, NULL);
}
Example #9
0
static void _trigger_nano_isr_stack_pop(void)
{
	irq_offload(isr_stack_pop, &isrStackInfo);
}
Example #10
0
/**
 *
 * @brief Interrupt preparation fiber
 *
 * Fiber makes all the test preparations: registers the interrupt handler,
 * gets the first timestamp and invokes the software interrupt.
 *
 * @return N/A
 */
static void fiberInt(void)
{
	timestamp = TIME_STAMP_DELTA_GET(0);
	irq_offload(latencyTestIsr, NULL);
}
Example #11
0
static void isr_handler_trigger(void)
{
	irq_offload(isr_handler, NULL);
}
Example #12
0
static void tsema_thread_isr(struct k_sem *psem)
{
	/**TESTPOINT: thread-isr sync via sema*/
	irq_offload(tIsr_entry, psem);
	zassert_false(k_sem_take(psem, K_FOREVER), NULL);
}
Example #13
0
/**
 *
 * @brief Interrupt preparation fiber
 *
 * Fiber makes all the test preparations: registers the interrupt handler,
 * gets the first timestamp and invokes the software interrupt.
 *
 * @return N/A
 */
static void fiberInt(void)
{
	irq_offload(latencyTestIsr, NULL);
	fiber_yield();
}
Example #14
0
static void _trigger_nano_isr_sem_take(void)
{
	irq_offload(isr_sem_take, &isrSemInfo);
}
Example #15
0
/**
 *
 * @brief Software interrupt generating thread
 *
 * Lower priority thread that, when it starts, it waits for a semaphore. When
 * it gets it, released by the main thread, sets up the interrupt handler and
 * generates the software interrupt
 *
 * @return 0 on success
 */
void int_thread(void)
{
	k_sem_take(&INTSEMA, K_FOREVER);
	irq_offload(latency_test_isr, NULL);
	k_thread_suspend(k_current_get());
}
Example #16
0
static void _trigger_nano_isr_lifo_get(void)
{
	irq_offload(isr_lifo_get, &isrLifoInfo);
}
Example #17
0
static void _trigger_nano_isr_fifo_put(void)
{
	irq_offload(isr_fifo_put, &isrFifoInfo);
}