Changeset 1139
- Timestamp:
- 05/08/08 08:11:35 (15 years ago)
- Files:
-
- trunk/libffado/src/dice/dice_avdevice.cpp (modified) (9 diffs)
- trunk/libffado/src/dice/dice_avdevice.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libffado/src/dice/dice_avdevice.cpp
r1136 r1139 1258 1258 char namestring[DICE_TX_NAMES_SIZE+1]; 1259 1259 1260 if (!readTxRegBlock (i, DICE_REGISTER_TX_NAMES_BASE,1260 if (!readTxRegBlockSwapped(i, DICE_REGISTER_TX_NAMES_BASE, 1261 1261 (fb_quadlet_t *)namestring, DICE_TX_NAMES_SIZE)) { 1262 1262 debugError("Could not read TX name string \n"); … … 1273 1273 char namestring[DICE_RX_NAMES_SIZE+1]; 1274 1274 1275 if (!readRxRegBlock (i, DICE_REGISTER_RX_NAMES_BASE,1275 if (!readRxRegBlockSwapped(i, DICE_REGISTER_RX_NAMES_BASE, 1276 1276 (fb_quadlet_t *)namestring, DICE_RX_NAMES_SIZE)) { 1277 1277 debugError("Could not read RX name string \n"); … … 1288 1288 char namestring[DICE_CLOCKSOURCENAMES_SIZE+1]; 1289 1289 1290 if (!readGlobalRegBlock (DICE_REGISTER_GLOBAL_CLOCKSOURCENAMES,1291 1290 if (!readGlobalRegBlockSwapped(DICE_REGISTER_GLOBAL_CLOCKSOURCENAMES, 1291 (fb_quadlet_t *)namestring, DICE_CLOCKSOURCENAMES_SIZE)) { 1292 1292 debugError("Could not read CLOCKSOURCE name string \n"); 1293 1293 return names; … … 1302 1302 char namestring[DICE_NICK_NAME_SIZE+1]; 1303 1303 1304 if (!readGlobalRegBlock (DICE_REGISTER_GLOBAL_NICK_NAME,1304 if (!readGlobalRegBlockSwapped(DICE_REGISTER_GLOBAL_NICK_NAME, 1305 1305 (fb_quadlet_t *)namestring, DICE_NICK_NAME_SIZE)) { 1306 1306 debugError("Could not read nickname string \n"); … … 1317 1317 strncpy(namestring, name.c_str(), DICE_NICK_NAME_SIZE); 1318 1318 1319 if (!writeGlobalRegBlock (DICE_REGISTER_GLOBAL_NICK_NAME,1319 if (!writeGlobalRegBlockSwapped(DICE_REGISTER_GLOBAL_NICK_NAME, 1320 1320 (fb_quadlet_t *)namestring, DICE_NICK_NAME_SIZE)) { 1321 1321 debugError("Could not write nickname string \n"); … … 1543 1543 1544 1544 bool 1545 DiceAvDevice::readRegBlockSwapped(fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length) { 1546 debugOutput(DEBUG_LEVEL_VERY_VERBOSE,"Reading base register offset 0x%08llX, length %u\n", 1547 offset, length); 1548 1549 if(offset >= DICE_INVALID_OFFSET) { 1550 debugError("invalid offset: 0x%016llX\n", offset); 1551 return false; 1552 } 1553 1554 fb_nodeaddr_t addr=DICE_REGISTER_BASE + offset; 1555 fb_nodeid_t nodeId=getNodeId() | 0xFFC0; 1556 1557 if(!get1394Service().read( nodeId, addr, length/4, data ) ) { 1558 debugError("Could not read from node 0x%04X addr 0x%012llX\n", nodeId, addr); 1559 return false; 1560 } 1561 1562 for(unsigned int i=0;i<length/4;i++) { 1563 *(data+i)=ByteSwap32(*(data+i)); 1564 } 1565 1566 return true; 1567 } 1568 1569 bool 1570 DiceAvDevice::writeRegBlockSwapped(fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length) { 1571 debugOutput(DEBUG_LEVEL_VERY_VERBOSE,"Writing base register offset 0x%08llX, length: %u\n", 1572 offset, length); 1573 1574 if(offset >= DICE_INVALID_OFFSET) { 1575 debugError("invalid offset: 0x%016llX\n", offset); 1576 return false; 1577 } 1578 1579 fb_nodeaddr_t addr=DICE_REGISTER_BASE + offset; 1580 fb_nodeid_t nodeId=getNodeId() | 0xFFC0; 1581 1582 fb_quadlet_t data_out[length/4]; 1583 1584 for(unsigned int i=0;i<length/4;i++) { 1585 data_out[i]=ByteSwap32(*(data+i)); 1586 } 1587 1588 if(!get1394Service().write( nodeId, addr, length/4, data_out ) ) { 1589 debugError("Could not write to node 0x%04X addr 0x%012llX\n", nodeId, addr); 1590 return false; 1591 } 1592 1593 return true; 1594 } 1595 1596 bool 1545 1597 DiceAvDevice::readGlobalReg(fb_nodeaddr_t offset, fb_quadlet_t *result) { 1546 1598 debugOutput(DEBUG_LEVEL_VERY_VERBOSE,"Reading global register offset 0x%04llX\n", offset); … … 1575 1627 fb_nodeaddr_t offset_gl=globalOffsetGen(offset, length); 1576 1628 return writeRegBlock(m_global_reg_offset + offset_gl, data, length); 1629 } 1630 1631 bool 1632 DiceAvDevice::readGlobalRegBlockSwapped(fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length) { 1633 debugOutput(DEBUG_LEVEL_VERY_VERBOSE,"Reading global register block offset 0x%04llX, length %u bytes\n", 1634 offset, length); 1635 1636 fb_nodeaddr_t offset_gl=globalOffsetGen(offset, length); 1637 return readRegBlockSwapped(m_global_reg_offset + offset_gl, data, length); 1638 } 1639 1640 bool 1641 DiceAvDevice::writeGlobalRegBlockSwapped(fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length) { 1642 debugOutput(DEBUG_LEVEL_VERY_VERBOSE,"Writing global register block offset 0x%04llX, length %u bytes\n", 1643 offset, length); 1644 1645 fb_nodeaddr_t offset_gl=globalOffsetGen(offset, length); 1646 return writeRegBlockSwapped(m_global_reg_offset + offset_gl, data, length); 1577 1647 } 1578 1648 … … 1628 1698 fb_nodeaddr_t offset_tx=txOffsetGen(i, offset, length); 1629 1699 return writeRegBlock(m_tx_reg_offset + offset_tx, data, length); 1700 } 1701 1702 bool 1703 DiceAvDevice::readTxRegBlockSwapped(unsigned int i, fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length) { 1704 debugOutput(DEBUG_LEVEL_VERY_VERBOSE,"Reading rx register block offset 0x%04llX, length %u bytes\n", 1705 offset, length); 1706 1707 fb_nodeaddr_t offset_tx=txOffsetGen(i, offset, length); 1708 return readRegBlockSwapped(m_tx_reg_offset + offset_tx, data, length); 1630 1709 } 1631 1710 … … 1697 1776 } 1698 1777 1778 bool 1779 DiceAvDevice::readRxRegBlockSwapped(unsigned int i, fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length) { 1780 debugOutput(DEBUG_LEVEL_VERY_VERBOSE,"Reading rx register block offset 0x%04llX, length %u bytes\n", 1781 offset, length); 1782 1783 fb_nodeaddr_t offset_rx=rxOffsetGen(i, offset, length); 1784 return readRegBlockSwapped(m_rx_reg_offset + offset_rx, data, length); 1785 } 1786 1699 1787 fb_nodeaddr_t 1700 1788 DiceAvDevice::rxOffsetGen(unsigned int i, fb_nodeaddr_t offset, size_t length) { trunk/libffado/src/dice/dice_avdevice.h
r1134 r1139 149 149 bool readRegBlock(fb_nodeaddr_t, fb_quadlet_t *, size_t); 150 150 bool writeRegBlock(fb_nodeaddr_t, fb_quadlet_t *, size_t); 151 bool readRegBlockSwapped(fb_nodeaddr_t, fb_quadlet_t *, size_t); 152 bool writeRegBlockSwapped(fb_nodeaddr_t, fb_quadlet_t *, size_t); 151 153 152 154 bool readGlobalReg(fb_nodeaddr_t, fb_quadlet_t *); … … 154 156 bool readGlobalRegBlock(fb_nodeaddr_t, fb_quadlet_t *, size_t); 155 157 bool writeGlobalRegBlock(fb_nodeaddr_t, fb_quadlet_t *, size_t); 158 bool readGlobalRegBlockSwapped(fb_nodeaddr_t, fb_quadlet_t *, size_t); 159 bool writeGlobalRegBlockSwapped(fb_nodeaddr_t, fb_quadlet_t *, size_t); 156 160 fb_nodeaddr_t globalOffsetGen(fb_nodeaddr_t, size_t); 157 161 … … 160 164 bool readTxRegBlock(unsigned int i, fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length); 161 165 bool writeTxRegBlock(unsigned int i, fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length); 166 bool readTxRegBlockSwapped(unsigned int i, fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length); 162 167 fb_nodeaddr_t txOffsetGen(unsigned int, fb_nodeaddr_t, size_t); 163 168 … … 166 171 bool readRxRegBlock(unsigned int i, fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length); 167 172 bool writeRxRegBlock(unsigned int i, fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length); 173 bool readRxRegBlockSwapped(unsigned int i, fb_nodeaddr_t offset, fb_quadlet_t *data, size_t length); 168 174 fb_nodeaddr_t rxOffsetGen(unsigned int, fb_nodeaddr_t, size_t); 169 175