X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fbroadcom%2Fclif%2Fclif_private.h;h=597d0b5067392f8550de6df8ccffcb4a675ead04;hp=376daef80d949efb8cc823da0dd08fc6f23fa2bb;hb=d934492ff9aba3bf90dd45a9aa426aedb7197e99;hpb=a77cb724da62920476073566728fbaf9db341dc4 diff --git a/src/broadcom/clif/clif_private.h b/src/broadcom/clif/clif_private.h index 376daef80d9..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,17 +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); + 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); + 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); + const uint8_t *cl, uint32_t *size, bool reloc_mode); static inline void out(struct clif_dump *clif, const char *fmt, ...) @@ -84,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 */