Line data Source code
1 : // Copyright 2024 Accenture.
2 :
3 : #pragma once
4 :
5 : #include "interrupts/suspendResumeAllInterrupts.h"
6 :
7 : namespace interrupts
8 : {
9 : class SuspendResumeAllInterruptsScopedLock
10 : {
11 : public:
12 : // [PUBLICAPI_START]
13 : /**
14 : * Create a lock object instance with disabling of all interrupts
15 : * Store the current interrupt state on instance creation in a private member variable
16 : */
17 8366 : SuspendResumeAllInterruptsScopedLock()
18 8366 : : fOldMachineStateRegisterValue(getMachineStateRegisterValueAndSuspendAllInterrupts())
19 8366 : {}
20 :
21 : /**
22 : * Destroy the lock object instance and restore the internally stored interrupt state from
23 : * before this object instance has been created
24 : */
25 8366 : ~SuspendResumeAllInterruptsScopedLock() { resumeAllInterrupts(fOldMachineStateRegisterValue); }
26 :
27 : // [PUBLICAPI_END]
28 :
29 : private:
30 : uint32_t fOldMachineStateRegisterValue;
31 : };
32 :
33 : } /* namespace interrupts */
|