Changeset 984a9ba in mainline for uspace/lib/graph/graph.c
- Timestamp:
- 2018-07-05T09:34:09Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 63d46341
- Parents:
- 76f566d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/graph/graph.c
r76f566d r984a9ba 239 239 } 240 240 241 static void vs_claim(visualizer_t *vs, cap_call_handle_t icall_handle,ipc_call_t *icall)241 static void vs_claim(visualizer_t *vs, ipc_call_t *icall) 242 242 { 243 243 vs->client_side_handle = IPC_GET_ARG1(*icall); 244 244 errno_t rc = vs->ops.claim(vs); 245 async_answer_0(icall _handle, rc);246 } 247 248 static void vs_yield(visualizer_t *vs, cap_call_handle_t icall_handle,ipc_call_t *icall)245 async_answer_0(icall, rc); 246 } 247 248 static void vs_yield(visualizer_t *vs, ipc_call_t *icall) 249 249 { 250 250 /* Deallocate resources for the current mode. */ … … 266 266 vs->mode_set = false; 267 267 268 async_answer_0(icall_handle, rc); 269 } 270 271 static void vs_enumerate_modes(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall) 272 { 273 cap_call_handle_t chandle; 268 async_answer_0(icall, rc); 269 } 270 271 static void vs_enumerate_modes(visualizer_t *vs, ipc_call_t *icall) 272 { 274 273 size_t len; 275 274 276 if (!async_data_read_receive(&chandle, &len)) { 277 async_answer_0(chandle, EREFUSED); 278 async_answer_0(icall_handle, EREFUSED); 275 ipc_call_t call; 276 if (!async_data_read_receive(&call, &len)) { 277 async_answer_0(&call, EREFUSED); 278 async_answer_0(icall, EREFUSED); 279 279 return; 280 280 } … … 287 287 list_get_instance(link, vslmode_list_element_t, link); 288 288 289 errno_t rc = async_data_read_finalize( chandle, &mode_elem->mode, len);290 async_answer_0(icall _handle, rc);289 errno_t rc = async_data_read_finalize(&call, &mode_elem->mode, len); 290 async_answer_0(icall, rc); 291 291 } else { 292 async_answer_0( chandle, ENOENT);293 async_answer_0(icall _handle, ENOENT);292 async_answer_0(&call, ENOENT); 293 async_answer_0(icall, ENOENT); 294 294 } 295 295 … … 297 297 } 298 298 299 static void vs_get_default_mode(visualizer_t *vs, cap_call_handle_t icall_handle,ipc_call_t *icall)300 { 301 cap_call_handle_t chandle;299 static void vs_get_default_mode(visualizer_t *vs, ipc_call_t *icall) 300 { 301 ipc_call_t call; 302 302 size_t len; 303 304 if (!async_data_read_receive(&chandle, &len)) { 305 async_answer_0(chandle, EREFUSED); 306 async_answer_0(icall_handle, EREFUSED); 303 if (!async_data_read_receive(&call, &len)) { 304 async_answer_0(&call, EREFUSED); 305 async_answer_0(icall, EREFUSED); 307 306 return; 308 307 } … … 319 318 320 319 if (mode_elem != NULL) { 321 errno_t rc = async_data_read_finalize( chandle, &mode_elem->mode, len);322 async_answer_0(icall _handle, rc);320 errno_t rc = async_data_read_finalize(&call, &mode_elem->mode, len); 321 async_answer_0(icall, rc); 323 322 } else { 324 323 fibril_mutex_unlock(&vs->mode_mtx); 325 async_answer_0( chandle, ENOENT);326 async_answer_0(icall _handle, ENOENT);324 async_answer_0(&call, ENOENT); 325 async_answer_0(icall, ENOENT); 327 326 } 328 327 … … 330 329 } 331 330 332 static void vs_get_current_mode(visualizer_t *vs, cap_call_handle_t icall_handle,ipc_call_t *icall)333 { 334 cap_call_handle_t chandle;331 static void vs_get_current_mode(visualizer_t *vs, ipc_call_t *icall) 332 { 333 ipc_call_t call; 335 334 size_t len; 336 337 if (!async_data_read_receive(&chandle, &len)) { 338 async_answer_0(chandle, EREFUSED); 339 async_answer_0(icall_handle, EREFUSED); 335 if (!async_data_read_receive(&call, &len)) { 336 async_answer_0(&call, EREFUSED); 337 async_answer_0(icall, EREFUSED); 340 338 return; 341 339 } 342 340 343 341 if (vs->mode_set) { 344 errno_t rc = async_data_read_finalize( chandle, &vs->cur_mode, len);345 async_answer_0(icall _handle, rc);342 errno_t rc = async_data_read_finalize(&call, &vs->cur_mode, len); 343 async_answer_0(icall, rc); 346 344 } else { 347 async_answer_0( chandle, ENOENT);348 async_answer_0(icall _handle, ENOENT);349 } 350 } 351 352 static void vs_get_mode(visualizer_t *vs, cap_call_handle_t icall_handle,ipc_call_t *icall)353 { 354 cap_call_handle_t chandle;345 async_answer_0(&call, ENOENT); 346 async_answer_0(icall, ENOENT); 347 } 348 } 349 350 static void vs_get_mode(visualizer_t *vs, ipc_call_t *icall) 351 { 352 ipc_call_t call; 355 353 size_t len; 356 357 if (!async_data_read_receive(&chandle, &len)) { 358 async_answer_0(chandle, EREFUSED); 359 async_answer_0(icall_handle, EREFUSED); 354 if (!async_data_read_receive(&call, &len)) { 355 async_answer_0(&call, EREFUSED); 356 async_answer_0(icall, EREFUSED); 360 357 return; 361 358 } … … 374 371 375 372 if (mode_elem != NULL) { 376 errno_t rc = async_data_read_finalize( chandle, &mode_elem->mode, len);377 async_answer_0(icall _handle, rc);373 errno_t rc = async_data_read_finalize(&call, &mode_elem->mode, len); 374 async_answer_0(icall, rc); 378 375 } else { 379 async_answer_0( chandle, ENOENT);380 async_answer_0(icall _handle, ENOENT);376 async_answer_0(&call, ENOENT); 377 async_answer_0(icall, ENOENT); 381 378 } 382 379 … … 384 381 } 385 382 386 static void vs_set_mode(visualizer_t *vs, cap_call_handle_t icall_handle,ipc_call_t *icall)387 { 388 cap_call_handle_t chandle;383 static void vs_set_mode(visualizer_t *vs, ipc_call_t *icall) 384 { 385 ipc_call_t call; 389 386 size_t size; 390 387 unsigned int flags; 391 388 392 389 /* Retrieve the shared cell storage for the new mode. */ 393 if (!async_share_out_receive(&c handle, &size, &flags)) {394 async_answer_0( chandle, EREFUSED);395 async_answer_0(icall _handle, EREFUSED);390 if (!async_share_out_receive(&call, &size, &flags)) { 391 async_answer_0(&call, EREFUSED); 392 async_answer_0(icall, EREFUSED); 396 393 return; 397 394 } … … 414 411 if (mode_elem == NULL) { 415 412 fibril_mutex_unlock(&vs->mode_mtx); 416 async_answer_0( chandle, ENOENT);417 async_answer_0(icall _handle, ENOENT);413 async_answer_0(&call, ENOENT); 414 async_answer_0(icall, ENOENT); 418 415 return; 419 416 } … … 425 422 /* Check whether the mode is still up-to-date. */ 426 423 if (new_mode.version != mode_version) { 427 async_answer_0( chandle, EINVAL);428 async_answer_0(icall _handle, EINVAL);424 async_answer_0(&call, EINVAL); 425 async_answer_0(icall, EINVAL); 429 426 return; 430 427 } 431 428 432 429 void *new_cell_storage; 433 errno_t rc = async_share_out_finalize( chandle, &new_cell_storage);430 errno_t rc = async_share_out_finalize(&call, &new_cell_storage); 434 431 if ((rc != EOK) || (new_cell_storage == AS_MAP_FAILED)) { 435 async_answer_0(icall _handle, ENOMEM);432 async_answer_0(icall, ENOMEM); 436 433 return; 437 434 } … … 443 440 if (rc != EOK) { 444 441 as_area_destroy(new_cell_storage); 445 async_answer_0(icall _handle, ENOMEM);442 async_answer_0(icall, ENOMEM); 446 443 return; 447 444 } … … 466 463 vs->mode_set = true; 467 464 468 async_answer_0(icall _handle, EOK);469 } 470 471 static void vs_update_damaged_region(visualizer_t *vs, cap_call_handle_t icall_handle,ipc_call_t *icall)465 async_answer_0(icall, EOK); 466 } 467 468 static void vs_update_damaged_region(visualizer_t *vs, ipc_call_t *icall) 472 469 { 473 470 sysarg_t x_offset = (IPC_GET_ARG5(*icall) >> 16); … … 478 475 IPC_GET_ARG3(*icall), IPC_GET_ARG4(*icall), 479 476 x_offset, y_offset); 480 async_answer_0(icall _handle, rc);481 } 482 483 static void vs_suspend(visualizer_t *vs, cap_call_handle_t icall_handle,ipc_call_t *icall)477 async_answer_0(icall, rc); 478 } 479 480 static void vs_suspend(visualizer_t *vs, ipc_call_t *icall) 484 481 { 485 482 errno_t rc = vs->ops.suspend(vs); 486 async_answer_0(icall _handle, rc);487 } 488 489 static void vs_wakeup(visualizer_t *vs, cap_call_handle_t icall_handle,ipc_call_t *icall)483 async_answer_0(icall, rc); 484 } 485 486 static void vs_wakeup(visualizer_t *vs, ipc_call_t *icall) 490 487 { 491 488 errno_t rc = vs->ops.wakeup(vs); 492 async_answer_0(icall_handle, rc); 493 } 494 495 void graph_visualizer_connection(visualizer_t *vs, 496 cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg) 497 { 498 ipc_call_t call; 499 cap_call_handle_t chandle; 500 489 async_answer_0(icall, rc); 490 } 491 492 void graph_visualizer_connection(visualizer_t *vs, ipc_call_t *icall, void *arg) 493 { 501 494 /* Claim the visualizer. */ 502 495 if (!cas(&vs->ref_cnt, 0, 1)) { 503 async_answer_0(icall _handle, ELIMIT);496 async_answer_0(icall, ELIMIT); 504 497 return; 505 498 } 506 499 507 500 /* Accept the connection. */ 508 async_answer_0(icall _handle, EOK);501 async_answer_0(icall, EOK); 509 502 510 503 /* Establish callback session. */ 511 chandle = async_get_call(&call); 504 ipc_call_t call; 505 async_get_call(&call); 512 506 vs->notif_sess = async_callback_receive_start(EXCHANGE_SERIALIZE, &call); 513 507 if (vs->notif_sess != NULL) 514 async_answer_0( chandle, EOK);508 async_answer_0(&call, EOK); 515 509 else 516 async_answer_0( chandle, ELIMIT);510 async_answer_0(&call, ELIMIT); 517 511 518 512 /* Enter command loop. */ 519 513 while (true) { 520 chandle =async_get_call(&call);514 async_get_call(&call); 521 515 522 516 if (!IPC_GET_IMETHOD(call)) { 523 async_answer_0( chandle, EINVAL);517 async_answer_0(&call, EINVAL); 524 518 break; 525 519 } … … 527 521 switch (IPC_GET_IMETHOD(call)) { 528 522 case VISUALIZER_CLAIM: 529 vs_claim(vs, chandle,&call);523 vs_claim(vs, &call); 530 524 break; 531 525 case VISUALIZER_YIELD: 532 vs_yield(vs, chandle,&call);526 vs_yield(vs, &call); 533 527 goto terminate; 534 528 case VISUALIZER_ENUMERATE_MODES: 535 vs_enumerate_modes(vs, chandle,&call);529 vs_enumerate_modes(vs, &call); 536 530 break; 537 531 case VISUALIZER_GET_DEFAULT_MODE: 538 vs_get_default_mode(vs, chandle,&call);532 vs_get_default_mode(vs, &call); 539 533 break; 540 534 case VISUALIZER_GET_CURRENT_MODE: 541 vs_get_current_mode(vs, chandle,&call);535 vs_get_current_mode(vs, &call); 542 536 break; 543 537 case VISUALIZER_GET_MODE: 544 vs_get_mode(vs, chandle,&call);538 vs_get_mode(vs, &call); 545 539 break; 546 540 case VISUALIZER_SET_MODE: 547 vs_set_mode(vs, chandle,&call);541 vs_set_mode(vs, &call); 548 542 break; 549 543 case VISUALIZER_UPDATE_DAMAGED_REGION: 550 vs_update_damaged_region(vs, chandle,&call);544 vs_update_damaged_region(vs, &call); 551 545 break; 552 546 case VISUALIZER_SUSPEND: 553 vs_suspend(vs, chandle,&call);547 vs_suspend(vs, &call); 554 548 break; 555 549 case VISUALIZER_WAKE_UP: 556 vs_wakeup(vs, chandle,&call);550 vs_wakeup(vs, &call); 557 551 break; 558 552 default: 559 async_answer_0( chandle, EINVAL);553 async_answer_0(&call, EINVAL); 560 554 goto terminate; 561 555 } … … 568 562 } 569 563 570 void graph_renderer_connection(renderer_t *rnd, 571 cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg) 564 void graph_renderer_connection(renderer_t *rnd, ipc_call_t *icall, void *arg) 572 565 { 573 566 // TODO 574 575 ipc_call_t call;576 cap_call_handle_t chandle;577 567 578 568 /* Accept the connection. */ 579 569 atomic_inc(&rnd->ref_cnt); 580 async_answer_0(icall _handle, EOK);570 async_answer_0(icall, EOK); 581 571 582 572 /* Enter command loop. */ 583 573 while (true) { 584 chandle = async_get_call(&call); 574 ipc_call_t call; 575 async_get_call(&call); 585 576 586 577 if (!IPC_GET_IMETHOD(call)) { 587 async_answer_0( chandle, EINVAL);578 async_answer_0(&call, EINVAL); 588 579 break; 589 580 } … … 591 582 switch (IPC_GET_IMETHOD(call)) { 592 583 default: 593 async_answer_0( chandle, EINVAL);584 async_answer_0(&call, EINVAL); 594 585 goto terminate; 595 586 } … … 600 591 } 601 592 602 void graph_client_connection( cap_call_handle_t icall_handle,ipc_call_t *icall, void *arg)593 void graph_client_connection(ipc_call_t *icall, void *arg) 603 594 { 604 595 /* Find the visualizer or renderer with the given service ID. */ … … 607 598 608 599 if (vs != NULL) 609 graph_visualizer_connection(vs, icall _handle, icall, arg);600 graph_visualizer_connection(vs, icall, arg); 610 601 else if (rnd != NULL) 611 graph_renderer_connection(rnd, icall _handle, icall, arg);602 graph_renderer_connection(rnd, icall, arg); 612 603 else 613 async_answer_0(icall _handle, ENOENT);604 async_answer_0(icall, ENOENT); 614 605 } 615 606
Note:
See TracChangeset
for help on using the changeset viewer.