/* * Copyright (c) 2013-2014 Wind River Systems, Inc. * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief NMI handler infrastructure * * Provides a boot time handler that simply hangs in a sleep loop, and a run * time handler that resets the CPU. Also provides a mechanism for hooking a * custom run time handler. */ #include #include #include #include #include #include extern void z_SysNmiOnReset(void); #if !defined(CONFIG_RUNTIME_NMI) #define handler z_SysNmiOnReset #endif #ifdef CONFIG_RUNTIME_NMI typedef void (*_NmiHandler_t)(void); static _NmiHandler_t handler = z_SysNmiOnReset; /** * * @brief Install a custom runtime NMI handler * * Meant to be called by platform code if they want to install a custom NMI * handler that reboots. It should be installed after the console is * initialized if it is meant to output to the console. * */ void z_arm_nmi_set_handler(void (*pHandler)(void)) { handler = pHandler; } #endif /* CONFIG_RUNTIME_NMI */ /** * * @brief Handler installed in the vector table * * Simply call what is installed in 'static void(*handler)(void)'. * */ void z_arm_nmi(void) { handler(); z_arm_int_exit(); }