Lines Matching full:parser

416  * radeon_cs_parser_fini() - clean parser states
417 * @parser: parser structure holding parsing context.
424 static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error, bool backoff) in radeon_cs_parser_fini() argument
439 list_sort(NULL, &parser->validated, cmp_size_smaller_first); in radeon_cs_parser_fini()
441 ttm_eu_fence_buffer_objects(&parser->ticket, in radeon_cs_parser_fini()
442 &parser->validated, in radeon_cs_parser_fini()
443 &parser->ib.fence->base); in radeon_cs_parser_fini()
445 ttm_eu_backoff_reservation(&parser->ticket, in radeon_cs_parser_fini()
446 &parser->validated); in radeon_cs_parser_fini()
449 if (parser->relocs != NULL) { in radeon_cs_parser_fini()
450 for (i = 0; i < parser->nrelocs; i++) { in radeon_cs_parser_fini()
451 struct radeon_bo *bo = parser->relocs[i].robj; in radeon_cs_parser_fini()
458 kfree(parser->track); in radeon_cs_parser_fini()
459 kvfree(parser->relocs); in radeon_cs_parser_fini()
460 kvfree(parser->vm_bos); in radeon_cs_parser_fini()
461 for (i = 0; i < parser->nchunks; i++) in radeon_cs_parser_fini()
462 kvfree(parser->chunks[i].kdata); in radeon_cs_parser_fini()
463 kvfree(parser->chunks); in radeon_cs_parser_fini()
464 kvfree(parser->chunks_array); in radeon_cs_parser_fini()
465 radeon_ib_free(parser->rdev, &parser->ib); in radeon_cs_parser_fini()
466 radeon_ib_free(parser->rdev, &parser->const_ib); in radeon_cs_parser_fini()
470 struct radeon_cs_parser *parser) in radeon_cs_ib_chunk() argument
474 if (parser->chunk_ib == NULL) in radeon_cs_ib_chunk()
477 if (parser->cs_flags & RADEON_CS_USE_VM) in radeon_cs_ib_chunk()
480 r = radeon_cs_parse(rdev, parser->ring, parser); in radeon_cs_ib_chunk()
481 if (r || parser->parser_error) { in radeon_cs_ib_chunk()
486 r = radeon_cs_sync_rings(parser); in radeon_cs_ib_chunk()
493 if (parser->ring == R600_RING_TYPE_UVD_INDEX) in radeon_cs_ib_chunk()
495 else if ((parser->ring == TN_RING_TYPE_VCE1_INDEX) || in radeon_cs_ib_chunk()
496 (parser->ring == TN_RING_TYPE_VCE2_INDEX)) in radeon_cs_ib_chunk()
499 r = radeon_ib_schedule(rdev, &parser->ib, NULL, true); in radeon_cs_ib_chunk()
556 struct radeon_cs_parser *parser) in radeon_cs_ib_vm_chunk() argument
558 struct radeon_fpriv *fpriv = parser->filp->driver_priv; in radeon_cs_ib_vm_chunk()
562 if (parser->chunk_ib == NULL) in radeon_cs_ib_vm_chunk()
564 if ((parser->cs_flags & RADEON_CS_USE_VM) == 0) in radeon_cs_ib_vm_chunk()
567 if (parser->const_ib.length_dw) { in radeon_cs_ib_vm_chunk()
568 r = radeon_ring_ib_parse(rdev, parser->ring, &parser->const_ib); in radeon_cs_ib_vm_chunk()
574 r = radeon_ring_ib_parse(rdev, parser->ring, &parser->ib); in radeon_cs_ib_vm_chunk()
579 if (parser->ring == R600_RING_TYPE_UVD_INDEX) in radeon_cs_ib_vm_chunk()
583 r = radeon_bo_vm_update_pte(parser, vm); in radeon_cs_ib_vm_chunk()
588 r = radeon_cs_sync_rings(parser); in radeon_cs_ib_vm_chunk()
596 (parser->chunk_const_ib != NULL)) { in radeon_cs_ib_vm_chunk()
597 r = radeon_ib_schedule(rdev, &parser->ib, &parser->const_ib, true); in radeon_cs_ib_vm_chunk()
599 r = radeon_ib_schedule(rdev, &parser->ib, NULL, true); in radeon_cs_ib_vm_chunk()
617 static int radeon_cs_ib_fill(struct radeon_device *rdev, struct radeon_cs_parser *parser) in radeon_cs_ib_fill() argument
623 if (parser->chunk_ib == NULL) in radeon_cs_ib_fill()
626 if (parser->cs_flags & RADEON_CS_USE_VM) { in radeon_cs_ib_fill()
627 struct radeon_fpriv *fpriv = parser->filp->driver_priv; in radeon_cs_ib_fill()
631 (parser->chunk_const_ib != NULL)) { in radeon_cs_ib_fill()
632 ib_chunk = parser->chunk_const_ib; in radeon_cs_ib_fill()
637 r = radeon_ib_get(rdev, parser->ring, &parser->const_ib, in radeon_cs_ib_fill()
643 parser->const_ib.is_const_ib = true; in radeon_cs_ib_fill()
644 parser->const_ib.length_dw = ib_chunk->length_dw; in radeon_cs_ib_fill()
645 if (copy_from_user(parser->const_ib.ptr, in radeon_cs_ib_fill()
651 ib_chunk = parser->chunk_ib; in radeon_cs_ib_fill()
657 ib_chunk = parser->chunk_ib; in radeon_cs_ib_fill()
659 r = radeon_ib_get(rdev, parser->ring, &parser->ib, in radeon_cs_ib_fill()
665 parser->ib.length_dw = ib_chunk->length_dw; in radeon_cs_ib_fill()
667 memcpy(parser->ib.ptr, ib_chunk->kdata, ib_chunk->length_dw * 4); in radeon_cs_ib_fill()
668 else if (copy_from_user(parser->ib.ptr, ib_chunk->user_ptr, ib_chunk->length_dw * 4)) in radeon_cs_ib_fill()
676 struct radeon_cs_parser parser; in radeon_cs_ioctl() local
691 /* initialize parser */ in radeon_cs_ioctl()
692 memset(&parser, 0, sizeof(struct radeon_cs_parser)); in radeon_cs_ioctl()
693 parser.filp = filp; in radeon_cs_ioctl()
694 parser.rdev = rdev; in radeon_cs_ioctl()
695 parser.dev = rdev->dev; in radeon_cs_ioctl()
696 parser.family = rdev->family; in radeon_cs_ioctl()
697 r = radeon_cs_parser_init(&parser, data); in radeon_cs_ioctl()
699 DRM_ERROR("Failed to initialize parser !\n"); in radeon_cs_ioctl()
700 radeon_cs_parser_fini(&parser, r, false); in radeon_cs_ioctl()
706 r = radeon_cs_ib_fill(rdev, &parser); in radeon_cs_ioctl()
708 r = radeon_cs_parser_relocs(&parser); in radeon_cs_ioctl()
714 radeon_cs_parser_fini(&parser, r, false); in radeon_cs_ioctl()
720 trace_radeon_cs(&parser); in radeon_cs_ioctl()
722 r = radeon_cs_ib_chunk(rdev, &parser); in radeon_cs_ioctl()
726 r = radeon_cs_ib_vm_chunk(rdev, &parser); in radeon_cs_ioctl()
731 radeon_cs_parser_fini(&parser, r, true); in radeon_cs_ioctl()
739 * @p: parser structure holding parsing context.
805 * @p: structure holding the parser context.
826 * @p: structure holding the parser context.
846 * @p: parser structure holding parsing context.