aboutsummaryrefslogtreecommitdiffstats
path: root/tests/nicrealtek.c
blob: 2a7a9ffe1f27f05d3784e156227cef2460814eb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
 * This file is part of the flashrom project.
 *
 * Copyright 2021 Google LLC
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include "lifecycle.h"

#if CONFIG_NICREALTEK == 1
void nicrealtek_basic_lifecycle_test_success(void **state)
{
	struct io_mock_fallback_open_state nicrealtek_fallback_open_state = {
		.noc = 0,
		.paths = { NULL },
	};
	const struct io_mock nicrealtek_io = {
		.fallback_open_state = &nicrealtek_fallback_open_state,
	};

	run_basic_lifecycle(state, &nicrealtek_io, &programmer_nicrealtek, "");
}
#else
	SKIP_TEST(nicrealtek_basic_lifecycle_test_success)
#endif /* CONFIG_NICREALTEK */
(at your option) any later version. ChibiOS/RT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /** * @file chsys.c * @brief System related code. * @addtogroup System * @{ */ #include <ch.h> static WORKING_AREA(idle_thread_wa, IDLE_THREAD_STACK_SIZE); /** * @brief This function implements the idle thread infinite loop. * @details The function puts the processor in the lowest power mode capable * to serve interrupts.<br> * The priority is internally set to the minimum system value so that this * thread is executed only if there are no other ready threads in the system. * * @param p the thread parameter, unused in this scenario * @note Implementation should declare this function as a weak symbol in order * to allow applications to re-implement it. */ static void idle_thread(void *p) { while (TRUE) { port_wait_for_interrupt(); IDLE_LOOP_HOOK(); } } /** * @brief ChibiOS/RT initialization. * @details After executing this function the current instructions stream * becomes the main thread. * * @note Interrupts should be still disabled when @p chSysInit() is invoked * and are internally enabled. * @note The main thread is created with priority @p NORMALPRIO. */ void chSysInit(void) { static Thread mainthread; port_init(); scheduler_init(); debug_init(); vt_init(); #if CH_USE_HEAP heap_init(); #endif /* * Now this instructions flow becomes the main thread. */ (currp = init_thread(&mainthread, NORMALPRIO))->p_state = PRCURR; chSysEnable(); /* * The idle thread is created using the port-provided implementation. * This thread has the lowest priority in the system, its role is just to * serve interrupts in its context while keeping the lowest energy saving * mode compatible with the system status. */ chThdCreateStatic(idle_thread_wa, sizeof(idle_thread_wa), IDLEPRIO, (tfunc_t)idle_thread, NULL); } /** * @brief Handles time ticks for round robin preemption and timer increments. * @details Decrements the remaining time quantum of the running thread * and preempts it when the quantum is used up. Increments system time and * manages the timers. * @note The frequency of the timer determines the system tick granularity and, * together with the @p CH_TIME_QUANTUM macro, the round robin interval. */ void chSysTimerHandlerI(void) { #if CH_USE_ROUNDROBIN /* running thread has not used up quantum yet? */ if (rlist.r_preempt > 0) /* decrement remaining quantum */ rlist.r_preempt--; #endif chVTDoTickI(); } #if CH_USE_NESTED_LOCKS && !CH_OPTIMIZE_SPEED void chSysLock(void) { chDbgAssert(currp->p_locks >= 0, "chinit.c, chSysLock()"); if (currp->p_locks++ == 0) port_lock(); } void chSysUnlock(void) { chDbgAssert(currp->p_locks > 0, "chinit.c, chSysUnlock()"); if (--currp->p_locks == 0) port_unlock(); } #endif /* CH_USE_NESTED_LOCKS && !CH_OPTIMIZE_SPEED */ /** @} */