Lines Matching refs:p

181 MppReqV1 *mpp_service_next_req(MppDevMppService *p)  in mpp_service_next_req()  argument
185 if (p->req_cnt >= p->req_max) { in mpp_service_next_req()
187 p->req_max, p->req_max * 2); in mpp_service_next_req()
188 p->reqs = mpp_realloc(p->reqs, MppReqV1, p->req_max * 2); in mpp_service_next_req()
189 if (NULL == p->reqs) { in mpp_service_next_req()
194 p->req_max *= 2; in mpp_service_next_req()
197 mpp_req = &p->reqs[p->req_cnt++]; in mpp_service_next_req()
202 RegOffsetInfo *mpp_service_next_reg_offset(MppDevMppService *p) in mpp_service_next_reg_offset() argument
206 if (p->reg_offset_count + p->reg_offset_pos >= p->reg_offset_max) { in mpp_service_next_reg_offset()
207 RegOffsetInfo *orig = p->reg_offset_info; in mpp_service_next_reg_offset()
210 p->reg_offset_max, p->reg_offset_max * 2); in mpp_service_next_reg_offset()
211 p->reg_offset_info = mpp_realloc(p->reg_offset_info, RegOffsetInfo, p->reg_offset_max * 2); in mpp_service_next_reg_offset()
212 if (NULL == p->reg_offset_info) { in mpp_service_next_reg_offset()
216 if (orig != p->reg_offset_info) in mpp_service_next_reg_offset()
219 p->reg_offset_max *= 2; in mpp_service_next_reg_offset()
222 info = &p->reg_offset_info[p->reg_offset_count + p->reg_offset_pos]; in mpp_service_next_reg_offset()
223 mpp_dev_dbg_msg("reg offset %d : %d\n", p->reg_offset_pos, p->reg_offset_count); in mpp_service_next_reg_offset()
224 p->reg_offset_count++; in mpp_service_next_reg_offset()
230 RcbInfo *mpp_service_next_rcb_info(MppDevMppService *p) in mpp_service_next_rcb_info() argument
234 if (p->rcb_count + p->rcb_pos >= p->rcb_max) { in mpp_service_next_rcb_info()
236 p->rcb_max, p->rcb_max * 2); in mpp_service_next_rcb_info()
237 p->rcb_info = mpp_realloc(p->rcb_info, RcbInfo, p->rcb_max * 2); in mpp_service_next_rcb_info()
238 if (NULL == p->rcb_info) { in mpp_service_next_rcb_info()
243 p->rcb_max *= 2; in mpp_service_next_rcb_info()
246 info = &p->rcb_info[p->rcb_count + p->rcb_pos]; in mpp_service_next_rcb_info()
247 mpp_dev_dbg_msg("rcb info %d : %d\n", p->rcb_pos, p->rcb_count); in mpp_service_next_rcb_info()
248 p->rcb_count++; in mpp_service_next_rcb_info()
298 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_init() local
301 p->cap = mpp_get_mpp_service_cmd_cap(); in mpp_service_init()
302 p->client = open(mpp_get_mpp_service_name(), O_RDWR | O_CLOEXEC); in mpp_service_init()
303 if (p->client < 0) { in mpp_service_init()
309 ret = mpp_service_ioctl(p->client, MPP_CMD_INIT_CLIENT_TYPE, sizeof(type), &type); in mpp_service_init()
313 mpp_assert(p->cap); in mpp_service_init()
314 if (MPP_OK == mpp_service_check_cmd_valid(MPP_CMD_SEND_CODEC_INFO, p->cap)) in mpp_service_init()
315 p->support_set_info = 1; in mpp_service_init()
316 if (MPP_OK == mpp_service_check_cmd_valid(MPP_CMD_SET_RCB_INFO, p->cap)) { in mpp_service_init()
320 p->support_set_rcb_info = !disable_rcb_info; in mpp_service_init()
322 if (MPP_OK == mpp_service_check_cmd_valid(MPP_CMD_POLL_HW_IRQ, p->cap)) in mpp_service_init()
323 p->support_hw_irq = 1; in mpp_service_init()
326 p->client_type = type; in mpp_service_init()
327 p->server = p->client; in mpp_service_init()
328 p->batch_io = 0; in mpp_service_init()
329 p->serv_ctx = NULL; in mpp_service_init()
330 p->dev_cb = NULL; in mpp_service_init()
332 p->bat_cmd.flag = 0; in mpp_service_init()
333 p->bat_cmd.client = p->client; in mpp_service_init()
334 p->bat_cmd.ret = 0; in mpp_service_init()
336 p->req_max = MAX_REQ_NUM; in mpp_service_init()
337 p->reqs = mpp_malloc(MppReqV1, p->req_max); in mpp_service_init()
338 if (NULL == p->reqs) { in mpp_service_init()
343 p->reg_offset_max = MAX_REG_OFFSET; in mpp_service_init()
344 p->reg_offset_info = mpp_malloc(RegOffsetInfo, p->reg_offset_max); in mpp_service_init()
345 if (NULL == p->reg_offset_info) { in mpp_service_init()
349 p->reg_offset_pos = 0; in mpp_service_init()
350 p->reg_offset_count = 0; in mpp_service_init()
352 p->rcb_max = MAX_RCB_OFFSET; in mpp_service_init()
353 p->rcb_info = mpp_malloc(RcbInfo, p->rcb_max); in mpp_service_init()
354 if (NULL == p->rcb_info) { in mpp_service_init()
358 p->rcb_pos = 0; in mpp_service_init()
359 p->rcb_count = 0; in mpp_service_init()
361 INIT_LIST_HEAD(&p->list_bufs); in mpp_service_init()
366 pthread_mutex_init(&p->lock_bufs, &attr); in mpp_service_init()
374 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_deinit() local
377 pthread_mutex_lock(&p->lock_bufs); in mpp_service_deinit()
378 list_for_each_entry_safe(pos, n, &p->list_bufs, MppDevBufMapNode, list_dev) { in mpp_service_deinit()
382 mpp_assert(pos->lock_dev == &p->lock_bufs); in mpp_service_deinit()
395 pthread_mutex_unlock(&p->lock_bufs); in mpp_service_deinit()
396 pthread_mutex_destroy(&p->lock_bufs); in mpp_service_deinit()
398 if (p->batch_io) in mpp_service_deinit()
399 mpp_server_detach(p); in mpp_service_deinit()
401 if (p->client) in mpp_service_deinit()
402 close(p->client); in mpp_service_deinit()
404 MPP_FREE(p->reqs); in mpp_service_deinit()
405 MPP_FREE(p->reg_offset_info); in mpp_service_deinit()
406 MPP_FREE(p->rcb_info); in mpp_service_deinit()
413 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_attach() local
415 if (p->req_cnt) { in mpp_service_attach()
420 if (!p->batch_io) in mpp_service_attach()
421 mpp_server_attach(p); in mpp_service_attach()
428 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_detach() local
430 if (p->req_cnt) { in mpp_service_detach()
435 if (p->batch_io) in mpp_service_detach()
436 mpp_server_detach(p); in mpp_service_detach()
443 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_delimit() local
447 if (p->reg_offset_count) { in mpp_service_delimit()
448 mpp_req = mpp_service_next_req(p); in mpp_service_delimit()
452 mpp_req->size = (p->reg_offset_count) * sizeof(RegOffsetInfo); in mpp_service_delimit()
454 mpp_req->data_ptr = REQ_DATA_PTR(&p->reg_offset_info[p->reg_offset_pos]); in mpp_service_delimit()
455 p->reg_offset_pos += p->reg_offset_count; in mpp_service_delimit()
456 p->reg_offset_count = 0; in mpp_service_delimit()
460 if (p->rcb_count) { in mpp_service_delimit()
461 mpp_req = mpp_service_next_req(p); in mpp_service_delimit()
465 mpp_req->size = p->rcb_count * sizeof(RcbInfo); in mpp_service_delimit()
467 mpp_req->data_ptr = REQ_DATA_PTR(&p->rcb_info[p->rcb_pos]); in mpp_service_delimit()
468 p->rcb_pos += p->rcb_count; in mpp_service_delimit()
469 p->rcb_count = 0; in mpp_service_delimit()
472 mpp_req = mpp_service_next_req(p); in mpp_service_delimit()
476 mpp_req->size = sizeof(p->bat_cmd); in mpp_service_delimit()
477 mpp_req->data_ptr = REQ_DATA_PTR(&p->bat_cmd); in mpp_service_delimit()
484 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_set_cb_ctx() local
486 p->dev_cb = cb_ctx; in mpp_service_set_cb_ctx()
493 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_reg_wr() local
494 MppReqV1 *mpp_req = mpp_service_next_req(p); in mpp_service_reg_wr()
507 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_reg_rd() local
508 MppReqV1 *mpp_req = mpp_service_next_req(p); in mpp_service_reg_rd()
521 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_reg_offset() local
528 if (p->reg_offset_count >= MAX_REG_OFFSET) { in mpp_service_reg_offset()
533 for (i = 0; i < p->reg_offset_count; i++) { in mpp_service_reg_offset()
534 info = &p->reg_offset_info[p->reg_offset_pos + i]; in mpp_service_reg_offset()
544 info = mpp_service_next_reg_offset(p); in mpp_service_reg_offset()
553 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_reg_offsets() local
560 if (p->reg_offset_count >= MAX_REG_OFFSET || in mpp_service_reg_offsets()
561 p->reg_offset_count + cfgs->count >= MAX_REG_OFFSET) { in mpp_service_reg_offsets()
570 for (j = 0; j < p->reg_offset_count; j++) { in mpp_service_reg_offsets()
571 info = &p->reg_offset_info[p->reg_offset_pos + j]; in mpp_service_reg_offsets()
581 info = mpp_service_next_reg_offset(p);; in mpp_service_reg_offsets()
591 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_rcb_info() local
593 if (!p->support_set_rcb_info) in mpp_service_rcb_info()
596 if (p->rcb_count >= MAX_RCB_OFFSET) { in mpp_service_rcb_info()
601 RcbInfo *info = mpp_service_next_rcb_info(p); in mpp_service_rcb_info()
611 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_set_info() local
613 if (!p->support_set_info) in mpp_service_set_info()
616 if (!p->info_count) in mpp_service_set_info()
617 memset(p->info, 0, sizeof(p->info)); in mpp_service_set_info()
619 memcpy(&p->info[p->info_count], cfg, sizeof(MppDevInfoCfg)); in mpp_service_set_info()
620 p->info_count++; in mpp_service_set_info()
627 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_set_err_ref_hack() local
636 return mpp_service_ioctl_request(p->client, &mpp_req); in mpp_service_set_err_ref_hack()
641 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_lock_map() local
643 mpp_dev_dbg_buf("dev %d lock mapping\n", p->client); in mpp_service_lock_map()
644 pthread_mutex_lock(&p->lock_bufs); in mpp_service_lock_map()
650 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_unlock_map() local
652 mpp_dev_dbg_buf("dev %d unlock mapping\n", p->client); in mpp_service_unlock_map()
653 pthread_mutex_unlock(&p->lock_bufs); in mpp_service_unlock_map()
659 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_attach_fd() local
666 node->lock_dev = &p->lock_bufs; in mpp_service_attach_fd()
667 node->dev_fd = p->client; in mpp_service_attach_fd()
674 list_add_tail(&node->list_dev, &p->list_bufs); in mpp_service_attach_fd()
685 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_detach_fd() local
692 mpp_assert(node->lock_dev == &p->lock_bufs); in mpp_service_detach_fd()
709 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_cmd_send() local
711 if (p->req_cnt <= 0 || p->req_cnt > p->req_max) { in mpp_service_cmd_send()
712 mpp_err_f("ctx %p invalid request count %d\n", ctx, p->req_cnt); in mpp_service_cmd_send()
716 if (p->info_count) { in mpp_service_cmd_send()
717 if (p->support_set_info) { in mpp_service_cmd_send()
722 mpp_req.size = p->info_count * sizeof(p->info[0]); in mpp_service_cmd_send()
724 mpp_req.data_ptr = REQ_DATA_PTR(p->info); in mpp_service_cmd_send()
726 ret = mpp_service_ioctl_request(p->client, &mpp_req); in mpp_service_cmd_send()
728 p->support_set_info = 0; in mpp_service_cmd_send()
730 p->info_count = 0; in mpp_service_cmd_send()
734 if (p->reg_offset_count) { in mpp_service_cmd_send()
735 MppReqV1 *mpp_req = mpp_service_next_req(p); in mpp_service_cmd_send()
739 mpp_req->size = (p->reg_offset_count) * sizeof(RegOffsetInfo); in mpp_service_cmd_send()
741 mpp_req->data_ptr = REQ_DATA_PTR(&p->reg_offset_info[p->reg_offset_pos]); in mpp_service_cmd_send()
742 p->reg_offset_pos += p->reg_offset_count; in mpp_service_cmd_send()
746 if (p->rcb_count) { in mpp_service_cmd_send()
747 MppReqV1 *mpp_req = mpp_service_next_req(p); in mpp_service_cmd_send()
751 mpp_req->size = p->rcb_count * sizeof(RcbInfo); in mpp_service_cmd_send()
753 mpp_req->data_ptr = REQ_DATA_PTR(&p->rcb_info[p->rcb_pos]); in mpp_service_cmd_send()
754 p->rcb_pos += p->rcb_count; in mpp_service_cmd_send()
758 if (p->req_cnt > 1) { in mpp_service_cmd_send()
761 for (i = 0; i < p->req_cnt; i++) in mpp_service_cmd_send()
762 p->reqs[i].flag |= MPP_FLAGS_MULTI_MSG; in mpp_service_cmd_send()
764 p->reqs[p->req_cnt - 1].flag |= MPP_FLAGS_LAST_MSG | MPP_FLAGS_REG_OFFSET_ALONE; in mpp_service_cmd_send()
766 if (p->batch_io) { in mpp_service_cmd_send()
771 ret = mpp_service_ioctl_request(p->server, &p->reqs[0]); in mpp_service_cmd_send()
779 p->req_cnt = 0; in mpp_service_cmd_send()
780 p->reg_offset_count = 0; in mpp_service_cmd_send()
781 p->reg_offset_pos = 0; in mpp_service_cmd_send()
782 p->rcb_count = 0; in mpp_service_cmd_send()
783 p->rcb_pos = 0; in mpp_service_cmd_send()
784 p->rcb_count = 0; in mpp_service_cmd_send()
790 MppDevMppService *p = (MppDevMppService *)ctx; in mpp_service_cmd_poll() local
793 if (p->batch_io) { in mpp_service_cmd_poll()
800 if (p->support_hw_irq && cfg) { in mpp_service_cmd_poll()
821 ret = mpp_service_ioctl_request(p->server, &dev_req); in mpp_service_cmd_poll()