本文整理汇总了C++中ddl_client_transact函数的典型用法代码示例。如果您正苦于以下问题:C++ ddl_client_transact函数的具体用法?C++ ddl_client_transact怎么用?C++ ddl_client_transact使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ddl_client_transact函数的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ddl_device_init
u32 ddl_device_init(struct ddl_init_config *ddl_init_config,
void *client_data)
{
struct ddl_context *ddl_context;
struct res_trk_firmware_addr firmware_addr;
u32 status = VCD_S_SUCCESS, memorytype = PMEM_MEMTYPE;
void *ptr = NULL;
DDL_MSG_HIGH("ddl_device_init");
if ((!ddl_init_config) || (!ddl_init_config->ddl_callback) ||
(!ddl_init_config->core_virtual_base_addr)) {
DDL_MSG_ERROR("ddl_dev_init:Bad_argument");
return VCD_ERR_ILLEGAL_PARM;
}
ddl_context = ddl_get_context();
if (DDL_IS_INITIALIZED(ddl_context)) {
DDL_MSG_ERROR("ddl_dev_init:Multiple_init");
return VCD_ERR_ILLEGAL_OP;
}
if (!DDL_IS_IDLE(ddl_context)) {
DDL_MSG_ERROR("ddl_dev_init:Ddl_busy");
return VCD_ERR_BUSY;
}
memset(ddl_context, 0, sizeof(struct ddl_context));
DDL_BUSY(ddl_context);
ddl_context->ddl_callback = ddl_init_config->ddl_callback;
if (ddl_init_config->interrupt_clr)
ddl_context->interrupt_clr =
ddl_init_config->interrupt_clr;
ddl_context->core_virtual_base_addr =
ddl_init_config->core_virtual_base_addr;
ddl_context->client_data = client_data;
ddl_context->ddl_hw_response.arg1 = DDL_INVALID_INTR_STATUS;
ddl_context->frame_channel_depth = VCD_FRAME_COMMAND_DEPTH;
DDL_MSG_LOW("%s() : virtual address of core(%x)\n", __func__,
(u32) ddl_init_config->core_virtual_base_addr);
vidc_1080p_set_device_base_addr(
ddl_context->core_virtual_base_addr);
ddl_context->cmd_state = DDL_CMD_INVALID;
ddl_client_transact(DDL_INIT_CLIENTS, NULL);
ddl_context->fw_memory_size =
DDL_FW_INST_GLOBAL_CONTEXT_SPACE_SIZE;
if (memorytype == PMEM_MEMTYPE_SMI) {
ptr = ddl_pmem_alloc(&ddl_context->dram_base_a,
ddl_context->fw_memory_size, DDL_KILO_BYTE(128));
} else {
if (!res_trk_get_firmware_addr(&firmware_addr) &&
firmware_addr.buf_size >= ddl_context->fw_memory_size) {
if (DDL_ADDR_IS_ALIGNED(firmware_addr.device_addr,
DDL_KILO_BYTE(128))) {
ptr = (void *) firmware_addr.base_addr;
ddl_context->dram_base_a.physical_base_addr =
ddl_context->dram_base_a.align_physical_addr =
(u8 *)firmware_addr.device_addr;
ddl_context->dram_base_a.align_virtual_addr =
ddl_context->dram_base_a.virtual_base_addr =
firmware_addr.base_addr;
ddl_context->dram_base_a.buffer_size =
ddl_context->fw_memory_size;
} else {
DDL_MSG_ERROR("firmware base not aligned %p",
(void *)firmware_addr.device_addr);
}
}
}
if (!ptr) {
DDL_MSG_ERROR("Memory Aocation Failed for FW Base");
status = VCD_ERR_ALLOC_FAIL;
} else {
DDL_MSG_LOW("%s() : physical address of base(%x)\n",
__func__, (u32) ddl_context->dram_base_a.\
align_physical_addr);
ddl_context->dram_base_b.align_physical_addr =
ddl_context->dram_base_a.align_physical_addr;
ddl_context->dram_base_b.align_virtual_addr =
ddl_context->dram_base_a.align_virtual_addr;
}
if (!status) {
ptr = ddl_pmem_alloc(&ddl_context->metadata_shared_input,
DDL_METADATA_TOTAL_INPUTBUFSIZE,
DDL_LINEAR_BUFFER_ALIGN_BYTES);
if (!ptr) {
DDL_MSG_ERROR("ddl_device_init: metadata alloc fail");
status = VCD_ERR_ALLOC_FAIL;
}
}
if (!status && !ddl_fw_init(&ddl_context->dram_base_a)) {
DDL_MSG_ERROR("ddl_dev_init:fw_init_failed");
status = VCD_ERR_ALLOC_FAIL;
}
if (!status && memorytype == PMEM_MEMTYPE_EBI1)
clean_caches((unsigned long)firmware_addr.base_addr,
firmware_addr.buf_size, firmware_addr.device_addr);
if (!status) {
ddl_context->cmd_state = DDL_CMD_DMA_INIT;
ddl_vidc_core_init(ddl_context);
} else {
//.........这里部分代码省略.........
开发者ID:vitaliyy,项目名称:msm7x30,代码行数:101,代码来源:vcd_ddl.c
注:本文中的ddl_client_transact函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论