Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/devman.c

    r1db5669 r4c9b28a  
    11/*
    22 * Copyright (c) 2007 Josef Cejka
    3  * Copyright (c) 2011 Jiri Svoboda
     3 * Copyright (c) 2013 Jiri Svoboda
    44 * Copyright (c) 2010 Lenka Trochtova
    55 * All rights reserved.
     
    401401}
    402402
    403 static int devman_get_str_internal(sysarg_t method, sysarg_t arg1, char *buf,
    404     size_t buf_size)
     403static int devman_get_str_internal(sysarg_t method, sysarg_t arg1,
     404    sysarg_t arg2, sysarg_t *r1, char *buf, size_t buf_size)
    405405{
    406406        async_exch_t *exch;
     
    412412       
    413413        ipc_call_t answer;
    414         aid_t req = async_send_1(exch, method, arg1, &answer);
     414        aid_t req = async_send_2(exch, method, arg1, arg2, &answer);
    415415        aid_t dreq = async_data_read(exch, buf, buf_size - 1, &dreply);
    416416        async_wait_for(dreq, &dretval);
     
    430430        }
    431431       
     432        if (r1 != NULL)
     433                *r1 = IPC_GET_ARG1(answer);
    432434        act_size = IPC_GET_ARG2(dreply);
    433435        assert(act_size <= buf_size - 1);
     
    439441int devman_fun_get_path(devman_handle_t handle, char *buf, size_t buf_size)
    440442{
    441         return devman_get_str_internal(DEVMAN_FUN_GET_PATH, handle, buf,
    442             buf_size);
     443        return devman_get_str_internal(DEVMAN_FUN_GET_PATH, handle, 0, NULL,
     444            buf, buf_size);
     445}
     446
     447int devman_fun_get_match_id(devman_handle_t handle, size_t index, char *buf,
     448    size_t buf_size, unsigned int *rscore)
     449{
     450        int rc;
     451        sysarg_t score = 0;
     452
     453        rc = devman_get_str_internal(DEVMAN_FUN_GET_MATCH_ID, handle, index,
     454            &score, buf, buf_size);
     455        if (rc != EOK)
     456                return rc;
     457
     458        *rscore = score;
     459        return rc;
    443460}
    444461
    445462int devman_fun_get_name(devman_handle_t handle, char *buf, size_t buf_size)
    446463{
    447         return devman_get_str_internal(DEVMAN_FUN_GET_NAME, handle, buf,
    448             buf_size);
     464        return devman_get_str_internal(DEVMAN_FUN_GET_NAME, handle, 0, NULL,
     465            buf, buf_size);
    449466}
    450467
    451468int devman_fun_get_driver_name(devman_handle_t handle, char *buf, size_t buf_size)
    452469{
    453         return devman_get_str_internal(DEVMAN_FUN_GET_DRIVER_NAME, handle, buf,
    454             buf_size);
     470        return devman_get_str_internal(DEVMAN_FUN_GET_DRIVER_NAME, handle, 0,
     471            NULL, buf, buf_size);
    455472}
    456473
     
    653670}
    654671
     672int devman_driver_get_match_id(devman_handle_t handle, size_t index, char *buf,
     673    size_t buf_size, unsigned int *rscore)
     674{
     675        int rc;
     676        sysarg_t score = 0;
     677
     678        rc = devman_get_str_internal(DEVMAN_DRIVER_GET_MATCH_ID, handle, index,
     679            &score, buf, buf_size);
     680        if (rc != EOK)
     681                return rc;
     682
     683        *rscore = score;
     684        return rc;
     685}
     686
    655687int devman_driver_get_name(devman_handle_t handle, char *buf, size_t buf_size)
    656688{
    657         return devman_get_str_internal(DEVMAN_DRIVER_GET_NAME, handle, buf,
    658             buf_size);
     689        return devman_get_str_internal(DEVMAN_DRIVER_GET_NAME, handle, 0, NULL,
     690            buf, buf_size);
    659691}
    660692
Note: See TracChangeset for help on using the changeset viewer.