Commit b8bedefd authored by Luis Carlos Cobo Rus's avatar Luis Carlos Cobo Rus Committed by John W. Linville

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

Signed-off-by: default avatarLuis Carlos Cobo Rus <luisca@cozybit.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 717c9339
...@@ -200,6 +200,14 @@ static int update_channel(wlan_private * priv) ...@@ -200,6 +200,14 @@ static int update_channel(wlan_private * priv)
cmd_option_waitforrsp, 0, NULL); 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, static int assoc_helper_channel(wlan_private *priv,
struct assoc_request * assoc_req) struct assoc_request * assoc_req)
{ {
......
...@@ -9,6 +9,8 @@ void libertas_association_worker(struct work_struct *work); ...@@ -9,6 +9,8 @@ void libertas_association_worker(struct work_struct *work);
struct assoc_request * wlan_get_association_request(wlan_adapter *adapter); struct assoc_request * wlan_get_association_request(wlan_adapter *adapter);
void libertas_sync_channel(struct work_struct *work);
#define ASSOC_DELAY (HZ / 2) #define ASSOC_DELAY (HZ / 2)
static inline void wlan_postpone_association_work(wlan_private *priv) static inline void wlan_postpone_association_work(wlan_private *priv)
{ {
......
...@@ -987,6 +987,7 @@ int libertas_process_event(wlan_private * priv) ...@@ -987,6 +987,7 @@ int libertas_process_event(wlan_private * priv)
netif_carrier_on(priv->mesh_dev) ; netif_carrier_on(priv->mesh_dev) ;
} }
adapter->mode = IW_MODE_ADHOC ; adapter->mode = IW_MODE_ADHOC ;
schedule_work(&priv->sync_channel);
break; break;
default: default:
......
...@@ -150,6 +150,7 @@ struct _wlan_private { ...@@ -150,6 +150,7 @@ struct _wlan_private {
struct delayed_work assoc_work; struct delayed_work assoc_work;
struct workqueue_struct *assoc_thread; struct workqueue_struct *assoc_thread;
struct work_struct sync_channel;
/** Hardware access */ /** Hardware access */
int (*hw_register_dev) (wlan_private * priv); int (*hw_register_dev) (wlan_private * priv);
......
...@@ -847,6 +847,7 @@ int libertas_activate_card(wlan_private *priv, char *fw_name) ...@@ -847,6 +847,7 @@ int libertas_activate_card(wlan_private *priv, char *fw_name)
priv->assoc_thread = priv->assoc_thread =
create_singlethread_workqueue("libertas_assoc"); create_singlethread_workqueue("libertas_assoc");
INIT_DELAYED_WORK(&priv->assoc_work, libertas_association_worker); 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 * Register the device. Fillup the private data structure with
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment