Lines Matching refs:ring
553 static bool validate_cmds_sorted(struct intel_engine_cs *ring, in validate_cmds_sorted() argument
575 ring->id, i, j, curr, previous); in validate_cmds_sorted()
609 static bool validate_regs_sorted(struct intel_engine_cs *ring) in validate_regs_sorted() argument
611 return check_sorted(ring->id, ring->reg_table, ring->reg_count) && in validate_regs_sorted()
612 check_sorted(ring->id, ring->master_reg_table, in validate_regs_sorted()
613 ring->master_reg_count); in validate_regs_sorted()
637 static int init_hash_table(struct intel_engine_cs *ring, in init_hash_table() argument
643 hash_init(ring->cmd_hash); in init_hash_table()
658 hash_add(ring->cmd_hash, &desc_node->node, in init_hash_table()
666 static void fini_hash_table(struct intel_engine_cs *ring) in fini_hash_table() argument
672 hash_for_each_safe(ring->cmd_hash, i, tmp, desc_node, node) { in fini_hash_table()
688 int i915_cmd_parser_init_ring(struct intel_engine_cs *ring) in i915_cmd_parser_init_ring() argument
694 if (!IS_GEN7(ring->dev)) in i915_cmd_parser_init_ring()
697 switch (ring->id) { in i915_cmd_parser_init_ring()
699 if (IS_HASWELL(ring->dev)) { in i915_cmd_parser_init_ring()
708 ring->reg_table = gen7_render_regs; in i915_cmd_parser_init_ring()
709 ring->reg_count = ARRAY_SIZE(gen7_render_regs); in i915_cmd_parser_init_ring()
711 if (IS_HASWELL(ring->dev)) { in i915_cmd_parser_init_ring()
712 ring->master_reg_table = hsw_master_regs; in i915_cmd_parser_init_ring()
713 ring->master_reg_count = ARRAY_SIZE(hsw_master_regs); in i915_cmd_parser_init_ring()
715 ring->master_reg_table = ivb_master_regs; in i915_cmd_parser_init_ring()
716 ring->master_reg_count = ARRAY_SIZE(ivb_master_regs); in i915_cmd_parser_init_ring()
719 ring->get_cmd_length_mask = gen7_render_get_cmd_length_mask; in i915_cmd_parser_init_ring()
724 ring->get_cmd_length_mask = gen7_bsd_get_cmd_length_mask; in i915_cmd_parser_init_ring()
727 if (IS_HASWELL(ring->dev)) { in i915_cmd_parser_init_ring()
735 ring->reg_table = gen7_blt_regs; in i915_cmd_parser_init_ring()
736 ring->reg_count = ARRAY_SIZE(gen7_blt_regs); in i915_cmd_parser_init_ring()
738 if (IS_HASWELL(ring->dev)) { in i915_cmd_parser_init_ring()
739 ring->master_reg_table = hsw_master_regs; in i915_cmd_parser_init_ring()
740 ring->master_reg_count = ARRAY_SIZE(hsw_master_regs); in i915_cmd_parser_init_ring()
742 ring->master_reg_table = ivb_master_regs; in i915_cmd_parser_init_ring()
743 ring->master_reg_count = ARRAY_SIZE(ivb_master_regs); in i915_cmd_parser_init_ring()
746 ring->get_cmd_length_mask = gen7_blt_get_cmd_length_mask; in i915_cmd_parser_init_ring()
752 ring->get_cmd_length_mask = gen7_bsd_get_cmd_length_mask; in i915_cmd_parser_init_ring()
756 ring->id); in i915_cmd_parser_init_ring()
760 BUG_ON(!validate_cmds_sorted(ring, cmd_tables, cmd_table_count)); in i915_cmd_parser_init_ring()
761 BUG_ON(!validate_regs_sorted(ring)); in i915_cmd_parser_init_ring()
763 WARN_ON(!hash_empty(ring->cmd_hash)); in i915_cmd_parser_init_ring()
765 ret = init_hash_table(ring, cmd_tables, cmd_table_count); in i915_cmd_parser_init_ring()
768 fini_hash_table(ring); in i915_cmd_parser_init_ring()
772 ring->needs_cmd_parser = true; in i915_cmd_parser_init_ring()
784 void i915_cmd_parser_fini_ring(struct intel_engine_cs *ring) in i915_cmd_parser_fini_ring() argument
786 if (!ring->needs_cmd_parser) in i915_cmd_parser_fini_ring()
789 fini_hash_table(ring); in i915_cmd_parser_fini_ring()
793 find_cmd_in_table(struct intel_engine_cs *ring, in find_cmd_in_table() argument
798 hash_for_each_possible(ring->cmd_hash, desc_node, node, in find_cmd_in_table()
820 find_cmd(struct intel_engine_cs *ring, in find_cmd() argument
827 desc = find_cmd_in_table(ring, cmd_header); in find_cmd()
831 mask = ring->get_cmd_length_mask(cmd_header); in find_cmd()
961 bool i915_needs_cmd_parser(struct intel_engine_cs *ring) in i915_needs_cmd_parser() argument
963 if (!ring->needs_cmd_parser) in i915_needs_cmd_parser()
966 if (!USES_PPGTT(ring->dev)) in i915_needs_cmd_parser()
972 static bool check_cmd(const struct intel_engine_cs *ring, in check_cmd() argument
1002 find_reg(ring->reg_table, ring->reg_count, in check_cmd()
1006 reg = find_reg(ring->master_reg_table, in check_cmd()
1007 ring->master_reg_count, in check_cmd()
1012 reg_addr, *cmd, ring->id); in check_cmd()
1085 dword, ring->id); in check_cmd()
1111 int i915_parse_cmds(struct intel_engine_cs *ring, in i915_parse_cmds() argument
1145 desc = find_cmd(ring, *cmd, &default_desc); in i915_parse_cmds()
1177 if (!check_cmd(ring, desc, cmd, length, is_master, in i915_parse_cmds()