equal
deleted
inserted
replaced
158 memcpy(data.devices[1].address, master->backup_mac, ETH_ALEN); |
158 memcpy(data.devices[1].address, master->backup_mac, ETH_ALEN); |
159 data.devices[1].attached = master->backup_device.dev ? 1 : 0; |
159 data.devices[1].attached = master->backup_device.dev ? 1 : 0; |
160 data.devices[1].tx_count = master->backup_device.tx_count; |
160 data.devices[1].tx_count = master->backup_device.tx_count; |
161 data.devices[1].rx_count = master->backup_device.rx_count; |
161 data.devices[1].rx_count = master->backup_device.rx_count; |
162 |
162 |
163 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
163 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
164 retval = -EFAULT; |
164 retval = -EFAULT; |
165 break; |
165 break; |
166 } |
166 } |
167 |
|
168 break; |
|
169 } |
|
170 |
|
171 retval = master->slave_count; |
|
172 break; |
|
173 |
167 |
174 case EC_IOCTL_SLAVE: |
168 case EC_IOCTL_SLAVE: |
175 { |
169 { |
176 ec_ioctl_slave_t data; |
170 ec_ioctl_slave_t data; |
177 const ec_slave_t *slave; |
171 const ec_slave_t *slave; |
215 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
209 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
216 } else { |
210 } else { |
217 data.name[0] = 0; |
211 data.name[0] = 0; |
218 } |
212 } |
219 |
213 |
220 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
214 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
221 retval = -EFAULT; |
215 retval = -EFAULT; |
222 break; |
|
223 } |
|
224 |
|
225 break; |
216 break; |
226 } |
217 } |
227 |
218 |
228 case EC_IOCTL_SYNC: |
219 case EC_IOCTL_SYNC: |
229 { |
220 { |
257 data.control_register = sync->control_register; |
248 data.control_register = sync->control_register; |
258 data.enable = sync->enable; |
249 data.enable = sync->enable; |
259 data.assign_source = sync->assign_source; |
250 data.assign_source = sync->assign_source; |
260 data.pdo_count = ec_pdo_list_count(&sync->pdos); |
251 data.pdo_count = ec_pdo_list_count(&sync->pdos); |
261 |
252 |
262 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
253 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
263 retval = -EFAULT; |
254 retval = -EFAULT; |
264 break; |
|
265 } |
|
266 break; |
255 break; |
267 } |
256 } |
268 |
257 |
269 case EC_IOCTL_PDO: |
258 case EC_IOCTL_PDO: |
270 { |
259 { |
311 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
300 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
312 } else { |
301 } else { |
313 data.name[0] = 0; |
302 data.name[0] = 0; |
314 } |
303 } |
315 |
304 |
316 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
305 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
317 retval = -EFAULT; |
306 retval = -EFAULT; |
318 break; |
|
319 } |
|
320 break; |
307 break; |
321 } |
308 } |
322 |
309 |
323 case EC_IOCTL_PDO_ENTRY: |
310 case EC_IOCTL_PDO_ENTRY: |
324 { |
311 { |
374 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
361 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
375 } else { |
362 } else { |
376 data.name[0] = 0; |
363 data.name[0] = 0; |
377 } |
364 } |
378 |
365 |
379 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
366 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
380 retval = -EFAULT; |
367 retval = -EFAULT; |
381 break; |
|
382 } |
|
383 break; |
368 break; |
384 } |
369 } |
385 |
370 |
386 case EC_IOCTL_DOMAIN_COUNT: |
371 case EC_IOCTL_DOMAIN_COUNT: |
387 retval = ec_master_domain_count(master); |
372 retval = ec_master_domain_count(master); |
407 data.logical_base_address = domain->logical_base_address; |
392 data.logical_base_address = domain->logical_base_address; |
408 data.working_counter = domain->working_counter; |
393 data.working_counter = domain->working_counter; |
409 data.expected_working_counter = domain->expected_working_counter; |
394 data.expected_working_counter = domain->expected_working_counter; |
410 data.fmmu_count = ec_domain_fmmu_count(domain); |
395 data.fmmu_count = ec_domain_fmmu_count(domain); |
411 |
396 |
412 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
397 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
413 retval = -EFAULT; |
398 retval = -EFAULT; |
414 break; |
|
415 } |
|
416 break; |
399 break; |
417 } |
400 } |
418 |
401 |
419 case EC_IOCTL_DOMAIN_FMMU: |
402 case EC_IOCTL_DOMAIN_FMMU: |
420 { |
403 { |
444 data.slave_config_position = fmmu->sc->position; |
427 data.slave_config_position = fmmu->sc->position; |
445 data.fmmu_dir = fmmu->dir; |
428 data.fmmu_dir = fmmu->dir; |
446 data.logical_address = fmmu->logical_start_address; |
429 data.logical_address = fmmu->logical_start_address; |
447 data.data_size = fmmu->data_size; |
430 data.data_size = fmmu->data_size; |
448 |
431 |
449 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
432 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
450 retval = -EFAULT; |
433 retval = -EFAULT; |
451 break; |
|
452 } |
|
453 break; |
434 break; |
454 } |
435 } |
455 |
436 |
456 case EC_IOCTL_DATA: |
437 case EC_IOCTL_DATA: |
457 { |
438 { |
475 retval = -EFAULT; |
456 retval = -EFAULT; |
476 break; |
457 break; |
477 } |
458 } |
478 |
459 |
479 if (copy_to_user((void __user *) data.target, domain->data, |
460 if (copy_to_user((void __user *) data.target, domain->data, |
480 domain->data_size)) { |
461 domain->data_size)) |
481 retval = -EFAULT; |
462 retval = -EFAULT; |
482 break; |
|
483 } |
|
484 break; |
463 break; |
485 } |
464 } |
486 |
465 |
487 case EC_IOCTL_SET_DEBUG: |
466 case EC_IOCTL_SET_DEBUG: |
488 if (!(filp->f_mode & FMODE_WRITE)) |
467 if (!(filp->f_mode & FMODE_WRITE)) |
489 return -EPERM; |
468 return -EPERM; |
490 if (ec_master_debug_level(master, (unsigned int) arg)) { |
469 if (ec_master_debug_level(master, (unsigned int) arg)) |
491 retval = -EINVAL; |
470 retval = -EINVAL; |
492 } |
|
493 break; |
471 break; |
494 |
472 |
495 case EC_IOCTL_SLAVE_STATE: |
473 case EC_IOCTL_SLAVE_STATE: |
496 { |
474 { |
497 ec_ioctl_slave_state_t data; |
475 ec_ioctl_slave_state_t data; |
550 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
528 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
551 } else { |
529 } else { |
552 data.name[0] = 0; |
530 data.name[0] = 0; |
553 } |
531 } |
554 |
532 |
555 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
533 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
556 retval = -EFAULT; |
534 retval = -EFAULT; |
557 break; |
|
558 } |
|
559 break; |
535 break; |
560 } |
536 } |
561 |
537 |
562 case EC_IOCTL_SDO_ENTRY: |
538 case EC_IOCTL_SDO_ENTRY: |
563 { |
539 { |
615 = 0; |
591 = 0; |
616 } else { |
592 } else { |
617 data.description[0] = 0; |
593 data.description[0] = 0; |
618 } |
594 } |
619 |
595 |
620 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
596 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
621 retval = -EFAULT; |
597 retval = -EFAULT; |
622 break; |
|
623 } |
|
624 break; |
598 break; |
625 } |
599 } |
626 |
600 |
627 case EC_IOCTL_SDO_UPLOAD: |
601 case EC_IOCTL_SDO_UPLOAD: |
628 { |
602 { |
796 retval = -EINVAL; |
770 retval = -EINVAL; |
797 break; |
771 break; |
798 } |
772 } |
799 |
773 |
800 if (copy_to_user((void __user *) data.words, |
774 if (copy_to_user((void __user *) data.words, |
801 slave->sii_words + data.offset, data.nwords * 2)) { |
775 slave->sii_words + data.offset, data.nwords * 2)) |
802 retval = -EFAULT; |
776 retval = -EFAULT; |
803 break; |
|
804 } |
|
805 break; |
777 break; |
806 } |
778 } |
807 |
779 |
808 case EC_IOCTL_SII_WRITE: |
780 case EC_IOCTL_SII_WRITE: |
809 { |
781 { |
841 kfree(words); |
813 kfree(words); |
842 break; |
814 break; |
843 } |
815 } |
844 |
816 |
845 if (ec_slave_write_sii(slave, |
817 if (ec_slave_write_sii(slave, |
846 data.offset, data.nwords, words)) { |
818 data.offset, data.nwords, words)) |
847 retval = -EIO; |
819 retval = -EIO; |
848 kfree(words); |
|
849 break; |
|
850 } |
|
851 |
820 |
852 kfree(words); |
821 kfree(words); |
853 break; |
822 break; |
854 } |
823 } |
855 |
824 |
880 data.pdo_count[EC_DIR_INPUT] = |
849 data.pdo_count[EC_DIR_INPUT] = |
881 ec_pdo_list_count(&sc->pdos[EC_DIR_INPUT]); |
850 ec_pdo_list_count(&sc->pdos[EC_DIR_INPUT]); |
882 data.sdo_count = ec_slave_config_sdo_count(sc); |
851 data.sdo_count = ec_slave_config_sdo_count(sc); |
883 data.attached = sc->slave != NULL; |
852 data.attached = sc->slave != NULL; |
884 |
853 |
885 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
854 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
886 retval = -EFAULT; |
855 retval = -EFAULT; |
887 break; |
|
888 } |
|
889 break; |
856 break; |
890 } |
857 } |
891 |
858 |
892 case EC_IOCTL_CONFIG_PDO: |
859 case EC_IOCTL_CONFIG_PDO: |
893 { |
860 { |
929 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
896 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
930 } else { |
897 } else { |
931 data.name[0] = 0; |
898 data.name[0] = 0; |
932 } |
899 } |
933 |
900 |
934 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
901 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
935 retval = -EFAULT; |
902 retval = -EFAULT; |
936 break; |
|
937 } |
|
938 break; |
903 break; |
939 } |
904 } |
940 |
905 |
941 case EC_IOCTL_CONFIG_PDO_ENTRY: |
906 case EC_IOCTL_CONFIG_PDO_ENTRY: |
942 { |
907 { |
986 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
951 data.name[EC_IOCTL_STRING_SIZE - 1] = 0; |
987 } else { |
952 } else { |
988 data.name[0] = 0; |
953 data.name[0] = 0; |
989 } |
954 } |
990 |
955 |
991 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
956 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
992 retval = -EFAULT; |
957 retval = -EFAULT; |
993 break; |
|
994 } |
|
995 break; |
958 break; |
996 } |
959 } |
997 |
960 |
998 case EC_IOCTL_CONFIG_SDO: |
961 case EC_IOCTL_CONFIG_SDO: |
999 { |
962 { |
1024 data.index = req->index; |
987 data.index = req->index; |
1025 data.subindex = req->subindex; |
988 data.subindex = req->subindex; |
1026 data.size = req->data_size; |
989 data.size = req->data_size; |
1027 memcpy(&data.data, req->data, min((u32) data.size, (u32) 4)); |
990 memcpy(&data.data, req->data, min((u32) data.size, (u32) 4)); |
1028 |
991 |
1029 if (copy_to_user((void __user *) arg, &data, sizeof(data))) { |
992 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
1030 retval = -EFAULT; |
993 retval = -EFAULT; |
1031 break; |
|
1032 } |
|
1033 break; |
994 break; |
1034 } |
995 } |
1035 |
996 |
1036 default: |
997 default: |
1037 retval = -ENOTTY; |
998 retval = -ENOTTY; |