char *dcode_msg_pkt(char *buf) { static char *pkt_typ[] = {"INFO","WARN","ERROR","Not a message type"}; static char *msg_src[] = {"Misc","VME Ctrl","VME Mstr","VME Rdbk", "VME IH","VME Slave","VME Arb","Ext FIFO", "Eth Rcvr","Eth Trns","JTAG mod","Flash mod", "Config mod","BTC mod","Rst Hndlr","StrtupShdwn"}; static char *ctrlerrs[] = {"No Error","Unknown Address","Unknown Delay Type", "Incompatible Options","Read Error on Units", "Read Error on Control Word","Read Error on Address", "Read Error on Data Count","Read Error on Data"}; static char *mstrerrs[] = {"No Error","Bus Error","Not Allowed","Bus Timeout"}; static char *iherrs[] = {"No Error","Bus Error","Not Allowed","Bus Timeout"}; static char *ihwarns[] = {"No Warning","An IRQ has been masked"}; static char *fferrs[] = {"No Error","Read Error","Empty Error", "ReTransmit Error","Mark Error","Write Error"}; static char *btcerrs[] = {"No Error","No Data","Command Not Executed", "Unknown Function"}; static char *sswarns[] = {"No Warning","Reload Pending"}; static char *ssinfo[] = {"No Information","Controller is up and running"}; static char *unknwn = "Unknown message"; static char *trns_typ[] = {"SNGL", "BLOCK", "RMW", "UNALG"}; static char *data_sz[] = {"D08", "D16", "D32", "D64"}; static char *addr_sz[] = {"Axx","A16","A24","A32","A40","A64","Axx","Axx"}; static char *rdwrt[] = {"Read","Write"}; static char *dly_type[] = {"No_Dly","D4nsX16","D16nsX16","D16usX16", "D4nsX32","D16nsX32","D16usX32","undefined"}; static char *acc_typ_pg[] = {"DATA","PRGM"}; static char *acc_typ_sp[] = {"NPRV","SUPV"}; static char *acc_typ_lk[] = {" ","LOCK"}; static char *acc_typ_cr[] = {" ","CCSR"}; static char *acc_typ_ud[] = {" ","UDAM"}; static char msg[MAX_MSG_SIZE]; static char tmp[MAX_MSG_SIZE]; union ctrl_stat unc; union mstr_stat unm; int n,i; enum pkt_t ptyp; enum src_id srcid; enum ih_err_t iherrn; enum ih_wrn_t ihwrnn; int ih_st,ih_irq,ih_add,curmsk; int mstrerrn,mstrwrnn; int mstr_st; unsigned short int msgn; int pt,tag[NFFERRS]; msg[0]='\0'; ptyp = buf[PKT_TYP_OFF]&0XFF; srcid = SOURCE_ID(buf); msgn = EXTRACT_MSG(buf); pt = (ptyp>(6-i))&1); } strcat(msg,tmp); sprintf(tmp,"\nIH IACK Address %1d",ih_add); strcat(msg,tmp); } break; case WARN_PKT: ihwrnn=EXTRACT_IH_WRN(buf); strcat(msg,ihwarns[ihwrnn]); if(ihwrnn == IH_IRQ_MSKD){ curmsk=EXTRACT_IRQ_MSK(buf); strcat(msg,"\nIH Current IRQ Mask: "); for(i=0;i<7;i++){ sprintf(&tmp[i],"%01d",(curmsk>>(6-i))&1); } strcat(msg,tmp); } break; case INFO_PKT: strcat(msg,unknwn); break; default: break; } break; case VME_SLV: switch(ptyp){ case ERR_PKT: case WARN_PKT: case INFO_PKT: strcat(msg,unknwn); break; default: break; } break; case VME_ARB: switch(ptyp){ case ERR_PKT: case WARN_PKT: case INFO_PKT: strcat(msg,unknwn); break; default: break; } break; case EXFIFO_MOD: switch(ptyp){ case ERR_PKT: n=0; for(i=0;i<5;i++)if((msgn>>i)&1)tag[n++]=i; if(n==0){tag[0]=0;n=1;} for(i=0;i