/*
 * =====================================================================================
 *
 *  Filename:  kg_rpmb.h
 *
 *  Description:  KG RPMB interface
 *
 *  Version:  1.0
 *  Created:  03/13/2020 09:44:00 AM
 *  Revision:  none
 *  Compiler:  gcc
 *
 *  Company:  Samsung Electronics
 *  Copyright (c) 2020 by Samsung Electronics, All rights reserved.
 *
 * =====================================================================================
 */

#ifndef __KG_RPMB_H__
#define __KG_RPMB_H__

#include "rpmb.h"
#include "kg_log.h"
#include "kg_defs.h"

#define KG_RPMB_BLOCK_SIZE      2048

#ifdef TEEGRIS_USE_MTK_RPMB_DRV
#define KG_RPMB_PARTITION_ID	11
#else // exynos850, exynos2100
#define KG_RPMB_PARTITION_ID    16
#endif

/**
 * @brief
 * kg_rpmb_init
 * RPMB initialization
 *
 * @return KG status code
 */
uint32_t kg_rpmb_init(void);

/**
 * @brief
 * kg_rpmb_read
 * Read RPMB data
 *
 * @param[out] *data     - data buffer with RPMB content
 * @param[in]  *data_len - read data length
 *
 * @return KG status code
 */
uint32_t kg_rpmb_read(uint8_t *data, uint32_t data_len);

/**
 * @brief
 * kg_rpmb_write
 * Write data on RPMB
 *
 * @param[out] *data     - data buffer with RPMB content
 * @param[in]  *data_len - read data length
 *
 * @return KG status code
 */
uint32_t kg_rpmb_write(uint8_t *data, uint32_t data_len);

uint32_t kg_rpmb_read_metadata(uint8_t *data, uint32_t data_len);
uint32_t kg_rpmb_write_metadata(uint8_t *data, uint32_t data_len);

uint32_t kg_rpmb_unwrap_securedata(kg_rpmb_data_t *krd, uint8_t *data);
uint32_t kg_rpmb_wrap_securedata(kg_rpmb_data_t *krd, kg_secure_data_t *ksd);

uint32_t read_block(uint32_t start_block_index, uint32_t data_len, uint8_t **data);
uint32_t write_block(uint32_t start_block_index, uint32_t data_len, uint8_t *data);

#endif /* __KG_RPMB_H__ */

