void demmt_memwrite2(struct mmt_write2 *w2, void *state) { uint32_t i; struct cpu_mapping *m = NULL; for (i = 0; i < max_id + 1; ++i) { m = get_cpu_mapping(i); if (m && w2->addr >= m->cpu_addr && w2->addr < m->cpu_addr + m->length) break; } if (i != max_id + 1) { if (!mem2_buffer) mem2_buffer = malloc(4096); struct mmt_write *w1 = mem2_buffer; w1->msg_type = w2->msg_type; w1->id = i; w1->offset = w2->addr - m->cpu_addr; w1->len = w2->len; memcpy(w1->data, w2->data, w1->len); demmt_memwrite(w1, state); } if (dump_memory_writes) { unsigned char *data = &w2->data[0]; if (w2->len == 1) mmt_printf("@w 0x%" PRIx64 ", 0x%02x\n", w2->addr, data[0]); else if (w2->len == 2) mmt_printf("@w 0x%" PRIx64 ", 0x%04x\n", w2->addr, *(uint16_t *)&data[0]); else if (w2->len == 4 || w2->len == 8 || w2->len == 16 || w2->len == 32) { mmt_printf("@w 0x%" PRIx64 ", ", w2->addr); int i; for (i = 0; i < w2->len; i += 4) mmt_printf("0x%08x ", *(uint32_t *)&data[i]); mmt_printf("%s\n", ""); } else { mmt_error("unhandled size: %d\n", w2->len); demmt_abort(); } } }
static void demmt_memread(struct mmt_read *w, void *state) { char comment[50]; struct cpu_mapping *mapping = get_cpu_mapping(w->id); if (mapping == NULL) { mmt_error("invalid buffer id: %d\n", w->id); demmt_abort(); } uint64_t gpu_addr = cpu_mapping_to_gpu_addr(mapping, w->offset); if (print_gpu_addresses && gpu_addr) sprintf(comment, " (gpu=0x%08" PRIx64 ")", gpu_addr); else comment[0] = 0; if (dump_memory_reads) { unsigned char *data = &w->data[0]; if (w->len == 1) mmt_printf("r %d:0x%04x%s, 0x%02x\n", w->id, w->offset, comment, data[0]); else if (w->len == 2) mmt_printf("r %d:0x%04x%s, 0x%04x\n", w->id, w->offset, comment, *(uint16_t *)&data[0]); else if (w->len == 4 || w->len == 8 || w->len == 16 || w->len == 32) { mmt_printf("r %d:0x%04x%s, ", w->id, w->offset, comment); int i; for (i = 0; i < w->len; i += 4) mmt_printf("0x%08x ", *(uint32_t *)&data[i]); mmt_printf("%s\n", ""); } else { mmt_error("unhandled size: %d\n", w->len); demmt_abort(); } } }
void decode_tsc(struct rnndeccontext *texture_ctx, uint32_t tsc, uint32_t *data) { int idx; for (idx = 0; idx < 8; idx++) { struct rnndecaddrinfo *ai = rnndec_decodeaddr(texture_ctx, tsc_domain, idx * 4, 1); char *dec_val = rnndec_decodeval(texture_ctx, ai->typeinfo, data[idx], ai->width); mmt_printf("TSC[%d]: 0x%08x %s = %s\n", tsc, data[idx], ai->name, dec_val); rnndec_free_decaddrinfo(ai); free(dec_val); } }