equal
deleted
inserted
replaced
33 { |
33 { |
34 master->slaves = NULL; |
34 master->slaves = NULL; |
35 master->slave_count = 0; |
35 master->slave_count = 0; |
36 master->device_registered = 0; |
36 master->device_registered = 0; |
37 master->command_index = 0x00; |
37 master->command_index = 0x00; |
38 master->domain_count = 0; |
|
39 master->debug_level = 0; |
38 master->debug_level = 0; |
40 master->bus_time = 0; |
39 master->bus_time = 0; |
41 master->frames_lost = 0; |
40 master->frames_lost = 0; |
42 master->frames_delayed = 0; |
41 master->frames_delayed = 0; |
43 master->t_last_cyclic_output = 0; |
42 master->t_last_cyclic_output = 0; |
|
43 |
|
44 INIT_LIST_HEAD(&master->domains); |
44 } |
45 } |
45 |
46 |
46 /*****************************************************************************/ |
47 /*****************************************************************************/ |
47 |
48 |
48 /** |
49 /** |
69 |
70 |
70 void ec_master_reset(ec_master_t *master |
71 void ec_master_reset(ec_master_t *master |
71 /**< Zeiger auf den zurückzusetzenden Master */ |
72 /**< Zeiger auf den zurückzusetzenden Master */ |
72 ) |
73 ) |
73 { |
74 { |
74 unsigned int i; |
75 ec_domain_t *domain, *next; |
75 |
76 |
76 ec_master_clear_slaves(master); |
77 ec_master_clear_slaves(master); |
77 |
78 |
78 for (i = 0; i < master->domain_count; i++) { |
79 // Domain-Liste leeren |
79 ec_domain_clear(master->domains[i]); |
80 list_for_each_entry_safe(domain, next, &master->domains, list) { |
80 kfree(master->domains[i]); |
81 ec_domain_clear(domain); |
81 } |
82 kfree(domain); |
82 master->domain_count = 0; |
83 } |
|
84 INIT_LIST_HEAD(&master->domains); |
83 |
85 |
84 master->command_index = 0; |
86 master->command_index = 0; |
85 master->debug_level = 0; |
87 master->debug_level = 0; |
86 master->bus_time = 0; |
88 master->bus_time = 0; |
87 master->frames_lost = 0; |
89 master->frames_lost = 0; |
416 /**< Timeout */ |
418 /**< Timeout */ |
417 ) |
419 ) |
418 { |
420 { |
419 ec_domain_t *domain; |
421 ec_domain_t *domain; |
420 |
422 |
421 if (master->domain_count >= EC_MASTER_MAX_DOMAINS) { |
|
422 EC_ERR("Maximum number of domains reached!\n"); |
|
423 return NULL; |
|
424 } |
|
425 |
|
426 if (!(domain = (ec_domain_t *) kmalloc(sizeof(ec_domain_t), GFP_KERNEL))) { |
423 if (!(domain = (ec_domain_t *) kmalloc(sizeof(ec_domain_t), GFP_KERNEL))) { |
427 EC_ERR("Error allocating domain memory!\n"); |
424 EC_ERR("Error allocating domain memory!\n"); |
428 return NULL; |
425 return NULL; |
429 } |
426 } |
430 |
427 |
431 ec_domain_init(domain, master, mode, timeout_us); |
428 ec_domain_init(domain, master, mode, timeout_us); |
432 master->domains[master->domain_count] = domain; |
429 |
433 master->domain_count++; |
430 list_add_tail(&domain->list, &master->domains); |
434 |
431 |
435 return domain; |
432 return domain; |
436 } |
433 } |
437 |
434 |
438 /*****************************************************************************/ |
435 /*****************************************************************************/ |
460 unsigned int frame_count; |
457 unsigned int frame_count; |
461 ec_domain_t *domain; |
458 ec_domain_t *domain; |
462 |
459 |
463 // Domains erstellen |
460 // Domains erstellen |
464 domain_offset = 0; |
461 domain_offset = 0; |
465 for (i = 0; i < master->domain_count; i++) { |
462 list_for_each_entry(domain, &master->domains, list) { |
466 domain = master->domains[i]; |
|
467 if (ec_domain_alloc(domain, domain_offset)) { |
463 if (ec_domain_alloc(domain, domain_offset)) { |
468 EC_ERR("Failed to allocate domain %i!\n", i); |
464 EC_ERR("Failed to allocate domain %X!\n", (u32) domain); |
469 return -1; |
465 return -1; |
470 } |
466 } |
471 frame_count = domain->data_size / EC_MAX_FRAME_SIZE + 1; |
467 frame_count = domain->data_size / EC_MAX_FRAME_SIZE + 1; |
472 if (!domain->data_size) frame_count = 0; |
468 if (!domain->data_size) frame_count = 0; |
473 EC_INFO("Domain %i - Allocated %i bytes (%i Frame(s))\n", i, |
469 EC_INFO("Domain %X - Allocated %i bytes (%i Frame(s))\n", |
474 domain->data_size, frame_count); |
470 (u32) domain, domain->data_size, frame_count); |
475 domain_offset += domain->data_size; |
471 domain_offset += domain->data_size; |
476 } |
472 } |
477 |
473 |
478 // Slaves aktivieren |
474 // Slaves aktivieren |
479 for (i = 0; i < master->slave_count; i++) |
475 for (i = 0; i < master->slave_count; i++) |