Changeset 692c40cb in mainline for uspace/srv/devman/devman.c


Ignore:
Timestamp:
2010-05-28T09:04:37Z (15 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5159ae9
Parents:
c9f3b45c
Message:

Introduce device classes.Device class specifies functional type of the device. Device classes are identified by their string names (actually device class is just a string value). Device classes can be dynamically added. A device can be added to any number of classes.

File:
1 edited

Legend:

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

    rc9f3b45c r692c40cb  
    807807 */
    808808dev_class_info_t * add_device_to_class(node_t *dev, dev_class_t *cl, const char *base_dev_name)
    809 {
     809{       
    810810        dev_class_info_t *info = create_dev_class_info();
    811         info->dev_class = cl;
    812         info->dev = dev;
    813        
    814         // add the device to the class
    815         fibril_mutex_lock(&cl->mutex);
    816         list_append(&info->link, &cl->devices);
    817         fibril_mutex_unlock(&cl->mutex);
    818        
    819         // add the class to the device
    820         list_append(&info->dev_classes, &dev->classes);
    821        
    822         // create unique name for the device within the class
    823         info->dev_name = create_dev_name_for_class(cl, base_dev_name); 
     811        if (NULL != info) {
     812                info->dev_class = cl;
     813                info->dev = dev;
     814               
     815                // add the device to the class
     816                fibril_mutex_lock(&cl->mutex);
     817                list_append(&info->link, &cl->devices);
     818                fibril_mutex_unlock(&cl->mutex);
     819               
     820                // add the class to the device
     821                list_append(&info->dev_classes, &dev->classes);
     822               
     823                // create unique name for the device within the class
     824                info->dev_name = create_dev_name_for_class(cl, base_dev_name); 
     825        }
    824826       
    825827        return info;
    826828}
    827829
     830dev_class_t * get_dev_class(class_list_t *class_list, char *class_name)
     831{
     832        dev_class_t *cl;
     833        fibril_mutex_lock(&class_list->classes_mutex); 
     834        cl = find_dev_class_no_lock(class_list, class_name);
     835        if (NULL == cl) {
     836                cl = create_dev_class();
     837                if (NULL != cl) {
     838                        cl->name = class_name; 
     839                        cl->base_dev_name = "";
     840                        add_dev_class_no_lock(class_list, cl);
     841                }               
     842        }       
     843        fibril_mutex_unlock(&class_list->classes_mutex);
     844        return cl;
     845}
     846
     847dev_class_t * find_dev_class_no_lock(class_list_t *class_list, const char *class_name)
     848{
     849        dev_class_t *cl;
     850        link_t *link = class_list->classes.next;
     851        while (link != &class_list->classes) {
     852                cl = list_get_instance(link, dev_class_t, link);
     853                if (0 == str_cmp(cl->name, class_name)) {
     854                        return cl;
     855                }
     856        }
     857       
     858        return NULL;   
     859}
     860
    828861/** @}
    829862 */
Note: See TracChangeset for help on using the changeset viewer.