Changeset d51ee2b in mainline for uspace/srv/devman/devman.c


Ignore:
Timestamp:
2010-05-21T13:59:09Z (14 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
957cfa58
Parents:
c47e1a8
Message:

parts of supporting code for the dynamic device classes

File:
1 edited

Legend:

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

    rc47e1a8 rd51ee2b  
    736736}
    737737
     738/** Create unique device name within the class.
     739 *
     740 * @param cl the class.
     741 * @param base_dev_name contains base name for the device
     742 * if it was specified by the driver when it registered the device by the class;
     743 * NULL if driver specified no base name.
     744 * @return the unique name for the device within the class.
     745 */
     746char * create_dev_name_for_class(dev_class_t *cl, const char *base_dev_name)
     747{
     748        char *dev_name;
     749        const char *base_name;
     750        if (NULL != base_dev_name) {
     751                base_name = base_dev_name;
     752        } else {
     753                base_name = cl->base_dev_name;
     754        }
     755       
     756        size_t idx = get_new_class_dev_idx(cl);
     757        asprintf(&dev_name, "%s%d", base_name, idx);
     758        return dev_name;       
     759}
     760
     761/** Add the device to the class.
     762 *
     763 * The device may be added to multiple classes and a class may contain multiple devices.
     764 * The class and the device are associated with each other by the dev_class_info_t structure.
     765 *
     766 * @param dev the device.
     767 * @param class the class.
     768 * @param base_dev_name the base name of the device within the class if specified by the driver,
     769 * NULL otherwise.
     770 * @return dev_class_info_t structure which associates the device with the class.
     771 */
     772dev_class_info_t * add_device_to_class(node_t *dev, dev_class_t *cl, const char *base_dev_name)
     773{
     774        dev_class_info_t *info = create_dev_class_info();
     775        info->dev_class = cl;
     776        info->dev = dev;
     777       
     778        // add the device to the class
     779        fibril_mutex_lock(&cl->mutex);
     780        list_append(&info->link, &cl->devices);
     781        fibril_mutex_unlock(&cl->mutex);
     782       
     783        // add the class to the device
     784        list_append(&info->dev_classes, &dev->classes);
     785       
     786        // create unique name for the device within the class
     787        info->dev_name = create_dev_name_for_class(cl, base_dev_name); 
     788       
     789        return info;
     790}
     791
    738792/** @}
    739793 */
Note: See TracChangeset for help on using the changeset viewer.