18#ifndef __ROGUE_PROTOCOLS_XILINX_JTAG_DRIVER_H__
19#define __ROGUE_PROTOCOLS_XILINX_JTAG_DRIVER_H__
76 std::shared_ptr<rogue::Logging>
log_;
82 std::vector<uint8_t> txBuf_;
83 std::vector<uint8_t> hdBuf_;
95 Header mkShift(
unsigned len);
97 virtual void setHdr(uint8_t* buf,
Header hdr);
126 static const char*
getMsg(
unsigned error);
167 static std::shared_ptr<rogue::protocols::xilinx::JtagDriver>
create(uint16_t port);
210 virtual int xfer(uint8_t*,
unsigned, uint8_t*,
unsigned, uint8_t*,
unsigned) {
229 virtual int xferRel(uint8_t* txb,
unsigned txBytes,
Header* phdr, uint8_t* rxb,
unsigned sizeBytes);
240 virtual uint64_t
query();
282 virtual void sendVectors(uint64_t numBits, uint8_t* tms, uint8_t* tdi, uint8_t* tdo);
289 virtual void dumpInfo(FILE* f = stdout);
297 return this->done_.load(std::memory_order_acquire);
Base transport driver for the AxisToJtag firmware protocol.
std::shared_ptr< rogue::Logging > log_
static const unsigned XID_SHIFT
virtual uint64_t getMaxVectorSize()
Returns transport-supported maximum vector size in bytes.
static Xid getXid(Header x)
static const unsigned ERR_NOT_PRESENT
static const Header CMD_E
virtual ~JtagDriver()=default
Virtual destructor for safe polymorphic deletion.
static const uint32_t UNKNOWN_PERIOD
static const unsigned ERR_BAD_COMMAND
static const unsigned ERR_BAD_VERSION
bool isDone()
Returns completion/shutdown flag.
static Header getHdr(const uint8_t *buf)
static const char * getMsg(unsigned error)
static const Header CMD_S
static const Header LEN_MASK
static const Header CMD_MASK
static const Header PVERS
static double REF_FREQ_HZ()
virtual uint32_t getPeriodNs()
static const Header ERR_MASK
virtual void sendVectors(uint64_t numBits, uint8_t *tms, uint8_t *tdi, uint8_t *tdo)
Sends JTAG TMS/TDI vectors and receives TDO.
static uint64_t getLen(Header x)
static const unsigned ERR_TRUNCATED
virtual unsigned getWordSize()
virtual void dumpInfo(FILE *f=stdout)
Dumps cached driver/target information.
virtual uint64_t query()
Queries target capabilities and caches protocol parameters.
static void setup_python()
Registers Python bindings for this class.
uint32_t cvtPerNs(Header reply)
virtual uint32_t setPeriodNs(uint32_t newPeriod)
Requests update of TCK period.
unsigned memDepth(Header reply)
unsigned wordSize(Header reply)
static std::shared_ptr< rogue::protocols::xilinx::JtagDriver > create(uint16_t port)
Creates a JTAG driver instance.
static const Header CMD_Q
static const unsigned LEN_SHIFT
static const unsigned ERR_SHIFT
virtual int xferRel(uint8_t *txb, unsigned txBytes, Header *phdr, uint8_t *rxb, unsigned sizeBytes)
Executes transfer with retry and protocol validation.
static uint32_t getCmd(Header x)
virtual unsigned getMemDepth()
virtual int xfer(uint8_t *, unsigned, uint8_t *, unsigned, uint8_t *, unsigned)
Transport-level transfer primitive implemented by subclass.
static unsigned getErr(Header x)
std::atomic< bool > done_
virtual void init()
Performs post-construction initialization.
unsigned hdBufMax()
Maximum temporary header buffer size in bytes.
std::shared_ptr< rogue::protocols::xilinx::JtagDriver > JtagDriverPtr