Linux Kernel设备驱动模型之class迭代设备

    xiaoxiao2021-03-25  117

    设备驱动模型之class迭代设备:  

    /**  * class_for_each_device - device iterator  * @class: the class we're iterating  * @start: the device to start with in the list, if any.  * @data: data for the callback  * @fn: function to be called for each device  *  * Iterate over @class's list of devices, and call @fn for each,  * passing it @data.  If @start is set, the list iteration will start  * there, otherwise if it is NULL, the iteration starts at the  * beginning of the list.  *  * We check the return of @fn each time. If it returns anything  * other than 0, we break out and return that value.  *  * @fn is allowed to do anything including calling back into class  * code.  There's no locking restriction.  */ int class_for_each_device(struct class *class, struct device *start,      void *data, int (*fn)(struct device *, void *)) {  struct class_dev_iter iter;  struct device *dev;  int error = 0;

     if (!class)   return -EINVAL;  if (!class->p) {   WARN(1, "%s called for class '%s' before it was initialized",        __func__, class->name);   return -EINVAL;  }

     class_dev_iter_init(&iter, class, start, NULL);  while ((dev = class_dev_iter_next(&iter))) {   error = fn(dev, data);   if (error)    break;  }  class_dev_iter_exit(&iter);

     return error; }

       
    转载请注明原文地址: https://ju.6miu.com/read-15736.html

    最新回复(0)