1/*
2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#pragma once
8
9#include <config.h>
10#include <util.h>
11#include <kernel/stack.h>
12
13#ifdef ENABLE_SMP_SUPPORT
14
15#define LD_EX               "ldxr "
16#define ST_EX               "stxr "
17#define OP_WIDTH            "w"
18
19extern char kernel_stack_alloc[CONFIG_MAX_NUM_NODES][BIT(CONFIG_KERNEL_STACK_BITS)];
20compile_assert(kernel_stack_4k_aligned, KERNEL_STACK_ALIGNMENT == 4096)
21
22#define CPUID_MASK  (KERNEL_STACK_ALIGNMENT - 1)
23
24static inline CONST cpu_id_t
25getCurrentCPUIndex(void)
26{
27    cpu_id_t id;
28    if (config_set(CONFIG_ARM_HYPERVISOR_SUPPORT)) {
29        asm volatile("mrs %0, tpidr_el2" : "=r"(id));
30    } else {
31        asm volatile("mrs %0, tpidr_el1" : "=r"(id));
32    }
33    return (id & CPUID_MASK);
34}
35
36#endif /* ENABLE_SMP_SUPPORT */
37