// Copyright 2020 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
#pragma once

#include "tx_api.h"

namespace pw::sync::backend {

struct NativeInterruptSpinLock {
  enum class State {
    kUnlocked = 1,
    kLockedFromInterrupt = 2,
    kLockedFromThread = 3,
  };
  State state;  // Used to detect recursion and interrupt context escapes.
  UINT saved_interrupt_mask;
  UINT saved_preemption_threshold;
};
using NativeInterruptSpinLockHandle = NativeInterruptSpinLock&;

}  // namespace pw::sync::backend

// Copyright 2020 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
#pragma once

#include "tx_api.h"

namespace pw::sync::backend {

struct NativeInterruptSpinLock {
  enum class State {
    kUnlocked = 0,
    kLockedFromInterrupt = 1,
    kLockedFromThread = 2,
  };
  State state;  // Used to detect recursion and interrupt context escapes.
  UINT saved_interrupt_mask;
  UINT saved_preemption_threshold;
};
using NativeInterruptSpinLockHandle = NativeInterruptSpinLock&;

}  // namespace pw::sync::backend

Adjust ISL enum to make it bss eligible
pw_sync_threadx: Adjust ISL enum to make it bss eligible

Adjusts an enum's values to ensure that a value of 0 is used in the
constexpr constructor to ensure that the object is bss eligible
instead of requiring placement in data.

Change-Id: Ied32426852661b5b534b6e4682a0e52fa28a57ae
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/55027
Reviewed-by: Wyatt Hepler <cca3bedb37979eacd157a9bceb473582df8aea1e@google.com>
Pigweed-Auto-Submit: Ewout van Bekkum <638f134dbc68778d6b859fb04a64baea2b00b021@google.com>
Commit-Queue: Auto-Submit <14637eda5603879df170705285bf30f5996692f0@pigweed.google.com.iam.gserviceaccount.com>
