236 } |
236 } |
237 } |
237 } |
238 |
238 |
239 /*****************************************************************************/ |
239 /*****************************************************************************/ |
240 |
240 |
241 void send_callback(ec_master_t *master) |
241 void send_callback(void *cb_data) |
242 { |
242 { |
|
243 ec_master_t *m = (ec_master_t *) cb_data; |
|
244 |
243 // too close to the next real time cycle: deny access... |
245 // too close to the next real time cycle: deny access... |
244 if (get_cycles() - t_last_cycle <= t_critical) { |
246 if (get_cycles() - t_last_cycle <= t_critical) { |
245 rt_sem_wait(&master_sem); |
247 rt_sem_wait(&master_sem); |
246 ecrt_master_send_ext(master); |
248 ecrt_master_send_ext(m); |
247 rt_sem_signal(&master_sem); |
249 rt_sem_signal(&master_sem); |
248 } |
250 } |
249 } |
251 } |
250 |
252 |
251 /*****************************************************************************/ |
253 /*****************************************************************************/ |
252 |
254 |
253 void receive_callback(ec_master_t *master) |
255 void receive_callback(void *cb_data) |
254 { |
256 { |
|
257 ec_master_t *m = (ec_master_t *) cb_data; |
|
258 |
255 // too close to the next real time cycle: deny access... |
259 // too close to the next real time cycle: deny access... |
256 if (get_cycles() - t_last_cycle <= t_critical) { |
260 if (get_cycles() - t_last_cycle <= t_critical) { |
257 rt_sem_wait(&master_sem); |
261 rt_sem_wait(&master_sem); |
258 ecrt_master_receive(master); |
262 ecrt_master_receive(m); |
259 rt_sem_signal(&master_sem); |
263 rt_sem_signal(&master_sem); |
260 } |
264 } |
261 } |
265 } |
262 |
266 |
263 /*****************************************************************************/ |
267 /*****************************************************************************/ |
279 ret = -EBUSY; |
283 ret = -EBUSY; |
280 printk(KERN_ERR PFX "Requesting master 0 failed!\n"); |
284 printk(KERN_ERR PFX "Requesting master 0 failed!\n"); |
281 goto out_return; |
285 goto out_return; |
282 } |
286 } |
283 |
287 |
284 ecrt_master_callbacks(master, send_callback, receive_callback); |
288 ecrt_master_callbacks(master, send_callback, receive_callback, master); |
285 |
289 |
286 printk(KERN_INFO PFX "Registering domain...\n"); |
290 printk(KERN_INFO PFX "Registering domain...\n"); |
287 if (!(domain1 = ecrt_master_create_domain(master))) { |
291 if (!(domain1 = ecrt_master_create_domain(master))) { |
288 printk(KERN_ERR PFX "Domain creation failed!\n"); |
292 printk(KERN_ERR PFX "Domain creation failed!\n"); |
289 goto out_release_master; |
293 goto out_release_master; |