diff options
| author | Luiz Augusto von Dentz <luiz.dentz@indt.org.br> | 2008-08-18 09:29:24 -0300 | 
|---|---|---|
| committer | Luiz Augusto von Dentz <luiz.dentz@indt.org.br> | 2008-08-18 09:29:24 -0300 | 
| commit | 0dda767d09a31eb13976371730e4cfe5e437869e (patch) | |
| tree | 205ec925d4f5902b192dfeefb885be1acc01ecc9 /src | |
| parent | ab4a6c310beb4fc14308b8d042e290959d2d4950 (diff) | |
Fix loading adapter drivers.
Diffstat (limited to 'src')
| -rw-r--r-- | src/adapter.c | 26 | ||||
| -rw-r--r-- | src/manager.c | 17 | 
2 files changed, 26 insertions, 17 deletions
diff --git a/src/adapter.c b/src/adapter.c index d2ca9636..70adab21 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -63,6 +63,7 @@  #include "glib-helper.h"  #include "logging.h"  #include "agent.h" +#include "driver.h"  #define NUM_ELEMENTS(table) (sizeof(table)/sizeof(const char *)) @@ -2215,6 +2216,17 @@ static void load_devices(struct adapter *adapter)  	textfile_foreach(filename, create_stored_device_from_linkkeys, adapter);  } +static void load_drivers(struct adapter *adapter) +{ +	GSList *l; + +	for (l = btd_get_adapter_drivers(); l; l = l->next) { +		struct btd_adapter_driver *driver = l->data; + +		if (driver->probe) +			driver->probe(adapter); +	} +}  static void adapter_up(struct adapter *adapter, int dd)  { @@ -2259,6 +2271,7 @@ static void adapter_up(struct adapter *adapter, int dd)  					ADAPTER_INTERFACE, "Mode",  					DBUS_TYPE_STRING, &mode); +	load_drivers(adapter);  	load_devices(adapter);  } @@ -2419,6 +2432,17 @@ static void reply_pending_requests(struct adapter *adapter)  	}  } +static void unload_drivers(struct adapter *adapter) +{ +	GSList *l; + +	for (l = btd_get_adapter_drivers(); l; l = l->next) { +		struct btd_adapter_driver *driver = l->data; + +		if (driver->remove) +			driver->remove(adapter); +	} +}  int adapter_stop(struct adapter *adapter)  { @@ -2481,6 +2505,8 @@ int adapter_stop(struct adapter *adapter)  	adapter->pinq_idle = 0;  	adapter->state = DISCOVER_TYPE_NONE; +	unload_drivers(adapter); +  	info("Adapter %s has been disabled", adapter->path);  	return 0; diff --git a/src/manager.c b/src/manager.c index 51fb6011..9b7e4439 100644 --- a/src/manager.c +++ b/src/manager.c @@ -59,7 +59,6 @@  #include "oui.h"  #include "agent.h"  #include "device.h" -#include "driver.h"  #include "manager.h" @@ -443,18 +442,10 @@ static void manager_remove_adapter(struct adapter *adapter)  int manager_register_adapter(int id)  {  	struct adapter *adapter = adapter_create(connection, id); -	GSList *l = btd_get_adapter_drivers();  	if (!adapter)  		return -1; -	for (; l; l = l->next) { -		struct btd_adapter_driver *driver = l->data; - -		if (driver->probe) -			driver->probe(adapter); -	} -  	manager_add_adapter(adapter);  	return 0; @@ -464,7 +455,6 @@ int manager_unregister_adapter(int id)  {  	struct adapter *adapter;  	const gchar *path; -	GSList *l = btd_get_adapter_drivers();  	adapter = manager_find_adapter_by_id(id);  	if (!adapter) @@ -474,13 +464,6 @@ int manager_unregister_adapter(int id)  	info("Unregister path: %s", path); -	for (; l; l = l->next) { -		struct btd_adapter_driver *driver = l->data; - -		if (driver->remove) -			driver->remove(adapter); -	} -  	adapter_stop(adapter);  	manager_remove_adapter(adapter);  | 
