#ifndef RPMB_STORAGE_H_
#define RPMB_STORAGE_H_

#include <stdint.h>

#define TZ_RPMB_ARCOUNTER_BLOCK_SIZE 512
#define TZ_RPMB_ARCOUNTER_NUM_SECTOR_MAX 2

#define REF_TIME_SIZE 4
#define DELTA_SIZE 4
#define TZ_TIME_SIZE 4
#define ENABLE_FLAG_SIZE 1

#define TIMER_NUM 8
#define TIMER_SIZE 4
#define TIMER_FLAG_SIZE 1

#define REF_TIME_OFFSET 0
#define DELTA_OFFSET (REF_TIME_OFFSET + REF_TIME_SIZE)    // 4
#define TZ_TIME_OFFSET (DELTA_OFFSET + DELTA_SIZE)        // 8
#define TIMER_FLAG_OFFSET (TZ_TIME_OFFSET + TZ_TIME_SIZE) // 12
#define TIMER_OFFSET (TIMER_FLAG_OFFSET + TIMER_NUM * TIMER_FLAG_SIZE)  // 20
#define ENABLE_FLAG_OFFSET (TIMER_OFFSET + TIMER_NUM * TIMER_SIZE)      // 52

#define ARCOUNTER_USAGE (ENABLE_FLAG_OFFSET+TIMER_FLAG_SIZE)

#define ARCOUNTER_RPMB_SUCCESS 0
#define ARCOUNTER_RPMB_FAILURE (-1)

int arcounter_rpmb_init();
int arcounter_rpmb_read(uint32_t sector_pos, uint8_t *data);
int arcounter_rpmb_write(uint32_t sector_pos, uint8_t *data);
int arcounter_rpmb_set_flag(uint8_t flag);
int arcounter_check_flag(uint8_t *flag);

#endif
