1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "viddec_emitter.h" 2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "viddec_fw_workload.h" 3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "viddec_fw_debug.h" 4bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 5bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_emit_flush_current_wkld(viddec_emitter *emit) 6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(emit->cur.data != NULL) 8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee emit->cur.data->num_items = emit->cur.num_items; 10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(emit->next.data != NULL) 12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee emit->next.data->num_items = emit->next.num_items; 14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee emit->cur.num_items = emit->next.num_items; 16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee emit->next.num_items = 0; 17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(emit->cur.data != NULL) 18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee emit->cur.data->result = emit->cur.result; 20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(emit->next.data != NULL) 22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee emit->next.data->result = emit->next.result; 24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee emit->cur.result = emit->next.result; 26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee emit->next.result = 0; 27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return 1; 28bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 29bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 30bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_emit_append(viddec_emitter_wkld *cxt, viddec_workload_item_t *item) 31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee int32_t ret =0; 33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if((cxt->num_items < cxt->max_items) && (cxt->data != NULL)) 34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee cxt->data->item[cxt->num_items] = *item; 36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee cxt->num_items++; 37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = 1; 38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee CDEB(0, "%s: item(%02d) = [%08x %08x %08x %08x]\n",__FUNCTION__, cxt->num_items - 1, item->vwi_type, item->vwi_payload[0], item->vwi_payload[1], item->vwi_payload[2]); 39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee cxt->result |= (VIDDEC_FW_WORKLOAD_ERR_ITEMS_OVERFLOW | VIDDEC_FW_WORKLOAD_ERR_NOTDECODABLE); 43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee WRITE_SVEN(SVEN_MODULE_EVENT_GV_FW_FATAL_WKLD_OVERLFOW, (int)item->vwi_type, (int)(cxt->data), 0, 0, 0, 0); 44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 48bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_emit_contr_tag(viddec_emitter *emit, viddec_input_buffer_t *ibuf, uint8_t incomplete, uint32_t using_next) 49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee viddec_workload_item_t item; 51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee viddec_emitter_wkld *cur_wkld; 52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee cur_wkld = (using_next == 0)? &(emit->cur):&(emit->next); 54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(!incomplete) 56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee item.vwi_type = VIDDEC_WORKLOAD_IBUF_DONE; 57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee item.vwi_type = VIDDEC_WORKLOAD_IBUF_CONTINUED; 59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee item.tag.tag_phys_addr = ibuf->phys; 60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee item.tag.tag_phys_len = ibuf->len; 61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee item.tag.tag_value = ibuf->id; 62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return viddec_emit_append(cur_wkld, &item); 64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 66bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_emit_assoc_tag(viddec_emitter *emit, uint32_t id, uint32_t using_next) 67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee viddec_workload_item_t item; 69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee viddec_emitter_wkld *cur_wkld; 70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee cur_wkld = (using_next == false)? &(emit->cur):&(emit->next); 72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee item.vwi_type = VIDDEC_WORKLOAD_TAG; 73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee item.tag.tag_phys_addr = -1; 74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee item.tag.tag_phys_len = -1; 75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee item.tag.tag_value = id; 76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return viddec_emit_append(cur_wkld, &item); 77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 79