115 |
115 |
116 domain->data_size += fmmu->data_size; |
116 domain->data_size += fmmu->data_size; |
117 domain->tx_size += fmmu->tx_size; |
117 domain->tx_size += fmmu->tx_size; |
118 list_add_tail(&fmmu->list, &domain->fmmu_configs); |
118 list_add_tail(&fmmu->list, &domain->fmmu_configs); |
119 |
119 |
120 if (domain->master->debug_level) |
120 EC_MASTER_DBG(domain->master, 1, "Domain %u:" |
121 EC_DBG("Domain %u: Added %u bytes, total %zu.\n", domain->index, |
121 " Added %u bytes, total %zu.\n", |
122 fmmu->data_size, domain->data_size); |
122 domain->index, fmmu->data_size, domain->data_size); |
123 } |
123 } |
124 |
124 |
125 /*****************************************************************************/ |
125 /*****************************************************************************/ |
126 |
126 |
127 /** Allocates a domain datagram and appends it to the list. |
127 /** Allocates a domain datagram and appends it to the list. |
142 { |
142 { |
143 ec_datagram_t *datagram; |
143 ec_datagram_t *datagram; |
144 int ret; |
144 int ret; |
145 |
145 |
146 if (!(datagram = kmalloc(sizeof(ec_datagram_t), GFP_KERNEL))) { |
146 if (!(datagram = kmalloc(sizeof(ec_datagram_t), GFP_KERNEL))) { |
147 EC_ERR("Failed to allocate domain datagram!\n"); |
147 EC_MASTER_ERR(domain->master, |
|
148 "Failed to allocate domain datagram!\n"); |
148 return -ENOMEM; |
149 return -ENOMEM; |
149 } |
150 } |
150 |
151 |
151 ec_datagram_init(datagram); |
152 ec_datagram_init(datagram); |
152 snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE, |
153 snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE, |
213 domain->logical_base_address = base_address; |
214 domain->logical_base_address = base_address; |
214 |
215 |
215 if (domain->data_size && domain->data_origin == EC_ORIG_INTERNAL) { |
216 if (domain->data_size && domain->data_origin == EC_ORIG_INTERNAL) { |
216 if (!(domain->data = |
217 if (!(domain->data = |
217 (uint8_t *) kmalloc(domain->data_size, GFP_KERNEL))) { |
218 (uint8_t *) kmalloc(domain->data_size, GFP_KERNEL))) { |
218 EC_ERR("Failed to allocate %zu bytes internal memory for" |
219 EC_MASTER_ERR(domain->master, "Failed to allocate %zu bytes" |
219 " domain %u!\n", domain->data_size, domain->index); |
220 " internal memory for domain %u!\n", |
|
221 domain->data_size, domain->index); |
220 return -ENOMEM; |
222 return -ENOMEM; |
221 } |
223 } |
222 } |
224 } |
223 |
225 |
224 // Cycle through all domain FMMUS and |
226 // Cycle through all domain FMMUS and |
282 if (ret < 0) |
284 if (ret < 0) |
283 return ret; |
285 return ret; |
284 datagram_count++; |
286 datagram_count++; |
285 } |
287 } |
286 |
288 |
287 EC_INFO("Domain%u: Logical address 0x%08x, %zu byte, " |
289 EC_MASTER_INFO(domain->master, "Domain%u: Logical address 0x%08x," |
288 "expected working counter %u.\n", domain->index, |
290 " %zu byte, expected working counter %u.\n", domain->index, |
289 domain->logical_base_address, domain->data_size, |
291 domain->logical_base_address, domain->data_size, |
290 domain->expected_working_counter); |
292 domain->expected_working_counter); |
291 list_for_each_entry(datagram, &domain->datagrams, list) { |
293 list_for_each_entry(datagram, &domain->datagrams, list) { |
292 EC_INFO(" Datagram %s: Logical offset 0x%08x, %zu byte, type %s.\n", |
294 EC_MASTER_INFO(domain->master, " Datagram %s: Logical offset 0x%08x," |
293 datagram->name, EC_READ_U32(datagram->address), |
295 " %zu byte, type %s.\n", datagram->name, |
294 datagram->data_size, ec_datagram_type_string(datagram)); |
296 EC_READ_U32(datagram->address), datagram->data_size, |
|
297 ec_datagram_type_string(datagram)); |
295 } |
298 } |
296 |
299 |
297 return 0; |
300 return 0; |
298 } |
301 } |
299 |
302 |
342 { |
345 { |
343 const ec_pdo_entry_reg_t *reg; |
346 const ec_pdo_entry_reg_t *reg; |
344 ec_slave_config_t *sc; |
347 ec_slave_config_t *sc; |
345 int ret; |
348 int ret; |
346 |
349 |
347 if (domain->master->debug_level) |
350 EC_MASTER_DBG(domain->master, 1, "ecrt_domain_reg_pdo_entry_list(" |
348 EC_DBG("ecrt_domain_reg_pdo_entry_list(domain = 0x%p, regs = 0x%p)\n", |
351 "domain = 0x%p, regs = 0x%p)\n", domain, regs); |
349 domain, regs); |
|
350 |
352 |
351 for (reg = regs; reg->index; reg++) { |
353 for (reg = regs; reg->index; reg++) { |
352 sc = ecrt_master_slave_config_err(domain->master, reg->alias, |
354 sc = ecrt_master_slave_config_err(domain->master, reg->alias, |
353 reg->position, reg->vendor_id, reg->product_code); |
355 reg->position, reg->vendor_id, reg->product_code); |
354 if (IS_ERR(sc)) |
356 if (IS_ERR(sc)) |
374 |
376 |
375 /*****************************************************************************/ |
377 /*****************************************************************************/ |
376 |
378 |
377 void ecrt_domain_external_memory(ec_domain_t *domain, uint8_t *mem) |
379 void ecrt_domain_external_memory(ec_domain_t *domain, uint8_t *mem) |
378 { |
380 { |
379 if (domain->master->debug_level) |
381 EC_MASTER_DBG(domain->master, 1, "ecrt_domain_external_memory(" |
380 EC_DBG("ecrt_domain_external_memory(domain = 0x%p, mem = 0x%p)\n", |
382 "domain = 0x%p, mem = 0x%p)\n", domain, mem); |
381 domain, mem); |
|
382 |
383 |
383 down(&domain->master->master_sem); |
384 down(&domain->master->master_sem); |
384 |
385 |
385 ec_domain_clear_data(domain); |
386 ec_domain_clear_data(domain); |
386 |
387 |
419 |
420 |
420 if (domain->working_counter_changes && |
421 if (domain->working_counter_changes && |
421 jiffies - domain->notify_jiffies > HZ) { |
422 jiffies - domain->notify_jiffies > HZ) { |
422 domain->notify_jiffies = jiffies; |
423 domain->notify_jiffies = jiffies; |
423 if (domain->working_counter_changes == 1) { |
424 if (domain->working_counter_changes == 1) { |
424 EC_INFO("Domain %u: Working counter changed to %u/%u.\n", |
425 EC_MASTER_INFO(domain->master, "Domain %u: Working counter" |
425 domain->index, domain->working_counter, |
426 " changed to %u/%u.\n", domain->index, |
|
427 domain->working_counter, domain->expected_working_counter); |
|
428 } else { |
|
429 EC_MASTER_INFO(domain->master, "Domain %u: %u working counter" |
|
430 " changes - now %u/%u.\n", domain->index, |
|
431 domain->working_counter_changes, domain->working_counter, |
426 domain->expected_working_counter); |
432 domain->expected_working_counter); |
427 } else { |
|
428 EC_INFO("Domain %u: %u working counter changes - now %u/%u.\n", |
|
429 domain->index, domain->working_counter_changes, |
|
430 domain->working_counter, domain->expected_working_counter); |
|
431 } |
433 } |
432 domain->working_counter_changes = 0; |
434 domain->working_counter_changes = 0; |
433 } |
435 } |
434 } |
436 } |
435 |
437 |