Lines Matching refs:ctx

335 static int amdgpu_uvd_cs_pass1(struct amdgpu_uvd_cs_ctx *ctx)  in amdgpu_uvd_cs_pass1()  argument
343 lo = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->data0); in amdgpu_uvd_cs_pass1()
344 hi = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->data1); in amdgpu_uvd_cs_pass1()
347 mapping = amdgpu_cs_find_mapping(ctx->parser, addr, &bo); in amdgpu_uvd_cs_pass1()
353 if (!ctx->parser->adev->uvd.address_64_bit) { in amdgpu_uvd_cs_pass1()
355 cmd = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->idx) >> 1; in amdgpu_uvd_cs_pass1()
519 static int amdgpu_uvd_cs_msg(struct amdgpu_uvd_cs_ctx *ctx, in amdgpu_uvd_cs_msg() argument
522 struct amdgpu_device *adev = ctx->parser->adev; in amdgpu_uvd_cs_msg()
569 adev->uvd.filp[i] = ctx->parser->filp; in amdgpu_uvd_cs_msg()
579 r = amdgpu_uvd_cs_msg_decode(msg, ctx->buf_sizes); in amdgpu_uvd_cs_msg()
587 if (adev->uvd.filp[i] != ctx->parser->filp) { in amdgpu_uvd_cs_msg()
620 static int amdgpu_uvd_cs_pass2(struct amdgpu_uvd_cs_ctx *ctx) in amdgpu_uvd_cs_pass2() argument
630 lo = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->data0); in amdgpu_uvd_cs_pass2()
631 hi = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->data1); in amdgpu_uvd_cs_pass2()
634 mapping = amdgpu_cs_find_mapping(ctx->parser, addr, &bo); in amdgpu_uvd_cs_pass2()
646 ib = &ctx->parser->ibs[ctx->ib_idx]; in amdgpu_uvd_cs_pass2()
647 ib->ptr[ctx->data0] = start & 0xFFFFFFFF; in amdgpu_uvd_cs_pass2()
648 ib->ptr[ctx->data1] = start >> 32; in amdgpu_uvd_cs_pass2()
650 cmd = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->idx) >> 1; in amdgpu_uvd_cs_pass2()
652 if ((end - start) < ctx->buf_sizes[cmd]) { in amdgpu_uvd_cs_pass2()
655 ctx->buf_sizes[cmd]); in amdgpu_uvd_cs_pass2()
660 if ((end - start) < ctx->buf_sizes[4]) { in amdgpu_uvd_cs_pass2()
663 ctx->buf_sizes[4]); in amdgpu_uvd_cs_pass2()
671 if (!ctx->parser->adev->uvd.address_64_bit) { in amdgpu_uvd_cs_pass2()
679 (start >> 28) != (ctx->parser->adev->uvd.gpu_addr >> 28)) { in amdgpu_uvd_cs_pass2()
687 ctx->has_msg_cmd = true; in amdgpu_uvd_cs_pass2()
688 r = amdgpu_uvd_cs_msg(ctx, bo, addr); in amdgpu_uvd_cs_pass2()
691 } else if (!ctx->has_msg_cmd) { in amdgpu_uvd_cs_pass2()
707 static int amdgpu_uvd_cs_reg(struct amdgpu_uvd_cs_ctx *ctx, in amdgpu_uvd_cs_reg() argument
708 int (*cb)(struct amdgpu_uvd_cs_ctx *ctx)) in amdgpu_uvd_cs_reg() argument
710 struct amdgpu_ib *ib = &ctx->parser->ibs[ctx->ib_idx]; in amdgpu_uvd_cs_reg()
713 ctx->idx++; in amdgpu_uvd_cs_reg()
714 for (i = 0; i <= ctx->count; ++i) { in amdgpu_uvd_cs_reg()
715 unsigned reg = ctx->reg + i; in amdgpu_uvd_cs_reg()
717 if (ctx->idx >= ib->length_dw) { in amdgpu_uvd_cs_reg()
724 ctx->data0 = ctx->idx; in amdgpu_uvd_cs_reg()
727 ctx->data1 = ctx->idx; in amdgpu_uvd_cs_reg()
730 r = cb(ctx); in amdgpu_uvd_cs_reg()
740 ctx->idx++; in amdgpu_uvd_cs_reg()
753 static int amdgpu_uvd_cs_packets(struct amdgpu_uvd_cs_ctx *ctx, in amdgpu_uvd_cs_packets() argument
754 int (*cb)(struct amdgpu_uvd_cs_ctx *ctx)) in amdgpu_uvd_cs_packets() argument
756 struct amdgpu_ib *ib = &ctx->parser->ibs[ctx->ib_idx]; in amdgpu_uvd_cs_packets()
759 for (ctx->idx = 0 ; ctx->idx < ib->length_dw; ) { in amdgpu_uvd_cs_packets()
760 uint32_t cmd = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->idx); in amdgpu_uvd_cs_packets()
764 ctx->reg = CP_PACKET0_GET_REG(cmd); in amdgpu_uvd_cs_packets()
765 ctx->count = CP_PACKET_GET_COUNT(cmd); in amdgpu_uvd_cs_packets()
766 r = amdgpu_uvd_cs_reg(ctx, cb); in amdgpu_uvd_cs_packets()
771 ++ctx->idx; in amdgpu_uvd_cs_packets()
790 struct amdgpu_uvd_cs_ctx ctx = {}; in amdgpu_uvd_ring_parse_cs() local
807 ctx.parser = parser; in amdgpu_uvd_ring_parse_cs()
808 ctx.buf_sizes = buf_sizes; in amdgpu_uvd_ring_parse_cs()
809 ctx.ib_idx = ib_idx; in amdgpu_uvd_ring_parse_cs()
812 r = amdgpu_uvd_cs_packets(&ctx, amdgpu_uvd_cs_pass1); in amdgpu_uvd_ring_parse_cs()
817 r = amdgpu_uvd_cs_packets(&ctx, amdgpu_uvd_cs_pass2); in amdgpu_uvd_ring_parse_cs()
821 if (!ctx.has_msg_cmd) { in amdgpu_uvd_ring_parse_cs()
826 amdgpu_uvd_note_usage(ctx.parser->adev); in amdgpu_uvd_ring_parse_cs()