Changeset 1d2a1a9 in mainline for uspace/srv/devman/main.c


Ignore:
Timestamp:
2011-08-17T20:44:32Z (13 years ago)
Author:
Petr Koupy <petr.koupy@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0cc32f2
Parents:
bb285b4 (diff), c53a705 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge libposix changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/devman/main.c

    rbb285b4 r1d2a1a9  
    5656#include <ipc/driver.h>
    5757#include <thread.h>
    58 #include <devmap.h>
     58#include <loc.h>
    5959
    6060#include "devman.h"
     
    326326                }
    327327        } else {
    328                 devmap_register_tree_function(fun, tree);
     328                loc_register_tree_function(fun, tree);
    329329        }
    330330       
     
    333333}
    334334
    335 static void devmap_register_class_dev(dev_class_info_t *cli)
    336 {
    337         /* Create devmap path and name for the device. */
    338         char *devmap_pathname = NULL;
    339 
    340         asprintf(&devmap_pathname, "%s/%s%c%s", DEVMAP_CLASS_NAMESPACE,
    341             cli->dev_class->name, DEVMAP_SEPARATOR, cli->dev_name);
    342         if (devmap_pathname == NULL)
     335static void loc_register_class_dev(dev_class_info_t *cli)
     336{
     337        /* Create loc path and name for the service. */
     338        char *loc_pathname = NULL;
     339
     340        asprintf(&loc_pathname, "%s/%s%c%s", LOC_CLASS_NAMESPACE,
     341            cli->dev_class->name, LOC_SEPARATOR, cli->dev_name);
     342        if (loc_pathname == NULL)
    343343                return;
    344344       
    345345        /*
    346          * Register the device by the device mapper and remember its devmap
    347          * handle.
     346         * Register the device with location service and remember its
     347         * service ID.
    348348         */
    349         devmap_device_register_with_iface(devmap_pathname,
    350             &cli->devmap_handle, DEVMAN_CONNECT_FROM_DEVMAP);
     349        loc_service_register_with_iface(loc_pathname,
     350            &cli->service_id, DEVMAN_CONNECT_FROM_LOC);
    351351       
    352352        /*
    353          * Add device to the hash map of class devices registered by device
    354          * mapper.
     353         * Add device to the hash map of class devices registered with
     354         * location service.
    355355         */
    356         class_add_devmap_function(&class_list, cli);
    357        
    358         free(devmap_pathname);
     356        class_add_loc_function(&class_list, cli);
     357       
     358        free(loc_pathname);
    359359}
    360360
     
    362362{
    363363        devman_handle_t handle = IPC_GET_ARG1(*call);
     364        category_id_t cat_id;
     365        int rc;
    364366       
    365367        /* Get class name. */
    366368        char *class_name;
    367         int rc = async_data_write_accept((void **) &class_name, true,
     369        rc = async_data_write_accept((void **) &class_name, true,
    368370            0, 0, 0, 0);
    369371        if (rc != EOK) {
     
    381383        dev_class_info_t *class_info = add_function_to_class(fun, cl, NULL);
    382384       
    383         /* Register the device's class alias by devmapper. */
    384         devmap_register_class_dev(class_info);
     385        /* Register the device's class alias with location service. */
     386        loc_register_class_dev(class_info);
     387       
     388        rc = loc_category_get_id(class_name, &cat_id, IPC_FLAG_BLOCKING);
     389        if (rc == EOK) {
     390                loc_service_add_to_cat(fun->service_id, cat_id);
     391        } else {
     392                log_msg(LVL_ERROR, "Failed adding function `%s' to category "
     393                    "`%s'.", fun->pathname, class_name);
     394        }
    385395       
    386396        log_msg(LVL_NOTE, "Function `%s' added to class `%s' as `%s'.",
     
    659669}
    660670
    661 /** Function for handling connections from a client forwarded by the device
    662  * mapper to the device manager. */
    663 static void devman_connection_devmapper(ipc_callid_t iid, ipc_call_t *icall)
    664 {
    665         devmap_handle_t devmap_handle = IPC_GET_ARG2(*icall);
     671/** Function for handling connections from a client forwarded by the location
     672 * service to the device manager. */
     673static void devman_connection_loc(ipc_callid_t iid, ipc_call_t *icall)
     674{
     675        service_id_t service_id = IPC_GET_ARG2(*icall);
    666676        fun_node_t *fun;
    667677        dev_node_t *dev;
    668678
    669         fun = find_devmap_tree_function(&device_tree, devmap_handle);
     679        fun = find_loc_tree_function(&device_tree, service_id);
    670680        if (fun == NULL)
    671                 fun = find_devmap_class_function(&class_list, devmap_handle);
     681                fun = find_loc_class_function(&class_list, service_id);
    672682       
    673683        if (fun == NULL || fun->dev->drv == NULL) {
     
    689699       
    690700        log_msg(LVL_DEBUG,
    691             "Forwarding devmapper request for `%s' function to driver `%s'.",
     701            "Forwarding loc service request for `%s' function to driver `%s'.",
    692702            fun->pathname, dev->drv->name);
    693703}
     
    708718                devman_forward(iid, icall, false);
    709719                break;
    710         case DEVMAN_CONNECT_FROM_DEVMAP:
    711                 /* Someone connected through devmap node. */
    712                 devman_connection_devmapper(iid, icall);
     720        case DEVMAN_CONNECT_FROM_LOC:
     721                /* Someone connected through loc node. */
     722                devman_connection_loc(iid, icall);
    713723                break;
    714724        case DEVMAN_CONNECT_TO_PARENTS_DEVICE:
     
    746756       
    747757        /*
    748          * !!! devman_connection ... as the device manager is not a real devmap
     758         * !!! devman_connection ... as the device manager is not a real loc
    749759         * driver (it uses a completely different ipc protocol than an ordinary
    750          * devmap driver) forwarding a connection from client to the devman by
    751          * devmapper would not work.
     760         * loc driver) forwarding a connection from client to the devman by
     761         * location service would not work.
    752762         */
    753         devmap_driver_register(NAME, devman_connection);
     763        loc_server_register(NAME, devman_connection);
    754764       
    755765        return true;
     
    760770        printf(NAME ": HelenOS Device Manager\n");
    761771
    762         if (log_init(NAME, LVL_ERROR) != EOK) {
     772        if (log_init(NAME, LVL_WARN) != EOK) {
    763773                printf(NAME ": Error initializing logging subsystem.\n");
    764774                return -1;
Note: See TracChangeset for help on using the changeset viewer.