17ec681f3Smrg/*
27ec681f3Smrg * Copyright (c) 2012 Rob Clark <robdclark@gmail.com>
37ec681f3Smrg *
47ec681f3Smrg * Permission is hereby granted, free of charge, to any person obtaining a
57ec681f3Smrg * copy of this software and associated documentation files (the "Software"),
67ec681f3Smrg * to deal in the Software without restriction, including without limitation
77ec681f3Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
87ec681f3Smrg * and/or sell copies of the Software, and to permit persons to whom the
97ec681f3Smrg * Software is furnished to do so, subject to the following conditions:
107ec681f3Smrg *
117ec681f3Smrg * The above copyright notice and this permission notice (including the next
127ec681f3Smrg * paragraph) shall be included in all copies or substantial portions of the
137ec681f3Smrg * Software.
147ec681f3Smrg *
157ec681f3Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
167ec681f3Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
177ec681f3Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
187ec681f3Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
197ec681f3Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
207ec681f3Smrg * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
217ec681f3Smrg * SOFTWARE.
227ec681f3Smrg */
237ec681f3Smrg
247ec681f3Smrg#ifndef __CFFDEC_H__
257ec681f3Smrg#define __CFFDEC_H__
267ec681f3Smrg
277ec681f3Smrg#include <stdbool.h>
287ec681f3Smrg
297ec681f3Smrgenum query_mode {
307ec681f3Smrg   /* default mode, dump all queried regs on each draw: */
317ec681f3Smrg   QUERY_ALL = 0,
327ec681f3Smrg
337ec681f3Smrg   /* only dump if any of the queried regs were written
347ec681f3Smrg    * since last draw:
357ec681f3Smrg    */
367ec681f3Smrg   QUERY_WRITTEN,
377ec681f3Smrg
387ec681f3Smrg   /* only dump if any of the queried regs changed since
397ec681f3Smrg    * last draw:
407ec681f3Smrg    */
417ec681f3Smrg   QUERY_DELTA,
427ec681f3Smrg};
437ec681f3Smrg
447ec681f3Smrgstruct cffdec_options {
457ec681f3Smrg   unsigned gpu_id;
467ec681f3Smrg   int draw_filter;
477ec681f3Smrg   int color;
487ec681f3Smrg   int dump_shaders;
497ec681f3Smrg   int summary;
507ec681f3Smrg   int allregs;
517ec681f3Smrg   int dump_textures;
527ec681f3Smrg   int decode_markers;
537ec681f3Smrg   char *script;
547ec681f3Smrg
557ec681f3Smrg   int query_compare; /* binning vs SYSMEM/GMEM compare mode */
567ec681f3Smrg   int query_mode;    /* enum query_mode */
577ec681f3Smrg   char **querystrs;
587ec681f3Smrg   int nquery;
597ec681f3Smrg
607ec681f3Smrg   /* In "once" mode, only decode a cmdstream buffer once (per draw
617ec681f3Smrg    * mode, in the case of a6xx+ where a single cmdstream buffer can
627ec681f3Smrg    * be used for both binning and draw pass), rather than each time
637ec681f3Smrg    * encountered (ie. once per tile/bin in GMEM draw passes)
647ec681f3Smrg    */
657ec681f3Smrg   int once;
667ec681f3Smrg
677ec681f3Smrg   /* In unit_test mode, suppress pathnames in output so that we can have references
687ec681f3Smrg    * independent of the build dir.
697ec681f3Smrg    */
707ec681f3Smrg   int unit_test;
717ec681f3Smrg
727ec681f3Smrg   /* for crashdec, where we know CP_IBx_REM_SIZE, we can use this
737ec681f3Smrg    * to highlight the cmdstream not parsed yet, to make it easier
747ec681f3Smrg    * to see how far along the CP is.
757ec681f3Smrg    */
767ec681f3Smrg   struct {
777ec681f3Smrg      uint64_t base;
787ec681f3Smrg      uint32_t rem;
797ec681f3Smrg   } ibs[4];
807ec681f3Smrg};
817ec681f3Smrg
827ec681f3Smrgvoid printl(int lvl, const char *fmt, ...);
837ec681f3Smrgconst char *pktname(unsigned opc);
847ec681f3Smrguint32_t regbase(const char *name);
857ec681f3Smrgconst char *regname(uint32_t regbase, int color);
867ec681f3Smrgbool reg_written(uint32_t regbase);
877ec681f3Smrguint32_t reg_lastval(uint32_t regbase);
887ec681f3Smrguint32_t reg_val(uint32_t regbase);
897ec681f3Smrgvoid reg_set(uint32_t regbase, uint32_t val);
907ec681f3Smrgvoid reset_regs(void);
917ec681f3Smrgvoid cffdec_init(const struct cffdec_options *options);
927ec681f3Smrgvoid dump_register_val(uint32_t regbase, uint32_t dword, int level);
937ec681f3Smrgvoid dump_commands(uint32_t *dwords, uint32_t sizedwords, int level);
947ec681f3Smrg
957ec681f3Smrg#endif /* __CFFDEC_H__ */
96