Lines Matching refs:parser
423 * cs_parser_fini() - clean parser states
424 * @parser: parser structure holding parsing context.
430 static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error, bool backoff)
445 list_sort(NULL, &parser->validated, cmp_size_smaller_first);
447 ttm_eu_fence_buffer_objects(&parser->ticket,
448 &parser->validated,
449 &parser->ib.fence->base);
451 ttm_eu_backoff_reservation(&parser->ticket,
452 &parser->validated);
455 if (parser->relocs != NULL) {
456 for (i = 0; i < parser->nrelocs; i++) {
457 struct radeon_bo *bo = parser->relocs[i].robj;
464 kfree(parser->track);
465 kvfree(parser->relocs);
466 kvfree(parser->vm_bos);
467 for (i = 0; i < parser->nchunks; i++)
468 kvfree(parser->chunks[i].kdata);
469 kfree(parser->chunks);
470 kfree(parser->chunks_array);
471 radeon_ib_free(parser->rdev, &parser->ib);
472 radeon_ib_free(parser->rdev, &parser->const_ib);
476 struct radeon_cs_parser *parser)
480 if (parser->chunk_ib == NULL)
483 if (parser->cs_flags & RADEON_CS_USE_VM)
486 r = radeon_cs_parse(rdev, parser->ring, parser);
487 if (r || parser->parser_error) {
492 r = radeon_cs_sync_rings(parser);
499 if (parser->ring == R600_RING_TYPE_UVD_INDEX)
501 else if ((parser->ring == TN_RING_TYPE_VCE1_INDEX) ||
502 (parser->ring == TN_RING_TYPE_VCE2_INDEX))
505 r = radeon_ib_schedule(rdev, &parser->ib, NULL, true);
558 struct radeon_cs_parser *parser)
560 struct radeon_fpriv *fpriv = parser->filp->driver_priv;
564 if (parser->chunk_ib == NULL)
566 if ((parser->cs_flags & RADEON_CS_USE_VM) == 0)
569 if (parser->const_ib.length_dw) {
570 r = radeon_ring_ib_parse(rdev, parser->ring, &parser->const_ib);
576 r = radeon_ring_ib_parse(rdev, parser->ring, &parser->ib);
581 if (parser->ring == R600_RING_TYPE_UVD_INDEX)
585 r = radeon_bo_vm_update_pte(parser, vm);
590 r = radeon_cs_sync_rings(parser);
598 (parser->chunk_const_ib != NULL)) {
599 r = radeon_ib_schedule(rdev, &parser->ib, &parser
601 r = radeon_ib_schedule(rdev, &parser->ib, NULL, true);
619 static int radeon_cs_ib_fill(struct radeon_device *rdev, struct radeon_cs_parser *parser)
625 if (parser->chunk_ib == NULL)
628 if (parser->cs_flags & RADEON_CS_USE_VM) {
629 struct radeon_fpriv *fpriv = parser->filp->driver_priv;
633 (parser->chunk_const_ib != NULL)) {
634 ib_chunk = parser->chunk_const_ib;
639 r = radeon_ib_get(rdev, parser->ring, &parser->const_ib,
645 parser->const_ib.is_const_ib = true;
646 parser->const_ib.length_dw = ib_chunk->length_dw;
647 if (copy_from_user(parser->const_ib.ptr,
653 ib_chunk = parser->chunk_ib;
659 ib_chunk = parser->chunk_ib;
661 r = radeon_ib_get(rdev, parser->ring, &parser->ib,
667 parser->ib.length_dw = ib_chunk->length_dw;
669 memcpy(parser->ib.ptr, ib_chunk->kdata, ib_chunk->length_dw * 4);
670 else if (copy_from_user(parser->ib.ptr, ib_chunk->user_ptr, ib_chunk->length_dw * 4))
678 struct radeon_cs_parser parser;
693 /* initialize parser */
694 memset(&parser, 0, sizeof(struct radeon_cs_parser));
695 parser.filp = filp;
696 parser.rdev = rdev;
697 parser.dev = rdev->dev;
698 parser.family = rdev->family;
699 r = radeon_cs_parser_init(&parser, data);
701 DRM_ERROR("Failed to initialize parser !\n");
702 radeon_cs_parser_fini(&parser, r, false);
708 r = radeon_cs_ib_fill(rdev, &parser);
710 r = radeon_cs_parser_relocs(&parser);
716 radeon_cs_parser_fini(&parser, r, false);
722 trace_radeon_cs(&parser);
724 r = radeon_cs_ib_chunk(rdev, &parser);
728 r = radeon_cs_ib_vm_chunk(rdev, &parser);
733 radeon_cs_parser_fini(&parser, r, true);
741 * @parser: parser structure holding parsing context.
806 * @p: structure holding the parser context.
827 * @p: structure holding the parser context.
847 * @parser: parser structure holding parsing context.