master/slave_config.c
changeset 1526 66edd310830c
parent 1509 a864688e7de5
child 1543 373cd456dc26
equal deleted inserted replaced
1525:ee18735e534f 1526:66edd310830c
   792     return ecrt_slave_config_sdo(sc, index, subindex, data, 4);
   792     return ecrt_slave_config_sdo(sc, index, subindex, data, 4);
   793 }
   793 }
   794 
   794 
   795 /*****************************************************************************/
   795 /*****************************************************************************/
   796 
   796 
       
   797 int ecrt_slave_config_complete_sdo(ec_slave_config_t *sc, uint16_t index,
       
   798         const uint8_t *data, size_t size)
       
   799 {
       
   800     ec_slave_t *slave = sc->slave;
       
   801     ec_sdo_request_t *req;
       
   802     int ret;
       
   803 
       
   804     if (sc->master->debug_level)
       
   805         EC_DBG("ecrt_slave_config_complete_sdo(sc = 0x%x, index = 0x%04X, "
       
   806                 "data = 0x%x, size = %u)\n", (u32) sc,
       
   807                 index, (u32) data, size);
       
   808 
       
   809     if (slave && !(slave->sii.mailbox_protocols & EC_MBOX_COE)) {
       
   810         EC_ERR("Slave %u does not support CoE!\n", slave->ring_position);
       
   811         return -EPROTONOSUPPORT; // protocol not supported
       
   812     }
       
   813 
       
   814     if (!(req = (ec_sdo_request_t *)
       
   815           kmalloc(sizeof(ec_sdo_request_t), GFP_KERNEL))) {
       
   816         EC_ERR("Failed to allocate memory for SDO configuration!\n");
       
   817         return -ENOMEM;
       
   818     }
       
   819 
       
   820     ec_sdo_request_init(req);
       
   821     ec_sdo_request_address(req, index, 0);
       
   822     req->complete_access = 1;
       
   823 
       
   824     ret = ec_sdo_request_copy_data(req, data, size);
       
   825     if (ret < 0) {
       
   826         ec_sdo_request_clear(req);
       
   827         kfree(req);
       
   828         return ret;
       
   829     }
       
   830         
       
   831     down(&sc->master->master_sem);
       
   832     list_add_tail(&req->list, &sc->sdo_configs);
       
   833     up(&sc->master->master_sem);
       
   834     return 0;
       
   835 }
       
   836 
       
   837 /*****************************************************************************/
       
   838 
   797 /** Same as ecrt_slave_config_create_sdo_request(), but with ERR_PTR() return
   839 /** Same as ecrt_slave_config_create_sdo_request(), but with ERR_PTR() return
   798  * value.
   840  * value.
   799  */
   841  */
   800 ec_sdo_request_t *ecrt_slave_config_create_sdo_request_err(
   842 ec_sdo_request_t *ecrt_slave_config_create_sdo_request_err(
   801         ec_slave_config_t *sc, uint16_t index, uint8_t subindex, size_t size)
   843         ec_slave_config_t *sc, uint16_t index, uint8_t subindex, size_t size)
   921 EXPORT_SYMBOL(ecrt_slave_config_dc);
   963 EXPORT_SYMBOL(ecrt_slave_config_dc);
   922 EXPORT_SYMBOL(ecrt_slave_config_sdo);
   964 EXPORT_SYMBOL(ecrt_slave_config_sdo);
   923 EXPORT_SYMBOL(ecrt_slave_config_sdo8);
   965 EXPORT_SYMBOL(ecrt_slave_config_sdo8);
   924 EXPORT_SYMBOL(ecrt_slave_config_sdo16);
   966 EXPORT_SYMBOL(ecrt_slave_config_sdo16);
   925 EXPORT_SYMBOL(ecrt_slave_config_sdo32);
   967 EXPORT_SYMBOL(ecrt_slave_config_sdo32);
       
   968 EXPORT_SYMBOL(ecrt_slave_config_complete_sdo);
   926 EXPORT_SYMBOL(ecrt_slave_config_create_sdo_request);
   969 EXPORT_SYMBOL(ecrt_slave_config_create_sdo_request);
   927 EXPORT_SYMBOL(ecrt_slave_config_create_voe_handler);
   970 EXPORT_SYMBOL(ecrt_slave_config_create_voe_handler);
   928 EXPORT_SYMBOL(ecrt_slave_config_state);
   971 EXPORT_SYMBOL(ecrt_slave_config_state);
   929 
   972 
   930 /** \endcond */
   973 /** \endcond */