44 #include "ethernet.h" |
44 #include "ethernet.h" |
45 |
45 |
46 /*****************************************************************************/ |
46 /*****************************************************************************/ |
47 |
47 |
48 void ec_master_freerun(void *); |
48 void ec_master_freerun(void *); |
49 #ifdef EOE_TIMER |
|
50 void ec_master_run_eoe(unsigned long); |
49 void ec_master_run_eoe(unsigned long); |
51 #else |
|
52 void ec_master_run_eoe(void *); |
|
53 #endif |
|
54 ssize_t ec_show_master_attribute(struct kobject *, struct attribute *, char *); |
50 ssize_t ec_show_master_attribute(struct kobject *, struct attribute *, char *); |
55 void ec_master_process_watch_command(ec_master_t *); |
51 void ec_master_process_watch_command(ec_master_t *); |
56 |
52 |
57 /*****************************************************************************/ |
53 /*****************************************************************************/ |
58 |
54 |
107 INIT_LIST_HEAD(&master->command_queue); |
103 INIT_LIST_HEAD(&master->command_queue); |
108 INIT_LIST_HEAD(&master->domains); |
104 INIT_LIST_HEAD(&master->domains); |
109 INIT_LIST_HEAD(&master->eoe_slaves); |
105 INIT_LIST_HEAD(&master->eoe_slaves); |
110 ec_command_init(&master->simple_command); |
106 ec_command_init(&master->simple_command); |
111 INIT_WORK(&master->freerun_work, ec_master_freerun, (void *) master); |
107 INIT_WORK(&master->freerun_work, ec_master_freerun, (void *) master); |
112 |
|
113 // init eoe timer |
|
114 #ifdef EOE_TIMER |
|
115 init_timer(&master->eoe_timer); |
108 init_timer(&master->eoe_timer); |
116 master->eoe_timer.function = ec_master_run_eoe; |
109 master->eoe_timer.function = ec_master_run_eoe; |
117 master->eoe_timer.data = (unsigned long) master; |
110 master->eoe_timer.data = (unsigned long) master; |
118 #else |
|
119 INIT_WORK(&master->eoe_work, ec_master_run_eoe, (void *) master); |
|
120 #endif |
|
121 |
111 |
122 // init kobject and add it to the hierarchy |
112 // init kobject and add it to the hierarchy |
123 memset(&master->kobj, 0x00, sizeof(struct kobject)); |
113 memset(&master->kobj, 0x00, sizeof(struct kobject)); |
124 kobject_init(&master->kobj); |
114 kobject_init(&master->kobj); |
125 master->kobj.ktype = &ktype_ec_master; |
115 master->kobj.ktype = &ktype_ec_master; |
178 ec_command_t *command, *next_c; |
168 ec_command_t *command, *next_c; |
179 ec_domain_t *domain, *next_d; |
169 ec_domain_t *domain, *next_d; |
180 ec_eoe_t *eoe, *next_eoe; |
170 ec_eoe_t *eoe, *next_eoe; |
181 |
171 |
182 // stop EoE processing |
172 // stop EoE processing |
183 #ifdef EOE_TIMER |
|
184 del_timer_sync(&master->eoe_timer); |
173 del_timer_sync(&master->eoe_timer); |
185 #else |
|
186 if (!cancel_delayed_work(&master->eoe_work)) { |
|
187 flush_workqueue(master->eoe_workqueue); |
|
188 } |
|
189 #endif |
|
190 |
174 |
191 // stop free-run mode |
175 // stop free-run mode |
192 ec_master_freerun_stop(master); |
176 ec_master_freerun_stop(master); |
193 |
177 |
194 ec_master_clear_slaves(master); |
178 ec_master_clear_slaves(master); |
832 ecrt_master_async_send(master); |
812 ecrt_master_async_send(master); |
833 |
813 |
834 master->release_cb(master->cb_data); |
814 master->release_cb(master->cb_data); |
835 } |
815 } |
836 |
816 |
837 #ifdef EOE_TIMER |
|
838 master->eoe_timer.expires += HZ / EC_EOE_FREQUENCY; |
817 master->eoe_timer.expires += HZ / EC_EOE_FREQUENCY; |
839 add_timer(&master->eoe_timer); |
818 add_timer(&master->eoe_timer); |
840 #else |
|
841 queue_delayed_work(master->eoe_workqueue, &master->eoe_work, |
|
842 HZ / EC_EOE_FREQUENCY); |
|
843 #endif |
|
844 } |
819 } |
845 |
820 |
846 /****************************************************************************** |
821 /****************************************************************************** |
847 * Realtime interface |
822 * Realtime interface |
848 *****************************************************************************/ |
823 *****************************************************************************/ |
1446 EC_WARN("start_eoe: no EoE-capable slaves present.\n"); |
1421 EC_WARN("start_eoe: no EoE-capable slaves present.\n"); |
1447 return 0; |
1422 return 0; |
1448 } |
1423 } |
1449 |
1424 |
1450 // start EoE processing |
1425 // start EoE processing |
1451 #ifdef EOE_TIMER |
|
1452 master->eoe_timer.expires = jiffies + 10; |
1426 master->eoe_timer.expires = jiffies + 10; |
1453 add_timer(&master->eoe_timer); |
1427 add_timer(&master->eoe_timer); |
1454 #else |
|
1455 queue_work(master->eoe_workqueue, &master->eoe_work); |
|
1456 #endif |
|
1457 return 0; |
1428 return 0; |
1458 } |
1429 } |
1459 |
1430 |
1460 /*****************************************************************************/ |
1431 /*****************************************************************************/ |
1461 |
1432 |