Changeset b3eeae5 in mainline for uspace/lib/dispcfg
- Timestamp:
- 2023-01-15T09:24:50Z (3 years ago)
- Branches:
- master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 46a47c0
- Parents:
- 46b02cb
- Location:
- uspace/lib/dispcfg
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/dispcfg/include/dispcfg.h
r46b02cb rb3eeae5 49 49 extern errno_t dispcfg_seat_create(dispcfg_t *, const char *, sysarg_t *); 50 50 extern errno_t dispcfg_seat_delete(dispcfg_t *, sysarg_t); 51 extern errno_t dispcfg_dev_assign(dispcfg_t *, sysarg_t, sysarg_t); 52 extern errno_t dispcfg_dev_unassign(dispcfg_t *, sysarg_t); 51 53 52 54 #endif -
uspace/lib/dispcfg/include/dispcfg_srv.h
r46b02cb rb3eeae5 54 54 errno_t (*seat_create)(void *, const char *, sysarg_t *); 55 55 errno_t (*seat_delete)(void *, sysarg_t); 56 errno_t (*dev_assign)(void *, sysarg_t, sysarg_t); 57 errno_t (*dev_unassign)(void *, sysarg_t); 56 58 errno_t (*get_event)(void *, dispcfg_ev_t *); 57 59 }; -
uspace/lib/dispcfg/include/ipc/dispcfg.h
r46b02cb rb3eeae5 44 44 DISPCFG_SEAT_CREATE, 45 45 DISPCFG_SEAT_DELETE, 46 DISPCFG_DEV_ASSIGN, 47 DISPCFG_DEV_UNASSIGN, 46 48 DISPCFG_GET_EVENT, 47 49 } dispcfg_request_t; -
uspace/lib/dispcfg/src/dispcfg.c
r46b02cb rb3eeae5 335 335 exch = async_exchange_begin(dispcfg->sess); 336 336 rc = async_req_1_0(exch, DISPCFG_SEAT_DELETE, seat_id); 337 338 async_exchange_end(exch); 339 return rc; 340 } 341 342 /** Assign device to seat. 343 * 344 * @param dispcfg Display configuration 345 * @param svc_id Device service ID 346 * @param seat_id Seat ID 347 * @return EOK on success or an error code 348 */ 349 errno_t dispcfg_dev_assign(dispcfg_t *dispcfg, sysarg_t svc_id, 350 sysarg_t seat_id) 351 { 352 async_exch_t *exch; 353 errno_t rc; 354 355 exch = async_exchange_begin(dispcfg->sess); 356 rc = async_req_2_0(exch, DISPCFG_DEV_ASSIGN, svc_id, seat_id); 357 358 async_exchange_end(exch); 359 return rc; 360 } 361 362 /** Unassign device from any specific seat. 363 * 364 * The device will fall back to the default seat. 365 * 366 * @param dispcfg Display configuration 367 * @param svc_id Device service ID 368 * @return EOK on success or an error code 369 */ 370 errno_t dispcfg_dev_unassign(dispcfg_t *dispcfg, sysarg_t svc_id) 371 { 372 async_exch_t *exch; 373 errno_t rc; 374 375 exch = async_exchange_begin(dispcfg->sess); 376 rc = async_req_1_0(exch, DISPCFG_DEV_UNASSIGN, svc_id); 337 377 338 378 async_exchange_end(exch); -
uspace/lib/dispcfg/src/dispcfg_srv.c
r46b02cb rb3eeae5 259 259 } 260 260 261 static void dispcfg_dev_assign_srv(dispcfg_srv_t *srv, ipc_call_t *icall) 262 { 263 sysarg_t svc_id; 264 sysarg_t seat_id; 265 errno_t rc; 266 267 svc_id = ipc_get_arg1(icall); 268 seat_id = ipc_get_arg2(icall); 269 270 if (srv->ops->dev_assign == NULL) { 271 async_answer_0(icall, ENOTSUP); 272 return; 273 } 274 275 rc = srv->ops->dev_assign(srv->arg, svc_id, seat_id); 276 async_answer_0(icall, rc); 277 } 278 279 static void dispcfg_dev_unassign_srv(dispcfg_srv_t *srv, ipc_call_t *icall) 280 { 281 sysarg_t svc_id; 282 errno_t rc; 283 284 svc_id = ipc_get_arg1(icall); 285 286 if (srv->ops->dev_unassign == NULL) { 287 async_answer_0(icall, ENOTSUP); 288 return; 289 } 290 291 rc = srv->ops->dev_unassign(srv->arg, svc_id); 292 async_answer_0(icall, rc); 293 } 294 261 295 static void dispcfg_get_event_srv(dispcfg_srv_t *srv, ipc_call_t *icall) 262 296 { … … 332 366 case DISPCFG_SEAT_DELETE: 333 367 dispcfg_seat_delete_srv(srv, &call); 368 break; 369 case DISPCFG_DEV_ASSIGN: 370 dispcfg_dev_assign_srv(srv, &call); 371 break; 372 case DISPCFG_DEV_UNASSIGN: 373 dispcfg_dev_unassign_srv(srv, &call); 334 374 break; 335 375 case DISPCFG_GET_EVENT: -
uspace/lib/dispcfg/test/dispcfg.c
r46b02cb rb3eeae5 50 50 static errno_t test_seat_create(void *, const char *, sysarg_t *); 51 51 static errno_t test_seat_delete(void *, sysarg_t); 52 static errno_t test_dev_assign(void *, sysarg_t, sysarg_t); 53 static errno_t test_dev_unassign(void *, sysarg_t); 52 54 static errno_t test_get_event(void *, dispcfg_ev_t *); 53 55 … … 60 62 .seat_create = test_seat_create, 61 63 .seat_delete = test_seat_delete, 64 .dev_assign = test_dev_assign, 65 .dev_unassign = test_dev_unassign, 62 66 .get_event = test_get_event 63 67 }; … … 91 95 bool seat_delete_called; 92 96 sysarg_t seat_delete_seat_id; 97 98 bool dev_assign_called; 99 sysarg_t dev_assign_svc_id; 100 sysarg_t dev_assign_seat_id; 101 102 bool dev_unassign_called; 103 sysarg_t dev_unassign_svc_id; 93 104 94 105 bool get_event_called; … … 443 454 } 444 455 456 /** dispcfg_dev_assign() with server returning error response works */ 457 PCUT_TEST(dev_assign_failure) 458 { 459 errno_t rc; 460 service_id_t sid; 461 dispcfg_t *dispcfg = NULL; 462 sysarg_t svc_id; 463 sysarg_t seat_id; 464 test_response_t resp; 465 466 async_set_fallback_port_handler(test_dispcfg_conn, &resp); 467 468 // FIXME This causes this test to be non-reentrant! 469 rc = loc_server_register(test_dispcfg_server); 470 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 471 472 rc = loc_service_register(test_dispcfg_svc, &sid); 473 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 474 475 rc = dispcfg_open(test_dispcfg_svc, NULL, NULL, &dispcfg); 476 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 477 PCUT_ASSERT_NOT_NULL(dispcfg); 478 479 svc_id = 12; 480 seat_id = 13; 481 resp.rc = ENOMEM; 482 resp.dev_assign_called = false; 483 484 rc = dispcfg_dev_assign(dispcfg, svc_id, seat_id); 485 PCUT_ASSERT_TRUE(resp.dev_assign_called); 486 PCUT_ASSERT_INT_EQUALS(svc_id, resp.dev_assign_svc_id); 487 PCUT_ASSERT_INT_EQUALS(seat_id, resp.dev_assign_seat_id); 488 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 489 490 dispcfg_close(dispcfg); 491 rc = loc_service_unregister(sid); 492 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 493 } 494 495 /** dispcfg_dev_assign() with server returning success response works */ 496 PCUT_TEST(dev_assign_success) 497 { 498 errno_t rc; 499 service_id_t sid; 500 dispcfg_t *dispcfg = NULL; 501 sysarg_t svc_id; 502 sysarg_t seat_id; 503 test_response_t resp; 504 505 async_set_fallback_port_handler(test_dispcfg_conn, &resp); 506 507 // FIXME This causes this test to be non-reentrant! 508 rc = loc_server_register(test_dispcfg_server); 509 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 510 511 rc = loc_service_register(test_dispcfg_svc, &sid); 512 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 513 514 rc = dispcfg_open(test_dispcfg_svc, NULL, NULL, &dispcfg); 515 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 516 PCUT_ASSERT_NOT_NULL(dispcfg); 517 518 svc_id = 12; 519 seat_id = 13; 520 resp.rc = EOK; 521 resp.dev_assign_called = false; 522 523 rc = dispcfg_dev_assign(dispcfg, svc_id, seat_id); 524 PCUT_ASSERT_TRUE(resp.dev_assign_called); 525 PCUT_ASSERT_INT_EQUALS(svc_id, resp.dev_assign_svc_id); 526 PCUT_ASSERT_INT_EQUALS(seat_id, resp.dev_assign_seat_id); 527 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 528 529 dispcfg_close(dispcfg); 530 rc = loc_service_unregister(sid); 531 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 532 } 533 534 /** dispcfg_dev_unassign() with server returning error response works */ 535 PCUT_TEST(dev_unassign_failure) 536 { 537 errno_t rc; 538 service_id_t sid; 539 dispcfg_t *dispcfg = NULL; 540 sysarg_t svc_id; 541 test_response_t resp; 542 543 async_set_fallback_port_handler(test_dispcfg_conn, &resp); 544 545 // FIXME This causes this test to be non-reentrant! 546 rc = loc_server_register(test_dispcfg_server); 547 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 548 549 rc = loc_service_register(test_dispcfg_svc, &sid); 550 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 551 552 rc = dispcfg_open(test_dispcfg_svc, NULL, NULL, &dispcfg); 553 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 554 PCUT_ASSERT_NOT_NULL(dispcfg); 555 556 svc_id = 12; 557 resp.rc = ENOMEM; 558 resp.dev_unassign_called = false; 559 560 rc = dispcfg_dev_unassign(dispcfg, svc_id); 561 PCUT_ASSERT_TRUE(resp.dev_unassign_called); 562 PCUT_ASSERT_INT_EQUALS(svc_id, resp.dev_unassign_svc_id); 563 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 564 565 dispcfg_close(dispcfg); 566 rc = loc_service_unregister(sid); 567 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 568 } 569 570 /** dispcfg_dev_unassign() with server returning success response works */ 571 PCUT_TEST(dev_unassign_success) 572 { 573 errno_t rc; 574 service_id_t sid; 575 dispcfg_t *dispcfg = NULL; 576 sysarg_t svc_id; 577 test_response_t resp; 578 579 async_set_fallback_port_handler(test_dispcfg_conn, &resp); 580 581 // FIXME This causes this test to be non-reentrant! 582 rc = loc_server_register(test_dispcfg_server); 583 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 584 585 rc = loc_service_register(test_dispcfg_svc, &sid); 586 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 587 588 rc = dispcfg_open(test_dispcfg_svc, NULL, NULL, &dispcfg); 589 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 590 PCUT_ASSERT_NOT_NULL(dispcfg); 591 592 svc_id = 12; 593 resp.rc = EOK; 594 resp.dev_unassign_called = false; 595 596 rc = dispcfg_dev_unassign(dispcfg, svc_id); 597 PCUT_ASSERT_TRUE(resp.dev_unassign_called); 598 PCUT_ASSERT_INT_EQUALS(svc_id, resp.dev_unassign_svc_id); 599 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 600 601 dispcfg_close(dispcfg); 602 rc = loc_service_unregister(sid); 603 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 604 } 605 445 606 /** Window added event can be delivered from server to client callback function */ 446 607 PCUT_TEST(seat_added_deliver) … … 628 789 } 629 790 791 static errno_t test_dev_assign(void *arg, sysarg_t svc_id, sysarg_t seat_id) 792 { 793 test_response_t *resp = (test_response_t *) arg; 794 795 resp->dev_assign_called = true; 796 resp->dev_assign_svc_id = svc_id; 797 resp->dev_assign_seat_id = seat_id; 798 return resp->rc; 799 } 800 801 static errno_t test_dev_unassign(void *arg, sysarg_t svc_id) 802 { 803 test_response_t *resp = (test_response_t *) arg; 804 805 resp->dev_unassign_called = true; 806 resp->dev_unassign_svc_id = svc_id; 807 return resp->rc; 808 } 809 630 810 static errno_t test_get_event(void *arg, dispcfg_ev_t *event) 631 811 {
Note:
See TracChangeset
for help on using the changeset viewer.