[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[cdi-devel] [PATCH 4/8] cdi.h: Add cdi_handle_bus_device()
From: Max Reitz <max@xxxxxxxxxx>
+ Currently, all devices provided on a bus have to be passed to the
init_device() function of all drivers handling any device type on that
bus. cdi_handle_bus_device() can be used by the driver to specify a
pattern (struct cdi_bus_device_pattern) which allows the CDI
implementation to speed up the selection of the correct driver for a
new device.
Signed-off-by: Max Reitz <max@xxxxxxxxxx>
---
include/cdi.h | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/include/cdi.h b/include/cdi.h
index b89e980..c15469c 100644
--- a/include/cdi.h
+++ b/include/cdi.h
@@ -139,6 +139,17 @@ struct cdi_bus_data {
};
/**
+ * This structure, which is extended by any bus type supporting it, contains
+ * information about which devices can be handled by a certain driver.
+ * Typically, it will contain some of the fields provided by the appropriate
+ * cdi_bus_data structure (the ones which are used to identify a device like
+ * device/vendor ID) where negative values signify a "don't care".
+ */
+struct cdi_bus_device_pattern {
+ cdi_device_type_t bus_type;
+};
+
+/**
* \german
* Beschreibt ein Gerät
* \endgerman
@@ -343,6 +354,19 @@ void cdi_driver_register(struct cdi_driver* driver);
*/
int cdi_provide_device(struct cdi_bus_data* device);
+/**
+ * Tells the CDI implementation that the driver @drv is able to handle devices
+ * with the pattern @pattern (appearing on the bus @pattern->bus_type). This
+ * function can be called multiple times. Any device appearing on the bus not
+ * fitting the pattern will not be passed to the @drv->init_device() function.
+ * That function may however return NULL even after the driver has used this
+ * function, that is, it is valid to call this function with a @pattern that
+ * does not only fit devices handled by @drv but others as well (which can then
+ * be rejected by letting @drv->init_device() return NULL).
+ */
+void cdi_handle_bus_device(struct cdi_driver* drv,
+ struct cdi_bus_device_pattern* pattern);
+
#endif
/*\@}*/
--
2.3.4