X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fbroadcom%2Fclif%2Fclif_private.h;h=597d0b5067392f8550de6df8ccffcb4a675ead04;hb=d0b644d9f9d9673d3fe28c8c200209f553adeda1;hp=87de17697d84e3e1d7c6063c3b1aaf59a56bbed8;hpb=71c7e9bea154b46a4f5613a4f59eea9df11e42fa;p=mesa.git diff --git a/src/broadcom/clif/clif_private.h b/src/broadcom/clif/clif_private.h index 87de17697d8..597d0b50673 100644 --- a/src/broadcom/clif/clif_private.h +++ b/src/broadcom/clif/clif_private.h @@ -28,20 +28,36 @@ #include #include "util/list.h" +struct clif_bo { + const char *name; + uint32_t offset; + uint32_t size; + void *vaddr; + bool dumped; +}; + struct clif_dump { const struct v3d_device_info *devinfo; - bool (*lookup_vaddr)(void *data, uint32_t addr, void **vaddr); FILE *out; - /* Opaque data from the caller that is passed to the callbacks. */ - void *data; struct v3d_spec *spec; /* List of struct reloc_worklist_entry */ struct list_head worklist; + + struct clif_bo *bo; + int bo_count; + int bo_array_size; + + /** + * Flag to switch from CLIF ABI to slightly more human-readable + * output. + */ + bool pretty; }; enum reloc_worklist_type { + reloc_cl, reloc_gl_shader_state, reloc_generic_tile_list, }; @@ -53,6 +69,9 @@ struct reloc_worklist_entry { uint32_t addr; union { + struct { + uint32_t end; + } cl; struct { uint32_t num_attrs; } shader_state; @@ -62,26 +81,20 @@ struct reloc_worklist_entry { }; }; +struct clif_bo * +clif_lookup_bo(struct clif_dump *clif, uint32_t addr); + struct reloc_worklist_entry * clif_dump_add_address_to_worklist(struct clif_dump *clif, enum reloc_worklist_type type, uint32_t addr); bool v3d33_clif_dump_packet(struct clif_dump *clif, uint32_t offset, - const uint8_t *cl, uint32_t *size); -void v3d33_clif_dump_gl_shader_state_record(struct clif_dump *clif, - struct reloc_worklist_entry *reloc, - void *vaddr); + const uint8_t *cl, uint32_t *size, bool reloc_mode); bool v3d41_clif_dump_packet(struct clif_dump *clif, uint32_t offset, - const uint8_t *cl, uint32_t *size); -void v3d41_clif_dump_gl_shader_state_record(struct clif_dump *clif, - struct reloc_worklist_entry *reloc, - void *vaddr); + const uint8_t *cl, uint32_t *size, bool reloc_mode); bool v3d42_clif_dump_packet(struct clif_dump *clif, uint32_t offset, - const uint8_t *cl, uint32_t *size); -void v3d42_clif_dump_gl_shader_state_record(struct clif_dump *clif, - struct reloc_worklist_entry *reloc, - void *vaddr); + const uint8_t *cl, uint32_t *size, bool reloc_mode); static inline void out(struct clif_dump *clif, const char *fmt, ...) @@ -93,4 +106,18 @@ out(struct clif_dump *clif, const char *fmt, ...) va_end(args); } +static inline void +out_address(struct clif_dump *clif, uint32_t addr) +{ + struct clif_bo *bo = clif_lookup_bo(clif, addr); + if (bo) { + out(clif, "[%s+0x%08x] /* 0x%08x */", + bo->name, addr - bo->offset, addr); + } else if (addr) { + out(clif, "/* XXX: BO unknown */ 0x%08x", addr); + } else { + out(clif, "[null]"); + } +} + #endif /* CLIF_PRIVATE_H */