diff -r 19732da2cf86 -r 3001f6523e63 master/domain.c --- a/master/domain.c Fri May 13 15:33:16 2011 +0200 +++ b/master/domain.c Fri May 13 15:34:20 2011 +0200 @@ -60,6 +60,7 @@ domain->index = index; INIT_LIST_HEAD(&domain->fmmu_configs); domain->data_size = 0; + domain->tx_size = 0; domain->data = NULL; domain->data_origin = EC_ORIG_INTERNAL; domain->logical_base_address = 0x00000000; @@ -113,6 +114,7 @@ fmmu->domain = domain; domain->data_size += fmmu->data_size; + domain->tx_size += fmmu->tx_size; list_add_tail(&fmmu->list, &domain->fmmu_configs); EC_MASTER_DBG(domain->master, 1, "Domain %u:" @@ -179,6 +181,7 @@ ec_datagram_zero(datagram); list_add_tail(&datagram->list, &domain->datagrams); + datagram->domain = domain; return 0; } @@ -238,6 +241,7 @@ list_for_each_entry(fmmu, &domain->fmmu_configs, list) { // Correct logical FMMU address fmmu->logical_start_address += base_address; + fmmu->domain_address += base_address; // Increment Input/Output counter to determine datagram types // and calculate expected working counters @@ -249,7 +253,7 @@ // If the current FMMU's data do not fit in the current datagram, // allocate a new one. - if (datagram_size + fmmu->data_size > EC_MAX_DATA_SIZE) { + if (datagram_size + fmmu->tx_size > EC_MAX_DATA_SIZE) { ret = ec_domain_add_datagram(domain, domain->logical_base_address + datagram_offset, datagram_size, domain->data + datagram_offset, @@ -267,7 +271,7 @@ } } - datagram_size += fmmu->data_size; + datagram_size += fmmu->tx_size; } // Allocate last datagram, if data are left (this is also the case if the @@ -377,14 +381,14 @@ EC_MASTER_DBG(domain->master, 1, "ecrt_domain_external_memory(" "domain = 0x%p, mem = 0x%p)\n", domain, mem); - down(&domain->master->master_sem); + ec_mutex_lock(&domain->master->master_mutex); ec_domain_clear_data(domain); domain->data = mem; domain->data_origin = EC_ORIG_EXTERNAL; - up(&domain->master->master_sem); + ec_mutex_unlock(&domain->master->master_mutex); } /*****************************************************************************/