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 |