master/module.c
changeset 495 88c597598bbc
parent 484 9fde4a17b820
child 497 04552130dd54
equal deleted inserted replaced
494:178b1b43a88c 495:88c597598bbc
   309     if (ec_device_init(master->device, master, net_dev, isr, module)) {
   309     if (ec_device_init(master->device, master, net_dev, isr, module)) {
   310         EC_ERR("Failed to init device!\n");
   310         EC_ERR("Failed to init device!\n");
   311         goto out_free;
   311         goto out_free;
   312     }
   312     }
   313 
   313 
       
   314     if (ec_device_open(master->device)) {
       
   315         EC_ERR("Failed to open device!\n");
       
   316         goto out_clear;
       
   317     }
       
   318 
   314     up(&master->device_sem);
   319     up(&master->device_sem);
       
   320 
       
   321     ec_master_enter_idle_mode(master);
       
   322 
   315     return master->device;
   323     return master->device;
   316 
   324 
       
   325  out_clear:
       
   326     ec_device_clear(master->device);
   317  out_free:
   327  out_free:
   318     kfree(master->device);
   328     kfree(master->device);
   319     master->device = NULL;
   329     master->device = NULL;
   320  out_up:
   330  out_up:
   321     up(&master->device_sem);
   331     up(&master->device_sem);
   340 {
   350 {
   341     ec_master_t *master;
   351     ec_master_t *master;
   342 
   352 
   343     if (!(master = ec_find_master(master_index))) return;
   353     if (!(master = ec_find_master(master_index))) return;
   344 
   354 
       
   355     ec_master_leave_idle_mode(master);
       
   356 
       
   357     if (ec_device_close(master->device))
       
   358         EC_WARN("Failed to close device!\n");
       
   359 
   345     down(&master->device_sem);
   360     down(&master->device_sem);
   346 
   361 
   347     if (!master->device || master->device != device) {
   362     if (!master->device || master->device != device) {
   348         up(&master->device_sem);
   363         up(&master->device_sem);
   349         EC_WARN("Unable to unregister device!\n");
   364         EC_WARN("Unable to unregister device!\n");
   353     ec_device_clear(master->device);
   368     ec_device_clear(master->device);
   354     kfree(master->device);
   369     kfree(master->device);
   355     master->device = NULL;
   370     master->device = NULL;
   356 
   371 
   357     up(&master->device_sem);
   372     up(&master->device_sem);
   358 }
       
   359 
       
   360 /*****************************************************************************/
       
   361 
       
   362 /**
       
   363    Starts the master associated with the device.
       
   364    This function has to be called by the network device driver to tell the
       
   365    master that the device is ready to send and receive data. The master
       
   366    will enter the idle mode then.
       
   367    \ingroup DeviceInterface
       
   368 */
       
   369 
       
   370 int ecdev_start(unsigned int master_index /**< master index */)
       
   371 {
       
   372     ec_master_t *master;
       
   373     if (!(master = ec_find_master(master_index))) return -1;
       
   374 
       
   375     if (ec_device_open(master->device)) {
       
   376         EC_ERR("Failed to open device!\n");
       
   377         return -1;
       
   378     }
       
   379 
       
   380     ec_master_enter_idle_mode(master);
       
   381 
       
   382     return 0;
       
   383 }
       
   384 
       
   385 /*****************************************************************************/
       
   386 
       
   387 /**
       
   388    Stops the master associated with the device.
       
   389    Tells the master to stop using the device for frame IO. Has to be called
       
   390    before unregistering the device.
       
   391    \ingroup DeviceInterface
       
   392 */
       
   393 
       
   394 void ecdev_stop(unsigned int master_index /**< master index */)
       
   395 {
       
   396     ec_master_t *master;
       
   397     if (!(master = ec_find_master(master_index))) return;
       
   398 
       
   399     ec_master_leave_idle_mode(master);
       
   400 
       
   401     if (ec_device_close(master->device))
       
   402         EC_WARN("Failed to close device!\n");
       
   403 }
   373 }
   404 
   374 
   405 /******************************************************************************
   375 /******************************************************************************
   406  *  Realtime interface
   376  *  Realtime interface
   407  *****************************************************************************/
   377  *****************************************************************************/
   493 module_init(ec_init_module);
   463 module_init(ec_init_module);
   494 module_exit(ec_cleanup_module);
   464 module_exit(ec_cleanup_module);
   495 
   465 
   496 EXPORT_SYMBOL(ecdev_register);
   466 EXPORT_SYMBOL(ecdev_register);
   497 EXPORT_SYMBOL(ecdev_unregister);
   467 EXPORT_SYMBOL(ecdev_unregister);
   498 EXPORT_SYMBOL(ecdev_start);
       
   499 EXPORT_SYMBOL(ecdev_stop);
       
   500 EXPORT_SYMBOL(ecrt_request_master);
   468 EXPORT_SYMBOL(ecrt_request_master);
   501 EXPORT_SYMBOL(ecrt_release_master);
   469 EXPORT_SYMBOL(ecrt_release_master);
   502 
   470 
   503 /** \endcond */
   471 /** \endcond */
   504 
   472