Changes in uspace/srv/devman/client_conn.c [5a6cc679:a35b458] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/devman/client_conn.c
r5a6cc679 ra35b458 65 65 char *pathname; 66 66 devman_handle_t handle; 67 67 68 68 errno_t rc = async_data_write_accept((void **) &pathname, true, 0, 0, 0, 0); 69 69 if (rc != EOK) { … … 71 71 return; 72 72 } 73 73 74 74 fun_node_t *fun = find_fun_node_by_path(&device_tree, pathname); 75 75 76 76 free(pathname); 77 77 … … 306 306 return; 307 307 } 308 308 309 309 fibril_rwlock_read_lock(&device_tree.rwlock); 310 310 311 311 /* Check function state */ 312 312 if (fun->state == FUN_REMOVED) { … … 319 319 return; 320 320 } 321 321 322 322 size_t sent_length = str_size(fun->pathname); 323 323 if (sent_length > data_len) { … … 337 337 { 338 338 dev_node_t *dev; 339 339 340 340 fibril_rwlock_read_lock(&device_tree.rwlock); 341 341 342 342 dev = find_dev_node_no_lock(&device_tree, IPC_GET_ARG1(*icall)); 343 343 if (dev == NULL || dev->state == DEVICE_REMOVED) { … … 346 346 return; 347 347 } 348 348 349 349 if (dev->pfun == NULL) { 350 350 fibril_rwlock_read_unlock(&device_tree.rwlock); … … 352 352 return; 353 353 } 354 354 355 355 async_answer_1(iid, EOK, dev->pfun->handle); 356 356 357 357 fibril_rwlock_read_unlock(&device_tree.rwlock); 358 358 } … … 364 364 size_t act_size; 365 365 errno_t rc; 366 366 367 367 if (!async_data_read_receive(&callid, &size)) { 368 368 async_answer_0(callid, EREFUSED); … … 370 370 return; 371 371 } 372 372 373 373 fibril_rwlock_read_lock(&device_tree.rwlock); 374 374 375 375 dev_node_t *dev = find_dev_node_no_lock(&device_tree, 376 376 IPC_GET_ARG1(*icall)); … … 381 381 return; 382 382 } 383 383 384 384 devman_handle_t *hdl_buf = (devman_handle_t *) malloc(size); 385 385 if (hdl_buf == NULL) { … … 389 389 return; 390 390 } 391 391 392 392 rc = dev_get_functions(&device_tree, dev, hdl_buf, size, &act_size); 393 393 if (rc != EOK) { … … 397 397 return; 398 398 } 399 400 fibril_rwlock_read_unlock(&device_tree.rwlock); 401 399 400 fibril_rwlock_read_unlock(&device_tree.rwlock); 401 402 402 errno_t retval = async_data_read_finalize(callid, hdl_buf, size); 403 403 free(hdl_buf); 404 404 405 405 async_answer_1(iid, retval, act_size); 406 406 } … … 410 410 { 411 411 fun_node_t *fun; 412 412 413 413 fibril_rwlock_read_lock(&device_tree.rwlock); 414 414 415 415 fun = find_fun_node_no_lock(&device_tree, IPC_GET_ARG1(*icall)); 416 416 if (fun == NULL || fun->state == FUN_REMOVED) { … … 419 419 return; 420 420 } 421 421 422 422 if (fun->child == NULL) { 423 423 fibril_rwlock_read_unlock(&device_tree.rwlock); … … 425 425 return; 426 426 } 427 427 428 428 async_answer_1(iid, EOK, fun->child->handle); 429 429 430 430 fibril_rwlock_read_unlock(&device_tree.rwlock); 431 431 } … … 447 447 return; 448 448 } 449 449 450 450 rc = driver_fun_online(&device_tree, fun); 451 451 fun_del_ref(fun); 452 452 453 453 async_answer_0(iid, rc); 454 454 } … … 472 472 return; 473 473 } 474 474 475 475 rc = driver_fun_offline(&device_tree, fun); 476 476 fun_del_ref(fun); 477 477 478 478 async_answer_0(iid, rc); 479 479 } … … 485 485 486 486 fun = find_loc_tree_function(&device_tree, IPC_GET_ARG1(*icall)); 487 487 488 488 if (fun == NULL) { 489 489 async_answer_0(iid, ENOENT); … … 512 512 size_t act_size; 513 513 errno_t rc; 514 514 515 515 if (!async_data_read_receive(&callid, &size)) { 516 516 async_answer_0(iid, EREFUSED); 517 517 return; 518 518 } 519 519 520 520 devman_handle_t *hdl_buf = (devman_handle_t *) malloc(size); 521 521 if (hdl_buf == NULL) { … … 524 524 return; 525 525 } 526 526 527 527 rc = driver_get_list(&drivers_list, hdl_buf, size, &act_size); 528 528 if (rc != EOK) { … … 531 531 return; 532 532 } 533 533 534 534 errno_t retval = async_data_read_finalize(callid, hdl_buf, size); 535 535 free(hdl_buf); 536 536 537 537 async_answer_1(iid, retval, act_size); 538 538 } … … 544 544 size_t act_size; 545 545 errno_t rc; 546 546 547 547 if (!async_data_read_receive(&callid, &size)) { 548 548 async_answer_0(iid, EREFUSED); 549 549 return; 550 550 } 551 551 552 552 driver_t *drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall)); 553 553 if (drv == NULL) { … … 556 556 return; 557 557 } 558 558 559 559 devman_handle_t *hdl_buf = (devman_handle_t *) malloc(size); 560 560 if (hdl_buf == NULL) { … … 563 563 return; 564 564 } 565 565 566 566 rc = driver_get_devices(drv, hdl_buf, size, &act_size); 567 567 if (rc != EOK) { … … 571 571 return; 572 572 } 573 573 574 574 errno_t retval = async_data_read_finalize(callid, hdl_buf, size); 575 575 free(hdl_buf); 576 576 577 577 async_answer_1(iid, retval, act_size); 578 578 } … … 583 583 { 584 584 char *drvname; 585 585 586 586 errno_t rc = async_data_write_accept((void **) &drvname, true, 0, 0, 0, 0); 587 587 if (rc != EOK) { … … 589 589 return; 590 590 } 591 591 592 592 driver_t *driver = driver_find_by_name(&drivers_list, drvname); 593 593 594 594 free(drvname); 595 595 596 596 if (driver == NULL) { 597 597 async_answer_0(iid, ENOENT); 598 598 return; 599 599 } 600 600 601 601 async_answer_1(iid, EOK, driver->handle); 602 602 } … … 697 697 { 698 698 driver_t *drv; 699 699 700 700 drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall)); 701 701 if (drv == NULL) { … … 703 703 return; 704 704 } 705 705 706 706 async_answer_1(iid, EOK, (sysarg_t) drv->state); 707 707 } … … 712 712 driver_t *drv; 713 713 errno_t rc; 714 714 715 715 drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall)); 716 716 if (drv == NULL) { … … 718 718 return; 719 719 } 720 720 721 721 fibril_mutex_lock(&drv->driver_mutex); 722 722 rc = start_driver(drv) ? EOK : EIO; … … 731 731 driver_t *drv; 732 732 errno_t rc; 733 733 734 734 drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall)); 735 735 if (drv == NULL) { … … 737 737 return; 738 738 } 739 739 740 740 fibril_mutex_lock(&drv->driver_mutex); 741 741 rc = stop_driver(drv); … … 750 750 /* Accept connection. */ 751 751 async_answer_0(iid, EOK); 752 752 753 753 while (true) { 754 754 ipc_call_t call; 755 755 ipc_callid_t callid = async_get_call(&call); 756 756 757 757 if (!IPC_GET_IMETHOD(call)) 758 758 break; 759 759 760 760 switch (IPC_GET_IMETHOD(call)) { 761 761 case DEVMAN_DEVICE_GET_HANDLE:
Note:
See TracChangeset
for help on using the changeset viewer.