Changeset cce8a83 in mainline
- Timestamp:
- 2011-08-16T17:31:34Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 45058baa
- Parents:
- 6d605e6
- Location:
- uspace
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified uspace/lib/c/generic/loc.c ¶
r6d605e6 rcce8a83 291 291 } 292 292 293 /** Get service name. 294 * 295 * Provided ID of a service, return its name. 296 * 297 * @param svc_id Service ID 298 * @param name Place to store pointer to new string. Caller should 299 * free it using free(). 300 * @return EOK on success or negative error code 301 */ 302 int loc_service_get_name(service_id_t svc_id, char **name) 303 { 304 async_exch_t *exch; 305 char name_buf[LOC_NAME_MAXLEN + 1]; 306 307 *name = NULL; 308 memset(name_buf, 0, LOC_NAME_MAXLEN + 1); 309 exch = loc_exchange_begin_blocking(LOC_PORT_CONSUMER); 310 311 ipc_call_t answer; 312 aid_t req = async_send_1(exch, LOC_SERVICE_GET_NAME, svc_id, &answer); 313 int rc = async_data_read_start(exch, name_buf, LOC_NAME_MAXLEN); 314 315 loc_exchange_end(exch); 316 317 if (rc != EOK) { 318 async_wait_for(req, NULL); 319 return rc; 320 } 321 322 sysarg_t retval; 323 async_wait_for(req, &retval); 324 325 if (retval != EOK) 326 return retval; 327 328 *name = str_dup(name_buf); 329 if (*name == NULL) 330 return ENOMEM; 331 332 return EOK; 333 } 334 335 293 336 int loc_namespace_get_id(const char *name, service_id_t *handle, 294 337 unsigned int flags) -
TabularUnified uspace/lib/c/include/ipc/loc.h ¶
r6d605e6 rcce8a83 55 55 LOC_SERVICE_UNREGISTER, 56 56 LOC_SERVICE_GET_ID, 57 LOC_SERVICE_GET_NAME, 57 58 LOC_NAMESPACE_GET_ID, 58 59 LOC_CATEGORY_GET_ID, -
TabularUnified uspace/lib/c/include/loc.h ¶
r6d605e6 rcce8a83 52 52 extern int loc_service_get_id(const char *, service_id_t *, 53 53 unsigned int); 54 extern int loc_service_get_name(service_id_t, char **); 54 55 extern int loc_namespace_get_id(const char *, service_id_t *, 55 56 unsigned int); 56 57 extern int loc_category_get_id(const char *, category_id_t *, 57 58 unsigned int); 59 extern int loc_category_get_name(category_id_t, char **); 58 60 extern int loc_category_get_svcs(category_id_t, category_id_t **, size_t *); 59 61 extern loc_object_type_t loc_id_probe(service_id_t); -
TabularUnified uspace/srv/hid/input/ctl/kbdev.c ¶
r6d605e6 rcce8a83 98 98 async_exch_t *exch; 99 99 kbdev_t *kbdev; 100 char *svc_name;101 100 int rc; 102 101 103 if (asprintf(&svc_name, "devname%" PRIun, kdev->service_id) > 0) 104 svc_name = (char *) "unknown"; 105 106 sess = loc_service_connect(EXCHANGE_SERIALIZE, kdev->service_id, 0); 102 sess = loc_service_connect(EXCHANGE_SERIALIZE, kdev->svc_id, 0); 107 103 if (sess == NULL) { 108 104 printf("%s: Failed starting session with '%s.'\n", NAME, 109 svc_name);105 kdev->svc_name); 110 106 return -1; 111 107 } … … 114 110 if (kbdev == NULL) { 115 111 printf("%s: Failed allocating device structure for '%s'.\n", 116 NAME, svc_name);112 NAME, kdev->svc_name); 117 113 return -1; 118 114 } … … 123 119 if (exch == NULL) { 124 120 printf("%s: Failed starting exchange with '%s'.\n", NAME, 125 svc_name);121 kdev->svc_name); 126 122 kbdev_destroy(kbdev); 127 123 return -1; … … 131 127 if (rc != EOK) { 132 128 printf("%s: Failed creating callback connection from '%s'.\n", 133 NAME, svc_name);129 NAME, kdev->svc_name); 134 130 async_exchange_end(exch); 135 131 kbdev_destroy(kbdev); -
TabularUnified uspace/srv/hid/input/generic/input.c ¶
r6d605e6 rcce8a83 276 276 kdev->port_ops = port; 277 277 kdev->ctl_ops = ctl; 278 kdev->s ervice_id = 0;278 kdev->svc_id = 0; 279 279 280 280 /* Initialize port driver. */ … … 304 304 mdev->port_ops = port; 305 305 mdev->proto_ops = proto; 306 mdev->s ervice_id = 0;306 mdev->svc_id = 0; 307 307 308 308 /* Initialize port driver. */ … … 328 328 * 329 329 */ 330 static int kbd_add_kbdev(service_id_t service_id )330 static int kbd_add_kbdev(service_id_t service_id, kbd_dev_t **kdevp) 331 331 { 332 332 kbd_dev_t *kdev = kbd_dev_new(); … … 334 334 return -1; 335 335 336 kdev->s ervice_id = service_id;336 kdev->svc_id = service_id; 337 337 kdev->port_ops = NULL; 338 338 kdev->ctl_ops = &kbdev_ctl; 339 339 340 int rc = loc_service_get_name(service_id, &kdev->svc_name); 341 if (rc != EOK) { 342 kdev->svc_name = NULL; 343 goto fail; 344 } 345 340 346 /* Initialize controller driver. */ 341 347 if ((*kdev->ctl_ops->init)(kdev) != 0) { … … 344 350 345 351 list_append(&kdev->kbd_devs, &kbd_devs); 352 *kdevp = kdev; 346 353 return EOK; 347 354 348 355 fail: 356 if (kdev->svc_name != NULL) 357 free(kdev->svc_name); 349 358 free(kdev); 350 359 return -1; … … 356 365 * 357 366 */ 358 static int mouse_add_mousedev(service_id_t service_id )367 static int mouse_add_mousedev(service_id_t service_id, mouse_dev_t **mdevp) 359 368 { 360 369 mouse_dev_t *mdev = mouse_dev_new(); … … 362 371 return -1; 363 372 364 mdev->s ervice_id = service_id;373 mdev->svc_id = service_id; 365 374 mdev->port_ops = NULL; 366 375 mdev->proto_ops = &mousedev_proto; 367 376 377 int rc = loc_service_get_name(service_id, &mdev->svc_name); 378 if (rc != EOK) { 379 mdev->svc_name = NULL; 380 goto fail; 381 } 382 368 383 /* Initialize controller driver. */ 369 384 if ((*mdev->proto_ops->init)(mdev) != 0) { … … 372 387 373 388 list_append(&mdev->mouse_devs, &mouse_devs); 389 *mdevp = mdev; 374 390 return EOK; 375 391 … … 494 510 size_t count, i; 495 511 bool already_known; 496 const char *dev_name = "todo";497 512 int rc; 498 513 … … 529 544 kbd_dev_t *kdev = list_get_instance(kdev_link, 530 545 kbd_dev_t, kbd_devs); 531 if (kdev->s ervice_id == svcs[i]) {546 if (kdev->svc_id == svcs[i]) { 532 547 already_known = true; 533 548 break; … … 536 551 537 552 if (!already_known) { 538 if (kbd_add_kbdev(svcs[i]) == EOK) { 553 kbd_dev_t *kdev; 554 if (kbd_add_kbdev(svcs[i], &kdev) == EOK) { 539 555 printf("%s: Connected keyboard device '%s'\n", 540 NAME, dev_name);556 NAME, kdev->svc_name); 541 557 } 542 558 } … … 562 578 mouse_dev_t *mdev = list_get_instance(mdev_link, 563 579 mouse_dev_t, mouse_devs); 564 if (mdev->s ervice_id == svcs[i]) {580 if (mdev->svc_id == svcs[i]) { 565 581 already_known = true; 566 582 break; … … 569 585 570 586 if (!already_known) { 571 if (mouse_add_mousedev(svcs[i]) == EOK) { 587 mouse_dev_t *mdev; 588 if (mouse_add_mousedev(svcs[i], &mdev) == EOK) { 572 589 printf("%s: Connected mouse device '%s'\n", 573 NAME, dev_name);590 NAME, mdev->svc_name); 574 591 } 575 592 } -
TabularUnified uspace/srv/hid/input/include/kbd.h ¶
r6d605e6 rcce8a83 51 51 52 52 /** Service ID (only for kbdev devices) */ 53 service_id_t service_id; 53 service_id_t svc_id; 54 55 /** Device service name (only for kbdev devices) */ 56 char *svc_name; 54 57 55 58 /** Port ops */ -
TabularUnified uspace/srv/hid/input/include/mouse.h ¶
r6d605e6 rcce8a83 49 49 50 50 /** Service ID (only for mousedev devices) */ 51 service_id_t service_id; 51 service_id_t svc_id; 52 53 /** Device service name (only for mousedev devices) */ 54 char *svc_name; 52 55 53 56 /** Port ops */ -
TabularUnified uspace/srv/hid/input/proto/mousedev.c ¶
r6d605e6 rcce8a83 117 117 static int mousedev_proto_init(mouse_dev_t *mdev) 118 118 { 119 char *svc_name;120 121 if (asprintf(&svc_name, "devname%" PRIun, mdev->service_id) > 0)122 svc_name = (char *) "unknown";123 124 119 async_sess_t *sess = loc_service_connect(EXCHANGE_SERIALIZE, 125 mdev->s ervice_id, 0);120 mdev->svc_id, 0); 126 121 if (sess == NULL) { 127 printf("%s: Failed starting session with '%s'\n", NAME, svc_name); 122 printf("%s: Failed starting session with '%s'\n", NAME, 123 mdev->svc_name); 128 124 return -1; 129 125 } … … 132 128 if (mousedev == NULL) { 133 129 printf("%s: Failed allocating device structure for '%s'.\n", 134 NAME, svc_name);130 NAME, mdev->svc_name); 135 131 return -1; 136 132 } … … 141 137 if (exch == NULL) { 142 138 printf("%s: Failed starting exchange with '%s'.\n", NAME, 143 svc_name);139 mdev->svc_name); 144 140 mousedev_destroy(mousedev); 145 141 return -1; … … 151 147 if (rc != EOK) { 152 148 printf("%s: Failed creating callback connection from '%s'.\n", 153 NAME, svc_name);149 NAME, mdev->svc_name); 154 150 mousedev_destroy(mousedev); 155 151 return -1; -
TabularUnified uspace/srv/loc/loc.c ¶
r6d605e6 rcce8a83 44 44 #include <bool.h> 45 45 #include <fibril_synch.h> 46 #include <macros.h> 46 47 #include <stdlib.h> 47 48 #include <str.h> … … 532 533 } 533 534 535 static void loc_service_get_name(ipc_callid_t iid, ipc_call_t *icall) 536 { 537 ipc_callid_t callid; 538 size_t size; 539 size_t act_size; 540 loc_service_t *svc; 541 542 if (!async_data_read_receive(&callid, &size)) { 543 async_answer_0(callid, EREFUSED); 544 async_answer_0(iid, EREFUSED); 545 return; 546 } 547 548 fibril_mutex_lock(&services_list_mutex); 549 550 svc = loc_service_find_id(IPC_GET_ARG1(*icall)); 551 if (svc == NULL) { 552 fibril_mutex_unlock(&services_list_mutex); 553 async_answer_0(callid, ENOENT); 554 async_answer_0(iid, ENOENT); 555 return; 556 } 557 558 act_size = str_size(svc->name); 559 if (act_size > size) { 560 fibril_mutex_unlock(&services_list_mutex); 561 async_answer_0(callid, EOVERFLOW); 562 async_answer_0(iid, EOVERFLOW); 563 return; 564 } 565 566 sysarg_t retval = async_data_read_finalize(callid, svc->name, 567 min(size, act_size)); 568 569 fibril_mutex_unlock(&services_list_mutex); 570 571 async_answer_0(iid, retval); 572 } 573 574 534 575 /** Connect client to the service. 535 576 * … … 1197 1238 loc_service_get_id(callid, &call); 1198 1239 break; 1240 case LOC_SERVICE_GET_NAME: 1241 loc_service_get_name(callid, &call); 1242 break; 1199 1243 case LOC_NAMESPACE_GET_ID: 1200 1244 loc_namespace_get_id(callid, &call);
Note:
See TracChangeset
for help on using the changeset viewer.