#include <stdio.h> #include "dataflow.h" void print_isd_info(unsigned int baseaddr) { volatile unsigned int *regs; int neps; int nbytes; int i, j; int offset; unsigned int ack_count, nack_count, cur_status; regs = (unsigned int *)baseaddr; if((regs[0] != 0x6a) || (regs[1] != 0xb4)) { printf("Incorrect magic number\n"); return; } neps = regs[2]; nbytes = (regs[3] + 7)/8; regs[4] = 1; // freeze offset = 6; // regs[5] is reset for(i=0;i<neps;i++) { ack_count = 0; for(j=0;j<nbytes;j++) { ack_count <<= 8; ack_count |= regs[offset++]; } nack_count = 0; for(j=0;j<nbytes;j++) { nack_count <<= 8; nack_count |= regs[offset++]; } cur_status = regs[offset++]; printf("#%d: ACK_CNT:%10u NAK_CNT:%10u %s %s\n", i, ack_count, nack_count, cur_status & 1 ? "stb" : " ", cur_status & 2 ? "ack" : " "); } regs[4] = 0; // unfreeze }