1 // Copyright 2020 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 #pragma once 15 16 #include "tx_api.h" 17 18 namespace pw::sync::backend { 19 20 // This currently does not support SMP as there's no actual lock to spin on 21 // internally, see the pw_sync_threadx docs for more details. 22 #ifdef TX_SMP_CORE_ID 23 #error "This backend does not support SMP versions of ThreadX yet!" 24 #endif // defined(TX_SMP_CORE_ID) 25 struct NativeInterruptSpinLock { 26 enum class State { 27 kUnlocked = 0, // This must be 0 to ensure it is bss eligible. 28 kLockedFromInterrupt = 1, 29 kLockedFromThread = 2, 30 }; 31 State state; // Used to detect recursion and interrupt context escapes. 32 UINT saved_interrupt_mask; 33 UINT saved_preemption_threshold; 34 }; 35 using NativeInterruptSpinLockHandle = NativeInterruptSpinLock&; 36 37 } // namespace pw::sync::backend 38