Changeset 3b3fcf36 in mainline for uspace/srv/test/ipc-test/main.c
- Timestamp:
- 2018-11-20T10:53:13Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a615be0
- Parents:
- 8be3230
- git-author:
- Jiri Svoboda <jiri@…> (2018-11-19 18:49:18)
- git-committer:
- Jiri Svoboda <jiri@…> (2018-11-20 10:53:13)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/test/ipc-test/main.c
r8be3230 r3b3fcf36 27 27 */ 28 28 29 /** @addtogroup ipc-test 30 * @{ 31 */ 32 /** 33 * @file 34 * @brief IPC test service 35 * 36 * If run as an initial task, this can be used to test sharing areas 37 * backed by the ELF backend. 38 */ 39 40 #include <as.h> 29 41 #include <async.h> 30 42 #include <errno.h> 31 43 #include <str_error.h> 44 #include <io/log.h> 32 45 #include <ipc/ipc_test.h> 33 46 #include <ipc/services.h> … … 41 54 static service_id_t svc_id; 42 55 56 /** Object in read-only memory area that will be shared. 57 * 58 * If the server is run as an initial task, the area should be backed 59 * by ELF backend. 60 */ 61 static const char *ro_data = "Hello, world!"; 62 63 /** Object in read-write memory area that will be shared. 64 * 65 * If the server is run as an initial task, the area should be backed 66 * by ELF backend. 67 */ 68 static char rw_data[] = "Hello, world!"; 69 70 static void ipc_test_get_ro_area_size_srv(ipc_call_t *icall) 71 { 72 errno_t rc; 73 as_area_info_t info; 74 75 log_msg(LOG_DEFAULT, LVL_DEBUG, "ipc_test_get_ro_area_size_srv"); 76 77 rc = as_area_get_info((void *)ro_data, &info); 78 if (rc != EOK) { 79 async_answer_0(icall, EIO); 80 log_msg(LOG_DEFAULT, LVL_ERROR, "as_area_get_info failed"); 81 return; 82 } 83 84 async_answer_1(icall, EOK, info.size); 85 } 86 87 static void ipc_test_get_rw_area_size_srv(ipc_call_t *icall) 88 { 89 errno_t rc; 90 as_area_info_t info; 91 92 log_msg(LOG_DEFAULT, LVL_DEBUG, "ipc_test_get_rw_area_size_srv"); 93 94 rc = as_area_get_info(rw_data, &info); 95 if (rc != EOK) { 96 async_answer_0(icall, EIO); 97 log_msg(LOG_DEFAULT, LVL_ERROR, "as_area_get_info failed"); 98 return; 99 } 100 101 async_answer_1(icall, EOK, info.size); 102 } 103 104 static void ipc_test_share_in_ro_srv(ipc_call_t *icall) 105 { 106 ipc_call_t call; 107 errno_t rc; 108 size_t size; 109 as_area_info_t info; 110 111 log_msg(LOG_DEFAULT, LVL_DEBUG, "ipc_test_share_in_ro_srv"); 112 if (!async_share_in_receive(&call, &size)) { 113 async_answer_0(icall, EINVAL); 114 log_msg(LOG_DEFAULT, LVL_ERROR, "share_in_receive failed"); 115 return; 116 } 117 118 rc = as_area_get_info((void *)ro_data, &info); 119 if (rc != EOK) { 120 async_answer_0(icall, EINVAL); 121 log_msg(LOG_DEFAULT, LVL_ERROR, "as_area_get_info failed"); 122 return; 123 } 124 125 if (size != info.size) { 126 log_msg(LOG_DEFAULT, LVL_ERROR, "size(%zu) != %zu", 127 size, info.size); 128 async_answer_0(icall, EINVAL); 129 return; 130 } 131 132 rc = async_share_in_finalize(&call, (void *) info.start_addr, 133 AS_AREA_READ); 134 if (rc != EOK) { 135 log_msg(LOG_DEFAULT, LVL_ERROR, 136 " - async_share_in_finalize failed"); 137 async_answer_0(icall, EINVAL); 138 return; 139 } 140 141 async_answer_0(icall, EOK); 142 } 143 144 static void ipc_test_share_in_rw_srv(ipc_call_t *icall) 145 { 146 ipc_call_t call; 147 errno_t rc; 148 size_t size; 149 as_area_info_t info; 150 151 log_msg(LOG_DEFAULT, LVL_DEBUG, "ipc_test_share_in_ro_srv"); 152 if (!async_share_in_receive(&call, &size)) { 153 async_answer_0(icall, EINVAL); 154 log_msg(LOG_DEFAULT, LVL_ERROR, "share_in_receive failed"); 155 return; 156 } 157 158 rc = as_area_get_info(rw_data, &info); 159 if (rc != EOK) { 160 async_answer_0(icall, EINVAL); 161 log_msg(LOG_DEFAULT, LVL_ERROR, "as_area_get_info failed"); 162 return; 163 } 164 165 if (size != info.size) { 166 log_msg(LOG_DEFAULT, LVL_ERROR, " size(%zu) != %zu", 167 size, info.size); 168 async_answer_0(icall, EINVAL); 169 return; 170 } 171 172 rc = async_share_in_finalize(&call, (void *) info.start_addr, 173 AS_AREA_READ | AS_AREA_WRITE); 174 if (rc != EOK) { 175 log_msg(LOG_DEFAULT, LVL_ERROR, 176 "async_share_in_finalize failed"); 177 async_answer_0(icall, EINVAL); 178 return; 179 } 180 181 async_answer_0(icall, EOK); 182 } 183 43 184 static void ipc_test_connection(ipc_call_t *icall, void *arg) 44 185 { … … 59 200 async_answer_0(&call, EOK); 60 201 break; 202 case IPC_TEST_GET_RO_AREA_SIZE: 203 ipc_test_get_ro_area_size_srv(&call); 204 break; 205 case IPC_TEST_GET_RW_AREA_SIZE: 206 ipc_test_get_rw_area_size_srv(&call); 207 break; 208 case IPC_TEST_SHARE_IN_RO: 209 ipc_test_share_in_ro_srv(&call); 210 break; 211 case IPC_TEST_SHARE_IN_RW: 212 ipc_test_share_in_rw_srv(&call); 213 break; 61 214 default: 62 215 async_answer_0(&call, ENOTSUP); … … 73 226 async_set_fallback_port_handler(ipc_test_connection, NULL); 74 227 228 rc = log_init(NAME); 229 if (rc != EOK) { 230 printf(NAME ": Failed to initialize log.\n"); 231 return rc; 232 } 233 75 234 rc = loc_server_register(NAME); 76 235 if (rc != EOK) { 77 printf("%s: Failed registering server. (%s)\n", NAME,236 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering server. (%s)\n", 78 237 str_error(rc)); 79 238 return rc; … … 82 241 rc = loc_service_register(SERVICE_NAME_IPC_TEST, &svc_id); 83 242 if (rc != EOK) { 84 printf("%s: Failed registering service. (%s)\n", NAME,243 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service. (%s)\n", 85 244 str_error(rc)); 86 245 return rc; … … 94 253 return 0; 95 254 } 255 256 /** 257 * @} 258 */
Note:
See TracChangeset
for help on using the changeset viewer.