Changes in / [ae0300b5:2b96463] in mainline
- Files:
-
- 113 added
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
HelenOS.config
rae0300b5 r2b96463 547 547 548 548 % Launch (devman) test drivers 549 ! [CONFIG_DEBUG=y] CONFIG_TEST_DRIVERS ( y/n)550 549 ! [CONFIG_DEBUG=y] CONFIG_TEST_DRIVERS (n/y) 550 -
Makefile
rae0300b5 r2b96463 92 92 $(MAKE) -C uspace clean 93 93 $(MAKE) -C boot clean 94 95 -include Makefile.local -
boot/Makefile.common
rae0300b5 r2b96463 139 139 $(USPACE_PATH)/app/ping/ping \ 140 140 $(USPACE_PATH)/app/stats/stats \ 141 $(USPACE_PATH)/app/sysinfo/sysinfo \ 142 $(USPACE_PATH)/app/tasks/tasks \ 141 143 $(USPACE_PATH)/app/top/top \ 142 $(USPACE_PATH)/app/sysinfo/sysinfo \ 144 $(USPACE_PATH)/app/usbinfo/usbinfo \ 145 $(USPACE_PATH)/app/virtusbkbd/vuk \ 146 $(USPACE_PATH)/app/virtusbhub/vuh \ 143 147 $(USPACE_PATH)/app/websrv/websrv 144 148 -
boot/arch/amd64/Makefile.inc
rae0300b5 r2b96463 42 42 pciintel \ 43 43 isa \ 44 ns8250 44 ns8250 \ 45 uhci \ 46 usbhub \ 47 usbkbd \ 48 vhc 45 49 46 50 RD_DRV_CFG += \ -
kernel/generic/include/mm/page.h
rae0300b5 r2b96463 37 37 38 38 #include <typedefs.h> 39 #include <proc/task.h> 39 40 #include <mm/as.h> 40 41 #include <memstr.h> … … 62 63 extern uintptr_t hw_map(uintptr_t, size_t); 63 64 65 extern sysarg_t sys_page_find_mapping(uintptr_t, uintptr_t *); 66 64 67 #endif 65 68 -
kernel/generic/include/syscall/syscall.h
rae0300b5 r2b96463 59 59 SYS_AS_AREA_DESTROY, 60 60 61 SYS_PAGE_FIND_MAPPING, 62 61 63 SYS_IPC_CALL_SYNC_FAST, 62 64 SYS_IPC_CALL_SYNC_SLOW, -
kernel/generic/src/mm/page.c
rae0300b5 r2b96463 60 60 61 61 #include <mm/page.h> 62 #include <genarch/mm/page_ht.h> 63 #include <genarch/mm/page_pt.h> 62 64 #include <arch/mm/page.h> 63 65 #include <arch/mm/asid.h> … … 70 72 #include <debug.h> 71 73 #include <arch.h> 74 #include <syscall/copy.h> 75 #include <errno.h> 72 76 73 77 /** Virtual operations for page subsystem. */ … … 173 177 } 174 178 179 /** Syscall wrapper for getting mapping of a virtual page. 180 * 181 * @retval EOK Everything went find, @p uspace_frame and @p uspace_node 182 * contains correct values. 183 * @retval ENOENT Virtual address has no mapping. 184 */ 185 sysarg_t sys_page_find_mapping(uintptr_t virt_address, 186 uintptr_t *uspace_frame) 187 { 188 mutex_lock(&AS->lock); 189 190 pte_t *pte = page_mapping_find(AS, virt_address); 191 if (!PTE_VALID(pte) || !PTE_PRESENT(pte)) { 192 mutex_unlock(&AS->lock); 193 194 return (sysarg_t) ENOENT; 195 } 196 197 uintptr_t phys_address = PTE_GET_FRAME(pte); 198 199 mutex_unlock(&AS->lock); 200 201 int rc = copy_to_uspace(uspace_frame, 202 &phys_address, sizeof(phys_address)); 203 if (rc != EOK) { 204 return (sysarg_t) rc; 205 } 206 207 return EOK; 208 } 209 175 210 /** @} 176 211 */ -
kernel/generic/src/syscall/syscall.c
rae0300b5 r2b96463 41 41 #include <proc/program.h> 42 42 #include <mm/as.h> 43 #include <mm/page.h> 43 44 #include <print.h> 44 45 #include <arch.h> … … 144 145 (syshandler_t) sys_as_area_destroy, 145 146 147 /* Page mapping related syscalls. */ 148 (syshandler_t) sys_page_find_mapping, 149 146 150 /* IPC related syscalls. */ 147 151 (syshandler_t) sys_ipc_call_sync_fast, -
uspace/Makefile
rae0300b5 r2b96463 50 50 app/trace \ 51 51 app/top \ 52 app/usbinfo \ 53 app/virtusbkbd \ 54 app/virtusbhub \ 52 55 app/netecho \ 53 56 app/nettest1 \ … … 113 116 drv/ns8250 \ 114 117 srv/hw/irc/apic \ 115 srv/hw/irc/i8259 118 srv/hw/irc/i8259 \ 119 drv/uhci \ 120 drv/usbhub \ 121 drv/usbkbd \ 122 drv/vhc 116 123 endif 117 124 … … 123 130 drv/ns8250 \ 124 131 srv/hw/irc/apic \ 125 srv/hw/irc/i8259 132 srv/hw/irc/i8259 \ 133 drv/uhci \ 134 drv/usbhub \ 135 drv/usbkbd \ 136 drv/vhc 126 137 endif 127 138 … … 149 160 lib/packet \ 150 161 lib/net 162 163 ifeq ($(UARCH),amd64) 164 LIBS += lib/usb 165 LIBS += lib/usbvirt 166 endif 167 168 ifeq ($(UARCH),ia32) 169 LIBS += lib/usb 170 LIBS += lib/usbvirt 171 endif 151 172 152 173 LIBC_BUILD = $(addsuffix .build,$(LIBC)) -
uspace/Makefile.common
rae0300b5 r2b96463 86 86 LIBCLUI_PREFIX = $(LIB_PREFIX)/clui 87 87 88 89 LIBUSB_PREFIX = $(LIB_PREFIX)/usb 90 LIBUSBVIRT_PREFIX = $(LIB_PREFIX)/usbvirt 88 91 LIBDRV_PREFIX = $(LIB_PREFIX)/drv 89 92 LIBPACKET_PREFIX = $(LIB_PREFIX)/packet -
uspace/app/init/init.c
rae0300b5 r2b96463 314 314 getterm("term/vc5", "/app/bdsh", false); 315 315 getterm("term/vc6", "/app/klog", false); 316 getterm("term/vc7", "/srv/devman", false); 316 317 317 318 return 0; -
uspace/app/tester/Makefile
rae0300b5 r2b96463 31 31 BINARY = tester 32 32 33 LIBS += $(LIBUSB_PREFIX)/libusb.a 34 EXTRA_CFLAGS += -I$(LIBUSB_PREFIX)/include 35 33 36 SOURCES = \ 34 37 tester.c \ 38 adt/usbaddrkeep.c \ 35 39 thread/thread1.c \ 36 40 print/print1.c \ … … 49 53 loop/loop1.c \ 50 54 mm/malloc1.c \ 55 mm/mapping1.c \ 51 56 hw/misc/virtchar1.c \ 52 57 hw/serial/serial1.c -
uspace/app/tester/tester.c
rae0300b5 r2b96463 62 62 #include "loop/loop1.def" 63 63 #include "mm/malloc1.def" 64 #include "mm/mapping1.def" 64 65 #include "hw/serial/serial1.def" 66 #include "adt/usbaddrkeep.def" 65 67 #include "hw/misc/virtchar1.def" 66 68 {NULL, NULL, NULL, false} -
uspace/app/tester/tester.h
rae0300b5 r2b96463 79 79 extern const char *test_loop1(void); 80 80 extern const char *test_malloc1(void); 81 extern const char *test_mapping1(void); 81 82 extern const char *test_serial1(void); 83 extern const char *test_usbaddrkeep(void); 82 84 extern const char *test_virtchar1(void); 83 85 -
uspace/doc/doxygroups.h
rae0300b5 r2b96463 150 150 * @endcond 151 151 */ 152 152 153 153 /** 154 154 * @defgroup emul Emulation Libraries … … 165 165 * @ingroup emul 166 166 */ 167 168 /** 169 * @defgroup usb USB 170 * @ingroup uspace 171 * @brief USB support for HelenOS. 172 */ 173 /** 174 * @defgroup libusb USB library 175 * @ingroup usb 176 * @brief Library for creating USB devices drivers. 177 */ 178 179 /** 180 * @defgroup usbvirt USB virtualization 181 * @ingroup usb 182 * @brief Support for virtual USB devices. 183 */ 184 185 /** 186 * @defgroup libusbvirt USB virtualization library 187 * @ingroup usbvirt 188 * @brief Library for creating virtual USB devices. 189 */ 190 191 /** 192 * @defgroup drvusbvhc Virtual USB host controller 193 * @ingroup usbvirt 194 * @brief Driver simulating work of USB host controller. 195 */ 196 197 /** 198 * @defgroup usbvirthub Virtual USB hub 199 * @ingroup usbvirt 200 * @brief Extra virtual USB hub for virtual host controller. 201 * @details 202 * Some of the sources are shared with virtual host controller, 203 * see @ref drvusbvhc for the rest of the files. 204 */ 205 206 /** 207 * @defgroup usbvirtkbd Virtual USB keybaord 208 * @ingroup usbvirt 209 * @brief Virtual USB keyboard for virtual host controller. 210 */ 211 212 /** 213 * @defgroup drvusbhub USB hub driver 214 * @ingroup usb 215 * @brief USB hub driver. 216 */ 217 218 /** 219 * @defgroup drvusbhid USB HID driver 220 * @ingroup usb 221 * @brief USB driver for HID devices. 222 */ 223 224 /** 225 * @defgroup drvusbuhci UHCI driver 226 * @ingroup usb 227 * @brief Driver for USB host controller UHCI. 228 */ 229 -
uspace/drv/root/root.c
rae0300b5 r2b96463 88 88 89 89 int res = child_device_register_wrapper(parent, VIRTUAL_DEVICE_NAME, 90 VIRTUAL_DEVICE_MATCH_ID, VIRTUAL_DEVICE_MATCH_SCORE); 90 VIRTUAL_DEVICE_MATCH_ID, VIRTUAL_DEVICE_MATCH_SCORE, 91 NULL); 91 92 92 93 return res; … … 136 137 137 138 res = child_device_register_wrapper(parent, PLATFORM_DEVICE_NAME, 138 match_id, PLATFORM_DEVICE_MATCH_SCORE );139 match_id, PLATFORM_DEVICE_MATCH_SCORE, NULL); 139 140 140 141 return res; -
uspace/drv/rootvirt/devices.def
rae0300b5 r2b96463 22 22 }, 23 23 #endif 24 /* Virtual USB host controller. */ 25 { 26 .name = "usbhc", 27 .match_id = "usb&hc=vhc" 28 }, -
uspace/drv/rootvirt/rootvirt.c
rae0300b5 r2b96463 84 84 85 85 int rc = child_device_register_wrapper(parent, virt_dev->name, 86 virt_dev->match_id, 10 );86 virt_dev->match_id, 10, NULL); 87 87 88 88 if (rc == EOK) { -
uspace/drv/test1/test1.c
rae0300b5 r2b96463 62 62 63 63 int rc = child_device_register_wrapper(parent, name, 64 match_id, match_score );64 match_id, match_score, NULL); 65 65 66 66 if (rc == EOK) { -
uspace/drv/test2/test2.c
rae0300b5 r2b96463 64 64 65 65 int rc = child_device_register_wrapper(parent, name, 66 match_id, match_score );66 match_id, match_score, NULL); 67 67 68 68 if (rc == EOK) { -
uspace/lib/c/generic/as.c
rae0300b5 r2b96463 35 35 #include <as.h> 36 36 #include <libc.h> 37 #include <errno.h> 37 38 #include <unistd.h> 38 39 #include <align.h> … … 128 129 } 129 130 131 /** Find mapping to physical address. 132 * 133 * @param address Virtual address in question (virtual). 134 * @param[out] frame Frame address (physical). 135 * @return Error code. 136 * @retval EOK No error, @p frame holds the translation. 137 * @retval ENOENT Mapping not found. 138 */ 139 int as_get_physical_mapping(void *address, uintptr_t *frame) 140 { 141 uintptr_t tmp_frame; 142 uintptr_t virt = (uintptr_t) address; 143 144 int rc = (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING, 145 (sysarg_t) virt, (sysarg_t) &tmp_frame); 146 if (rc != EOK) { 147 return rc; 148 } 149 150 if (frame != NULL) { 151 *frame = tmp_frame; 152 } 153 154 return EOK; 155 } 156 130 157 /** @} 131 158 */ -
uspace/lib/c/include/as.h
rae0300b5 r2b96463 47 47 extern void *set_maxheapsize(size_t mhs); 48 48 extern void * as_get_mappable_page(size_t sz); 49 extern int as_get_physical_mapping(void *address, uintptr_t *frame); 49 50 50 51 #endif -
uspace/lib/c/include/assert.h
rae0300b5 r2b96463 57 57 printf("Assertion failed (%s) at file '%s', " \ 58 58 "line %d.\n", #expr, __FILE__, __LINE__); \ 59 stacktrace_print(); \ 60 core(); \ 59 61 abort(); \ 60 62 } \ -
uspace/lib/c/include/ipc/dev_iface.h
rae0300b5 r2b96463 38 38 HW_RES_DEV_IFACE = 0, 39 39 CHAR_DEV_IFACE, 40 41 /** Interface provided by any USB device. */ 42 USB_DEV_IFACE, 43 /** Interface provided by USB host controller. */ 44 USBHC_DEV_IFACE, 45 40 46 DEV_IFACE_MAX 41 47 } dev_inferface_idx_t; … … 49 55 DEV_IFACE_ID(DEV_FIRST_CUSTOM_METHOD_IDX) 50 56 57 /* 58 * The first argument is actually method (as the "real" method is used 59 * for indexing into interfaces. 60 */ 61 62 #define DEV_IPC_GET_ARG1(call) IPC_GET_ARG2((call)) 63 #define DEV_IPC_GET_ARG2(call) IPC_GET_ARG3((call)) 64 #define DEV_IPC_GET_ARG3(call) IPC_GET_ARG4((call)) 65 #define DEV_IPC_GET_ARG4(call) IPC_GET_ARG5((call)) 66 51 67 52 68 #endif -
uspace/lib/c/include/ipc/kbd.h
rae0300b5 r2b96463 39 39 40 40 #include <ipc/ipc.h> 41 #include <ipc/dev_iface.h> 41 42 42 43 typedef enum { 43 KBD_YIELD = IPC_FIRST_USER_METHOD,44 KBD_YIELD = DEV_FIRST_CUSTOM_METHOD, 44 45 KBD_RECLAIM 45 46 } kbd_request_t; -
uspace/lib/drv/Makefile
rae0300b5 r2b96463 29 29 30 30 USPACE_PREFIX = ../.. 31 EXTRA_CFLAGS = -Iinclude 31 EXTRA_CFLAGS = -Iinclude -I$(LIBUSB_PREFIX)/include 32 32 LIBRARY = libdrv 33 33 … … 35 35 generic/driver.c \ 36 36 generic/dev_iface.c \ 37 generic/remote_char_dev.c \ 37 38 generic/remote_hw_res.c \ 38 generic/remote_char_dev.c 39 generic/remote_usb.c \ 40 generic/remote_usbhc.c 39 41 40 42 include $(USPACE_PREFIX)/Makefile.common -
uspace/lib/drv/generic/dev_iface.c
rae0300b5 r2b96463 41 41 #include "remote_hw_res.h" 42 42 #include "remote_char_dev.h" 43 #include "remote_usb.h" 44 #include "remote_usbhc.h" 43 45 44 46 static iface_dipatch_table_t remote_ifaces = { 45 47 .ifaces = { 46 48 &remote_hw_res_iface, 47 &remote_char_dev_iface 49 &remote_char_dev_iface, 50 &remote_usb_iface, 51 &remote_usbhc_iface 48 52 } 49 53 }; -
uspace/lib/drv/generic/driver.c
rae0300b5 r2b96463 512 512 */ 513 513 int child_device_register_wrapper(device_t *parent, const char *child_name, 514 const char *child_match_id, int child_match_score) 514 const char *child_match_id, int child_match_score, 515 devman_handle_t *child_handle) 515 516 { 516 517 device_t *child = NULL; … … 539 540 if (rc != EOK) 540 541 goto failure; 541 542 543 if (child_handle != NULL) { 544 *child_handle = child->handle; 545 } 546 542 547 return EOK; 543 548 -
uspace/lib/drv/include/driver.h
rae0300b5 r2b96463 146 146 extern int child_device_register(device_t *, device_t *); 147 147 extern int child_device_register_wrapper(device_t *, const char *, const char *, 148 int );148 int, devman_handle_t *); 149 149 150 150 /* -
uspace/srv/devman/devman.c
rae0300b5 r2b96463 133 133 printf(NAME": the '%s' driver was added to the list of available " 134 134 "drivers.\n", drv->name); 135 136 printf(NAME ": match ids:"); 137 link_t *cur; 138 for (cur = drv->match_ids.ids.next; cur != &drv->match_ids.ids; cur = cur->next) { 139 match_id_t *match_id = list_get_instance(cur, match_id_t, link); 140 printf(" %d:%s", match_id->score, match_id->id); 141 } 142 printf("\n"); 135 143 } 136 144 -
uspace/srv/devman/main.c
rae0300b5 r2b96463 458 458 459 459 if (driver == NULL) { 460 printf(NAME ": devman_forward error - the device is not in %" PRIun 461 " usable state.\n", handle); 460 printf(NAME ": devman_forward error - the device %" PRIun \ 461 " (%s) is not in usable state.\n", 462 handle, dev->pathname); 462 463 ipc_answer_0(iid, ENOENT); 463 464 return; … … 478 479 } 479 480 480 printf(NAME ": devman_forward: forward connection to device %s to "481 "driver %s.\n", dev->pathname, driver->name);481 // printf(NAME ": devman_forward: forward connection to device %s to " 482 // "driver %s.\n", dev->pathname, driver->name); 482 483 ipc_forward_fast(iid, driver->phone, method, dev->handle, 0, IPC_FF_NONE); 483 484 } -
uspace/srv/hid/console/console.c
rae0300b5 r2b96463 317 317 static void change_console(console_t *cons) 318 318 { 319 if (cons == active_console) 319 if (cons == active_console) { 320 320 return; 321 } 321 322 322 323 fb_pending_flush(); … … 458 459 if (IPC_GET_ARG1(call) == 1) { 459 460 int newcon = gcons_mouse_btn((bool) IPC_GET_ARG2(call)); 460 if (newcon != -1) 461 if (newcon != -1) { 461 462 change_console(&consoles[newcon]); 463 } 462 464 } 463 465 retval = 0; … … 710 712 } 711 713 714 static int connect_keyboard(char *path) 715 { 716 int fd = open(path, O_RDONLY); 717 if (fd < 0) { 718 return fd; 719 } 720 721 int phone = fd_phone(fd); 722 if (phone < 0) { 723 printf(NAME ": Failed to connect to input device\n"); 724 return phone; 725 } 726 727 /* NB: The callback connection is slotted for removal */ 728 sysarg_t phonehash; 729 sysarg_t taskhash; 730 int rc = async_req_3_5(phone, IPC_M_CONNECT_TO_ME, SERVICE_CONSOLE, 731 0, 0, NULL, NULL, NULL, &taskhash, &phonehash); 732 if (rc != EOK) { 733 printf(NAME ": Failed to create callback from input device\n"); 734 return rc; 735 } 736 737 async_new_connection(taskhash, phonehash, 0, NULL, keyboard_events); 738 739 printf(NAME ": we got a hit (new keyboard \"%s\").\n", path); 740 741 return phone; 742 } 743 744 /** Try to connect to given keyboard, bypassing provided libc routines. 745 * 746 * @param devmap_path Path to keyboard without /dev prefix. 747 * @return Phone or error code. 748 */ 749 static int connect_keyboard_bypass(char *devmap_path) 750 { 751 int devmap_phone = async_connect_me_to_blocking(PHONE_NS, 752 SERVICE_DEVMAP, DEVMAP_CLIENT, 0); 753 if (devmap_phone < 0) { 754 return devmap_phone; 755 } 756 ipc_call_t answer; 757 aid_t req = async_send_2(devmap_phone, DEVMAP_DEVICE_GET_HANDLE, 758 0, 0, &answer); 759 760 sysarg_t retval = async_data_write_start(devmap_phone, 761 devmap_path, str_size(devmap_path)); 762 if (retval != EOK) { 763 async_wait_for(req, NULL); 764 ipc_hangup(devmap_phone); 765 return retval; 766 } 767 768 async_wait_for(req, &retval); 769 770 if (retval != EOK) { 771 ipc_hangup(devmap_phone); 772 return retval; 773 } 774 775 devmap_handle_t handle = (devmap_handle_t) IPC_GET_ARG1(answer); 776 777 ipc_hangup(devmap_phone); 778 779 int phone = async_connect_me_to(PHONE_NS, 780 SERVICE_DEVMAP, DEVMAP_CONNECT_TO_DEVICE, handle); 781 if (phone < 0) { 782 return phone; 783 } 784 785 /* NB: The callback connection is slotted for removal */ 786 sysarg_t phonehash; 787 sysarg_t taskhash; 788 int rc = async_req_3_5(phone, IPC_M_CONNECT_TO_ME, SERVICE_CONSOLE, 789 0, 0, NULL, NULL, NULL, &taskhash, &phonehash); 790 if (rc != EOK) { 791 printf(NAME ": Failed to create callback from input device\n"); 792 return rc; 793 } 794 795 async_new_connection(taskhash, phonehash, 0, NULL, keyboard_events); 796 797 printf(NAME ": we got a hit (new keyboard \"/dev/%s\").\n", 798 devmap_path); 799 800 return phone; 801 } 802 803 804 static int check_new_keyboards(void *arg) 805 { 806 char *class_name = (char *) arg; 807 808 int index = 1; 809 810 while (true) { 811 async_usleep(1 * 500 * 1000); 812 char *path; 813 int rc = asprintf(&path, "class/%s\\%d", class_name, index); 814 if (rc < 0) { 815 continue; 816 } 817 rc = 0; 818 rc = connect_keyboard_bypass(path); 819 if (rc > 0) { 820 /* We do not allow unplug. */ 821 index++; 822 } 823 824 free(path); 825 } 826 827 return EOK; 828 } 829 830 831 /** Start a fibril monitoring hot-plugged keyboards. 832 */ 833 static void check_new_keyboards_in_background() 834 { 835 fid_t fid = fibril_create(check_new_keyboards, (void *)"keyboard"); 836 if (!fid) { 837 printf(NAME ": failed to create hot-plug-watch fibril.\n"); 838 return; 839 } 840 fibril_add_ready(fid); 841 } 842 712 843 static bool console_init(char *input) 713 844 { 714 845 /* Connect to input device */ 715 int input_fd = open(input, O_RDONLY); 716 if (input_fd < 0) { 717 printf(NAME ": Failed opening %s\n", input); 846 kbd_phone = connect_keyboard(input); 847 if (kbd_phone < 0) { 718 848 return false; 719 849 } 720 721 kbd_phone = fd_phone(input_fd); 722 if (kbd_phone < 0) { 723 printf(NAME ": Failed to connect to input device\n"); 724 return false; 725 } 726 727 /* NB: The callback connection is slotted for removal */ 728 sysarg_t taskhash; 729 sysarg_t phonehash; 730 if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, &taskhash, 731 &phonehash) != 0) { 732 printf(NAME ": Failed to create callback from input device\n"); 733 return false; 734 } 735 736 async_new_connection(taskhash, phonehash, 0, NULL, keyboard_events); 737 850 738 851 /* Connect to mouse device */ 739 852 mouse_phone = -1; … … 751 864 } 752 865 866 sysarg_t taskhash; 867 sysarg_t phonehash; 753 868 if (ipc_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, &taskhash, 754 869 &phonehash) != 0) { … … 843 958 async_set_interrupt_received(interrupt_received); 844 959 960 /* Start fibril for checking on hot-plugged keyboards. */ 961 check_new_keyboards_in_background(); 962 845 963 return true; 846 964 } … … 862 980 if (!console_init(argv[1])) 863 981 return -1; 864 982 865 983 printf(NAME ": Accepting connections\n"); 866 984 async_manager(); -
uspace/srv/net/tl/udp/udp.c
rae0300b5 r2b96463 741 741 int socket_id; 742 742 size_t addrlen; 743 size_t size ;743 size_t size = 0; 744 744 ipc_call_t answer; 745 745 size_t answer_count;
Note:
See TracChangeset
for help on using the changeset viewer.