kobject_add() in constructors.
This commit is contained in:
parent
1999d5d4a0
commit
e3b241a79a
16
TODO
16
TODO
|
|
@ -8,33 +8,19 @@ $Id$
|
|||
|
||||
Important things to do:
|
||||
|
||||
* Add Kobjects in constructors.
|
||||
|
||||
* Read AL Status Code with AL Control Response (if possible?)
|
||||
|
||||
* Coupling of EoE handlers before configuring slaves.
|
||||
(avoiding duplicate configuration)
|
||||
|
||||
* SysFS interface
|
||||
- Add secondary slave address
|
||||
- Add SDO dictionary
|
||||
|
||||
* Implement all EtherCAT commands
|
||||
|
||||
* Determine number of frames the NIC can handle
|
||||
|
||||
* Implement eepro100 driver
|
||||
|
||||
* Progress bar in ecrt.
|
||||
* Implement e100 driver
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Not-so-important things to do:
|
||||
|
||||
* Calculate bus topology
|
||||
|
||||
* File access over EtherCAT (FoE)
|
||||
|
||||
* Allow VLAN tagging
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -122,6 +122,12 @@ int ec_sdo_init(ec_sdo_t *sdo, /**< SDO */
|
|||
sdo->kobj.parent = &slave->sdo_kobj;
|
||||
if (kobject_set_name(&sdo->kobj, "%4X", sdo->index)) {
|
||||
EC_ERR("Failed to set kobj name.\n");
|
||||
kobject_put(&sdo->kobj);
|
||||
return -1;
|
||||
}
|
||||
if (kobject_add(&sdo->kobj)) {
|
||||
EC_ERR("Failed to add SDO kobject.\n");
|
||||
kobject_put(&sdo->kobj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -222,6 +228,12 @@ int ec_sdo_entry_init(ec_sdo_entry_t *entry, /**< SDO entry */
|
|||
entry->kobj.parent = &sdo->kobj;
|
||||
if (kobject_set_name(&entry->kobj, "%i", entry->subindex)) {
|
||||
EC_ERR("Failed to set kobj name.\n");
|
||||
kobject_put(&entry->kobj);
|
||||
return -1;
|
||||
}
|
||||
if (kobject_add(&entry->kobj)) {
|
||||
EC_ERR("Failed to add entry kobject.\n");
|
||||
kobject_put(&entry->kobj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -120,6 +120,12 @@ int ec_domain_init(ec_domain_t *domain, /**< EtherCAT domain */
|
|||
domain->kobj.parent = &master->kobj;
|
||||
if (kobject_set_name(&domain->kobj, "domain%i", index)) {
|
||||
EC_ERR("Failed to set kobj name.\n");
|
||||
kobject_put(&domain->kobj);
|
||||
return -1;
|
||||
}
|
||||
if (kobject_add(&domain->kobj)) {
|
||||
EC_ERR("Failed to add domain kobject.\n");
|
||||
kobject_put(&domain->kobj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
|||
16
master/fsm.c
16
master/fsm.c
|
|
@ -275,14 +275,6 @@ void ec_fsm_master_broadcast(ec_fsm_t *fsm /**< finite state machine */)
|
|||
return;
|
||||
}
|
||||
|
||||
if (kobject_add(&slave->kobj)) {
|
||||
EC_ERR("Failed to add kobject.\n");
|
||||
kobject_put(&slave->kobj); // free
|
||||
ec_master_destroy_slaves(master);
|
||||
fsm->master_state = ec_fsm_master_error;
|
||||
return;
|
||||
}
|
||||
|
||||
list_add_tail(&slave->list, &master->slaves);
|
||||
}
|
||||
|
||||
|
|
@ -388,14 +380,6 @@ void ec_fsm_master_action_process_states(ec_fsm_t *fsm
|
|||
slave->ring_position);
|
||||
}
|
||||
|
||||
if (kobject_add(&slave->sdo_kobj)) {
|
||||
EC_ERR("Failed to add SDO kobj of slave %i.\n",
|
||||
slave->ring_position);
|
||||
slave->error_flag = 1;
|
||||
fsm->master_state = ec_fsm_master_error;
|
||||
return;
|
||||
}
|
||||
|
||||
slave->sdo_dictionary_fetched = 1;
|
||||
|
||||
// start fetching SDO dictionary
|
||||
|
|
|
|||
|
|
@ -413,13 +413,6 @@ void ec_fsm_coe_dict_response(ec_fsm_coe_t *fsm /**< finite state machine */)
|
|||
return;
|
||||
}
|
||||
|
||||
if (kobject_add(&sdo->kobj)) {
|
||||
EC_ERR("Failed to add kobject.\n");
|
||||
kobject_put(&sdo->kobj); // free
|
||||
fsm->state = ec_fsm_coe_error;
|
||||
return;
|
||||
}
|
||||
|
||||
list_add_tail(&sdo->list, &slave->sdo_dictionary);
|
||||
}
|
||||
|
||||
|
|
@ -776,20 +769,15 @@ void ec_fsm_coe_dict_entry_response(ec_fsm_coe_t *fsm
|
|||
entry->bit_length = EC_READ_U16(data + 12);
|
||||
|
||||
if (data_size) {
|
||||
if (!(entry->description = kmalloc(data_size + 1, GFP_ATOMIC))) {
|
||||
uint8_t *desc;
|
||||
if (!(desc = kmalloc(data_size + 1, GFP_ATOMIC))) {
|
||||
EC_ERR("Failed to allocate SDO entry name!\n");
|
||||
fsm->state = ec_fsm_coe_error;
|
||||
return;
|
||||
}
|
||||
memcpy(entry->description, data + 16, data_size);
|
||||
entry->description[data_size] = 0;
|
||||
}
|
||||
|
||||
if (kobject_add(&entry->kobj)) {
|
||||
EC_ERR("Failed to add kobject.\n");
|
||||
kobject_put(&entry->kobj); // free
|
||||
fsm->state = ec_fsm_coe_error;
|
||||
return;
|
||||
memcpy(desc, data + 16, data_size);
|
||||
desc[data_size] = 0;
|
||||
entry->description = desc;
|
||||
}
|
||||
|
||||
list_add_tail(&entry->list, &sdo->entries);
|
||||
|
|
|
|||
|
|
@ -203,6 +203,11 @@ int ec_master_init(ec_master_t *master, /**< EtherCAT master */
|
|||
kobject_put(&master->kobj);
|
||||
return -1;
|
||||
}
|
||||
if (kobject_add(&master->kobj)) {
|
||||
EC_ERR("Failed to add master kobj.\n");
|
||||
kobject_put(&master->kobj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
@ -1271,7 +1276,7 @@ ec_domain_t *ecrt_master_create_domain(ec_master_t *master /**< master */)
|
|||
|
||||
if (!(domain = (ec_domain_t *) kmalloc(sizeof(ec_domain_t), GFP_KERNEL))) {
|
||||
EC_ERR("Error allocating domain memory!\n");
|
||||
goto out_return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (list_empty(&master->domains)) index = 0;
|
||||
|
|
@ -1282,21 +1287,12 @@ ec_domain_t *ecrt_master_create_domain(ec_master_t *master /**< master */)
|
|||
|
||||
if (ec_domain_init(domain, master, index)) {
|
||||
EC_ERR("Failed to init domain.\n");
|
||||
goto out_return;
|
||||
}
|
||||
|
||||
if (kobject_add(&domain->kobj)) {
|
||||
EC_ERR("Failed to add domain kobject.\n");
|
||||
goto out_put;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
list_add_tail(&domain->list, &master->domains);
|
||||
return domain;
|
||||
|
||||
out_put:
|
||||
kobject_put(&domain->kobj);
|
||||
out_return:
|
||||
return NULL;
|
||||
return domain;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -115,12 +115,6 @@ int __init ec_init_module(void)
|
|||
if (ec_master_init(master, i, ec_eoeif_count, device_number))
|
||||
goto out_free;
|
||||
|
||||
if (kobject_add(&master->kobj)) {
|
||||
EC_ERR("Failed to add kobj.\n");
|
||||
kobject_put(&master->kobj); // free master
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
list_add_tail(&master->list, &ec_masters);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -108,29 +108,6 @@ int ec_slave_init(ec_slave_t *slave, /**< EtherCAT slave */
|
|||
slave->ring_position = ring_position;
|
||||
slave->station_address = station_address;
|
||||
|
||||
// init kobject and add it to the hierarchy
|
||||
memset(&slave->kobj, 0x00, sizeof(struct kobject));
|
||||
kobject_init(&slave->kobj);
|
||||
slave->kobj.ktype = &ktype_ec_slave;
|
||||
slave->kobj.parent = &master->kobj;
|
||||
if (kobject_set_name(&slave->kobj, "slave%03i", slave->ring_position)) {
|
||||
EC_ERR("Failed to set kobject name.\n");
|
||||
kobject_put(&slave->kobj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// init SDO kobject and add it to the hierarchy
|
||||
memset(&slave->sdo_kobj, 0x00, sizeof(struct kobject));
|
||||
kobject_init(&slave->sdo_kobj);
|
||||
slave->sdo_kobj.ktype = &ktype_ec_slave_sdos;
|
||||
slave->sdo_kobj.parent = &slave->kobj;
|
||||
if (kobject_set_name(&slave->sdo_kobj, "sdos")) {
|
||||
EC_ERR("Failed to set kobject name.\n");
|
||||
kobject_put(&slave->sdo_kobj);
|
||||
kobject_put(&slave->kobj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
slave->master = master;
|
||||
|
||||
slave->requested_state = EC_SLAVE_STATE_UNKNOWN;
|
||||
|
|
@ -185,7 +162,42 @@ int ec_slave_init(ec_slave_t *slave, /**< EtherCAT slave */
|
|||
slave->sii_physical_layer[i] = 0xFF;
|
||||
}
|
||||
|
||||
// init kobject and add it to the hierarchy
|
||||
memset(&slave->kobj, 0x00, sizeof(struct kobject));
|
||||
kobject_init(&slave->kobj);
|
||||
slave->kobj.ktype = &ktype_ec_slave;
|
||||
slave->kobj.parent = &master->kobj;
|
||||
if (kobject_set_name(&slave->kobj, "slave%03i", slave->ring_position)) {
|
||||
EC_ERR("Failed to set kobject name.\n");
|
||||
goto out_slave_put;
|
||||
}
|
||||
if (kobject_add(&slave->kobj)) {
|
||||
EC_ERR("Failed to add slave's kobject.\n");
|
||||
goto out_slave_put;
|
||||
}
|
||||
|
||||
// init SDO kobject and add it to the hierarchy
|
||||
memset(&slave->sdo_kobj, 0x00, sizeof(struct kobject));
|
||||
kobject_init(&slave->sdo_kobj);
|
||||
slave->sdo_kobj.ktype = &ktype_ec_slave_sdos;
|
||||
slave->sdo_kobj.parent = &slave->kobj;
|
||||
if (kobject_set_name(&slave->sdo_kobj, "sdos")) {
|
||||
EC_ERR("Failed to set kobject name.\n");
|
||||
goto out_sdo_put;
|
||||
}
|
||||
if (kobject_add(&slave->sdo_kobj)) {
|
||||
EC_ERR("Failed to add SDOs kobject.\n");
|
||||
goto out_sdo_put;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_sdo_put:
|
||||
kobject_put(&slave->sdo_kobj);
|
||||
kobject_del(&slave->kobj);
|
||||
out_slave_put:
|
||||
kobject_put(&slave->kobj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
@ -206,7 +218,7 @@ void ec_slave_destroy(ec_slave_t *slave /**< EtherCAT slave */)
|
|||
}
|
||||
|
||||
// free SDO kobject
|
||||
if (slave->sdo_dictionary_fetched) kobject_del(&slave->sdo_kobj);
|
||||
kobject_del(&slave->sdo_kobj);
|
||||
kobject_put(&slave->sdo_kobj);
|
||||
|
||||
// destroy self
|
||||
|
|
|
|||
Loading…
Reference in New Issue