/*
 * Copyright (c) 2017-2018, Arm Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <assert.h>
#include <limits.h>

#include <lib/utils.h>

#include "psci_private.h"

u_register_t psci_mem_protect(unsigned int enable)
{
	int val = 0;

	assert(psci_plat_pm_ops->read_mem_protect != NULL);
	assert(psci_plat_pm_ops->write_mem_protect != NULL);

	if (psci_plat_pm_ops->read_mem_protect(&val) < 0) {
		return (u_register_t) PSCI_E_NOT_SUPPORTED;
	}
	if (psci_plat_pm_ops->write_mem_protect(enable) < 0) {
		return (u_register_t) PSCI_E_NOT_SUPPORTED;
	}

	return (val != 0) ? 1U : 0U;
}

u_register_t psci_mem_chk_range(uintptr_t base, u_register_t length)
{
	int ret;

	assert(psci_plat_pm_ops->mem_protect_chk != NULL);

	if ((length == 0U) || check_uptr_overflow(base, length - 1U)) {
		return (u_register_t) PSCI_E_DENIED;
	}

	ret = psci_plat_pm_ops->mem_protect_chk(base, length);
	return (ret < 0) ?
	       (u_register_t) PSCI_E_DENIED : (u_register_t) PSCI_E_SUCCESS;
}
