Skip to content

Commit 9af04d0

Browse files
author
Peter Kazanzides
committed
Added support for Firewire debug data
1 parent 9e53108 commit 9af04d0

File tree

3 files changed

+75
-4
lines changed

3 files changed

+75
-4
lines changed

lib/FpgaIO.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,9 @@ class FpgaIO : public BoardIO
361361
// data Data to write to register
362362
bool WriteFirewirePhy(unsigned char addr, unsigned char data);
363363

364+
// Print FireWire debug data
365+
static void PrintFirewireDebug(std::ostream &debugStream, const quadlet_t *data);
366+
364367
protected:
365368

366369
// Accumulated firmware time

lib/code/FpgaIO.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,3 +764,59 @@ bool FpgaIO::WriteFirewirePhy(unsigned char addr, unsigned char data)
764764
quadlet_t write_data = 0x00001000 | static_cast<quadlet_t>(addr) << 8 | static_cast<quadlet_t>(data);
765765
return port->WriteQuadlet(BoardId, BoardIO::FW_PHY_REQ, write_data);
766766
}
767+
768+
769+
void FpgaIO::PrintFirewireDebug(std::ostream &debugStream, const quadlet_t *data)
770+
{
771+
// Following structure must match DebugData in Firewire.v
772+
struct DebugData {
773+
char header[4]; // Quad 0
774+
uint8_t misc_info; // Quad 1
775+
uint8_t bus_info;
776+
uint8_t lreq_info;
777+
uint8_t state;
778+
uint8_t numPhyStatus; // Quad 2
779+
uint8_t numTxGrant;
780+
uint8_t numRecv;
781+
uint8_t numHubSendReq;
782+
uint16_t stcount; // Quad 3
783+
uint8_t numPktRecv;
784+
uint8_t numEthSendReq;
785+
};
786+
const DebugData *p = reinterpret_cast<const DebugData *>(data);
787+
if (strncmp(p->header, "DBG", 3) != 0) {
788+
debugStream << " PrintFirewireDebug: Unexpected header string: " << p->header[0]
789+
<< p->header[1] << p->header[2] << " (should be DBG)" << std::endl;
790+
return;
791+
}
792+
debugStream << " State: " << static_cast<uint16_t>(p->state >> 4)
793+
<< ", Next: " << static_cast<uint16_t>(p->state & 0xf0) << std::endl;
794+
if (p->lreq_info & 0x80)
795+
debugStream << " lreq_type: " << static_cast<uint16_t>((p->lreq_info & 0x70) >> 4) << std::endl;
796+
if (p->lreq_info & 0x08)
797+
debugStream << " lreq_busy" << std::endl;
798+
debugStream << " tx_type: " << static_cast<uint16_t>(p->lreq_info & 0x07) << std::endl;
799+
debugStream << " ";
800+
if (p->bus_info & 0x80)
801+
debugStream << "req_write_bus ";
802+
if (p->bus_info & 0x40)
803+
debugStream << "grant_write_bus ";
804+
debugStream << "node_id: " << static_cast<uint16_t>(p->bus_info & 0x3f) << std::endl;
805+
debugStream << " ";
806+
if (p->misc_info & 0x80)
807+
debugStream << "data_block ";
808+
if (p->misc_info & 0x08)
809+
debugStream << "recvCtlInvalid ";
810+
if (p->misc_info & 0x04)
811+
debugStream << "recvPktNull ";
812+
if (p->misc_info & 0x02)
813+
debugStream << "link_active ";
814+
debugStream << " rx_speed: " << static_cast<uint16_t>((p->misc_info & 0x70)>>4) << std::endl;
815+
debugStream << " numHubSendReq: " << static_cast<uint16_t>(p->numHubSendReq) << std::endl;
816+
debugStream << " numRecv: " << static_cast<uint16_t>(p->numRecv) << std::endl;
817+
debugStream << " numPktRecv: " << static_cast<uint16_t>(p->numPktRecv) << std::endl;
818+
debugStream << " numTxGrant: " << static_cast<uint16_t>(p->numTxGrant) << std::endl;
819+
debugStream << " numPhyStatus: " << static_cast<uint16_t>(p->numPhyStatus) << std::endl;
820+
debugStream << " numEthSendReq: " << static_cast<uint16_t>(p->numEthSendReq) << std::endl;
821+
debugStream << " stcount: " << p->stcount << std::endl;
822+
}

tests/mainEth1394.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,8 +1368,7 @@ int main(int argc, char **argv)
13681368
std::cout << " x) Read Ethernet debug data" << std::endl;
13691369
std::cout << " X) Clear Ethernet errors" << std::endl;
13701370
}
1371-
if (curBoardEth)
1372-
std::cout << " y) Read Firewire data via Ethernet" << std::endl;
1371+
std::cout << " y) Read Firewire debug data" << std::endl;
13731372
if (curBoardFw)
13741373
std::cout << " z) Check Ethernet initialization" << std::endl;
13751374
std::cout << "Select option: ";
@@ -1725,8 +1724,21 @@ int main(int argc, char **argv)
17251724
break;
17261725

17271726
case 'y':
1728-
if (curBoardEth && (curBoardEth->ReadFirewireData(buffer, 0, 64)))
1729-
EthBasePort::PrintFirewirePacket(std::cout, buffer, 64);
1727+
if (curBoardEth) {
1728+
if (curBoardEth->ReadFirewireData(buffer, 0, 64)) {
1729+
EthBasePort::PrintFirewirePacket(std::cout, buffer, 64);
1730+
}
1731+
if (curBoardEth->ReadFirewireData(buffer, 0x200, 4)) {
1732+
std::cout << "Firewire debug data (via " << EthPortString << "):" << std::endl;
1733+
FpgaIO::PrintFirewireDebug(std::cout, buffer);
1734+
}
1735+
}
1736+
if (curBoardFw) {
1737+
if (curBoardEth->ReadFirewireData(buffer, 0x200, 4)) {
1738+
std::cout << "Firewire debug data (via " << FwPortString << "):" << std::endl;
1739+
FpgaIO::PrintFirewireDebug(std::cout, buffer);
1740+
}
1741+
}
17301742
break;
17311743

17321744
case 'z':

0 commit comments

Comments
 (0)