541 } |
541 } |
542 |
542 |
543 master->process_data_size = io.process_data_size; |
543 master->process_data_size = io.process_data_size; |
544 |
544 |
545 if (master->process_data_size) { |
545 if (master->process_data_size) { |
546 #ifdef USE_RTDM |
|
547 /* memory-mapping was already done in kernel. The user-space addess is |
|
548 * provided in the ioctl data. |
|
549 */ |
|
550 master->process_data = io.process_data; |
|
551 #else |
|
552 master->process_data = mmap(0, master->process_data_size, |
546 master->process_data = mmap(0, master->process_data_size, |
553 PROT_READ | PROT_WRITE, MAP_SHARED, master->fd, 0); |
547 PROT_READ | PROT_WRITE, MAP_SHARED, master->fd, 0); |
554 if (master->process_data == MAP_FAILED) { |
548 if (master->process_data == MAP_FAILED) { |
555 fprintf(stderr, "Failed to map process data: %s\n", |
549 fprintf(stderr, "Failed to map process data: %s\n", |
556 strerror(errno)); |
550 strerror(errno)); |
557 master->process_data = NULL; |
551 master->process_data = NULL; |
558 master->process_data_size = 0; |
552 master->process_data_size = 0; |
559 return -errno; |
553 return -errno; |
560 } |
554 } |
561 #endif |
|
562 |
555 |
563 // Access the mapped region to cause the initial page fault |
556 // Access the mapped region to cause the initial page fault |
564 master->process_data[0] = 0x00; |
557 master->process_data[0] = 0x00; |
565 } |
558 } |
566 |
559 |