equal
deleted
inserted
replaced
286 slave->ring_position); |
286 slave->ring_position); |
287 fsm->state = ec_fsm_coe_error; |
287 fsm->state = ec_fsm_coe_error; |
288 return; |
288 return; |
289 } |
289 } |
290 |
290 |
291 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 8))) { |
291 data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 8); |
|
292 if (IS_ERR(data)) { |
292 fsm->state = ec_fsm_coe_error; |
293 fsm->state = ec_fsm_coe_error; |
293 return; |
294 return; |
294 } |
295 } |
295 |
296 |
296 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
297 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
426 slave->ring_position); |
427 slave->ring_position); |
427 ec_datagram_print_wc_error(datagram); |
428 ec_datagram_print_wc_error(datagram); |
428 return; |
429 return; |
429 } |
430 } |
430 |
431 |
431 if (!(data = ec_slave_mbox_fetch(slave, datagram, |
432 data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size); |
432 &mbox_prot, &rec_size))) { |
433 if (IS_ERR(data)) { |
433 fsm->state = ec_fsm_coe_error; |
434 fsm->state = ec_fsm_coe_error; |
434 return; |
435 return; |
435 } |
436 } |
436 |
437 |
437 if (mbox_prot != 0x03) { // CoE |
438 if (mbox_prot != 0x03) { // CoE |
530 } |
531 } |
531 |
532 |
532 // fetch Sdo descriptions |
533 // fetch Sdo descriptions |
533 fsm->sdo = list_entry(slave->sdo_dictionary.next, ec_sdo_t, list); |
534 fsm->sdo = list_entry(slave->sdo_dictionary.next, ec_sdo_t, list); |
534 |
535 |
535 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 8))) { |
536 data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 8); |
|
537 if (IS_ERR(data)) { |
536 fsm->state = ec_fsm_coe_error; |
538 fsm->state = ec_fsm_coe_error; |
537 return; |
539 return; |
538 } |
540 } |
539 |
541 |
540 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
542 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
669 " response failed on slave %u: ", slave->ring_position); |
671 " response failed on slave %u: ", slave->ring_position); |
670 ec_datagram_print_wc_error(datagram); |
672 ec_datagram_print_wc_error(datagram); |
671 return; |
673 return; |
672 } |
674 } |
673 |
675 |
674 if (!(data = ec_slave_mbox_fetch(slave, datagram, |
676 data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size); |
675 &mbox_prot, &rec_size))) { |
677 if (IS_ERR(data)) { |
676 fsm->state = ec_fsm_coe_error; |
678 fsm->state = ec_fsm_coe_error; |
677 return; |
679 return; |
678 } |
680 } |
679 |
681 |
680 if (mbox_prot != 0x03) { // CoE |
682 if (mbox_prot != 0x03) { // CoE |
761 |
763 |
762 // start fetching entries |
764 // start fetching entries |
763 |
765 |
764 fsm->subindex = 0; |
766 fsm->subindex = 0; |
765 |
767 |
766 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 10))) { |
768 data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 10); |
|
769 if (IS_ERR(data)) { |
767 fsm->state = ec_fsm_coe_error; |
770 fsm->state = ec_fsm_coe_error; |
768 return; |
771 return; |
769 } |
772 } |
770 |
773 |
771 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
774 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
905 " response failed on slave %u: ", slave->ring_position); |
908 " response failed on slave %u: ", slave->ring_position); |
906 ec_datagram_print_wc_error(datagram); |
909 ec_datagram_print_wc_error(datagram); |
907 return; |
910 return; |
908 } |
911 } |
909 |
912 |
910 if (!(data = ec_slave_mbox_fetch(slave, datagram, |
913 data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size); |
911 &mbox_prot, &rec_size))) { |
914 if (IS_ERR(data)) { |
912 fsm->state = ec_fsm_coe_error; |
915 fsm->state = ec_fsm_coe_error; |
913 return; |
916 return; |
914 } |
917 } |
915 |
918 |
916 if (mbox_prot != 0x03) { // CoE |
919 if (mbox_prot != 0x03) { // CoE |
1003 list_add_tail(&entry->list, &sdo->entries); |
1006 list_add_tail(&entry->list, &sdo->entries); |
1004 |
1007 |
1005 if (fsm->subindex < sdo->max_subindex) { |
1008 if (fsm->subindex < sdo->max_subindex) { |
1006 fsm->subindex++; |
1009 fsm->subindex++; |
1007 |
1010 |
1008 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 10))) { |
1011 data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 10); |
|
1012 if (IS_ERR(data)) { |
1009 fsm->state = ec_fsm_coe_error; |
1013 fsm->state = ec_fsm_coe_error; |
1010 return; |
1014 return; |
1011 } |
1015 } |
1012 |
1016 |
1013 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
1017 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
1025 |
1029 |
1026 // another Sdo description to fetch? |
1030 // another Sdo description to fetch? |
1027 if (fsm->sdo->list.next != &slave->sdo_dictionary) { |
1031 if (fsm->sdo->list.next != &slave->sdo_dictionary) { |
1028 fsm->sdo = list_entry(fsm->sdo->list.next, ec_sdo_t, list); |
1032 fsm->sdo = list_entry(fsm->sdo->list.next, ec_sdo_t, list); |
1029 |
1033 |
1030 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 8))) { |
1034 data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 8); |
|
1035 if (IS_ERR(data)) { |
1031 fsm->state = ec_fsm_coe_error; |
1036 fsm->state = ec_fsm_coe_error; |
1032 return; |
1037 return; |
1033 } |
1038 } |
1034 |
1039 |
1035 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
1040 EC_WRITE_U16(data, 0x8 << 12); // Sdo information |
1073 fsm->state = ec_fsm_coe_error; |
1078 fsm->state = ec_fsm_coe_error; |
1074 return; |
1079 return; |
1075 } |
1080 } |
1076 |
1081 |
1077 if (request->data_size <= 4) { // use expedited transfer type |
1082 if (request->data_size <= 4) { // use expedited transfer type |
1078 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 10))) { |
1083 data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 10); |
|
1084 if (IS_ERR(data)) { |
1079 fsm->state = ec_fsm_coe_error; |
1085 fsm->state = ec_fsm_coe_error; |
1080 return; |
1086 return; |
1081 } |
1087 } |
1082 |
1088 |
1083 size = 4 - request->data_size; |
1089 size = 4 - request->data_size; |
1100 EC_ERR("Sdo fragmenting not supported yet!\n"); |
1106 EC_ERR("Sdo fragmenting not supported yet!\n"); |
1101 fsm->state = ec_fsm_coe_error; |
1107 fsm->state = ec_fsm_coe_error; |
1102 return; |
1108 return; |
1103 } |
1109 } |
1104 |
1110 |
1105 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, |
1111 data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, |
1106 request->data_size + 10))) { |
1112 request->data_size + 10); |
|
1113 if (IS_ERR(data)) { |
1107 fsm->state = ec_fsm_coe_error; |
1114 fsm->state = ec_fsm_coe_error; |
1108 return; |
1115 return; |
1109 } |
1116 } |
1110 |
1117 |
1111 EC_WRITE_U16(data, 0x2 << 12); // Sdo request |
1118 EC_WRITE_U16(data, 0x2 << 12); // Sdo request |
1261 slave->ring_position); |
1268 slave->ring_position); |
1262 ec_datagram_print_wc_error(datagram); |
1269 ec_datagram_print_wc_error(datagram); |
1263 return; |
1270 return; |
1264 } |
1271 } |
1265 |
1272 |
1266 if (!(data = ec_slave_mbox_fetch(slave, datagram, |
1273 data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size); |
1267 &mbox_prot, &rec_size))) { |
1274 if (IS_ERR(data)) { |
1268 fsm->state = ec_fsm_coe_error; |
1275 fsm->state = ec_fsm_coe_error; |
1269 return; |
1276 return; |
1270 } |
1277 } |
1271 |
1278 |
1272 if (mbox_prot != 0x03) { // CoE |
1279 if (mbox_prot != 0x03) { // CoE |
1352 EC_ERR("Slave %u does not support CoE!\n", slave->ring_position); |
1359 EC_ERR("Slave %u does not support CoE!\n", slave->ring_position); |
1353 fsm->state = ec_fsm_coe_error; |
1360 fsm->state = ec_fsm_coe_error; |
1354 return; |
1361 return; |
1355 } |
1362 } |
1356 |
1363 |
1357 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 10))) { |
1364 data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 10); |
|
1365 if (IS_ERR(data)) { |
1358 fsm->state = ec_fsm_coe_error; |
1366 fsm->state = ec_fsm_coe_error; |
1359 return; |
1367 return; |
1360 } |
1368 } |
1361 |
1369 |
1362 EC_WRITE_U16(data, 0x2 << 12); // Sdo request |
1370 EC_WRITE_U16(data, 0x2 << 12); // Sdo request |
1512 slave->ring_position); |
1520 slave->ring_position); |
1513 ec_datagram_print_wc_error(datagram); |
1521 ec_datagram_print_wc_error(datagram); |
1514 return; |
1522 return; |
1515 } |
1523 } |
1516 |
1524 |
1517 if (!(data = ec_slave_mbox_fetch(slave, datagram, |
1525 data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size); |
1518 &mbox_prot, &rec_size))) { |
1526 if (IS_ERR(data)) { |
1519 fsm->state = ec_fsm_coe_error; |
1527 fsm->state = ec_fsm_coe_error; |
1520 return; |
1528 return; |
1521 } |
1529 } |
1522 |
1530 |
1523 if (master->debug_level) { |
1531 if (master->debug_level) { |
1656 |
1664 |
1657 if (data_size < complete_size) { |
1665 if (data_size < complete_size) { |
1658 EC_WARN("Sdo data incomplete (%u / %u).\n", |
1666 EC_WARN("Sdo data incomplete (%u / %u).\n", |
1659 data_size, complete_size); |
1667 data_size, complete_size); |
1660 |
1668 |
1661 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, |
1669 data = ec_slave_mbox_prepare_send(slave, datagram, |
1662 0x03, 3))) { |
1670 0x03, 3); |
|
1671 if (IS_ERR(data)) { |
1663 fsm->state = ec_fsm_coe_error; |
1672 fsm->state = ec_fsm_coe_error; |
1664 return; |
1673 return; |
1665 } |
1674 } |
1666 |
1675 |
1667 EC_WRITE_U16(data, 0x2 << 12); // Sdo request |
1676 EC_WRITE_U16(data, 0x2 << 12); // Sdo request |
1812 " response failed on slave %u: ", slave->ring_position); |
1821 " response failed on slave %u: ", slave->ring_position); |
1813 ec_datagram_print_wc_error(datagram); |
1822 ec_datagram_print_wc_error(datagram); |
1814 return; |
1823 return; |
1815 } |
1824 } |
1816 |
1825 |
1817 if (!(data = ec_slave_mbox_fetch(slave, datagram, |
1826 data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size); |
1818 &mbox_prot, &rec_size))) { |
1827 if (IS_ERR(data)) { |
1819 fsm->state = ec_fsm_coe_error; |
1828 fsm->state = ec_fsm_coe_error; |
1820 return; |
1829 return; |
1821 } |
1830 } |
1822 |
1831 |
1823 if (master->debug_level) { |
1832 if (master->debug_level) { |
1884 request->data_size += data_size; |
1893 request->data_size += data_size; |
1885 |
1894 |
1886 if (!last_segment) { |
1895 if (!last_segment) { |
1887 fsm->toggle = !fsm->toggle; |
1896 fsm->toggle = !fsm->toggle; |
1888 |
1897 |
1889 if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 3))) { |
1898 data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 3); |
|
1899 if (IS_ERR(data)) { |
1890 fsm->state = ec_fsm_coe_error; |
1900 fsm->state = ec_fsm_coe_error; |
1891 return; |
1901 return; |
1892 } |
1902 } |
1893 |
1903 |
1894 EC_WRITE_U16(data, 0x2 << 12); // Sdo request |
1904 EC_WRITE_U16(data, 0x2 << 12); // Sdo request |