• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2012 Rob Clark <robdclark@gmail.com>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  */
23 
24 #ifndef __CFFDEC_H__
25 #define __CFFDEC_H__
26 
27 #include <stdbool.h>
28 
29 enum query_mode {
30    /* default mode, dump all queried regs on each draw: */
31    QUERY_ALL = 0,
32 
33    /* only dump if any of the queried regs were written
34     * since last draw:
35     */
36    QUERY_WRITTEN,
37 
38    /* only dump if any of the queried regs changed since
39     * last draw:
40     */
41    QUERY_DELTA,
42 };
43 
44 struct cffdec_options {
45    unsigned gpu_id;
46    int draw_filter;
47    int color;
48    int dump_shaders;
49    int summary;
50    int allregs;
51    int dump_textures;
52    int decode_markers;
53    char *script;
54 
55    int query_compare; /* binning vs SYSMEM/GMEM compare mode */
56    int query_mode;    /* enum query_mode */
57    char **querystrs;
58    int nquery;
59 
60    /* In "once" mode, only decode a cmdstream buffer once (per draw
61     * mode, in the case of a6xx+ where a single cmdstream buffer can
62     * be used for both binning and draw pass), rather than each time
63     * encountered (ie. once per tile/bin in GMEM draw passes)
64     */
65    int once;
66 
67    /* In unit_test mode, suppress pathnames in output so that we can have references
68     * independent of the build dir.
69     */
70    int unit_test;
71 
72    /* for crashdec, where we know CP_IBx_REM_SIZE, we can use this
73     * to highlight the cmdstream not parsed yet, to make it easier
74     * to see how far along the CP is.
75     */
76    struct {
77       uint64_t base;
78       uint32_t rem;
79    } ibs[4];
80 };
81 
82 void printl(int lvl, const char *fmt, ...);
83 const char *pktname(unsigned opc);
84 uint32_t regbase(const char *name);
85 const char *regname(uint32_t regbase, int color);
86 bool reg_written(uint32_t regbase);
87 uint32_t reg_lastval(uint32_t regbase);
88 uint32_t reg_val(uint32_t regbase);
89 void reg_set(uint32_t regbase, uint32_t val);
90 void reset_regs(void);
91 void cffdec_init(const struct cffdec_options *options);
92 void dump_register_val(uint32_t regbase, uint32_t dword, int level);
93 void dump_commands(uint32_t *dwords, uint32_t sizedwords, int level);
94 
95 #endif /* __CFFDEC_H__ */
96