You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
375 lines
14 KiB
375 lines
14 KiB
/*
|
|
* Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2020. All rights reserved.
|
|
* Description: IAPI function file for Huanglong SSM
|
|
* Author: ssm group
|
|
* Create: 2019/12/11
|
|
*/
|
|
|
|
#include "uapi_ssm.h"
|
|
#include "mpi_ssm_ext.h"
|
|
|
|
#include "td_type.h"
|
|
#include "soc_log.h"
|
|
#include "soc_errno.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
static uapi_ssm_intent ssm_intent_id_drv_to_uapi(ext_ssm_intent ext_intent)
|
|
{
|
|
uapi_ssm_intent uapi_intent = UAPI_SSM_INTENT_MAX;
|
|
switch (ext_intent) {
|
|
case EXT_SSM_INTENT_WATCH:
|
|
uapi_intent = UAPI_SSM_INTENT_WATCH;
|
|
break;
|
|
case EXT_SSM_INTENT_RECORD:
|
|
uapi_intent = UAPI_SSM_INTENT_RECORD;
|
|
break;
|
|
case EXT_SSM_INTENT_EXPORT:
|
|
uapi_intent = UAPI_SSM_INTENT_EXPORT;
|
|
break;
|
|
case EXT_SSM_INTENT_MAX:
|
|
uapi_intent = UAPI_SSM_INTENT_MAX;
|
|
break;
|
|
default:
|
|
uapi_intent = UAPI_SSM_INTENT_MAX;
|
|
}
|
|
return uapi_intent;
|
|
}
|
|
|
|
static ext_ssm_intent ssm_intent_id_uapi_to_drv(uapi_ssm_intent uapi_intent)
|
|
{
|
|
ext_ssm_intent ext_intent = EXT_SSM_INTENT_MAX;
|
|
switch (uapi_intent) {
|
|
case UAPI_SSM_INTENT_WATCH:
|
|
ext_intent = EXT_SSM_INTENT_WATCH;
|
|
break;
|
|
case UAPI_SSM_INTENT_RECORD:
|
|
ext_intent = EXT_SSM_INTENT_RECORD;
|
|
break;
|
|
case UAPI_SSM_INTENT_EXPORT:
|
|
ext_intent = EXT_SSM_INTENT_EXPORT;
|
|
break;
|
|
case UAPI_SSM_INTENT_MAX:
|
|
ext_intent = EXT_SSM_INTENT_MAX;
|
|
break;
|
|
default:
|
|
ext_intent = EXT_SSM_INTENT_MAX;
|
|
}
|
|
return ext_intent;
|
|
}
|
|
|
|
td_s32 uapi_ssm_init(td_void)
|
|
{
|
|
return ext_mpi_ssm_init();
|
|
}
|
|
|
|
td_s32 uapi_ssm_deinit(td_void)
|
|
{
|
|
return ext_mpi_ssm_deinit();
|
|
}
|
|
|
|
td_s32 uapi_ssm_create(const uapi_ssm_attr *session_attr, td_handle *session_handle)
|
|
{
|
|
ext_ssm_attr ext_session_attr;
|
|
ext_session_attr.intent = ssm_intent_id_uapi_to_drv(session_attr->intent);
|
|
|
|
return ext_mpi_ssm_create(session_handle, &ext_session_attr);
|
|
}
|
|
|
|
td_s32 uapi_ssm_destroy(const td_handle session_handle)
|
|
{
|
|
return ext_mpi_ssm_destroy(session_handle);
|
|
}
|
|
|
|
td_s32 uapi_ssm_add_resource(const td_handle session_handle, const uapi_ssm_module_resource *resource_info)
|
|
{
|
|
ext_ssm_module_resource ext_resource_info;
|
|
ext_resource_info.module_handle = resource_info->module_handle;
|
|
|
|
return ext_mpi_ssm_add_resource(session_handle, &ext_resource_info);
|
|
}
|
|
|
|
static ext_drv_ssm_buffer_id ssm_vid_buff_drv_to_uapi(uapi_ssm_buffer_id buffer_id)
|
|
{
|
|
ext_drv_ssm_buffer_id drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
switch (buffer_id) {
|
|
case UAPI_SSM_BUFFER_ID_VID_RAWLIST_MCU_ONLY:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_RAWLIST_MCU_ONLY;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_SEGLIST_MCU_ONLY:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_SEGLIST_MCU_ONLY;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_STDCTX_MCU_ONLY:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_STDCTX_MCU_ONLY;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_PICMSG_MCU_ONLY:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_PICMSG_MCU_ONLY;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_SLICEMSG_MCU_ONLY:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_SLICEMSG_MCU_ONLY;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_METADATA_MCU_ONLY:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_METADATA_MCU_ONLY;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_SCDRAW_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_SCDRAW_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_SCDSEG_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_SCDSEG_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_SCDMSG:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_SCDMSG;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_VDHPMV_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_VDHPMV_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_VDHEXT_BUF_VID_ONLY:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_VDHEXT_BUF_VID_ONLY;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_FRMBIN_VDH_ONLY:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_FRMBIN_VDH_ONLY;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_VDEC:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_VDEC;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_VENC:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_VENC;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_DMX_VID_ES_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_DMX_VID_ES_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_MCIPHER_VID_ES_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_MCIPHER_VID_ES_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_FRM_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VID_FRM_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VIDEO_CAPTURE_ENCODE_OUTPUT_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VIDEO_CAPTURE_ENCODE_OUTPUT_BUF;
|
|
break;
|
|
default:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
}
|
|
return drv_buffer_id;
|
|
}
|
|
|
|
static ext_drv_ssm_buffer_id ssm_dmx_buff_drv_to_uapi(uapi_ssm_buffer_id buffer_id)
|
|
{
|
|
ext_drv_ssm_buffer_id drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
switch (buffer_id) {
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_DMX:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_DMX;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_DMX_VID_ES_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_DMX_VID_ES_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_DMX_AUD_ES_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_DMX_AUD_ES_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_MCIPHER_TS_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_MCIPHER_TS_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_PVR_RECORD_TS_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_PVR_RECORD_TS_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_PVR_PLAYBACK_TS_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_PVR_PLAYBACK_TS_BUF;
|
|
break;
|
|
default:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
}
|
|
return drv_buffer_id;
|
|
}
|
|
|
|
static ext_drv_ssm_buffer_id ssm_sec_buff_drv_to_uapi(uapi_ssm_buffer_id buffer_id)
|
|
{
|
|
ext_drv_ssm_buffer_id drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
switch (buffer_id) {
|
|
case UAPI_SSM_BUFFER_ID_CIPHER_CENC_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_CIPHER_CENC_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_SECURE_INFOR_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_SECURE_INFOR_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_MCIPHER:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_MCIPHER;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_TSCIPHER:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_TSCIPHER;
|
|
break;
|
|
default:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
}
|
|
return drv_buffer_id;
|
|
}
|
|
|
|
static ext_drv_ssm_buffer_id ssm_out_buff_drv_to_uapi(uapi_ssm_buffer_id buffer_id)
|
|
{
|
|
ext_drv_ssm_buffer_id drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
switch (buffer_id) {
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_VPSS:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_VPSS;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_VDP:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_VDP;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_GPU:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_GPU;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_HWC:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_HWC;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_JPEG_DEC:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_JPEG_DEC;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_JPEG_ENC:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_JPEG_ENC;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_NPU:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_NPU;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VPSS_OUTPUT_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VPSS_OUTPUT_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_GRAPHIC_OUPUT_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_GRAPHIC_OUPUT_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_NPU_OUTPUT_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_NPU_OUTPUT_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_TRANSCODE_ENCODE_OUTPUT_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_TRANSCODE_ENCODE_OUTPUT_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_MIRA_ENCODE_OUTPUT_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_MIRA_ENCODE_OUTPUT_BUF;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VDP_SD_WRITEBACK_ONLY:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VDP_SD_WRITEBACK_ONLY;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VDP_OUTPUT_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_VDP_OUTPUT_BUF;
|
|
break;
|
|
default:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
}
|
|
return drv_buffer_id;
|
|
}
|
|
|
|
static ext_drv_ssm_buffer_id ssm_aud_buff_drv_to_uapi(uapi_ssm_buffer_id buffer_id)
|
|
{
|
|
ext_drv_ssm_buffer_id drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
switch (buffer_id) {
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_AUDDSP:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INTERNAL_BUF_AUDDSP;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_MCIPHER_AUD_ES_BUF:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_MCIPHER_AUD_ES_BUF;
|
|
break;
|
|
default:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
}
|
|
return drv_buffer_id;
|
|
}
|
|
|
|
static ext_drv_ssm_buffer_id ssm_buf_id_uapi_to_drv(uapi_ssm_buffer_id buffer_id)
|
|
{
|
|
ext_drv_ssm_buffer_id drv_buffer_id;
|
|
switch (buffer_id) {
|
|
case UAPI_SSM_BUFFER_ID_INVALID:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_DMX:
|
|
case UAPI_SSM_BUFFER_ID_DMX_VID_ES_BUF:
|
|
case UAPI_SSM_BUFFER_ID_DMX_AUD_ES_BUF:
|
|
case UAPI_SSM_BUFFER_ID_MCIPHER_TS_BUF:
|
|
case UAPI_SSM_BUFFER_ID_PVR_RECORD_TS_BUF:
|
|
case UAPI_SSM_BUFFER_ID_PVR_PLAYBACK_TS_BUF:
|
|
drv_buffer_id = ssm_dmx_buff_drv_to_uapi(buffer_id);
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_CIPHER_CENC_BUF:
|
|
case UAPI_SSM_BUFFER_ID_SECURE_INFOR_BUF:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_MCIPHER:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_TSCIPHER:
|
|
drv_buffer_id = ssm_sec_buff_drv_to_uapi(buffer_id);
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_VID_RAWLIST_MCU_ONLY:
|
|
case UAPI_SSM_BUFFER_ID_VID_SEGLIST_MCU_ONLY:
|
|
case UAPI_SSM_BUFFER_ID_VID_STDCTX_MCU_ONLY:
|
|
case UAPI_SSM_BUFFER_ID_VID_PICMSG_MCU_ONLY:
|
|
case UAPI_SSM_BUFFER_ID_VID_SLICEMSG_MCU_ONLY:
|
|
case UAPI_SSM_BUFFER_ID_VID_METADATA_MCU_ONLY:
|
|
case UAPI_SSM_BUFFER_ID_VID_SCDRAW_BUF:
|
|
case UAPI_SSM_BUFFER_ID_VID_SCDSEG_BUF:
|
|
case UAPI_SSM_BUFFER_ID_VID_SCDMSG:
|
|
case UAPI_SSM_BUFFER_ID_VID_VDHPMV_BUF:
|
|
case UAPI_SSM_BUFFER_ID_VID_VDHEXT_BUF_VID_ONLY:
|
|
case UAPI_SSM_BUFFER_ID_VID_FRMBIN_VDH_ONLY:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_VDEC:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_VENC:
|
|
case UAPI_SSM_BUFFER_ID_MCIPHER_VID_ES_BUF:
|
|
case UAPI_SSM_BUFFER_ID_VID_FRM_BUF:
|
|
case UAPI_SSM_BUFFER_ID_VIDEO_CAPTURE_ENCODE_OUTPUT_BUF:
|
|
drv_buffer_id = ssm_vid_buff_drv_to_uapi(buffer_id);
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_AUDDSP:
|
|
case UAPI_SSM_BUFFER_ID_MCIPHER_AUD_ES_BUF:
|
|
drv_buffer_id = ssm_aud_buff_drv_to_uapi(buffer_id);
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_VPSS:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_VDP:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_GPU:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_HWC:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_JPEG_DEC:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_JPEG_ENC:
|
|
case UAPI_SSM_BUFFER_ID_INTERNAL_BUF_NPU:
|
|
case UAPI_SSM_BUFFER_ID_VPSS_OUTPUT_BUF:
|
|
case UAPI_SSM_BUFFER_ID_GRAPHIC_OUPUT_BUF:
|
|
case UAPI_SSM_BUFFER_ID_NPU_OUTPUT_BUF:
|
|
case UAPI_SSM_BUFFER_ID_TRANSCODE_ENCODE_OUTPUT_BUF:
|
|
case UAPI_SSM_BUFFER_ID_MIRA_ENCODE_OUTPUT_BUF:
|
|
case UAPI_SSM_BUFFER_ID_VDP_SD_WRITEBACK_ONLY:
|
|
case UAPI_SSM_BUFFER_ID_VDP_OUTPUT_BUF:
|
|
drv_buffer_id = ssm_out_buff_drv_to_uapi(buffer_id);
|
|
break;
|
|
case UAPI_SSM_BUFFER_ID_MAX:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
break;
|
|
default:
|
|
drv_buffer_id = EXT_SSM_BUFFER_ID_INVALID;
|
|
}
|
|
return drv_buffer_id;
|
|
}
|
|
|
|
td_s32 uapi_ssm_attach_buffer(const uapi_ssm_buffer_attach_info *buffer_attach_info, td_u64 *secure_info_addr)
|
|
{
|
|
ext_ssm_buffer_attach_info ext_buf_attch_info;
|
|
ext_buf_attch_info.buf_id = ssm_buf_id_uapi_to_drv(buffer_attach_info->buffer_id);
|
|
ext_buf_attch_info.dma_buf_handle = buffer_attach_info->buffer_handle;
|
|
ext_buf_attch_info.session_handle = buffer_attach_info->session_handle;
|
|
ext_buf_attch_info.module_handle = buffer_attach_info->module_handle;
|
|
|
|
return ext_mpi_ssm_attach_buffer(&ext_buf_attch_info, secure_info_addr);
|
|
}
|
|
|
|
td_s32 uapi_ssm_get_intent(const td_handle session_handle, uapi_ssm_intent *intent)
|
|
{
|
|
td_s32 ret;
|
|
ext_ssm_intent ext_intent;
|
|
|
|
ret = ext_mpi_ssm_get_intent(session_handle, &ext_intent);
|
|
if (ret != TD_SUCCESS) {
|
|
soc_log_err("ioctl attach fail\n");
|
|
return ret;
|
|
}
|
|
*intent = ssm_intent_id_drv_to_uapi(ext_intent);
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|