Line 1... |
Line 1... |
// $Id: Rw11CntlRK11.cpp 669 2015-04-26 21:20:32Z mueller $
|
// $Id: Rw11CntlRK11.cpp 686 2015-06-04 21:08:08Z mueller $
|
//
|
//
|
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
// Other credits:
|
// Other credits:
|
// the boot code is from the simh project and Copyright Robert M Supnik
|
// the boot code is from the simh project and Copyright Robert M Supnik
|
//
|
//
|
Line 13... |
Line 13... |
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
// for complete details.
|
// for complete details.
|
//
|
//
|
// Revision History:
|
// Revision History:
|
// Date Rev Version Comment
|
// Date Rev Version Comment
|
|
// 2015-06-04 686 2.0.2 check for spurious lams
|
// 2015-02-17 647 2.0.1 use Nwrd2Nblk(); BUGFIX: revise RdmaPostExecCB()
|
// 2015-02-17 647 2.0.1 use Nwrd2Nblk(); BUGFIX: revise RdmaPostExecCB()
|
// 2015-01-04 628 2.0 use Rw11RdmaDisk
|
// 2015-01-04 628 2.0 use Rw11RdmaDisk
|
// 2014-12-30 625 1.2 adopt to Rlink V4 attn logic
|
// 2014-12-30 625 1.2 adopt to Rlink V4 attn logic
|
// 2014-12-25 621 1.1 adopt to 4k word ibus window
|
// 2014-12-25 621 1.1 adopt to 4k word ibus window
|
// 2014-06-14 562 1.0.1 Add stats
|
// 2014-06-14 562 1.0.1 Add stats
|
Line 24... |
Line 25... |
// 2013-02-10 485 0.1 First draft
|
// 2013-02-10 485 0.1 First draft
|
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
|
|
/*!
|
/*!
|
\file
|
\file
|
\version $Id: Rw11CntlRK11.cpp 669 2015-04-26 21:20:32Z mueller $
|
\version $Id: Rw11CntlRK11.cpp 686 2015-06-04 21:08:08Z mueller $
|
\brief Implemenation of Rw11CntlRK11.
|
\brief Implemenation of Rw11CntlRK11.
|
*/
|
*/
|
|
|
#include "boost/bind.hpp"
|
#include "boost/bind.hpp"
|
#include "boost/foreach.hpp"
|
#include "boost/foreach.hpp"
|
Line 96... |
Line 97... |
const uint16_t Rw11CntlRK11::kRKCS_M_MAINT;
|
const uint16_t Rw11CntlRK11::kRKCS_M_MAINT;
|
const uint16_t Rw11CntlRK11::kRKCS_M_IBA;
|
const uint16_t Rw11CntlRK11::kRKCS_M_IBA;
|
const uint16_t Rw11CntlRK11::kRKCS_M_FMT;
|
const uint16_t Rw11CntlRK11::kRKCS_M_FMT;
|
const uint16_t Rw11CntlRK11::kRKCS_M_RWA;
|
const uint16_t Rw11CntlRK11::kRKCS_M_RWA;
|
const uint16_t Rw11CntlRK11::kRKCS_M_SSE;
|
const uint16_t Rw11CntlRK11::kRKCS_M_SSE;
|
|
const uint16_t Rw11CntlRK11::kRKCS_M_RDY;
|
const uint16_t Rw11CntlRK11::kRKCS_M_MEX;
|
const uint16_t Rw11CntlRK11::kRKCS_M_MEX;
|
const uint16_t Rw11CntlRK11::kRKCS_V_MEX;
|
const uint16_t Rw11CntlRK11::kRKCS_V_MEX;
|
const uint16_t Rw11CntlRK11::kRKCS_B_MEX;
|
const uint16_t Rw11CntlRK11::kRKCS_B_MEX;
|
const uint16_t Rw11CntlRK11::kRKCS_V_FUNC;
|
const uint16_t Rw11CntlRK11::kRKCS_V_FUNC;
|
const uint16_t Rw11CntlRK11::kRKCS_B_FUNC;
|
const uint16_t Rw11CntlRK11::kRKCS_B_FUNC;
|
Line 370... |
Line 372... |
<< "," << RosPrintf(se,"d",2)
|
<< "," << RosPrintf(se,"d",2)
|
<< " la,nw=" << RosPrintf(lba,"d",4)
|
<< " la,nw=" << RosPrintf(lba,"d",4)
|
<< "," << RosPrintf(nwrd,"d",5);
|
<< "," << RosPrintf(nwrd,"d",5);
|
}
|
}
|
|
|
|
// check for spurious interrupts (either RDY=1 or RDY=0 and rdma busy)
|
|
if ((rkcs & kRKCS_M_RDY) || fRdma.IsActive()) {
|
|
RlogMsg lmsg(LogFile());
|
|
lmsg << "-E RK11 err "
|
|
<< " cr=" << RosPrintBvi(rkcs,8)
|
|
<< " spurious lam: "
|
|
<< (fRdma.IsActive() ? "RDY=0 and Rdma busy" : "RDY=1");
|
|
return 0;
|
|
}
|
|
|
// check for general abort conditions
|
// check for general abort conditions
|
if (fu != kFUNC_CRESET && // function not control reset
|
if (fu != kFUNC_CRESET && // function not control reset
|
(!unit.Virt())) { // and drive not attached
|
(!unit.Virt())) { // and drive not attached
|
rker = kRKER_M_NXD; // --> abort with NXD error
|
rker = kRKER_M_NXD; // --> abort with NXD error
|
|
|