Changeset 0511549 in mainline for uspace/srv/devman/driver.c
- Timestamp:
- 2013-09-10T23:11:34Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- de3d15b4
- Parents:
- 5df1963
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/devman/driver.c
r5df1963 r0511549 58 58 list_initialize(&drv_list->drivers); 59 59 fibril_mutex_initialize(&drv_list->drivers_mutex); 60 drv_list->next_handle = 1; 60 61 } 61 62 … … 81 82 fibril_mutex_lock(&drivers_list->drivers_mutex); 82 83 list_prepend(&drv->drivers, &drivers_list->drivers); 84 drv->handle = drivers_list->next_handle++; 83 85 fibril_mutex_unlock(&drivers_list->drivers_mutex); 84 86 … … 299 301 } 300 302 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 */ 310 driver_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. 302 330 * 303 331 * @param drv_list The list of device drivers. … … 306 334 * list, NULL otherwise. 307 335 */ 308 driver_t * find_driver(driver_list_t *drv_list, const char *drv_name)336 driver_t *driver_find_by_name(driver_list_t *drv_list, const char *drv_name) 309 337 { 310 338 driver_t *res = NULL; … … 669 697 } 670 698 699 /** Get list of registered drivers. */ 700 int 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 671 731 /** @} 672 732 */
Note:
See TracChangeset
for help on using the changeset viewer.