/*
 * Copyright (C) 2020, Samsung Electronics Co., Ltd.
 *
 * TUI LL driver main file
 */

#include <fops.h>
#include <string.h>
#include <tee_internal_api.h>
#include <tee_ta_destructor.h>

#include <tee_tui_low_api.h>
#include <tuill_defs.h>
#include "tuill_drv.h"
#include "tuill_log.h"
#include "tuill_display_drv.h"
#include "tuiHal.h"
#include "display_drv_engine.h"

//TODO: uncomment after SDK update
//TA_EXPORT const char *log_tag = "[tuill_dispdrv]";

void init_drv_ctx(void)
{
    TUILL_CALL_TRACE();
    memset(&drv_ctx, 0, sizeof(struct tuill_client_drv_context));
    drv_ctx.drv_state_machine = DRV_STATE_DISCONNECTED;
    drv_ctx.drv_name  = DISPLAY_DRIVER_NAME;
    drv_ctx.drv_id    = ACC_PERM_DISPLAY;
    drv_ctx.drv_type  = TEE_PERIPHERAL_DISPLAY;
    drv_ctx.drv_ioctl = disp_ioctl;
    drv_ctx.drv_cb    = &disp_cb;
    drv_ctx.file_ops.open = tuilld_open;
    drv_ctx.file_ops.close = tuilld_close;
    drv_ctx.file_ops.ioctl_iov = tuilld_ioctl;
    drv_ctx.file_ops.fsync = tuilld_fsync;
    drv_ctx.file_ops.mmap = disp_mmap;
}

int clear_HAL(void)
{
    TUILL_CALL_TRACE();

    int ret = 0;
    if (drv_ctx.tuilldrv.tuill_state & TEE_PERIPHERAL_FLAG_LOCKED) {
        ret = tuiHalDisplayUninitialize();
        if (ret) {
            syslog(LOG_ERR, "tuiHalDisplayUninitialize() failed, ret = %d\n", ret);
            ret = -TUILLE_GENERIC;
        } else {
            drv_ctx.tuilldrv.tuill_state &= ~TEE_PERIPHERAL_FLAG_LOCKED;
        }
    }
    return ret;
}
