/*************************************************************************** * Copyright (c) 2024 Microsoft Corporation * Copyright (c) 2026-present Eclipse ThreadX contributors * * This program and the accompanying materials are made available under the * terms of the MIT License which is available at * https://opensource.org/licenses/MIT. * * SPDX-License-Identifier: MIT **************************************************************************/ /**************************************************************************/ /**************************************************************************/ /** */ /** ThreadX Component */ /** */ /** Thread */ /** */ /**************************************************************************/ /**************************************************************************/ #ifdef TX_INCLUDE_USER_DEFINE_FILE #include "tx_user.h" #endif SECTION `.text`:CODE:NOROOT(2) THUMB /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _tx_thread_secure_stack_allocate Cortex-Mxx/IAR */ /* 6.1 */ /* AUTHOR */ /* */ /* Scott Larson, Microsoft Corporation */ /* */ /* DESCRIPTION */ /* */ /* This function enters the SVC handler to allocate a secure stack. */ /* */ /* INPUT */ /* */ /* thread_ptr Thread control block pointer */ /* stack_size Size of secure stack to */ /* allocate */ /* */ /* OUTPUT */ /* */ /* status Actual completion status */ /* */ /* CALLS */ /* */ /* SVC 1 */ /* */ /* CALLED BY */ /* */ /* Application Code */ /**************************************************************************/ // UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size) // { EXPORT _tx_thread_secure_stack_allocate _tx_thread_secure_stack_allocate: #if !defined(TX_SINGLE_MODE_SECURE) && !defined(TX_SINGLE_MODE_NON_SECURE) MRS r3, PRIMASK // Save interrupt mask CPSIE i // Enable interrupts for SVC call SVC 1 CMP r3, #0 // If interrupts enabled, just return BEQ _alloc_return_interrupt_enabled CPSID i // Otherwise, disable interrupts #else MOV r0, #0xFF // Feature not enabled #endif _alloc_return_interrupt_enabled BX lr END