mirror of
https://review.haiku-os.org/haiku
synced 2025-01-31 10:47:14 +01:00
c0a7601219
Use the Privileged Only Thread ID Register aka TPIDRPRW to store the current thread pointer. The Privileged Only Thread ID Register is only accessible in privileged modes, and is read/write. see: ARMv7 Architecture Reference Manual, section B3.12.46 CP15 c13 Software Thread ID registers Change-Id: I5273bee8a80b78cdc547b2f6c96632d120eb3d55 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5608 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: waddlesplash <waddlesplash@gmail.com>
47 lines
1005 B
C
47 lines
1005 B
C
/*
|
|
* Copyright 2003-2022, Haiku Inc. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Authors:
|
|
* Axel Dörfler <axeld@pinc-software.de>
|
|
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
|
|
* Johannes Wischert <johanneswi@gmail.com>
|
|
*/
|
|
#ifndef _KERNEL_ARCH_ARM_THREAD_H
|
|
#define _KERNEL_ARCH_ARM_THREAD_H
|
|
|
|
#include <arch/cpu.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void arm_push_iframe(struct iframe_stack *stack, struct iframe *frame);
|
|
void arm_pop_iframe(struct iframe_stack *stack);
|
|
struct iframe *arm_get_user_iframe(void);
|
|
|
|
|
|
extern inline Thread *
|
|
arch_thread_get_current_thread(void)
|
|
{
|
|
// read pointer to thread data structure from TPIDRPRW
|
|
Thread* t;
|
|
asm volatile("MRC p15, 0, %0, c13, c0, 4" : "=r" (t));
|
|
return t;
|
|
}
|
|
|
|
|
|
extern inline void
|
|
arch_thread_set_current_thread(Thread *t)
|
|
{
|
|
// set TPIDRPRW to point to thread data structure
|
|
asm volatile("MCR p15, 0, %0, c13, c0, 4" : : "r" (t));
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif /* _KERNEL_ARCH_ARM_THREAD_H */
|