/*
 * Copyright (c) 2018 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr.h>
#include <string.h>
#include <device.h>
#include <sys/atomic.h>
#include <power/power_state.h>
#include "policy/pm_policy.h"

#define LOG_LEVEL CONFIG_PM_LOG_LEVEL /* From power module Kconfig */
#include <logging/log.h>
LOG_MODULE_DECLARE(power);

#define PM_STATES_LEN (PM_STATE_SOFT_OFF - PM_STATE_ACTIVE)

static atomic_t power_state_disable_count[PM_STATES_LEN];

void pm_ctrl_disable_state(enum pm_state state)
{
	atomic_val_t v;

	__ASSERT(state < PM_STATES_LEN, "Invalid power state!");
	v = atomic_inc(&power_state_disable_count[state]);
	__ASSERT(v < UINT_MAX, "Power state disable count overflowed!");

	/* Make compiler happy when assertions are disabled. */
	(void)(v);
}

void pm_ctrl_enable_state(enum pm_state state)
{
	atomic_val_t v;

	__ASSERT(state < PM_STATES_LEN, "Invalid power state!");
	v = atomic_dec(&power_state_disable_count[state]);
	__ASSERT(v > 0, "Power state disable count underflowed!");

	/* Make compiler happy when assertions are disabled. */
	(void)(v);
}

bool pm_ctrl_is_state_enabled(enum pm_state state)
{
	__ASSERT(state < PM_STATES_LEN, "Invalid power state!");

	return (atomic_get(&power_state_disable_count[state]) == 0);
}
