BugFix: Data pointer are now stored correctly in the map of ECC Controller

This commit is contained in:
Johannes Feldmann
2017-06-09 17:00:59 +02:00
parent 778834f15c
commit d04f894592

View File

@@ -14,7 +14,7 @@ using namespace tlm;
struct ControllerECC: sc_module
{
private:
map<int, unsigned char*> m_mDataPointer;
map<unsigned char*, unsigned char*> m_mDataPointer;
public:
tlm_utils::multi_passthrough_target_socket<ControllerECC> t_socket;
@@ -77,7 +77,7 @@ public:
trans.set_data_length(nBlocks*9);
// store old data
m_mDataPointer[id] = trans.get_data_ptr();
m_mDataPointer[pDataECC] = trans.get_data_ptr();
// Set new data
trans.set_data_ptr(pDataECC);
@@ -89,12 +89,15 @@ public:
// Get data length
unsigned nDataLength = trans.get_data_length();
// store old data
m_mDataPointer[id] = trans.get_data_ptr();
// Create new pointer
nDataLength += nDataLength>>3;
unsigned char* new_ptr = new unsigned char [nDataLength];
// Set new data
nDataLength += nDataLength>>3;
trans.set_data_ptr(new unsigned char [nDataLength]);
// store old data ptr
m_mDataPointer[new_ptr] = trans.get_data_ptr();
// Set new data
trans.set_data_ptr(new_ptr);
// Change transport data length
trans.set_data_length(nDataLength);
@@ -189,7 +192,7 @@ public:
trans.set_data_length(nBlocks<<3);
// load data pointer
auto it = m_mDataPointer.find(id);
auto it = m_mDataPointer.find(trans.get_data_ptr());
assert(it != m_mDataPointer.end());
unsigned char* pDataECC = it->second;
@@ -217,7 +220,7 @@ public:
unsigned nDataLength = trans.get_data_length();
// load data pointer
auto it = m_mDataPointer.find(id);
auto it = m_mDataPointer.find(trans.get_data_ptr());
assert(it != m_mDataPointer.end());
trans.set_data_ptr(it->second);