# HG changeset patch # User Dave Page # Date 1427406117 14400 # Node ID f0fdcce9874bf62884242239b33125a21d248031 # Parent 777d1a8b3a2737d8dd8b2f1421d6a386c4a0cae3 Refactor fmmu->logical_start_address to fmmu->logical_domain_offset diff -r 777d1a8b3a27 -r f0fdcce9874b master/domain.c --- a/master/domain.c Thu Mar 26 15:16:21 2015 -0400 +++ b/master/domain.c Thu Mar 26 17:41:57 2015 -0400 @@ -130,8 +130,8 @@ list_add_tail(&fmmu->list, &domain->fmmu_configs); EC_MASTER_DBG(domain->master, 1, "Domain %u:" - " Added %u bytes, total %zu.\n", - domain->index, fmmu->data_size, domain->data_size); + " Added %u bytes.\n", + domain->index, fmmu->data_size); } /*****************************************************************************/ @@ -237,6 +237,15 @@ const ec_datagram_pair_t *datagram_pair; int ret; +#if 0 + // Determine domain size from furthest extent of FMMU data + domain->data_size = 0; + list_for_each_entry(fmmu, &domain->fmmu_configs, list) { + domain->data_size = max(domain->data_size, + fmmu->logical_domain_offset + fmmu->data_size); + } +#endif + domain->logical_base_address = base_address; if (domain->data_size && domain->data_origin == EC_ORIG_INTERNAL) { @@ -265,10 +274,6 @@ } list_for_each_entry(fmmu, &domain->fmmu_configs, list) { - - // Correct logical FMMU address - fmmu->logical_start_address += base_address; - // Increment Input/Output counter to determine datagram types // and calculate expected working counters if (shall_count(fmmu, datagram_first_fmmu)) { @@ -503,19 +508,17 @@ continue; } - if (fmmu->logical_start_address >= - logical_datagram_address + datagram_size) { + if (fmmu->logical_domain_offset >= datagram_size) { // fmmu data contained in next datagram pair break; } - datagram_offset = - fmmu->logical_start_address - logical_datagram_address; + datagram_offset = fmmu->logical_domain_offset; #if DEBUG_REDUNDANCY EC_MASTER_DBG(domain->master, 1, - "input fmmu log=%u size=%u offset=%u\n", - fmmu->logical_start_address, fmmu->data_size, + "input fmmu log_off=%u size=%u offset=%u\n", + fmmu->logical_domain_offset, fmmu->data_size, datagram_offset); if (domain->master->debug_level > 0) { ec_print_data(pair->send_buffer + datagram_offset, diff -r 777d1a8b3a27 -r f0fdcce9874b master/fmmu_config.c --- a/master/fmmu_config.c Thu Mar 26 15:16:21 2015 -0400 +++ b/master/fmmu_config.c Thu Mar 26 17:41:57 2015 -0400 @@ -60,7 +60,7 @@ fmmu->sync_index = sync_index; fmmu->dir = dir; - fmmu->logical_start_address = domain->data_size; + fmmu->logical_domain_offset = domain->data_size; fmmu->data_size = ec_pdo_list_total_size( &sc->sync_configs[sync_index].pdos); @@ -79,13 +79,14 @@ uint8_t *data /**> Configuration page memory. */ ) { - EC_CONFIG_DBG(fmmu->sc, 1, "FMMU: LogAddr 0x%08X, Size %3u," + EC_CONFIG_DBG(fmmu->sc, 1, "FMMU: LogOff 0x%08X, Size %3u," " PhysAddr 0x%04X, SM%u, Dir %s\n", - fmmu->logical_start_address, fmmu->data_size, + fmmu->logical_domain_offset, fmmu->data_size, sync->physical_start_address, fmmu->sync_index, fmmu->dir == EC_DIR_INPUT ? "in" : "out"); - EC_WRITE_U32(data, fmmu->logical_start_address); + EC_WRITE_U32(data, fmmu->domain->logical_base_address + + fmmu->logical_domain_offset); EC_WRITE_U16(data + 4, fmmu->data_size); // size of fmmu EC_WRITE_U8 (data + 6, 0x00); // logical start bit EC_WRITE_U8 (data + 7, 0x07); // logical end bit diff -r 777d1a8b3a27 -r f0fdcce9874b master/fmmu_config.h --- a/master/fmmu_config.h Thu Mar 26 15:16:21 2015 -0400 +++ b/master/fmmu_config.h Thu Mar 26 17:41:57 2015 -0400 @@ -49,7 +49,8 @@ const ec_domain_t *domain; /**< Domain. */ uint8_t sync_index; /**< Index of sync manager to use. */ ec_direction_t dir; /**< FMMU direction. */ - uint32_t logical_start_address; /**< Logical start address. */ + uint32_t logical_domain_offset; /**< Logical offset address relative to + domain->logical_base_address. */ unsigned int data_size; /**< Covered PDO size. */ } ec_fmmu_config_t; diff -r 777d1a8b3a27 -r f0fdcce9874b master/fsm_foe.c --- a/master/fsm_foe.c Thu Mar 26 15:16:21 2015 -0400 +++ b/master/fsm_foe.c Thu Mar 26 17:41:57 2015 -0400 @@ -54,7 +54,7 @@ // uint8_t reserved // uint32_t PacketNo, Password, ErrorCode -#define DEBUG_FOE +//#define DEBUG_FOE /*****************************************************************************/ diff -r 777d1a8b3a27 -r f0fdcce9874b master/ioctl.c --- a/master/ioctl.c Thu Mar 26 15:16:21 2015 -0400 +++ b/master/ioctl.c Thu Mar 26 17:41:57 2015 -0400 @@ -544,7 +544,7 @@ data.slave_config_position = fmmu->sc->position; data.sync_index = fmmu->sync_index; data.dir = fmmu->dir; - data.logical_address = fmmu->logical_start_address; + data.logical_address = fmmu->domain->logical_base_address + fmmu->logical_domain_offset; data.data_size = fmmu->data_size; up(&master->master_sem); diff -r 777d1a8b3a27 -r f0fdcce9874b master/slave_config.c --- a/master/slave_config.c Thu Mar 26 15:16:21 2015 -0400 +++ b/master/slave_config.c Thu Mar 26 17:41:57 2015 -0400 @@ -182,7 +182,7 @@ for (i = 0; i < sc->used_fmmus; i++) { fmmu = &sc->fmmu_configs[i]; if (fmmu->domain == domain && fmmu->sync_index == sync_index) - return fmmu->logical_start_address; + return fmmu->logical_domain_offset; } if (sc->used_fmmus == EC_MAX_FMMUS) { @@ -216,7 +216,7 @@ prev_fmmu->tx_size = max(fmmu->data_size, prev_fmmu->data_size); domain->tx_size += prev_fmmu->tx_size - old_prev_tx_size; tx_size = 0; - fmmu_logical_start_address = prev_fmmu->logical_start_address; + fmmu_logical_start_address = prev_fmmu->logical_domain_offset; } } @@ -227,7 +227,7 @@ sc->used_fmmus++; up(&sc->master->master_sem); - return fmmu->logical_start_address; + return fmmu->logical_domain_offset; } /*****************************************************************************/