master/module.c
changeset 88 98335157e54e
parent 85 eb24637883ef
child 91 0120d6214948
equal deleted inserted replaced
87:4c18218d8fd0 88:98335157e54e
   236 
   236 
   237 ec_master_t *EtherCAT_rt_request_master(unsigned int index)
   237 ec_master_t *EtherCAT_rt_request_master(unsigned int index)
   238 {
   238 {
   239     ec_master_t *master;
   239     ec_master_t *master;
   240 
   240 
       
   241     EC_INFO("===== Starting master %i... =====\n", index);
       
   242 
   241     if (index < 0 || index >= ec_master_count) {
   243     if (index < 0 || index >= ec_master_count) {
   242         EC_ERR("Master %i does not exist!\n", index);
   244         EC_ERR("Master %i does not exist!\n", index);
   243         goto req_return;
   245         goto req_return;
   244     }
   246     }
   245 
   247 
   269         EC_ERR("Bus scan failed!\n");
   271         EC_ERR("Bus scan failed!\n");
   270         goto req_close;
   272         goto req_close;
   271     }
   273     }
   272 
   274 
   273     ec_masters_reserved[index] = 1;
   275     ec_masters_reserved[index] = 1;
   274     EC_INFO("Reserved master %i.\n", index);
   276     EC_INFO("===== Master %i ready. =====\n", index);
   275 
   277 
   276     return master;
   278     return master;
   277 
   279 
   278  req_close:
   280  req_close:
   279     ec_master_close(master);
   281     ec_master_close(master);
   281  req_module_put:
   283  req_module_put:
   282     module_put(master->device.module);
   284     module_put(master->device.module);
   283     ec_master_reset(master);
   285     ec_master_reset(master);
   284 
   286 
   285  req_return:
   287  req_return:
       
   288     EC_INFO("===== Failed to start master %i =====\n", index);
   286     return NULL;
   289     return NULL;
   287 }
   290 }
   288 
   291 
   289 /*****************************************************************************/
   292 /*****************************************************************************/
   290 
   293 
   294    @param master Zeiger auf den freizugebenden EtherCAT-Master.
   297    @param master Zeiger auf den freizugebenden EtherCAT-Master.
   295 */
   298 */
   296 
   299 
   297 void EtherCAT_rt_release_master(ec_master_t *master)
   300 void EtherCAT_rt_release_master(ec_master_t *master)
   298 {
   301 {
   299     unsigned int i;
   302     unsigned int i, found;
   300 
   303 
   301     for (i = 0; i < ec_master_count; i++)
   304     found = 0;
   302     {
   305     for (i = 0; i < ec_master_count; i++) {
   303         if (&ec_masters[i] == master)
   306         if (&ec_masters[i] == master) {
   304         {
   307             found = 1;
   305             if (!master->device_registered) {
   308             break;
   306                 EC_WARN("Failed to release device module: No device!\n");
       
   307                 return;
       
   308             }
       
   309 
       
   310             ec_master_close(master);
       
   311             ec_master_reset(master);
       
   312 
       
   313             module_put(master->device.module);
       
   314             ec_masters_reserved[i] = 0;
       
   315 
       
   316             EC_INFO("Released master %i.\n", i);
       
   317 
       
   318             return;
       
   319         }
   309         }
   320     }
   310     }
   321 
   311 
   322     EC_WARN("Master %X was never requested!\n", (u32) master);
   312     if (!found) {
       
   313         EC_WARN("Master %X was never requested!\n", (u32) master);
       
   314         return;
       
   315     }
       
   316 
       
   317     EC_INFO("===== Stopping master %i... =====\n", i);
       
   318 
       
   319     ec_master_close(master);
       
   320     ec_master_reset(master);
       
   321 
       
   322     module_put(master->device.module);
       
   323     ec_masters_reserved[i] = 0;
       
   324 
       
   325     EC_INFO("===== Master %i stopped. =====\n", i);
       
   326     return;
   323 }
   327 }
   324 
   328 
   325 /*****************************************************************************/
   329 /*****************************************************************************/
   326 
   330 
   327 module_init(ec_init_module);
   331 module_init(ec_init_module);