Changes in uspace/srv/devman/main.c [fc8c2b6:9b415c9] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/devman/main.c
rfc8c2b6 r9b415c9 43 43 #include <stdio.h> 44 44 #include <errno.h> 45 #include <str_error.h> 45 46 #include <bool.h> 46 47 #include <fibril_synch.h> … … 51 52 #include <sys/stat.h> 52 53 #include <ctype.h> 54 #include <io/log.h> 53 55 #include <ipc/devman.h> 54 56 #include <ipc/driver.h> … … 71 73 driver_t *driver = NULL; 72 74 73 printf(NAME ": devman_driver_register\n");75 log_msg(LVL_DEBUG, "devman_driver_register\n"); 74 76 75 77 iid = async_get_call(&icall); … … 88 90 } 89 91 90 printf(NAME ": the %s driver is trying to register by the service.\n",92 log_msg(LVL_DEBUG, "The `%s' driver is trying to register.\n", 91 93 drv_name); 92 94 … … 95 97 96 98 if (driver == NULL) { 97 printf(NAME ": no driver named %swas found.\n", drv_name);99 log_msg(LVL_ERROR, "No driver named `%s' was found.\n", drv_name); 98 100 free(drv_name); 99 101 drv_name = NULL; … … 106 108 107 109 /* Create connection to the driver. */ 108 printf(NAME ": creating connection to the %s driver.\n", driver->name); 110 log_msg(LVL_DEBUG, "Creating connection to the `%s' driver.\n", 111 driver->name); 109 112 ipc_call_t call; 110 113 ipc_callid_t callid = async_get_call(&call); … … 118 121 set_driver_phone(driver, IPC_GET_ARG5(call)); 119 122 120 printf(NAME ": the %s driver was successfully registered as running.\n", 123 log_msg(LVL_NOTE, 124 "The `%s' driver was successfully registered as running.\n", 121 125 driver->name); 122 126 … … 142 146 callid = async_get_call(&call); 143 147 if (DEVMAN_ADD_MATCH_ID != IPC_GET_IMETHOD(call)) { 144 printf(NAME ": ERROR: devman_receive_match_id - invalid "145 " protocol.\n");148 log_msg(LVL_ERROR, 149 "Invalid protocol when trying to receive match id.\n"); 146 150 async_answer_0(callid, EINVAL); 147 151 delete_match_id(match_id); … … 150 154 151 155 if (match_id == NULL) { 152 printf(NAME ": ERROR: devman_receive_match_id - failed to " 153 "allocate match id.\n"); 156 log_msg(LVL_ERROR, "Failed to allocate match id.\n"); 154 157 async_answer_0(callid, ENOMEM); 155 158 return ENOMEM; … … 165 168 if (rc != EOK) { 166 169 delete_match_id(match_id); 167 printf(NAME ": devman_receive_match_id - failed to receive "168 "match id string.\n");170 log_msg(LVL_ERROR, "Failed to receive match id string: %s.\n", 171 str_error(rc)); 169 172 return rc; 170 173 } … … 172 175 list_append(&match_id->link, &match_ids->ids); 173 176 174 printf(NAME ": received match id '%s', score = %d\n",177 log_msg(LVL_DEBUG, "Received match id `%s', score %d.\n", 175 178 match_id->id, match_id->score); 176 179 return rc; … … 228 231 if (ftype != fun_inner && ftype != fun_exposed) { 229 232 /* Unknown function type */ 230 printf(NAME ": Error, unknown function type provided by driver!\n"); 233 log_msg(LVL_ERROR, 234 "Unknown function type %d provided by driver.\n", 235 (int) ftype); 231 236 232 237 fibril_rwlock_write_unlock(&tree->rwlock); … … 243 248 } 244 249 245 /* Check that function with same name is not there already. */246 if (find_fun_node_in_device(pdev, fun_name) != NULL) {247 fibril_rwlock_write_unlock(&tree->rwlock);248 async_answer_0(callid, EEXISTS);249 printf(NAME ": Warning, driver tried to register `%s' twice.\n",250 fun_name);251 free(fun_name);252 return;253 }254 255 250 fun_node_t *fun = create_fun_node(); 256 251 if (!insert_fun_node(&device_tree, fun, fun_name, pdev)) { … … 275 270 fibril_rwlock_write_unlock(&tree->rwlock); 276 271 277 printf(NAME ": devman_add_function %s\n", fun->pathname);272 log_msg(LVL_DEBUG, "devman_add_function(fun=\"%s\")\n", fun->pathname); 278 273 279 274 devman_receive_match_ids(match_count, &fun->match_ids); … … 357 352 devmap_register_class_dev(class_info); 358 353 359 printf(NAME ": function'%s' added to class '%s', class name '%s' was "360 "asigned to it\n",fun->pathname, class_name, class_info->dev_name);354 log_msg(LVL_NOTE, "Function `%s' added to class `%s' as `%s'.\n", 355 fun->pathname, class_name, class_info->dev_name); 361 356 362 357 async_answer_0(callid, EOK); … … 373 368 374 369 initialize_running_driver(driver, &device_tree); 375 printf(NAME ": the %s driver was successfully initialized.\n",370 log_msg(LVL_DEBUG, "The `%s` driver was successfully initialized.\n", 376 371 driver->name); 377 372 return 0; … … 395 390 fid_t fid = fibril_create(init_running_drv, driver); 396 391 if (fid == 0) { 397 printf(NAME ": Error creating fibril for the initialization of "398 " the newly registered running driver.\n");392 log_msg(LVL_ERROR, "Failed to create initialization fibril " \ 393 "for driver `%s' .\n", driver->name); 399 394 return; 400 395 } … … 448 443 } 449 444 450 /** Find handle for the device instance identified by device class name. */451 static void devman_function_get_handle_by_class(ipc_callid_t iid,452 ipc_call_t *icall)453 {454 char *classname;455 char *devname;456 457 int rc = async_data_write_accept((void **) &classname, true, 0, 0, 0, 0);458 if (rc != EOK) {459 async_answer_0(iid, rc);460 return;461 }462 rc = async_data_write_accept((void **) &devname, true, 0, 0, 0, 0);463 if (rc != EOK) {464 free(classname);465 async_answer_0(iid, rc);466 return;467 }468 469 470 fun_node_t *fun = find_fun_node_by_class(&class_list,471 classname, devname);472 473 free(classname);474 free(devname);475 476 if (fun == NULL) {477 async_answer_0(iid, ENOENT);478 return;479 }480 481 async_answer_1(iid, EOK, fun->handle);482 }483 484 445 485 446 /** Function for handling connections from a client to the device manager. */ … … 501 462 devman_function_get_handle(callid, &call); 502 463 break; 503 case DEVMAN_DEVICE_GET_HANDLE_BY_CLASS:504 devman_function_get_handle_by_class(callid, &call);505 break;506 464 default: 507 465 async_answer_0(callid, ENOENT); … … 531 489 */ 532 490 if (dev == NULL) { 533 printf(NAME ": devman_forward error - no device or function with"534 " handle %" PRIun " was found.\n", handle);491 log_msg(LVL_ERROR, "IPC forwarding failed - no device or " 492 "function with handle %" PRIun " was found.\n", handle); 535 493 async_answer_0(iid, ENOENT); 536 494 return; … … 538 496 539 497 if (fun == NULL && !drv_to_parent) { 540 printf(NAME ": devman_forward error - cannot connect to " 541 "handle %" PRIun ", refers to a device.\n", handle); 498 log_msg(LVL_ERROR, NAME ": devman_forward error - cannot " 499 "connect to handle %" PRIun ", refers to a device.\n", 500 handle); 542 501 async_answer_0(iid, ENOENT); 543 502 return; … … 560 519 561 520 if (driver == NULL) { 562 printf(NAME ": devman_forward error - the device is not in %" PRIun563 " usable state.\n", handle);521 log_msg(LVL_ERROR, "IPC forwarding refused - " \ 522 "the device %" PRIun " is not in usable state.\n", handle); 564 523 async_answer_0(iid, ENOENT); 565 524 return; … … 573 532 574 533 if (driver->phone <= 0) { 575 printf(NAME ": devman_forward: cound not forward to driver %s ",576 driver->name);577 printf("the driver's phone is %" PRIun ").\n",driver->phone);534 log_msg(LVL_ERROR, 535 "Could not forward to driver `%s' (phone is %d).\n", 536 driver->name, (int) driver->phone); 578 537 async_answer_0(iid, EINVAL); 579 538 return; … … 581 540 582 541 if (fun != NULL) { 583 printf(NAME ": devman_forward: forward connection to function %s to " 584 "driver %s.\n", fun->pathname, driver->name); 542 log_msg(LVL_DEBUG, 543 "Forwarding request for `%s' function to driver `%s'.\n", 544 fun->pathname, driver->name); 585 545 } else { 586 printf(NAME ": devman_forward: forward connection to device %s to " 587 "driver %s.\n", dev->pfun->pathname, driver->name); 546 log_msg(LVL_DEBUG, 547 "Forwarding request for `%s' device to driver `%s'.\n", 548 dev->pfun->pathname, driver->name); 588 549 } 589 550 … … 617 578 async_forward_fast(iid, dev->drv->phone, DRIVER_CLIENT, fun->handle, 0, 618 579 IPC_FF_NONE); 619 printf(NAME ": devman_connection_devmapper: forwarded connection to " 620 "device %s to driver %s.\n", fun->pathname, dev->drv->name); 580 log_msg(LVL_DEBUG, 581 "Forwarding devmapper request for `%s' function to driver `%s'.\n", 582 fun->pathname, dev->drv->name); 621 583 } 622 584 … … 653 615 static bool devman_init(void) 654 616 { 655 printf(NAME ":devman_init - looking for available drivers.\n");617 log_msg(LVL_DEBUG, "devman_init - looking for available drivers.\n"); 656 618 657 619 /* Initialize list of available drivers. */ … … 659 621 if (lookup_available_drivers(&drivers_list, 660 622 DRIVER_DEFAULT_STORE) == 0) { 661 printf(NAME "no drivers found.");623 log_msg(LVL_FATAL, "no drivers found."); 662 624 return false; 663 625 } 664 626 665 printf(NAME ": devman_init- list of drivers has been initialized.\n");627 log_msg(LVL_DEBUG, "devman_init - list of drivers has been initialized.\n"); 666 628 667 629 /* Create root device node. */ 668 630 if (!init_device_tree(&device_tree, &drivers_list)) { 669 printf(NAME " failed to initialize device tree.");631 log_msg(LVL_FATAL, "Failed to initialize device tree."); 670 632 return false; 671 633 } … … 688 650 printf(NAME ": HelenOS Device Manager\n"); 689 651 652 if (log_init(NAME, LVL_ERROR) != EOK) { 653 printf(NAME ": Error initializing logging subsystem.\n"); 654 return -1; 655 } 656 690 657 if (!devman_init()) { 691 printf(NAME ": Error while initializing service\n");658 log_msg(LVL_ERROR, "Error while initializing service.\n"); 692 659 return -1; 693 660 } … … 697 664 698 665 /* Register device manager at naming service. */ 699 if (service_register(SERVICE_DEVMAN) != EOK) 666 if (service_register(SERVICE_DEVMAN) != EOK) { 667 log_msg(LVL_ERROR, "Failed registering as a service.\n"); 700 668 return -1; 701 702 printf(NAME ": Accepting connections\n"); 669 } 670 671 printf(NAME ": Accepting connections.\n"); 703 672 async_manager(); 704 673
Note:
See TracChangeset
for help on using the changeset viewer.