[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>
This commit is contained in:
committed by
John W. Linville
parent
717c933920
commit
b8bedefd8f
@@ -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);
|
|||||||
|
|
||||||
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)
|
|||||||
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 {
|
|||||||
|
|
||||||
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)
|
|||||||
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
|
||||||
|
Reference in New Issue
Block a user