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#include <config.h> 9 10#ifdef ENABLE_SMP_SUPPORT 11 12#define LD_EX "ldrex " 13#define ST_EX "strex " 14#define OP_WIDTH 15 16extern char kernel_stack_alloc[CONFIG_MAX_NUM_NODES][BIT(CONFIG_KERNEL_STACK_BITS)]; 17 18/* Get current stack pointer */ 19static inline word_t getCurSP(void) 20{ 21 word_t stack_address; 22 asm("mov %[stack_address], %[currStackAddress]" : [stack_address] "=r"(stack_address) : [currStackAddress] "r"(&stack_address):); 23 return stack_address; 24} 25 26static inline CONST cpu_id_t getCurrentCPUIndex(void) 27{ 28 cpu_id_t cpu_id; 29 word_t sp = getCurSP(); 30 31 sp -= (word_t) kernel_stack_alloc; 32 cpu_id = sp >> CONFIG_KERNEL_STACK_BITS; 33 return cpu_id; 34} 35 36#endif /* ENABLE_SMP_SUPPORT */ 37 38