462 const ec_domain_t *domain, /**< domain */ |
462 const ec_domain_t *domain, /**< domain */ |
463 const ec_sii_sync_t *sync /**< sync manager */ |
463 const ec_sii_sync_t *sync /**< sync manager */ |
464 ) |
464 ) |
465 { |
465 { |
466 unsigned int i; |
466 unsigned int i; |
|
467 ec_fmmu_t *fmmu; |
467 |
468 |
468 // FMMU configuration already prepared? |
469 // FMMU configuration already prepared? |
469 for (i = 0; i < slave->fmmu_count; i++) |
470 for (i = 0; i < slave->fmmu_count; i++) { |
470 if (slave->fmmus[i].domain == domain && slave->fmmus[i].sync == sync) |
471 fmmu = &slave->fmmus[i]; |
|
472 if (fmmu->domain == domain && fmmu->sync == sync) |
471 return 0; |
473 return 0; |
|
474 } |
472 |
475 |
473 // reserve new FMMU... |
476 // reserve new FMMU... |
474 |
477 |
475 if (slave->fmmu_count >= slave->base_fmmu_count) { |
478 if (slave->fmmu_count >= slave->base_fmmu_count) { |
476 EC_ERR("Slave %i FMMU limit reached!\n", slave->ring_position); |
479 EC_ERR("Slave %i FMMU limit reached!\n", slave->ring_position); |
477 return -1; |
480 return -1; |
478 } |
481 } |
479 |
482 |
480 slave->fmmus[slave->fmmu_count].domain = domain; |
483 fmmu = &slave->fmmus[slave->fmmu_count]; |
481 slave->fmmus[slave->fmmu_count].sync = sync; |
484 |
482 slave->fmmus[slave->fmmu_count].logical_start_address = 0; |
485 fmmu->index = slave->fmmu_count; |
|
486 fmmu->domain = domain; |
|
487 fmmu->sync = sync; |
|
488 fmmu->logical_start_address = 0; |
|
489 |
483 slave->fmmu_count++; |
490 slave->fmmu_count++; |
484 slave->registered = 1; |
491 slave->registered = 1; |
485 |
492 |
486 return 0; |
493 return 0; |
487 } |
494 } |