Changeset 0511549 in mainline for uspace/srv/devman/driver.c


Ignore:
Timestamp:
2013-09-10T23:11:34Z (11 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
de3d15b4
Parents:
5df1963
Message:

Add devctl list-drv subcommand to list known drivers.

File:
1 edited

Legend:

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

    r5df1963 r0511549  
    5858        list_initialize(&drv_list->drivers);
    5959        fibril_mutex_initialize(&drv_list->drivers_mutex);
     60        drv_list->next_handle = 1;
    6061}
    6162
     
    8182        fibril_mutex_lock(&drivers_list->drivers_mutex);
    8283        list_prepend(&drv->drivers, &drivers_list->drivers);
     84        drv->handle = drivers_list->next_handle++;
    8385        fibril_mutex_unlock(&drivers_list->drivers_mutex);
    8486
     
    299301}
    300302
    301 /** Find device driver in the list of device drivers.
     303/** Find device driver by handle.
     304 *
     305 * @param drv_list      The list of device drivers
     306 * @param handle        Driver handle
     307 * @return              The device driver, if it is in the list,
     308 *                      NULL otherwise.
     309 */
     310driver_t *driver_find(driver_list_t *drv_list, devman_handle_t handle)
     311{
     312        driver_t *res = NULL;
     313       
     314        fibril_mutex_lock(&drv_list->drivers_mutex);
     315       
     316        list_foreach(drv_list->drivers, drivers, driver_t, drv) {
     317                if (drv->handle == handle) {
     318                        res = drv;
     319                        break;
     320                }
     321        }
     322       
     323        fibril_mutex_unlock(&drv_list->drivers_mutex);
     324       
     325        return res;
     326}
     327
     328
     329/** Find device driver by name.
    302330 *
    303331 * @param drv_list      The list of device drivers.
     
    306334 *                      list, NULL otherwise.
    307335 */
    308 driver_t *find_driver(driver_list_t *drv_list, const char *drv_name)
     336driver_t *driver_find_by_name(driver_list_t *drv_list, const char *drv_name)
    309337{
    310338        driver_t *res = NULL;
     
    669697}
    670698
     699/** Get list of registered drivers. */
     700int driver_get_list(driver_list_t *driver_list, devman_handle_t *hdl_buf,
     701    size_t buf_size, size_t *act_size)
     702{
     703        size_t act_cnt;
     704        size_t buf_cnt;
     705
     706        fibril_mutex_lock(&driver_list->drivers_mutex);
     707
     708        buf_cnt = buf_size / sizeof(devman_handle_t);
     709
     710        act_cnt = list_count(&driver_list->drivers);
     711        *act_size = act_cnt * sizeof(devman_handle_t);
     712
     713        if (buf_size % sizeof(devman_handle_t) != 0) {
     714                fibril_mutex_unlock(&driver_list->drivers_mutex);
     715                return EINVAL;
     716        }
     717
     718        size_t pos = 0;
     719        list_foreach(driver_list->drivers, drivers, driver_t, drv) {
     720                if (pos < buf_cnt) {
     721                        hdl_buf[pos] = drv->handle;
     722                }
     723
     724                pos++;
     725        }
     726
     727        fibril_mutex_unlock(&driver_list->drivers_mutex);
     728        return EOK;
     729}
     730
    671731/** @}
    672732 */
Note: See TracChangeset for help on using the changeset viewer.