/* SPDX-License-Identifier: BSD-2-Clause */
/* Copyright (c) 2018, Linaro Limited    */
/* Copyright (c) 2019-2020, Google       */

#ifndef __TA_VX_H
#define __TA_VX_H

#define TA_VX_UUID { 0x99dc95b2, 0x938e, 0x47eb, \
		      { 0x80, 0xe8, 0x94, 0x04, 0xae, 0x8a, 0x13, 0x85 } }

#define TA_VX_MAX_ROLLBACK_LOCATIONS	32
#define TA_VX_NONCE_SIZE	32

typedef enum vx_lock_state {
	VX_LOCKED = 0,
	VX_UNLOCKED = 1,
} vx_lock_state_t;

/* VX variables. */
typedef enum vx_variable {
	VX_VAR_NONE = 0x0,
	VX_VAR_DEV_KEY_ENABLED = 0x01,
	VX_VAR_OUT_OF_BOOTLOADER = 0x02,
	VX_VAR_EPHEMERALLY_UNLOCKED = 0x04,
} vx_variable_t;

/*
 * Gets the rollback index corresponding to the given rollback index slot.
 *
 * in	params[0].value.a:	rollback index slot
 * out	params[1].value.a:	upper 32 bits of rollback index
 * out	params[1].value.b:	lower 32 bits of rollback index
 */
#define TA_VX_CMD_READ_ROLLBACK_INDEX	0

/*
 * Updates the rollback index corresponding to the given rollback index slot.
 *
 * Will refuse to update a slot with a lower value.
 *
 * in	params[0].value.a:	rollback index slot
 * in	params[1].value.a:	upper 32 bits of rollback index
 * in	params[1].value.b:	lower 32 bits of rollback index
 */
#define TA_VX_CMD_WRITE_ROLLBACK_INDEX	1

/*
 * Gets the lock state of the device.
 *
 * out	params[0].value.a:	VX_LOCKED/VX_UNLOCKED defined above.
 */
#define TA_VX_CMD_READ_LOCK_STATE	2

/*
 * Sets the lock state of the device.
 *
 * If the lock state is changed all rollback slots will be reset to 0
 *
 * in	params[0].value.a:	VX_LOCKED/VX_UNLOCKED defined above.
 */
#define TA_VX_CMD_WRITE_LOCK_STATE	3

/*
 * Reads a persistent value corresponding to the given name.
 *
 * in		params[0].memref:	persistent value name
 * inout	params[1].memref:	read persistent value buffer
 */
#define TA_VX_CMD_READ_PERSIST_VALUE	4

/*
 * Writes a persistent value corresponding to the given name.
 *
 * in	params[0].memref:	persistent value name
 * in	params[1].memref:	persistent value buffer to write
 */
#define TA_VX_CMD_WRITE_PERSIST_VALUE	5

/*
 * Notifies the TA that the main Bootloader is exiting.
 */
#define TA_VX_CMD_EXIT_BOOTLOADER	6

/*
 * Regenerates the random nonce associated with the device lock state.
 *
 * This command is now deprecated. New code should use TA_VX_CMD_REFRESH_NONCE(
 * kFDRNonceID, kFDRNonceIDSize);
 */
#define TA_VX_CMD_REFRESH_LOCK_STATE_NONCE	7

/*
 * Read the current random nonce associated with the device lock state.
 *
 * This command is now deprecated. New code should use TA_VX_CMD_GET_NONCE(
 * kFDRNonceID, kFDRNonceIDSize);
 *
 * inout	params[0].memref:	Caller allocated buffer to receive
 * 					the nonce. The buffer must be at least
 * 					TA_VX_NONCE_SIZE bytes.
 */
#define TA_VX_CMD_GET_LOCK_STATE_NONCE	8

/*
 * Enumerate named persistent values.
 *
 * out		params[0].value.a:	total found.
 * inout	params[1].memref:	Buffer to receive all names in the
 * 					format: name1\0name2\0...
 */
#define TA_VX_CMD_ENUMERATE_PERSIST_VALUES	9


/*
 * Draw random bytes from the TEE's CPRNG.
 *
 * inout	params[0].memref:	Buffer to receive all the random bytes
 */
#define TA_VX_CMD_CPRNG_DRAW	10

/*
 * Delete a persistent value by name.
 *
 * Does nothing and returns success if such a value does not exist.
 *
 * in	params[0].memref:	persistent value name
 */
#define TA_VX_CMD_DELETE_PERSIST_VALUE	11

/*
 * Writes permanent attributes data
 *
 * in	params[0].memref:	permanent attributes buffer to write
 *
 * Returns
 *   TEE_SUCCESS on success,
 *   TEE_ERROR_* otherwise.
 */
#define TA_VX_CMD_WRITE_PERM_ATTR	12

/*
 * Reads permanent attributes data
 *
 * inout	params[0].memref:	read permanent attributes buffer
 *
 * Returns
 *   TEE_SUCCESS on success,
 *   TEE_ERROR_* otherwise.
 */
#define TA_VX_CMD_READ_PERM_ATTR	13

enum vx_rpmb_status {
	/* eMMC claims the RPMB key has been programmed. */
	VX_RPMB_AUTH_KEY_PROGRAMMED  = 0x01,

	/* RPMB key has been verified by the firmware. */
	VX_RPMB_AUTH_KEY_VERIFIED    = 0x02,

	/* RPMB provisioning is no longer allowed (mitigates key phishing). */
	VX_RPMB_PROVISIONING_ALLOWED = 0x04,

	/* Reroute RPMB traffic (to REE controlled storage). */
	VX_RPMB_REROUTING_TRAFFIC    = 0x08,
};

/* Reads the RPMB provisioning status.
 *
 * Args:
 *   out params[0].value.a:  Status flags (VX_RPMB_*).
 *   out params[0].value.b:  Write counter value [0 ~ MAX_UINT32).
 *
 * Returns:
 *   TEE_SUCCESS if status determination has been definitive and successful.
 *   Otherwise TEE_ERROR_*.
 */
#define TA_VX_CMD_GET_RPMB_STATUS	14

/* Provisions the RPMB partition.
 *
 * Steps:
 * 1. If the authentication key is not programmed AND RPMB provisioning is
 *    allowed as indicated by an OTP bit, program and verify the key.
 * 2. Initialize device lock state to VX_UNLOCKED.
 * 3. Blow the RPMB provisioning disable bit to never ever attempt programming
 *    the RPMB key again.
 *
 * The secret key to be programmed is derived in the TEE-OS from the hardware
 * unique key (HUK) and the eMMC device ID. A TEE supplicant must be running on
 * the REE side to feed RPMB partition information to TEE upon request.
 *
 * Since eMMC and SoC are separate silicon packages and communications between
 * them are not authenticated until the shared key is programmed (as plaintext
 * across the bus), RPMB provisioning must be carried out in a trusted
 * environment (read factory). Once provisioning is done, it will never be
 * attempted again because of the blown OTP bit without replacing the SoC.
 *
 * Args: None
 *
 * Returns:
 *   TEE_SUCCESS if RPMB has been successfully provisioned a new key and the
 *   device lock state has been initialized to VX_UNLOCKED.
 *
 *   TEE_ERROR_* otherwise.
 */
#define TA_VX_CMD_PROVISION_RPMB	15

/*
 * Reads the permanent attributes hash
 *
 * inout	params[0].memref:	read permanent attributes hash buffer
 *
 * Returns
 *   TEE_SUCCESS on success,
 *   TEE_ERROR_* otherwise.
 */
#define TA_VX_CMD_READ_PERM_ATTR_HASH	16

/*
 * Lock permanent attributes. Permanent attributes can't be changed
 * after locking.
 *
 * Returns
 *   TEE_SUCCESS on success,
 *   TEE_ERROR_* otherwise.
 */
#define TA_VX_CMD_LOCK_PERM_ATTR 17

typedef enum {
	/* Programmed to RPMB. */
	VX_PERM_ATTR_PROGRAMMED = (1 << 0),

	/* SHA256 digest stored in OTP. */
	VX_PERM_ATTR_LOCKED = (1 << 1),

	/* Hardcoded. */
	VX_PERM_ATTR_HARDCODED = (1 << 2),
} perm_attr_status_t;

/*
 * Get the current permanent attributes status
 *
 * out  params[0].value.a:  Status flags (VX_PERM_ATTR_*).
 *
 * Returns
 *   TEE_SUCCESS on success,
 *   TEE_ERROR_* otherwise.
 */
#define TA_VX_CMD_GET_PERM_ATTR_STATUS	18

/*
 * Deletes permanent attributes (fails if locked).
 *
 * Returns
 *   TEE_SUCCESS on success,
 *   TEE_ERROR_* otherwise.
 */
#define TA_VX_CMD_DELETE_PERM_ATTR 19

#define TA_VX_CMD_SET_OPTIONS_DEPRECATED	20
#define TA_VX_CMD_UNSET_OPTIONS_DEPRECATED	21


/* Sets the OTA Config option.
 *
 * Args:
 *   in params[0].value.a: config option.
 *
 * Returns:
 *   TEE_SUCCESS if the option value was set successfully.
 *   Otherwise TEE_ERROR_*.
 */
#define TA_VX_CMD_OTA_CONFIG_SET 24

/* Reads the OTA Config option.
 *
 * Args:
 *   in params[0].value.a: default value for option, which will be returned if
 *      there is no stored value in secure storage.
 *   out params[1].value.a: config option
 *
 * Returns:
 *   TEE_SUCCESS if the option value was read successfully.
 *   Otherwise TEE_ERROR_*.
 */
#define TA_VX_CMD_OTA_CONFIG_GET 25

/*
 * Delete the OTA Config.
 *
 * Returns:
 *   TEE_SUCCESS if the config was deleted successfully.
 *   Otherwise TEE_ERROR_*.
 */
#define TA_VX_CMD_OTA_CONFIG_DELETE 26

/*
 * Query VX variables.
 *
 * out	params[0].value.a:	or'ed VX_VAR_*
 */
#define TA_VX_CMD_GETVAR_ALL 27

/*
 * Force reroute RPMB until reboot.
 *
 * For testing on dev-key hardware only.
 *
 * Returns:
 *   TEE_SUCCESS if successful. Otherwise TEE_ERROR_*.
 */
#define TA_VX_CMD_REROUTE_RPMB_TILL_REBOOT 28

/*
 * Force reroute RPMB to REE-controlled secure storage.
 *
 * Works on dev-key hardware only.
 *
 * Returns:
 *   TEE_SUCCESS if successful. Otherwise TEE_ERROR_*.
 */
#define TA_VX_CMD_REROUTE_RPMB_TO_SOFTWARE 29

/*
 * Force route RPMB to hardware (eMMC).
 *
 * Works on dev-key hardware only.
 *
 * Returns:
 *   TEE_SUCCESS if successful. Otherwise TEE_ERROR_*.
 */
#define TA_VX_CMD_REROUTE_RPMB_TO_HARDWARE 30

/**
 * Persistent Nonces Management.
 */

/*
 * Get a nonce by ID. The nonce is generated if not already exists.
 *
 * in		params[0].memref:	Nonce ID (arbitrary bytes, length > 0).
 * inout	params[1].memref:	Caller allocated buffer to receive
 * 					the nonce. The buffer must be at least
 * 					TA_VX_NONCE_SIZE bytes.
 */
#define TA_VX_CMD_GET_NONCE	0x101

/*
 * Refresh/rotate a nonce by ID. The nonce is generated if not found.
 *
 * in		params[0].memref:	Nonce ID (arbitrary bytes, length > 0).
 *
 * Returns TEE_ERROR_NOT_SUPPORTED if the underlying hardware does not support
 * rotations.
 */
#define TA_VX_CMD_REFRESH_NONCE	0x102

/*
 * Run internal tests defined in the VX TA.
 *
 * These tests are disabled by default and is meant to be manually enabled
 * as needed in ta/vx/Makefile by setting CFG_TA_VX_TESTS=y.
 *
 * in	params[0].memref:	name of tests to run (matches *${name}*).
 */
#define TA_VX_CMD_RUN_TESTS	0xFF01

#endif /*__TA_VX_H*/
