Zephyr API Documentation 4.1.99
A Scalable Open Source RTOS
 4.1.99
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
arch.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Antony Pavlov <antonynpavlov@gmail.com>
3 *
4 * based on include/arch/sparc/arch.h
5 *
6 * SPDX-License-Identifier: Apache-2.0
7 */
8
18#ifndef ZEPHYR_INCLUDE_ARCH_MIPS_ARCH_H_
19#define ZEPHYR_INCLUDE_ARCH_MIPS_ARCH_H_
20
26
27#include <zephyr/irq.h>
28#include <zephyr/sw_isr_table.h>
29#include <zephyr/devicetree.h>
30#include <mips/mipsregs.h>
31
32#define ARCH_STACK_PTR_ALIGN 16
33
34#define OP_LOADREG lw
35#define OP_STOREREG sw
36
37#define CP0_STATUS_DEF_RESTORE (ST0_EXL | ST0_IE)
38
39#ifndef _ASMLANGUAGE
40#include <zephyr/sys/util.h>
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46#define STACK_ROUND_UP(x) ROUND_UP(x, ARCH_STACK_PTR_ALIGN)
47
48void arch_irq_enable(unsigned int irq);
49void arch_irq_disable(unsigned int irq);
50int arch_irq_is_enabled(unsigned int irq);
51void z_irq_spurious(const void *unused);
52
67#define ARCH_IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p) \
68 { \
69 Z_ISR_DECLARE(irq_p, 0, isr_p, isr_param_p); \
70 }
71
72static ALWAYS_INLINE unsigned int arch_irq_lock(void)
73{
74 uint32_t status = read_c0_status();
75
76 if (status & ST0_IE) {
77 write_c0_status(status & ~ST0_IE);
78 return 1;
79 }
80 return 0;
81}
82
83static ALWAYS_INLINE void arch_irq_unlock(unsigned int key)
84{
85 uint32_t status = read_c0_status();
86
87 if (key) {
88 status |= ST0_IE;
89 } else {
90 status &= ~ST0_IE;
91 }
92
93 write_c0_status(status);
94}
95
96static ALWAYS_INLINE bool arch_irq_unlocked(unsigned int key)
97{
98 return key != 0;
99}
100
101static ALWAYS_INLINE void arch_nop(void)
102{
103 __asm__ volatile ("nop");
104}
105
107
108static inline uint32_t arch_k_cycle_get_32(void)
109{
110 return sys_clock_cycle_get_32();
111}
112
114
115static inline uint64_t arch_k_cycle_get_64(void)
116{
117 return sys_clock_cycle_get_64();
118}
119
120#ifdef __cplusplus
121}
122#endif
123
124#endif /* _ASMLANGUAGE */
125
126#endif /* ZEPHYR_INCLUDE_ARCH_MIPS_ARCH_H_ */
static ALWAYS_INLINE void arch_nop(void)
Definition arch.h:348
#define arch_irq_disable(irq)
Definition irq.h:44
#define arch_irq_enable(irq)
Definition irq.h:43
#define arch_irq_is_enabled(irq)
Definition irq.h:45
Per-arch thread definition.
Devicetree main header.
#define ALWAYS_INLINE
Definition common.h:160
Public interface for configuring interrupts.
static ALWAYS_INLINE unsigned int arch_irq_lock(void)
Definition arch.h:72
static ALWAYS_INLINE void arch_irq_unlock(unsigned int key)
Definition arch.h:83
uint64_t sys_clock_cycle_get_64(void)
uint32_t sys_clock_cycle_get_32(void)
static uint32_t arch_k_cycle_get_32(void)
Definition arch.h:108
static uint64_t arch_k_cycle_get_64(void)
Definition arch.h:115
static ALWAYS_INLINE bool arch_irq_unlocked(unsigned int key)
Definition arch.h:96
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
Software-managed ISR table.
Misc utilities.