465 char str[20]; |
465 char str[20]; |
466 unsigned int i; |
466 unsigned int i; |
467 |
467 |
468 for (i = 0; i < master_count; i++) { |
468 for (i = 0; i < master_count; i++) { |
469 master = &masters[i]; |
469 master = &masters[i]; |
|
470 ec_mac_print(net_dev->dev_addr, str); |
470 |
471 |
471 down(&master->device_sem); |
472 down(&master->device_sem); |
472 if (master->main_device.dev) { // master already has a device |
473 |
473 up(&master->device_sem); |
474 if (!master->main_device.dev |
474 continue; |
475 && (ec_mac_equal(master->main_mac, net_dev->dev_addr) |
475 } |
476 || ec_mac_is_broadcast(master->main_mac))) { |
476 |
477 |
477 if (ec_mac_equal(master->main_mac, net_dev->dev_addr) |
478 EC_INFO("Accepting %s as main device for master %u.\n", |
478 || ec_mac_is_broadcast(master->main_mac)) { |
|
479 ec_mac_print(net_dev->dev_addr, str); |
|
480 EC_INFO("Accepting device %s for master %u.\n", |
|
481 str, master->index); |
479 str, master->index); |
482 |
480 |
483 ec_device_attach(&master->main_device, net_dev, poll, module); |
481 ec_device_attach(&master->main_device, net_dev, poll, module); |
484 up(&master->device_sem); |
482 up(&master->device_sem); |
485 |
483 |
486 snprintf(net_dev->name, IFNAMSIZ, "ec%u", master->index); |
484 snprintf(net_dev->name, IFNAMSIZ, "ec%u", master->index); |
487 |
485 |
488 return &master->main_device; // offer accepted |
486 return &master->main_device; // offer accepted |
489 } |
487 |
490 else { |
488 } else if (!master->backup_device.dev |
|
489 && ec_mac_equal(master->backup_mac, net_dev->dev_addr)) { |
|
490 |
|
491 EC_INFO("Accepting %s as backup device for master %u.\n", |
|
492 str, master->index); |
|
493 |
|
494 ec_device_attach(&master->backup_device, net_dev, poll, |
|
495 module); |
491 up(&master->device_sem); |
496 up(&master->device_sem); |
492 |
497 |
493 if (master->debug_level) { |
498 snprintf(net_dev->name, IFNAMSIZ, "ecb%u", master->index); |
494 ec_mac_print(net_dev->dev_addr, str); |
499 |
495 EC_MASTER_DBG(master, 0, "Master declined device %s.\n", |
500 return &master->backup_device; // offer accepted |
496 str); |
501 |
497 } |
502 } else { |
|
503 |
|
504 up(&master->device_sem); |
|
505 |
|
506 EC_MASTER_DBG(master, 1, "Master declined device %s.\n", str); |
498 } |
507 } |
499 } |
508 } |
500 |
509 |
501 return NULL; // offer declined |
510 return NULL; // offer declined |
502 } |
511 } |