amd/common: split out ac_parse_ib_chunk from ac_parse_ib
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 4 Aug 2017 16:55:39 +0000 (18:55 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 22 Aug 2017 07:50:46 +0000 (09:50 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/amd/common/ac_debug.c
src/amd/common/ac_debug.h

index 79473ecb8d0dbc25606527a86ea7e7143ec94a0c..42a72c086b189a759b31c8eb7d16f86ebb38c24a 100644 (file)
@@ -390,12 +390,10 @@ static uint32_t *ac_parse_packet3(FILE *f, uint32_t *ib, int *num_dw,
  *                      be NULL.
  * \param addr_callback_data user data for addr_callback
  */
-void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id,
-                const char *name, enum chip_class chip_class,
-                ac_debug_addr_callback addr_callback, void *addr_callback_data)
+void ac_parse_ib_chunk(FILE *f, uint32_t *ib, int num_dw, int trace_id,
+                      enum chip_class chip_class,
+                      ac_debug_addr_callback addr_callback, void *addr_callback_data)
 {
-       fprintf(f, "------------------ %s begin ------------------\n", name);
-
        while (num_dw > 0) {
                unsigned type = PKT_TYPE_G(ib[0]);
 
@@ -420,10 +418,33 @@ void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id,
                }
        }
 
-       fprintf(f, "------------------- %s end -------------------\n", name);
        if (num_dw < 0) {
-               printf("Packet ends after the end of IB.\n");
+               printf("\nPacket ends after the end of IB.\n");
                exit(0);
        }
-       fprintf(f, "\n");
+}
+
+/**
+ * Parse and print an IB into a file.
+ *
+ * \param f            file
+ * \param ib           IB
+ * \param num_dw       size of the IB
+ * \param chip_class   chip class
+ * \param trace_id     the last trace ID that is known to have been reached
+ *                     and executed by the CP, typically read from a buffer
+ * \param addr_callback Get a mapped pointer of the IB at a given address. Can
+ *                      be NULL.
+ * \param addr_callback_data user data for addr_callback
+ */
+void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id,
+                const char *name, enum chip_class chip_class,
+                ac_debug_addr_callback addr_callback, void *addr_callback_data)
+{
+       fprintf(f, "------------------ %s begin ------------------\n", name);
+
+       ac_parse_ib_chunk(f, ib, num_dw, trace_id, chip_class, addr_callback,
+                         addr_callback_data);
+
+       fprintf(f, "------------------- %s end -------------------\n\n", name);
 }
index 63ac4fa84d18c09e0906b177c0f45bc108d45df5..872420d2b9dc3d6c49b121af9e930b6d769d22b2 100644 (file)
@@ -39,6 +39,9 @@ typedef void *(*ac_debug_addr_callback)(void *data, uint64_t addr);
 
 void ac_dump_reg(FILE *file, unsigned offset, uint32_t value,
                 uint32_t field_mask);
+void ac_parse_ib_chunk(FILE *f, uint32_t *ib, int num_dw, int trace_id,
+                      enum chip_class chip_class,
+                      ac_debug_addr_callback addr_callback, void *addr_callback_data);
 void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id,
                 const char *name, enum chip_class chip_class,
                 ac_debug_addr_callback addr_callback, void *addr_callback_data);