Changeset a46e56b in mainline for uspace/lib/drv/generic/driver.c
- Timestamp:
- 2018-03-22T06:49:35Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 77f0a1d
- Parents:
- 3e242d2
- git-author:
- Jakub Jermar <jakub@…> (2018-03-21 23:29:06)
- git-committer:
- Jakub Jermar <jakub@…> (2018-03-22 06:49:35)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/generic/driver.c
r3e242d2 ra46e56b 118 118 } 119 119 120 static void driver_dev_add(cap_call_handle_t i id, ipc_call_t *icall)120 static void driver_dev_add(cap_call_handle_t icall_handle, ipc_call_t *icall) 121 121 { 122 122 devman_handle_t dev_handle = IPC_GET_ARG1(*icall); … … 126 126 errno_t rc = async_data_write_accept((void **) &dev_name, true, 0, 0, 0, 0); 127 127 if (rc != EOK) { 128 async_answer_0(i id, rc);128 async_answer_0(icall_handle, rc); 129 129 return; 130 130 } … … 134 134 if (stopping) { 135 135 fibril_rwlock_read_unlock(&stopping_lock); 136 async_answer_0(i id, EIO);136 async_answer_0(icall_handle, EIO); 137 137 return; 138 138 } … … 142 142 fibril_rwlock_read_unlock(&stopping_lock); 143 143 free(dev_name); 144 async_answer_0(i id, ENOMEM);144 async_answer_0(icall_handle, ENOMEM); 145 145 return; 146 146 } … … 162 162 fibril_rwlock_read_unlock(&stopping_lock); 163 163 dev_del_ref(dev); 164 async_answer_0(i id, res);164 async_answer_0(icall_handle, res); 165 165 return; 166 166 } … … 171 171 fibril_rwlock_read_unlock(&stopping_lock); 172 172 173 async_answer_0(i id, res);174 } 175 176 static void driver_dev_remove(cap_call_handle_t i id, ipc_call_t *icall)173 async_answer_0(icall_handle, res); 174 } 175 176 static void driver_dev_remove(cap_call_handle_t icall_handle, ipc_call_t *icall) 177 177 { 178 178 devman_handle_t devh = IPC_GET_ARG1(*icall); … … 185 185 186 186 if (dev == NULL) { 187 async_answer_0(i id, ENOENT);187 async_answer_0(icall_handle, ENOENT); 188 188 return; 189 189 } … … 204 204 205 205 dev_del_ref(dev); 206 async_answer_0(i id, rc);207 } 208 209 static void driver_dev_gone(cap_call_handle_t i id, ipc_call_t *icall)206 async_answer_0(icall_handle, rc); 207 } 208 209 static void driver_dev_gone(cap_call_handle_t icall_handle, ipc_call_t *icall) 210 210 { 211 211 devman_handle_t devh = IPC_GET_ARG1(*icall); … … 218 218 219 219 if (dev == NULL) { 220 async_answer_0(i id, ENOENT);220 async_answer_0(icall_handle, ENOENT); 221 221 return; 222 222 } … … 237 237 238 238 dev_del_ref(dev); 239 async_answer_0(i id, rc);240 } 241 242 static void driver_fun_online(cap_call_handle_t i id, ipc_call_t *icall)239 async_answer_0(icall_handle, rc); 240 } 241 242 static void driver_fun_online(cap_call_handle_t icall_handle, ipc_call_t *icall) 243 243 { 244 244 devman_handle_t funh = IPC_GET_ARG1(*icall); … … 258 258 259 259 if (fun == NULL) { 260 async_answer_0(i id, ENOENT);260 async_answer_0(icall_handle, ENOENT); 261 261 return; 262 262 } … … 272 272 fun_del_ref(fun); 273 273 274 async_answer_0(i id, rc);275 } 276 277 static void driver_fun_offline(cap_call_handle_t i id, ipc_call_t *icall)274 async_answer_0(icall_handle, rc); 275 } 276 277 static void driver_fun_offline(cap_call_handle_t icall_handle, ipc_call_t *icall) 278 278 { 279 279 devman_handle_t funh = IPC_GET_ARG1(*icall); … … 293 293 294 294 if (fun == NULL) { 295 async_answer_0(i id, ENOENT);295 async_answer_0(icall_handle, ENOENT); 296 296 return; 297 297 } … … 305 305 rc = ENOTSUP; 306 306 307 async_answer_0(i id, rc);308 } 309 310 static void driver_stop(cap_call_handle_t i id, ipc_call_t *icall)307 async_answer_0(icall_handle, rc); 308 } 309 310 static void driver_stop(cap_call_handle_t icall_handle, ipc_call_t *icall) 311 311 { 312 312 /* Prevent new devices from being added */ … … 321 321 stopping = false; 322 322 fibril_rwlock_write_unlock(&stopping_lock); 323 async_answer_0(i id, EBUSY);323 async_answer_0(icall_handle, EBUSY); 324 324 return; 325 325 } … … 333 333 334 334 /* Reply with success and terminate */ 335 async_answer_0(i id, EOK);335 async_answer_0(icall_handle, EOK); 336 336 exit(0); 337 337 } 338 338 339 static void driver_connection_devman(cap_call_handle_t i id, ipc_call_t *icall,339 static void driver_connection_devman(cap_call_handle_t icall_handle, ipc_call_t *icall, 340 340 void *arg) 341 341 { 342 342 /* Accept connection */ 343 async_answer_0(i id, EOK);343 async_answer_0(icall_handle, EOK); 344 344 345 345 while (true) { 346 346 ipc_call_t call; 347 cap_call_handle_t c allid= async_get_call(&call);347 cap_call_handle_t chandle = async_get_call(&call); 348 348 349 349 if (!IPC_GET_IMETHOD(call)) … … 352 352 switch (IPC_GET_IMETHOD(call)) { 353 353 case DRIVER_DEV_ADD: 354 driver_dev_add(c allid, &call);354 driver_dev_add(chandle, &call); 355 355 break; 356 356 case DRIVER_DEV_REMOVE: 357 driver_dev_remove(c allid, &call);357 driver_dev_remove(chandle, &call); 358 358 break; 359 359 case DRIVER_DEV_GONE: 360 driver_dev_gone(c allid, &call);360 driver_dev_gone(chandle, &call); 361 361 break; 362 362 case DRIVER_FUN_ONLINE: 363 driver_fun_online(c allid, &call);363 driver_fun_online(chandle, &call); 364 364 break; 365 365 case DRIVER_FUN_OFFLINE: 366 driver_fun_offline(c allid, &call);366 driver_fun_offline(chandle, &call); 367 367 break; 368 368 case DRIVER_STOP: 369 driver_stop(c allid, &call);369 driver_stop(chandle, &call); 370 370 break; 371 371 default: 372 async_answer_0(c allid, ENOTSUP);372 async_answer_0(chandle, ENOTSUP); 373 373 } 374 374 } … … 381 381 * 382 382 */ 383 static void driver_connection_gen(cap_call_handle_t i id, ipc_call_t *icall, bool drv)383 static void driver_connection_gen(cap_call_handle_t icall_handle, ipc_call_t *icall, bool drv) 384 384 { 385 385 /* … … 398 398 printf("%s: driver_connection_gen error - no function with handle" 399 399 " %" PRIun " was found.\n", driver->name, handle); 400 async_answer_0(i id, ENOENT);400 async_answer_0(icall_handle, ENOENT); 401 401 return; 402 402 } … … 404 404 if (fun->conn_handler != NULL) { 405 405 /* Driver has a custom connection handler. */ 406 (*fun->conn_handler)(i id, icall, (void *)fun);406 (*fun->conn_handler)(icall_handle, icall, (void *)fun); 407 407 fun_del_ref(fun); 408 408 return; … … 419 419 ret = (*fun->ops->open)(fun); 420 420 421 async_answer_0(i id, ret);421 async_answer_0(icall_handle, ret); 422 422 if (ret != EOK) { 423 423 fun_del_ref(fun); … … 426 426 427 427 while (true) { 428 cap_call_handle_t c allid;428 cap_call_handle_t chandle; 429 429 ipc_call_t call; 430 c allid= async_get_call(&call);430 chandle = async_get_call(&call); 431 431 sysarg_t method = IPC_GET_IMETHOD(call); 432 432 … … 435 435 if (fun->ops != NULL && fun->ops->close != NULL) 436 436 (*fun->ops->close)(fun); 437 async_answer_0(c allid, EOK);437 async_answer_0(chandle, EOK); 438 438 fun_del_ref(fun); 439 439 return; … … 448 448 function_get_default_handler(fun); 449 449 if (default_handler != NULL) { 450 (*default_handler)(fun, c allid, &call);450 (*default_handler)(fun, chandle, &call); 451 451 continue; 452 452 } … … 459 459 "invalid interface id %d.", 460 460 driver->name, iface_idx); 461 async_answer_0(c allid, ENOTSUP);461 async_answer_0(chandle, ENOTSUP); 462 462 continue; 463 463 } … … 471 471 printf("Function with handle %" PRIun " has no interface " 472 472 "with id %d.\n", handle, iface_idx); 473 async_answer_0(c allid, ENOTSUP);473 async_answer_0(chandle, ENOTSUP); 474 474 continue; 475 475 } … … 490 490 printf("%s: driver_connection_gen error - " 491 491 "invalid interface method.", driver->name); 492 async_answer_0(c allid, ENOTSUP);492 async_answer_0(chandle, ENOTSUP); 493 493 continue; 494 494 } … … 500 500 * associated with the function by its driver. 501 501 */ 502 (*iface_method_ptr)(fun, ops, c allid, &call);503 } 504 } 505 506 static void driver_connection_driver(cap_call_handle_t i id, ipc_call_t *icall,502 (*iface_method_ptr)(fun, ops, chandle, &call); 503 } 504 } 505 506 static void driver_connection_driver(cap_call_handle_t icall_handle, ipc_call_t *icall, 507 507 void *arg) 508 508 { 509 driver_connection_gen(i id, icall, true);510 } 511 512 static void driver_connection_client(cap_call_handle_t i id, ipc_call_t *icall,509 driver_connection_gen(icall_handle, icall, true); 510 } 511 512 static void driver_connection_client(cap_call_handle_t icall_handle, ipc_call_t *icall, 513 513 void *arg) 514 514 { 515 driver_connection_gen(i id, icall, false);515 driver_connection_gen(icall_handle, icall, false); 516 516 } 517 517
Note:
See TracChangeset
for help on using the changeset viewer.