From: Christophe Milard <christophe.mil...@linaro.org>

The driver removal function expects a device, of course...
Also unbind seems a better name to disconnect from a device
since remove has been used for removing the object itself for
enumerators.
Some extra parameters to allow for graceful unbinding are also added.

Signed-off-by: Christophe Milard <christophe.mil...@linaro.org>
---
/** Email created from pull request 16 (heyi-linaro:driver-framework)
 ** https://github.com/Linaro/odp/pull/16
 ** Patch: https://github.com/Linaro/odp/pull/16.patch
 ** Base sha: bac3806356694060d30bf3c83e4133410fecd9ab
 ** Merge commit sha: 8038f288f85db54e1a242e91ded59675313317bf
 **/
 include/odp/drv/spec/driver.h | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/include/odp/drv/spec/driver.h b/include/odp/drv/spec/driver.h
index b08d7fb..8ff856c 100644
--- a/include/odp/drv/spec/driver.h
+++ b/include/odp/drv/spec/driver.h
@@ -300,14 +300,29 @@ struct odpdrv_driver_param_t {
         */
        int (*probe)(odpdrv_device_t *dev);
 
-       /** Remove function:
+       /** unbind function:
         * Only called with devices whose probe() returned true
         *
+        * dev: the device to unbind
+        * callback: if flag ODPDRV_DRV_UNBIND_IMMEDIATE is not specified,
+        *  unbind should be attempted gracefully, meaning that some IO may need
+        *  to terminate before the driver is really unbound from the device:
+        *  In this case (when the flag is not set), the driver is due to call
+        *  the callback function when the driver is unbound from the device.
+        *  This callback may occurs within the unbind() call if the driver
+        *  does unbind immediately.
+        *  If the ODPDRV_DRV_UNBIND_IMMEDIATE is specified, the driver is due
+        *  to release the device immediately (poosibly less gracefully).
+        *  The callback must be called immediately in this case.
         */
-       int (*remove)(odpdrv_device_param_t *dev);
-
+       int (*unbind)(odpdrv_device_t dev,
+                     void (*callback)(odpdrv_device_t dev),
+                     uint32_t flags);
 };
 
+/** The callback function must be called mmediately by the current ODP thread 
*/
+#define ODPDRV_DRV_UNBIND_IMMEDIATE    0x00000001
+
 /**
 * Register an enumerator class.
 * Each enumerator class calls this function at init time.

Reply via email to