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

/****************************************************************
 * Auto generated by DE, please DO NOT modify this file directly.
 *****************************************************************/

#ifndef SPM_PMIC_WRAP__H
#define SPM_PMIC_WRAP__H

enum pmic_wrap_phase_id {
	PMIC_WRAP_PHASE_ALLINONE,
	NR_PMIC_WRAP_PHASE
};

/* IDX mapping */
enum {
	CMD_0,        /* 0x0 *//* PMIC_WRAP_PHASE_ALLINONE */
	CMD_1,        /* 0x1 */
	CMD_2,        /* 0x2 */
	CMD_3,        /* 0x3 */
	CMD_4,        /* 0x4 */
	CMD_5,        /* 0x5 */
	CMD_6,        /* 0x6 */
	CMD_7,        /* 0x7 */
	CMD_8,        /* 0x8 */
	CMD_9,        /* 0x9 */
	CMD_10,       /* 0xA */
	CMD_11,       /* 0xB */
	CMD_12,       /* 0xC */
	CMD_13,       /* 0xD */
	CMD_14,       /* 0xE */
	CMD_15,       /* 0xF */
	CMD_20,       /* 0x14 */
	CMD_21,       /* 0x15 */
	CMD_22,       /* 0x16 */
	CMD_23,       /* 0x17 */
	NR_IDX_ALL
};

/* APIs */
void mt_spm_pmic_wrap_set_phase(enum pmic_wrap_phase_id phase);
void mt_spm_pmic_wrap_set_cmd(enum pmic_wrap_phase_id phase,
			      uint32_t idx, uint32_t cmd_wdata);
uint64_t mt_spm_pmic_wrap_get_cmd(enum pmic_wrap_phase_id phase, uint32_t idx);
#endif /* SPM_PMIC_WRAP__H */

