Rev 2809 | Rev 2813 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2809 | Rev 2812 | ||
|---|---|---|---|
| Line 607... | Line 607... | ||
| 607 | } |
607 | } |
| 608 | 608 | ||
| 609 | #include <ipc/ipcrsc.h> |
609 | #include <ipc/ipcrsc.h> |
| 610 | #include <console/klog.h> |
610 | #include <console/klog.h> |
| 611 | #include <syscall/copy.h> |
611 | #include <syscall/copy.h> |
| - | 612 | #include <udebug.h> |
|
| 612 | 613 | ||
| 613 | static void debug_mem_read(call_t *call) |
614 | static void debug_mem_read(call_t *call) |
| 614 | { |
615 | { |
| - | 616 | unative_t uspace_dst; |
|
| 615 | void *uspace_ptr; |
617 | void *uspace_ptr; |
| 616 | unsigned size; |
618 | unsigned size; |
| 617 | void *buffer; |
619 | void *buffer; |
| 618 | int rc; |
620 | int rc; |
| 619 | 621 | ||
| 620 | klog_printf("debug_mem_read()"); |
622 | klog_printf("debug_mem_read()"); |
| - | 623 | uspace_dst = IPC_GET_ARG2(call->data); |
|
| 621 | uspace_ptr = (void *)IPC_GET_ARG2(call->data); |
624 | uspace_ptr = (void *)IPC_GET_ARG3(call->data); |
| 622 | size = IPC_GET_ARG3(call->data); |
625 | size = IPC_GET_ARG4(call->data); |
| 623 | 626 | ||
| 624 | buffer = malloc(size, 0); // ??? |
627 | buffer = malloc(size, 0); // ??? |
| 625 | klog_printf("debug_mem_read: src=%u, size=%u", uspace_ptr, size); |
628 | klog_printf("debug_mem_read: src=%u, size=%u", uspace_ptr, size); |
| 626 | 629 | ||
| 627 | /* NOTE: this is not strictly from a syscall... but that shouldn't |
630 | /* NOTE: this is not strictly from a syscall... but that shouldn't |
| Line 636... | Line 639... | ||
| 636 | 639 | ||
| 637 | IPC_SET_RETVAL(call->data, 0); |
640 | IPC_SET_RETVAL(call->data, 0); |
| 638 | /* Hack: ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that |
641 | /* Hack: ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that |
| 639 | same code in process_answer() can be used |
642 | same code in process_answer() can be used |
| 640 | (no way to distinguish method in answer) */ |
643 | (no way to distinguish method in answer) */ |
| - | 644 | IPC_SET_ARG1(call->data, uspace_dst); |
|
| 641 | IPC_SET_ARG2(call->data, size); |
645 | IPC_SET_ARG2(call->data, size); |
| 642 | call->buffer = buffer; |
646 | call->buffer = buffer; |
| 643 | 647 | ||
| 644 | ipc_answer(&TASK->kernel_box, call); |
648 | ipc_answer(&TASK->kernel_box, call); |
| 645 | } |
649 | } |
| 646 | 650 | ||
| 647 | static void kbox_thread_proc(void *arg) |
651 | static void kbox_thread_proc(void *arg) |
| 648 | { |
652 | { |
| 649 | call_t *call; |
653 | call_t *call; |
| 650 | int method; |
654 | int method; |
| - | 655 | int dm; |
|
| 651 | 656 | ||
| 652 | (void)arg; |
657 | (void)arg; |
| 653 | klog_printf("kbox_thread_proc()"); |
658 | klog_printf("kbox_thread_proc()"); |
| 654 | while (1) { |
659 | while (1) { |
| 655 | klog_printf("kbox: wait for call"); |
660 | klog_printf("kbox: wait for call"); |
| 656 | call = ipc_wait_for_call(&TASK->kernel_box, SYNCH_NO_TIMEOUT, |
661 | call = ipc_wait_for_call(&TASK->kernel_box, SYNCH_NO_TIMEOUT, |
| 657 | SYNCH_FLAGS_NONE); |
662 | SYNCH_FLAGS_NONE); |
| 658 | if (call != NULL) { |
663 | if (call != NULL) { |
| 659 | method = IPC_GET_METHOD(call->data); |
664 | method = IPC_GET_METHOD(call->data); |
| - | 665 | dm = IPC_GET_ARG1(call->data); |
|
| - | 666 | ||
| 660 | if (method == IPC_M_DEBUG_MEM_READ) { |
667 | if (method == IPC_M_DEBUG_ALL && |
| - | 668 | dm == UDEBUG_M_MEM_READ) { |
|
| 661 | debug_mem_read(call); |
669 | debug_mem_read(call); |
| 662 | } |
670 | } |
| 663 | } |
671 | } |
| 664 | } |
672 | } |
| 665 | } |
673 | } |