1312 | | int n=i; |
---|
1313 | | Streaming::StreamProcessor *p=m_receiveProcessors.at(n); |
---|
1314 | | if(snoopMode) { // a stream from the device to another host |
---|
1315 | | // nothing to do |
---|
1316 | | } else { |
---|
1317 | | unsigned int isochannel = p->getChannel(); |
---|
1318 | | |
---|
1319 | | fb_quadlet_t reg_isoch; |
---|
1320 | | // check value of ISO_CHANNEL register |
---|
1321 | | if(!readTxReg(n, DICE_REGISTER_TX_ISOC_BASE, ®_isoch)) { |
---|
1322 | | debugError("Could not read ISO_CHANNEL register for ATX %d\n", n); |
---|
1323 | | return false; |
---|
1324 | | } |
---|
1325 | | if(reg_isoch != isochannel) { |
---|
1326 | | debugError("ISO_CHANNEL register != 0x%08"PRIX32" (=0x%08"PRIX32") for ATX %d\n", isochannel, reg_isoch, n); |
---|
1327 | | return false; |
---|
1328 | | } |
---|
1329 | | |
---|
1330 | | // write value of ISO_CHANNEL register |
---|
1331 | | reg_isoch=0xFFFFFFFFUL; |
---|
1332 | | if(!writeTxReg(n, DICE_REGISTER_TX_ISOC_BASE, reg_isoch)) { |
---|
1333 | | debugError("Could not write ISO_CHANNEL register for ATX %d\n", n); |
---|
1334 | | return false; |
---|
1335 | | } |
---|
1336 | | |
---|
1337 | | // deallocate ISO channel |
---|
1338 | | if(!deallocateIsoChannel(isochannel)) { |
---|
1339 | | debugError("Could not deallocate iso channel for SP %d (ATX %d)\n",i,n); |
---|
1340 | | return false; |
---|
1341 | | } |
---|
1342 | | } |
---|
1343 | | p->setChannel(-1); |
---|
1344 | | return true; |
---|
1345 | | |
---|
| 1317 | n=i; |
---|
| 1318 | p = m_receiveProcessors.at(n); |
---|
| 1319 | base_address = DICE_REGISTER_TX_ISOC_BASE; |
---|
| 1320 | setRXTXfuncs (Streaming::Port::E_Capture); |
---|
1347 | | int n=i-m_receiveProcessors.size(); |
---|
1348 | | Streaming::StreamProcessor *p=m_transmitProcessors.at(n); |
---|
1349 | | |
---|
1350 | | if(snoopMode) { // a stream from the device to another host |
---|
1351 | | // nothing to do |
---|
1352 | | } else { |
---|
1353 | | unsigned int isochannel = p->getChannel(); |
---|
1354 | | |
---|
1355 | | fb_quadlet_t reg_isoch; |
---|
1356 | | // check value of ISO_CHANNEL register |
---|
1357 | | if(!readRxReg(n, DICE_REGISTER_RX_ISOC_BASE, ®_isoch)) { |
---|
1358 | | debugError("Could not read ISO_CHANNEL register for ARX %d\n", n); |
---|
1359 | | return false; |
---|
1360 | | } |
---|
1361 | | if(reg_isoch != isochannel) { |
---|
1362 | | debugError("ISO_CHANNEL register != 0x%08"PRIX32" (=0x%08"PRIX32") for ARX %d\n", isochannel, reg_isoch, n); |
---|
1363 | | return false; |
---|
1364 | | } |
---|
1365 | | |
---|
1366 | | // write value of ISO_CHANNEL register |
---|
1367 | | reg_isoch=0xFFFFFFFFUL; |
---|
1368 | | if(!writeRxReg(n, DICE_REGISTER_RX_ISOC_BASE, reg_isoch)) { |
---|
1369 | | debugError("Could not write ISO_CHANNEL register for ARX %d\n", n); |
---|
1370 | | return false; |
---|
1371 | | } |
---|
1372 | | |
---|
1373 | | // deallocate ISO channel |
---|
1374 | | if(!deallocateIsoChannel(isochannel)) { |
---|
1375 | | debugError("Could not deallocate iso channel for SP %d (ARX %d)\n",i,n); |
---|
1376 | | return false; |
---|
1377 | | } |
---|
1378 | | } |
---|
1379 | | |
---|
1380 | | p->setChannel(-1); |
---|
1381 | | return true; |
---|
1382 | | } |
---|
1383 | | |
---|
1384 | | debugError("SP index %d out of range!\n",i); |
---|
1385 | | |
---|
1386 | | return false; |
---|
| 1322 | n=i-m_receiveProcessors.size(); |
---|
| 1323 | p=m_transmitProcessors.at(n); |
---|
| 1324 | base_address = DICE_REGISTER_RX_ISOC_BASE; |
---|
| 1325 | setRXTXfuncs (Streaming::Port::E_Playback); |
---|
| 1326 | } else { |
---|
| 1327 | debugError("SP index %d out of range!\n",i); |
---|
| 1328 | return false; |
---|
| 1329 | } |
---|
| 1330 | |
---|
| 1331 | if(!snoopMode) { |
---|
| 1332 | unsigned int isochannel = p->getChannel(); |
---|
| 1333 | |
---|
| 1334 | fb_quadlet_t reg_isoch; |
---|
| 1335 | // check value of ISO_CHANNEL register |
---|
| 1336 | if(!(*this.*readFunc)(n, base_address, ®_isoch)) { |
---|
| 1337 | debugError("Could not read ISO_CHANNEL register for A%s %d\n", dir, n); |
---|
| 1338 | return false; |
---|
| 1339 | } |
---|
| 1340 | if(reg_isoch != isochannel) { |
---|
| 1341 | debugError("ISO_CHANNEL register != 0x%08"PRIX32" (=0x%08"PRIX32") for A%s %d\n", isochannel, reg_isoch, dir, n); |
---|
| 1342 | return false; |
---|
| 1343 | } |
---|
| 1344 | |
---|
| 1345 | // write value of ISO_CHANNEL register |
---|
| 1346 | reg_isoch=0xFFFFFFFFUL; |
---|
| 1347 | if(!writeTxReg(n, base_address, reg_isoch)) { |
---|
| 1348 | debugError("Could not write ISO_CHANNEL register for A%s %d\n", dir, n); |
---|
| 1349 | return false; |
---|
| 1350 | } |
---|
| 1351 | |
---|
| 1352 | // deallocate ISO channel |
---|
| 1353 | if(!deallocateIsoChannel(isochannel)) { |
---|
| 1354 | debugError("Could not deallocate iso channel for SP %d (A%s %d)\n",i, dir, n); |
---|
| 1355 | return false; |
---|
| 1356 | } |
---|
| 1357 | } |
---|
| 1358 | p->setChannel(-1); |
---|
| 1359 | return true; |
---|