43 lines
890 B
C
43 lines
890 B
C
#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
|
|
}
|