Home | History | Annotate | Download | only in mrst

Lines Matching defs:cmdbuf

52 #define RELOC_END(cmdbuf)     (cmdbuf->cmd_base + cmdbuf->size)
54 #define CMD_END(cmdbuf) (cmdbuf->reloc_base)
75 lnc_cmdbuf_p cmdbuf)
81 cmdbuf->size = 0;
82 cmdbuf->cmd_base = NULL;
83 cmdbuf->cmd_idx = NULL;
84 cmdbuf->reloc_base = NULL;
85 cmdbuf->reloc_idx = NULL;
86 cmdbuf->buffer_refs_count = 0;
87 cmdbuf->buffer_refs_allocated = 10;
88 cmdbuf->buffer_refs = (psb_buffer_p *) calloc(1, sizeof(psb_buffer_p) * cmdbuf->buffer_refs_allocated);
89 if (NULL == cmdbuf->buffer_refs) {
90 cmdbuf->buffer_refs_allocated = 0;
94 vaStatus = psb_buffer_create(driver_data, size, psb_bt_cpu_only, &cmdbuf->buf);
95 cmdbuf->size = size;
99 free(cmdbuf->buffer_refs);
100 cmdbuf->buffer_refs = NULL;
101 cmdbuf->buffer_refs_allocated = 0;
106 vaStatus = psb_buffer_create(driver_data, ctx->pic_params_size, psb_bt_cpu_vpu, &cmdbuf->pic_params);
111 vaStatus = psb_buffer_create(driver_data, ctx->header_buffer_size, psb_bt_cpu_vpu, &cmdbuf->header_mem);
116 vaStatus = psb_buffer_create(driver_data, ctx->sliceparam_buffer_size, psb_bt_cpu_vpu, &cmdbuf->slice_params);
120 /* all cmdbuf share one MTX_CURRENT_IN_PARAMS since every MB has a MTX_CURRENT_IN_PARAMS structure
123 cmdbuf->topaz_in_params_I = &ctx->topaz_in_params_I;
124 cmdbuf->topaz_in_params_P = &ctx->topaz_in_params_P;
125 cmdbuf->topaz_above_bellow_params = &ctx->topaz_above_bellow_params;
130 psb_buffer_destroy(&cmdbuf->header_mem);
132 psb_buffer_destroy(&cmdbuf->pic_params);
134 lnc_cmdbuf_destroy(cmdbuf);
142 void lnc_cmdbuf_destroy(lnc_cmdbuf_p cmdbuf)
144 if (cmdbuf->size) {
145 psb_buffer_destroy(&cmdbuf->buf);
146 cmdbuf->size = 0;
148 if (cmdbuf->buffer_refs_allocated) {
149 free(cmdbuf->buffer_refs);
150 cmdbuf->buffer_refs = NULL;
151 cmdbuf->buffer_refs_allocated = 0;
154 psb_buffer_destroy(&cmdbuf->pic_params);
155 psb_buffer_destroy(&cmdbuf->header_mem);
156 psb_buffer_destroy(&cmdbuf->slice_params);
165 int lnc_cmdbuf_reset(lnc_cmdbuf_p cmdbuf)
169 cmdbuf->cmd_base = NULL;
170 cmdbuf->cmd_idx = NULL;
171 cmdbuf->reloc_base = NULL;
172 cmdbuf->reloc_idx = NULL;
174 cmdbuf->buffer_refs_count = 0;
175 cmdbuf->cmd_count = 0;
177 ret = psb_buffer_map(&cmdbuf->buf, &cmdbuf->cmd_base);
182 cmdbuf->cmd_start = cmdbuf->cmd_base;
183 cmdbuf->cmd_idx = (uint32_t *) cmdbuf->cmd_base;
185 cmdbuf->reloc_base = cmdbuf->cmd_base + CMD_SIZE;
186 cmdbuf->reloc_idx = (struct drm_psb_reloc *) cmdbuf->reloc_base;
189 lnc_cmdbuf_buffer_ref(cmdbuf, &cmdbuf->buf); /* cmd buf == 0 */
198 int lnc_cmdbuf_unmap(lnc_cmdbuf_p cmdbuf)
200 cmdbuf->cmd_base = NULL;
201 cmdbuf->cmd_start = NULL;
202 cmdbuf->cmd_idx = NULL;
203 cmdbuf->reloc_base = NULL;
204 cmdbuf->reloc_idx = NULL;
205 cmdbuf->cmd_count = 0;
206 psb_buffer_unmap(&cmdbuf->buf);
216 int lnc_cmdbuf_buffer_ref(lnc_cmdbuf_p cmdbuf, psb_buffer_p buf)
220 while ((item_loc < cmdbuf->buffer_refs_count) && (cmdbuf->buffer_refs[item_loc] != buf)) {
223 if (item_loc == cmdbuf->buffer_refs_count) {
225 if (item_loc >= cmdbuf->buffer_refs_allocated) {
227 int new_size = cmdbuf->buffer_refs_allocated + 10;
233 memcpy(new_array, cmdbuf->buffer_refs, sizeof(psb_buffer_p) * cmdbuf->buffer_refs_allocated);
234 free(cmdbuf->buffer_refs);
235 cmdbuf->buffer_refs_allocated = new_size;
236 cmdbuf->buffer_refs = new_array;
238 cmdbuf->buffer_refs[item_loc] = buf;
239 cmdbuf->buffer_refs_count++;
245 /* Creates a relocation record for a DWORD in the mapped "cmdbuf" at address
253 void lnc_cmdbuf_add_relocation(lnc_cmdbuf_p cmdbuf,
261 uint32_t *start_of_dst_buffer) /*Index of the list refered by cmdbuf->buffer_refs */
263 struct drm_psb_reloc *reloc = cmdbuf->reloc_idx;
268 reloc->buffer = lnc_cmdbuf_buffer_ref(cmdbuf, ref_buffer);
284 *addr_in_dst_buffer = reloc - (struct drm_psb_reloc *)cmdbuf->reloc_base;
291 cmdbuf->reloc_idx++;
293 ASSERT(((unsigned char *)(cmdbuf->reloc_idx)) < RELOC_END(cmdbuf));
297 * Advances "obj_context" to the next cmdbuf
303 lnc_cmdbuf_p cmdbuf;
315 cmdbuf = obj_context->lnc_cmdbuf_list[obj_context->cmdbuf_current];
316 ret = lnc_cmdbuf_reset(cmdbuf);
319 obj_context->lnc_cmdbuf = cmdbuf;
323 lnc_cmdbuf_buffer_ref(cmdbuf, &cmdbuf->pic_params);
324 lnc_cmdbuf_buffer_ref(cmdbuf, &cmdbuf->slice_params);
330 * This is the user-space do-it-all interface to the drm cmdbuf ioctl.
470 * Submits the current cmdbuf
524 lnc_cmdbuf_p cmdbuf = obj_context->lnc_cmdbuf;
531 unsigned int cmdbuffer_size = (unsigned char *) cmdbuf->cmd_idx - cmdbuf->cmd_start; /* In bytes */
534 ASSERT((unsigned char *) cmdbuf->cmd_idx < CMD_END(cmdbuf));
544 reloc_offset = cmdbuf->reloc_base - cmdbuf->cmd_base;
545 num_relocs = (((unsigned char *) cmdbuf->reloc_idx) - cmdbuf->reloc_base) / sizeof(struct drm_psb_reloc);
547 lnc_cmdbuf_unmap(cmdbuf);
549 ASSERT(NULL == cmdbuf->reloc_base);
562 cmdbuf->buffer_refs, cmdbuf->buffer_refs_count, wsbmKBufHandle(wsbmKBuf(cmdbuf->buf.drm_buf)),
564 wsbmKBufHandle(wsbmKBuf(cmdbuf->buf.drm_buf)), reloc_offset, num_relocs,