Lines Matching refs:ring

520 static bool validate_cmds_sorted(struct intel_engine_cs *ring,  in validate_cmds_sorted()  argument
542 ring->id, i, j, curr, previous); in validate_cmds_sorted()
574 static bool validate_regs_sorted(struct intel_engine_cs *ring) in validate_regs_sorted() argument
576 return check_sorted(ring->id, ring->reg_table, ring->reg_count) && in validate_regs_sorted()
577 check_sorted(ring->id, ring->master_reg_table, in validate_regs_sorted()
578 ring->master_reg_count); in validate_regs_sorted()
602 static int init_hash_table(struct intel_engine_cs *ring, in init_hash_table() argument
608 hash_init(ring->cmd_hash); in init_hash_table()
623 hash_add(ring->cmd_hash, &desc_node->node, in init_hash_table()
631 static void fini_hash_table(struct intel_engine_cs *ring) in fini_hash_table() argument
637 hash_for_each_safe(ring->cmd_hash, i, tmp, desc_node, node) { in fini_hash_table()
653 int i915_cmd_parser_init_ring(struct intel_engine_cs *ring) in i915_cmd_parser_init_ring() argument
659 if (!IS_GEN7(ring->dev)) in i915_cmd_parser_init_ring()
662 switch (ring->id) { in i915_cmd_parser_init_ring()
664 if (IS_HASWELL(ring->dev)) { in i915_cmd_parser_init_ring()
673 ring->reg_table = gen7_render_regs; in i915_cmd_parser_init_ring()
674 ring->reg_count = ARRAY_SIZE(gen7_render_regs); in i915_cmd_parser_init_ring()
676 if (IS_HASWELL(ring->dev)) { in i915_cmd_parser_init_ring()
677 ring->master_reg_table = hsw_master_regs; in i915_cmd_parser_init_ring()
678 ring->master_reg_count = ARRAY_SIZE(hsw_master_regs); in i915_cmd_parser_init_ring()
680 ring->master_reg_table = ivb_master_regs; in i915_cmd_parser_init_ring()
681 ring->master_reg_count = ARRAY_SIZE(ivb_master_regs); in i915_cmd_parser_init_ring()
684 ring->get_cmd_length_mask = gen7_render_get_cmd_length_mask; in i915_cmd_parser_init_ring()
689 ring->get_cmd_length_mask = gen7_bsd_get_cmd_length_mask; in i915_cmd_parser_init_ring()
692 if (IS_HASWELL(ring->dev)) { in i915_cmd_parser_init_ring()
700 ring->reg_table = gen7_blt_regs; in i915_cmd_parser_init_ring()
701 ring->reg_count = ARRAY_SIZE(gen7_blt_regs); in i915_cmd_parser_init_ring()
703 if (IS_HASWELL(ring->dev)) { in i915_cmd_parser_init_ring()
704 ring->master_reg_table = hsw_master_regs; in i915_cmd_parser_init_ring()
705 ring->master_reg_count = ARRAY_SIZE(hsw_master_regs); in i915_cmd_parser_init_ring()
707 ring->master_reg_table = ivb_master_regs; in i915_cmd_parser_init_ring()
708 ring->master_reg_count = ARRAY_SIZE(ivb_master_regs); in i915_cmd_parser_init_ring()
711 ring->get_cmd_length_mask = gen7_blt_get_cmd_length_mask; in i915_cmd_parser_init_ring()
717 ring->get_cmd_length_mask = gen7_bsd_get_cmd_length_mask; in i915_cmd_parser_init_ring()
721 ring->id); in i915_cmd_parser_init_ring()
725 BUG_ON(!validate_cmds_sorted(ring, cmd_tables, cmd_table_count)); in i915_cmd_parser_init_ring()
726 BUG_ON(!validate_regs_sorted(ring)); in i915_cmd_parser_init_ring()
728 WARN_ON(!hash_empty(ring->cmd_hash)); in i915_cmd_parser_init_ring()
730 ret = init_hash_table(ring, cmd_tables, cmd_table_count); in i915_cmd_parser_init_ring()
733 fini_hash_table(ring); in i915_cmd_parser_init_ring()
737 ring->needs_cmd_parser = true; in i915_cmd_parser_init_ring()
749 void i915_cmd_parser_fini_ring(struct intel_engine_cs *ring) in i915_cmd_parser_fini_ring() argument
751 if (!ring->needs_cmd_parser) in i915_cmd_parser_fini_ring()
754 fini_hash_table(ring); in i915_cmd_parser_fini_ring()
758 find_cmd_in_table(struct intel_engine_cs *ring, in find_cmd_in_table() argument
763 hash_for_each_possible(ring->cmd_hash, desc_node, node, in find_cmd_in_table()
785 find_cmd(struct intel_engine_cs *ring, in find_cmd() argument
792 desc = find_cmd_in_table(ring, cmd_header); in find_cmd()
796 mask = ring->get_cmd_length_mask(cmd_header); in find_cmd()
929 bool i915_needs_cmd_parser(struct intel_engine_cs *ring) in i915_needs_cmd_parser() argument
931 if (!ring->needs_cmd_parser) in i915_needs_cmd_parser()
934 if (!USES_PPGTT(ring->dev)) in i915_needs_cmd_parser()
940 static bool check_cmd(const struct intel_engine_cs *ring, in check_cmd() argument
979 if (!valid_reg(ring->reg_table, in check_cmd()
980 ring->reg_count, reg_addr)) { in check_cmd()
982 !valid_reg(ring->master_reg_table, in check_cmd()
983 ring->master_reg_count, in check_cmd()
988 ring->id); in check_cmd()
1021 dword, ring->id); in check_cmd()
1047 int i915_parse_cmds(struct intel_engine_cs *ring, in i915_parse_cmds() argument
1081 desc = find_cmd(ring, *cmd, &default_desc); in i915_parse_cmds()
1113 if (!check_cmd(ring, desc, cmd, is_master, &oacontrol_set)) { in i915_parse_cmds()