w11 - cpp 0.794
Backend server for Rlink and w11
Loading...
Searching...
No Matches
Rw11CntlDL11.cpp
Go to the documentation of this file.
1// $Id: Rw11CntlDL11.cpp 1185 2019-07-12 17:29:12Z mueller $
2// SPDX-License-Identifier: GPL-3.0-or-later
3// Copyright 2013-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4//
5// Revision History:
6// Date Rev Version Comment
7// 2019-05-31 1156 1.5.1 size->fuse rename; use unit.StatInc[RT]x
8// 2019-04-27 1139 1.5 add dl11_buf readout
9// 2019-04-19 1133 1.4.2 use ExecWibr(),ExecRibr()
10// 2019-04-14 1131 1.4.1 proper unit init, call UnitSetupAll() in Start()
11// 2019-04-06 1126 1.4 xbuf.val in msb; rrdy in rbuf (new iface)
12// 2019-02-23 1114 1.3.2 use std::bind instead of lambda
13// 2018-12-15 1082 1.3.1 use lambda instead of boost::bind
14// 2017-05-14 897 1.3 add RcvChar(),TraceChar(); trace received chars
15// 2017-04-02 865 1.2.3 Dump(): add detail arg
16// 2017-03-03 858 1.2.2 use cntl name as message prefix
17// 2017-02-25 855 1.2.1 shorten ctor code; RcvNext() --> RcvQueueNext()
18// 2014-12-30 625 1.2 adopt to Rlink V4 attn logic
19// 2014-12-25 621 1.1 adopt to 4k word ibus window and
20// 2013-05-04 516 1.0.2 add RxRlim support (receive interrupt rate limit)
21// 2013-04-20 508 1.0.1 add trace support
22// 2013-03-06 495 1.0 Initial version
23// 2013-02-05 483 0.1 First draft
24// ---------------------------------------------------------------------------
25
30#include <functional>
31#include <algorithm>
32
33#include "librtools/RosFill.hpp"
37#include "librtools/RlogMsg.hpp"
38
39#include "RtraceTools.hpp"
40#include "Rw11CntlDL11.hpp"
41
42using namespace std;
43using namespace std::placeholders;
44
50// all method definitions in namespace Retro
51namespace Retro {
52
53//------------------------------------------+-----------------------------------
54// constants definitions
55
56const uint16_t Rw11CntlDL11::kIbaddr;
57const int Rw11CntlDL11::kLam;
58
59const uint16_t Rw11CntlDL11::kRCSR;
60const uint16_t Rw11CntlDL11::kRBUF;
61const uint16_t Rw11CntlDL11::kXCSR;
62const uint16_t Rw11CntlDL11::kXBUF;
63
64const uint16_t Rw11CntlDL11::kProbeOff;
67
68const uint16_t Rw11CntlDL11::kFifoMaxSize;
69
70const uint16_t Rw11CntlDL11::kRCSR_V_RLIM;
71const uint16_t Rw11CntlDL11::kRCSR_B_RLIM;
72const uint16_t Rw11CntlDL11::kRCSR_V_TYPE;
73const uint16_t Rw11CntlDL11::kRCSR_B_TYPE;
74const uint16_t Rw11CntlDL11::kRCSR_M_RDONE;
75const uint16_t Rw11CntlDL11::kRCSR_M_FCLR;
76const uint16_t Rw11CntlDL11::kRBUF_V_RFUSE;
77const uint16_t Rw11CntlDL11::kRBUF_B_RFUSE;
78const uint16_t Rw11CntlDL11::kRBUF_M_DATA;
79
80const uint16_t Rw11CntlDL11::kXCSR_V_RLIM;
81const uint16_t Rw11CntlDL11::kXCSR_B_RLIM;
82const uint16_t Rw11CntlDL11::kXCSR_M_XRDY;
83const uint16_t Rw11CntlDL11::kXCSR_M_FCLR;
84const uint16_t Rw11CntlDL11::kXBUF_M_VAL;
85const uint16_t Rw11CntlDL11::kXBUF_V_FUSE;
86const uint16_t Rw11CntlDL11::kXBUF_B_FUSE;
87const uint16_t Rw11CntlDL11::kXBUF_M_DATA;
88
89//------------------------------------------+-----------------------------------
91
93 : Rw11CntlBase<Rw11UnitDL11,1>("dl11"),
94 fPC_xbuf(0),
95 fPC_rbuf(0),
96 fRxQlim(0),
97 fRxRlim(0),
98 fTxRlim(0),
99 fItype(0),
100 fFsize(0),
101 fTxRblkSize(4),
102 fTxQueBusy(false),
103 fLastRbuf(0)
104{
105 // must be here because Units have a back-ptr (not available at Rw11CntlBase)
106 fspUnit[0].reset(new Rw11UnitDL11(this, 0)); // single unit controller
107
108 fStats.Define(kStatNRxBlk, "NRxBlk" , "wblk done");
109 fStats.Define(kStatNTxQue, "NTxQue" , "rblk queued");
110}
111
112//------------------------------------------+-----------------------------------
114
116{}
117
118//------------------------------------------+-----------------------------------
120
121void Rw11CntlDL11::Config(const std::string& name, uint16_t base, int lam)
122{
123 ConfigCntl(name, base, lam, kProbeOff, kProbeInt, kProbeRem);
124 return;
125}
126
127//------------------------------------------+-----------------------------------
129
131{
132 if (fStarted || fLam<0 || !fEnable || !fProbe.Found())
133 throw Rexception("Rw11CntlDL11::Start",
134 "Bad state: started, no lam, not enable, not found");
135
136 // add device register address ibus and rbus mappings
137 // done here because now Cntl bound to Cpu and Cntl probed
138 Cpu().AllIAddrMapInsert(Name()+".rcsr", Base() + kRCSR);
139 Cpu().AllIAddrMapInsert(Name()+".rbuf", Base() + kRBUF);
140 Cpu().AllIAddrMapInsert(Name()+".xcsr", Base() + kXCSR);
141 Cpu().AllIAddrMapInsert(Name()+".xbuf", Base() + kXBUF);
142
143 // detect device type
145 fFsize = (1<<fItype) - 1;
146 fRxQlim = fFsize;
147
148 // ensure unit status is initialized
149 Cpu().ExecWibr(fBase+kRCSR, kRCSR_M_FCLR, // clear rx fifo
150 fBase+kXCSR, kXCSR_M_FCLR); // clear tx fifo
151 UnitSetupAll(); // setup rlim,...
152
153 // setup primary info clist
156 if (!Buffered()) {
158 } else {
162 }
164
165 // add attn handler
167 uint16_t(1)<<fLam, this);
168 fStarted = true;
169 return;
170}
171
172//------------------------------------------+-----------------------------------
174
175void Rw11CntlDL11::UnitSetup(size_t /*ind*/)
176{
177 uint16_t rcsr = (fRxRlim & kRCSR_B_RLIM) << kRCSR_V_RLIM;
178 uint16_t xcsr = (fTxRlim & kXCSR_B_RLIM) << kXCSR_V_RLIM;
179 Cpu().ExecWibr(fBase+kRCSR, rcsr, fBase+kXCSR, xcsr);
180 return;
181}
182
183//------------------------------------------+-----------------------------------
185
187{
188 if (fspUnit[0]->RcvQueueEmpty()) return; // spurious call
189
190 if (!Buffered()) {
191 uint16_t rbuf = Cpu().ExecRibr(fBase+kRBUF);
192 uint16_t rfuse = (rbuf >>kRBUF_V_RFUSE) & kRBUF_B_RFUSE;
193 if (rfuse == 0) RxProcessUnbuf();
194 } else {
195 uint16_t rfuse = (fLastRbuf>>kRBUF_V_RFUSE) & kRBUF_B_RFUSE;
196 if (rfuse > fFsize/2) {
198 }
200 }
201
202 return;
203}
204
205//------------------------------------------+-----------------------------------
207
208void Rw11CntlDL11::SetRxQlim(uint16_t qlim)
209{
210 if (qlim == 0) qlim = fFsize;
211 if (qlim > fFsize)
212 throw Rexception("Rw11CntlDL11::SetRxQlim",
213 "Bad args: qlim larger than fifosize");
214
215 fRxQlim = qlim;
216 return;
217}
218
219//------------------------------------------+-----------------------------------
221
222void Rw11CntlDL11::SetRxRlim(uint16_t rlim)
223{
224 if (rlim > kRCSR_B_RLIM)
225 throw Rexception("Rw11CntlDL11::SetRxRlim","Bad args: rlim too large");
226
227 fRxRlim = rlim;
228 UnitSetup(0);
229 return;
230}
231
232//------------------------------------------+-----------------------------------
234
235void Rw11CntlDL11::SetTxRlim(uint16_t rlim)
236{
237 if (rlim > kXCSR_B_RLIM)
238 throw Rexception("Rw11CntlDL11::SetTxRlim","Bad args: rlim too large");
239
240 fTxRlim = rlim;
241 UnitSetup(0);
242 return;
243}
244
245//------------------------------------------+-----------------------------------
247
248void Rw11CntlDL11::Dump(std::ostream& os, int ind, const char* text,
249 int detail) const
250{
251 RosFill bl(ind);
252 os << bl << (text?text:"--") << "Rw11CntlDL11 @ " << this << endl;
253 os << bl << " fPC_xbuf: " << fPC_xbuf << endl;
254 os << bl << " fPC_rbuf: " << fPC_rbuf << endl;
255 os << bl << " fRxQlim: " << RosPrintf(fRxQlim,"d",3) << endl;
256 os << bl << " fRxRlim: " << RosPrintf(fRxRlim,"d",3) << endl;
257 os << bl << " fTxRlim: " << RosPrintf(fTxRlim,"d",3) << endl;
258 os << bl << " fItype: " << RosPrintf(fItype,"d",3) << endl;
259 os << bl << " fFsize: " << RosPrintf(fFsize,"d",3) << endl;
260 os << bl << " fTxRblkSize: " << RosPrintf(fTxRblkSize,"d",3) << endl;
261 os << bl << " fTxQueBusy: " << RosPrintf(fTxQueBusy) << endl;
262 os << bl << " fTLastRbuf: " << RosPrintf(fLastRbuf) << endl;
263
264 Rw11CntlBase<Rw11UnitDL11,1>::Dump(os, ind, " ^", detail);
265 return;
266}
267
268//------------------------------------------+-----------------------------------
270
272{
275
276 if (!Buffered()) { // un-buffered iface -------------
278 fPrimClist[fPC_xbuf].Data());
279 } else { // buffered iface ----------------
280 fLastRbuf = fPrimClist[fPC_rbuf].Data();
283 }
284
285 return 0;
286}
287
288//------------------------------------------+-----------------------------------
290
291void Rw11CntlDL11::ProcessUnbuf(uint16_t rbuf, uint16_t xbuf)
292{
293 uint8_t ochr = xbuf & kXBUF_M_DATA;
294 uint16_t rfuse = (rbuf >>kRBUF_V_RFUSE) & kRBUF_B_RFUSE;
295 bool xval = xbuf & kXBUF_M_VAL;
296
297 if (fTraceLevel>0) TraceChar('t', xbuf, ochr);
298 if (xval) {
299 fspUnit[0]->Snd(&ochr, 1);
300 fspUnit[0]->StatIncTx(ochr);
301 }
302 if (rfuse==0 && !fspUnit[0]->RcvQueueEmpty()) RxProcessUnbuf();
303}
304
305//------------------------------------------+-----------------------------------
307// RcvQueueEmpty() must be false !!
308
310{
311 uint8_t ichr = fspUnit[0]->RcvQueueNext();
312 fspUnit[0]->StatIncRx(ichr);
313 if (fTraceLevel>0) TraceChar('r', 0, ichr);
314 Cpu().ExecWibr(fBase+kRBUF, ichr);
315 return;
316}
317
318//------------------------------------------+-----------------------------------
320
321void Rw11CntlDL11::RxProcessBuf(uint16_t rbuf)
322{
323 uint16_t rfuse = (rbuf >>kRBUF_V_RFUSE) & kRBUF_B_RFUSE;
324
325 if (rfuse >= fRxQlim) return; // no space in fifo -> quit
326 if (fspUnit[0]->RcvQueueEmpty()) return; // no data available -> quit
327
328 uint16_t qsiz = fspUnit[0]->RcvQueueSize();
329 uint16_t nmax = fRxQlim - rfuse; // limit is fifo space
330 if (qsiz < nmax) nmax = qsiz; // or avail data
331
332 vector<uint16_t> iblock;
333 iblock.reserve(nmax);
334 for (uint16_t i = 0; i<nmax; i++) {
335 uint8_t ichr = fspUnit[0]->RcvQueueNext();
336 iblock.push_back(uint16_t(ichr));
337 fspUnit[0]->StatIncRx(ichr);
338 }
339
340 if (fTraceLevel > 0) {
341 RlogMsg lmsg(LogFile());
342 lmsg << "-I " << Name() << ": rx"
343 << " rfuse=" << RosPrintf(rfuse,"d",3)
344 << " size=" << RosPrintf(iblock.size(),"d",3);
345 if (fTraceLevel > 1) RtraceTools::TraceBuffer(lmsg, iblock.data(),
346 iblock.size(), fTraceLevel);
347 }
348
350 RlinkCommandList clist;
351 Cpu().AddWbibr(clist, fBase+kRBUF, move(iblock));
352 int irbuf = Cpu().AddRibr(clist, fBase+kRBUF);
353 Server().Exec(clist);
354
355 fLastRbuf = clist[irbuf].Data(); // remember rbuf after fifo write
356
357 return;
358}
359
360//------------------------------------------+-----------------------------------
362
363void Rw11CntlDL11::TxProcessBuf(const RlinkCommand& cmd, bool prim,
364 uint16_t rbuf)
365{
366 const uint16_t* xbuf = cmd.BlockPointer();
367 size_t done = cmd.BlockDone();
368 if (done == 0) return;
369
370 uint16_t fbeg = 0;
371 uint16_t fend = 0;
372 uint16_t fdel = 0;
373 uint16_t fumin = 0;
374 uint16_t fumax = 0;
375
376 fbeg = (xbuf[0] >>kXBUF_V_FUSE) & kXBUF_B_FUSE;
377 fend = (xbuf[done-1]>>kXBUF_V_FUSE) & kXBUF_B_FUSE;
378 fdel = fbeg-fend+1;
379 fumin = kFifoMaxSize;
380
381 uint8_t ochr[kFifoMaxSize];
382 for (size_t i=0; i < done; i++) {
383 uint16_t fuse = (xbuf[i]>>kXBUF_V_FUSE) & kXBUF_B_FUSE;
384 ochr[i] = xbuf[i] & kXBUF_M_DATA;
385 fumin = min(fumin,fuse);
386 fumax = max(fumax,fuse);
387 fspUnit[0]->StatIncTx(ochr[i]);
388 }
389 fspUnit[0]->Snd(ochr, done);
390
391 // determine next chunk size from highest fifo 'fuse' field, at least 4
392 fTxRblkSize = max(uint16_t(4), max(uint16_t(done),fumax));
393
394 // queue further reads when queue idle and fifo not emptied
395 // check for 'size==1' not seen in current read
396 if ((!fTxQueBusy) && fumin > 1) { // if fumin>1 no fuse==1 seen
398 fTxQueBusy = true;
400 }
401
402 if (fTraceLevel > 0) {
403 RlogMsg lmsg(LogFile());
404 lmsg << "-I " << Name() << ": tx"
405 << " pr,si,do=" << prim
406 << "," << RosPrintf(cmd.BlockSize(),"d",3)
407 << "," << RosPrintf(done,"d",3)
408 << " fifo=" << RosPrintf(fbeg,"d",3)
409 << "," << RosPrintf(fend,"d",3)
410 << ";" << RosPrintf(fdel,"d",3)
411 << "," << RosPrintf(done-fdel,"d",3)
412 << ";" << RosPrintf(fumax,"d",3)
413 << "," << RosPrintf(fumin,"d",3)
414 << " que=" << fTxQueBusy;
415 if (prim) {
416 uint16_t rfuse = (rbuf >>kRBUF_V_RFUSE) & kRBUF_B_RFUSE;
417 lmsg << " rfuse=" << RosPrintf(rfuse,"d",3);
418 }
419
420 if (fTraceLevel > 1) RtraceTools::TraceBuffer(lmsg, xbuf,
421 done, fTraceLevel);
422 }
423
424 // re-sizing the prim rblk invalidates pbuf -> so must be done last
425 if (prim) { // if primary list
426 fPrimClist[fPC_xbuf].SetBlockRead(fTxRblkSize); // setup size for next attn
427 }
428
429}
430
431//------------------------------------------+-----------------------------------
433
435{
436 fTxQueBusy = false;
437 RlinkCommandList clist;
439 clist[0].SetExpectStatus(0, RlinkCommand::kStat_M_RbTout |
441 int irbuf = Cpu().AddRibr(clist, fBase+kRBUF);
442
443 Server().Exec(clist);
444
445 fLastRbuf = clist[irbuf].Data();
446 TxProcessBuf(clist[0], false, fLastRbuf);
447 return 0;
448}
449
450//------------------------------------------+-----------------------------------
452void Rw11CntlDL11::TraceChar(char dir, uint16_t xbuf, uint8_t chr)
453{
454 bool xval = xbuf & kXBUF_M_VAL;
455 RlogMsg lmsg(LogFile());
456 lmsg << "-I " << Name() << ":" << ' ' << dir << 'x';
457 if (dir == 't') {
458 lmsg << " xbuf=" << RosPrintBvi(xbuf,8)
459 << " xval=" << xval;
460 } else {
461 lmsg << " ";
462 }
463 lmsg << " rcvq=" << RosPrintf(fspUnit[0]->RcvQueueSize(),"d",3);
464 if (xval || dir != 't') {
465 lmsg << " char=" << RosPrintBvi(chr,8) << " ";
466 RtraceTools::TraceChar(lmsg, chr);
467 }
468 return;
469}
470
471} // end namespace Retro
FIXME_docs.
Definition: Rexception.hpp:29
size_t AddAttn()
FIXME_docs.
static const uint8_t kStat_M_RbNak
stat: rbnak flag set
static const uint8_t kStat_M_RbTout
stat: rbtout flag set
size_t BlockSize() const
FIXME_docs.
size_t BlockDone() const
FIXME_docs.
uint16_t * BlockPointer()
FIXME_docs.
void AddAttnHandler(attnhdl_t &&attnhdl, uint16_t mask, void *cdata=nullptr)
FIXME_docs.
void QueueAction(actnhdl_t &&actnhdl)
FIXME_docs.
void GetAttnInfo(AttnArgs &args, RlinkCommandList &clist)
FIXME_docs.
bool Exec(RlinkCommandList &clist, RerrMsg &emsg)
FIXME_docs.
Definition: RlinkServer.ipp:60
FIXME_docs.
Definition: RlogMsg.hpp:24
I/O appicator to generate fill characters.
Definition: RosFill.hpp:24
void Inc(size_t ind, double val=1.)
FIXME_docs.
Definition: Rstats.ipp:29
void Define(size_t ind, const std::string &name, const std::string &text)
FIXME_docs.
Definition: Rstats.cpp:72
Implemenation (inline) of Rw11CntlBase.
virtual void Dump(std::ostream &os, int ind=0, const char *text=0, int detail=0) const
FIXME_docs.
std::shared_ptr< Rw11UnitDL11 > fspUnit[NU]
uint16_t fItype
interface type
static const bool kProbeInt
probe int active
static const uint16_t kXBUF_M_DATA
xbuf data mask
void SetRxQlim(uint16_t qlim)
FIXME_docs.
static const uint16_t kXCSR_V_RLIM
xcsr.rlim shift
static const uint16_t kRCSR_M_FCLR
rcsr.fclr mask
static const uint16_t kRCSR_V_TYPE
rcsr.type shift
static const int kLam
DL11 default lam.
static const uint16_t kXCSR_M_FCLR
xcsr.fclr mask
@ kStatNRxBlk
done wblk
@ kStatNTxQue
queue rblk
uint16_t fLastRbuf
last seen rbuf
static const uint16_t kIbaddr
DL11 default address.
void RxProcessBuf(uint16_t rbuf)
FIXME_docs.
static const uint16_t kXCSR_M_XRDY
xcsr.xrdy mask
int TxRcvHandler()
FIXME_docs.
static const uint16_t kRBUF_B_RFUSE
rbuf.rfuse bit mask
static const uint16_t kRBUF_V_RFUSE
rbuf.rfuse shift
~Rw11CntlDL11()
Destructor.
void SetTxRlim(uint16_t rlim)
FIXME_docs.
static const bool kProbeRem
probr rem active
static const uint16_t kRCSR_M_RDONE
rcsr.rdone mask
static const uint16_t kRCSR_B_TYPE
rcsr.type bit mask
static const uint16_t kRCSR
RCSR reg offset.
void ProcessUnbuf(uint16_t rbuf, uint16_t xbuf)
FIXME_docs.
void TraceChar(char dir, uint16_t xbuf, uint8_t chr)
FIXME_docs.
uint16_t fRxRlim
rx interrupt rate limit
static const uint16_t kXBUF_B_FUSE
xbuf.fuse bit mask
static const uint16_t kXBUF
XBUF reg offset.
void RxProcessUnbuf()
FIXME_docs.
void Config(const std::string &name, uint16_t base, int lam)
FIXME_docs.
void Wakeup()
FIXME_docs.
static const uint16_t kXCSR
XCSR reg offset.
uint16_t fFsize
fifo size
static const uint16_t kRBUF_M_DATA
rbuf data mask
int AttnHandler(RlinkServer::AttnArgs &args)
FIXME_docs.
uint16_t fTxRblkSize
tx rblk chunk size
bool Buffered() const
FIXME_docs.
static const uint16_t kXCSR_B_RLIM
xcsr.rlim bit mask
static const uint16_t kXBUF_M_VAL
xbuf.val mask
bool fTxQueBusy
tx queue busy
static const uint16_t kRCSR_B_RLIM
rcsr.rlim bit mask
Rw11CntlDL11()
Default constructor.
uint16_t fTxRlim
tx interrupt rate limit
static const uint16_t kRBUF
RBUF reg offset.
static const uint16_t kFifoMaxSize
maximal fifo size
void TxProcessBuf(const RlinkCommand &cmd, bool prim, uint16_t rbuf)
FIXME_docs.
virtual void Dump(std::ostream &os, int ind=0, const char *text=0, int detail=0) const
FIXME_docs.
static const uint16_t kRCSR_V_RLIM
rcsr.rlim shift
void SetRxRlim(uint16_t rlim)
FIXME_docs.
static const uint16_t kProbeOff
probe address offset (rcsr)
uint16_t fRxQlim
rx queue limit
size_t fPC_xbuf
PrimClist: xbuf index.
virtual void UnitSetup(size_t ind)
FIXME_docs.
virtual void Start()
FIXME_docs.
size_t fPC_rbuf
PrimClist: rbuf index.
static const uint16_t kXBUF_V_FUSE
xbuf.fuse shift
int fLam
attn bit number (-1 of none)
Definition: Rw11Cntl.hpp:110
uint32_t fTraceLevel
trace level; 0=off;1=cntl
Definition: Rw11Cntl.hpp:114
RlinkCommandList fPrimClist
clist for attn primary info
Definition: Rw11Cntl.hpp:115
uint16_t Base() const
FIXME_docs.
Definition: Rw11Cntl.ipp:88
Rstats fStats
statistics
Definition: Rw11Cntl.hpp:116
Rw11Probe fProbe
controller probe context
Definition: Rw11Cntl.hpp:113
Rw11Cpu & Cpu() const
FIXME_docs.
Definition: Rw11Cntl.ipp:32
void ConfigCntl(const std::string &name, uint16_t base, int lam, uint16_t probeoff, bool probeint, bool proberem)
FIXME_docs.
Definition: Rw11Cntl.cpp:156
bool fStarted
true if Start() called
Definition: Rw11Cntl.hpp:112
bool fEnable
enable flag
Definition: Rw11Cntl.hpp:111
RlinkServer & Server() const
FIXME_docs.
Definition: Rw11Cntl.ipp:48
const std::string & Name() const
FIXME_docs.
Definition: Rw11Cntl.ipp:80
RlogFile & LogFile() const
FIXME_docs.
Definition: Rw11Cntl.ipp:64
virtual void UnitSetupAll()
FIXME_docs.
Definition: Rw11Cntl.cpp:113
uint16_t fBase
controller base address
Definition: Rw11Cntl.hpp:109
void AllIAddrMapInsert(const std::string &name, uint16_t ibaddr)
FIXME_docs.
Definition: Rw11Cpu.cpp:902
uint16_t ExecRibr(uint16_t ibaddr)
FIXME_docs.
Definition: Rw11Cpu.cpp:506
int AddRbibr(RlinkCommandList &clist, uint16_t ibaddr, size_t size)
FIXME_docs.
Definition: Rw11Cpu.cpp:375
void ExecWibr(uint16_t ibaddr0, uint16_t data0, uint16_t ibaddr1=0, uint16_t data1=0, uint16_t ibaddr2=0, uint16_t data2=0)
FIXME_docs.
Definition: Rw11Cpu.cpp:491
int AddRibr(RlinkCommandList &clist, uint16_t ibaddr)
FIXME_docs.
Definition: Rw11Cpu.cpp:354
int AddWbibr(RlinkCommandList &clist, uint16_t ibaddr, const std::vector< uint16_t > &block)
FIXME_docs.
Definition: Rw11Cpu.cpp:385
RosPrintfS< bool > RosPrintf(bool value, const char *form=0, int width=0, int prec=0)
Creates a print object for the formatted output of a bool value.
Definition: RosPrintf.ipp:38
void TraceBuffer(RlogMsg &lmsg, const uint16_t *pbuf, size_t done, uint32_t level)
FIXME_docs.
Definition: RtraceTools.cpp:34
void TraceChar(RlogMsg &lmsg, uint8_t chr)
FIXME_docs.
Declaration of class ReventLoop.
Definition: ReventLoop.cpp:47
bool Found() const
FIXME_docs.
Definition: Rw11Probe.cpp:52
uint16_t DataRem() const
FIXME_docs.
Definition: Rw11Probe.ipp:28