From: Martin Schwidefsky <schwidefsky@de.ibm.com>
To: akpm@osdl.org, mochel@digitalimplant.org, gregkh@suse.de,
cohuck@de.ibm.com, linux-kernel@vger.kernel.org
Subject: [patch 1/16] s390: klist bus_find_device & driver_find_device callback.
Date: Tue, 21 Jun 2005 18:22:13 +0200 [thread overview]
Message-ID: <20050621162213.GA6053@localhost.localdomain> (raw)
[patch 1/16] s390: klist bus_find_device & driver_find_device callback.
From: Cornelia Huck <cohuck@de.ibm.com>
Add bus_find_device() and driver_find_device() which allow a callback for each
device in the bus's resp. the driver's klist.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
diffstat:
drivers/base/bus.c | 31 +++++++++++++++++++++++++++++++
drivers/base/driver.c | 34 ++++++++++++++++++++++++++++++++++
include/linux/device.h | 7 +++++++
3 files changed, 72 insertions(+)
diff -urpN linux-2.6/drivers/base/bus.c linux-2.6-patched/drivers/base/bus.c
--- linux-2.6/drivers/base/bus.c 2005-06-21 17:36:38.000000000 +0200
+++ linux-2.6-patched/drivers/base/bus.c 2005-06-21 17:36:45.000000000 +0200
@@ -177,6 +177,37 @@ int bus_for_each_dev(struct bus_type * b
return error;
}
+/**
+ * bus_find_device - device iterator for locating a particular device.
+ * @bus: bus type
+ * @start: Device to begin with
+ * @data: Data to pass to match function
+ * @match: Callback function to check device
+ *
+ * This is similar to the bus_for_each_dev() function above, but it
+ * returns a pointer to a device that is 'found', as determined
+ * by the @match callback. The callback should return a bool - 0 if
+ * the device doesn't match and 1 if it does.
+ * The function will return if a device is found.
+ */
+
+struct device * bus_find_device(struct bus_type * bus, struct device * start,
+ void * data, int (*match)(struct device *, void *))
+{
+ struct klist_iter i;
+ struct device * dev;
+
+ if (!bus)
+ return NULL;
+
+ klist_iter_init_node(&bus->klist_devices, &i,
+ (start ? &start->knode_bus : NULL));
+ while ((dev = next_device(&i)))
+ if (match(dev, data))
+ break;
+ klist_iter_exit(&i);
+ return dev;
+}
static struct device_driver * next_driver(struct klist_iter * i)
diff -urpN linux-2.6/drivers/base/driver.c linux-2.6-patched/drivers/base/driver.c
--- linux-2.6/drivers/base/driver.c 2005-06-21 17:36:38.000000000 +0200
+++ linux-2.6-patched/drivers/base/driver.c 2005-06-21 17:36:45.000000000 +0200
@@ -56,6 +56,40 @@ EXPORT_SYMBOL_GPL(driver_for_each_device
/**
+ * driver_find_device - device iterator for locating a particular device.
+ * @driver: The device's driver
+ * @start: Device to begin with
+ * @data: Data to pass to match function
+ * @match: Callback function to check device
+ *
+ * This is similar to the driver_for_each_device() function above, but it
+ * returns a pointer to a device that is 'found', as determined
+ * by the @match callback. The callback should return a bool - 0 if
+ * the device doesn't match and 1 if it does.
+ * The function will return if a device is found.
+ */
+
+struct device * driver_find_device(struct device_driver *drv,
+ struct device * start, void * data,
+ int (*match)(struct device *, void *))
+{
+ struct klist_iter i;
+ struct device * dev;
+
+ if (!drv)
+ return NULL;
+
+ klist_iter_init_node(&drv->klist_devices, &i,
+ (start ? &start->knode_driver : NULL));
+ while ((dev = next_device(&i)))
+ if (match(dev, data))
+ break;
+ klist_iter_exit(&i);
+ return dev;
+}
+
+
+/**
* driver_create_file - create sysfs file for driver.
* @drv: driver.
* @attr: driver attribute descriptor.
diff -urpN linux-2.6/include/linux/device.h linux-2.6-patched/include/linux/device.h
--- linux-2.6/include/linux/device.h 2005-06-21 17:36:39.000000000 +0200
+++ linux-2.6-patched/include/linux/device.h 2005-06-21 17:36:45.000000000 +0200
@@ -81,6 +81,9 @@ extern struct bus_type * find_bus(char *
int bus_for_each_dev(struct bus_type * bus, struct device * start, void * data,
int (*fn)(struct device *, void *));
+struct device * bus_find_device(struct bus_type * bus, struct device * start,
+ void * data, int (*match)(struct device *, void *));
+
int bus_for_each_drv(struct bus_type * bus, struct device_driver * start,
void * data, int (*fn)(struct device_driver *, void *));
@@ -143,6 +146,10 @@ extern void driver_remove_file(struct de
extern int driver_for_each_device(struct device_driver * drv, struct device * start,
void * data, int (*fn)(struct device *, void *));
+struct device * driver_find_device(struct device_driver * drv,
+ struct device * start, void * data,
+ int (*match)(struct device *, void *));
+
/*
* device classes
next reply other threads:[~2005-06-21 16:22 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-06-21 16:22 Martin Schwidefsky [this message]
2005-06-22 6:26 ` [patch 1/16] s390: klist bus_find_device & driver_find_device callback Greg KH
2005-06-22 7:48 ` Cornelia Huck
2005-06-22 8:14 ` Greg KH
2005-06-22 14:59 ` Cornelia Huck
2005-06-22 14:59 ` [patch 1/2] " Cornelia Huck
2005-06-22 14:59 ` [patch 2/2] s390: use klist in cio Cornelia Huck
2005-06-22 8:11 ` [patch 1/16] s390: klist bus_find_device & driver_find_device callback Christoph Hellwig
2005-06-22 8:19 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050621162213.GA6053@localhost.localdomain \
--to=schwidefsky@de.ibm.com \
--cc=akpm@osdl.org \
--cc=cohuck@de.ibm.com \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mochel@digitalimplant.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox