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 */ |