Prechádzať zdrojové kódy

[PATCH] libertas: pull current channel from firmware on mesh autostart

Signed-off-by: Luis Carlos Cobo Rus <luisca@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Luis Carlos Cobo Rus 18 rokov pred
rodič
commit
b8bedefd8f

+ 8 - 0
drivers/net/wireless/libertas/assoc.c

@@ -200,6 +200,14 @@ static int update_channel(wlan_private * priv)
 				    cmd_option_waitforrsp, 0, NULL);
 }
 
+void libertas_sync_channel(struct work_struct *work)
+{
+	wlan_private *priv = container_of(work, wlan_private, sync_channel);
+
+	if (update_channel(priv) != 0)
+		lbs_pr_info("Channel synchronization failed.");
+}
+
 static int assoc_helper_channel(wlan_private *priv,
                                 struct assoc_request * assoc_req)
 {

+ 2 - 0
drivers/net/wireless/libertas/assoc.h

@@ -9,6 +9,8 @@ void libertas_association_worker(struct work_struct *work);
 
 struct assoc_request * wlan_get_association_request(wlan_adapter *adapter);
 
+void libertas_sync_channel(struct work_struct *work);
+
 #define ASSOC_DELAY (HZ / 2)
 static inline void wlan_postpone_association_work(wlan_private *priv)
 {

+ 1 - 0
drivers/net/wireless/libertas/cmdresp.c

@@ -987,6 +987,7 @@ int libertas_process_event(wlan_private * priv)
 			netif_carrier_on(priv->mesh_dev) ;
 		}
 		adapter->mode = IW_MODE_ADHOC ;
+		schedule_work(&priv->sync_channel);
 		break;
 
 	default:

+ 1 - 0
drivers/net/wireless/libertas/dev.h

@@ -150,6 +150,7 @@ struct _wlan_private {
 
 	struct delayed_work assoc_work;
 	struct workqueue_struct *assoc_thread;
+	struct work_struct sync_channel;
 
 	/** Hardware access */
 	int (*hw_register_dev) (wlan_private * priv);

+ 1 - 0
drivers/net/wireless/libertas/main.c

@@ -847,6 +847,7 @@ int libertas_activate_card(wlan_private *priv, char *fw_name)
 	priv->assoc_thread =
 		create_singlethread_workqueue("libertas_assoc");
 	INIT_DELAYED_WORK(&priv->assoc_work, libertas_association_worker);
+	INIT_WORK(&priv->sync_channel, libertas_sync_channel);
 
 	/*
 	 * Register the device. Fillup the private data structure with