109 uint32_t maxAccess = getSlave()->doMaxAccess();
112 tran->address_ += offset_;
115 if (tran->size() > maxAccess) {
116 uint32_t numberOfTransactions = std::ceil(1.0 * tran->size() / maxAccess);
118 log_->debug(
"Splitting transaction %" PRIu32
" into %" PRIu32
" subtransactions",
120 numberOfTransactions);
122 for (
unsigned int i = 0; i < numberOfTransactions; ++i) {
124 subTran->iter_ =
reinterpret_cast<uint8_t*
>(tran->begin() + i * maxAccess);
125 if (tran->size() >= ((i + 1) * maxAccess)) {
126 subTran->size_ = maxAccess;
128 subTran->size_ = tran->size() % maxAccess;
130 subTran->address_ = tran->address_ + (i * maxAccess);
131 subTran->type_ = tran->type();
133 log_->debug(
"Created subTransaction %" PRIu32
", parent=%" PRIu32
", iter=%" PRIx32
", size=%" PRIu32
134 ", address=%" PRIx64,
143 tran->doneSubTransactions();
146 for (rim::TransactionMap::iterator it = tran->subTranMap_.begin(); it != tran->subTranMap_.end(); it++) {
147 getSlave()->doTransaction(it->second);
151 getSlave()->doTransaction(tran);
155void rim::Hub::setup_python() {
157 bp::class_<rim::HubWrap, rim::HubWrapPtr, bp::bases<rim::Master, rim::Slave>, boost::noncopyable>(
159 bp::init<uint64_t, uint32_t, uint32_t>())
160 .def(
"_blkMinAccess", &rim::Hub::doMinAccess)
161 .def(
"_blkMaxAccess", &rim::Hub::doMaxAccess)
162 .def(
"_getAddress", &rim::Hub::getAddress)
163 .def(
"_getOffset", &rim::Hub::getOffset)
164 .def(
"_doTransaction", &rim::Hub::doTransaction, &rim::HubWrap::defDoTransaction);
166 bp::implicitly_convertible<rim::HubPtr, rim::MasterPtr>();