master/slave_config.c
changeset 893 d921fff3d6e2
parent 879 9b395c5646ab
child 916 db73994fbdac
equal deleted inserted replaced
892:1e1e567fc53b 893:d921fff3d6e2
   313 
   313 
   314     if (attr == &attr_info) {
   314     if (attr == &attr_info) {
   315         return ec_slave_config_info(sc, buffer);
   315         return ec_slave_config_info(sc, buffer);
   316     }
   316     }
   317 
   317 
   318     return 0;
       
   319 }
       
   320 
       
   321 /*****************************************************************************/
       
   322 
       
   323 /** Adds an Sdo configuration.
       
   324  */
       
   325 int ec_slave_config_sdo(ec_slave_config_t *sc, uint16_t index,
       
   326         uint8_t subindex, const uint8_t *data, size_t size)
       
   327 {
       
   328     ec_slave_t *slave = sc->slave;
       
   329     ec_sdo_request_t *req;
       
   330 
       
   331     if (slave && !(slave->sii.mailbox_protocols & EC_MBOX_COE)) {
       
   332         EC_ERR("Slave %u does not support CoE!\n", slave->ring_position);
       
   333         return -1;
       
   334     }
       
   335 
       
   336     if (!(req = (ec_sdo_request_t *)
       
   337           kmalloc(sizeof(ec_sdo_request_t), GFP_KERNEL))) {
       
   338         EC_ERR("Failed to allocate memory for Sdo configuration!\n");
       
   339         return -1;
       
   340     }
       
   341 
       
   342     ec_sdo_request_init(req);
       
   343     ec_sdo_request_address(req, index, subindex);
       
   344 
       
   345     if (ec_sdo_request_copy_data(req, data, size)) {
       
   346         ec_sdo_request_clear(req);
       
   347         kfree(req);
       
   348         return -1;
       
   349     }
       
   350         
       
   351     list_add_tail(&req->list, &sc->sdo_configs);
       
   352     return 0;
   318     return 0;
   353 }
   319 }
   354 
   320 
   355 /*****************************************************************************/
   321 /*****************************************************************************/
   356 
   322 
   675     return ret + byte_offset;
   641     return ret + byte_offset;
   676 }
   642 }
   677 
   643 
   678 /*****************************************************************************/
   644 /*****************************************************************************/
   679 
   645 
   680 int ecrt_slave_config_sdo8(ec_slave_config_t *slave, uint16_t index,
   646 int ecrt_slave_config_sdo(ec_slave_config_t *sc, uint16_t index,
       
   647         uint8_t subindex, const uint8_t *data, size_t size)
       
   648 {
       
   649     ec_slave_t *slave = sc->slave;
       
   650     ec_sdo_request_t *req;
       
   651 
       
   652     if (slave && !(slave->sii.mailbox_protocols & EC_MBOX_COE)) {
       
   653         EC_ERR("Slave %u does not support CoE!\n", slave->ring_position);
       
   654         return -1;
       
   655     }
       
   656 
       
   657     if (!(req = (ec_sdo_request_t *)
       
   658           kmalloc(sizeof(ec_sdo_request_t), GFP_KERNEL))) {
       
   659         EC_ERR("Failed to allocate memory for Sdo configuration!\n");
       
   660         return -1;
       
   661     }
       
   662 
       
   663     ec_sdo_request_init(req);
       
   664     ec_sdo_request_address(req, index, subindex);
       
   665 
       
   666     if (ec_sdo_request_copy_data(req, data, size)) {
       
   667         ec_sdo_request_clear(req);
       
   668         kfree(req);
       
   669         return -1;
       
   670     }
       
   671         
       
   672     list_add_tail(&req->list, &sc->sdo_configs);
       
   673     return 0;
       
   674 }
       
   675 
       
   676 /*****************************************************************************/
       
   677 
       
   678 int ecrt_slave_config_sdo8(ec_slave_config_t *sc, uint16_t index,
   681         uint8_t subindex, uint8_t value)
   679         uint8_t subindex, uint8_t value)
   682 {
   680 {
   683     uint8_t data[1];
   681     uint8_t data[1];
   684     EC_WRITE_U8(data, value);
   682     EC_WRITE_U8(data, value);
   685     return ec_slave_config_sdo(slave, index, subindex, data, 1);
   683     return ecrt_slave_config_sdo(sc, index, subindex, data, 1);
   686 }
   684 }
   687 
   685 
   688 /*****************************************************************************/
   686 /*****************************************************************************/
   689 
   687 
   690 int ecrt_slave_config_sdo16(ec_slave_config_t *slave, uint16_t index,
   688 int ecrt_slave_config_sdo16(ec_slave_config_t *sc, uint16_t index,
   691         uint8_t subindex, uint16_t value)
   689         uint8_t subindex, uint16_t value)
   692 {
   690 {
   693     uint8_t data[2];
   691     uint8_t data[2];
   694     EC_WRITE_U16(data, value);
   692     EC_WRITE_U16(data, value);
   695     return ec_slave_config_sdo(slave, index, subindex, data, 2);
   693     return ecrt_slave_config_sdo(sc, index, subindex, data, 2);
   696 }
   694 }
   697 
   695 
   698 /*****************************************************************************/
   696 /*****************************************************************************/
   699 
   697 
   700 int ecrt_slave_config_sdo32(ec_slave_config_t *slave, uint16_t index,
   698 int ecrt_slave_config_sdo32(ec_slave_config_t *sc, uint16_t index,
   701         uint8_t subindex, uint32_t value)
   699         uint8_t subindex, uint32_t value)
   702 {
   700 {
   703     uint8_t data[4];
   701     uint8_t data[4];
   704     EC_WRITE_U32(data, value);
   702     EC_WRITE_U32(data, value);
   705     return ec_slave_config_sdo(slave, index, subindex, data, 4);
   703     return ecrt_slave_config_sdo(sc, index, subindex, data, 4);
   706 }
   704 }
   707 
   705 
   708 /*****************************************************************************/
   706 /*****************************************************************************/
   709 
   707 
   710 ec_sdo_request_t *ecrt_slave_config_create_sdo_request(ec_slave_config_t *sc,
   708 ec_sdo_request_t *ecrt_slave_config_create_sdo_request(ec_slave_config_t *sc,
   743 EXPORT_SYMBOL(ecrt_slave_config_pdo_assign_clear);
   741 EXPORT_SYMBOL(ecrt_slave_config_pdo_assign_clear);
   744 EXPORT_SYMBOL(ecrt_slave_config_pdo_mapping_add);
   742 EXPORT_SYMBOL(ecrt_slave_config_pdo_mapping_add);
   745 EXPORT_SYMBOL(ecrt_slave_config_pdo_mapping_clear);
   743 EXPORT_SYMBOL(ecrt_slave_config_pdo_mapping_clear);
   746 EXPORT_SYMBOL(ecrt_slave_config_pdos);
   744 EXPORT_SYMBOL(ecrt_slave_config_pdos);
   747 EXPORT_SYMBOL(ecrt_slave_config_reg_pdo_entry);
   745 EXPORT_SYMBOL(ecrt_slave_config_reg_pdo_entry);
       
   746 EXPORT_SYMBOL(ecrt_slave_config_sdo);
   748 EXPORT_SYMBOL(ecrt_slave_config_sdo8);
   747 EXPORT_SYMBOL(ecrt_slave_config_sdo8);
   749 EXPORT_SYMBOL(ecrt_slave_config_sdo16);
   748 EXPORT_SYMBOL(ecrt_slave_config_sdo16);
   750 EXPORT_SYMBOL(ecrt_slave_config_sdo32);
   749 EXPORT_SYMBOL(ecrt_slave_config_sdo32);
   751 EXPORT_SYMBOL(ecrt_slave_config_create_sdo_request);
   750 EXPORT_SYMBOL(ecrt_slave_config_create_sdo_request);
   752 
   751