Changeset 984a9ba in mainline for uspace/srv/devman
- Timestamp:
- 2018-07-05T09:34:09Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 63d46341
- Parents:
- 76f566d
- Location:
- uspace/srv/devman
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/devman/client_conn.c
r76f566d r984a9ba 62 62 * device tree. 63 63 */ 64 static void devman_function_get_handle( cap_call_handle_t icall_handle,ipc_call_t *icall)64 static void devman_function_get_handle(ipc_call_t *icall) 65 65 { 66 66 char *pathname; … … 69 69 errno_t rc = async_data_write_accept((void **) &pathname, true, 0, 0, 0, 0); 70 70 if (rc != EOK) { 71 async_answer_0(icall _handle, rc);71 async_answer_0(icall, rc); 72 72 return; 73 73 } … … 78 78 79 79 if (fun == NULL) { 80 async_answer_0(icall _handle, ENOENT);80 async_answer_0(icall, ENOENT); 81 81 return; 82 82 } … … 87 87 if (fun->state == FUN_REMOVED) { 88 88 fibril_rwlock_read_unlock(&device_tree.rwlock); 89 async_answer_0(icall _handle, ENOENT);89 async_answer_0(icall, ENOENT); 90 90 return; 91 91 } … … 97 97 fun_del_ref(fun); 98 98 99 async_answer_1(icall _handle, EOK, handle);99 async_answer_1(icall, EOK, handle); 100 100 } 101 101 102 102 /** Get device match ID. */ 103 static void devman_fun_get_match_id( cap_call_handle_t icall_handle,ipc_call_t *icall)103 static void devman_fun_get_match_id(ipc_call_t *icall) 104 104 { 105 105 devman_handle_t handle = IPC_GET_ARG1(*icall); … … 109 109 fun_node_t *fun = find_fun_node(&device_tree, handle); 110 110 if (fun == NULL) { 111 async_answer_0(icall _handle, ENOMEM);112 return; 113 } 114 115 cap_call_handle_t data_chandle;111 async_answer_0(icall, ENOMEM); 112 return; 113 } 114 115 ipc_call_t data; 116 116 size_t data_len; 117 if (!async_data_read_receive(&data _chandle, &data_len)) {118 async_answer_0(icall _handle, EINVAL);117 if (!async_data_read_receive(&data, &data_len)) { 118 async_answer_0(icall, EINVAL); 119 119 fun_del_ref(fun); 120 120 return; … … 123 123 buffer = malloc(data_len); 124 124 if (buffer == NULL) { 125 async_answer_0( data_chandle, ENOMEM);126 async_answer_0(icall _handle, ENOMEM);125 async_answer_0(&data, ENOMEM); 126 async_answer_0(icall, ENOMEM); 127 127 fun_del_ref(fun); 128 128 return; … … 146 146 } 147 147 148 async_data_read_finalize( data_chandle, mid->id, sent_length);149 async_answer_1(icall _handle, EOK, mid->score);148 async_data_read_finalize(&data, mid->id, sent_length); 149 async_answer_1(icall, EOK, mid->score); 150 150 151 151 fibril_rwlock_read_unlock(&device_tree.rwlock); … … 158 158 free(buffer); 159 159 160 async_answer_0( data_chandle, ENOENT);161 async_answer_0(icall _handle, ENOENT);160 async_answer_0(&data, ENOENT); 161 async_answer_0(icall, ENOENT); 162 162 fun_del_ref(fun); 163 163 } 164 164 165 165 /** Get device name. */ 166 static void devman_fun_get_name( cap_call_handle_t icall_handle,ipc_call_t *icall)166 static void devman_fun_get_name(ipc_call_t *icall) 167 167 { 168 168 devman_handle_t handle = IPC_GET_ARG1(*icall); … … 170 170 fun_node_t *fun = find_fun_node(&device_tree, handle); 171 171 if (fun == NULL) { 172 async_answer_0(icall _handle, ENOMEM);173 return; 174 } 175 176 cap_call_handle_t data_chandle;172 async_answer_0(icall, ENOMEM); 173 return; 174 } 175 176 ipc_call_t data; 177 177 size_t data_len; 178 if (!async_data_read_receive(&data _chandle, &data_len)) {179 async_answer_0(icall _handle, EINVAL);178 if (!async_data_read_receive(&data, &data_len)) { 179 async_answer_0(icall, EINVAL); 180 180 fun_del_ref(fun); 181 181 return; … … 184 184 void *buffer = malloc(data_len); 185 185 if (buffer == NULL) { 186 async_answer_0( data_chandle, ENOMEM);187 async_answer_0(icall _handle, ENOMEM);186 async_answer_0(&data, ENOMEM); 187 async_answer_0(icall, ENOMEM); 188 188 fun_del_ref(fun); 189 189 return; … … 197 197 free(buffer); 198 198 199 async_answer_0( data_chandle, ENOENT);200 async_answer_0(icall _handle, ENOENT);199 async_answer_0(&data, ENOENT); 200 async_answer_0(icall, ENOENT); 201 201 fun_del_ref(fun); 202 202 return; … … 208 208 } 209 209 210 async_data_read_finalize( data_chandle, fun->name, sent_length);211 async_answer_0(icall _handle, EOK);210 async_data_read_finalize(&data, fun->name, sent_length); 211 async_answer_0(icall, EOK); 212 212 213 213 fibril_rwlock_read_unlock(&device_tree.rwlock); … … 217 217 218 218 /** Get function driver name. */ 219 static void devman_fun_get_driver_name( cap_call_handle_t icall_handle,ipc_call_t *icall)219 static void devman_fun_get_driver_name(ipc_call_t *icall) 220 220 { 221 221 devman_handle_t handle = IPC_GET_ARG1(*icall); … … 223 223 fun_node_t *fun = find_fun_node(&device_tree, handle); 224 224 if (fun == NULL) { 225 async_answer_0(icall _handle, ENOMEM);226 return; 227 } 228 229 cap_call_handle_t data_chandle;225 async_answer_0(icall, ENOMEM); 226 return; 227 } 228 229 ipc_call_t data; 230 230 size_t data_len; 231 if (!async_data_read_receive(&data _chandle, &data_len)) {232 async_answer_0(icall _handle, EINVAL);231 if (!async_data_read_receive(&data, &data_len)) { 232 async_answer_0(icall, EINVAL); 233 233 fun_del_ref(fun); 234 234 return; … … 237 237 void *buffer = malloc(data_len); 238 238 if (buffer == NULL) { 239 async_answer_0( data_chandle, ENOMEM);240 async_answer_0(icall _handle, ENOMEM);239 async_answer_0(&data, ENOMEM); 240 async_answer_0(icall, ENOMEM); 241 241 fun_del_ref(fun); 242 242 return; … … 250 250 free(buffer); 251 251 252 async_answer_0( data_chandle, ENOENT);253 async_answer_0(icall _handle, ENOENT);252 async_answer_0(&data, ENOENT); 253 async_answer_0(icall, ENOENT); 254 254 fun_del_ref(fun); 255 255 return; … … 261 261 free(buffer); 262 262 263 async_answer_0( data_chandle, EINVAL);264 async_answer_0(icall _handle, EINVAL);263 async_answer_0(&data, EINVAL); 264 async_answer_0(icall, EINVAL); 265 265 fun_del_ref(fun); 266 266 return; … … 272 272 } 273 273 274 async_data_read_finalize( data_chandle, fun->child->drv->name,274 async_data_read_finalize(&data, fun->child->drv->name, 275 275 sent_length); 276 async_answer_0(icall _handle, EOK);276 async_answer_0(icall, EOK); 277 277 278 278 fibril_rwlock_read_unlock(&device_tree.rwlock); … … 282 282 283 283 /** Get device path. */ 284 static void devman_fun_get_path( cap_call_handle_t icall_handle,ipc_call_t *icall)284 static void devman_fun_get_path(ipc_call_t *icall) 285 285 { 286 286 devman_handle_t handle = IPC_GET_ARG1(*icall); … … 288 288 fun_node_t *fun = find_fun_node(&device_tree, handle); 289 289 if (fun == NULL) { 290 async_answer_0(icall _handle, ENOMEM);291 return; 292 } 293 294 cap_call_handle_t data_chandle;290 async_answer_0(icall, ENOMEM); 291 return; 292 } 293 294 ipc_call_t data; 295 295 size_t data_len; 296 if (!async_data_read_receive(&data _chandle, &data_len)) {297 async_answer_0(icall _handle, EINVAL);296 if (!async_data_read_receive(&data, &data_len)) { 297 async_answer_0(icall, EINVAL); 298 298 fun_del_ref(fun); 299 299 return; … … 302 302 void *buffer = malloc(data_len); 303 303 if (buffer == NULL) { 304 async_answer_0( data_chandle, ENOMEM);305 async_answer_0(icall _handle, ENOMEM);304 async_answer_0(&data, ENOMEM); 305 async_answer_0(icall, ENOMEM); 306 306 fun_del_ref(fun); 307 307 return; … … 315 315 free(buffer); 316 316 317 async_answer_0( data_chandle, ENOENT);318 async_answer_0(icall _handle, ENOENT);317 async_answer_0(&data, ENOENT); 318 async_answer_0(icall, ENOENT); 319 319 fun_del_ref(fun); 320 320 return; … … 326 326 } 327 327 328 async_data_read_finalize( data_chandle, fun->pathname, sent_length);329 async_answer_0(icall _handle, EOK);328 async_data_read_finalize(&data, fun->pathname, sent_length); 329 async_answer_0(icall, EOK); 330 330 331 331 fibril_rwlock_read_unlock(&device_tree.rwlock); … … 335 335 336 336 /** Get handle for parent function of a device. */ 337 static void devman_dev_get_parent( cap_call_handle_t icall_handle,ipc_call_t *icall)337 static void devman_dev_get_parent(ipc_call_t *icall) 338 338 { 339 339 dev_node_t *dev; … … 344 344 if (dev == NULL || dev->state == DEVICE_REMOVED) { 345 345 fibril_rwlock_read_unlock(&device_tree.rwlock); 346 async_answer_0(icall _handle, ENOENT);346 async_answer_0(icall, ENOENT); 347 347 return; 348 348 } … … 350 350 if (dev->pfun == NULL) { 351 351 fibril_rwlock_read_unlock(&device_tree.rwlock); 352 async_answer_0(icall _handle, ENOENT);353 return; 354 } 355 356 async_answer_1(icall _handle, EOK, dev->pfun->handle);357 358 fibril_rwlock_read_unlock(&device_tree.rwlock); 359 } 360 361 static void devman_dev_get_functions( cap_call_handle_t icall_handle,ipc_call_t *icall)362 { 363 cap_call_handle_t chandle;352 async_answer_0(icall, ENOENT); 353 return; 354 } 355 356 async_answer_1(icall, EOK, dev->pfun->handle); 357 358 fibril_rwlock_read_unlock(&device_tree.rwlock); 359 } 360 361 static void devman_dev_get_functions(ipc_call_t *icall) 362 { 363 ipc_call_t call; 364 364 size_t size; 365 365 size_t act_size; 366 366 errno_t rc; 367 367 368 if (!async_data_read_receive(&c handle, &size)) {369 async_answer_0( chandle, EREFUSED);370 async_answer_0(icall _handle, EREFUSED);368 if (!async_data_read_receive(&call, &size)) { 369 async_answer_0(&call, EREFUSED); 370 async_answer_0(icall, EREFUSED); 371 371 return; 372 372 } … … 378 378 if (dev == NULL || dev->state == DEVICE_REMOVED) { 379 379 fibril_rwlock_read_unlock(&device_tree.rwlock); 380 async_answer_0( chandle, ENOENT);381 async_answer_0(icall _handle, ENOENT);380 async_answer_0(&call, ENOENT); 381 async_answer_0(icall, ENOENT); 382 382 return; 383 383 } … … 386 386 if (hdl_buf == NULL) { 387 387 fibril_rwlock_read_unlock(&device_tree.rwlock); 388 async_answer_0( chandle, ENOMEM);389 async_answer_0(icall _handle, ENOMEM);388 async_answer_0(&call, ENOMEM); 389 async_answer_0(icall, ENOMEM); 390 390 return; 391 391 } … … 394 394 if (rc != EOK) { 395 395 fibril_rwlock_read_unlock(&device_tree.rwlock); 396 async_answer_0( chandle, rc);397 async_answer_0(icall _handle, rc);398 return; 399 } 400 401 fibril_rwlock_read_unlock(&device_tree.rwlock); 402 403 errno_t retval = async_data_read_finalize( chandle, hdl_buf, size);396 async_answer_0(&call, rc); 397 async_answer_0(icall, rc); 398 return; 399 } 400 401 fibril_rwlock_read_unlock(&device_tree.rwlock); 402 403 errno_t retval = async_data_read_finalize(&call, hdl_buf, size); 404 404 free(hdl_buf); 405 405 406 async_answer_1(icall _handle, retval, act_size);406 async_answer_1(icall, retval, act_size); 407 407 } 408 408 409 409 /** Get handle for child device of a function. */ 410 static void devman_fun_get_child( cap_call_handle_t icall_handle,ipc_call_t *icall)410 static void devman_fun_get_child(ipc_call_t *icall) 411 411 { 412 412 fun_node_t *fun; … … 417 417 if (fun == NULL || fun->state == FUN_REMOVED) { 418 418 fibril_rwlock_read_unlock(&device_tree.rwlock); 419 async_answer_0(icall _handle, ENOENT);419 async_answer_0(icall, ENOENT); 420 420 return; 421 421 } … … 423 423 if (fun->child == NULL) { 424 424 fibril_rwlock_read_unlock(&device_tree.rwlock); 425 async_answer_0(icall _handle, ENOENT);426 return; 427 } 428 429 async_answer_1(icall _handle, EOK, fun->child->handle);425 async_answer_0(icall, ENOENT); 426 return; 427 } 428 429 async_answer_1(icall, EOK, fun->child->handle); 430 430 431 431 fibril_rwlock_read_unlock(&device_tree.rwlock); … … 438 438 * of this function is linked to state of another function somehow). 439 439 */ 440 static void devman_fun_online( cap_call_handle_t icall_handle,ipc_call_t *icall)440 static void devman_fun_online(ipc_call_t *icall) 441 441 { 442 442 fun_node_t *fun; … … 445 445 fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall)); 446 446 if (fun == NULL) { 447 async_answer_0(icall _handle, ENOENT);447 async_answer_0(icall, ENOENT); 448 448 return; 449 449 } … … 452 452 fun_del_ref(fun); 453 453 454 async_answer_0(icall _handle, rc);454 async_answer_0(icall, rc); 455 455 } 456 456 … … 463 463 * function somehow). 464 464 */ 465 static void devman_fun_offline( cap_call_handle_t icall_handle,ipc_call_t *icall)465 static void devman_fun_offline(ipc_call_t *icall) 466 466 { 467 467 fun_node_t *fun; … … 470 470 fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall)); 471 471 if (fun == NULL) { 472 async_answer_0(icall _handle, ENOENT);472 async_answer_0(icall, ENOENT); 473 473 return; 474 474 } … … 477 477 fun_del_ref(fun); 478 478 479 async_answer_0(icall _handle, rc);479 async_answer_0(icall, rc); 480 480 } 481 481 482 482 /** Find handle for the function instance identified by its service ID. */ 483 static void devman_fun_sid_to_handle( cap_call_handle_t icall_handle,ipc_call_t *icall)483 static void devman_fun_sid_to_handle(ipc_call_t *icall) 484 484 { 485 485 fun_node_t *fun; … … 488 488 489 489 if (fun == NULL) { 490 async_answer_0(icall _handle, ENOENT);490 async_answer_0(icall, ENOENT); 491 491 return; 492 492 } … … 497 497 if (fun->state == FUN_REMOVED) { 498 498 fibril_rwlock_read_unlock(&device_tree.rwlock); 499 async_answer_0(icall _handle, ENOENT);500 return; 501 } 502 503 async_answer_1(icall _handle, EOK, fun->handle);499 async_answer_0(icall, ENOENT); 500 return; 501 } 502 503 async_answer_1(icall, EOK, fun->handle); 504 504 fibril_rwlock_read_unlock(&device_tree.rwlock); 505 505 fun_del_ref(fun); … … 507 507 508 508 /** Get list of all registered drivers. */ 509 static void devman_get_drivers( cap_call_handle_t icall_handle,ipc_call_t *icall)510 { 511 cap_call_handle_t chandle;509 static void devman_get_drivers(ipc_call_t *icall) 510 { 511 ipc_call_t call; 512 512 size_t size; 513 513 size_t act_size; 514 514 errno_t rc; 515 515 516 if (!async_data_read_receive(&c handle, &size)) {517 async_answer_0(icall _handle, EREFUSED);516 if (!async_data_read_receive(&call, &size)) { 517 async_answer_0(icall, EREFUSED); 518 518 return; 519 519 } … … 521 521 devman_handle_t *hdl_buf = (devman_handle_t *) malloc(size); 522 522 if (hdl_buf == NULL) { 523 async_answer_0( chandle, ENOMEM);524 async_answer_0(icall _handle, ENOMEM);523 async_answer_0(&call, ENOMEM); 524 async_answer_0(icall, ENOMEM); 525 525 return; 526 526 } … … 528 528 rc = driver_get_list(&drivers_list, hdl_buf, size, &act_size); 529 529 if (rc != EOK) { 530 async_answer_0( chandle, rc);531 async_answer_0(icall _handle, rc);532 return; 533 } 534 535 errno_t retval = async_data_read_finalize( chandle, hdl_buf, size);530 async_answer_0(&call, rc); 531 async_answer_0(icall, rc); 532 return; 533 } 534 535 errno_t retval = async_data_read_finalize(&call, hdl_buf, size); 536 536 free(hdl_buf); 537 537 538 async_answer_1(icall _handle, retval, act_size);539 } 540 541 static void devman_driver_get_devices( cap_call_handle_t icall_handle,ipc_call_t *icall)542 { 543 cap_call_handle_t chandle;538 async_answer_1(icall, retval, act_size); 539 } 540 541 static void devman_driver_get_devices(ipc_call_t *icall) 542 { 543 ipc_call_t call; 544 544 size_t size; 545 545 size_t act_size; 546 546 errno_t rc; 547 547 548 if (!async_data_read_receive(&c handle, &size)) {549 async_answer_0(icall _handle, EREFUSED);548 if (!async_data_read_receive(&call, &size)) { 549 async_answer_0(icall, EREFUSED); 550 550 return; 551 551 } … … 553 553 driver_t *drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall)); 554 554 if (drv == NULL) { 555 async_answer_0( chandle, ENOENT);556 async_answer_0(icall _handle, ENOENT);555 async_answer_0(&call, ENOENT); 556 async_answer_0(icall, ENOENT); 557 557 return; 558 558 } … … 560 560 devman_handle_t *hdl_buf = (devman_handle_t *) malloc(size); 561 561 if (hdl_buf == NULL) { 562 async_answer_0( chandle, ENOMEM);563 async_answer_0(icall _handle, ENOMEM);562 async_answer_0(&call, ENOMEM); 563 async_answer_0(icall, ENOMEM); 564 564 return; 565 565 } … … 568 568 if (rc != EOK) { 569 569 fibril_rwlock_read_unlock(&device_tree.rwlock); 570 async_answer_0( chandle, rc);571 async_answer_0(icall _handle, rc);572 return; 573 } 574 575 errno_t retval = async_data_read_finalize( chandle, hdl_buf, size);570 async_answer_0(&call, rc); 571 async_answer_0(icall, rc); 572 return; 573 } 574 575 errno_t retval = async_data_read_finalize(&call, hdl_buf, size); 576 576 free(hdl_buf); 577 577 578 async_answer_1(icall _handle, retval, act_size);578 async_answer_1(icall, retval, act_size); 579 579 } 580 580 581 581 582 582 /** Find driver by name. */ 583 static void devman_driver_get_handle( cap_call_handle_t icall_handle,ipc_call_t *icall)583 static void devman_driver_get_handle(ipc_call_t *icall) 584 584 { 585 585 char *drvname; … … 587 587 errno_t rc = async_data_write_accept((void **) &drvname, true, 0, 0, 0, 0); 588 588 if (rc != EOK) { 589 async_answer_0(icall _handle, rc);589 async_answer_0(icall, rc); 590 590 return; 591 591 } … … 596 596 597 597 if (driver == NULL) { 598 async_answer_0(icall _handle, ENOENT);599 return; 600 } 601 602 async_answer_1(icall _handle, EOK, driver->handle);598 async_answer_0(icall, ENOENT); 599 return; 600 } 601 602 async_answer_1(icall, EOK, driver->handle); 603 603 } 604 604 605 605 /** Get driver match ID. */ 606 static void devman_driver_get_match_id( cap_call_handle_t icall_handle,ipc_call_t *icall)606 static void devman_driver_get_match_id(ipc_call_t *icall) 607 607 { 608 608 devman_handle_t handle = IPC_GET_ARG1(*icall); … … 611 611 driver_t *drv = driver_find(&drivers_list, handle); 612 612 if (drv == NULL) { 613 async_answer_0(icall _handle, ENOMEM);614 return; 615 } 616 617 cap_call_handle_t data_chandle;613 async_answer_0(icall, ENOMEM); 614 return; 615 } 616 617 ipc_call_t data; 618 618 size_t data_len; 619 if (!async_data_read_receive(&data _chandle, &data_len)) {620 async_answer_0(icall _handle, EINVAL);619 if (!async_data_read_receive(&data, &data_len)) { 620 async_answer_0(icall, EINVAL); 621 621 return; 622 622 } … … 624 624 void *buffer = malloc(data_len); 625 625 if (buffer == NULL) { 626 async_answer_0( data_chandle, ENOMEM);627 async_answer_0(icall _handle, ENOMEM);626 async_answer_0(&data, ENOMEM); 627 async_answer_0(icall, ENOMEM); 628 628 return; 629 629 } … … 634 634 fibril_mutex_unlock(&drv->driver_mutex); 635 635 free(buffer); 636 async_answer_0( data_chandle, ENOMEM);637 async_answer_0(icall _handle, ENOMEM);636 async_answer_0(&data, ENOMEM); 637 async_answer_0(icall, ENOMEM); 638 638 return; 639 639 } … … 646 646 } 647 647 648 async_data_read_finalize( data_chandle, mid->id, sent_length);649 async_answer_1(icall _handle, EOK, mid->score);648 async_data_read_finalize(&data, mid->id, sent_length); 649 async_answer_1(icall, EOK, mid->score); 650 650 651 651 fibril_mutex_unlock(&drv->driver_mutex); … … 655 655 656 656 /** Get driver name. */ 657 static void devman_driver_get_name( cap_call_handle_t icall_handle,ipc_call_t *icall)657 static void devman_driver_get_name(ipc_call_t *icall) 658 658 { 659 659 devman_handle_t handle = IPC_GET_ARG1(*icall); … … 661 661 driver_t *drv = driver_find(&drivers_list, handle); 662 662 if (drv == NULL) { 663 async_answer_0(icall _handle, ENOMEM);664 return; 665 } 666 667 cap_call_handle_t data_chandle;663 async_answer_0(icall, ENOMEM); 664 return; 665 } 666 667 ipc_call_t data; 668 668 size_t data_len; 669 if (!async_data_read_receive(&data _chandle, &data_len)) {670 async_answer_0(icall _handle, EINVAL);669 if (!async_data_read_receive(&data, &data_len)) { 670 async_answer_0(icall, EINVAL); 671 671 return; 672 672 } … … 674 674 void *buffer = malloc(data_len); 675 675 if (buffer == NULL) { 676 async_answer_0( data_chandle, ENOMEM);677 async_answer_0(icall _handle, ENOMEM);676 async_answer_0(&data, ENOMEM); 677 async_answer_0(icall, ENOMEM); 678 678 return; 679 679 } … … 686 686 } 687 687 688 async_data_read_finalize( data_chandle, drv->name, sent_length);689 async_answer_0(icall _handle, EOK);688 async_data_read_finalize(&data, drv->name, sent_length); 689 async_answer_0(icall, EOK); 690 690 691 691 fibril_mutex_unlock(&drv->driver_mutex); … … 695 695 696 696 /** Get driver state. */ 697 static void devman_driver_get_state( cap_call_handle_t icall_handle,ipc_call_t *icall)697 static void devman_driver_get_state(ipc_call_t *icall) 698 698 { 699 699 driver_t *drv; … … 701 701 drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall)); 702 702 if (drv == NULL) { 703 async_answer_0(icall _handle, ENOENT);704 return; 705 } 706 707 async_answer_1(icall _handle, EOK, (sysarg_t) drv->state);703 async_answer_0(icall, ENOENT); 704 return; 705 } 706 707 async_answer_1(icall, EOK, (sysarg_t) drv->state); 708 708 } 709 709 710 710 /** Forcibly load a driver. */ 711 static void devman_driver_load( cap_call_handle_t icall_handle,ipc_call_t *icall)711 static void devman_driver_load(ipc_call_t *icall) 712 712 { 713 713 driver_t *drv; … … 716 716 drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall)); 717 717 if (drv == NULL) { 718 async_answer_0(icall _handle, ENOENT);718 async_answer_0(icall, ENOENT); 719 719 return; 720 720 } … … 724 724 fibril_mutex_unlock(&drv->driver_mutex); 725 725 726 async_answer_0(icall _handle, rc);726 async_answer_0(icall, rc); 727 727 } 728 728 729 729 /** Unload a driver by user request. */ 730 static void devman_driver_unload( cap_call_handle_t icall_handle,ipc_call_t *icall)730 static void devman_driver_unload(ipc_call_t *icall) 731 731 { 732 732 driver_t *drv; … … 735 735 drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall)); 736 736 if (drv == NULL) { 737 async_answer_0(icall _handle, ENOENT);737 async_answer_0(icall, ENOENT); 738 738 return; 739 739 } … … 743 743 fibril_mutex_unlock(&drv->driver_mutex); 744 744 745 async_answer_0(icall _handle, rc);745 async_answer_0(icall, rc); 746 746 } 747 747 748 748 /** Function for handling connections from a client to the device manager. */ 749 void devman_connection_client( cap_call_handle_t icall_handle,ipc_call_t *icall, void *arg)749 void devman_connection_client(ipc_call_t *icall, void *arg) 750 750 { 751 751 /* Accept connection. */ 752 async_answer_0(icall _handle, EOK);752 async_answer_0(icall, EOK); 753 753 754 754 while (true) { 755 755 ipc_call_t call; 756 cap_call_handle_t chandle =async_get_call(&call);756 async_get_call(&call); 757 757 758 758 if (!IPC_GET_IMETHOD(call)) … … 761 761 switch (IPC_GET_IMETHOD(call)) { 762 762 case DEVMAN_DEVICE_GET_HANDLE: 763 devman_function_get_handle( chandle,&call);763 devman_function_get_handle(&call); 764 764 break; 765 765 case DEVMAN_DEV_GET_PARENT: 766 devman_dev_get_parent( chandle,&call);766 devman_dev_get_parent(&call); 767 767 break; 768 768 case DEVMAN_DEV_GET_FUNCTIONS: 769 devman_dev_get_functions( chandle,&call);769 devman_dev_get_functions(&call); 770 770 break; 771 771 case DEVMAN_FUN_GET_CHILD: 772 devman_fun_get_child( chandle,&call);772 devman_fun_get_child(&call); 773 773 break; 774 774 case DEVMAN_FUN_GET_MATCH_ID: 775 devman_fun_get_match_id( chandle,&call);775 devman_fun_get_match_id(&call); 776 776 break; 777 777 case DEVMAN_FUN_GET_NAME: 778 devman_fun_get_name( chandle,&call);778 devman_fun_get_name(&call); 779 779 break; 780 780 case DEVMAN_FUN_GET_DRIVER_NAME: 781 devman_fun_get_driver_name( chandle,&call);781 devman_fun_get_driver_name(&call); 782 782 break; 783 783 case DEVMAN_FUN_GET_PATH: 784 devman_fun_get_path( chandle,&call);784 devman_fun_get_path(&call); 785 785 break; 786 786 case DEVMAN_FUN_ONLINE: 787 devman_fun_online( chandle,&call);787 devman_fun_online(&call); 788 788 break; 789 789 case DEVMAN_FUN_OFFLINE: 790 devman_fun_offline( chandle,&call);790 devman_fun_offline(&call); 791 791 break; 792 792 case DEVMAN_FUN_SID_TO_HANDLE: 793 devman_fun_sid_to_handle( chandle,&call);793 devman_fun_sid_to_handle(&call); 794 794 break; 795 795 case DEVMAN_GET_DRIVERS: 796 devman_get_drivers( chandle,&call);796 devman_get_drivers(&call); 797 797 break; 798 798 case DEVMAN_DRIVER_GET_DEVICES: 799 devman_driver_get_devices( chandle,&call);799 devman_driver_get_devices(&call); 800 800 break; 801 801 case DEVMAN_DRIVER_GET_HANDLE: 802 devman_driver_get_handle( chandle,&call);802 devman_driver_get_handle(&call); 803 803 break; 804 804 case DEVMAN_DRIVER_GET_MATCH_ID: 805 devman_driver_get_match_id( chandle,&call);805 devman_driver_get_match_id(&call); 806 806 break; 807 807 case DEVMAN_DRIVER_GET_NAME: 808 devman_driver_get_name( chandle,&call);808 devman_driver_get_name(&call); 809 809 break; 810 810 case DEVMAN_DRIVER_GET_STATE: 811 devman_driver_get_state( chandle,&call);811 devman_driver_get_state(&call); 812 812 break; 813 813 case DEVMAN_DRIVER_LOAD: 814 devman_driver_load( chandle,&call);814 devman_driver_load(&call); 815 815 break; 816 816 case DEVMAN_DRIVER_UNLOAD: 817 devman_driver_unload( chandle,&call);817 devman_driver_unload(&call); 818 818 break; 819 819 default: 820 async_answer_0( chandle, ENOENT);820 async_answer_0(&call, ENOENT); 821 821 } 822 822 } 823 823 } 824 825 824 826 825 /** @} -
uspace/srv/devman/client_conn.h
r76f566d r984a9ba 36 36 #include "devman.h" 37 37 38 extern void devman_connection_client( cap_call_handle_t,ipc_call_t *, void *);38 extern void devman_connection_client(ipc_call_t *, void *); 39 39 40 40 #endif -
uspace/srv/devman/drv_conn.c
r76f566d r984a9ba 64 64 65 65 /** Register running driver. */ 66 static driver_t *devman_driver_register( cap_call_handle_t chandle,ipc_call_t *call)66 static driver_t *devman_driver_register(ipc_call_t *call) 67 67 { 68 68 driver_t *driver = NULL; … … 74 74 errno_t rc = async_data_write_accept((void **) &drv_name, true, 0, 0, 0, 0); 75 75 if (rc != EOK) { 76 async_answer_0(c handle, rc);76 async_answer_0(call, rc); 77 77 return NULL; 78 78 } … … 87 87 free(drv_name); 88 88 drv_name = NULL; 89 async_answer_0(c handle, ENOENT);89 async_answer_0(call, ENOENT); 90 90 return NULL; 91 91 } … … 101 101 driver->name); 102 102 fibril_mutex_unlock(&driver->driver_mutex); 103 async_answer_0(c handle, EEXIST);103 async_answer_0(call, EEXIST); 104 104 return NULL; 105 105 } … … 126 126 if (!driver->sess) { 127 127 fibril_mutex_unlock(&driver->driver_mutex); 128 async_answer_0(c handle, ENOTSUP);128 async_answer_0(call, ENOTSUP); 129 129 return NULL; 130 130 } … … 146 146 "for driver `%s'.", driver->name); 147 147 fibril_mutex_unlock(&driver->driver_mutex); 148 async_answer_0(c handle, ENOMEM);148 async_answer_0(call, ENOMEM); 149 149 return NULL; 150 150 } … … 153 153 fibril_mutex_unlock(&driver->driver_mutex); 154 154 155 async_answer_0(c handle, EOK);155 async_answer_0(call, EOK); 156 156 return driver; 157 157 } … … 166 166 { 167 167 match_id_t *match_id = create_match_id(); 168 cap_call_handle_t chandle;169 168 ipc_call_t call; 170 169 errno_t rc = 0; 171 170 172 chandle =async_get_call(&call);171 async_get_call(&call); 173 172 if (DEVMAN_ADD_MATCH_ID != IPC_GET_IMETHOD(call)) { 174 173 log_msg(LOG_DEFAULT, LVL_ERROR, 175 174 "Invalid protocol when trying to receive match id."); 176 async_answer_0( chandle, EINVAL);175 async_answer_0(&call, EINVAL); 177 176 delete_match_id(match_id); 178 177 return EINVAL; … … 181 180 if (match_id == NULL) { 182 181 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to allocate match id."); 183 async_answer_0( chandle, ENOMEM);182 async_answer_0(&call, ENOMEM); 184 183 return ENOMEM; 185 184 } 186 185 187 async_answer_0( chandle, EOK);186 async_answer_0(&call, EOK); 188 187 189 188 match_id->score = IPC_GET_ARG1(call); … … 230 229 * Child devices are registered by their parent's device driver. 231 230 */ 232 static void devman_add_function( cap_call_handle_t chandle,ipc_call_t *call)231 static void devman_add_function(ipc_call_t *call) 233 232 { 234 233 fun_type_t ftype = (fun_type_t) IPC_GET_ARG1(*call); … … 239 238 dev_node_t *pdev = find_dev_node(&device_tree, dev_handle); 240 239 if (pdev == NULL) { 241 async_answer_0(c handle, ENOENT);240 async_answer_0(call, ENOENT); 242 241 return; 243 242 } … … 250 249 251 250 dev_del_ref(pdev); 252 async_answer_0(c handle, EINVAL);251 async_answer_0(call, EINVAL); 253 252 return; 254 253 } 255 254 256 255 char *fun_name = NULL; 257 errno_t rc = async_data_write_accept((void **) &fun_name, true, 0, 0, 0, 0);256 errno_t rc = async_data_write_accept((void **) &fun_name, true, 0, 0, 0, 0); 258 257 if (rc != EOK) { 259 258 dev_del_ref(pdev); 260 async_answer_0(c handle, rc);259 async_answer_0(call, rc); 261 260 return; 262 261 } … … 268 267 fibril_rwlock_write_unlock(&tree->rwlock); 269 268 dev_del_ref(pdev); 270 async_answer_0(c handle, ENOENT);269 async_answer_0(call, ENOENT); 271 270 return; 272 271 } … … 278 277 fibril_rwlock_write_unlock(&tree->rwlock); 279 278 dev_del_ref(pdev); 280 async_answer_0(c handle, EEXIST);279 async_answer_0(call, EEXIST); 281 280 printf(NAME ": Warning, driver tried to register `%s' twice.\n", 282 281 fun_name); … … 303 302 fun_del_ref(fun); 304 303 delete_fun_node(fun); 305 async_answer_0(c handle, ENOMEM);304 async_answer_0(call, ENOMEM); 306 305 return; 307 306 } … … 317 316 fun_busy_unlock(fun); 318 317 fun_del_ref(fun); 319 async_answer_0(c handle, rc);318 async_answer_0(call, rc); 320 319 return; 321 320 } … … 325 324 326 325 /* Return device handle to parent's driver. */ 327 async_answer_1(c handle, EOK, fun->handle);328 } 329 330 static void devman_add_function_to_cat( cap_call_handle_t chandle,ipc_call_t *call)326 async_answer_1(call, EOK, fun->handle); 327 } 328 329 static void devman_add_function_to_cat(ipc_call_t *call) 331 330 { 332 331 devman_handle_t handle = IPC_GET_ARG1(*call); … … 339 338 0, 0, 0, 0); 340 339 if (rc != EOK) { 341 async_answer_0(c handle, rc);340 async_answer_0(call, rc); 342 341 return; 343 342 } … … 345 344 fun_node_t *fun = find_fun_node(&device_tree, handle); 346 345 if (fun == NULL) { 347 async_answer_0(c handle, ENOENT);346 async_answer_0(call, ENOENT); 348 347 return; 349 348 } … … 354 353 if (fun->state == FUN_REMOVED) { 355 354 fibril_rwlock_read_unlock(&device_tree.rwlock); 356 async_answer_0(c handle, ENOENT);355 async_answer_0(call, ENOENT); 357 356 return; 358 357 } … … 371 370 fun_del_ref(fun); 372 371 373 async_answer_0(c handle, rc);372 async_answer_0(call, rc); 374 373 } 375 374 … … 377 376 * 378 377 */ 379 static void devman_drv_fun_online(cap_call_handle_t icall_handle, ipc_call_t *icall, 380 driver_t *drv) 378 static void devman_drv_fun_online(ipc_call_t *icall, driver_t *drv) 381 379 { 382 380 fun_node_t *fun; … … 387 385 fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall)); 388 386 if (fun == NULL) { 389 async_answer_0(icall _handle, ENOENT);387 async_answer_0(icall, ENOENT); 390 388 return; 391 389 } … … 398 396 fun_busy_unlock(fun); 399 397 fun_del_ref(fun); 400 async_answer_0(icall _handle, ENOENT);398 async_answer_0(icall, ENOENT); 401 399 return; 402 400 } … … 407 405 fun_busy_unlock(fun); 408 406 fun_del_ref(fun); 409 async_answer_0(icall _handle, rc);407 async_answer_0(icall, rc); 410 408 return; 411 409 } … … 414 412 fun_del_ref(fun); 415 413 416 async_answer_0(icall _handle, EOK);414 async_answer_0(icall, EOK); 417 415 } 418 416 … … 421 419 * 422 420 */ 423 static void devman_drv_fun_offline(cap_call_handle_t icall_handle, ipc_call_t *icall, 424 driver_t *drv) 421 static void devman_drv_fun_offline(ipc_call_t *icall, driver_t *drv) 425 422 { 426 423 fun_node_t *fun; … … 429 426 fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall)); 430 427 if (fun == NULL) { 431 async_answer_0(icall _handle, ENOENT);428 async_answer_0(icall, ENOENT); 432 429 return; 433 430 } … … 439 436 fun_busy_unlock(fun); 440 437 fun_del_ref(fun); 441 async_answer_0(icall _handle, ENOENT);438 async_answer_0(icall, ENOENT); 442 439 return; 443 440 } … … 448 445 fun_busy_unlock(fun); 449 446 fun_del_ref(fun); 450 async_answer_0(icall _handle, rc);447 async_answer_0(icall, rc); 451 448 return; 452 449 } … … 454 451 fun_busy_unlock(fun); 455 452 fun_del_ref(fun); 456 async_answer_0(icall _handle, EOK);453 async_answer_0(icall, EOK); 457 454 } 458 455 459 456 /** Remove function. */ 460 static void devman_remove_function( cap_call_handle_t chandle,ipc_call_t *call)457 static void devman_remove_function(ipc_call_t *call) 461 458 { 462 459 devman_handle_t fun_handle = IPC_GET_ARG1(*call); … … 466 463 fun_node_t *fun = find_fun_node(&device_tree, fun_handle); 467 464 if (fun == NULL) { 468 async_answer_0(c handle, ENOENT);465 async_answer_0(call, ENOENT); 469 466 return; 470 467 } … … 481 478 fun_busy_unlock(fun); 482 479 fun_del_ref(fun); 483 async_answer_0(c handle, ENOENT);480 async_answer_0(call, ENOENT); 484 481 return; 485 482 } … … 523 520 fun_busy_unlock(fun); 524 521 fun_del_ref(fun); 525 async_answer_0(c handle, gone_rc);522 async_answer_0(call, gone_rc); 526 523 return; 527 524 } … … 551 548 fun_busy_unlock(fun); 552 549 fun_del_ref(fun); 553 async_answer_0(c handle, EIO);550 async_answer_0(call, EIO); 554 551 return; 555 552 } … … 567 564 568 565 log_msg(LOG_DEFAULT, LVL_DEBUG, "devman_remove_function() succeeded."); 569 async_answer_0(c handle, EOK);566 async_answer_0(call, EOK); 570 567 } 571 568 … … 586 583 587 584 /** Function for handling connections from a driver to the device manager. */ 588 void devman_connection_driver( cap_call_handle_t icall_handle,ipc_call_t *icall, void *arg)585 void devman_connection_driver(ipc_call_t *icall, void *arg) 589 586 { 590 587 client_t *client; … … 592 589 593 590 /* Accept the connection. */ 594 async_answer_0(icall _handle, EOK);591 async_answer_0(icall, EOK); 595 592 596 593 client = async_get_client_data(); … … 602 599 while (true) { 603 600 ipc_call_t call; 604 cap_call_handle_t chandle =async_get_call(&call);601 async_get_call(&call); 605 602 606 603 if (!IPC_GET_IMETHOD(call)) … … 613 610 if (driver == NULL) { 614 611 /* First call must be to DEVMAN_DRIVER_REGISTER */ 615 async_answer_0( chandle, ENOTSUP);612 async_answer_0(&call, ENOTSUP); 616 613 continue; 617 614 } … … 623 620 if (client->driver != NULL) { 624 621 fibril_mutex_unlock(&client->mutex); 625 async_answer_0( chandle, EINVAL);622 async_answer_0(&call, EINVAL); 626 623 continue; 627 624 } 628 client->driver = devman_driver_register( chandle,&call);625 client->driver = devman_driver_register(&call); 629 626 fibril_mutex_unlock(&client->mutex); 630 627 break; 631 628 case DEVMAN_ADD_FUNCTION: 632 devman_add_function( chandle,&call);629 devman_add_function(&call); 633 630 break; 634 631 case DEVMAN_ADD_DEVICE_TO_CATEGORY: 635 devman_add_function_to_cat( chandle,&call);632 devman_add_function_to_cat(&call); 636 633 break; 637 634 case DEVMAN_DRV_FUN_ONLINE: 638 devman_drv_fun_online( chandle,&call, driver);635 devman_drv_fun_online(&call, driver); 639 636 break; 640 637 case DEVMAN_DRV_FUN_OFFLINE: 641 devman_drv_fun_offline( chandle,&call, driver);638 devman_drv_fun_offline(&call, driver); 642 639 break; 643 640 case DEVMAN_REMOVE_FUNCTION: 644 devman_remove_function( chandle,&call);641 devman_remove_function(&call); 645 642 break; 646 643 default: 647 async_answer_0( chandle, EINVAL);644 async_answer_0(&call, EINVAL); 648 645 break; 649 646 } -
uspace/srv/devman/drv_conn.h
r76f566d r984a9ba 37 37 #include "devman.h" 38 38 39 extern void devman_connection_driver( cap_call_handle_t,ipc_call_t *, void *);39 extern void devman_connection_driver(ipc_call_t *, void *); 40 40 41 41 #endif -
uspace/srv/devman/main.c
r76f566d r984a9ba 66 66 dev_tree_t device_tree; 67 67 68 static void devman_connection_device(cap_call_handle_t icall_handle, ipc_call_t *icall, 69 void *arg) 68 static void devman_connection_device(ipc_call_t *icall, void *arg) 70 69 { 71 70 devman_handle_t handle = IPC_GET_ARG2(*icall); … … 94 93 log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding failed - no device or " 95 94 "function with handle %" PRIun " was found.", handle); 96 async_answer_0(icall _handle, ENOENT);95 async_answer_0(icall, ENOENT); 97 96 goto cleanup; 98 97 } … … 102 101 "connect to handle %" PRIun ", refers to a device.", 103 102 handle); 104 async_answer_0(icall _handle, ENOENT);103 async_answer_0(icall, ENOENT); 105 104 goto cleanup; 106 105 } … … 116 115 log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding refused - " 117 116 "the device %" PRIun " is not in usable state.", handle); 118 async_answer_0(icall _handle, ENOENT);117 async_answer_0(icall, ENOENT); 119 118 goto cleanup; 120 119 } … … 123 122 log_msg(LOG_DEFAULT, LVL_ERROR, 124 123 "Could not forward to driver `%s'.", driver->name); 125 async_answer_0(icall _handle, EINVAL);124 async_answer_0(icall, EINVAL); 126 125 goto cleanup; 127 126 } … … 138 137 139 138 async_exch_t *exch = async_exchange_begin(driver->sess); 140 async_forward_fast(icall _handle, exch, INTERFACE_DDF_CLIENT, handle, 0, IPC_FF_NONE);139 async_forward_fast(icall, exch, INTERFACE_DDF_CLIENT, handle, 0, IPC_FF_NONE); 141 140 async_exchange_end(exch); 142 141 … … 149 148 } 150 149 151 static void devman_connection_parent(cap_call_handle_t icall_handle, ipc_call_t *icall, 152 void *arg) 150 static void devman_connection_parent(ipc_call_t *icall, void *arg) 153 151 { 154 152 devman_handle_t handle = IPC_GET_ARG2(*icall); … … 177 175 log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding failed - no device or " 178 176 "function with handle %" PRIun " was found.", handle); 179 async_answer_0(icall _handle, ENOENT);177 async_answer_0(icall, ENOENT); 180 178 goto cleanup; 181 179 } … … 196 194 log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding refused - " 197 195 "the device %" PRIun " is not in usable state.", handle); 198 async_answer_0(icall _handle, ENOENT);196 async_answer_0(icall, ENOENT); 199 197 goto cleanup; 200 198 } … … 203 201 log_msg(LOG_DEFAULT, LVL_ERROR, 204 202 "Could not forward to driver `%s'.", driver->name); 205 async_answer_0(icall _handle, EINVAL);203 async_answer_0(icall, EINVAL); 206 204 goto cleanup; 207 205 } … … 218 216 219 217 async_exch_t *exch = async_exchange_begin(driver->sess); 220 async_forward_fast(icall _handle, exch, INTERFACE_DDF_DRIVER, fun_handle, 0, IPC_FF_NONE);218 async_forward_fast(icall, exch, INTERFACE_DDF_DRIVER, fun_handle, 0, IPC_FF_NONE); 221 219 async_exchange_end(exch); 222 220 … … 229 227 } 230 228 231 static void devman_forward( cap_call_handle_t icall_handle,ipc_call_t *icall, void *arg)229 static void devman_forward(ipc_call_t *icall, void *arg) 232 230 { 233 231 iface_t iface = IPC_GET_ARG1(*icall); … … 242 240 "not found.\n"); 243 241 fibril_rwlock_read_unlock(&device_tree.rwlock); 244 async_answer_0(icall _handle, ENOENT);242 async_answer_0(icall, ENOENT); 245 243 return; 246 244 } … … 253 251 254 252 async_exch_t *exch = async_exchange_begin(driver->sess); 255 async_forward_fast(icall _handle, exch, iface, handle, 0, IPC_FF_NONE);253 async_forward_fast(icall, exch, iface, handle, 0, IPC_FF_NONE); 256 254 async_exchange_end(exch); 257 255
Note:
See TracChangeset
for help on using the changeset viewer.