| /* |
| * Copyright (c) 2016 Cadence Design Systems, Inc. |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief Xtensa specific kernel interface header |
| * This header contains the Xtensa specific kernel interface. It is included |
| * by the generic kernel interface header (include/arch/cpu.h) |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_ARCH_XTENSA_ARCH_H_ |
| #define ZEPHYR_INCLUDE_ARCH_XTENSA_ARCH_H_ |
| |
| #include <irq.h> |
| |
| #include <devicetree.h> |
| #if !defined(_ASMLANGUAGE) && !defined(__ASSEMBLER__) |
| #include <zephyr/types.h> |
| #include <toolchain.h> |
| #include <arch/common/sys_bitops.h> |
| #include <arch/common/sys_io.h> |
| #include <arch/common/ffs.h> |
| #include <sw_isr_table.h> |
| #include <arch/xtensa/thread.h> |
| #include <arch/xtensa/irq.h> |
| #include <xtensa/config/core.h> |
| #include <arch/common/addr_types.h> |
| #include <arch/xtensa/gdbstub.h> |
| |
| #ifdef CONFIG_KERNEL_COHERENCE |
| #define ARCH_STACK_PTR_ALIGN XCHAL_DCACHE_LINESIZE |
| #else |
| #define ARCH_STACK_PTR_ALIGN 16 |
| #endif |
| |
| /* Xtensa GPRs are often designated by two different names */ |
| #define sys_define_gpr_with_alias(name1, name2) union { uint32_t name1, name2; } |
| |
| #include <arch/xtensa/exc.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* internal routine documented in C file, needed by IRQ_CONNECT() macro */ |
| extern void z_irq_priority_set(uint32_t irq, uint32_t prio, uint32_t flags); |
| |
| #define ARCH_IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p) \ |
| { \ |
| Z_ISR_DECLARE(irq_p, flags_p, isr_p, isr_param_p); \ |
| } |
| |
| /* Spurious interrupt handler. Throws an error if called */ |
| extern void z_irq_spurious(const void *unused); |
| |
| #define XTENSA_ERR_NORET |
| |
| extern uint32_t sys_clock_cycle_get_32(void); |
| |
| static inline uint32_t arch_k_cycle_get_32(void) |
| { |
| return sys_clock_cycle_get_32(); |
| } |
| |
| extern uint64_t sys_clock_cycle_get_64(void); |
| |
| static inline uint64_t arch_k_cycle_get_64(void) |
| { |
| return sys_clock_cycle_get_64(); |
| } |
| |
| static ALWAYS_INLINE void arch_nop(void) |
| { |
| __asm__ volatile("nop"); |
| } |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* !defined(_ASMLANGUAGE) && !defined(__ASSEMBLER__) */ |
| |
| #endif /* ZEPHYR_INCLUDE_ARCH_XTENSA_ARCH_H_ */ |