#ifndef _TIMA_IOCTL_H_
#define _TIMA_IOCTL_H_

//#define TIMA_UTIL_SRV_UUID    {0,0,0,{0,0,0,0x56,0x56,0x56,0x54,0x0a}}

#define SVC_TIMAUTIL_ID            0x00070000
#define TIMAUTIL_CREATE_CMD(x)     (SVC_TIMAUTIL_ID | x)
#define DEV_BUF_SZ                 256

#if defined(SEC_SDK40)
static const char drv_name[] = "/dev/tima_driver"; // /dev/tima_driver
static const char drv_name_init[] = "tima_driver";
#else
static const char drv_name[] = "dev://my_driver";
#endif

static int drv_fd = -1;


// Commands for TIMA UTIL application.

typedef enum {
    TIMAUTIL_DEBUG_LOG_WRITE      = TIMAUTIL_CREATE_CMD(0x00000000),
    TIMAUTIL_DEBUG_LOG_READ       = TIMAUTIL_CREATE_CMD(0x00000001),
    TIMAUTIL_SECURE_LOG_WRITE     = TIMAUTIL_CREATE_CMD(0x00000002),
    TIMAUTIL_SECURE_LOG_READ      = TIMAUTIL_CREATE_CMD(0x00000003),
    TIMAUTIL_SECURE_PHYS_READ     = TIMAUTIL_CREATE_CMD(0x00000041),
    TIMAUTIL_SECURE_PHYS_WRITE    = TIMAUTIL_CREATE_CMD(0x00000042),
    TIMAUTIL_SECURE_ALLOWLIST     = TIMAUTIL_CREATE_CMD(0x00000043),
    DMV_SRAM_READ_RECOVERY        = TIMAUTIL_CREATE_CMD(0x00000121)
} timautil_cmd_type;


struct ioctl_log_data {
    unsigned int len;
    char buf[DEV_BUF_SZ];
};

struct ioctl_mem_access_data {
    uint32_t phys_addr;
    uint32_t len;
    char *rw_addr;
    int32_t status;
};

struct custom_handler_params {
    unsigned long p0;
    unsigned long p1;
    unsigned long p2;
    unsigned long ret_r0;
    unsigned long ret_r1;
    unsigned long ret_r2;
    unsigned long ret_r3;
};


void timautil_secure_phys_read(struct ioctl_mem_access_data *ma_data, char *temp);

void tima_util_secure_phys_write(struct ioctl_mem_access_data *ma_data, char *temp);

void timautil_sram_recovery_read(struct ioctl_mem_access_data *ma_data, char *temp);

uint32_t drApiMapPhys(void *virt_addr,uint32_t length,void *phys_addr);

uint32_t drApiUnmap(void *virt_addr, uint32_t length);

#endif

