/*
 * =====================================================================================
 *
 *  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 "kg_log.h"
#include "kg_defs.h"
#include <qsee_stor.h>

#define KG_RPMB_BLOCK_SIZE      50
#define KG_RPMB_PARTITION_ID    0x0D151008
#define KG_RPMB_SECTOR_MAX      256

/**
 * @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 length, uint8_t **data);
uint32_t write_block(uint32_t start_block_index, uint32_t data_len, uint8_t *data);
#endif /* __KG_RPMB_H__ */

