|  | /* | 
|  | * Copyright (c) 2016 Jean-Paul Etienne <fractalclone@gmail.com> | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * @file | 
|  | * @brief Kernel event logger support for RISCV32 | 
|  | */ | 
|  |  | 
|  | #ifndef ZEPHYR_ARCH_RISCV32_INCLUDE_TRACING_ARCH_H_ | 
|  | #define ZEPHYR_ARCH_RISCV32_INCLUDE_TRACING_ARCH_H_ | 
|  |  | 
|  | #include <arch/cpu.h> | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @brief Get the identification of the current interrupt. | 
|  | * | 
|  | * This routine obtain the key of the interrupt that is currently processed | 
|  | * if it is called from an IRQ context. | 
|  | * | 
|  | * @return The key of the interrupt that is currently being processed. | 
|  | */ | 
|  | static inline int _sys_current_irq_key_get(void) | 
|  | { | 
|  | u32_t mcause; | 
|  |  | 
|  | __asm__ volatile("csrr %0, mcause" : "=r" (mcause)); | 
|  |  | 
|  | mcause &= SOC_MCAUSE_EXP_MASK; | 
|  |  | 
|  | return mcause; | 
|  | } | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif /* ZEPHYR_ARCH_RISCV32_INCLUDE_TRACING_ARCH_H_ */ |