From 1007832103d016d1563fab71d4cf2b057a0bcceb Mon Sep 17 00:00:00 2001 From: Holger Schurig Date: Thu, 15 Nov 2007 18:05:47 -0500 Subject: libertas: move to uniform lbs_/LBS_ namespace This patch unifies the namespace of variables, functions defines and structures. It does: - rename libertas_XXX to lbs_XXX - rename LIBERTAS_XXX to lbs_XXX - rename wlan_XXX to lbs_XXX - rename WLAN_XXX to LBS_XXX (but only those that were defined in libertas-local *.h files, e.g. not defines from net/ieee80211.h) While passing, I fixed some checkpatch.pl errors too. Signed-off-by: Holger Schurig Acked-by: Dan Williams Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 528 +++++++++++++++++------------------ 1 file changed, 264 insertions(+), 264 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 1823b48a8ba..825970af341 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -24,7 +24,7 @@ #include "join.h" #define DRIVER_RELEASE_VERSION "323.p0" -const char libertas_driver_version[] = "COMM-USB8388-" DRIVER_RELEASE_VERSION +const char lbs_driver_version[] = "COMM-USB8388-" DRIVER_RELEASE_VERSION #ifdef DEBUG "-dbg" #endif @@ -32,80 +32,80 @@ const char libertas_driver_version[] = "COMM-USB8388-" DRIVER_RELEASE_VERSION /* Module parameters */ -unsigned int libertas_debug = 0; -module_param(libertas_debug, int, 0644); -EXPORT_SYMBOL_GPL(libertas_debug); +unsigned int lbs_debug; +EXPORT_SYMBOL_GPL(lbs_debug); +module_param_named(libertas_debug, lbs_debug, int, 0644); -#define WLAN_TX_PWR_DEFAULT 20 /*100mW */ -#define WLAN_TX_PWR_US_DEFAULT 20 /*100mW */ -#define WLAN_TX_PWR_JP_DEFAULT 16 /*50mW */ -#define WLAN_TX_PWR_FR_DEFAULT 20 /*100mW */ -#define WLAN_TX_PWR_EMEA_DEFAULT 20 /*100mW */ +#define LBS_TX_PWR_DEFAULT 20 /*100mW */ +#define LBS_TX_PWR_US_DEFAULT 20 /*100mW */ +#define LBS_TX_PWR_JP_DEFAULT 16 /*50mW */ +#define LBS_TX_PWR_FR_DEFAULT 20 /*100mW */ +#define LBS_TX_PWR_EMEA_DEFAULT 20 /*100mW */ /* Format { channel, frequency (MHz), maxtxpower } */ /* band: 'B/G', region: USA FCC/Canada IC */ static struct chan_freq_power channel_freq_power_US_BG[] = { - {1, 2412, WLAN_TX_PWR_US_DEFAULT}, - {2, 2417, WLAN_TX_PWR_US_DEFAULT}, - {3, 2422, WLAN_TX_PWR_US_DEFAULT}, - {4, 2427, WLAN_TX_PWR_US_DEFAULT}, - {5, 2432, WLAN_TX_PWR_US_DEFAULT}, - {6, 2437, WLAN_TX_PWR_US_DEFAULT}, - {7, 2442, WLAN_TX_PWR_US_DEFAULT}, - {8, 2447, WLAN_TX_PWR_US_DEFAULT}, - {9, 2452, WLAN_TX_PWR_US_DEFAULT}, - {10, 2457, WLAN_TX_PWR_US_DEFAULT}, - {11, 2462, WLAN_TX_PWR_US_DEFAULT} + {1, 2412, LBS_TX_PWR_US_DEFAULT}, + {2, 2417, LBS_TX_PWR_US_DEFAULT}, + {3, 2422, LBS_TX_PWR_US_DEFAULT}, + {4, 2427, LBS_TX_PWR_US_DEFAULT}, + {5, 2432, LBS_TX_PWR_US_DEFAULT}, + {6, 2437, LBS_TX_PWR_US_DEFAULT}, + {7, 2442, LBS_TX_PWR_US_DEFAULT}, + {8, 2447, LBS_TX_PWR_US_DEFAULT}, + {9, 2452, LBS_TX_PWR_US_DEFAULT}, + {10, 2457, LBS_TX_PWR_US_DEFAULT}, + {11, 2462, LBS_TX_PWR_US_DEFAULT} }; /* band: 'B/G', region: Europe ETSI */ static struct chan_freq_power channel_freq_power_EU_BG[] = { - {1, 2412, WLAN_TX_PWR_EMEA_DEFAULT}, - {2, 2417, WLAN_TX_PWR_EMEA_DEFAULT}, - {3, 2422, WLAN_TX_PWR_EMEA_DEFAULT}, - {4, 2427, WLAN_TX_PWR_EMEA_DEFAULT}, - {5, 2432, WLAN_TX_PWR_EMEA_DEFAULT}, - {6, 2437, WLAN_TX_PWR_EMEA_DEFAULT}, - {7, 2442, WLAN_TX_PWR_EMEA_DEFAULT}, - {8, 2447, WLAN_TX_PWR_EMEA_DEFAULT}, - {9, 2452, WLAN_TX_PWR_EMEA_DEFAULT}, - {10, 2457, WLAN_TX_PWR_EMEA_DEFAULT}, - {11, 2462, WLAN_TX_PWR_EMEA_DEFAULT}, - {12, 2467, WLAN_TX_PWR_EMEA_DEFAULT}, - {13, 2472, WLAN_TX_PWR_EMEA_DEFAULT} + {1, 2412, LBS_TX_PWR_EMEA_DEFAULT}, + {2, 2417, LBS_TX_PWR_EMEA_DEFAULT}, + {3, 2422, LBS_TX_PWR_EMEA_DEFAULT}, + {4, 2427, LBS_TX_PWR_EMEA_DEFAULT}, + {5, 2432, LBS_TX_PWR_EMEA_DEFAULT}, + {6, 2437, LBS_TX_PWR_EMEA_DEFAULT}, + {7, 2442, LBS_TX_PWR_EMEA_DEFAULT}, + {8, 2447, LBS_TX_PWR_EMEA_DEFAULT}, + {9, 2452, LBS_TX_PWR_EMEA_DEFAULT}, + {10, 2457, LBS_TX_PWR_EMEA_DEFAULT}, + {11, 2462, LBS_TX_PWR_EMEA_DEFAULT}, + {12, 2467, LBS_TX_PWR_EMEA_DEFAULT}, + {13, 2472, LBS_TX_PWR_EMEA_DEFAULT} }; /* band: 'B/G', region: Spain */ static struct chan_freq_power channel_freq_power_SPN_BG[] = { - {10, 2457, WLAN_TX_PWR_DEFAULT}, - {11, 2462, WLAN_TX_PWR_DEFAULT} + {10, 2457, LBS_TX_PWR_DEFAULT}, + {11, 2462, LBS_TX_PWR_DEFAULT} }; /* band: 'B/G', region: France */ static struct chan_freq_power channel_freq_power_FR_BG[] = { - {10, 2457, WLAN_TX_PWR_FR_DEFAULT}, - {11, 2462, WLAN_TX_PWR_FR_DEFAULT}, - {12, 2467, WLAN_TX_PWR_FR_DEFAULT}, - {13, 2472, WLAN_TX_PWR_FR_DEFAULT} + {10, 2457, LBS_TX_PWR_FR_DEFAULT}, + {11, 2462, LBS_TX_PWR_FR_DEFAULT}, + {12, 2467, LBS_TX_PWR_FR_DEFAULT}, + {13, 2472, LBS_TX_PWR_FR_DEFAULT} }; /* band: 'B/G', region: Japan */ static struct chan_freq_power channel_freq_power_JPN_BG[] = { - {1, 2412, WLAN_TX_PWR_JP_DEFAULT}, - {2, 2417, WLAN_TX_PWR_JP_DEFAULT}, - {3, 2422, WLAN_TX_PWR_JP_DEFAULT}, - {4, 2427, WLAN_TX_PWR_JP_DEFAULT}, - {5, 2432, WLAN_TX_PWR_JP_DEFAULT}, - {6, 2437, WLAN_TX_PWR_JP_DEFAULT}, - {7, 2442, WLAN_TX_PWR_JP_DEFAULT}, - {8, 2447, WLAN_TX_PWR_JP_DEFAULT}, - {9, 2452, WLAN_TX_PWR_JP_DEFAULT}, - {10, 2457, WLAN_TX_PWR_JP_DEFAULT}, - {11, 2462, WLAN_TX_PWR_JP_DEFAULT}, - {12, 2467, WLAN_TX_PWR_JP_DEFAULT}, - {13, 2472, WLAN_TX_PWR_JP_DEFAULT}, - {14, 2484, WLAN_TX_PWR_JP_DEFAULT} + {1, 2412, LBS_TX_PWR_JP_DEFAULT}, + {2, 2417, LBS_TX_PWR_JP_DEFAULT}, + {3, 2422, LBS_TX_PWR_JP_DEFAULT}, + {4, 2427, LBS_TX_PWR_JP_DEFAULT}, + {5, 2432, LBS_TX_PWR_JP_DEFAULT}, + {6, 2437, LBS_TX_PWR_JP_DEFAULT}, + {7, 2442, LBS_TX_PWR_JP_DEFAULT}, + {8, 2447, LBS_TX_PWR_JP_DEFAULT}, + {9, 2452, LBS_TX_PWR_JP_DEFAULT}, + {10, 2457, LBS_TX_PWR_JP_DEFAULT}, + {11, 2462, LBS_TX_PWR_JP_DEFAULT}, + {12, 2467, LBS_TX_PWR_JP_DEFAULT}, + {13, 2472, LBS_TX_PWR_JP_DEFAULT}, + {14, 2484, LBS_TX_PWR_JP_DEFAULT} }; /** @@ -153,13 +153,13 @@ static struct region_cfp_table region_cfp_table[] = { /** * the table to keep region code */ -u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE] = +u16 lbs_region_code_to_index[MRVDRV_MAX_REGION_CODE] = { 0x10, 0x20, 0x30, 0x31, 0x32, 0x40 }; /** * 802.11b/g supported bitrates (in 500Kb/s units) */ -u8 libertas_bg_rates[MAX_RATES] = +u8 lbs_bg_rates[MAX_RATES] = { 0x02, 0x04, 0x0b, 0x16, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x00, 0x00 }; @@ -179,7 +179,7 @@ static u8 fw_data_rates[MAX_RATES] = * @param idx The index of data rate * @return data rate or 0 */ -u32 libertas_fw_index_to_data_rate(u8 idx) +u32 lbs_fw_index_to_data_rate(u8 idx) { if (idx >= sizeof(fw_data_rates)) idx = 0; @@ -192,7 +192,7 @@ u32 libertas_fw_index_to_data_rate(u8 idx) * @param rate data rate * @return index or 0 */ -u8 libertas_data_rate_to_fw_index(u32 rate) +u8 lbs_data_rate_to_fw_index(u32 rate) { u8 i; @@ -213,13 +213,13 @@ u8 libertas_data_rate_to_fw_index(u32 rate) /** * @brief Get function for sysfs attribute anycast_mask */ -static ssize_t libertas_anycast_get(struct device * dev, +static ssize_t lbs_anycast_get(struct device *dev, struct device_attribute *attr, char * buf) { struct cmd_ds_mesh_access mesh_access; memset(&mesh_access, 0, sizeof(mesh_access)); - libertas_prepare_and_send_command(to_net_dev(dev)->priv, + lbs_prepare_and_send_command(to_net_dev(dev)->priv, CMD_MESH_ACCESS, CMD_ACT_MESH_GET_ANYCAST, CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); @@ -230,7 +230,7 @@ static ssize_t libertas_anycast_get(struct device * dev, /** * @brief Set function for sysfs attribute anycast_mask */ -static ssize_t libertas_anycast_set(struct device * dev, +static ssize_t lbs_anycast_set(struct device *dev, struct device_attribute *attr, const char * buf, size_t count) { struct cmd_ds_mesh_access mesh_access; @@ -240,86 +240,86 @@ static ssize_t libertas_anycast_set(struct device * dev, sscanf(buf, "%x", &datum); mesh_access.data[0] = cpu_to_le32(datum); - libertas_prepare_and_send_command((to_net_dev(dev))->priv, + lbs_prepare_and_send_command((to_net_dev(dev))->priv, CMD_MESH_ACCESS, CMD_ACT_MESH_SET_ANYCAST, CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); return strlen(buf); } -int libertas_add_rtap(wlan_private *priv); -void libertas_remove_rtap(wlan_private *priv); +int lbs_add_rtap(lbs_private *priv); +void lbs_remove_rtap(lbs_private *priv); /** * Get function for sysfs attribute rtap */ -static ssize_t libertas_rtap_get(struct device * dev, +static ssize_t lbs_rtap_get(struct device *dev, struct device_attribute *attr, char * buf) { - wlan_private *priv = (wlan_private *) (to_net_dev(dev))->priv; - wlan_adapter *adapter = priv->adapter; + lbs_private *priv = (lbs_private *) (to_net_dev(dev))->priv; + lbs_adapter *adapter = priv->adapter; return snprintf(buf, 5, "0x%X\n", adapter->monitormode); } /** * Set function for sysfs attribute rtap */ -static ssize_t libertas_rtap_set(struct device * dev, +static ssize_t lbs_rtap_set(struct device *dev, struct device_attribute *attr, const char * buf, size_t count) { int monitor_mode; - wlan_private *priv = (wlan_private *) (to_net_dev(dev))->priv; - wlan_adapter *adapter = priv->adapter; + lbs_private *priv = (lbs_private *) (to_net_dev(dev))->priv; + lbs_adapter *adapter = priv->adapter; sscanf(buf, "%x", &monitor_mode); - if (monitor_mode != WLAN_MONITOR_OFF) { + if (monitor_mode != LBS_MONITOR_OFF) { if(adapter->monitormode == monitor_mode) return strlen(buf); - if (adapter->monitormode == WLAN_MONITOR_OFF) { + if (adapter->monitormode == LBS_MONITOR_OFF) { if (adapter->mode == IW_MODE_INFRA) - libertas_send_deauthentication(priv); + lbs_send_deauthentication(priv); else if (adapter->mode == IW_MODE_ADHOC) - libertas_stop_adhoc_network(priv); - libertas_add_rtap(priv); + lbs_stop_adhoc_network(priv); + lbs_add_rtap(priv); } adapter->monitormode = monitor_mode; } else { - if(adapter->monitormode == WLAN_MONITOR_OFF) + if (adapter->monitormode == LBS_MONITOR_OFF) return strlen(buf); - adapter->monitormode = WLAN_MONITOR_OFF; - libertas_remove_rtap(priv); + adapter->monitormode = LBS_MONITOR_OFF; + lbs_remove_rtap(priv); netif_wake_queue(priv->dev); netif_wake_queue(priv->mesh_dev); } - libertas_prepare_and_send_command(priv, + lbs_prepare_and_send_command(priv, CMD_802_11_MONITOR_MODE, CMD_ACT_SET, CMD_OPTION_WAITFORRSP, 0, &adapter->monitormode); return strlen(buf); } /** - * libertas_rtap attribute to be exported per mshX interface + * lbs_rtap attribute to be exported per mshX interface * through sysfs (/sys/class/net/mshX/libertas-rtap) */ -static DEVICE_ATTR(libertas_rtap, 0644, libertas_rtap_get, - libertas_rtap_set ); +static DEVICE_ATTR(lbs_rtap, 0644, lbs_rtap_get, + lbs_rtap_set ); /** * anycast_mask attribute to be exported per mshX interface * through sysfs (/sys/class/net/mshX/anycast_mask) */ -static DEVICE_ATTR(anycast_mask, 0644, libertas_anycast_get, libertas_anycast_set); +static DEVICE_ATTR(anycast_mask, 0644, lbs_anycast_get, lbs_anycast_set); -static ssize_t libertas_autostart_enabled_get(struct device * dev, +static ssize_t lbs_autostart_enabled_get(struct device *dev, struct device_attribute *attr, char * buf) { struct cmd_ds_mesh_access mesh_access; memset(&mesh_access, 0, sizeof(mesh_access)); - libertas_prepare_and_send_command(to_net_dev(dev)->priv, + lbs_prepare_and_send_command(to_net_dev(dev)->priv, CMD_MESH_ACCESS, CMD_ACT_MESH_GET_AUTOSTART_ENABLED, CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); @@ -327,19 +327,19 @@ static ssize_t libertas_autostart_enabled_get(struct device * dev, return sprintf(buf, "%d\n", le32_to_cpu(mesh_access.data[0])); } -static ssize_t libertas_autostart_enabled_set(struct device * dev, +static ssize_t lbs_autostart_enabled_set(struct device *dev, struct device_attribute *attr, const char * buf, size_t count) { struct cmd_ds_mesh_access mesh_access; uint32_t datum; - wlan_private * priv = (to_net_dev(dev))->priv; + lbs_private *priv = (to_net_dev(dev))->priv; int ret; memset(&mesh_access, 0, sizeof(mesh_access)); sscanf(buf, "%d", &datum); mesh_access.data[0] = cpu_to_le32(datum); - ret = libertas_prepare_and_send_command(priv, + ret = lbs_prepare_and_send_command(priv, CMD_MESH_ACCESS, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); @@ -350,16 +350,16 @@ static ssize_t libertas_autostart_enabled_set(struct device * dev, } static DEVICE_ATTR(autostart_enabled, 0644, - libertas_autostart_enabled_get, libertas_autostart_enabled_set); + lbs_autostart_enabled_get, lbs_autostart_enabled_set); -static struct attribute *libertas_mesh_sysfs_entries[] = { +static struct attribute *lbs_mesh_sysfs_entries[] = { &dev_attr_anycast_mask.attr, &dev_attr_autostart_enabled.attr, NULL, }; -static struct attribute_group libertas_mesh_attr_group = { - .attrs = libertas_mesh_sysfs_entries, +static struct attribute_group lbs_mesh_attr_group = { + .attrs = lbs_mesh_sysfs_entries, }; /** @@ -375,8 +375,8 @@ static struct attribute_group libertas_mesh_attr_group = { */ static int pre_open_check(struct net_device *dev) { - wlan_private *priv = (wlan_private *) dev->priv; - wlan_adapter *adapter = priv->adapter; + lbs_private *priv = (lbs_private *) dev->priv; + lbs_adapter *adapter = priv->adapter; int i = 0; while (!adapter->fw_ready && i < 20) { @@ -397,16 +397,16 @@ static int pre_open_check(struct net_device *dev) * @param dev A pointer to net_device structure * @return 0 */ -static int libertas_dev_open(struct net_device *dev) +static int lbs_dev_open(struct net_device *dev) { - wlan_private *priv = (wlan_private *) dev->priv; - wlan_adapter *adapter = priv->adapter; + lbs_private *priv = (lbs_private *) dev->priv; + lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_NET); priv->open = 1; - if (adapter->connect_status == LIBERTAS_CONNECTED) { + if (adapter->connect_status == LBS_CONNECTED) { netif_carrier_on(priv->dev); if (priv->mesh_dev) netif_carrier_on(priv->mesh_dev); @@ -425,16 +425,16 @@ static int libertas_dev_open(struct net_device *dev) * @param dev A pointer to net_device structure * @return 0 */ -static int libertas_mesh_open(struct net_device *dev) +static int lbs_mesh_open(struct net_device *dev) { - wlan_private *priv = (wlan_private *) dev->priv ; + lbs_private *priv = (lbs_private *) dev->priv ; if (pre_open_check(dev) == -1) return -1; priv->mesh_open = 1 ; netif_wake_queue(priv->mesh_dev); if (priv->infra_open == 0) - return libertas_dev_open(priv->dev) ; + return lbs_dev_open(priv->dev) ; return 0; } @@ -444,22 +444,22 @@ static int libertas_mesh_open(struct net_device *dev) * @param dev A pointer to net_device structure * @return 0 */ -static int libertas_open(struct net_device *dev) +static int lbs_open(struct net_device *dev) { - wlan_private *priv = (wlan_private *) dev->priv ; + lbs_private *priv = (lbs_private *) dev->priv ; if(pre_open_check(dev) == -1) return -1; priv->infra_open = 1 ; netif_wake_queue(priv->dev); if (priv->open == 0) - return libertas_dev_open(priv->dev) ; + return lbs_dev_open(priv->dev) ; return 0; } -static int libertas_dev_close(struct net_device *dev) +static int lbs_dev_close(struct net_device *dev) { - wlan_private *priv = dev->priv; + lbs_private *priv = dev->priv; lbs_deb_enter(LBS_DEB_NET); @@ -476,14 +476,14 @@ static int libertas_dev_close(struct net_device *dev) * @param dev A pointer to net_device structure * @return 0 */ -static int libertas_mesh_close(struct net_device *dev) +static int lbs_mesh_close(struct net_device *dev) { - wlan_private *priv = (wlan_private *) (dev->priv); + lbs_private *priv = (lbs_private *) (dev->priv); priv->mesh_open = 0; netif_stop_queue(priv->mesh_dev); if (priv->infra_open == 0) - return libertas_dev_close(dev); + return lbs_dev_close(dev); else return 0; } @@ -494,23 +494,23 @@ static int libertas_mesh_close(struct net_device *dev) * @param dev A pointer to net_device structure * @return 0 */ -static int libertas_close(struct net_device *dev) +static int lbs_close(struct net_device *dev) { - wlan_private *priv = (wlan_private *) dev->priv; + lbs_private *priv = (lbs_private *) dev->priv; netif_stop_queue(dev); priv->infra_open = 0; if (priv->mesh_open == 0) - return libertas_dev_close(dev); + return lbs_dev_close(dev); else return 0; } -static int libertas_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +static int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { int ret = 0; - wlan_private *priv = dev->priv; + lbs_private *priv = dev->priv; lbs_deb_enter(LBS_DEB_NET); @@ -523,7 +523,7 @@ static int libertas_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) if (priv->mesh_dev) netif_stop_queue(priv->mesh_dev); - if (libertas_process_tx(priv, skb) == 0) + if (lbs_process_tx(priv, skb) == 0) dev->trans_start = jiffies; done: lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret); @@ -531,54 +531,54 @@ done: } /** - * @brief Mark mesh packets and handover them to libertas_hard_start_xmit + * @brief Mark mesh packets and handover them to lbs_hard_start_xmit * */ -static int libertas_mesh_pre_start_xmit(struct sk_buff *skb, +static int lbs_mesh_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) { - wlan_private *priv = dev->priv; + lbs_private *priv = dev->priv; int ret; lbs_deb_enter(LBS_DEB_MESH); - if(priv->adapter->monitormode != WLAN_MONITOR_OFF) { + if (priv->adapter->monitormode != LBS_MONITOR_OFF) { netif_stop_queue(dev); return -EOPNOTSUPP; } SET_MESH_FRAME(skb); - ret = libertas_hard_start_xmit(skb, priv->dev); + ret = lbs_hard_start_xmit(skb, priv->dev); lbs_deb_leave_args(LBS_DEB_MESH, "ret %d", ret); return ret; } /** - * @brief Mark non-mesh packets and handover them to libertas_hard_start_xmit + * @brief Mark non-mesh packets and handover them to lbs_hard_start_xmit * */ -static int libertas_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) +static int lbs_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) { - wlan_private *priv = dev->priv; + lbs_private *priv = dev->priv; int ret; lbs_deb_enter(LBS_DEB_NET); - if(priv->adapter->monitormode != WLAN_MONITOR_OFF) { + if (priv->adapter->monitormode != LBS_MONITOR_OFF) { netif_stop_queue(dev); return -EOPNOTSUPP; } UNSET_MESH_FRAME(skb); - ret = libertas_hard_start_xmit(skb, dev); + ret = lbs_hard_start_xmit(skb, dev); lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret); return ret; } -static void libertas_tx_timeout(struct net_device *dev) +static void lbs_tx_timeout(struct net_device *dev) { - wlan_private *priv = (wlan_private *) dev->priv; + lbs_private *priv = (lbs_private *) dev->priv; lbs_deb_enter(LBS_DEB_TX); @@ -588,14 +588,14 @@ static void libertas_tx_timeout(struct net_device *dev) dev->trans_start = jiffies; if (priv->adapter->currenttxskb) { - if (priv->adapter->monitormode != WLAN_MONITOR_OFF) { + if (priv->adapter->monitormode != LBS_MONITOR_OFF) { /* If we are here, we have not received feedback from the previous packet. Assume TX_FAIL and move on. */ priv->adapter->eventcause = 0x01000000; - libertas_send_tx_feedback(priv); + lbs_send_tx_feedback(priv); } else wake_up_interruptible(&priv->waitq); - } else if (priv->adapter->connect_status == LIBERTAS_CONNECTED) { + } else if (priv->adapter->connect_status == LBS_CONNECTED) { netif_wake_queue(priv->dev); if (priv->mesh_dev) netif_wake_queue(priv->mesh_dev); @@ -607,21 +607,21 @@ static void libertas_tx_timeout(struct net_device *dev) /** * @brief This function returns the network statistics * - * @param dev A pointer to wlan_private structure + * @param dev A pointer to lbs_private structure * @return A pointer to net_device_stats structure */ -static struct net_device_stats *libertas_get_stats(struct net_device *dev) +static struct net_device_stats *lbs_get_stats(struct net_device *dev) { - wlan_private *priv = (wlan_private *) dev->priv; + lbs_private *priv = (lbs_private *) dev->priv; return &priv->stats; } -static int libertas_set_mac_address(struct net_device *dev, void *addr) +static int lbs_set_mac_address(struct net_device *dev, void *addr) { int ret = 0; - wlan_private *priv = (wlan_private *) dev->priv; - wlan_adapter *adapter = priv->adapter; + lbs_private *priv = (lbs_private *) dev->priv; + lbs_adapter *adapter = priv->adapter; struct sockaddr *phwaddr = addr; lbs_deb_enter(LBS_DEB_NET); @@ -637,7 +637,7 @@ static int libertas_set_mac_address(struct net_device *dev, void *addr) lbs_deb_hex(LBS_DEB_NET, "addr", phwaddr->sa_data, ETH_ALEN); memcpy(adapter->current_addr, phwaddr->sa_data, ETH_ALEN); - ret = libertas_prepare_and_send_command(priv, CMD_802_11_MAC_ADDRESS, + ret = lbs_prepare_and_send_command(priv, CMD_802_11_MAC_ADDRESS, CMD_ACT_SET, CMD_OPTION_WAITFORRSP, 0, NULL); @@ -657,7 +657,7 @@ done: return ret; } -static int libertas_copy_multicast_address(wlan_adapter * adapter, +static int lbs_copy_multicast_address(lbs_adapter *adapter, struct net_device *dev) { int i = 0; @@ -672,10 +672,10 @@ static int libertas_copy_multicast_address(wlan_adapter * adapter, } -static void libertas_set_multicast_list(struct net_device *dev) +static void lbs_set_multicast_list(struct net_device *dev) { - wlan_private *priv = dev->priv; - wlan_adapter *adapter = priv->adapter; + lbs_private *priv = dev->priv; + lbs_adapter *adapter = priv->adapter; int oldpacketfilter; DECLARE_MAC_BUF(mac); @@ -718,7 +718,7 @@ static void libertas_set_multicast_list(struct net_device *dev) CMD_ACT_MAC_MULTICAST_ENABLE; adapter->nr_of_multicastmacaddr = - libertas_copy_multicast_address(adapter, dev); + lbs_copy_multicast_address(adapter, dev); lbs_deb_net("multicast addresses: %d\n", dev->mc_count); @@ -729,7 +729,7 @@ static void libertas_set_multicast_list(struct net_device *dev) adapter->multicastlist[i])); } /* send multicast addresses to firmware */ - libertas_prepare_and_send_command(priv, + lbs_prepare_and_send_command(priv, CMD_MAC_MULTICAST_ADR, CMD_ACT_SET, 0, 0, NULL); @@ -738,25 +738,25 @@ static void libertas_set_multicast_list(struct net_device *dev) } if (adapter->currentpacketfilter != oldpacketfilter) { - libertas_set_mac_packet_filter(priv); + lbs_set_mac_packet_filter(priv); } lbs_deb_leave(LBS_DEB_NET); } /** - * @brief This function handles the major jobs in the WLAN driver. + * @brief This function handles the major jobs in the LBS driver. * It handles all events generated by firmware, RX data received * from firmware and TX data sent from kernel. * - * @param data A pointer to wlan_thread structure + * @param data A pointer to lbs_thread structure * @return 0 */ -static int libertas_thread(void *data) +static int lbs_thread(void *data) { struct net_device *dev = data; - wlan_private *priv = dev->priv; - wlan_adapter *adapter = priv->adapter; + lbs_private *priv = dev->priv; + lbs_adapter *adapter = priv->adapter; wait_queue_t wait; u8 ireg = 0; @@ -836,7 +836,7 @@ static int libertas_thread(void *data) adapter->hisregcpy &= ~MRVDRV_CMD_UPLD_RDY; spin_unlock_irq(&adapter->driver_lock); - libertas_process_rx_command(priv); + lbs_process_rx_command(priv); spin_lock_irq(&adapter->driver_lock); } @@ -853,7 +853,7 @@ static int libertas_thread(void *data) continue; } spin_unlock_irq(&adapter->driver_lock); - libertas_process_event(priv); + lbs_process_event(priv); } else spin_unlock_irq(&adapter->driver_lock); @@ -861,7 +861,7 @@ static int libertas_thread(void *data) if (adapter->psstate == PS_STATE_PRE_SLEEP) { if (!priv->dnld_sent && !adapter->cur_cmd) { if (adapter->connect_status == - LIBERTAS_CONNECTED) { + LBS_CONNECTED) { lbs_deb_thread( "main_thread: PRE_SLEEP--intcounter=%d currenttxskb=%p " "dnld_sent=%d cur_cmd=%p, confirm now\n", @@ -870,7 +870,7 @@ static int libertas_thread(void *data) priv->dnld_sent, adapter->cur_cmd); - libertas_ps_confirm_sleep(priv, + lbs_ps_confirm_sleep(priv, (u16) adapter->psmode); } else { /* workaround for firmware sending @@ -894,15 +894,15 @@ static int libertas_thread(void *data) /* Execute the next command */ if (!priv->dnld_sent && !priv->adapter->cur_cmd) - libertas_execute_next_command(priv); + lbs_execute_next_command(priv); /* Wake-up command waiters which can't sleep in - * libertas_prepare_and_send_command + * lbs_prepare_and_send_command */ if (!adapter->nr_cmd_pending) wake_up_all(&adapter->cmd_pending); - libertas_tx_runqueue(priv); + lbs_tx_runqueue(priv); } del_timer(&adapter->command_timer); @@ -918,13 +918,13 @@ static int libertas_thread(void *data) * HW spec from firmware and set basic parameters to * firmware. * - * @param priv A pointer to wlan_private structure + * @param priv A pointer to lbs_private structure * @return 0 or -1 */ -static int wlan_setup_firmware(wlan_private * priv) +static int lbs_setup_firmware(lbs_private *priv) { int ret = -1; - wlan_adapter *adapter = priv->adapter; + lbs_adapter *adapter = priv->adapter; struct cmd_ds_mesh_access mesh_access; lbs_deb_enter(LBS_DEB_FW); @@ -934,7 +934,7 @@ static int wlan_setup_firmware(wlan_private * priv) */ memset(adapter->current_addr, 0xff, ETH_ALEN); - ret = libertas_prepare_and_send_command(priv, CMD_GET_HW_SPEC, + ret = lbs_prepare_and_send_command(priv, CMD_GET_HW_SPEC, 0, CMD_OPTION_WAITFORRSP, 0, NULL); if (ret) { @@ -942,10 +942,10 @@ static int wlan_setup_firmware(wlan_private * priv) goto done; } - libertas_set_mac_packet_filter(priv); + lbs_set_mac_packet_filter(priv); /* Get the supported Data rates */ - ret = libertas_prepare_and_send_command(priv, CMD_802_11_DATA_RATE, + ret = lbs_prepare_and_send_command(priv, CMD_802_11_DATA_RATE, CMD_ACT_GET_TX_RATE, CMD_OPTION_WAITFORRSP, 0, NULL); @@ -958,7 +958,7 @@ static int wlan_setup_firmware(wlan_private * priv) if (priv->mesh_dev) { memset(&mesh_access, 0, sizeof(mesh_access)); mesh_access.data[0] = cpu_to_le32(0); - ret = libertas_prepare_and_send_command(priv, + ret = lbs_prepare_and_send_command(priv, CMD_MESH_ACCESS, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); @@ -970,7 +970,7 @@ static int wlan_setup_firmware(wlan_private * priv) } /* Set the boot2 version in firmware */ - ret = libertas_prepare_and_send_command(priv, CMD_SET_BOOT2_VER, + ret = lbs_prepare_and_send_command(priv, CMD_SET_BOOT2_VER, 0, CMD_OPTION_WAITFORRSP, 0, NULL); ret = 0; @@ -985,8 +985,8 @@ done: */ static void command_timer_fn(unsigned long data) { - wlan_private *priv = (wlan_private *)data; - wlan_adapter *adapter = priv->adapter; + lbs_private *priv = (lbs_private *)data; + lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *ptempnode; struct cmd_ds_command *cmd; unsigned long flags; @@ -1013,16 +1013,16 @@ static void command_timer_fn(unsigned long data) spin_unlock_irqrestore(&adapter->driver_lock, flags); lbs_deb_fw("re-sending same command because of timeout\n"); - libertas_queue_cmd(adapter, ptempnode, 0); + lbs_queue_cmd(adapter, ptempnode, 0); wake_up_interruptible(&priv->waitq); return; } -static int libertas_init_adapter(wlan_private * priv) +static int lbs_init_adapter(lbs_private *priv) { - wlan_adapter *adapter = priv->adapter; + lbs_adapter *adapter = priv->adapter; size_t bufsize; int i, ret = 0; @@ -1043,17 +1043,17 @@ static int libertas_init_adapter(wlan_private * priv) &adapter->network_free_list); } - adapter->libertas_ps_confirm_sleep.seqnum = cpu_to_le16(++adapter->seqnum); - adapter->libertas_ps_confirm_sleep.command = + adapter->lbs_ps_confirm_sleep.seqnum = cpu_to_le16(++adapter->seqnum); + adapter->lbs_ps_confirm_sleep.command = cpu_to_le16(CMD_802_11_PS_MODE); - adapter->libertas_ps_confirm_sleep.size = + adapter->lbs_ps_confirm_sleep.size = cpu_to_le16(sizeof(struct PS_CMD_ConfirmSleep)); - adapter->libertas_ps_confirm_sleep.action = + adapter->lbs_ps_confirm_sleep.action = cpu_to_le16(CMD_SUBCMD_SLEEP_CONFIRMED); memset(adapter->current_addr, 0xff, ETH_ALEN); - adapter->connect_status = LIBERTAS_DISCONNECTED; + adapter->connect_status = LBS_DISCONNECTED; adapter->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; adapter->mode = IW_MODE_INFRA; adapter->curbssparams.channel = DEFAULT_AD_HOC_CHANNEL; @@ -1061,7 +1061,7 @@ static int libertas_init_adapter(wlan_private * priv) adapter->radioon = RADIO_ON; adapter->auto_rate = 1; adapter->capability = WLAN_CAPABILITY_SHORT_PREAMBLE; - adapter->psmode = WLAN802_11POWERMODECAM; + adapter->psmode = LBS802_11POWERMODECAM; adapter->psstate = PS_STATE_FULL_POWER; mutex_init(&adapter->lock); @@ -1081,7 +1081,7 @@ static int libertas_init_adapter(wlan_private * priv) adapter->nr_cmd_pending = 0; /* Allocate the command buffers */ - if (libertas_allocate_cmd_buffer(priv)) { + if (lbs_allocate_cmd_buffer(priv)) { lbs_pr_err("Out of memory allocating command buffers\n"); ret = -1; } @@ -1090,9 +1090,9 @@ out: return ret; } -static void libertas_free_adapter(wlan_private * priv) +static void lbs_free_adapter(lbs_private *priv) { - wlan_adapter *adapter = priv->adapter; + lbs_adapter *adapter = priv->adapter; if (!adapter) { lbs_deb_fw("why double free adapter?\n"); @@ -1100,7 +1100,7 @@ static void libertas_free_adapter(wlan_private * priv) } lbs_deb_fw("free command buffer\n"); - libertas_free_cmd_buffer(priv); + lbs_free_cmd_buffer(priv); lbs_deb_fw("free command_timer\n"); del_timer(&adapter->command_timer); @@ -1117,32 +1117,32 @@ static void libertas_free_adapter(wlan_private * priv) /** * @brief This function adds the card. it will probe the - * card, allocate the wlan_priv and initialize the device. + * card, allocate the lbs_priv and initialize the device. * * @param card A pointer to card - * @return A pointer to wlan_private structure + * @return A pointer to lbs_private structure */ -wlan_private *libertas_add_card(void *card, struct device *dmdev) +lbs_private *lbs_add_card(void *card, struct device *dmdev) { struct net_device *dev = NULL; - wlan_private *priv = NULL; + lbs_private *priv = NULL; lbs_deb_enter(LBS_DEB_NET); /* Allocate an Ethernet device and register it */ - if (!(dev = alloc_etherdev(sizeof(wlan_private)))) { + if (!(dev = alloc_etherdev(sizeof(lbs_private)))) { lbs_pr_err("init ethX device failed\n"); goto done; } priv = dev->priv; - /* allocate buffer for wlan_adapter */ - if (!(priv->adapter = kzalloc(sizeof(wlan_adapter), GFP_KERNEL))) { - lbs_pr_err("allocate buffer for wlan_adapter failed\n"); + /* allocate buffer for lbs_adapter */ + if (!(priv->adapter = kzalloc(sizeof(lbs_adapter), GFP_KERNEL))) { + lbs_pr_err("allocate buffer for lbs_adapter failed\n"); goto err_kzalloc; } - if (libertas_init_adapter(priv)) { + if (lbs_init_adapter(priv)) { lbs_pr_err("failed to initialize adapter structure.\n"); goto err_init_adapter; } @@ -1154,46 +1154,46 @@ wlan_private *libertas_add_card(void *card, struct device *dmdev) priv->hotplug_device = dmdev; /* Setup the OS Interface to our functions */ - dev->open = libertas_open; - dev->hard_start_xmit = libertas_pre_start_xmit; - dev->stop = libertas_close; - dev->set_mac_address = libertas_set_mac_address; - dev->tx_timeout = libertas_tx_timeout; - dev->get_stats = libertas_get_stats; + dev->open = lbs_open; + dev->hard_start_xmit = lbs_pre_start_xmit; + dev->stop = lbs_close; + dev->set_mac_address = lbs_set_mac_address; + dev->tx_timeout = lbs_tx_timeout; + dev->get_stats = lbs_get_stats; dev->watchdog_timeo = 5 * HZ; - dev->ethtool_ops = &libertas_ethtool_ops; + dev->ethtool_ops = &lbs_ethtool_ops; #ifdef WIRELESS_EXT - dev->wireless_handlers = (struct iw_handler_def *)&libertas_handler_def; + dev->wireless_handlers = (struct iw_handler_def *)&lbs_handler_def; #endif dev->flags |= IFF_BROADCAST | IFF_MULTICAST; - dev->set_multicast_list = libertas_set_multicast_list; + dev->set_multicast_list = lbs_set_multicast_list; SET_NETDEV_DEV(dev, dmdev); priv->rtap_net_dev = NULL; - if (device_create_file(dmdev, &dev_attr_libertas_rtap)) + if (device_create_file(dmdev, &dev_attr_lbs_rtap)) goto err_init_adapter; lbs_deb_thread("Starting main thread...\n"); init_waitqueue_head(&priv->waitq); - priv->main_thread = kthread_run(libertas_thread, dev, "libertas_main"); + priv->main_thread = kthread_run(lbs_thread, dev, "lbs_main"); if (IS_ERR(priv->main_thread)) { lbs_deb_thread("Error creating main thread.\n"); goto err_kthread_run; } - priv->work_thread = create_singlethread_workqueue("libertas_worker"); - INIT_DELAYED_WORK(&priv->assoc_work, libertas_association_worker); - INIT_DELAYED_WORK(&priv->scan_work, libertas_scan_worker); - INIT_WORK(&priv->sync_channel, libertas_sync_channel); + priv->work_thread = create_singlethread_workqueue("lbs_worker"); + INIT_DELAYED_WORK(&priv->assoc_work, lbs_association_worker); + INIT_DELAYED_WORK(&priv->scan_work, lbs_scan_worker); + INIT_WORK(&priv->sync_channel, lbs_sync_channel); goto done; err_kthread_run: - device_remove_file(dmdev, &dev_attr_libertas_rtap); + device_remove_file(dmdev, &dev_attr_lbs_rtap); err_init_adapter: - libertas_free_adapter(priv); + lbs_free_adapter(priv); err_kzalloc: free_netdev(dev); @@ -1203,29 +1203,29 @@ done: lbs_deb_leave_args(LBS_DEB_NET, "priv %p", priv); return priv; } -EXPORT_SYMBOL_GPL(libertas_add_card); +EXPORT_SYMBOL_GPL(lbs_add_card); -int libertas_remove_card(wlan_private *priv) +int lbs_remove_card(lbs_private *priv) { - wlan_adapter *adapter = priv->adapter; + lbs_adapter *adapter = priv->adapter; struct net_device *dev = priv->dev; union iwreq_data wrqu; lbs_deb_enter(LBS_DEB_MAIN); - libertas_remove_rtap(priv); + lbs_remove_rtap(priv); dev = priv->dev; - device_remove_file(priv->hotplug_device, &dev_attr_libertas_rtap); + device_remove_file(priv->hotplug_device, &dev_attr_lbs_rtap); cancel_delayed_work(&priv->scan_work); cancel_delayed_work(&priv->assoc_work); destroy_workqueue(priv->work_thread); - if (adapter->psmode == WLAN802_11POWERMODEMAX_PSP) { - adapter->psmode = WLAN802_11POWERMODECAM; - libertas_ps_wakeup(priv, CMD_OPTION_WAITFORRSP); + if (adapter->psmode == LBS802_11POWERMODEMAX_PSP) { + adapter->psmode = LBS802_11POWERMODECAM; + lbs_ps_wakeup(priv, CMD_OPTION_WAITFORRSP); } memset(wrqu.ap_addr.sa_data, 0xaa, ETH_ALEN); @@ -1236,7 +1236,7 @@ int libertas_remove_card(wlan_private *priv) adapter->surpriseremoved = 1; kthread_stop(priv->main_thread); - libertas_free_adapter(priv); + lbs_free_adapter(priv); priv->dev = NULL; free_netdev(dev); @@ -1244,10 +1244,10 @@ int libertas_remove_card(wlan_private *priv) lbs_deb_leave(LBS_DEB_MAIN); return 0; } -EXPORT_SYMBOL_GPL(libertas_remove_card); +EXPORT_SYMBOL_GPL(lbs_remove_card); -int libertas_start_card(wlan_private *priv) +int lbs_start_card(lbs_private *priv) { struct net_device *dev = priv->dev; int ret = -1; @@ -1255,19 +1255,19 @@ int libertas_start_card(wlan_private *priv) lbs_deb_enter(LBS_DEB_MAIN); /* poke the firmware */ - ret = wlan_setup_firmware(priv); + ret = lbs_setup_firmware(priv); if (ret) goto done; /* init 802.11d */ - libertas_init_11d(priv); + lbs_init_11d(priv); if (register_netdev(dev)) { lbs_pr_err("cannot register ethX device\n"); goto done; } - libertas_debugfs_init_one(priv, dev); + lbs_debugfs_init_one(priv, dev); lbs_pr_info("%s: Marvell WLAN 802.11 adapter\n", dev->name); @@ -1277,10 +1277,10 @@ done: lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret); return ret; } -EXPORT_SYMBOL_GPL(libertas_start_card); +EXPORT_SYMBOL_GPL(lbs_start_card); -int libertas_stop_card(wlan_private *priv) +int lbs_stop_card(lbs_private *priv) { struct net_device *dev = priv->dev; int ret = -1; @@ -1292,7 +1292,7 @@ int libertas_stop_card(wlan_private *priv) netif_stop_queue(priv->dev); netif_carrier_off(priv->dev); - libertas_debugfs_remove_one(priv); + lbs_debugfs_remove_one(priv); /* Flush pending command nodes */ spin_lock_irqsave(&priv->adapter->driver_lock, flags); @@ -1307,16 +1307,16 @@ int libertas_stop_card(wlan_private *priv) lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret); return ret; } -EXPORT_SYMBOL_GPL(libertas_stop_card); +EXPORT_SYMBOL_GPL(lbs_stop_card); /** * @brief This function adds mshX interface * - * @param priv A pointer to the wlan_private structure + * @param priv A pointer to the lbs_private structure * @return 0 if successful, -X otherwise */ -int libertas_add_mesh(wlan_private *priv, struct device *dev) +int lbs_add_mesh(lbs_private *priv, struct device *dev) { struct net_device *mesh_dev = NULL; int ret = 0; @@ -1332,12 +1332,12 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev) mesh_dev->priv = priv; priv->mesh_dev = mesh_dev; - mesh_dev->open = libertas_mesh_open; - mesh_dev->hard_start_xmit = libertas_mesh_pre_start_xmit; - mesh_dev->stop = libertas_mesh_close; - mesh_dev->get_stats = libertas_get_stats; - mesh_dev->set_mac_address = libertas_set_mac_address; - mesh_dev->ethtool_ops = &libertas_ethtool_ops; + mesh_dev->open = lbs_mesh_open; + mesh_dev->hard_start_xmit = lbs_mesh_pre_start_xmit; + mesh_dev->stop = lbs_mesh_close; + mesh_dev->get_stats = lbs_get_stats; + mesh_dev->set_mac_address = lbs_set_mac_address; + mesh_dev->ethtool_ops = &lbs_ethtool_ops; memcpy(mesh_dev->dev_addr, priv->dev->dev_addr, sizeof(priv->dev->dev_addr)); @@ -1353,7 +1353,7 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev) goto err_free; } - ret = sysfs_create_group(&(mesh_dev->dev.kobj), &libertas_mesh_attr_group); + ret = sysfs_create_group(&(mesh_dev->dev.kobj), &lbs_mesh_attr_group); if (ret) goto err_unregister; @@ -1371,10 +1371,10 @@ done: lbs_deb_leave_args(LBS_DEB_MESH, "ret %d", ret); return ret; } -EXPORT_SYMBOL_GPL(libertas_add_mesh); +EXPORT_SYMBOL_GPL(lbs_add_mesh); -void libertas_remove_mesh(wlan_private *priv) +void lbs_remove_mesh(lbs_private *priv) { struct net_device *mesh_dev; @@ -1388,7 +1388,7 @@ void libertas_remove_mesh(wlan_private *priv) netif_stop_queue(mesh_dev); netif_carrier_off(priv->mesh_dev); - sysfs_remove_group(&(mesh_dev->dev.kobj), &libertas_mesh_attr_group); + sysfs_remove_group(&(mesh_dev->dev.kobj), &lbs_mesh_attr_group); unregister_netdev(mesh_dev); priv->mesh_dev = NULL ; @@ -1397,7 +1397,7 @@ void libertas_remove_mesh(wlan_private *priv) out: lbs_deb_leave(LBS_DEB_MAIN); } -EXPORT_SYMBOL_GPL(libertas_remove_mesh); +EXPORT_SYMBOL_GPL(lbs_remove_mesh); /** * @brief This function finds the CFP in @@ -1408,7 +1408,7 @@ EXPORT_SYMBOL_GPL(libertas_remove_mesh); * @param cfp_no A pointer to CFP number * @return A pointer to CFP */ -struct chan_freq_power *libertas_get_region_cfp_table(u8 region, u8 band, int *cfp_no) +struct chan_freq_power *lbs_get_region_cfp_table(u8 region, u8 band, int *cfp_no) { int i, end; @@ -1430,9 +1430,9 @@ struct chan_freq_power *libertas_get_region_cfp_table(u8 region, u8 band, int *c return NULL; } -int libertas_set_regiontable(wlan_private * priv, u8 region, u8 band) +int lbs_set_regiontable(lbs_private *priv, u8 region, u8 band) { - wlan_adapter *adapter = priv->adapter; + lbs_adapter *adapter = priv->adapter; int ret = 0; int i = 0; @@ -1444,7 +1444,7 @@ int libertas_set_regiontable(wlan_private * priv, u8 region, u8 band) memset(adapter->region_channel, 0, sizeof(adapter->region_channel)); { - cfp = libertas_get_region_cfp_table(region, band, &cfp_no); + cfp = lbs_get_region_cfp_table(region, band, &cfp_no); if (cfp != NULL) { adapter->region_channel[i].nrcfp = cfp_no; adapter->region_channel[i].CFP = cfp; @@ -1472,13 +1472,13 @@ out: * @param dev A pointer to net_device structure * @return n/a */ -void libertas_interrupt(struct net_device *dev) +void lbs_interrupt(struct net_device *dev) { - wlan_private *priv = dev->priv; + lbs_private *priv = dev->priv; lbs_deb_enter(LBS_DEB_THREAD); - lbs_deb_thread("libertas_interrupt: intcounter=%d\n", + lbs_deb_thread("lbs_interrupt: intcounter=%d\n", priv->adapter->intcounter); priv->adapter->intcounter++; @@ -1494,35 +1494,35 @@ void libertas_interrupt(struct net_device *dev) lbs_deb_leave(LBS_DEB_THREAD); } -EXPORT_SYMBOL_GPL(libertas_interrupt); +EXPORT_SYMBOL_GPL(lbs_interrupt); -int libertas_reset_device(wlan_private *priv) +int lbs_reset_device(lbs_private *priv) { int ret; lbs_deb_enter(LBS_DEB_MAIN); - ret = libertas_prepare_and_send_command(priv, CMD_802_11_RESET, + ret = lbs_prepare_and_send_command(priv, CMD_802_11_RESET, CMD_ACT_HALT, 0, 0, NULL); msleep_interruptible(10); lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret); return ret; } -EXPORT_SYMBOL_GPL(libertas_reset_device); +EXPORT_SYMBOL_GPL(lbs_reset_device); -static int libertas_init_module(void) +static int lbs_init_module(void) { lbs_deb_enter(LBS_DEB_MAIN); - libertas_debugfs_init(); + lbs_debugfs_init(); lbs_deb_leave(LBS_DEB_MAIN); return 0; } -static void libertas_exit_module(void) +static void lbs_exit_module(void) { lbs_deb_enter(LBS_DEB_MAIN); - libertas_debugfs_remove(); + lbs_debugfs_remove(); lbs_deb_leave(LBS_DEB_MAIN); } @@ -1531,32 +1531,32 @@ static void libertas_exit_module(void) * rtap interface support fuctions */ -static int libertas_rtap_open(struct net_device *dev) +static int lbs_rtap_open(struct net_device *dev) { netif_carrier_off(dev); netif_stop_queue(dev); return 0; } -static int libertas_rtap_stop(struct net_device *dev) +static int lbs_rtap_stop(struct net_device *dev) { return 0; } -static int libertas_rtap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +static int lbs_rtap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { netif_stop_queue(dev); return -EOPNOTSUPP; } -static struct net_device_stats *libertas_rtap_get_stats(struct net_device *dev) +static struct net_device_stats *lbs_rtap_get_stats(struct net_device *dev) { - wlan_private *priv = dev->priv; + lbs_private *priv = dev->priv; return &priv->ieee->stats; } -void libertas_remove_rtap(wlan_private *priv) +void lbs_remove_rtap(lbs_private *priv) { if (priv->rtap_net_dev == NULL) return; @@ -1565,7 +1565,7 @@ void libertas_remove_rtap(wlan_private *priv) priv->rtap_net_dev = NULL; } -int libertas_add_rtap(wlan_private *priv) +int lbs_add_rtap(lbs_private *priv) { int rc = 0; @@ -1582,11 +1582,11 @@ int libertas_add_rtap(wlan_private *priv) strcpy(priv->rtap_net_dev->name, "rtap%d"); priv->rtap_net_dev->type = ARPHRD_IEEE80211_RADIOTAP; - priv->rtap_net_dev->open = libertas_rtap_open; - priv->rtap_net_dev->stop = libertas_rtap_stop; - priv->rtap_net_dev->get_stats = libertas_rtap_get_stats; - priv->rtap_net_dev->hard_start_xmit = libertas_rtap_hard_start_xmit; - priv->rtap_net_dev->set_multicast_list = libertas_set_multicast_list; + priv->rtap_net_dev->open = lbs_rtap_open; + priv->rtap_net_dev->stop = lbs_rtap_stop; + priv->rtap_net_dev->get_stats = lbs_rtap_get_stats; + priv->rtap_net_dev->hard_start_xmit = lbs_rtap_hard_start_xmit; + priv->rtap_net_dev->set_multicast_list = lbs_set_multicast_list; priv->rtap_net_dev->priv = priv; priv->ieee->iw_mode = IW_MODE_MONITOR; @@ -1602,8 +1602,8 @@ int libertas_add_rtap(wlan_private *priv) } -module_init(libertas_init_module); -module_exit(libertas_exit_module); +module_init(lbs_init_module); +module_exit(lbs_exit_module); MODULE_DESCRIPTION("Libertas WLAN Driver Library"); MODULE_AUTHOR("Marvell International Ltd."); -- cgit v1.2.3-70-g09d2 From 4fb910fd3ada36cd9fbf6e037b87f2a83fd740b7 Mon Sep 17 00:00:00 2001 From: Andres Salomon Date: Tue, 20 Nov 2007 17:43:45 -0500 Subject: libertas: mark module_init/exit functions as __init/__exit Signed-off-by: Andres Salomon Signed-off-by: Dan Williams Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/if_sdio.c | 4 ++-- drivers/net/wireless/libertas/if_usb.c | 4 ++-- drivers/net/wireless/libertas/main.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index 0c762eea7a3..de4ad57fae4 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c @@ -1052,7 +1052,7 @@ static struct sdio_driver if_sdio_driver = { /* Module functions */ /*******************************************************************/ -static int if_sdio_init_module(void) +static int __init if_sdio_init_module(void) { int ret = 0; @@ -1068,7 +1068,7 @@ static int if_sdio_init_module(void) return ret; } -static void if_sdio_exit_module(void) +static void __exit if_sdio_exit_module(void) { lbs_deb_enter(LBS_DEB_SDIO); diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 6d19d267702..f7d2b46340e 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -1020,7 +1020,7 @@ static struct usb_driver if_usb_driver = { .resume = if_usb_resume, }; -static int if_usb_init_module(void) +static int __init if_usb_init_module(void) { int ret = 0; @@ -1032,7 +1032,7 @@ static int if_usb_init_module(void) return ret; } -static void if_usb_exit_module(void) +static void __exit if_usb_exit_module(void) { struct usb_card_rec *cardp, *cardp_temp; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 825970af341..f0da18c331d 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1510,7 +1510,7 @@ int lbs_reset_device(lbs_private *priv) } EXPORT_SYMBOL_GPL(lbs_reset_device); -static int lbs_init_module(void) +static int __init lbs_init_module(void) { lbs_deb_enter(LBS_DEB_MAIN); lbs_debugfs_init(); @@ -1518,7 +1518,7 @@ static int lbs_init_module(void) return 0; } -static void lbs_exit_module(void) +static void __exit lbs_exit_module(void) { lbs_deb_enter(LBS_DEB_MAIN); -- cgit v1.2.3-70-g09d2 From 01d77d8d4747d73cfb6daf35cdc906a2db8ded9d Mon Sep 17 00:00:00 2001 From: Brajesh Dave Date: Tue, 20 Nov 2007 17:44:14 -0500 Subject: libertas: separate mesh connectivity from that of the main interface The transmit and receive traffic as soon as the mesh interface is brought up. Test case 1: Bring up only the mesh interface and ping. No need for any iwconfig commands on the main interface. $ ifconfig msh0 192.168.5.3 $ iwconfig msh0 channel X $ ping 192.168.5.2 If ping succeeds, PASS Test case 2: Associate with the main interface, and turn off AP. Mesh interface should not lose connectivity. $ iwconfig eth0 mode managed essid "my_ssid" $ ifconfig msh0 192.168.5.3 $ ping 192.168.5.2 If ping continues uninterrupted, PASS This feature requires firmware version 5.110.19.p0 or newer, available here: http://dev.laptop.org/pub/firmware/libertas/ Signed-off-by: Ashish Shukla Signed-off-by: Javier Cardona Signed-off-by: Dan Williams Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 3 ++- drivers/net/wireless/libertas/cmdresp.c | 2 +- drivers/net/wireless/libertas/dev.h | 1 + drivers/net/wireless/libertas/if_usb.c | 5 +++-- drivers/net/wireless/libertas/join.c | 9 --------- drivers/net/wireless/libertas/main.c | 29 ++++++++++++++++++++--------- drivers/net/wireless/libertas/scan.c | 14 ++++++++------ drivers/net/wireless/libertas/tx.c | 9 +++++---- drivers/net/wireless/libertas/wext.c | 11 +++++++---- 9 files changed, 47 insertions(+), 36 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 5b2a1c7c5f0..b4d1b148584 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -1755,7 +1755,8 @@ int lbs_execute_next_command(lbs_private * priv) */ if ((adapter->psmode != LBS802_11POWERMODECAM) && (adapter->psstate == PS_STATE_FULL_POWER) && - (adapter->connect_status == LBS_CONNECTED)) { + ((adapter->connect_status == LBS_CONNECTED) || + (adapter->mesh_connect_status == LBS_CONNECTED))) { if (adapter->secinfo.WPAenabled || adapter->secinfo.WPA2enabled) { /* check for valid WPA group keys */ diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 6c1fdb8f11f..11b93f2cde8 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -979,7 +979,7 @@ int lbs_process_event(lbs_private * priv) break; } lbs_pr_info("EVENT: MESH_AUTO_STARTED\n"); - adapter->connect_status = LBS_CONNECTED; + adapter->mesh_connect_status = LBS_CONNECTED; if (priv->mesh_open == 1) { netif_wake_queue(priv->mesh_dev); netif_carrier_on(priv->mesh_dev); diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 27db5d4389a..433b9bdf80f 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -291,6 +291,7 @@ struct _lbs_adapter { /** NIC Operation characteristics */ u16 currentpacketfilter; u32 connect_status; + u32 mesh_connect_status; u16 regioncode; u16 txpowerlevel; diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 043a33d49f4..26176d54c57 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -73,10 +73,11 @@ static void if_usb_write_bulk_callback(struct urb *urb) if (!adapter->cur_cmd) wake_up_interruptible(&priv->waitq); - if ((adapter->connect_status == LBS_CONNECTED)) { + if (adapter->connect_status == LBS_CONNECTED) netif_wake_queue(dev); + + if (priv->mesh_dev && (adapter->mesh_connect_status == LBS_CONNECTED)) netif_wake_queue(priv->mesh_dev); - } } } else { /* print the failure status number for debug */ diff --git a/drivers/net/wireless/libertas/join.c b/drivers/net/wireless/libertas/join.c index 90c25f47812..3854d91c90e 100644 --- a/drivers/net/wireless/libertas/join.c +++ b/drivers/net/wireless/libertas/join.c @@ -795,10 +795,6 @@ int lbs_ret_80211_associate(lbs_private *priv, netif_carrier_on(priv->dev); netif_wake_queue(priv->dev); - if (priv->mesh_dev) { - netif_carrier_on(priv->mesh_dev); - netif_wake_queue(priv->mesh_dev); - } memcpy(wrqu.ap_addr.sa_data, adapter->curbssparams.bssid, ETH_ALEN); wrqu.ap_addr.sa_family = ARPHRD_ETHER; @@ -884,11 +880,6 @@ int lbs_ret_80211_ad_hoc_start(lbs_private *priv, netif_carrier_on(priv->dev); netif_wake_queue(priv->dev); - if (priv->mesh_dev) { - netif_carrier_on(priv->mesh_dev); - netif_wake_queue(priv->mesh_dev); - } - memset(&wrqu, 0, sizeof(wrqu)); memcpy(wrqu.ap_addr.sa_data, adapter->curbssparams.bssid, ETH_ALEN); wrqu.ap_addr.sa_family = ARPHRD_ETHER; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index f0da18c331d..769117916fb 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -406,13 +406,15 @@ static int lbs_dev_open(struct net_device *dev) priv->open = 1; - if (adapter->connect_status == LBS_CONNECTED) { + if (adapter->connect_status == LBS_CONNECTED) netif_carrier_on(priv->dev); - if (priv->mesh_dev) - netif_carrier_on(priv->mesh_dev); - } else { + else netif_carrier_off(priv->dev); - if (priv->mesh_dev) + + if (priv->mesh_dev) { + if (adapter->mesh_connect_status == LBS_CONNECTED) + netif_carrier_on(priv->mesh_dev); + else netif_carrier_off(priv->mesh_dev); } @@ -433,6 +435,11 @@ static int lbs_mesh_open(struct net_device *dev) return -1; priv->mesh_open = 1 ; netif_wake_queue(priv->mesh_dev); + + priv->adapter->mesh_connect_status = LBS_CONNECTED; + + netif_carrier_on(priv->mesh_dev); + netif_wake_queue(priv->mesh_dev); if (priv->infra_open == 0) return lbs_dev_open(priv->dev) ; return 0; @@ -548,7 +555,7 @@ static int lbs_mesh_pre_start_xmit(struct sk_buff *skb, SET_MESH_FRAME(skb); - ret = lbs_hard_start_xmit(skb, priv->dev); + ret = lbs_hard_start_xmit(skb, priv->mesh_dev); lbs_deb_leave_args(LBS_DEB_MESH, "ret %d", ret); return ret; } @@ -595,9 +602,12 @@ static void lbs_tx_timeout(struct net_device *dev) lbs_send_tx_feedback(priv); } else wake_up_interruptible(&priv->waitq); - } else if (priv->adapter->connect_status == LBS_CONNECTED) { - netif_wake_queue(priv->dev); - if (priv->mesh_dev) + } else if (dev == priv->dev) { + if (priv->adapter->connect_status == LBS_CONNECTED) + netif_wake_queue(priv->dev); + + } else if (dev == priv->mesh_dev) { + if (priv->adapter->mesh_connect_status == LBS_CONNECTED) netif_wake_queue(priv->mesh_dev); } @@ -1054,6 +1064,7 @@ static int lbs_init_adapter(lbs_private *priv) memset(adapter->current_addr, 0xff, ETH_ALEN); adapter->connect_status = LBS_DISCONNECTED; + adapter->mesh_connect_status = LBS_DISCONNECTED; adapter->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; adapter->mode = IW_MODE_INFRA; adapter->curbssparams.channel = DEFAULT_AD_HOC_CHANNEL; diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c index 30e1a8e8a16..13a0838aa1e 100644 --- a/drivers/net/wireless/libertas/scan.c +++ b/drivers/net/wireless/libertas/scan.c @@ -297,7 +297,8 @@ static void lbs_scan_create_channel_list(lbs_private *priv, for (rgnidx = 0; rgnidx < ARRAY_SIZE(adapter->region_channel); rgnidx++) { if (priv->adapter->enable11d && - adapter->connect_status != LBS_CONNECTED) { + (adapter->connect_status != LBS_CONNECTED) && + (adapter->mesh_connect_status != LBS_CONNECTED)) { /* Scan all the supported chan for the first scan */ if (!adapter->universal_channel[rgnidx].valid) continue; @@ -897,13 +898,14 @@ int lbs_scan_networks(lbs_private *priv, mutex_unlock(&adapter->lock); #endif - if (priv->adapter->connect_status == LBS_CONNECTED) { + if (adapter->connect_status == LBS_CONNECTED) { netif_carrier_on(priv->dev); netif_wake_queue(priv->dev); - if (priv->mesh_dev) { - netif_carrier_on(priv->mesh_dev); - netif_wake_queue(priv->mesh_dev); - } + } + + if (priv->mesh_dev && (adapter->mesh_connect_status == LBS_CONNECTED)) { + netif_carrier_on(priv->mesh_dev); + netif_wake_queue(priv->mesh_dev); } out: diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c index 93725ce55b1..267274b804c 100644 --- a/drivers/net/wireless/libertas/tx.c +++ b/drivers/net/wireless/libertas/tx.c @@ -273,10 +273,11 @@ void lbs_send_tx_feedback(lbs_private *priv) lbs_upload_rx_packet(priv, adapter->currenttxskb); adapter->currenttxskb = NULL; priv->adapter->TxLockFlag = 0; - if (priv->adapter->connect_status == LBS_CONNECTED) { + + if (adapter->connect_status == LBS_CONNECTED) netif_wake_queue(priv->dev); - if (priv->mesh_dev) - netif_wake_queue(priv->mesh_dev); - } + + if (priv->mesh_dev && (adapter->mesh_connect_status == LBS_CONNECTED)) + netif_wake_queue(priv->mesh_dev); } EXPORT_SYMBOL_GPL(lbs_send_tx_feedback); diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c index 57fe5f67a05..2231a65a537 100644 --- a/drivers/net/wireless/libertas/wext.c +++ b/drivers/net/wireless/libertas/wext.c @@ -154,7 +154,8 @@ static void copy_active_data_rates(lbs_adapter *adapter, u8 *rates) { lbs_deb_enter(LBS_DEB_WEXT); - if (adapter->connect_status != LBS_CONNECTED) + if ((adapter->connect_status != LBS_CONNECTED) && + (adapter->mesh_connect_status != LBS_CONNECTED)) memcpy(rates, lbs_bg_rates, MAX_RATES); else memcpy(rates, adapter->curbssparams.rates, MAX_RATES); @@ -274,7 +275,7 @@ static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info, /* Use nickname to indicate that mesh is on */ - if (adapter->connect_status == LBS_CONNECTED) { + if (adapter->mesh_connect_status == LBS_CONNECTED) { strncpy(extra, "Mesh", 12); extra[12] = '\0'; dwrq->length = strlen(extra); @@ -589,7 +590,8 @@ static int lbs_get_range(struct net_device *dev, struct iw_request_info *info, range->num_frequency = 0; if (priv->adapter->enable11d && - adapter->connect_status == LBS_CONNECTED) { + (adapter->connect_status == LBS_CONNECTED || + adapter->mesh_connect_status == LBS_CONNECTED)) { u8 chan_no; u8 band; @@ -827,7 +829,8 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) priv->wstats.status = adapter->mode; /* If we're not associated, all quality values are meaningless */ - if (adapter->connect_status != LBS_CONNECTED) + if ((adapter->connect_status != LBS_CONNECTED) && + (adapter->mesh_connect_status != LBS_CONNECTED)) goto out; /* Quality by RSSI */ -- cgit v1.2.3-70-g09d2 From 69f9032d9dfeb763b467fdbe8cf5938f5457083a Mon Sep 17 00:00:00 2001 From: Holger Schurig Date: Fri, 23 Nov 2007 15:43:44 +0100 Subject: libertas: remove arbitrary typedefs New typedefs are usually frowned upon. This patch changes libertas_adapter -> struct libertas_adapter libertas_priv -> struct libertas_priv While passing, make everything checkpatch.pl-clean that gets touches. Signed-off-by: Holger Schurig Acked-by: Dan Williams Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/11d.c | 34 +++---- drivers/net/wireless/libertas/11d.h | 14 +-- drivers/net/wireless/libertas/assoc.c | 48 +++++----- drivers/net/wireless/libertas/assoc.h | 4 +- drivers/net/wireless/libertas/cmd.c | 144 ++++++++++++++-------------- drivers/net/wireless/libertas/cmdresp.c | 80 ++++++++-------- drivers/net/wireless/libertas/debugfs.c | 108 ++++++++++----------- drivers/net/wireless/libertas/debugfs.h | 4 +- drivers/net/wireless/libertas/decl.h | 88 +++++++++-------- drivers/net/wireless/libertas/defs.h | 2 - drivers/net/wireless/libertas/dev.h | 14 +-- drivers/net/wireless/libertas/ethtool.c | 8 +- drivers/net/wireless/libertas/if_cs.c | 23 +++-- drivers/net/wireless/libertas/if_sdio.c | 11 ++- drivers/net/wireless/libertas/if_usb.c | 46 +++++---- drivers/net/wireless/libertas/join.c | 68 ++++++------- drivers/net/wireless/libertas/join.h | 30 +++--- drivers/net/wireless/libertas/main.c | 122 ++++++++++++------------ drivers/net/wireless/libertas/rx.c | 42 ++++---- drivers/net/wireless/libertas/scan.c | 79 +++++++-------- drivers/net/wireless/libertas/scan.h | 16 ++-- drivers/net/wireless/libertas/tx.c | 22 ++--- drivers/net/wireless/libertas/wext.c | 164 ++++++++++++++++---------------- 23 files changed, 606 insertions(+), 565 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/11d.c b/drivers/net/wireless/libertas/11d.c index d16f566e878..377dcb5b8f0 100644 --- a/drivers/net/wireless/libertas/11d.c +++ b/drivers/net/wireless/libertas/11d.c @@ -430,7 +430,7 @@ u8 lbs_get_scan_type_11d(u8 chan, } -void lbs_init_11d(lbs_private * priv) +void lbs_init_11d(struct lbs_private *priv) { priv->adapter->enable11d = 0; memset(&(priv->adapter->parsed_region_chan), 0, @@ -440,10 +440,10 @@ void lbs_init_11d(lbs_private * priv) /** * @brief This function sets DOMAIN INFO to FW - * @param priv pointer to lbs_private + * @param priv pointer to struct lbs_private * @return 0; -1 */ -static int set_domain_info_11d(lbs_private * priv) +static int set_domain_info_11d(struct lbs_private *priv) { int ret; @@ -463,13 +463,13 @@ static int set_domain_info_11d(lbs_private * priv) /** * @brief This function setups scan channels - * @param priv pointer to lbs_private + * @param priv pointer to struct lbs_private * @param band band * @return 0 */ -int lbs_set_universaltable(lbs_private * priv, u8 band) +int lbs_set_universaltable(struct lbs_private *priv, u8 band) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; u16 size = sizeof(struct chan_freq_power); u16 i = 0; @@ -492,20 +492,20 @@ int lbs_set_universaltable(lbs_private * priv, u8 band) /** * @brief This function implements command CMD_802_11D_DOMAIN_INFO - * @param priv pointer to lbs_private + * @param priv pointer to struct lbs_private * @param cmd pointer to cmd buffer * @param cmdno cmd ID * @param cmdOption cmd action * @return 0 */ -int lbs_cmd_802_11d_domain_info(lbs_private * priv, +int lbs_cmd_802_11d_domain_info(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmdno, u16 cmdoption) { struct cmd_ds_802_11d_domain_info *pdomaininfo = &cmd->params.domaininfo; struct mrvlietypes_domainparamset *domain = &pdomaininfo->domain; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; u8 nr_subband = adapter->domainreg.nr_subband; lbs_deb_enter(LBS_DEB_11D); @@ -552,11 +552,11 @@ done: /** * @brief This function parses countryinfo from AP and download country info to FW - * @param priv pointer to lbs_private + * @param priv pointer to struct lbs_private * @param resp pointer to command response buffer * @return 0; -1 */ -int lbs_ret_802_11d_domain_info(lbs_private * priv, +int lbs_ret_802_11d_domain_info(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11d_domain_info *domaininfo = &resp->params.domaininforesp; @@ -598,14 +598,14 @@ int lbs_ret_802_11d_domain_info(lbs_private * priv, /** * @brief This function parses countryinfo from AP and download country info to FW - * @param priv pointer to lbs_private + * @param priv pointer to struct lbs_private * @return 0; -1 */ -int lbs_parse_dnld_countryinfo_11d(lbs_private * priv, +int lbs_parse_dnld_countryinfo_11d(struct lbs_private *priv, struct bss_descriptor * bss) { int ret; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_11D); if (priv->adapter->enable11d) { @@ -640,13 +640,13 @@ done: /** * @brief This function generates 11D info from user specified regioncode and download to FW - * @param priv pointer to lbs_private + * @param priv pointer to struct lbs_private * @return 0; -1 */ -int lbs_create_dnld_countryinfo_11d(lbs_private * priv) +int lbs_create_dnld_countryinfo_11d(struct lbs_private *priv) { int ret; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct region_channel *region_chan; u8 j; diff --git a/drivers/net/wireless/libertas/11d.h b/drivers/net/wireless/libertas/11d.h index 4f7f0deb6c8..811eea2cfba 100644 --- a/drivers/net/wireless/libertas/11d.h +++ b/drivers/net/wireless/libertas/11d.h @@ -78,26 +78,28 @@ struct region_code_mapping { u8 code; }; +struct lbs_private; + u8 lbs_get_scan_type_11d(u8 chan, struct parsed_region_chan_11d *parsed_region_chan); u32 lbs_chan_2_freq(u8 chan, u8 band); -void lbs_init_11d(lbs_private * priv); +void lbs_init_11d(struct lbs_private *priv); -int lbs_set_universaltable(lbs_private * priv, u8 band); +int lbs_set_universaltable(struct lbs_private *priv, u8 band); -int lbs_cmd_802_11d_domain_info(lbs_private * priv, +int lbs_cmd_802_11d_domain_info(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmdno, u16 cmdOption); -int lbs_ret_802_11d_domain_info(lbs_private * priv, +int lbs_ret_802_11d_domain_info(struct lbs_private *priv, struct cmd_ds_command *resp); struct bss_descriptor; -int lbs_parse_dnld_countryinfo_11d(lbs_private * priv, +int lbs_parse_dnld_countryinfo_11d(struct lbs_private *priv, struct bss_descriptor * bss); -int lbs_create_dnld_countryinfo_11d(lbs_private * priv); +int lbs_create_dnld_countryinfo_11d(struct lbs_private *priv); #endif diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c index f634c9496ec..b529e54151d 100644 --- a/drivers/net/wireless/libertas/assoc.c +++ b/drivers/net/wireless/libertas/assoc.c @@ -15,10 +15,10 @@ static const u8 bssid_any[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; static const u8 bssid_off[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static int assoc_helper_essid(lbs_private *priv, +static int assoc_helper_essid(struct lbs_private *priv, struct assoc_request * assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct bss_descriptor * bss; int channel = -1; @@ -75,10 +75,10 @@ static int assoc_helper_essid(lbs_private *priv, } -static int assoc_helper_bssid(lbs_private *priv, +static int assoc_helper_bssid(struct lbs_private *priv, struct assoc_request * assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct bss_descriptor * bss; DECLARE_MAC_BUF(mac); @@ -109,7 +109,7 @@ out: } -static int assoc_helper_associate(lbs_private *priv, +static int assoc_helper_associate(struct lbs_private *priv, struct assoc_request * assoc_req) { int ret = 0, done = 0; @@ -135,10 +135,10 @@ static int assoc_helper_associate(lbs_private *priv, } -static int assoc_helper_mode(lbs_private *priv, +static int assoc_helper_mode(struct lbs_private *priv, struct assoc_request * assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_ASSOC); @@ -165,7 +165,7 @@ done: } -static int update_channel(lbs_private * priv) +static int update_channel(struct lbs_private *priv) { int ret; /* the channel in f/w could be out of sync, get the current channel */ @@ -179,7 +179,8 @@ static int update_channel(lbs_private * priv) void lbs_sync_channel(struct work_struct *work) { - lbs_private *priv = container_of(work, lbs_private, sync_channel); + struct lbs_private *priv = container_of(work, struct lbs_private, + sync_channel); lbs_deb_enter(LBS_DEB_ASSOC); if (update_channel(priv) != 0) @@ -187,10 +188,10 @@ void lbs_sync_channel(struct work_struct *work) lbs_deb_leave(LBS_DEB_ASSOC); } -static int assoc_helper_channel(lbs_private *priv, +static int assoc_helper_channel(struct lbs_private *priv, struct assoc_request * assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_ASSOC); @@ -242,10 +243,10 @@ done: } -static int assoc_helper_wep_keys(lbs_private *priv, +static int assoc_helper_wep_keys(struct lbs_private *priv, struct assoc_request * assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int i; int ret = 0; @@ -297,10 +298,10 @@ out: return ret; } -static int assoc_helper_secinfo(lbs_private *priv, +static int assoc_helper_secinfo(struct lbs_private *priv, struct assoc_request * assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; u32 do_wpa; u32 rsn = 0; @@ -349,7 +350,7 @@ out: } -static int assoc_helper_wpa_keys(lbs_private *priv, +static int assoc_helper_wpa_keys(struct lbs_private *priv, struct assoc_request * assoc_req) { int ret = 0; @@ -392,10 +393,10 @@ out: } -static int assoc_helper_wpa_ie(lbs_private *priv, +static int assoc_helper_wpa_ie(struct lbs_private *priv, struct assoc_request * assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_ASSOC); @@ -413,7 +414,7 @@ static int assoc_helper_wpa_ie(lbs_private *priv, } -static int should_deauth_infrastructure(lbs_adapter *adapter, +static int should_deauth_infrastructure(struct lbs_adapter *adapter, struct assoc_request * assoc_req) { int ret = 0; @@ -465,7 +466,7 @@ out: } -static int should_stop_adhoc(lbs_adapter *adapter, +static int should_stop_adhoc(struct lbs_adapter *adapter, struct assoc_request * assoc_req) { lbs_deb_enter(LBS_DEB_ASSOC); @@ -496,8 +497,9 @@ static int should_stop_adhoc(lbs_adapter *adapter, void lbs_association_worker(struct work_struct *work) { - lbs_private *priv = container_of(work, lbs_private, assoc_work.work); - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = container_of(work, struct lbs_private, + assoc_work.work); + struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req = NULL; int ret = 0; int find_any_ssid = 0; @@ -684,7 +686,7 @@ done: /* * Caller MUST hold any necessary locks */ -struct assoc_request *lbs_get_association_request(lbs_adapter *adapter) +struct assoc_request *lbs_get_association_request(struct lbs_adapter *adapter) { struct assoc_request * assoc_req; diff --git a/drivers/net/wireless/libertas/assoc.h b/drivers/net/wireless/libertas/assoc.h index 462931cbf3b..fad00ae0d00 100644 --- a/drivers/net/wireless/libertas/assoc.h +++ b/drivers/net/wireless/libertas/assoc.h @@ -6,9 +6,7 @@ #include "dev.h" void lbs_association_worker(struct work_struct *work); - -struct assoc_request * lbs_get_association_request(lbs_adapter *adapter); - +struct assoc_request *lbs_get_association_request(struct lbs_adapter *adapter); void lbs_sync_channel(struct work_struct *work); #endif /* _LBS_ASSOC_H */ diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 3702c5da1f6..dde17c65bcc 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -37,7 +37,7 @@ static u8 is_command_allowed_in_ps(__le16 command) return 0; } -static int lbs_cmd_hw_spec(lbs_private * priv, struct cmd_ds_command *cmd) +static int lbs_cmd_hw_spec(struct lbs_private *priv, struct cmd_ds_command *cmd) { struct cmd_ds_get_hw_spec *hwspec = &cmd->params.hwspec; @@ -51,7 +51,7 @@ static int lbs_cmd_hw_spec(lbs_private * priv, struct cmd_ds_command *cmd) return 0; } -static int lbs_cmd_802_11_ps_mode(lbs_private * priv, +static int lbs_cmd_802_11_ps_mode(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action) { @@ -90,7 +90,7 @@ static int lbs_cmd_802_11_ps_mode(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_inactivity_timeout(lbs_private * priv, +static int lbs_cmd_802_11_inactivity_timeout(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action, void *pdata_buf) { @@ -114,11 +114,11 @@ static int lbs_cmd_802_11_inactivity_timeout(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_sleep_params(lbs_private * priv, +static int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_sleep_params *sp = &cmd->params.sleep_params; lbs_deb_enter(LBS_DEB_CMD); @@ -145,13 +145,13 @@ static int lbs_cmd_802_11_sleep_params(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_set_wep(lbs_private * priv, +static int lbs_cmd_802_11_set_wep(struct lbs_private *priv, struct cmd_ds_command *cmd, u32 cmd_act, void * pdata_buf) { struct cmd_ds_802_11_set_wep *wep = &cmd->params.wep; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct assoc_request * assoc_req = pdata_buf; @@ -219,7 +219,7 @@ done: return ret; } -static int lbs_cmd_802_11_enable_rsn(lbs_private * priv, +static int lbs_cmd_802_11_enable_rsn(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action, void * pdata_buf) @@ -272,7 +272,7 @@ static void set_one_wpa_key(struct MrvlIEtype_keyParamSet * pkeyparamset, lbs_deb_leave(LBS_DEB_CMD); } -static int lbs_cmd_802_11_key_material(lbs_private * priv, +static int lbs_cmd_802_11_key_material(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action, u32 cmd_oid, void *pdata_buf) @@ -319,7 +319,7 @@ done: return ret; } -static int lbs_cmd_802_11_reset(lbs_private * priv, +static int lbs_cmd_802_11_reset(struct lbs_private *priv, struct cmd_ds_command *cmd, int cmd_action) { struct cmd_ds_802_11_reset *reset = &cmd->params.reset; @@ -334,7 +334,7 @@ static int lbs_cmd_802_11_reset(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_get_log(lbs_private * priv, +static int lbs_cmd_802_11_get_log(struct lbs_private *priv, struct cmd_ds_command *cmd) { lbs_deb_enter(LBS_DEB_CMD); @@ -346,7 +346,7 @@ static int lbs_cmd_802_11_get_log(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_get_stat(lbs_private * priv, +static int lbs_cmd_802_11_get_stat(struct lbs_private *priv, struct cmd_ds_command *cmd) { lbs_deb_enter(LBS_DEB_CMD); @@ -358,13 +358,13 @@ static int lbs_cmd_802_11_get_stat(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_snmp_mib(lbs_private * priv, +static int lbs_cmd_802_11_snmp_mib(struct lbs_private *priv, struct cmd_ds_command *cmd, int cmd_action, int cmd_oid, void *pdata_buf) { struct cmd_ds_802_11_snmp_mib *pSNMPMIB = &cmd->params.smib; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; u8 ucTemp; lbs_deb_enter(LBS_DEB_CMD); @@ -479,11 +479,11 @@ static int lbs_cmd_802_11_snmp_mib(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_radio_control(lbs_private * priv, +static int lbs_cmd_802_11_radio_control(struct lbs_private *priv, struct cmd_ds_command *cmd, int cmd_action) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_radio_control *pradiocontrol = &cmd->params.radio; lbs_deb_enter(LBS_DEB_CMD); @@ -519,7 +519,7 @@ static int lbs_cmd_802_11_radio_control(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_rf_tx_power(lbs_private * priv, +static int lbs_cmd_802_11_rf_tx_power(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action, void *pdata_buf) { @@ -563,7 +563,7 @@ static int lbs_cmd_802_11_rf_tx_power(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_monitor_mode(lbs_private * priv, +static int lbs_cmd_802_11_monitor_mode(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action, void *pdata_buf) { @@ -583,13 +583,13 @@ static int lbs_cmd_802_11_monitor_mode(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_rate_adapt_rateset(lbs_private * priv, +static int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action) { struct cmd_ds_802_11_rate_adapt_rateset *rateadapt = &cmd->params.rateset; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); cmd->size = @@ -605,12 +605,12 @@ static int lbs_cmd_802_11_rate_adapt_rateset(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_data_rate(lbs_private * priv, +static int lbs_cmd_802_11_data_rate(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action) { struct cmd_ds_802_11_data_rate *pdatarate = &cmd->params.drate; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -632,12 +632,12 @@ static int lbs_cmd_802_11_data_rate(lbs_private * priv, return 0; } -static int lbs_cmd_mac_multicast_adr(lbs_private * priv, +static int lbs_cmd_mac_multicast_adr(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action) { struct cmd_ds_mac_multicast_adr *pMCastAdr = &cmd->params.madr; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); cmd->size = cpu_to_le16(sizeof(struct cmd_ds_mac_multicast_adr) + @@ -655,7 +655,7 @@ static int lbs_cmd_mac_multicast_adr(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_rf_channel(lbs_private * priv, +static int lbs_cmd_802_11_rf_channel(struct lbs_private *priv, struct cmd_ds_command *cmd, int option, void *pdata_buf) { @@ -676,10 +676,10 @@ static int lbs_cmd_802_11_rf_channel(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_rssi(lbs_private * priv, +static int lbs_cmd_802_11_rssi(struct lbs_private *priv, struct cmd_ds_command *cmd) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); cmd->command = cpu_to_le16(CMD_802_11_RSSI); @@ -698,7 +698,7 @@ static int lbs_cmd_802_11_rssi(lbs_private * priv, return 0; } -static int lbs_cmd_reg_access(lbs_private * priv, +static int lbs_cmd_reg_access(struct lbs_private *priv, struct cmd_ds_command *cmdptr, u8 cmd_action, void *pdata_buf) { @@ -773,11 +773,11 @@ static int lbs_cmd_reg_access(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_mac_address(lbs_private * priv, +static int lbs_cmd_802_11_mac_address(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); cmd->command = cpu_to_le16(CMD_802_11_MAC_ADDRESS); @@ -797,7 +797,7 @@ static int lbs_cmd_802_11_mac_address(lbs_private * priv, return 0; } -static int lbs_cmd_802_11_eeprom_access(lbs_private * priv, +static int lbs_cmd_802_11_eeprom_access(struct lbs_private *priv, struct cmd_ds_command *cmd, int cmd_action, void *pdata_buf) { @@ -819,7 +819,7 @@ static int lbs_cmd_802_11_eeprom_access(lbs_private * priv, return 0; } -static int lbs_cmd_bt_access(lbs_private * priv, +static int lbs_cmd_bt_access(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action, void *pdata_buf) { @@ -857,7 +857,7 @@ static int lbs_cmd_bt_access(lbs_private * priv, return 0; } -static int lbs_cmd_fwt_access(lbs_private * priv, +static int lbs_cmd_fwt_access(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action, void *pdata_buf) { @@ -879,7 +879,7 @@ static int lbs_cmd_fwt_access(lbs_private * priv, return 0; } -static int lbs_cmd_mesh_access(lbs_private * priv, +static int lbs_cmd_mesh_access(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action, void *pdata_buf) { @@ -923,7 +923,7 @@ static int lbs_cmd_bcn_ctrl(struct lbs_private * priv, return 0; } -static int lbs_cmd_set_boot2_ver(lbs_private * priv, +static int lbs_cmd_set_boot2_ver(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action, void *pdata_buf) { @@ -938,7 +938,9 @@ static int lbs_cmd_set_boot2_ver(lbs_private * priv, * Note: NEVER use lbs_queue_cmd() with addtail==0 other than for * the command timer, because it does not account for queued commands. */ -void lbs_queue_cmd(lbs_adapter * adapter, struct cmd_ctrl_node *cmdnode, u8 addtail) +void lbs_queue_cmd(struct lbs_adapter *adapter, + struct cmd_ctrl_node *cmdnode, + u8 addtail) { unsigned long flags; struct cmd_ds_command *cmdptr; @@ -990,12 +992,12 @@ done: * For now - we are not performing the endian conversion the second time - but * for PS and DEEP_SLEEP we need to worry */ -static int DownloadcommandToStation(lbs_private * priv, +static int DownloadcommandToStation(struct lbs_private *priv, struct cmd_ctrl_node *cmdnode) { unsigned long flags; struct cmd_ds_command *cmdptr; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = -1; u16 cmdsize; u16 command; @@ -1060,7 +1062,7 @@ done: return ret; } -static int lbs_cmd_mac_control(lbs_private * priv, +static int lbs_cmd_mac_control(struct lbs_private *priv, struct cmd_ds_command *cmd) { struct cmd_ds_mac_control *mac = &cmd->params.macctrl; @@ -1082,9 +1084,10 @@ static int lbs_cmd_mac_control(lbs_private * priv, * This function inserts command node to cmdfreeq * after cleans it. Requires adapter->driver_lock held. */ -void __lbs_cleanup_and_insert_cmd(lbs_private * priv, struct cmd_ctrl_node *ptempcmd) +void __lbs_cleanup_and_insert_cmd(struct lbs_private *priv, + struct cmd_ctrl_node *ptempcmd) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; if (!ptempcmd) return; @@ -1093,7 +1096,8 @@ void __lbs_cleanup_and_insert_cmd(lbs_private * priv, struct cmd_ctrl_node *ptem list_add_tail((struct list_head *)ptempcmd, &adapter->cmdfreeq); } -static void lbs_cleanup_and_insert_cmd(lbs_private * priv, struct cmd_ctrl_node *ptempcmd) +static void lbs_cleanup_and_insert_cmd(struct lbs_private *priv, + struct cmd_ctrl_node *ptempcmd) { unsigned long flags; @@ -1102,7 +1106,7 @@ static void lbs_cleanup_and_insert_cmd(lbs_private * priv, struct cmd_ctrl_node spin_unlock_irqrestore(&priv->adapter->driver_lock, flags); } -int lbs_set_radio_control(lbs_private * priv) +int lbs_set_radio_control(struct lbs_private *priv) { int ret = 0; @@ -1120,7 +1124,7 @@ int lbs_set_radio_control(lbs_private * priv) return ret; } -int lbs_set_mac_packet_filter(lbs_private * priv) +int lbs_set_mac_packet_filter(struct lbs_private *priv) { int ret = 0; @@ -1137,7 +1141,7 @@ int lbs_set_mac_packet_filter(lbs_private * priv) /** * @brief This function prepare the command before send to firmware. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param cmd_no command number * @param cmd_action command action: GET or SET * @param wait_option wait option: wait response or not @@ -1145,13 +1149,13 @@ int lbs_set_mac_packet_filter(lbs_private * priv) * @param pdata_buf A pointer to informaion buffer * @return 0 or -1 */ -int lbs_prepare_and_send_command(lbs_private * priv, +int lbs_prepare_and_send_command(struct lbs_private *priv, u16 cmd_no, u16 cmd_action, u16 wait_option, u32 cmd_oid, void *pdata_buf) { int ret = 0; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *cmdnode; struct cmd_ds_command *cmdptr; unsigned long flags; @@ -1470,17 +1474,17 @@ EXPORT_SYMBOL_GPL(lbs_prepare_and_send_command); * @brief This function allocates the command buffer and link * it to command free queue. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return 0 or -1 */ -int lbs_allocate_cmd_buffer(lbs_private * priv) +int lbs_allocate_cmd_buffer(struct lbs_private *priv) { int ret = 0; u32 ulbufsize; u32 i; struct cmd_ctrl_node *tempcmd_array; u8 *ptempvirtualaddr; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_HOST); @@ -1522,15 +1526,15 @@ done: /** * @brief This function frees the command buffer. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return 0 or -1 */ -int lbs_free_cmd_buffer(lbs_private * priv) +int lbs_free_cmd_buffer(struct lbs_private *priv) { u32 ulbufsize; /* Someone needs to die for this. Slowly and painfully */ unsigned int i; struct cmd_ctrl_node *tempcmd_array; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_HOST); @@ -1566,13 +1570,13 @@ done: * @brief This function gets a free command node if available in * command free queue. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return cmd_ctrl_node A pointer to cmd_ctrl_node structure or NULL */ -struct cmd_ctrl_node *lbs_get_free_cmd_ctrl_node(lbs_private * priv) +struct cmd_ctrl_node *lbs_get_free_cmd_ctrl_node(struct lbs_private *priv) { struct cmd_ctrl_node *tempnode; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; unsigned long flags; lbs_deb_enter(LBS_DEB_HOST); @@ -1627,14 +1631,14 @@ static void cleanup_cmdnode(struct cmd_ctrl_node *ptempnode) /** * @brief This function initializes the command node. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param ptempnode A pointer to cmd_ctrl_node structure * @param cmd_oid cmd oid: treated as sub command * @param wait_option wait option: wait response or not * @param pdata_buf A pointer to informaion buffer * @return 0 or -1 */ -void lbs_set_cmd_ctrl_node(lbs_private * priv, +void lbs_set_cmd_ctrl_node(struct lbs_private *priv, struct cmd_ctrl_node *ptempnode, u32 cmd_oid, u16 wait_option, void *pdata_buf) { @@ -1655,12 +1659,12 @@ void lbs_set_cmd_ctrl_node(lbs_private * priv, * pending queue. It will put fimware back to PS mode * if applicable. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return 0 or -1 */ -int lbs_execute_next_command(lbs_private * priv) +int lbs_execute_next_command(struct lbs_private *priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *cmdnode = NULL; struct cmd_ds_command *cmdptr; unsigned long flags; @@ -1807,7 +1811,7 @@ done: return ret; } -void lbs_send_iwevcustom_event(lbs_private *priv, s8 *str) +void lbs_send_iwevcustom_event(struct lbs_private *priv, s8 *str) { union iwreq_data iwrq; u8 buf[50]; @@ -1831,10 +1835,10 @@ void lbs_send_iwevcustom_event(lbs_private *priv, s8 *str) lbs_deb_leave(LBS_DEB_WEXT); } -static int sendconfirmsleep(lbs_private *priv, u8 *cmdptr, u16 size) +static int sendconfirmsleep(struct lbs_private *priv, u8 *cmdptr, u16 size) { unsigned long flags; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_HOST); @@ -1873,7 +1877,7 @@ static int sendconfirmsleep(lbs_private *priv, u8 *cmdptr, u16 size) return ret; } -void lbs_ps_sleep(lbs_private * priv, int wait_option) +void lbs_ps_sleep(struct lbs_private *priv, int wait_option) { lbs_deb_enter(LBS_DEB_HOST); @@ -1891,11 +1895,11 @@ void lbs_ps_sleep(lbs_private * priv, int wait_option) /** * @brief This function sends Exit_PS command to firmware. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param wait_option wait response or not * @return n/a */ -void lbs_ps_wakeup(lbs_private * priv, int wait_option) +void lbs_ps_wakeup(struct lbs_private *priv, int wait_option) { __le32 Localpsmode; @@ -1914,14 +1918,14 @@ void lbs_ps_wakeup(lbs_private * priv, int wait_option) * @brief This function checks condition and prepares to * send sleep confirm command to firmware if ok. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param psmode Power Saving mode * @return n/a */ -void lbs_ps_confirm_sleep(lbs_private * priv, u16 psmode) +void lbs_ps_confirm_sleep(struct lbs_private *priv, u16 psmode) { unsigned long flags =0; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; u8 allowed = 1; lbs_deb_enter(LBS_DEB_HOST); diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 1f74810a5e1..3596957f1d5 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -20,12 +20,12 @@ * reports disconnect to upper layer, clean tx/rx packets, * reset link state etc. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return n/a */ -void lbs_mac_event_disconnected(lbs_private * priv) +void lbs_mac_event_disconnected(struct lbs_private *priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; union iwreq_data wrqu; if (adapter->connect_status != LBS_CONNECTED) @@ -85,11 +85,11 @@ void lbs_mac_event_disconnected(lbs_private * priv) /** * @brief This function handles MIC failure event. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @para event the event id * @return n/a */ -static void handle_mic_failureevent(lbs_private * priv, u32 event) +static void handle_mic_failureevent(struct lbs_private *priv, u32 event) { char buf[50]; @@ -108,11 +108,11 @@ static void handle_mic_failureevent(lbs_private * priv, u32 event) lbs_deb_leave(LBS_DEB_CMD); } -static int lbs_ret_reg_access(lbs_private * priv, +static int lbs_ret_reg_access(struct lbs_private *priv, u16 type, struct cmd_ds_command *resp) { int ret = 0; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -152,12 +152,12 @@ static int lbs_ret_reg_access(lbs_private * priv, return ret; } -static int lbs_ret_get_hw_spec(lbs_private * priv, +static int lbs_ret_get_hw_spec(struct lbs_private *priv, struct cmd_ds_command *resp) { u32 i; struct cmd_ds_get_hw_spec *hwspec = &resp->params.hwspec; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; DECLARE_MAC_BUF(mac); @@ -216,11 +216,11 @@ done: return ret; } -static int lbs_ret_802_11_sleep_params(lbs_private * priv, +static int lbs_ret_802_11_sleep_params(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_sleep_params *sp = &resp->params.sleep_params; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -240,14 +240,14 @@ static int lbs_ret_802_11_sleep_params(lbs_private * priv, return 0; } -static int lbs_ret_802_11_stat(lbs_private * priv, +static int lbs_ret_802_11_stat(struct lbs_private *priv, struct cmd_ds_command *resp) { lbs_deb_enter(LBS_DEB_CMD); /* currently adapter->wlan802_11Stat is unused struct cmd_ds_802_11_get_stat *p11Stat = &resp->params.gstat; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; // TODO Convert it to Big endian befor copy memcpy(&adapter->wlan802_11Stat, @@ -257,7 +257,7 @@ static int lbs_ret_802_11_stat(lbs_private * priv, return 0; } -static int lbs_ret_802_11_snmp_mib(lbs_private * priv, +static int lbs_ret_802_11_snmp_mib(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_snmp_mib *smib = &resp->params.smib; @@ -299,12 +299,12 @@ static int lbs_ret_802_11_snmp_mib(lbs_private * priv, return 0; } -static int lbs_ret_802_11_key_material(lbs_private * priv, +static int lbs_ret_802_11_key_material(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_key_material *pkeymaterial = &resp->params.keymaterial; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; u16 action = le16_to_cpu(pkeymaterial->action); lbs_deb_enter(LBS_DEB_CMD); @@ -355,11 +355,11 @@ static int lbs_ret_802_11_key_material(lbs_private * priv, return 0; } -static int lbs_ret_802_11_mac_address(lbs_private * priv, +static int lbs_ret_802_11_mac_address(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_mac_address *macadd = &resp->params.macadd; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -369,11 +369,11 @@ static int lbs_ret_802_11_mac_address(lbs_private * priv, return 0; } -static int lbs_ret_802_11_rf_tx_power(lbs_private * priv, +static int lbs_ret_802_11_rf_tx_power(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_rf_tx_power *rtp = &resp->params.txp; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -385,11 +385,11 @@ static int lbs_ret_802_11_rf_tx_power(lbs_private * priv, return 0; } -static int lbs_ret_802_11_rate_adapt_rateset(lbs_private * priv, +static int lbs_ret_802_11_rate_adapt_rateset(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_rate_adapt_rateset *rates = &resp->params.rateset; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -402,11 +402,11 @@ static int lbs_ret_802_11_rate_adapt_rateset(lbs_private * priv, return 0; } -static int lbs_ret_802_11_data_rate(lbs_private * priv, +static int lbs_ret_802_11_data_rate(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_data_rate *pdatarate = &resp->params.drate; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -423,11 +423,11 @@ static int lbs_ret_802_11_data_rate(lbs_private * priv, return 0; } -static int lbs_ret_802_11_rf_channel(lbs_private * priv, +static int lbs_ret_802_11_rf_channel(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_rf_channel *rfchannel = &resp->params.rfchannel; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; u16 action = le16_to_cpu(rfchannel->action); u16 newchannel = le16_to_cpu(rfchannel->currentchannel); @@ -446,11 +446,11 @@ static int lbs_ret_802_11_rf_channel(lbs_private * priv, return 0; } -static int lbs_ret_802_11_rssi(lbs_private * priv, +static int lbs_ret_802_11_rssi(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_rssi_rsp *rssirsp = &resp->params.rssirsp; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -477,10 +477,10 @@ static int lbs_ret_802_11_rssi(lbs_private * priv, return 0; } -static int lbs_ret_802_11_eeprom_access(lbs_private * priv, +static int lbs_ret_802_11_eeprom_access(struct lbs_private *priv, struct cmd_ds_command *resp) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct lbs_ioctl_regrdwr *pbuf; pbuf = (struct lbs_ioctl_regrdwr *) adapter->prdeeprom; @@ -503,11 +503,11 @@ static int lbs_ret_802_11_eeprom_access(lbs_private * priv, return 0; } -static int lbs_ret_get_log(lbs_private * priv, +static int lbs_ret_get_log(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_get_log *logmessage = &resp->params.glog; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -518,11 +518,11 @@ static int lbs_ret_get_log(lbs_private * priv, return 0; } -static int lbs_ret_802_11_enable_rsn(lbs_private * priv, +static int lbs_ret_802_11_enable_rsn(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_enable_rsn *enable_rsn = &resp->params.enbrsn; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; u32 * pdata_buf = adapter->cur_cmd->pdata_buf; lbs_deb_enter(LBS_DEB_CMD); @@ -556,11 +556,11 @@ static int lbs_ret_802_11_bcn_ctrl(struct lbs_private * priv, static inline int handle_cmd_response(u16 respcmd, struct cmd_ds_command *resp, - lbs_private *priv) + struct lbs_private *priv) { int ret = 0; unsigned long flags; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_HOST); @@ -735,11 +735,11 @@ static inline int handle_cmd_response(u16 respcmd, return ret; } -int lbs_process_rx_command(lbs_private * priv) +int lbs_process_rx_command(struct lbs_private *priv) { u16 respcmd; struct cmd_ds_command *resp; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; ulong flags; u16 result; @@ -888,10 +888,10 @@ done: return ret; } -int lbs_process_event(lbs_private * priv) +int lbs_process_event(struct lbs_private *priv) { int ret = 0; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; u32 eventcause; lbs_deb_enter(LBS_DEB_CMD); diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c index 1b382cfaf37..2e1842474f8 100644 --- a/drivers/net/wireless/libertas/debugfs.c +++ b/drivers/net/wireless/libertas/debugfs.c @@ -18,7 +18,7 @@ static char *szStates[] = { }; #ifdef PROC_DEBUG -static void lbs_debug_init(lbs_private * priv, struct net_device *dev); +static void lbs_debug_init(struct lbs_private *priv, struct net_device *dev); #endif static int open_file_generic(struct inode *inode, struct file *file) @@ -38,7 +38,7 @@ static const size_t len = PAGE_SIZE; static ssize_t lbs_dev_info(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; size_t pos = 0; unsigned long addr = get_zeroed_page(GFP_KERNEL); char *buf = (char *)addr; @@ -59,7 +59,7 @@ static ssize_t lbs_dev_info(struct file *file, char __user *userbuf, static ssize_t lbs_getscantable(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; size_t pos = 0; int numscansdone = 0, res; unsigned long addr = get_zeroed_page(GFP_KERNEL); @@ -102,7 +102,7 @@ static ssize_t lbs_sleepparams_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; ssize_t buf_size, res; int p1, p2, p3, p4, p5, p6; unsigned long addr = get_zeroed_page(GFP_KERNEL); @@ -143,8 +143,8 @@ out_unlock: static ssize_t lbs_sleepparams_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; ssize_t res; size_t pos = 0; unsigned long addr = get_zeroed_page(GFP_KERNEL); @@ -174,7 +174,7 @@ out_unlock: static ssize_t lbs_extscan(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; ssize_t res, buf_size; union iwreq_data wrqu; unsigned long addr = get_zeroed_page(GFP_KERNEL); @@ -342,7 +342,7 @@ static ssize_t lbs_setuserscan(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; ssize_t res, buf_size; struct lbs_ioctl_user_scan_cfg *scan_cfg; union iwreq_data wrqu; @@ -384,7 +384,7 @@ out_unlock: return count; } -static int lbs_event_initcmd(lbs_private *priv, void **response_buf, +static int lbs_event_initcmd(struct lbs_private *priv, void **response_buf, struct cmd_ctrl_node **cmdnode, struct cmd_ds_command **cmd) { @@ -413,8 +413,8 @@ static int lbs_event_initcmd(lbs_private *priv, void **response_buf, static ssize_t lbs_lowrssi_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *pcmdnode; struct cmd_ds_command *pcmdptr; struct cmd_ds_802_11_subscribe_event *event; @@ -480,9 +480,9 @@ static ssize_t lbs_lowrssi_read(struct file *file, char __user *userbuf, return res; } -static u16 lbs_get_events_bitmap(lbs_private *priv) +static u16 lbs_get_events_bitmap(struct lbs_private *priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *pcmdnode; struct cmd_ds_command *pcmdptr; struct cmd_ds_802_11_subscribe_event *event; @@ -529,8 +529,8 @@ static ssize_t lbs_lowrssi_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; ssize_t res, buf_size; int value, freq, subscribed, cmd_len; struct cmd_ctrl_node *pcmdnode; @@ -609,8 +609,8 @@ out_unlock: static ssize_t lbs_lowsnr_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *pcmdnode; struct cmd_ds_command *pcmdptr; struct cmd_ds_802_11_subscribe_event *event; @@ -682,8 +682,8 @@ static ssize_t lbs_lowsnr_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; ssize_t res, buf_size; int value, freq, subscribed, cmd_len; struct cmd_ctrl_node *pcmdnode; @@ -762,8 +762,8 @@ out_unlock: static ssize_t lbs_failcount_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *pcmdnode; struct cmd_ds_command *pcmdptr; struct cmd_ds_802_11_subscribe_event *event; @@ -834,8 +834,8 @@ static ssize_t lbs_failcount_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; ssize_t res, buf_size; int value, freq, subscribed, cmd_len; struct cmd_ctrl_node *pcmdnode; @@ -913,8 +913,8 @@ out_unlock: static ssize_t lbs_bcnmiss_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *pcmdnode; struct cmd_ds_command *pcmdptr; struct cmd_ds_802_11_subscribe_event *event; @@ -985,8 +985,8 @@ static ssize_t lbs_bcnmiss_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; ssize_t res, buf_size; int value, freq, subscribed, cmd_len; struct cmd_ctrl_node *pcmdnode; @@ -1063,8 +1063,8 @@ out_unlock: static ssize_t lbs_highrssi_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *pcmdnode; struct cmd_ds_command *pcmdptr; struct cmd_ds_802_11_subscribe_event *event; @@ -1136,8 +1136,8 @@ static ssize_t lbs_highrssi_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; ssize_t res, buf_size; int value, freq, subscribed, cmd_len; struct cmd_ctrl_node *pcmdnode; @@ -1213,8 +1213,8 @@ out_unlock: static ssize_t lbs_highsnr_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *pcmdnode; struct cmd_ds_command *pcmdptr; struct cmd_ds_802_11_subscribe_event *event; @@ -1286,8 +1286,8 @@ static ssize_t lbs_highsnr_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; ssize_t res, buf_size; int value, freq, subscribed, cmd_len; struct cmd_ctrl_node *pcmdnode; @@ -1365,8 +1365,8 @@ out_unlock: static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; struct lbs_offset_value offval; ssize_t pos = 0; int ret; @@ -1392,7 +1392,7 @@ static ssize_t lbs_rdmac_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; ssize_t res, buf_size; unsigned long addr = get_zeroed_page(GFP_KERNEL); char *buf = (char *)addr; @@ -1414,7 +1414,7 @@ static ssize_t lbs_wrmac_write(struct file *file, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; ssize_t res, buf_size; u32 offset, value; struct lbs_offset_value offval; @@ -1448,8 +1448,8 @@ out_unlock: static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; struct lbs_offset_value offval; ssize_t pos = 0; int ret; @@ -1476,7 +1476,7 @@ static ssize_t lbs_rdbbp_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; ssize_t res, buf_size; unsigned long addr = get_zeroed_page(GFP_KERNEL); char *buf = (char *)addr; @@ -1498,7 +1498,7 @@ static ssize_t lbs_wrbbp_write(struct file *file, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; ssize_t res, buf_size; u32 offset, value; struct lbs_offset_value offval; @@ -1532,8 +1532,8 @@ out_unlock: static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = file->private_data; + struct lbs_adapter *adapter = priv->adapter; struct lbs_offset_value offval; ssize_t pos = 0; int ret; @@ -1560,7 +1560,7 @@ static ssize_t lbs_rdrf_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; ssize_t res, buf_size; unsigned long addr = get_zeroed_page(GFP_KERNEL); char *buf = (char *)addr; @@ -1582,7 +1582,7 @@ static ssize_t lbs_wrrf_write(struct file *file, size_t count, loff_t *ppos) { - lbs_private *priv = file->private_data; + struct lbs_private *priv = file->private_data; ssize_t res, buf_size; u32 offset, value; struct lbs_offset_value offval; @@ -1675,7 +1675,7 @@ void lbs_debugfs_remove(void) return; } -void lbs_debugfs_init_one(lbs_private *priv, struct net_device *dev) +void lbs_debugfs_init_one(struct lbs_private *priv, struct net_device *dev) { int i; struct lbs_debugfs_files *files; @@ -1728,7 +1728,7 @@ exit: return; } -void lbs_debugfs_remove_one(lbs_private *priv) +void lbs_debugfs_remove_one(struct lbs_private *priv) { int i; @@ -1755,8 +1755,8 @@ void lbs_debugfs_remove_one(lbs_private *priv) #ifdef PROC_DEBUG -#define item_size(n) (FIELD_SIZEOF(lbs_adapter, n)) -#define item_addr(n) (offsetof(lbs_adapter, n)) +#define item_size(n) (FIELD_SIZEOF(struct lbs_adapter, n)) +#define item_addr(n) (offsetof(struct lbs_adapter, n)) struct debug_data { @@ -1765,7 +1765,7 @@ struct debug_data { size_t addr; }; -/* To debug any member of lbs_adapter, simply add one line here. +/* To debug any member of struct lbs_adapter, simply add one line here. */ static struct debug_data items[] = { {"intcounter", item_size(intcounter), item_addr(intcounter)}, @@ -1892,11 +1892,11 @@ static struct file_operations lbs_debug_fops = { /** * @brief create debug proc file * - * @param priv pointer lbs_private + * @param priv pointer struct lbs_private * @param dev pointer net_device * @return N/A */ -static void lbs_debug_init(lbs_private * priv, struct net_device *dev) +static void lbs_debug_init(struct lbs_private *priv, struct net_device *dev) { int i; diff --git a/drivers/net/wireless/libertas/debugfs.h b/drivers/net/wireless/libertas/debugfs.h index c9758458198..f2b9c7ffe0f 100644 --- a/drivers/net/wireless/libertas/debugfs.h +++ b/drivers/net/wireless/libertas/debugfs.h @@ -4,7 +4,7 @@ void lbs_debugfs_init(void); void lbs_debugfs_remove(void); -void lbs_debugfs_init_one(lbs_private *priv, struct net_device *dev); -void lbs_debugfs_remove_one(lbs_private *priv); +void lbs_debugfs_init_one(struct lbs_private *priv, struct net_device *dev); +void lbs_debugfs_remove_one(struct lbs_private *priv); #endif diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h index 7dd76f8e8d2..74187f34666 100644 --- a/drivers/net/wireless/libertas/decl.h +++ b/drivers/net/wireless/libertas/decl.h @@ -12,71 +12,79 @@ /** Function Prototype Declaration */ struct lbs_private; +struct lbs_adapter; struct sk_buff; struct net_device; -int lbs_set_mac_packet_filter(lbs_private * priv); +int lbs_set_mac_packet_filter(struct lbs_private *priv); -void lbs_send_tx_feedback(lbs_private * priv); +void lbs_send_tx_feedback(struct lbs_private *priv); -int lbs_free_cmd_buffer(lbs_private * priv); +int lbs_free_cmd_buffer(struct lbs_private *priv); struct cmd_ctrl_node; -struct cmd_ctrl_node *lbs_get_free_cmd_ctrl_node(lbs_private * priv); +struct cmd_ctrl_node *lbs_get_free_cmd_ctrl_node(struct lbs_private *priv); -void lbs_set_cmd_ctrl_node(lbs_private * priv, - struct cmd_ctrl_node *ptempnode, - u32 cmd_oid, u16 wait_option, void *pdata_buf); +void lbs_set_cmd_ctrl_node(struct lbs_private *priv, + struct cmd_ctrl_node *ptempnode, + u32 cmd_oid, u16 wait_option, void *pdata_buf); -int lbs_prepare_and_send_command(lbs_private * priv, - u16 cmd_no, - u16 cmd_action, - u16 wait_option, u32 cmd_oid, void *pdata_buf); +int lbs_prepare_and_send_command(struct lbs_private *priv, + u16 cmd_no, + u16 cmd_action, + u16 wait_option, u32 cmd_oid, void *pdata_buf); -void lbs_queue_cmd(lbs_adapter *adapter, struct cmd_ctrl_node *cmdnode, u8 addtail); +void lbs_queue_cmd(struct lbs_adapter *adapter, + struct cmd_ctrl_node *cmdnode, + u8 addtail); -int lbs_allocate_cmd_buffer(lbs_private * priv); -int lbs_execute_next_command(lbs_private * priv); -int lbs_process_event(lbs_private * priv); +int lbs_allocate_cmd_buffer(struct lbs_private *priv); +int lbs_execute_next_command(struct lbs_private *priv); +int lbs_process_event(struct lbs_private *priv); void lbs_interrupt(struct net_device *); -int lbs_set_radio_control(lbs_private * priv); +int lbs_set_radio_control(struct lbs_private *priv); u32 lbs_fw_index_to_data_rate(u8 index); u8 lbs_data_rate_to_fw_index(u32 rate); -void lbs_get_fwversion(lbs_adapter *adapter, char *fwversion, int maxlen); +void lbs_get_fwversion(struct lbs_adapter *adapter, + char *fwversion, + int maxlen); -void lbs_upload_rx_packet(lbs_private * priv, struct sk_buff *skb); +void lbs_upload_rx_packet(struct lbs_private *priv, struct sk_buff *skb); /** The proc fs interface */ -int lbs_process_rx_command(lbs_private * priv); -int lbs_process_tx(lbs_private * priv, struct sk_buff *skb); -void __lbs_cleanup_and_insert_cmd(lbs_private * priv, - struct cmd_ctrl_node *ptempcmd); +int lbs_process_rx_command(struct lbs_private *priv); +int lbs_process_tx(struct lbs_private *priv, struct sk_buff *skb); +void __lbs_cleanup_and_insert_cmd(struct lbs_private *priv, + struct cmd_ctrl_node *ptempcmd); -int lbs_set_regiontable(lbs_private * priv, u8 region, u8 band); +int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band); -int lbs_process_rxed_packet(lbs_private * priv, struct sk_buff *); +int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *); -void lbs_ps_sleep(lbs_private * priv, int wait_option); -void lbs_ps_confirm_sleep(lbs_private * priv, u16 psmode); -void lbs_ps_wakeup(lbs_private * priv, int wait_option); +void lbs_ps_sleep(struct lbs_private *priv, int wait_option); +void lbs_ps_confirm_sleep(struct lbs_private *priv, u16 psmode); +void lbs_ps_wakeup(struct lbs_private *priv, int wait_option); -void lbs_tx_runqueue(lbs_private *priv); +void lbs_tx_runqueue(struct lbs_private *priv); struct chan_freq_power *lbs_find_cfp_by_band_and_channel( - lbs_adapter *adapter, u8 band, u16 channel); + struct lbs_adapter *adapter, + u8 band, + u16 channel); -void lbs_mac_event_disconnected(lbs_private * priv); +void lbs_mac_event_disconnected(struct lbs_private *priv); -void lbs_send_iwevcustom_event(lbs_private *priv, s8 *str); +void lbs_send_iwevcustom_event(struct lbs_private *priv, s8 *str); /* main.c */ -struct chan_freq_power *lbs_get_region_cfp_table(u8 region, u8 band, - int *cfp_no); -lbs_private *lbs_add_card(void *card, struct device *dmdev); -int lbs_remove_card(lbs_private *priv); -int lbs_start_card(lbs_private *priv); -int lbs_stop_card(lbs_private *priv); -int lbs_add_mesh(lbs_private *priv, struct device *dev); -void lbs_remove_mesh(lbs_private *priv); -int lbs_reset_device(lbs_private *priv); +struct chan_freq_power *lbs_get_region_cfp_table(u8 region, + u8 band, + int *cfp_no); +struct lbs_private *lbs_add_card(void *card, struct device *dmdev); +int lbs_remove_card(struct lbs_private *priv); +int lbs_start_card(struct lbs_private *priv); +int lbs_stop_card(struct lbs_private *priv); +int lbs_add_mesh(struct lbs_private *priv, struct device *dev); +void lbs_remove_mesh(struct lbs_private *priv); +int lbs_reset_device(struct lbs_private *priv); #endif diff --git a/drivers/net/wireless/libertas/defs.h b/drivers/net/wireless/libertas/defs.h index 81ab99c3f49..82423842a70 100644 --- a/drivers/net/wireless/libertas/defs.h +++ b/drivers/net/wireless/libertas/defs.h @@ -262,8 +262,6 @@ static inline void lbs_deb_hex(unsigned int grp, const char *prompt, u8 *buf, in #define UNSET_MESH_FRAME(x) (x->cb[6]=0) /** Global Variable Declaration */ -typedef struct _lbs_private lbs_private; -typedef struct _lbs_adapter lbs_adapter; extern const char lbs_driver_version[]; extern u16 lbs_region_code_to_index[MRVDRV_MAX_REGION_CODE]; diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 53776bca86f..1efea63c669 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -1,7 +1,7 @@ /** * This file contains definitions and data structures specific * to Marvell 802.11 NIC. It contains the Device Information - * structure lbs_adapter. + * structure struct lbs_adapter. */ #ifndef _LBS_DEV_H_ #define _LBS_DEV_H_ @@ -99,7 +99,7 @@ struct lbs_mesh_stats { }; /** Private structure for the MV device */ -struct _lbs_private { +struct lbs_private { int open; int mesh_open; int infra_open; @@ -109,7 +109,7 @@ struct _lbs_private { char name[DEV_NAME_LEN]; void *card; - lbs_adapter *adapter; + struct lbs_adapter *adapter; struct net_device *dev; struct net_device_stats stats; @@ -155,9 +155,9 @@ struct _lbs_private { struct work_struct sync_channel; /** Hardware access */ - int (*hw_host_to_card) (lbs_private *priv, u8 type, u8 *payload, u16 nb); - int (*hw_get_int_status) (lbs_private *priv, u8 *); - int (*hw_read_event_cause) (lbs_private *); + int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb); + int (*hw_get_int_status) (struct lbs_private *priv, u8 *); + int (*hw_read_event_cause) (struct lbs_private *); }; /** Association request @@ -205,7 +205,7 @@ struct assoc_request { }; /** Wlan adapter data structure*/ -struct _lbs_adapter { +struct lbs_adapter { /** STATUS variables */ u8 fwreleasenumber[4]; u32 fwcapinfo; diff --git a/drivers/net/wireless/libertas/ethtool.c b/drivers/net/wireless/libertas/ethtool.c index 8121399f4b9..f32fb00129e 100644 --- a/drivers/net/wireless/libertas/ethtool.c +++ b/drivers/net/wireless/libertas/ethtool.c @@ -22,7 +22,7 @@ static const char * mesh_stat_strings[]= { static void lbs_ethtool_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) { - lbs_private *priv = (lbs_private *) dev->priv; + struct lbs_private *priv = (struct lbs_private *) dev->priv; char fwver[32]; lbs_get_fwversion(priv->adapter, fwver, sizeof(fwver) - 1); @@ -45,8 +45,8 @@ static int lbs_ethtool_get_eeprom_len(struct net_device *dev) static int lbs_ethtool_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 * bytes) { - lbs_private *priv = (lbs_private *) dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = (struct lbs_private *) dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct lbs_ioctl_regrdwr regctrl; char *ptr; int ret; @@ -108,7 +108,7 @@ done: static void lbs_ethtool_get_stats(struct net_device * dev, struct ethtool_stats * stats, u64 * data) { - lbs_private *priv = dev->priv; + struct lbs_private *priv = dev->priv; struct cmd_ds_mesh_access mesh_access; int ret; diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c index b0b95cf2e7c..5fadcc03eea 100644 --- a/drivers/net/wireless/libertas/if_cs.c +++ b/drivers/net/wireless/libertas/if_cs.c @@ -57,7 +57,7 @@ MODULE_LICENSE("GPL"); struct if_cs_card { struct pcmcia_device *p_dev; - lbs_private *priv; + struct lbs_private *priv; void __iomem *iobase; }; @@ -286,7 +286,7 @@ static irqreturn_t if_cs_interrupt(int irq, void *data) /* * Called from if_cs_host_to_card to send a command to the hardware */ -static int if_cs_send_cmd(lbs_private *priv, u8 *buf, u16 nb) +static int if_cs_send_cmd(struct lbs_private *priv, u8 *buf, u16 nb) { struct if_cs_card *card = (struct if_cs_card *)priv->card; int ret = -1; @@ -331,7 +331,7 @@ done: /* * Called from if_cs_host_to_card to send a data to the hardware */ -static void if_cs_send_data(lbs_private *priv, u8 *buf, u16 nb) +static void if_cs_send_data(struct lbs_private *priv, u8 *buf, u16 nb) { struct if_cs_card *card = (struct if_cs_card *)priv->card; @@ -354,7 +354,7 @@ static void if_cs_send_data(lbs_private *priv, u8 *buf, u16 nb) /* * Get the command result out of the card. */ -static int if_cs_receive_cmdres(lbs_private *priv, u8 *data, u32 *len) +static int if_cs_receive_cmdres(struct lbs_private *priv, u8 *data, u32 *len) { int ret = -1; u16 val; @@ -386,7 +386,7 @@ out: } -static struct sk_buff *if_cs_receive_data(lbs_private *priv) +static struct sk_buff *if_cs_receive_data(struct lbs_private *priv) { struct sk_buff *skb = NULL; u16 len; @@ -616,7 +616,10 @@ done: /********************************************************************/ /* Send commands or data packets to the card */ -static int if_cs_host_to_card(lbs_private *priv, u8 type, u8 *buf, u16 nb) +static int if_cs_host_to_card(struct lbs_private *priv, + u8 type, + u8 *buf, + u16 nb) { int ret = -1; @@ -641,10 +644,10 @@ static int if_cs_host_to_card(lbs_private *priv, u8 type, u8 *buf, u16 nb) } -static int if_cs_get_int_status(lbs_private *priv, u8 *ireg) +static int if_cs_get_int_status(struct lbs_private *priv, u8 *ireg) { struct if_cs_card *card = (struct if_cs_card *)priv->card; - /* lbs_adapter *adapter = priv->adapter; */ + /* struct lbs_adapter *adapter = priv->adapter; */ int ret = 0; u16 int_cause; u8 *cmdbuf; @@ -698,7 +701,7 @@ out: } -static int if_cs_read_event_cause(lbs_private *priv) +static int if_cs_read_event_cause(struct lbs_private *priv) { lbs_deb_enter(LBS_DEB_CS); @@ -746,7 +749,7 @@ static void if_cs_release(struct pcmcia_device *p_dev) static int if_cs_probe(struct pcmcia_device *p_dev) { int ret = -ENOMEM; - lbs_private *priv; + struct lbs_private *priv; struct if_cs_card *card; /* CIS parsing */ tuple_t tuple; diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index de4ad57fae4..7a7037bdd37 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c @@ -82,7 +82,7 @@ struct if_sdio_packet { struct if_sdio_card { struct sdio_func *func; - lbs_private *priv; + struct lbs_private *priv; int model; unsigned long ioport; @@ -694,7 +694,8 @@ out: /* Libertas callbacks */ /*******************************************************************/ -static int if_sdio_host_to_card(lbs_private *priv, u8 type, u8 *buf, u16 nb) +static int if_sdio_host_to_card(struct lbs_private *priv, + u8 type, u8 *buf, u16 nb) { int ret; struct if_sdio_card *card; @@ -775,7 +776,7 @@ out: return ret; } -static int if_sdio_get_int_status(lbs_private *priv, u8 *ireg) +static int if_sdio_get_int_status(struct lbs_private *priv, u8 *ireg) { struct if_sdio_card *card; @@ -791,7 +792,7 @@ static int if_sdio_get_int_status(lbs_private *priv, u8 *ireg) return 0; } -static int if_sdio_read_event_cause(lbs_private *priv) +static int if_sdio_read_event_cause(struct lbs_private *priv) { struct if_sdio_card *card; @@ -857,7 +858,7 @@ static int if_sdio_probe(struct sdio_func *func, const struct sdio_device_id *id) { struct if_sdio_card *card; - lbs_private *priv; + struct lbs_private *priv; int ret, i; unsigned int model; struct if_sdio_packet *packet; diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 26176d54c57..4fce0baa071 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -32,9 +32,12 @@ MODULE_DEVICE_TABLE(usb, if_usb_table); static void if_usb_receive(struct urb *urb); static void if_usb_receive_fwload(struct urb *urb); static int if_usb_prog_firmware(struct usb_card_rec *cardp); -static int if_usb_host_to_card(lbs_private *priv, u8 type, u8 *payload, u16 nb); -static int if_usb_get_int_status(lbs_private *priv, u8 *); -static int if_usb_read_event_cause(lbs_private *); +static int if_usb_host_to_card(struct lbs_private *priv, + u8 type, + u8 *payload, + u16 nb); +static int if_usb_get_int_status(struct lbs_private *priv, u8 *); +static int if_usb_read_event_cause(struct lbs_private *); static int usb_tx_block(struct usb_card_rec *cardp, u8 *payload, u16 nb); static void if_usb_free(struct usb_card_rec *cardp); static int if_usb_submit_rx_urb(struct usb_card_rec *cardp); @@ -52,7 +55,7 @@ static void if_usb_write_bulk_callback(struct urb *urb) /* handle the transmission complete validations */ if (urb->status == 0) { - lbs_private *priv = cardp->priv; + struct lbs_private *priv = cardp->priv; /* lbs_deb_usbd(&urb->dev->dev, "URB status is successfull\n"); @@ -64,7 +67,7 @@ static void if_usb_write_bulk_callback(struct urb *urb) * valid at firmware load time. */ if (priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct net_device *dev = priv->dev; priv->dnld_sent = DNLD_RES_RECEIVED; @@ -124,7 +127,7 @@ static int if_usb_probe(struct usb_interface *intf, struct usb_device *udev; struct usb_host_interface *iface_desc; struct usb_endpoint_descriptor *endpoint; - lbs_private *priv; + struct lbs_private *priv; struct usb_card_rec *cardp; int i; @@ -259,7 +262,7 @@ error: static void if_usb_disconnect(struct usb_interface *intf) { struct usb_card_rec *cardp = usb_get_intfdata(intf); - lbs_private *priv = (lbs_private *) cardp->priv; + struct lbs_private *priv = (struct lbs_private *) cardp->priv; lbs_deb_enter(LBS_DEB_MAIN); @@ -267,7 +270,7 @@ static void if_usb_disconnect(struct usb_interface *intf) cardp->surprise_removed = 1; if (priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; adapter->surpriseremoved = 1; lbs_stop_card(priv); @@ -290,7 +293,7 @@ static void if_usb_disconnect(struct usb_interface *intf) /** * @brief This function download FW - * @param priv pointer to lbs_private + * @param priv pointer to struct lbs_private * @return 0 */ static int if_prog_firmware(struct usb_card_rec *cardp) @@ -373,7 +376,7 @@ static int if_prog_firmware(struct usb_card_rec *cardp) static int if_usb_reset_device(struct usb_card_rec *cardp) { int ret; - lbs_private * priv = cardp->priv; + struct lbs_private *priv = cardp->priv; lbs_deb_enter(LBS_DEB_USB); @@ -394,7 +397,7 @@ static int if_usb_reset_device(struct usb_card_rec *cardp) /** * @brief This function transfer the data to the device. - * @param priv pointer to lbs_private + * @param priv pointer to struct lbs_private * @param payload pointer to payload data * @param nb data length * @return 0 or -1 @@ -571,7 +574,7 @@ exit: static inline void process_cmdtypedata(int recvlength, struct sk_buff *skb, struct usb_card_rec *cardp, - lbs_private *priv) + struct lbs_private *priv) { if (recvlength > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE + MESSAGE_HEADER_LEN || recvlength < MRVDRV_MIN_PKT_LEN) { @@ -591,7 +594,7 @@ static inline void process_cmdtypedata(int recvlength, struct sk_buff *skb, static inline void process_cmdrequest(int recvlength, u8 *recvbuff, struct sk_buff *skb, struct usb_card_rec *cardp, - lbs_private *priv) + struct lbs_private *priv) { u8 *cmdbuf; if (recvlength > MRVDRV_SIZE_OF_CMD_BUFFER) { @@ -640,7 +643,7 @@ static void if_usb_receive(struct urb *urb) struct read_cb_info *rinfo = (struct read_cb_info *)urb->context; struct sk_buff *skb = rinfo->skb; struct usb_card_rec *cardp = (struct usb_card_rec *) rinfo->cardp; - lbs_private * priv = cardp->priv; + struct lbs_private *priv = cardp->priv; int recvlength = urb->actual_length; u8 *recvbuff = NULL; @@ -708,13 +711,16 @@ rx_exit: /** * @brief This function downloads data to FW - * @param priv pointer to lbs_private structure + * @param priv pointer to struct lbs_private structure * @param type type of data * @param buf pointer to data buffer * @param len number of bytes * @return 0 or -1 */ -static int if_usb_host_to_card(lbs_private *priv, u8 type, u8 *payload, u16 nb) +static int if_usb_host_to_card(struct lbs_private *priv, + u8 type, + u8 *payload, + u16 nb) { struct usb_card_rec *cardp = (struct usb_card_rec *)priv->card; @@ -741,7 +747,7 @@ static int if_usb_host_to_card(lbs_private *priv, u8 type, u8 *payload, u16 nb) } /* called with adapter->driver_lock held */ -static int if_usb_get_int_status(lbs_private *priv, u8 *ireg) +static int if_usb_get_int_status(struct lbs_private *priv, u8 *ireg) { struct usb_card_rec *cardp = priv->card; @@ -753,7 +759,7 @@ static int if_usb_get_int_status(lbs_private *priv, u8 *ireg) return 0; } -static int if_usb_read_event_cause(lbs_private * priv) +static int if_usb_read_event_cause(struct lbs_private *priv) { struct usb_card_rec *cardp = priv->card; @@ -928,7 +934,7 @@ done: static int if_usb_suspend(struct usb_interface *intf, pm_message_t message) { struct usb_card_rec *cardp = usb_get_intfdata(intf); - lbs_private *priv = cardp->priv; + struct lbs_private *priv = cardp->priv; lbs_deb_enter(LBS_DEB_USB); @@ -964,7 +970,7 @@ static int if_usb_suspend(struct usb_interface *intf, pm_message_t message) static int if_usb_resume(struct usb_interface *intf) { struct usb_card_rec *cardp = usb_get_intfdata(intf); - lbs_private *priv = cardp->priv; + struct lbs_private *priv = cardp->priv; lbs_deb_enter(LBS_DEB_USB); diff --git a/drivers/net/wireless/libertas/join.c b/drivers/net/wireless/libertas/join.c index ca67524ee8d..d80b6e05e27 100644 --- a/drivers/net/wireless/libertas/join.c +++ b/drivers/net/wireless/libertas/join.c @@ -30,13 +30,15 @@ * NOTE: Setting the MSB of the basic rates need to be taken * care, either before or after calling this function * - * @param adapter A pointer to lbs_adapter structure + * @param adapter A pointer to struct lbs_adapter structure * @param rate1 the buffer which keeps input and output * @param rate1_size the size of rate1 buffer; new size of buffer on return * * @return 0 or -1 */ -static int get_common_rates(lbs_adapter *adapter, u8 *rates, u16 *rates_size) +static int get_common_rates(struct lbs_adapter *adapter, + u8 *rates, + u16 *rates_size) { u8 *card_rates = lbs_bg_rates; size_t num_card_rates = sizeof(lbs_bg_rates); @@ -116,14 +118,14 @@ void lbs_unset_basic_rate_flags(u8 *rates, size_t len) /** * @brief Associate to a specific BSS discovered in a scan * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param pbssdesc Pointer to the BSS descriptor to associate with. * * @return 0-success, otherwise fail */ -int lbs_associate(lbs_private *priv, struct assoc_request *assoc_req) +int lbs_associate(struct lbs_private *priv, struct assoc_request *assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret; lbs_deb_enter(LBS_DEB_JOIN); @@ -155,13 +157,14 @@ done: /** * @brief Start an Adhoc Network * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param adhocssid The ssid of the Adhoc Network * @return 0--success, -1--fail */ -int lbs_start_adhoc_network(lbs_private *priv, struct assoc_request *assoc_req) +int lbs_start_adhoc_network(struct lbs_private *priv, + struct assoc_request *assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; adapter->adhoccreate = 1; @@ -188,15 +191,16 @@ int lbs_start_adhoc_network(lbs_private *priv, struct assoc_request *assoc_req) /** * @brief Join an adhoc network found in a previous scan * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param pbssdesc Pointer to a BSS descriptor found in a previous scan * to attempt to join * * @return 0--success, -1--fail */ -int lbs_join_adhoc_network(lbs_private *priv, struct assoc_request *assoc_req) +int lbs_join_adhoc_network(struct lbs_private *priv, + struct assoc_request *assoc_req) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct bss_descriptor * bss = &assoc_req->bss; int ret = 0; @@ -258,7 +262,7 @@ out: return ret; } -int lbs_stop_adhoc_network(lbs_private * priv) +int lbs_stop_adhoc_network(struct lbs_private *priv) { return lbs_prepare_and_send_command(priv, CMD_802_11_AD_HOC_STOP, 0, CMD_OPTION_WAITFORRSP, 0, NULL); @@ -267,10 +271,10 @@ int lbs_stop_adhoc_network(lbs_private * priv) /** * @brief Send Deauthentication Request * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return 0--success, -1--fail */ -int lbs_send_deauthentication(lbs_private *priv) +int lbs_send_deauthentication(struct lbs_private *priv) { return lbs_prepare_and_send_command(priv, CMD_802_11_DEAUTHENTICATE, 0, CMD_OPTION_WAITFORRSP, 0, NULL); @@ -279,17 +283,17 @@ int lbs_send_deauthentication(lbs_private *priv) /** * @brief This function prepares command of authenticate. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param cmd A pointer to cmd_ds_command structure * @param pdata_buf Void cast of pointer to a BSSID to authenticate with * * @return 0 or -1 */ -int lbs_cmd_80211_authenticate(lbs_private *priv, +int lbs_cmd_80211_authenticate(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_authenticate *pauthenticate = &cmd->params.auth; int ret = -1; u8 *bssid = pdata_buf; @@ -329,10 +333,10 @@ out: return ret; } -int lbs_cmd_80211_deauthenticate(lbs_private *priv, +int lbs_cmd_80211_deauthenticate(struct lbs_private *priv, struct cmd_ds_command *cmd) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_deauthenticate *dauth = &cmd->params.deauth; lbs_deb_enter(LBS_DEB_JOIN); @@ -352,10 +356,10 @@ int lbs_cmd_80211_deauthenticate(lbs_private *priv, return 0; } -int lbs_cmd_80211_associate(lbs_private *priv, +int lbs_cmd_80211_associate(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_associate *passo = &cmd->params.associate; int ret = 0; struct assoc_request * assoc_req = pdata_buf; @@ -468,10 +472,10 @@ done: return ret; } -int lbs_cmd_80211_ad_hoc_start(lbs_private *priv, +int lbs_cmd_80211_ad_hoc_start(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_ad_hoc_start *adhs = &cmd->params.ads; int ret = 0; int cmdappendsize = 0; @@ -582,7 +586,7 @@ done: return ret; } -int lbs_cmd_80211_ad_hoc_stop(lbs_private *priv, +int lbs_cmd_80211_ad_hoc_stop(struct lbs_private *priv, struct cmd_ds_command *cmd) { cmd->command = cpu_to_le16(CMD_802_11_AD_HOC_STOP); @@ -591,10 +595,10 @@ int lbs_cmd_80211_ad_hoc_stop(lbs_private *priv, return 0; } -int lbs_cmd_80211_ad_hoc_join(lbs_private *priv, +int lbs_cmd_80211_ad_hoc_join(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_ad_hoc_join *join_cmd = &cmd->params.adj; struct assoc_request * assoc_req = pdata_buf; struct bss_descriptor *bss = &assoc_req->bss; @@ -694,10 +698,10 @@ done: return ret; } -int lbs_ret_80211_associate(lbs_private *priv, +int lbs_ret_80211_associate(struct lbs_private *priv, struct cmd_ds_command *resp) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; union iwreq_data wrqu; struct ieeetypes_assocrsp *passocrsp; @@ -807,7 +811,7 @@ done: return ret; } -int lbs_ret_80211_disassociate(lbs_private *priv, +int lbs_ret_80211_disassociate(struct lbs_private *priv, struct cmd_ds_command *resp) { lbs_deb_enter(LBS_DEB_JOIN); @@ -818,10 +822,10 @@ int lbs_ret_80211_disassociate(lbs_private *priv, return 0; } -int lbs_ret_80211_ad_hoc_start(lbs_private *priv, +int lbs_ret_80211_ad_hoc_start(struct lbs_private *priv, struct cmd_ds_command *resp) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; u16 command = le16_to_cpu(resp->command); u16 result = le16_to_cpu(resp->result); @@ -897,7 +901,7 @@ done: return ret; } -int lbs_ret_80211_ad_hoc_stop(lbs_private *priv, +int lbs_ret_80211_ad_hoc_stop(struct lbs_private *priv, struct cmd_ds_command *resp) { lbs_deb_enter(LBS_DEB_JOIN); diff --git a/drivers/net/wireless/libertas/join.h b/drivers/net/wireless/libertas/join.h index 5c2b2df5e57..c617d071f78 100644 --- a/drivers/net/wireless/libertas/join.h +++ b/drivers/net/wireless/libertas/join.h @@ -12,41 +12,41 @@ #include "dev.h" struct cmd_ds_command; -int lbs_cmd_80211_authenticate(lbs_private *priv, +int lbs_cmd_80211_authenticate(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf); -int lbs_cmd_80211_ad_hoc_join(lbs_private *priv, +int lbs_cmd_80211_ad_hoc_join(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf); -int lbs_cmd_80211_ad_hoc_stop(lbs_private *priv, +int lbs_cmd_80211_ad_hoc_stop(struct lbs_private *priv, struct cmd_ds_command *cmd); -int lbs_cmd_80211_ad_hoc_start(lbs_private *priv, +int lbs_cmd_80211_ad_hoc_start(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf); -int lbs_cmd_80211_deauthenticate(lbs_private *priv, +int lbs_cmd_80211_deauthenticate(struct lbs_private *priv, struct cmd_ds_command *cmd); -int lbs_cmd_80211_associate(lbs_private *priv, +int lbs_cmd_80211_associate(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf); -int lbs_ret_80211_ad_hoc_start(lbs_private *priv, +int lbs_ret_80211_ad_hoc_start(struct lbs_private *priv, struct cmd_ds_command *resp); -int lbs_ret_80211_ad_hoc_stop(lbs_private *priv, +int lbs_ret_80211_ad_hoc_stop(struct lbs_private *priv, struct cmd_ds_command *resp); -int lbs_ret_80211_disassociate(lbs_private *priv, +int lbs_ret_80211_disassociate(struct lbs_private *priv, struct cmd_ds_command *resp); -int lbs_ret_80211_associate(lbs_private *priv, +int lbs_ret_80211_associate(struct lbs_private *priv, struct cmd_ds_command *resp); -int lbs_start_adhoc_network(lbs_private *priv, +int lbs_start_adhoc_network(struct lbs_private *priv, struct assoc_request * assoc_req); -int lbs_join_adhoc_network(lbs_private *priv, +int lbs_join_adhoc_network(struct lbs_private *priv, struct assoc_request * assoc_req); -int lbs_stop_adhoc_network(lbs_private *priv); +int lbs_stop_adhoc_network(struct lbs_private *priv); -int lbs_send_deauthentication(lbs_private *priv); +int lbs_send_deauthentication(struct lbs_private *priv); -int lbs_associate(lbs_private *priv, struct assoc_request *assoc_req); +int lbs_associate(struct lbs_private *priv, struct assoc_request *assoc_req); void lbs_unset_basic_rate_flags(u8 *rates, size_t len); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 769117916fb..a3957698edb 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -247,8 +247,8 @@ static ssize_t lbs_anycast_set(struct device *dev, return strlen(buf); } -int lbs_add_rtap(lbs_private *priv); -void lbs_remove_rtap(lbs_private *priv); +int lbs_add_rtap(struct lbs_private *priv); +void lbs_remove_rtap(struct lbs_private *priv); /** * Get function for sysfs attribute rtap @@ -256,8 +256,9 @@ void lbs_remove_rtap(lbs_private *priv); static ssize_t lbs_rtap_get(struct device *dev, struct device_attribute *attr, char * buf) { - lbs_private *priv = (lbs_private *) (to_net_dev(dev))->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = (struct lbs_private *) + (to_net_dev(dev))->priv; + struct lbs_adapter *adapter = priv->adapter; return snprintf(buf, 5, "0x%X\n", adapter->monitormode); } @@ -268,8 +269,9 @@ static ssize_t lbs_rtap_set(struct device *dev, struct device_attribute *attr, const char * buf, size_t count) { int monitor_mode; - lbs_private *priv = (lbs_private *) (to_net_dev(dev))->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = (struct lbs_private *) + (to_net_dev(dev))->priv; + struct lbs_adapter *adapter = priv->adapter; sscanf(buf, "%x", &monitor_mode); if (monitor_mode != LBS_MONITOR_OFF) { @@ -332,7 +334,7 @@ static ssize_t lbs_autostart_enabled_set(struct device *dev, { struct cmd_ds_mesh_access mesh_access; uint32_t datum; - lbs_private *priv = (to_net_dev(dev))->priv; + struct lbs_private *priv = (to_net_dev(dev))->priv; int ret; memset(&mesh_access, 0, sizeof(mesh_access)); @@ -375,8 +377,8 @@ static struct attribute_group lbs_mesh_attr_group = { */ static int pre_open_check(struct net_device *dev) { - lbs_private *priv = (lbs_private *) dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = (struct lbs_private *) dev->priv; + struct lbs_adapter *adapter = priv->adapter; int i = 0; while (!adapter->fw_ready && i < 20) { @@ -399,8 +401,8 @@ static int pre_open_check(struct net_device *dev) */ static int lbs_dev_open(struct net_device *dev) { - lbs_private *priv = (lbs_private *) dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = (struct lbs_private *) dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_NET); @@ -429,7 +431,7 @@ static int lbs_dev_open(struct net_device *dev) */ static int lbs_mesh_open(struct net_device *dev) { - lbs_private *priv = (lbs_private *) dev->priv ; + struct lbs_private *priv = (struct lbs_private *) dev->priv ; if (pre_open_check(dev) == -1) return -1; @@ -453,7 +455,7 @@ static int lbs_mesh_open(struct net_device *dev) */ static int lbs_open(struct net_device *dev) { - lbs_private *priv = (lbs_private *) dev->priv ; + struct lbs_private *priv = (struct lbs_private *) dev->priv ; if(pre_open_check(dev) == -1) return -1; @@ -466,7 +468,7 @@ static int lbs_open(struct net_device *dev) static int lbs_dev_close(struct net_device *dev) { - lbs_private *priv = dev->priv; + struct lbs_private *priv = dev->priv; lbs_deb_enter(LBS_DEB_NET); @@ -485,7 +487,7 @@ static int lbs_dev_close(struct net_device *dev) */ static int lbs_mesh_close(struct net_device *dev) { - lbs_private *priv = (lbs_private *) (dev->priv); + struct lbs_private *priv = (struct lbs_private *) (dev->priv); priv->mesh_open = 0; netif_stop_queue(priv->mesh_dev); @@ -503,7 +505,7 @@ static int lbs_mesh_close(struct net_device *dev) */ static int lbs_close(struct net_device *dev) { - lbs_private *priv = (lbs_private *) dev->priv; + struct lbs_private *priv = (struct lbs_private *) dev->priv; netif_stop_queue(dev); priv->infra_open = 0; @@ -517,7 +519,7 @@ static int lbs_close(struct net_device *dev) static int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { int ret = 0; - lbs_private *priv = dev->priv; + struct lbs_private *priv = dev->priv; lbs_deb_enter(LBS_DEB_NET); @@ -544,7 +546,7 @@ done: static int lbs_mesh_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) { - lbs_private *priv = dev->priv; + struct lbs_private *priv = dev->priv; int ret; lbs_deb_enter(LBS_DEB_MESH); @@ -566,7 +568,7 @@ static int lbs_mesh_pre_start_xmit(struct sk_buff *skb, */ static int lbs_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) { - lbs_private *priv = dev->priv; + struct lbs_private *priv = dev->priv; int ret; lbs_deb_enter(LBS_DEB_NET); @@ -585,7 +587,7 @@ static int lbs_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) static void lbs_tx_timeout(struct net_device *dev) { - lbs_private *priv = (lbs_private *) dev->priv; + struct lbs_private *priv = (struct lbs_private *) dev->priv; lbs_deb_enter(LBS_DEB_TX); @@ -617,12 +619,12 @@ static void lbs_tx_timeout(struct net_device *dev) /** * @brief This function returns the network statistics * - * @param dev A pointer to lbs_private structure + * @param dev A pointer to struct lbs_private structure * @return A pointer to net_device_stats structure */ static struct net_device_stats *lbs_get_stats(struct net_device *dev) { - lbs_private *priv = (lbs_private *) dev->priv; + struct lbs_private *priv = (struct lbs_private *) dev->priv; return &priv->stats; } @@ -630,8 +632,8 @@ static struct net_device_stats *lbs_get_stats(struct net_device *dev) static int lbs_set_mac_address(struct net_device *dev, void *addr) { int ret = 0; - lbs_private *priv = (lbs_private *) dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = (struct lbs_private *) dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct sockaddr *phwaddr = addr; lbs_deb_enter(LBS_DEB_NET); @@ -667,7 +669,7 @@ done: return ret; } -static int lbs_copy_multicast_address(lbs_adapter *adapter, +static int lbs_copy_multicast_address(struct lbs_adapter *adapter, struct net_device *dev) { int i = 0; @@ -684,8 +686,8 @@ static int lbs_copy_multicast_address(lbs_adapter *adapter, static void lbs_set_multicast_list(struct net_device *dev) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; int oldpacketfilter; DECLARE_MAC_BUF(mac); @@ -765,8 +767,8 @@ static void lbs_set_multicast_list(struct net_device *dev) static int lbs_thread(void *data) { struct net_device *dev = data; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; wait_queue_t wait; u8 ireg = 0; @@ -928,13 +930,13 @@ static int lbs_thread(void *data) * HW spec from firmware and set basic parameters to * firmware. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return 0 or -1 */ -static int lbs_setup_firmware(lbs_private *priv) +static int lbs_setup_firmware(struct lbs_private *priv) { int ret = -1; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_mesh_access mesh_access; lbs_deb_enter(LBS_DEB_FW); @@ -995,8 +997,8 @@ done: */ static void command_timer_fn(unsigned long data) { - lbs_private *priv = (lbs_private *)data; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = (struct lbs_private *)data; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *ptempnode; struct cmd_ds_command *cmd; unsigned long flags; @@ -1030,9 +1032,9 @@ static void command_timer_fn(unsigned long data) return; } -static int lbs_init_adapter(lbs_private *priv) +static int lbs_init_adapter(struct lbs_private *priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; size_t bufsize; int i, ret = 0; @@ -1101,9 +1103,9 @@ out: return ret; } -static void lbs_free_adapter(lbs_private *priv) +static void lbs_free_adapter(struct lbs_private *priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; if (!adapter) { lbs_deb_fw("why double free adapter?\n"); @@ -1131,25 +1133,27 @@ static void lbs_free_adapter(lbs_private *priv) * card, allocate the lbs_priv and initialize the device. * * @param card A pointer to card - * @return A pointer to lbs_private structure + * @return A pointer to struct lbs_private structure */ -lbs_private *lbs_add_card(void *card, struct device *dmdev) +struct lbs_private *lbs_add_card(void *card, struct device *dmdev) { struct net_device *dev = NULL; - lbs_private *priv = NULL; + struct lbs_private *priv = NULL; lbs_deb_enter(LBS_DEB_NET); /* Allocate an Ethernet device and register it */ - if (!(dev = alloc_etherdev(sizeof(lbs_private)))) { + dev = alloc_etherdev(sizeof(struct lbs_private)); + if (!dev) { lbs_pr_err("init ethX device failed\n"); goto done; } priv = dev->priv; - /* allocate buffer for lbs_adapter */ - if (!(priv->adapter = kzalloc(sizeof(lbs_adapter), GFP_KERNEL))) { - lbs_pr_err("allocate buffer for lbs_adapter failed\n"); + /* allocate buffer for struct lbs_adapter */ + priv->adapter = kzalloc(sizeof(struct lbs_adapter), GFP_KERNEL); + if (!priv->adapter) { + lbs_pr_err("allocate buffer for struct lbs_adapter failed\n"); goto err_kzalloc; } @@ -1217,9 +1221,9 @@ done: EXPORT_SYMBOL_GPL(lbs_add_card); -int lbs_remove_card(lbs_private *priv) +int lbs_remove_card(struct lbs_private *priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct net_device *dev = priv->dev; union iwreq_data wrqu; @@ -1258,7 +1262,7 @@ int lbs_remove_card(lbs_private *priv) EXPORT_SYMBOL_GPL(lbs_remove_card); -int lbs_start_card(lbs_private *priv) +int lbs_start_card(struct lbs_private *priv) { struct net_device *dev = priv->dev; int ret = -1; @@ -1291,7 +1295,7 @@ done: EXPORT_SYMBOL_GPL(lbs_start_card); -int lbs_stop_card(lbs_private *priv) +int lbs_stop_card(struct lbs_private *priv) { struct net_device *dev = priv->dev; int ret = -1; @@ -1324,10 +1328,10 @@ EXPORT_SYMBOL_GPL(lbs_stop_card); /** * @brief This function adds mshX interface * - * @param priv A pointer to the lbs_private structure + * @param priv A pointer to the struct lbs_private structure * @return 0 if successful, -X otherwise */ -int lbs_add_mesh(lbs_private *priv, struct device *dev) +int lbs_add_mesh(struct lbs_private *priv, struct device *dev) { struct net_device *mesh_dev = NULL; int ret = 0; @@ -1385,7 +1389,7 @@ done: EXPORT_SYMBOL_GPL(lbs_add_mesh); -void lbs_remove_mesh(lbs_private *priv) +void lbs_remove_mesh(struct lbs_private *priv) { struct net_device *mesh_dev; @@ -1441,9 +1445,9 @@ struct chan_freq_power *lbs_get_region_cfp_table(u8 region, u8 band, int *cfp_no return NULL; } -int lbs_set_regiontable(lbs_private *priv, u8 region, u8 band) +int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; int i = 0; @@ -1485,7 +1489,7 @@ out: */ void lbs_interrupt(struct net_device *dev) { - lbs_private *priv = dev->priv; + struct lbs_private *priv = dev->priv; lbs_deb_enter(LBS_DEB_THREAD); @@ -1507,7 +1511,7 @@ void lbs_interrupt(struct net_device *dev) } EXPORT_SYMBOL_GPL(lbs_interrupt); -int lbs_reset_device(lbs_private *priv) +int lbs_reset_device(struct lbs_private *priv) { int ret; @@ -1562,12 +1566,12 @@ static int lbs_rtap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) static struct net_device_stats *lbs_rtap_get_stats(struct net_device *dev) { - lbs_private *priv = dev->priv; + struct lbs_private *priv = dev->priv; return &priv->ieee->stats; } -void lbs_remove_rtap(lbs_private *priv) +void lbs_remove_rtap(struct lbs_private *priv) { if (priv->rtap_net_dev == NULL) return; @@ -1576,7 +1580,7 @@ void lbs_remove_rtap(lbs_private *priv) priv->rtap_net_dev = NULL; } -int lbs_add_rtap(lbs_private *priv) +int lbs_add_rtap(struct lbs_private *priv) { int rc = 0; diff --git a/drivers/net/wireless/libertas/rx.c b/drivers/net/wireless/libertas/rx.c index 20495590434..fa467dfef00 100644 --- a/drivers/net/wireless/libertas/rx.c +++ b/drivers/net/wireless/libertas/rx.c @@ -35,19 +35,20 @@ struct rx80211packethdr { void *eth80211_hdr; } __attribute__ ((packed)); -static int process_rxed_802_11_packet(lbs_private *priv, struct sk_buff *skb); +static int process_rxed_802_11_packet(struct lbs_private *priv, + struct sk_buff *skb); /** * @brief This function computes the avgSNR . * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return avgSNR */ -static u8 lbs_getavgsnr(lbs_private *priv) +static u8 lbs_getavgsnr(struct lbs_private *priv) { u8 i; u16 temp = 0; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; if (adapter->numSNRNF == 0) return 0; for (i = 0; i < adapter->numSNRNF; i++) @@ -59,14 +60,14 @@ static u8 lbs_getavgsnr(lbs_private *priv) /** * @brief This function computes the AvgNF * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return AvgNF */ -static u8 lbs_getavgnf(lbs_private *priv) +static u8 lbs_getavgnf(struct lbs_private *priv) { u8 i; u16 temp = 0; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; if (adapter->numSNRNF == 0) return 0; for (i = 0; i < adapter->numSNRNF; i++) @@ -78,13 +79,13 @@ static u8 lbs_getavgnf(lbs_private *priv) /** * @brief This function save the raw SNR/NF to our internel buffer * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param prxpd A pointer to rxpd structure of received packet * @return n/a */ -static void lbs_save_rawSNRNF(lbs_private *priv, struct rxpd *p_rx_pd) +static void lbs_save_rawSNRNF(struct lbs_private *priv, struct rxpd *p_rx_pd) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; if (adapter->numSNRNF < DEFAULT_DATA_AVG_FACTOR) adapter->numSNRNF++; adapter->rawSNR[adapter->nextSNRNF] = p_rx_pd->snr; @@ -98,13 +99,13 @@ static void lbs_save_rawSNRNF(lbs_private *priv, struct rxpd *p_rx_pd) /** * @brief This function computes the RSSI in received packet. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param prxpd A pointer to rxpd structure of received packet * @return n/a */ -static void lbs_compute_rssi(lbs_private *priv, struct rxpd *p_rx_pd) +static void lbs_compute_rssi(struct lbs_private *priv, struct rxpd *p_rx_pd) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_RX); @@ -134,7 +135,7 @@ static void lbs_compute_rssi(lbs_private *priv, struct rxpd *p_rx_pd) lbs_deb_leave(LBS_DEB_RX); } -void lbs_upload_rx_packet(lbs_private *priv, struct sk_buff *skb) +void lbs_upload_rx_packet(struct lbs_private *priv, struct sk_buff *skb) { lbs_deb_rx("skb->data %p\n", skb->data); @@ -154,13 +155,13 @@ void lbs_upload_rx_packet(lbs_private *priv, struct sk_buff *skb) * @brief This function processes received packet and forwards it * to kernel/upper layer * - * @param priv A pointer to lbs_private + * @param priv A pointer to struct lbs_private * @param skb A pointer to skb which includes the received packet * @return 0 or -1 */ -int lbs_process_rxed_packet(lbs_private *priv, struct sk_buff *skb) +int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *skb) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct rxpackethdr *p_rx_pkt; @@ -319,13 +320,14 @@ static u8 convert_mv_rate_to_radiotap(u8 rate) * @brief This function processes a received 802.11 packet and forwards it * to kernel/upper layer * - * @param priv A pointer to lbs_private + * @param priv A pointer to struct lbs_private * @param skb A pointer to skb which includes the received packet * @return 0 or -1 */ -static int process_rxed_802_11_packet(lbs_private *priv, struct sk_buff *skb) +static int process_rxed_802_11_packet(struct lbs_private *priv, + struct sk_buff *skb) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct rx80211packethdr *p_rx_pkt; diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c index 13a0838aa1e..4e465bb4fd6 100644 --- a/drivers/net/wireless/libertas/scan.c +++ b/drivers/net/wireless/libertas/scan.c @@ -163,13 +163,13 @@ static inline int match_bss_dynamic_wep(struct lbs_802_11_security *secinfo, * 0 0 0 0 !=NONE 1 0 0 yes Dynamic WEP * * - * @param adapter A pointer to lbs_adapter + * @param adapter A pointer to struct lbs_adapter * @param index Index in scantable to check against current driver settings * @param mode Network mode: Infrastructure or IBSS * * @return Index in scantable, or error code if negative */ -static int is_network_compatible(lbs_adapter *adapter, +static int is_network_compatible(struct lbs_adapter *adapter, struct bss_descriptor * bss, u8 mode) { int matched = 0; @@ -262,7 +262,7 @@ int lbs_ssid_cmp(u8 *ssid1, u8 ssid1_len, u8 *ssid2, u8 ssid2_len) * of channels to scan. This routine is used for any scan that is not * provided a specific channel list to scan. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param scanchanlist Output parameter: resulting channel list to scan * @param filteredscan Flag indicating whether or not a BSSID or SSID filter * is being sent in the command to firmware. Used to @@ -272,12 +272,12 @@ int lbs_ssid_cmp(u8 *ssid1, u8 ssid1_len, u8 *ssid2, u8 ssid2_len) * * @return void */ -static void lbs_scan_create_channel_list(lbs_private *priv, +static void lbs_scan_create_channel_list(struct lbs_private *priv, struct chanscanparamset * scanchanlist, u8 filteredscan) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct region_channel *scanregion; struct chan_freq_power *cfp; int rgnidx; @@ -360,7 +360,9 @@ static void lbs_scan_create_channel_list(lbs_private *priv, /* Delayed partial scan worker */ void lbs_scan_worker(struct work_struct *work) { - lbs_private *priv = container_of(work, lbs_private, scan_work.work); + struct lbs_private *priv = container_of(work, + struct lbs_private, + scan_work.work); lbs_scan_networks(priv, NULL, 0); } @@ -386,7 +388,7 @@ void lbs_scan_worker(struct work_struct *work) * If the number of probes is not set, use the adapter default setting * Qualify the channel * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param puserscanin NULL or pointer to scan configuration parameters * @param ppchantlvout Output parameter: Pointer to the start of the * channel TLV portion of the output scan config @@ -405,7 +407,7 @@ void lbs_scan_worker(struct work_struct *work) * @return resulting scan configuration */ static struct lbs_scan_cmd_config * -lbs_scan_setup_scan_config(lbs_private *priv, +lbs_scan_setup_scan_config(struct lbs_private *priv, const struct lbs_ioctl_user_scan_cfg *puserscanin, struct mrvlietypes_chanlistparamset ** ppchantlvout, struct chanscanparamset * pscanchanlist, @@ -587,7 +589,7 @@ out: * and sends the portion of the channel TLV along with the other TLVs * to the lbs_cmd routines for execution in the firmware. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param maxchanperscan Maximum number channels to be included in each * scan command sent to firmware * @param filteredscan Flag indicating whether or not a BSSID or SSID @@ -601,7 +603,7 @@ out: * * @return 0 or error return otherwise */ -static int lbs_scan_channel_list(lbs_private *priv, +static int lbs_scan_channel_list(struct lbs_private *priv, int maxchanperscan, u8 filteredscan, struct lbs_scan_cmd_config *pscancfgout, @@ -754,7 +756,7 @@ out: /* * Only used from lbs_scan_networks() */ -static void clear_selected_scan_list_entries(lbs_adapter *adapter, +static void clear_selected_scan_list_entries(struct lbs_adapter *adapter, const struct lbs_ioctl_user_scan_cfg *scan_cfg) { struct bss_descriptor *bss; @@ -813,18 +815,18 @@ out: * order to send the appropriate scan commands to firmware to populate or * update the internal driver scan table * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param puserscanin Pointer to the input configuration for the requested * scan. * @param full_scan ??? * * @return 0 or < 0 if error */ -int lbs_scan_networks(lbs_private *priv, +int lbs_scan_networks(struct lbs_private *priv, const struct lbs_ioctl_user_scan_cfg *puserscanin, int full_scan) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct mrvlietypes_chanlistparamset *pchantlvout; struct chanscanparamset * scan_chan_list = NULL; struct lbs_scan_cmd_config *scan_cfg = NULL; @@ -1155,13 +1157,13 @@ done: * * Used in association code * - * @param adapter A pointer to lbs_adapter + * @param adapter A pointer to struct lbs_adapter * @param bssid BSSID to find in the scan list * @param mode Network mode: Infrastructure or IBSS * * @return index in BSSID list, or error return code (< 0) */ -struct bss_descriptor *lbs_find_bssid_in_list(lbs_adapter *adapter, +struct bss_descriptor *lbs_find_bssid_in_list(struct lbs_adapter *adapter, u8 * bssid, u8 mode) { struct bss_descriptor * iter_bss; @@ -1207,14 +1209,14 @@ out: * * Used in association code * - * @param adapter A pointer to lbs_adapter + * @param adapter A pointer to struct lbs_adapter * @param ssid SSID to find in the list * @param bssid BSSID to qualify the SSID selection (if provided) * @param mode Network mode: Infrastructure or IBSS * * @return index in BSSID list */ -struct bss_descriptor *lbs_find_ssid_in_list(lbs_adapter *adapter, +struct bss_descriptor *lbs_find_ssid_in_list(struct lbs_adapter *adapter, u8 *ssid, u8 ssid_len, u8 * bssid, u8 mode, int channel) { @@ -1279,12 +1281,13 @@ out: * Search the scan table for the best SSID that also matches the current * adapter network preference (infrastructure or adhoc) * - * @param adapter A pointer to lbs_adapter + * @param adapter A pointer to struct lbs_adapter * * @return index in BSSID list */ -static struct bss_descriptor *lbs_find_best_ssid_in_list(lbs_adapter *adapter, - u8 mode) +static struct bss_descriptor *lbs_find_best_ssid_in_list( + struct lbs_adapter *adapter, + u8 mode) { u8 bestrssi = 0; struct bss_descriptor * iter_bss; @@ -1325,15 +1328,15 @@ static struct bss_descriptor *lbs_find_best_ssid_in_list(lbs_adapter *adapter, * * Used from association worker. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param pSSID A pointer to AP's ssid * * @return 0--success, otherwise--fail */ -int lbs_find_best_network_ssid(lbs_private *priv, +int lbs_find_best_network_ssid(struct lbs_private *priv, u8 *out_ssid, u8 *out_ssid_len, u8 preferred_mode, u8 *out_mode) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int ret = -1; struct bss_descriptor * found; @@ -1371,8 +1374,8 @@ out: int lbs_set_scan(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_SCAN); @@ -1394,7 +1397,7 @@ int lbs_set_scan(struct net_device *dev, struct iw_request_info *info, * * Used in association code and from debugfs * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param ssid A pointer to the SSID to scan for * @param ssid_len Length of the SSID * @param clear_ssid Should existing scan results with this SSID @@ -1404,10 +1407,10 @@ int lbs_set_scan(struct net_device *dev, struct iw_request_info *info, * * @return 0-success, otherwise fail */ -int lbs_send_specific_ssid_scan(lbs_private *priv, +int lbs_send_specific_ssid_scan(struct lbs_private *priv, u8 *ssid, u8 ssid_len, u8 clear_ssid) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct lbs_ioctl_user_scan_cfg scancfg; int ret = 0; @@ -1445,11 +1448,11 @@ out: #define MAX_CUSTOM_LEN 64 -static inline char *lbs_translate_scan(lbs_private *priv, +static inline char *lbs_translate_scan(struct lbs_private *priv, char *start, char *stop, struct bss_descriptor *bss) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct chan_freq_power *cfp; char *current_val; /* For rates */ struct iw_event iwe; /* Temporary buffer */ @@ -1612,8 +1615,8 @@ int lbs_get_scan(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { #define SCAN_ITEM_SIZE 128 - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; int err = 0; char *ev = extra; char *stop = ev + dwrq->length; @@ -1684,7 +1687,7 @@ int lbs_get_scan(struct net_device *dev, struct iw_request_info *info, * Sends a fixed lenght data part (specifying the BSS type and BSSID filters) * as well as a variable number/length of TLVs to the firmware. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param cmd A pointer to cmd_ds_command structure to be sent to * firmware with the cmd_DS_801_11_SCAN structure * @param pdata_buf Void pointer cast of a lbs_scan_cmd_config struct used @@ -1692,7 +1695,7 @@ int lbs_get_scan(struct net_device *dev, struct iw_request_info *info, * * @return 0 or -1 */ -int lbs_cmd_80211_scan(lbs_private *priv, +int lbs_cmd_80211_scan(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf) { struct cmd_ds_802_11_scan *pscan = &cmd->params.scan; @@ -1752,14 +1755,14 @@ static inline int is_same_network(struct bss_descriptor *src, * | bufsize and sizeof the fixed fields above) | * .-----------------------------------------------------------. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param resp A pointer to cmd_ds_command * * @return 0 or -1 */ -int lbs_ret_80211_scan(lbs_private *priv, struct cmd_ds_command *resp) +int lbs_ret_80211_scan(struct lbs_private *priv, struct cmd_ds_command *resp) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_scan_rsp *pscan; struct bss_descriptor * iter_bss; struct bss_descriptor * safe; diff --git a/drivers/net/wireless/libertas/scan.h b/drivers/net/wireless/libertas/scan.h index 7ed66f40d18..b2314481467 100644 --- a/drivers/net/wireless/libertas/scan.h +++ b/drivers/net/wireless/libertas/scan.h @@ -10,6 +10,8 @@ #include #include "hostcmd.h" +struct lbs_adapter; + /** * @brief Maximum number of channels that can be sent in a setuserscan ioctl * @@ -176,27 +178,27 @@ struct bss_descriptor { int lbs_ssid_cmp(u8 *ssid1, u8 ssid1_len, u8 *ssid2, u8 ssid2_len); -struct bss_descriptor *lbs_find_ssid_in_list(lbs_adapter *adapter, +struct bss_descriptor *lbs_find_ssid_in_list(struct lbs_adapter *adapter, u8 *ssid, u8 ssid_len, u8 *bssid, u8 mode, int channel); -struct bss_descriptor *lbs_find_bssid_in_list(lbs_adapter *adapter, +struct bss_descriptor *lbs_find_bssid_in_list(struct lbs_adapter *adapter, u8 *bssid, u8 mode); -int lbs_find_best_network_ssid(lbs_private *priv, u8 *out_ssid, +int lbs_find_best_network_ssid(struct lbs_private *priv, u8 *out_ssid, u8 *out_ssid_len, u8 preferred_mode, u8 *out_mode); -int lbs_send_specific_ssid_scan(lbs_private *priv, u8 *ssid, +int lbs_send_specific_ssid_scan(struct lbs_private *priv, u8 *ssid, u8 ssid_len, u8 clear_ssid); -int lbs_cmd_80211_scan(lbs_private *priv, +int lbs_cmd_80211_scan(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf); -int lbs_ret_80211_scan(lbs_private *priv, +int lbs_ret_80211_scan(struct lbs_private *priv, struct cmd_ds_command *resp); -int lbs_scan_networks(lbs_private *priv, +int lbs_scan_networks(struct lbs_private *priv, const struct lbs_ioctl_user_scan_cfg *puserscanin, int full_scan); diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c index 267274b804c..b423ce1ff42 100644 --- a/drivers/net/wireless/libertas/tx.c +++ b/drivers/net/wireless/libertas/tx.c @@ -52,11 +52,11 @@ static u32 convert_radiotap_rate_to_mv(u8 rate) * @brief This function processes a single packet and sends * to IF layer * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param skb A pointer to skb which includes TX packet * @return 0 or -1 */ -static int SendSinglePacket(lbs_private *priv, struct sk_buff *skb) +static int SendSinglePacket(struct lbs_private *priv, struct sk_buff *skb) { int ret = 0; struct txpd localtxpd; @@ -164,9 +164,9 @@ done: } -void lbs_tx_runqueue(lbs_private *priv) +void lbs_tx_runqueue(struct lbs_private *priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; int i; spin_lock(&adapter->txqueue_lock); @@ -180,9 +180,9 @@ void lbs_tx_runqueue(lbs_private *priv) spin_unlock(&adapter->txqueue_lock); } -static void lbs_tx_queue(lbs_private *priv, struct sk_buff *skb) +static void lbs_tx_queue(struct lbs_private *priv, struct sk_buff *skb) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; spin_lock(&adapter->txqueue_lock); @@ -205,10 +205,10 @@ static void lbs_tx_queue(lbs_private *priv, struct sk_buff *skb) * @brief This function checks the conditions and sends packet to IF * layer if everything is ok. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @return n/a */ -int lbs_process_tx(lbs_private *priv, struct sk_buff *skb) +int lbs_process_tx(struct lbs_private *priv, struct sk_buff *skb) { int ret = -1; @@ -239,14 +239,14 @@ done: * @brief This function sends to the host the last transmitted packet, * filling the radiotap headers with transmission information. * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @param status A 32 bit value containing transmission status. * * @returns void */ -void lbs_send_tx_feedback(lbs_private *priv) +void lbs_send_tx_feedback(struct lbs_private *priv) { - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; struct tx_radiotap_hdr *radiotap_hdr; u32 status = adapter->eventcause; int txfail; diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c index 2231a65a537..b8c93c0adb2 100644 --- a/drivers/net/wireless/libertas/wext.c +++ b/drivers/net/wireless/libertas/wext.c @@ -21,7 +21,7 @@ #include "assoc.h" -static inline void lbs_postpone_association_work(lbs_private *priv) +static inline void lbs_postpone_association_work(struct lbs_private *priv) { if (priv->adapter->surpriseremoved) return; @@ -29,7 +29,7 @@ static inline void lbs_postpone_association_work(lbs_private *priv) queue_delayed_work(priv->work_thread, &priv->assoc_work, HZ / 2); } -static inline void lbs_cancel_association_work(lbs_private *priv) +static inline void lbs_cancel_association_work(struct lbs_private *priv) { cancel_delayed_work(&priv->assoc_work); kfree(priv->adapter->pending_assoc_req); @@ -40,13 +40,15 @@ static inline void lbs_cancel_association_work(lbs_private *priv) /** * @brief Find the channel frequency power info with specific channel * - * @param adapter A pointer to lbs_adapter structure + * @param adapter A pointer to struct lbs_adapter structure * @param band it can be BAND_A, BAND_G or BAND_B * @param channel the channel for looking * @return A pointer to struct chan_freq_power structure or NULL if not find. */ -struct chan_freq_power *lbs_find_cfp_by_band_and_channel(lbs_adapter *adapter, - u8 band, u16 channel) +struct chan_freq_power *lbs_find_cfp_by_band_and_channel( + struct lbs_adapter *adapter, + u8 band, + u16 channel) { struct chan_freq_power *cfp = NULL; struct region_channel *rc; @@ -79,13 +81,15 @@ struct chan_freq_power *lbs_find_cfp_by_band_and_channel(lbs_adapter *adapter, /** * @brief Find the channel frequency power info with specific frequency * - * @param adapter A pointer to lbs_adapter structure + * @param adapter A pointer to struct lbs_adapter structure * @param band it can be BAND_A, BAND_G or BAND_B * @param freq the frequency for looking * @return A pointer to struct chan_freq_power structure or NULL if not find. */ -static struct chan_freq_power *find_cfp_by_band_and_freq(lbs_adapter *adapter, - u8 band, u32 freq) +static struct chan_freq_power *find_cfp_by_band_and_freq( + struct lbs_adapter *adapter, + u8 band, + u32 freq) { struct chan_freq_power *cfp = NULL; struct region_channel *rc; @@ -119,14 +123,14 @@ static struct chan_freq_power *find_cfp_by_band_and_freq(lbs_adapter *adapter, /** * @brief Set Radio On/OFF * - * @param priv A pointer to lbs_private structure + * @param priv A pointer to struct lbs_private structure * @option Radio Option * @return 0 --success, otherwise fail */ -static int lbs_radio_ioctl(lbs_private *priv, u8 option) +static int lbs_radio_ioctl(struct lbs_private *priv, u8 option) { int ret = 0; - lbs_adapter *adapter = priv->adapter; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -147,10 +151,10 @@ static int lbs_radio_ioctl(lbs_private *priv, u8 option) /** * @brief Copy active data rates based on adapter mode and status * - * @param adapter A pointer to lbs_adapter structure + * @param adapter A pointer to struct lbs_adapter structure * @param rate The buf to return the active rates */ -static void copy_active_data_rates(lbs_adapter *adapter, u8 *rates) +static void copy_active_data_rates(struct lbs_adapter *adapter, u8 *rates) { lbs_deb_enter(LBS_DEB_WEXT); @@ -179,8 +183,8 @@ static int lbs_get_name(struct net_device *dev, struct iw_request_info *info, static int lbs_get_freq(struct net_device *dev, struct iw_request_info *info, struct iw_freq *fwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct chan_freq_power *cfp; lbs_deb_enter(LBS_DEB_WEXT); @@ -206,8 +210,8 @@ static int lbs_get_freq(struct net_device *dev, struct iw_request_info *info, static int lbs_get_wap(struct net_device *dev, struct iw_request_info *info, struct sockaddr *awrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -225,8 +229,8 @@ static int lbs_get_wap(struct net_device *dev, struct iw_request_info *info, static int lbs_set_nick(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -250,8 +254,8 @@ static int lbs_set_nick(struct net_device *dev, struct iw_request_info *info, static int lbs_get_nick(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -268,8 +272,8 @@ static int lbs_get_nick(struct net_device *dev, struct iw_request_info *info, static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -294,8 +298,8 @@ static int lbs_set_rts(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; u32 rthr = vwrq->value; lbs_deb_enter(LBS_DEB_WEXT); @@ -320,8 +324,8 @@ static int lbs_get_rts(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -347,8 +351,8 @@ static int lbs_set_frag(struct net_device *dev, struct iw_request_info *info, { int ret = 0; u32 fthr = vwrq->value; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -373,8 +377,8 @@ static int lbs_get_frag(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -399,8 +403,8 @@ out: static int lbs_get_mode(struct net_device *dev, struct iw_request_info *info, u32 * uwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -427,8 +431,8 @@ static int lbs_get_txpow(struct net_device *dev, struct iw_param *vwrq, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -459,8 +463,8 @@ static int lbs_set_retry(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -494,8 +498,8 @@ out: static int lbs_get_retry(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_WEXT); @@ -563,8 +567,8 @@ static int lbs_get_range(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { int i, j; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct iw_range *range = (struct iw_range *)extra; struct chan_freq_power *cfp; u8 rates[MAX_RATES + 1]; @@ -740,8 +744,8 @@ out: static int lbs_set_power(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -784,8 +788,8 @@ static int lbs_set_power(struct net_device *dev, struct iw_request_info *info, static int lbs_get_power(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; int mode; lbs_deb_enter(LBS_DEB_WEXT); @@ -815,8 +819,8 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) EXCELLENT = 95, PERFECT = 100 }; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; u32 rssi_qual; u32 tx_qual; u32 quality = 0; @@ -919,8 +923,8 @@ static int lbs_set_freq(struct net_device *dev, struct iw_request_info *info, struct iw_freq *fwrq, char *extra) { int ret = -EINVAL; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct chan_freq_power *cfp; struct assoc_request * assoc_req; @@ -976,8 +980,8 @@ out: static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; u32 new_rate; u16 action; int ret = -EINVAL; @@ -1020,8 +1024,8 @@ out: static int lbs_get_rate(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -1046,8 +1050,8 @@ static int lbs_set_mode(struct net_device *dev, struct iw_request_info *info, u32 * uwrq, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req; lbs_deb_enter(LBS_DEB_WEXT); @@ -1092,8 +1096,8 @@ static int lbs_get_encode(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, u8 * extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; int index = (dwrq->flags & IW_ENCODE_INDEX) - 1; lbs_deb_enter(LBS_DEB_WEXT); @@ -1297,8 +1301,8 @@ static int lbs_set_encode(struct net_device *dev, struct iw_point *dwrq, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req; u16 is_default = 0, index = 0, set_tx_key = 0; @@ -1374,8 +1378,8 @@ static int lbs_get_encodeext(struct net_device *dev, char *extra) { int ret = -EINVAL; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; int index, max_key_len; @@ -1481,8 +1485,8 @@ static int lbs_set_encodeext(struct net_device *dev, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; int alg = ext->alg; struct assoc_request * assoc_req; @@ -1606,8 +1610,8 @@ static int lbs_set_genie(struct net_device *dev, struct iw_point *dwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct assoc_request * assoc_req; @@ -1653,8 +1657,8 @@ static int lbs_get_genie(struct net_device *dev, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -1682,8 +1686,8 @@ static int lbs_set_auth(struct net_device *dev, struct iw_param *dwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req; int ret = 0; int updated = 0; @@ -1782,8 +1786,8 @@ static int lbs_get_auth(struct net_device *dev, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -1820,8 +1824,8 @@ static int lbs_set_txpow(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { int ret = 0; - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; u16 dbm; @@ -1862,8 +1866,8 @@ static int lbs_set_txpow(struct net_device *dev, struct iw_request_info *info, static int lbs_get_essid(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -1898,8 +1902,8 @@ static int lbs_get_essid(struct net_device *dev, struct iw_request_info *info, static int lbs_set_essid(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; int ret = 0; u8 ssid[IW_ESSID_MAX_SIZE]; u8 ssid_len = 0; @@ -1970,8 +1974,8 @@ out: static int lbs_set_wap(struct net_device *dev, struct iw_request_info *info, struct sockaddr *awrq, char *extra) { - lbs_private *priv = dev->priv; - lbs_adapter *adapter = priv->adapter; + struct lbs_private *priv = dev->priv; + struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req; int ret = 0; DECLARE_MAC_BUF(mac); @@ -2002,7 +2006,7 @@ static int lbs_set_wap(struct net_device *dev, struct iw_request_info *info, return ret; } -void lbs_get_fwversion(lbs_adapter *adapter, char *fwversion, int maxlen) +void lbs_get_fwversion(struct lbs_adapter *adapter, char *fwversion, int maxlen) { char fwver[32]; -- cgit v1.2.3-70-g09d2 From 01affb653077d8581552d566276b405237636e5c Mon Sep 17 00:00:00 2001 From: Holger Schurig Date: Wed, 28 Nov 2007 14:08:12 +0100 Subject: libertas: tweak tx path debugging Make two functions in the TX packet path emit their debug messages with LBS_DEB_TX, not LBS_DEB_MAIN. Signed-off-by: Holger Schurig Acked-by: Dan Williams Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index a3957698edb..67b6d7959e1 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -521,7 +521,7 @@ static int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) int ret = 0; struct lbs_private *priv = dev->priv; - lbs_deb_enter(LBS_DEB_NET); + lbs_deb_enter(LBS_DEB_TX); if (priv->dnld_sent || priv->adapter->TxLockFlag) { priv->stats.tx_dropped++; @@ -535,7 +535,7 @@ static int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) if (lbs_process_tx(priv, skb) == 0) dev->trans_start = jiffies; done: - lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret); + lbs_deb_leave_args(LBS_DEB_TX, "ret %d", ret); return ret; } @@ -571,7 +571,7 @@ static int lbs_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) struct lbs_private *priv = dev->priv; int ret; - lbs_deb_enter(LBS_DEB_NET); + lbs_deb_enter(LBS_DEB_TX); if (priv->adapter->monitormode != LBS_MONITOR_OFF) { netif_stop_queue(dev); @@ -581,7 +581,7 @@ static int lbs_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) UNSET_MESH_FRAME(skb); ret = lbs_hard_start_xmit(skb, dev); - lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret); + lbs_deb_leave_args(LBS_DEB_TX, "ret %d", ret); return ret; } -- cgit v1.2.3-70-g09d2 From e775ed7c677b163c80643036c32e23d3e59b9429 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 6 Dec 2007 14:36:11 +0000 Subject: libertas: Consolidate lbs_host_to_card_done() function. As we move towards having this done by a state machine, start by having a single 'stuff sent' function, which is called by if_usb/if_sdio/if_cs after sending both data and commands. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/decl.h | 1 + drivers/net/wireless/libertas/if_cs.c | 12 +++--------- drivers/net/wireless/libertas/if_sdio.c | 9 +++------ drivers/net/wireless/libertas/if_usb.c | 18 ++---------------- drivers/net/wireless/libertas/main.c | 18 ++++++++++++++++++ 5 files changed, 27 insertions(+), 31 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h index 447297a5e68..201ec60f1dc 100644 --- a/drivers/net/wireless/libertas/decl.h +++ b/drivers/net/wireless/libertas/decl.h @@ -86,5 +86,6 @@ int lbs_stop_card(struct lbs_private *priv); int lbs_add_mesh(struct lbs_private *priv, struct device *dev); void lbs_remove_mesh(struct lbs_private *priv); int lbs_reset_device(struct lbs_private *priv); +void lbs_host_to_card_done(struct lbs_private *priv); #endif diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c index 5fadcc03eea..54b1ba3e250 100644 --- a/drivers/net/wireless/libertas/if_cs.c +++ b/drivers/net/wireless/libertas/if_cs.c @@ -253,19 +253,13 @@ static irqreturn_t if_cs_interrupt(int irq, void *data) /* Not for us */ return IRQ_NONE; - } else if(int_cause == 0xffff) { + } else if (int_cause == 0xffff) { /* Read in junk, the card has probably been removed */ card->priv->adapter->surpriseremoved = 1; } else { - if(int_cause & IF_CS_H_IC_TX_OVER) { - card->priv->dnld_sent = DNLD_RES_RECEIVED; - if (!card->priv->adapter->cur_cmd) - wake_up_interruptible(&card->priv->waitq); - - if (card->priv->adapter->connect_status == LBS_CONNECTED) - netif_wake_queue(card->priv->dev); - } + if (int_cause & IF_CS_H_IC_TX_OVER) + lbs_host_to_card_done(card->priv); /* clear interrupt */ if_cs_write16(card, IF_CS_C_INT_CAUSE, int_cause & IF_CS_C_IC_MASK); diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index 7a7037bdd37..cccca311f75 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c @@ -835,12 +835,9 @@ static void if_sdio_interrupt(struct sdio_func *func) * Ignore the define name, this really means the card has * successfully received the command. */ - if (cause & IF_SDIO_H_INT_DNLD) { - if ((card->priv->dnld_sent == DNLD_DATA_SENT) && - (card->priv->adapter->connect_status == LBS_CONNECTED)) - netif_wake_queue(card->priv->dev); - card->priv->dnld_sent = DNLD_RES_RECEIVED; - } + if (cause & IF_SDIO_H_INT_DNLD) + lbs_host_to_card_done(card->priv); + if (cause & IF_SDIO_H_INT_UPLD) { ret = if_sdio_card_to_host(card); diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index c27ffcfdbe8..418dcab8b1c 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -66,22 +66,8 @@ static void if_usb_write_bulk_callback(struct urb *urb) /* Used for both firmware TX and regular TX. priv isn't * valid at firmware load time. */ - if (priv) { - struct lbs_adapter *adapter = priv->adapter; - struct net_device *dev = priv->dev; - - priv->dnld_sent = DNLD_RES_RECEIVED; - - /* Wake main thread if commands are pending */ - if (!adapter->cur_cmd) - wake_up_interruptible(&priv->waitq); - - if (adapter->connect_status == LBS_CONNECTED) - netif_wake_queue(dev); - - if (priv->mesh_dev && (adapter->mesh_connect_status == LBS_CONNECTED)) - netif_wake_queue(priv->mesh_dev); - } + if (priv) + lbs_host_to_card_done(priv); } else { /* print the failure status number for debug */ lbs_pr_info("URB in failure status: %d\n", urb->status); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 67b6d7959e1..ed02c02c96d 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -616,6 +616,24 @@ static void lbs_tx_timeout(struct net_device *dev) lbs_deb_leave(LBS_DEB_TX); } +void lbs_host_to_card_done(struct lbs_private *priv) +{ + struct lbs_adapter *adapter = priv->adapter; + + priv->dnld_sent = DNLD_RES_RECEIVED; + + /* Wake main thread if commands are pending */ + if (!adapter->cur_cmd) + wake_up_interruptible(&priv->waitq); + + if (priv->dev && adapter->connect_status == LBS_CONNECTED) + netif_wake_queue(priv->dev); + + if (priv->mesh_dev && adapter->mesh_connect_status == LBS_CONNECTED) + netif_wake_queue(priv->mesh_dev); +} +EXPORT_SYMBOL_GPL(lbs_host_to_card_done); + /** * @brief This function returns the network statistics * -- cgit v1.2.3-70-g09d2 From 2c94404c30008a10ccd3c7e31645626eb90a8a06 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 6 Dec 2007 14:41:08 +0000 Subject: libertas: Move SET_BOOT2_VER command to if_usb where it belongs This is meaningless for non-USB devices and unimplemented in their firmware. It's somewhat dubious for USB devices too, but that's a different story. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/if_usb.c | 5 +++++ drivers/net/wireless/libertas/main.c | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 418dcab8b1c..f8589283d7b 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -222,6 +222,11 @@ static int if_usb_probe(struct usb_interface *intf, if (lbs_start_card(priv)) goto err_start_card; + /* Set the boot2 version in firmware, ignoring errors. */ + (void)lbs_prepare_and_send_command(priv, CMD_SET_BOOT2_VER, + 0, CMD_OPTION_WAITFORRSP, 0, NULL); + + usb_get_dev(udev); usb_set_intfdata(intf, cardp); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index ed02c02c96d..a5b573ce545 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -999,10 +999,6 @@ static int lbs_setup_firmware(struct lbs_private *priv) priv->mesh_autostart_enabled = 0; } - /* Set the boot2 version in firmware */ - ret = lbs_prepare_and_send_command(priv, CMD_SET_BOOT2_VER, - 0, CMD_OPTION_WAITFORRSP, 0, NULL); - ret = 0; done: lbs_deb_leave_args(LBS_DEB_FW, "ret %d", ret); -- cgit v1.2.3-70-g09d2 From ac47246e246c183ed68b3fdb307a83d00313a325 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 8 Dec 2007 00:35:00 +0000 Subject: libertas: kill adapter->nr_cmd_pending Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 6 ++---- drivers/net/wireless/libertas/cmdresp.c | 5 ----- drivers/net/wireless/libertas/debugfs.c | 3 ++- drivers/net/wireless/libertas/dev.h | 1 - drivers/net/wireless/libertas/main.c | 4 +--- 5 files changed, 5 insertions(+), 14 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index cf1ab8a345f..092c295e380 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -1009,10 +1009,9 @@ void lbs_queue_cmd(struct lbs_adapter *adapter, spin_lock_irqsave(&adapter->driver_lock, flags); - if (addtail) { + if (addtail) list_add_tail(&cmdnode->list, &adapter->cmdpendingq); - adapter->nr_cmd_pending++; - } else + else list_add(&cmdnode->list, &adapter->cmdpendingq); spin_unlock_irqrestore(&adapter->driver_lock, flags); @@ -1078,7 +1077,6 @@ static int DownloadcommandToStation(struct lbs_private *priv, spin_lock_irqsave(&adapter->driver_lock, flags); adapter->cur_cmd_retcode = ret; __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->nr_cmd_pending--; adapter->cur_cmd = NULL; spin_unlock_irqrestore(&adapter->driver_lock, flags); goto done; diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index f6c1016b2bb..44865bf12ba 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -791,7 +791,6 @@ int lbs_process_rx_command(struct lbs_private *priv) lbs_deb_host("invalid response!\n"); adapter->cur_cmd_retcode = -1; __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->nr_cmd_pending--; adapter->cur_cmd = NULL; spin_unlock_irqrestore(&adapter->driver_lock, flags); ret = -1; @@ -848,7 +847,6 @@ int lbs_process_rx_command(struct lbs_private *priv) } __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->nr_cmd_pending--; adapter->cur_cmd = NULL; spin_unlock_irqrestore(&adapter->driver_lock, flags); @@ -872,7 +870,6 @@ int lbs_process_rx_command(struct lbs_private *priv) } __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->nr_cmd_pending--; adapter->cur_cmd = NULL; spin_unlock_irqrestore(&adapter->driver_lock, flags); @@ -892,8 +889,6 @@ int lbs_process_rx_command(struct lbs_private *priv) if (adapter->cur_cmd) { /* Clean up and Put current command back to cmdfreeq */ __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->nr_cmd_pending--; - WARN_ON(adapter->nr_cmd_pending > 128); adapter->cur_cmd = NULL; } spin_unlock_irqrestore(&adapter->driver_lock, flags); diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c index b0a76c5bec6..9a041e5b209 100644 --- a/drivers/net/wireless/libertas/debugfs.c +++ b/drivers/net/wireless/libertas/debugfs.c @@ -322,7 +322,8 @@ static ssize_t lbs_setuserscan(struct file *file, lbs_scan_networks(priv, scan_cfg, 1); wait_event_interruptible(priv->adapter->cmd_pending, - priv->adapter->surpriseremoved || !priv->adapter->nr_cmd_pending); + priv->adapter->surpriseremoved || + (!priv->adapter->cur_cmd && list_empty(&priv->adapter->cmdpendingq))); if (priv->adapter->surpriseremoved) goto out_scan_cfg; diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 96a34c5bce8..fb26f18e446 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -231,7 +231,6 @@ struct lbs_adapter { struct list_head cmdpendingq; wait_queue_head_t cmd_pending; - u8 nr_cmd_pending; /* command related variables protected by adapter->driver_lock */ /** Async and Sync Event variables */ diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index a5b573ce545..500357ba48d 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -929,14 +929,13 @@ static int lbs_thread(void *data) /* Wake-up command waiters which can't sleep in * lbs_prepare_and_send_command */ - if (!adapter->nr_cmd_pending) + if (!list_empty(&adapter->cmdpendingq)) wake_up_all(&adapter->cmd_pending); lbs_tx_runqueue(priv); } del_timer(&adapter->command_timer); - adapter->nr_cmd_pending = 0; wake_up_all(&adapter->cmd_pending); lbs_deb_leave(LBS_DEB_THREAD); @@ -1105,7 +1104,6 @@ static int lbs_init_adapter(struct lbs_private *priv) spin_lock_init(&adapter->driver_lock); init_waitqueue_head(&adapter->cmd_pending); - adapter->nr_cmd_pending = 0; /* Allocate the command buffers */ if (lbs_allocate_cmd_buffer(priv)) { -- cgit v1.2.3-70-g09d2 From 59f3e4bf1e3bc385d91a993d75865f99baa0486d Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 8 Dec 2007 17:42:59 +0000 Subject: libertas: clean up lbs_thread() to make it slightly more readable No semantic changes. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 92 ++++++++++++++---------------------- 1 file changed, 36 insertions(+), 56 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 500357ba48d..f595664f98c 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -795,70 +795,60 @@ static int lbs_thread(void *data) init_waitqueue_entry(&wait, current); set_freezable(); + for (;;) { - lbs_deb_thread( "main-thread 111: intcounter=%d " - "currenttxskb=%p dnld_sent=%d\n", - adapter->intcounter, - adapter->currenttxskb, priv->dnld_sent); + lbs_deb_thread( "main-thread 111: intcounter=%d currenttxskb=%p dnld_sent=%d\n", + adapter->intcounter, adapter->currenttxskb, priv->dnld_sent); add_wait_queue(&priv->waitq, &wait); set_current_state(TASK_INTERRUPTIBLE); spin_lock_irq(&adapter->driver_lock); + if ((adapter->psstate == PS_STATE_SLEEP) || - (!adapter->intcounter - && (priv->dnld_sent || adapter->cur_cmd || - list_empty(&adapter->cmdpendingq)))) { - lbs_deb_thread( - "main-thread sleeping... Conn=%d IntC=%d PS_mode=%d PS_State=%d\n", - adapter->connect_status, adapter->intcounter, - adapter->psmode, adapter->psstate); + (!adapter->intcounter && (priv->dnld_sent || adapter->cur_cmd || list_empty(&adapter->cmdpendingq)))) { + lbs_deb_thread("main-thread sleeping... Conn=%d IntC=%d PS_mode=%d PS_State=%d\n", + adapter->connect_status, adapter->intcounter, + adapter->psmode, adapter->psstate); spin_unlock_irq(&adapter->driver_lock); schedule(); } else spin_unlock_irq(&adapter->driver_lock); - lbs_deb_thread( - "main-thread 222 (waking up): intcounter=%d currenttxskb=%p " - "dnld_sent=%d\n", adapter->intcounter, - adapter->currenttxskb, priv->dnld_sent); + lbs_deb_thread("main-thread 222 (waking up): intcounter=%d currenttxskb=%p dnld_sent=%d\n", + adapter->intcounter, adapter->currenttxskb, priv->dnld_sent); set_current_state(TASK_RUNNING); remove_wait_queue(&priv->waitq, &wait); try_to_freeze(); - lbs_deb_thread("main-thread 333: intcounter=%d currenttxskb=%p " - "dnld_sent=%d\n", - adapter->intcounter, - adapter->currenttxskb, priv->dnld_sent); + lbs_deb_thread("main-thread 333: intcounter=%d currenttxskb=%p dnld_sent=%d\n", + adapter->intcounter, adapter->currenttxskb, priv->dnld_sent); - if (kthread_should_stop() - || adapter->surpriseremoved) { - lbs_deb_thread( - "main-thread: break from main thread: surpriseremoved=0x%x\n", - adapter->surpriseremoved); + if (kthread_should_stop() || adapter->surpriseremoved) { + lbs_deb_thread("main-thread: break from main thread: surpriseremoved=0x%x\n", + adapter->surpriseremoved); break; } spin_lock_irq(&adapter->driver_lock); + if (adapter->intcounter) { u8 int_status; + adapter->intcounter = 0; int_status = priv->hw_get_int_status(priv, &ireg); if (int_status) { - lbs_deb_thread( - "main-thread: reading HOST_INT_STATUS_REG failed\n"); + lbs_deb_thread("main-thread: reading HOST_INT_STATUS_REG failed\n"); spin_unlock_irq(&adapter->driver_lock); continue; } adapter->hisregcpy |= ireg; } - lbs_deb_thread("main-thread 444: intcounter=%d currenttxskb=%p " - "dnld_sent=%d\n", - adapter->intcounter, - adapter->currenttxskb, priv->dnld_sent); + lbs_deb_thread("main-thread 444: intcounter=%d currenttxskb=%p dnld_sent=%d\n", + adapter->intcounter, adapter->currenttxskb, priv->dnld_sent); /* command response? */ if (adapter->hisregcpy & MRVDRV_CMD_UPLD_RDY) { @@ -877,8 +867,7 @@ static int lbs_thread(void *data) adapter->hisregcpy &= ~MRVDRV_CARDEVENT; if (priv->hw_read_event_cause(priv)) { - lbs_pr_alert( - "main-thread: hw_read_event_cause failed\n"); + lbs_pr_alert("main-thread: hw_read_event_cause failed\n"); spin_unlock_irq(&adapter->driver_lock); continue; } @@ -888,30 +877,21 @@ static int lbs_thread(void *data) spin_unlock_irq(&adapter->driver_lock); /* Check if we need to confirm Sleep Request received previously */ - if (adapter->psstate == PS_STATE_PRE_SLEEP) { - if (!priv->dnld_sent && !adapter->cur_cmd) { - if (adapter->connect_status == - LBS_CONNECTED) { - lbs_deb_thread( - "main_thread: PRE_SLEEP--intcounter=%d currenttxskb=%p " - "dnld_sent=%d cur_cmd=%p, confirm now\n", - adapter->intcounter, - adapter->currenttxskb, - priv->dnld_sent, - adapter->cur_cmd); - - lbs_ps_confirm_sleep(priv, - (u16) adapter->psmode); - } else { - /* workaround for firmware sending - * deauth/linkloss event immediately - * after sleep request, remove this - * after firmware fixes it - */ - adapter->psstate = PS_STATE_AWAKE; - lbs_pr_alert( - "main-thread: ignore PS_SleepConfirm in non-connected state\n"); - } + if (adapter->psstate == PS_STATE_PRE_SLEEP && + !priv->dnld_sent && !adapter->cur_cmd) { + if (adapter->connect_status == LBS_CONNECTED) { + lbs_deb_thread("main_thread: PRE_SLEEP--intcounter=%d currenttxskb=%p dnld_sent=%d cur_cmd=%p, confirm now\n", + adapter->intcounter, adapter->currenttxskb, priv->dnld_sent, adapter->cur_cmd); + + lbs_ps_confirm_sleep(priv, (u16) adapter->psmode); + } else { + /* workaround for firmware sending + * deauth/linkloss event immediately + * after sleep request; remove this + * after firmware fixes it + */ + adapter->psstate = PS_STATE_AWAKE; + lbs_pr_alert("main-thread: ignore PS_SleepConfirm in non-connected state\n"); } } -- cgit v1.2.3-70-g09d2 From e7deced05f15693cca71bfae747b8d57eadeb1b2 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 8 Dec 2007 18:29:16 +0000 Subject: libertas: fix lbs_rtap attribute in sysfs At least it doesn't oops when you attempt to read or write it now. Only when you enable it and then later turn it off. And when it's enabled I don't see how it actually works. But one fewer oops is good, for now... Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/dev.h | 2 -- drivers/net/wireless/libertas/main.c | 18 ++++++------------ 2 files changed, 6 insertions(+), 14 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index fb26f18e446..5cb29235fee 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -143,8 +143,6 @@ struct lbs_private { all other bits reserved 0 */ u8 dnld_sent; - struct device *hotplug_device; - /** thread to service interrupts */ struct task_struct *main_thread; wait_queue_head_t waitq; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index f595664f98c..d03a2f8710f 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -256,8 +256,7 @@ void lbs_remove_rtap(struct lbs_private *priv); static ssize_t lbs_rtap_get(struct device *dev, struct device_attribute *attr, char * buf) { - struct lbs_private *priv = (struct lbs_private *) - (to_net_dev(dev))->priv; + struct lbs_private *priv = to_net_dev(dev)->priv; struct lbs_adapter *adapter = priv->adapter; return snprintf(buf, 5, "0x%X\n", adapter->monitormode); } @@ -269,8 +268,7 @@ static ssize_t lbs_rtap_set(struct device *dev, struct device_attribute *attr, const char * buf, size_t count) { int monitor_mode; - struct lbs_private *priv = (struct lbs_private *) - (to_net_dev(dev))->priv; + struct lbs_private *priv = to_net_dev(dev)->priv; struct lbs_adapter *adapter = priv->adapter; sscanf(buf, "%x", &monitor_mode); @@ -1158,7 +1156,6 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) priv->card = card; priv->mesh_open = 0; priv->infra_open = 0; - priv->hotplug_device = dmdev; /* Setup the OS Interface to our functions */ dev->open = lbs_open; @@ -1178,15 +1175,13 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) SET_NETDEV_DEV(dev, dmdev); priv->rtap_net_dev = NULL; - if (device_create_file(dmdev, &dev_attr_lbs_rtap)) - goto err_init_adapter; lbs_deb_thread("Starting main thread...\n"); init_waitqueue_head(&priv->waitq); priv->main_thread = kthread_run(lbs_thread, dev, "lbs_main"); if (IS_ERR(priv->main_thread)) { lbs_deb_thread("Error creating main thread.\n"); - goto err_kthread_run; + goto err_init_adapter; } priv->work_thread = create_singlethread_workqueue("lbs_worker"); @@ -1196,9 +1191,6 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) goto done; -err_kthread_run: - device_remove_file(dmdev, &dev_attr_lbs_rtap); - err_init_adapter: lbs_free_adapter(priv); @@ -1224,7 +1216,7 @@ int lbs_remove_card(struct lbs_private *priv) lbs_remove_rtap(priv); dev = priv->dev; - device_remove_file(priv->hotplug_device, &dev_attr_lbs_rtap); + device_remove_file(&dev->dev, &dev_attr_lbs_rtap); cancel_delayed_work(&priv->scan_work); cancel_delayed_work(&priv->assoc_work); @@ -1273,6 +1265,8 @@ int lbs_start_card(struct lbs_private *priv) lbs_pr_err("cannot register ethX device\n"); goto done; } + if (device_create_file(&dev->dev, &dev_attr_lbs_rtap)) + lbs_pr_err("cannot register lbs_rtap attribute\n"); lbs_debugfs_init_one(priv, dev); -- cgit v1.2.3-70-g09d2 From f86a93e1b2d05a7a38a48c91f8fb8fc7e8f1c734 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 8 Dec 2007 19:46:19 +0000 Subject: libertas: kill TxLockFlag We don't need this. We can use adapter->currenttxskb instead. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/dev.h | 1 - drivers/net/wireless/libertas/main.c | 25 ++++++++++++++++++++++--- drivers/net/wireless/libertas/tx.c | 9 +++------ 3 files changed, 25 insertions(+), 10 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 5cb29235fee..eaa45d4bb9d 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -285,7 +285,6 @@ struct lbs_adapter { /** Tx-related variables (for single packet tx) */ struct sk_buff *currenttxskb; - u16 TxLockFlag; /** NIC Operation characteristics */ u16 currentpacketfilter; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index d03a2f8710f..7155f481816 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -290,8 +290,14 @@ static ssize_t lbs_rtap_set(struct device *dev, return strlen(buf); adapter->monitormode = LBS_MONITOR_OFF; lbs_remove_rtap(priv); - netif_wake_queue(priv->dev); - netif_wake_queue(priv->mesh_dev); + + if (adapter->currenttxskb) { + dev_kfree_skb_any(adapter->currenttxskb); + adapter->currenttxskb = NULL; + } + + /* Wake queues, command thread, etc. */ + lbs_host_to_card_done(priv); } lbs_prepare_and_send_command(priv, @@ -521,7 +527,15 @@ static int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) lbs_deb_enter(LBS_DEB_TX); - if (priv->dnld_sent || priv->adapter->TxLockFlag) { + /* We could return NETDEV_TX_BUSY here, but I'd actually + like to get the point where we can BUG() */ + if (priv->dnld_sent) { + lbs_pr_err("%s while dnld_sent\n", __func__); + priv->stats.tx_dropped++; + goto done; + } + if (priv->adapter->currenttxskb) { + lbs_pr_err("%s while TX skb pending\n", __func__); priv->stats.tx_dropped++; goto done; } @@ -624,6 +638,11 @@ void lbs_host_to_card_done(struct lbs_private *priv) if (!adapter->cur_cmd) wake_up_interruptible(&priv->waitq); + /* Don't wake netif queues if we're in monitor mode and + a TX packet is already pending. */ + if (priv->adapter->currenttxskb) + return; + if (priv->dev && adapter->connect_status == LBS_CONNECTED) netif_wake_queue(priv->dev); diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c index b423ce1ff42..131ef3fe033 100644 --- a/drivers/net/wireless/libertas/tx.c +++ b/drivers/net/wireless/libertas/tx.c @@ -152,11 +152,11 @@ done: netif_stop_queue(priv->dev); if (priv->mesh_dev) netif_stop_queue(priv->mesh_dev); - /* freeze any packets already in our queues */ - priv->adapter->TxLockFlag = 1; + + /* Keep the skb around for when we get feedback */ + priv->adapter->currenttxskb = skb; } else { dev_kfree_skb_any(skb); - priv->adapter->currenttxskb = NULL; } lbs_deb_leave_args(LBS_DEB_TX, "ret %d", ret); @@ -227,8 +227,6 @@ int lbs_process_tx(struct lbs_private *priv, struct sk_buff *skb) return ret; } - priv->adapter->currenttxskb = skb; - ret = SendSinglePacket(priv, skb); done: lbs_deb_leave_args(LBS_DEB_TX, "ret %d", ret); @@ -272,7 +270,6 @@ void lbs_send_tx_feedback(struct lbs_private *priv) (1 + adapter->txretrycount - try_count) : 0; lbs_upload_rx_packet(priv, adapter->currenttxskb); adapter->currenttxskb = NULL; - priv->adapter->TxLockFlag = 0; if (adapter->connect_status == LBS_CONNECTED) netif_wake_queue(priv->dev); -- cgit v1.2.3-70-g09d2 From aa21c004f80bdf943736c62dccf0c0398d7824f3 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 8 Dec 2007 20:04:36 +0000 Subject: libertas: kill struct lbs_adapter There seems to be no reason for a separate structure; move it all into struct lbs_private. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/11d.c | 68 +++--- drivers/net/wireless/libertas/assoc.c | 136 ++++++------ drivers/net/wireless/libertas/assoc.h | 2 +- drivers/net/wireless/libertas/cmd.c | 278 +++++++++++------------- drivers/net/wireless/libertas/cmdresp.c | 336 ++++++++++++++--------------- drivers/net/wireless/libertas/debugfs.c | 56 +++-- drivers/net/wireless/libertas/decl.h | 7 +- drivers/net/wireless/libertas/dev.h | 97 +++++---- drivers/net/wireless/libertas/ethtool.c | 19 +- drivers/net/wireless/libertas/if_cs.c | 21 +- drivers/net/wireless/libertas/if_sdio.c | 20 +- drivers/net/wireless/libertas/if_usb.c | 27 ++- drivers/net/wireless/libertas/join.c | 150 ++++++------- drivers/net/wireless/libertas/main.c | 326 +++++++++++++--------------- drivers/net/wireless/libertas/rx.c | 78 ++++--- drivers/net/wireless/libertas/scan.c | 188 ++++++++-------- drivers/net/wireless/libertas/scan.h | 6 +- drivers/net/wireless/libertas/tx.c | 63 +++--- drivers/net/wireless/libertas/wext.c | 372 +++++++++++++++----------------- 19 files changed, 1046 insertions(+), 1204 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/11d.c b/drivers/net/wireless/libertas/11d.c index 013965d4051..5e10ce0d351 100644 --- a/drivers/net/wireless/libertas/11d.c +++ b/drivers/net/wireless/libertas/11d.c @@ -432,8 +432,8 @@ u8 lbs_get_scan_type_11d(u8 chan, void lbs_init_11d(struct lbs_private *priv) { - priv->adapter->enable11d = 0; - memset(&(priv->adapter->parsed_region_chan), 0, + priv->enable11d = 0; + memset(&(priv->parsed_region_chan), 0, sizeof(struct parsed_region_chan_11d)); return; } @@ -447,7 +447,7 @@ static int set_domain_info_11d(struct lbs_private *priv) { int ret; - if (!priv->adapter->enable11d) { + if (!priv->enable11d) { lbs_deb_11d("dnld domain Info with 11d disabled\n"); return 0; } @@ -469,22 +469,21 @@ static int set_domain_info_11d(struct lbs_private *priv) */ int lbs_set_universaltable(struct lbs_private *priv, u8 band) { - struct lbs_adapter *adapter = priv->adapter; u16 size = sizeof(struct chan_freq_power); u16 i = 0; - memset(adapter->universal_channel, 0, - sizeof(adapter->universal_channel)); + memset(priv->universal_channel, 0, + sizeof(priv->universal_channel)); - adapter->universal_channel[i].nrcfp = + priv->universal_channel[i].nrcfp = sizeof(channel_freq_power_UN_BG) / size; lbs_deb_11d("BG-band nrcfp %d\n", - adapter->universal_channel[i].nrcfp); + priv->universal_channel[i].nrcfp); - adapter->universal_channel[i].CFP = channel_freq_power_UN_BG; - adapter->universal_channel[i].valid = 1; - adapter->universal_channel[i].region = UNIVERSAL_REGION_CODE; - adapter->universal_channel[i].band = band; + priv->universal_channel[i].CFP = channel_freq_power_UN_BG; + priv->universal_channel[i].valid = 1; + priv->universal_channel[i].region = UNIVERSAL_REGION_CODE; + priv->universal_channel[i].band = band; i++; return 0; @@ -505,8 +504,7 @@ int lbs_cmd_802_11d_domain_info(struct lbs_private *priv, struct cmd_ds_802_11d_domain_info *pdomaininfo = &cmd->params.domaininfo; struct mrvlietypes_domainparamset *domain = &pdomaininfo->domain; - struct lbs_adapter *adapter = priv->adapter; - u8 nr_subband = adapter->domainreg.nr_subband; + u8 nr_subband = priv->domainreg.nr_subband; lbs_deb_enter(LBS_DEB_11D); @@ -523,7 +521,7 @@ int lbs_cmd_802_11d_domain_info(struct lbs_private *priv, } domain->header.type = cpu_to_le16(TLV_TYPE_DOMAIN); - memcpy(domain->countrycode, adapter->domainreg.countrycode, + memcpy(domain->countrycode, priv->domainreg.countrycode, sizeof(domain->countrycode)); domain->header.len = @@ -531,7 +529,7 @@ int lbs_cmd_802_11d_domain_info(struct lbs_private *priv, sizeof(domain->countrycode)); if (nr_subband) { - memcpy(domain->subband, adapter->domainreg.subband, + memcpy(domain->subband, priv->domainreg.subband, nr_subband * sizeof(struct ieeetypes_subbandset)); cmd->size = cpu_to_le16(sizeof(pdomaininfo->action) + @@ -605,24 +603,23 @@ int lbs_parse_dnld_countryinfo_11d(struct lbs_private *priv, struct bss_descriptor * bss) { int ret; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_11D); - if (priv->adapter->enable11d) { - memset(&adapter->parsed_region_chan, 0, + if (priv->enable11d) { + memset(&priv->parsed_region_chan, 0, sizeof(struct parsed_region_chan_11d)); ret = parse_domain_info_11d(&bss->countryinfo, 0, - &adapter->parsed_region_chan); + &priv->parsed_region_chan); if (ret == -1) { lbs_deb_11d("error parsing domain_info from AP\n"); goto done; } - memset(&adapter->domainreg, 0, + memset(&priv->domainreg, 0, sizeof(struct lbs_802_11d_domain_reg)); - generate_domain_info_11d(&adapter->parsed_region_chan, - &adapter->domainreg); + generate_domain_info_11d(&priv->parsed_region_chan, + &priv->domainreg); ret = set_domain_info_11d(priv); @@ -646,18 +643,17 @@ done: int lbs_create_dnld_countryinfo_11d(struct lbs_private *priv) { int ret; - struct lbs_adapter *adapter = priv->adapter; struct region_channel *region_chan; u8 j; lbs_deb_enter(LBS_DEB_11D); - lbs_deb_11d("curbssparams.band %d\n", adapter->curbssparams.band); + lbs_deb_11d("curbssparams.band %d\n", priv->curbssparams.band); - if (priv->adapter->enable11d) { + if (priv->enable11d) { /* update parsed_region_chan_11; dnld domaininf to FW */ - for (j = 0; j < ARRAY_SIZE(adapter->region_channel); j++) { - region_chan = &adapter->region_channel[j]; + for (j = 0; j < ARRAY_SIZE(priv->region_channel); j++) { + region_chan = &priv->region_channel[j]; lbs_deb_11d("%d region_chan->band %d\n", j, region_chan->band); @@ -665,28 +661,28 @@ int lbs_create_dnld_countryinfo_11d(struct lbs_private *priv) if (!region_chan || !region_chan->valid || !region_chan->CFP) continue; - if (region_chan->band != adapter->curbssparams.band) + if (region_chan->band != priv->curbssparams.band) continue; break; } - if (j >= ARRAY_SIZE(adapter->region_channel)) { + if (j >= ARRAY_SIZE(priv->region_channel)) { lbs_deb_11d("region_chan not found, band %d\n", - adapter->curbssparams.band); + priv->curbssparams.band); ret = -1; goto done; } - memset(&adapter->parsed_region_chan, 0, + memset(&priv->parsed_region_chan, 0, sizeof(struct parsed_region_chan_11d)); lbs_generate_parsed_region_chan_11d(region_chan, - &adapter-> + &priv-> parsed_region_chan); - memset(&adapter->domainreg, 0, + memset(&priv->domainreg, 0, sizeof(struct lbs_802_11d_domain_reg)); - generate_domain_info_11d(&adapter->parsed_region_chan, - &adapter->domainreg); + generate_domain_info_11d(&priv->parsed_region_chan, + &priv->domainreg); ret = set_domain_info_11d(priv); diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c index 88da68ee0f0..63bd692c723 100644 --- a/drivers/net/wireless/libertas/assoc.c +++ b/drivers/net/wireless/libertas/assoc.c @@ -18,7 +18,6 @@ static const u8 bssid_off[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static int assoc_helper_essid(struct lbs_private *priv, struct assoc_request * assoc_req) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct bss_descriptor * bss; int channel = -1; @@ -38,7 +37,7 @@ static int assoc_helper_essid(struct lbs_private *priv, lbs_send_specific_ssid_scan(priv, assoc_req->ssid, assoc_req->ssid_len, 0); - bss = lbs_find_ssid_in_list(adapter, assoc_req->ssid, + bss = lbs_find_ssid_in_list(priv, assoc_req->ssid, assoc_req->ssid_len, NULL, IW_MODE_INFRA, channel); if (bss != NULL) { memcpy(&assoc_req->bss, bss, sizeof(struct bss_descriptor)); @@ -54,7 +53,7 @@ static int assoc_helper_essid(struct lbs_private *priv, assoc_req->ssid_len, 1); /* Search for the requested SSID in the scan table */ - bss = lbs_find_ssid_in_list(adapter, assoc_req->ssid, + bss = lbs_find_ssid_in_list(priv, assoc_req->ssid, assoc_req->ssid_len, NULL, IW_MODE_ADHOC, channel); if (bss != NULL) { lbs_deb_assoc("SSID found, will join\n"); @@ -78,7 +77,6 @@ static int assoc_helper_essid(struct lbs_private *priv, static int assoc_helper_bssid(struct lbs_private *priv, struct assoc_request * assoc_req) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct bss_descriptor * bss; DECLARE_MAC_BUF(mac); @@ -87,7 +85,7 @@ static int assoc_helper_bssid(struct lbs_private *priv, print_mac(mac, assoc_req->bssid)); /* Search for index position in list for requested MAC */ - bss = lbs_find_bssid_in_list(adapter, assoc_req->bssid, + bss = lbs_find_bssid_in_list(priv, assoc_req->bssid, assoc_req->mode); if (bss == NULL) { lbs_deb_assoc("ASSOC: WAP: BSSID %s not found, " @@ -138,21 +136,20 @@ static int assoc_helper_associate(struct lbs_private *priv, static int assoc_helper_mode(struct lbs_private *priv, struct assoc_request * assoc_req) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_ASSOC); - if (assoc_req->mode == adapter->mode) + if (assoc_req->mode == priv->mode) goto done; if (assoc_req->mode == IW_MODE_INFRA) { - if (adapter->psstate != PS_STATE_FULL_POWER) + if (priv->psstate != PS_STATE_FULL_POWER) lbs_ps_wakeup(priv, CMD_OPTION_WAITFORRSP); - adapter->psmode = LBS802_11POWERMODECAM; + priv->psmode = LBS802_11POWERMODECAM; } - adapter->mode = assoc_req->mode; + priv->mode = assoc_req->mode; ret = lbs_prepare_and_send_command(priv, CMD_802_11_SNMP_MIB, 0, CMD_OPTION_WAITFORRSP, @@ -191,7 +188,6 @@ void lbs_sync_channel(struct work_struct *work) static int assoc_helper_channel(struct lbs_private *priv, struct assoc_request * assoc_req) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_ASSOC); @@ -201,11 +197,11 @@ static int assoc_helper_channel(struct lbs_private *priv, lbs_deb_assoc("ASSOC: channel: error getting channel."); } - if (assoc_req->channel == adapter->curbssparams.channel) + if (assoc_req->channel == priv->curbssparams.channel) goto done; lbs_deb_assoc("ASSOC: channel: %d -> %d\n", - adapter->curbssparams.channel, assoc_req->channel); + priv->curbssparams.channel, assoc_req->channel); ret = lbs_prepare_and_send_command(priv, CMD_802_11_RF_CHANNEL, CMD_OPT_802_11_RF_CHANNEL_SET, @@ -219,7 +215,7 @@ static int assoc_helper_channel(struct lbs_private *priv, lbs_deb_assoc("ASSOC: channel: error getting channel."); } - if (assoc_req->channel != adapter->curbssparams.channel) { + if (assoc_req->channel != priv->curbssparams.channel) { lbs_deb_assoc("ASSOC: channel: failed to update channel to %d", assoc_req->channel); goto done; @@ -246,7 +242,6 @@ done: static int assoc_helper_wep_keys(struct lbs_private *priv, struct assoc_request * assoc_req) { - struct lbs_adapter *adapter = priv->adapter; int i; int ret = 0; @@ -275,23 +270,23 @@ static int assoc_helper_wep_keys(struct lbs_private *priv, /* enable/disable the MAC's WEP packet filter */ if (assoc_req->secinfo.wep_enabled) - adapter->currentpacketfilter |= CMD_ACT_MAC_WEP_ENABLE; + priv->currentpacketfilter |= CMD_ACT_MAC_WEP_ENABLE; else - adapter->currentpacketfilter &= ~CMD_ACT_MAC_WEP_ENABLE; + priv->currentpacketfilter &= ~CMD_ACT_MAC_WEP_ENABLE; ret = lbs_set_mac_packet_filter(priv); if (ret) goto out; - mutex_lock(&adapter->lock); + mutex_lock(&priv->lock); - /* Copy WEP keys into adapter wep key fields */ + /* Copy WEP keys into priv wep key fields */ for (i = 0; i < 4; i++) { - memcpy(&adapter->wep_keys[i], &assoc_req->wep_keys[i], + memcpy(&priv->wep_keys[i], &assoc_req->wep_keys[i], sizeof(struct enc_key)); } - adapter->wep_tx_keyidx = assoc_req->wep_tx_keyidx; + priv->wep_tx_keyidx = assoc_req->wep_tx_keyidx; - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); out: lbs_deb_leave_args(LBS_DEB_ASSOC, "ret %d", ret); @@ -301,14 +296,13 @@ out: static int assoc_helper_secinfo(struct lbs_private *priv, struct assoc_request * assoc_req) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; u32 do_wpa; u32 rsn = 0; lbs_deb_enter(LBS_DEB_ASSOC); - memcpy(&adapter->secinfo, &assoc_req->secinfo, + memcpy(&priv->secinfo, &assoc_req->secinfo, sizeof(struct lbs_802_11_security)); ret = lbs_set_mac_packet_filter(priv); @@ -396,17 +390,16 @@ out: static int assoc_helper_wpa_ie(struct lbs_private *priv, struct assoc_request * assoc_req) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_ASSOC); if (assoc_req->secinfo.WPAenabled || assoc_req->secinfo.WPA2enabled) { - memcpy(&adapter->wpa_ie, &assoc_req->wpa_ie, assoc_req->wpa_ie_len); - adapter->wpa_ie_len = assoc_req->wpa_ie_len; + memcpy(&priv->wpa_ie, &assoc_req->wpa_ie, assoc_req->wpa_ie_len); + priv->wpa_ie_len = assoc_req->wpa_ie_len; } else { - memset(&adapter->wpa_ie, 0, MAX_WPA_IE_LEN); - adapter->wpa_ie_len = 0; + memset(&priv->wpa_ie, 0, MAX_WPA_IE_LEN); + priv->wpa_ie_len = 0; } lbs_deb_leave_args(LBS_DEB_ASSOC, "ret %d", ret); @@ -414,14 +407,14 @@ static int assoc_helper_wpa_ie(struct lbs_private *priv, } -static int should_deauth_infrastructure(struct lbs_adapter *adapter, +static int should_deauth_infrastructure(struct lbs_private *priv, struct assoc_request * assoc_req) { int ret = 0; lbs_deb_enter(LBS_DEB_ASSOC); - if (adapter->connect_status != LBS_CONNECTED) + if (priv->connect_status != LBS_CONNECTED) return 0; if (test_bit(ASSOC_FLAG_SSID, &assoc_req->flags)) { @@ -431,7 +424,7 @@ static int should_deauth_infrastructure(struct lbs_adapter *adapter, } if (test_bit(ASSOC_FLAG_SECINFO, &assoc_req->flags)) { - if (adapter->secinfo.auth_mode != assoc_req->secinfo.auth_mode) { + if (priv->secinfo.auth_mode != assoc_req->secinfo.auth_mode) { lbs_deb_assoc("Deauthenticating due to new security\n"); ret = 1; goto out; @@ -466,16 +459,16 @@ out: } -static int should_stop_adhoc(struct lbs_adapter *adapter, +static int should_stop_adhoc(struct lbs_private *priv, struct assoc_request * assoc_req) { lbs_deb_enter(LBS_DEB_ASSOC); - if (adapter->connect_status != LBS_CONNECTED) + if (priv->connect_status != LBS_CONNECTED) return 0; - if (lbs_ssid_cmp(adapter->curbssparams.ssid, - adapter->curbssparams.ssid_len, + if (lbs_ssid_cmp(priv->curbssparams.ssid, + priv->curbssparams.ssid_len, assoc_req->ssid, assoc_req->ssid_len) != 0) return 1; @@ -486,7 +479,7 @@ static int should_stop_adhoc(struct lbs_adapter *adapter, } if (test_bit(ASSOC_FLAG_CHANNEL, &assoc_req->flags)) { - if (assoc_req->channel != adapter->curbssparams.channel) + if (assoc_req->channel != priv->curbssparams.channel) return 1; } @@ -499,7 +492,6 @@ void lbs_association_worker(struct work_struct *work) { struct lbs_private *priv = container_of(work, struct lbs_private, assoc_work.work); - struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req = NULL; int ret = 0; int find_any_ssid = 0; @@ -507,11 +499,11 @@ void lbs_association_worker(struct work_struct *work) lbs_deb_enter(LBS_DEB_ASSOC); - mutex_lock(&adapter->lock); - assoc_req = adapter->pending_assoc_req; - adapter->pending_assoc_req = NULL; - adapter->in_progress_assoc_req = assoc_req; - mutex_unlock(&adapter->lock); + mutex_lock(&priv->lock); + assoc_req = priv->pending_assoc_req; + priv->pending_assoc_req = NULL; + priv->in_progress_assoc_req = assoc_req; + mutex_unlock(&priv->lock); if (!assoc_req) goto done; @@ -569,8 +561,8 @@ void lbs_association_worker(struct work_struct *work) * Check if the attributes being changing require deauthentication * from the currently associated infrastructure access point. */ - if (adapter->mode == IW_MODE_INFRA) { - if (should_deauth_infrastructure(adapter, assoc_req)) { + if (priv->mode == IW_MODE_INFRA) { + if (should_deauth_infrastructure(priv, assoc_req)) { ret = lbs_send_deauthentication(priv); if (ret) { lbs_deb_assoc("Deauthentication due to new " @@ -578,8 +570,8 @@ void lbs_association_worker(struct work_struct *work) ret); } } - } else if (adapter->mode == IW_MODE_ADHOC) { - if (should_stop_adhoc(adapter, assoc_req)) { + } else if (priv->mode == IW_MODE_ADHOC) { + if (should_stop_adhoc(priv, assoc_req)) { ret = lbs_stop_adhoc_network(priv); if (ret) { lbs_deb_assoc("Teardown of AdHoc network due to " @@ -643,7 +635,7 @@ void lbs_association_worker(struct work_struct *work) success = 0; } - if (adapter->connect_status != LBS_CONNECTED) { + if (priv->connect_status != LBS_CONNECTED) { lbs_deb_assoc("ASSOC: association unsuccessful, " "not connected\n"); success = 0; @@ -651,9 +643,9 @@ void lbs_association_worker(struct work_struct *work) if (success) { lbs_deb_assoc("ASSOC: associated to '%s', %s\n", - escape_essid(adapter->curbssparams.ssid, - adapter->curbssparams.ssid_len), - print_mac(mac, adapter->curbssparams.bssid)); + escape_essid(priv->curbssparams.ssid, + priv->curbssparams.ssid_len), + print_mac(mac, priv->curbssparams.bssid)); lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0, CMD_OPTION_WAITFORRSP, 0, NULL); @@ -672,9 +664,9 @@ out: ret); } - mutex_lock(&adapter->lock); - adapter->in_progress_assoc_req = NULL; - mutex_unlock(&adapter->lock); + mutex_lock(&priv->lock); + priv->in_progress_assoc_req = NULL; + mutex_unlock(&priv->lock); kfree(assoc_req); done: @@ -685,15 +677,15 @@ done: /* * Caller MUST hold any necessary locks */ -struct assoc_request *lbs_get_association_request(struct lbs_adapter *adapter) +struct assoc_request *lbs_get_association_request(struct lbs_private *priv) { struct assoc_request * assoc_req; lbs_deb_enter(LBS_DEB_ASSOC); - if (!adapter->pending_assoc_req) { - adapter->pending_assoc_req = kzalloc(sizeof(struct assoc_request), + if (!priv->pending_assoc_req) { + priv->pending_assoc_req = kzalloc(sizeof(struct assoc_request), GFP_KERNEL); - if (!adapter->pending_assoc_req) { + if (!priv->pending_assoc_req) { lbs_pr_info("Not enough memory to allocate association" " request!\n"); return NULL; @@ -703,57 +695,57 @@ struct assoc_request *lbs_get_association_request(struct lbs_adapter *adapter) /* Copy current configuration attributes to the association request, * but don't overwrite any that are already set. */ - assoc_req = adapter->pending_assoc_req; + assoc_req = priv->pending_assoc_req; if (!test_bit(ASSOC_FLAG_SSID, &assoc_req->flags)) { - memcpy(&assoc_req->ssid, &adapter->curbssparams.ssid, + memcpy(&assoc_req->ssid, &priv->curbssparams.ssid, IW_ESSID_MAX_SIZE); - assoc_req->ssid_len = adapter->curbssparams.ssid_len; + assoc_req->ssid_len = priv->curbssparams.ssid_len; } if (!test_bit(ASSOC_FLAG_CHANNEL, &assoc_req->flags)) - assoc_req->channel = adapter->curbssparams.channel; + assoc_req->channel = priv->curbssparams.channel; if (!test_bit(ASSOC_FLAG_BAND, &assoc_req->flags)) - assoc_req->band = adapter->curbssparams.band; + assoc_req->band = priv->curbssparams.band; if (!test_bit(ASSOC_FLAG_MODE, &assoc_req->flags)) - assoc_req->mode = adapter->mode; + assoc_req->mode = priv->mode; if (!test_bit(ASSOC_FLAG_BSSID, &assoc_req->flags)) { - memcpy(&assoc_req->bssid, adapter->curbssparams.bssid, + memcpy(&assoc_req->bssid, priv->curbssparams.bssid, ETH_ALEN); } if (!test_bit(ASSOC_FLAG_WEP_KEYS, &assoc_req->flags)) { int i; for (i = 0; i < 4; i++) { - memcpy(&assoc_req->wep_keys[i], &adapter->wep_keys[i], + memcpy(&assoc_req->wep_keys[i], &priv->wep_keys[i], sizeof(struct enc_key)); } } if (!test_bit(ASSOC_FLAG_WEP_TX_KEYIDX, &assoc_req->flags)) - assoc_req->wep_tx_keyidx = adapter->wep_tx_keyidx; + assoc_req->wep_tx_keyidx = priv->wep_tx_keyidx; if (!test_bit(ASSOC_FLAG_WPA_MCAST_KEY, &assoc_req->flags)) { - memcpy(&assoc_req->wpa_mcast_key, &adapter->wpa_mcast_key, + memcpy(&assoc_req->wpa_mcast_key, &priv->wpa_mcast_key, sizeof(struct enc_key)); } if (!test_bit(ASSOC_FLAG_WPA_UCAST_KEY, &assoc_req->flags)) { - memcpy(&assoc_req->wpa_unicast_key, &adapter->wpa_unicast_key, + memcpy(&assoc_req->wpa_unicast_key, &priv->wpa_unicast_key, sizeof(struct enc_key)); } if (!test_bit(ASSOC_FLAG_SECINFO, &assoc_req->flags)) { - memcpy(&assoc_req->secinfo, &adapter->secinfo, + memcpy(&assoc_req->secinfo, &priv->secinfo, sizeof(struct lbs_802_11_security)); } if (!test_bit(ASSOC_FLAG_WPA_IE, &assoc_req->flags)) { - memcpy(&assoc_req->wpa_ie, &adapter->wpa_ie, + memcpy(&assoc_req->wpa_ie, &priv->wpa_ie, MAX_WPA_IE_LEN); - assoc_req->wpa_ie_len = adapter->wpa_ie_len; + assoc_req->wpa_ie_len = priv->wpa_ie_len; } lbs_deb_leave(LBS_DEB_ASSOC); diff --git a/drivers/net/wireless/libertas/assoc.h b/drivers/net/wireless/libertas/assoc.h index fad00ae0d00..08372bbf376 100644 --- a/drivers/net/wireless/libertas/assoc.h +++ b/drivers/net/wireless/libertas/assoc.h @@ -6,7 +6,7 @@ #include "dev.h" void lbs_association_worker(struct work_struct *work); -struct assoc_request *lbs_get_association_request(struct lbs_adapter *adapter); +struct assoc_request *lbs_get_association_request(struct lbs_private *priv); void lbs_sync_channel(struct work_struct *work); #endif /* _LBS_ASSOC_H */ diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 6838c9cd856..49a9aeee2b6 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -50,7 +50,7 @@ static int lbs_cmd_hw_spec(struct lbs_private *priv, struct cmd_ds_command *cmd) cmd->command = cpu_to_le16(CMD_GET_HW_SPEC); cmd->size = cpu_to_le16(sizeof(struct cmd_ds_get_hw_spec) + S_DS_GEN); - memcpy(hwspec->permanentaddr, priv->adapter->current_addr, ETH_ALEN); + memcpy(hwspec->permanentaddr, priv->current_addr, ETH_ALEN); lbs_deb_leave(LBS_DEB_CMD); return 0; @@ -123,7 +123,6 @@ static int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_sleep_params *sp = &cmd->params.sleep_params; lbs_deb_enter(LBS_DEB_CMD); @@ -133,17 +132,17 @@ static int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, cmd->command = cpu_to_le16(CMD_802_11_SLEEP_PARAMS); if (cmd_action == CMD_ACT_GET) { - memset(&adapter->sp, 0, sizeof(struct sleep_params)); + memset(&priv->sp, 0, sizeof(struct sleep_params)); memset(sp, 0, sizeof(struct cmd_ds_802_11_sleep_params)); sp->action = cpu_to_le16(cmd_action); } else if (cmd_action == CMD_ACT_SET) { sp->action = cpu_to_le16(cmd_action); - sp->error = cpu_to_le16(adapter->sp.sp_error); - sp->offset = cpu_to_le16(adapter->sp.sp_offset); - sp->stabletime = cpu_to_le16(adapter->sp.sp_stabletime); - sp->calcontrol = (u8) adapter->sp.sp_calcontrol; - sp->externalsleepclk = (u8) adapter->sp.sp_extsleepclk; - sp->reserved = cpu_to_le16(adapter->sp.sp_reserved); + sp->error = cpu_to_le16(priv->sp.sp_error); + sp->offset = cpu_to_le16(priv->sp.sp_offset); + sp->stabletime = cpu_to_le16(priv->sp.sp_stabletime); + sp->calcontrol = (u8) priv->sp.sp_calcontrol; + sp->externalsleepclk = (u8) priv->sp.sp_extsleepclk; + sp->reserved = cpu_to_le16(priv->sp.sp_reserved); } lbs_deb_leave(LBS_DEB_CMD); @@ -156,7 +155,6 @@ static int lbs_cmd_802_11_set_wep(struct lbs_private *priv, void * pdata_buf) { struct cmd_ds_802_11_set_wep *wep = &cmd->params.wep; - struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct assoc_request * assoc_req = pdata_buf; @@ -212,9 +210,9 @@ static int lbs_cmd_802_11_set_wep(struct lbs_private *priv, wep->action = cpu_to_le16(CMD_ACT_REMOVE); /* default tx key index */ - wep->keyindex = cpu_to_le16((u16)(adapter->wep_tx_keyidx & + wep->keyindex = cpu_to_le16((u16)(priv->wep_tx_keyidx & (u32)CMD_WEP_KEY_INDEX_MASK)); - lbs_deb_cmd("SET_WEP: remove key %d\n", adapter->wep_tx_keyidx); + lbs_deb_cmd("SET_WEP: remove key %d\n", priv->wep_tx_keyidx); } ret = 0; @@ -415,7 +413,6 @@ static int lbs_cmd_802_11_snmp_mib(struct lbs_private *priv, int cmd_oid, void *pdata_buf) { struct cmd_ds_802_11_snmp_mib *pSNMPMIB = &cmd->params.smib; - struct lbs_adapter *adapter = priv->adapter; u8 ucTemp; lbs_deb_enter(LBS_DEB_CMD); @@ -507,7 +504,7 @@ static int lbs_cmd_802_11_snmp_mib(struct lbs_private *priv, pSNMPMIB->querytype = cpu_to_le16(CMD_ACT_SET); pSNMPMIB->bufsize = cpu_to_le16(sizeof(u16)); *((__le16 *)(pSNMPMIB->value)) = - cpu_to_le16((u16) adapter->txretrycount); + cpu_to_le16((u16) priv->txretrycount); } break; @@ -534,7 +531,6 @@ static int lbs_cmd_802_11_radio_control(struct lbs_private *priv, struct cmd_ds_command *cmd, int cmd_action) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_radio_control *pradiocontrol = &cmd->params.radio; lbs_deb_enter(LBS_DEB_CMD); @@ -546,7 +542,7 @@ static int lbs_cmd_802_11_radio_control(struct lbs_private *priv, pradiocontrol->action = cpu_to_le16(cmd_action); - switch (adapter->preamble) { + switch (priv->preamble) { case CMD_TYPE_SHORT_PREAMBLE: pradiocontrol->control = cpu_to_le16(SET_SHORT_PREAMBLE); break; @@ -561,7 +557,7 @@ static int lbs_cmd_802_11_radio_control(struct lbs_private *priv, break; } - if (adapter->radioon) + if (priv->radioon) pradiocontrol->control |= cpu_to_le16(TURN_ON_RF); else pradiocontrol->control &= cpu_to_le16(~TURN_ON_RF); @@ -640,7 +636,6 @@ static int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv, { struct cmd_ds_802_11_rate_adapt_rateset *rateadapt = &cmd->params.rateset; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); cmd->size = @@ -649,8 +644,8 @@ static int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv, cmd->command = cpu_to_le16(CMD_802_11_RATE_ADAPT_RATESET); rateadapt->action = cpu_to_le16(cmd_action); - rateadapt->enablehwauto = cpu_to_le16(adapter->enablehwauto); - rateadapt->bitmap = cpu_to_le16(adapter->ratebitmap); + rateadapt->enablehwauto = cpu_to_le16(priv->enablehwauto); + rateadapt->bitmap = cpu_to_le16(priv->ratebitmap); lbs_deb_leave(LBS_DEB_CMD); return 0; @@ -661,7 +656,6 @@ static int lbs_cmd_802_11_data_rate(struct lbs_private *priv, u16 cmd_action) { struct cmd_ds_802_11_data_rate *pdatarate = &cmd->params.drate; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -672,9 +666,9 @@ static int lbs_cmd_802_11_data_rate(struct lbs_private *priv, pdatarate->action = cpu_to_le16(cmd_action); if (cmd_action == CMD_ACT_SET_TX_FIX_RATE) { - pdatarate->rates[0] = lbs_data_rate_to_fw_index(adapter->cur_rate); + pdatarate->rates[0] = lbs_data_rate_to_fw_index(priv->cur_rate); lbs_deb_cmd("DATA_RATE: set fixed 0x%02X\n", - adapter->cur_rate); + priv->cur_rate); } else if (cmd_action == CMD_ACT_SET_TX_AUTO) { lbs_deb_cmd("DATA_RATE: setting auto\n"); } @@ -688,7 +682,6 @@ static int lbs_cmd_mac_multicast_adr(struct lbs_private *priv, u16 cmd_action) { struct cmd_ds_mac_multicast_adr *pMCastAdr = &cmd->params.madr; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); cmd->size = cpu_to_le16(sizeof(struct cmd_ds_mac_multicast_adr) + @@ -698,9 +691,9 @@ static int lbs_cmd_mac_multicast_adr(struct lbs_private *priv, lbs_deb_cmd("MULTICAST_ADR: setting %d addresses\n", pMCastAdr->nr_of_adrs); pMCastAdr->action = cpu_to_le16(cmd_action); pMCastAdr->nr_of_adrs = - cpu_to_le16((u16) adapter->nr_of_multicastmacaddr); - memcpy(pMCastAdr->maclist, adapter->multicastlist, - adapter->nr_of_multicastmacaddr * ETH_ALEN); + cpu_to_le16((u16) priv->nr_of_multicastmacaddr); + memcpy(pMCastAdr->maclist, priv->multicastlist, + priv->nr_of_multicastmacaddr * ETH_ALEN); lbs_deb_leave(LBS_DEB_CMD); return 0; @@ -730,7 +723,6 @@ static int lbs_cmd_802_11_rf_channel(struct lbs_private *priv, static int lbs_cmd_802_11_rssi(struct lbs_private *priv, struct cmd_ds_command *cmd) { - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); cmd->command = cpu_to_le16(CMD_802_11_RSSI); @@ -738,12 +730,12 @@ static int lbs_cmd_802_11_rssi(struct lbs_private *priv, cmd->params.rssi.N = cpu_to_le16(DEFAULT_BCN_AVG_FACTOR); /* reset Beacon SNR/NF/RSSI values */ - adapter->SNR[TYPE_BEACON][TYPE_NOAVG] = 0; - adapter->SNR[TYPE_BEACON][TYPE_AVG] = 0; - adapter->NF[TYPE_BEACON][TYPE_NOAVG] = 0; - adapter->NF[TYPE_BEACON][TYPE_AVG] = 0; - adapter->RSSI[TYPE_BEACON][TYPE_NOAVG] = 0; - adapter->RSSI[TYPE_BEACON][TYPE_AVG] = 0; + priv->SNR[TYPE_BEACON][TYPE_NOAVG] = 0; + priv->SNR[TYPE_BEACON][TYPE_AVG] = 0; + priv->NF[TYPE_BEACON][TYPE_NOAVG] = 0; + priv->NF[TYPE_BEACON][TYPE_AVG] = 0; + priv->RSSI[TYPE_BEACON][TYPE_NOAVG] = 0; + priv->RSSI[TYPE_BEACON][TYPE_AVG] = 0; lbs_deb_leave(LBS_DEB_CMD); return 0; @@ -828,7 +820,6 @@ static int lbs_cmd_802_11_mac_address(struct lbs_private *priv, struct cmd_ds_command *cmd, u16 cmd_action) { - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); cmd->command = cpu_to_le16(CMD_802_11_MAC_ADDRESS); @@ -840,8 +831,8 @@ static int lbs_cmd_802_11_mac_address(struct lbs_private *priv, if (cmd_action == CMD_ACT_SET) { memcpy(cmd->params.macadd.macadd, - adapter->current_addr, ETH_ALEN); - lbs_deb_hex(LBS_DEB_CMD, "SET_CMD: MAC addr", adapter->current_addr, 6); + priv->current_addr, ETH_ALEN); + lbs_deb_hex(LBS_DEB_CMD, "SET_CMD: MAC addr", priv->current_addr, 6); } lbs_deb_leave(LBS_DEB_CMD); @@ -958,7 +949,6 @@ static int lbs_cmd_bcn_ctrl(struct lbs_private * priv, { struct cmd_ds_802_11_beacon_control *bcn_ctrl = &cmd->params.bcn_ctrl; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); cmd->size = @@ -967,8 +957,8 @@ static int lbs_cmd_bcn_ctrl(struct lbs_private * priv, cmd->command = cpu_to_le16(CMD_802_11_BEACON_CTRL); bcn_ctrl->action = cpu_to_le16(cmd_action); - bcn_ctrl->beacon_enable = cpu_to_le16(adapter->beacon_enable); - bcn_ctrl->beacon_period = cpu_to_le16(adapter->beacon_period); + bcn_ctrl->beacon_enable = cpu_to_le16(priv->beacon_enable); + bcn_ctrl->beacon_period = cpu_to_le16(priv->beacon_period); lbs_deb_leave(LBS_DEB_CMD); return 0; @@ -978,7 +968,7 @@ static int lbs_cmd_bcn_ctrl(struct lbs_private * priv, * Note: NEVER use lbs_queue_cmd() with addtail==0 other than for * the command timer, because it does not account for queued commands. */ -void lbs_queue_cmd(struct lbs_adapter *adapter, +void lbs_queue_cmd(struct lbs_private *priv, struct cmd_ctrl_node *cmdnode, u8 addtail) { @@ -1002,19 +992,19 @@ void lbs_queue_cmd(struct lbs_adapter *adapter, if (le16_to_cpu(cmdptr->command) == CMD_802_11_PS_MODE) { struct cmd_ds_802_11_ps_mode *psm = &cmdptr->params.psmode; if (psm->action == cpu_to_le16(CMD_SUBCMD_EXIT_PS)) { - if (adapter->psstate != PS_STATE_FULL_POWER) + if (priv->psstate != PS_STATE_FULL_POWER) addtail = 0; } } - spin_lock_irqsave(&adapter->driver_lock, flags); + spin_lock_irqsave(&priv->driver_lock, flags); if (addtail) - list_add_tail(&cmdnode->list, &adapter->cmdpendingq); + list_add_tail(&cmdnode->list, &priv->cmdpendingq); else - list_add(&cmdnode->list, &adapter->cmdpendingq); + list_add(&cmdnode->list, &priv->cmdpendingq); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); lbs_deb_host("QUEUE_CMD: inserted command 0x%04x into cmdpendingq\n", le16_to_cpu(((struct cmd_ds_gen*)cmdnode->bufvirtualaddr)->command)); @@ -1035,31 +1025,30 @@ static int DownloadcommandToStation(struct lbs_private *priv, { unsigned long flags; struct cmd_ds_command *cmdptr; - struct lbs_adapter *adapter = priv->adapter; int ret = -1; u16 cmdsize; u16 command; lbs_deb_enter(LBS_DEB_HOST); - if (!adapter || !cmdnode) { - lbs_deb_host("DNLD_CMD: adapter or cmdmode is NULL\n"); + if (!priv || !cmdnode) { + lbs_deb_host("DNLD_CMD: priv or cmdmode is NULL\n"); goto done; } cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr; - spin_lock_irqsave(&adapter->driver_lock, flags); + spin_lock_irqsave(&priv->driver_lock, flags); if (!cmdptr || !cmdptr->size) { lbs_deb_host("DNLD_CMD: cmdptr is NULL or zero\n"); __lbs_cleanup_and_insert_cmd(priv, cmdnode); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); goto done; } - adapter->cur_cmd = cmdnode; - adapter->cur_cmd_retcode = 0; - spin_unlock_irqrestore(&adapter->driver_lock, flags); + priv->cur_cmd = cmdnode; + priv->cur_cmd_retcode = 0; + spin_unlock_irqrestore(&priv->driver_lock, flags); cmdsize = le16_to_cpu(cmdptr->size); command = le16_to_cpu(cmdptr->command); @@ -1074,11 +1063,11 @@ static int DownloadcommandToStation(struct lbs_private *priv, if (ret != 0) { lbs_deb_host("DNLD_CMD: hw_host_to_card failed\n"); - spin_lock_irqsave(&adapter->driver_lock, flags); - adapter->cur_cmd_retcode = ret; - __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->cur_cmd = NULL; - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_lock_irqsave(&priv->driver_lock, flags); + priv->cur_cmd_retcode = ret; + __lbs_cleanup_and_insert_cmd(priv, priv->cur_cmd); + priv->cur_cmd = NULL; + spin_unlock_irqrestore(&priv->driver_lock, flags); goto done; } @@ -1087,9 +1076,9 @@ static int DownloadcommandToStation(struct lbs_private *priv, /* Setup the timer after transmit command */ if (command == CMD_802_11_SCAN || command == CMD_802_11_AUTHENTICATE || command == CMD_802_11_ASSOCIATE) - mod_timer(&adapter->command_timer, jiffies + (10*HZ)); + mod_timer(&priv->command_timer, jiffies + (10*HZ)); else - mod_timer(&adapter->command_timer, jiffies + (5*HZ)); + mod_timer(&priv->command_timer, jiffies + (5*HZ)); ret = 0; @@ -1107,7 +1096,7 @@ static int lbs_cmd_mac_control(struct lbs_private *priv, cmd->command = cpu_to_le16(CMD_MAC_CONTROL); cmd->size = cpu_to_le16(sizeof(struct cmd_ds_mac_control) + S_DS_GEN); - mac->action = cpu_to_le16(priv->adapter->currentpacketfilter); + mac->action = cpu_to_le16(priv->currentpacketfilter); lbs_deb_cmd("MAC_CONTROL: action 0x%x, size %d\n", le16_to_cpu(mac->action), le16_to_cpu(cmd->size)); @@ -1118,18 +1107,17 @@ static int lbs_cmd_mac_control(struct lbs_private *priv, /** * This function inserts command node to cmdfreeq - * after cleans it. Requires adapter->driver_lock held. + * after cleans it. Requires priv->driver_lock held. */ void __lbs_cleanup_and_insert_cmd(struct lbs_private *priv, struct cmd_ctrl_node *ptempcmd) { - struct lbs_adapter *adapter = priv->adapter; if (!ptempcmd) return; cleanup_cmdnode(ptempcmd); - list_add_tail(&ptempcmd->list, &adapter->cmdfreeq); + list_add_tail(&ptempcmd->list, &priv->cmdfreeq); } static void lbs_cleanup_and_insert_cmd(struct lbs_private *priv, @@ -1137,9 +1125,9 @@ static void lbs_cleanup_and_insert_cmd(struct lbs_private *priv, { unsigned long flags; - spin_lock_irqsave(&priv->adapter->driver_lock, flags); + spin_lock_irqsave(&priv->driver_lock, flags); __lbs_cleanup_and_insert_cmd(priv, ptempcmd); - spin_unlock_irqrestore(&priv->adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); } int lbs_set_radio_control(struct lbs_private *priv) @@ -1154,7 +1142,7 @@ int lbs_set_radio_control(struct lbs_private *priv) CMD_OPTION_WAITFORRSP, 0, NULL); lbs_deb_cmd("RADIO_SET: radio %d, preamble %d\n", - priv->adapter->radioon, priv->adapter->preamble); + priv->radioon, priv->preamble); lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret); return ret; @@ -1191,20 +1179,19 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, u16 wait_option, u32 cmd_oid, void *pdata_buf) { int ret = 0; - struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *cmdnode; struct cmd_ds_command *cmdptr; unsigned long flags; lbs_deb_enter(LBS_DEB_HOST); - if (!adapter) { - lbs_deb_host("PREP_CMD: adapter is NULL\n"); + if (!priv) { + lbs_deb_host("PREP_CMD: priv is NULL\n"); ret = -1; goto done; } - if (adapter->surpriseremoved) { + if (priv->surpriseremoved) { lbs_deb_host("PREP_CMD: card removed\n"); ret = -1; goto done; @@ -1235,8 +1222,8 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, } /* Set sequence number, command and INT option */ - adapter->seqnum++; - cmdptr->seqnum = cpu_to_le16(adapter->seqnum); + priv->seqnum++; + cmdptr->seqnum = cpu_to_le16(priv->seqnum); cmdptr->command = cpu_to_le16(cmd_no); cmdptr->result = 0; @@ -1482,7 +1469,7 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, cmdnode->cmdwaitqwoken = 0; - lbs_queue_cmd(adapter, cmdnode, 1); + lbs_queue_cmd(priv, cmdnode, 1); wake_up_interruptible(&priv->waitq); if (wait_option & CMD_OPTION_WAITFORRSP) { @@ -1492,14 +1479,14 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, cmdnode->cmdwaitqwoken); } - spin_lock_irqsave(&adapter->driver_lock, flags); - if (adapter->cur_cmd_retcode) { + spin_lock_irqsave(&priv->driver_lock, flags); + if (priv->cur_cmd_retcode) { lbs_deb_host("PREP_CMD: command failed with return code %d\n", - adapter->cur_cmd_retcode); - adapter->cur_cmd_retcode = 0; + priv->cur_cmd_retcode); + priv->cur_cmd_retcode = 0; ret = -1; } - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); done: lbs_deb_leave_args(LBS_DEB_HOST, "ret %d", ret); @@ -1521,7 +1508,6 @@ int lbs_allocate_cmd_buffer(struct lbs_private *priv) u32 i; struct cmd_ctrl_node *tempcmd_array; u8 *ptempvirtualaddr; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_HOST); @@ -1533,7 +1519,7 @@ int lbs_allocate_cmd_buffer(struct lbs_private *priv) ret = -1; goto done; } - adapter->cmd_array = tempcmd_array; + priv->cmd_array = tempcmd_array; /* Allocate and initialize command buffers */ ulbufsize = MRVDRV_SIZE_OF_CMD_BUFFER; @@ -1571,17 +1557,16 @@ int lbs_free_cmd_buffer(struct lbs_private *priv) u32 ulbufsize; /* Someone needs to die for this. Slowly and painfully */ unsigned int i; struct cmd_ctrl_node *tempcmd_array; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_HOST); /* need to check if cmd array is allocated or not */ - if (adapter->cmd_array == NULL) { + if (priv->cmd_array == NULL) { lbs_deb_host("FREE_CMD_BUF: cmd_array is NULL\n"); goto done; } - tempcmd_array = adapter->cmd_array; + tempcmd_array = priv->cmd_array; /* Release shared memory buffers */ ulbufsize = MRVDRV_SIZE_OF_CMD_BUFFER; @@ -1593,9 +1578,9 @@ int lbs_free_cmd_buffer(struct lbs_private *priv) } /* Release cmd_ctrl_node */ - if (adapter->cmd_array) { - kfree(adapter->cmd_array); - adapter->cmd_array = NULL; + if (priv->cmd_array) { + kfree(priv->cmd_array); + priv->cmd_array = NULL; } done: @@ -1613,18 +1598,17 @@ done: struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv) { struct cmd_ctrl_node *tempnode; - struct lbs_adapter *adapter = priv->adapter; unsigned long flags; lbs_deb_enter(LBS_DEB_HOST); - if (!adapter) + if (!priv) return NULL; - spin_lock_irqsave(&adapter->driver_lock, flags); + spin_lock_irqsave(&priv->driver_lock, flags); - if (!list_empty(&adapter->cmdfreeq)) { - tempnode = list_first_entry(&adapter->cmdfreeq, + if (!list_empty(&priv->cmdfreeq)) { + tempnode = list_first_entry(&priv->cmdfreeq, struct cmd_ctrl_node, list); list_del(&tempnode->list); } else { @@ -1632,7 +1616,7 @@ struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv) tempnode = NULL; } - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); if (tempnode) cleanup_cmdnode(tempnode); @@ -1700,7 +1684,6 @@ void lbs_set_cmd_ctrl_node(struct lbs_private *priv, */ int lbs_execute_next_command(struct lbs_private *priv) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *cmdnode = NULL; struct cmd_ds_command *cmdptr; unsigned long flags; @@ -1711,40 +1694,40 @@ int lbs_execute_next_command(struct lbs_private *priv) // data packet is received lbs_deb_enter(LBS_DEB_THREAD); - spin_lock_irqsave(&adapter->driver_lock, flags); + spin_lock_irqsave(&priv->driver_lock, flags); - if (adapter->cur_cmd) { + if (priv->cur_cmd) { lbs_pr_alert( "EXEC_NEXT_CMD: already processing command!\n"); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); ret = -1; goto done; } - if (!list_empty(&adapter->cmdpendingq)) { - cmdnode = list_first_entry(&adapter->cmdpendingq, + if (!list_empty(&priv->cmdpendingq)) { + cmdnode = list_first_entry(&priv->cmdpendingq, struct cmd_ctrl_node, list); } - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); if (cmdnode) { cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr; if (is_command_allowed_in_ps(cmdptr->command)) { - if ((adapter->psstate == PS_STATE_SLEEP) || - (adapter->psstate == PS_STATE_PRE_SLEEP)) { + if ((priv->psstate == PS_STATE_SLEEP) || + (priv->psstate == PS_STATE_PRE_SLEEP)) { lbs_deb_host( "EXEC_NEXT_CMD: cannot send cmd 0x%04x in psstate %d\n", le16_to_cpu(cmdptr->command), - adapter->psstate); + priv->psstate); ret = -1; goto done; } lbs_deb_host("EXEC_NEXT_CMD: OK to send command " "0x%04x in psstate %d\n", le16_to_cpu(cmdptr->command), - adapter->psstate); - } else if (adapter->psstate != PS_STATE_FULL_POWER) { + priv->psstate); + } else if (priv->psstate != PS_STATE_FULL_POWER) { /* * 1. Non-PS command: * Queue it. set needtowakeup to TRUE if current state @@ -1760,12 +1743,12 @@ int lbs_execute_next_command(struct lbs_private *priv) cpu_to_le16(CMD_802_11_PS_MODE)) { /* Prepare to send Exit PS, * this non PS command will be sent later */ - if ((adapter->psstate == PS_STATE_SLEEP) - || (adapter->psstate == PS_STATE_PRE_SLEEP) + if ((priv->psstate == PS_STATE_SLEEP) + || (priv->psstate == PS_STATE_PRE_SLEEP) ) { /* w/ new scheme, it will not reach here. since it is blocked in main_thread. */ - adapter->needtowakeup = 1; + priv->needtowakeup = 1; } else lbs_ps_wakeup(priv, 0); @@ -1793,13 +1776,13 @@ int lbs_execute_next_command(struct lbs_private *priv) goto done; } - if ((adapter->psstate == PS_STATE_SLEEP) || - (adapter->psstate == PS_STATE_PRE_SLEEP)) { + if ((priv->psstate == PS_STATE_SLEEP) || + (priv->psstate == PS_STATE_PRE_SLEEP)) { lbs_deb_host( "EXEC_NEXT_CMD: ignore EXIT_PS cmd in sleep\n"); list_del(&cmdnode->list); lbs_cleanup_and_insert_cmd(priv, cmdnode); - adapter->needtowakeup = 1; + priv->needtowakeup = 1; ret = 0; goto done; @@ -1818,15 +1801,15 @@ int lbs_execute_next_command(struct lbs_private *priv) * check if in power save mode, if yes, put the device back * to PS mode */ - if ((adapter->psmode != LBS802_11POWERMODECAM) && - (adapter->psstate == PS_STATE_FULL_POWER) && - ((adapter->connect_status == LBS_CONNECTED) || - (adapter->mesh_connect_status == LBS_CONNECTED))) { - if (adapter->secinfo.WPAenabled || - adapter->secinfo.WPA2enabled) { + if ((priv->psmode != LBS802_11POWERMODECAM) && + (priv->psstate == PS_STATE_FULL_POWER) && + ((priv->connect_status == LBS_CONNECTED) || + (priv->mesh_connect_status == LBS_CONNECTED))) { + if (priv->secinfo.WPAenabled || + priv->secinfo.WPA2enabled) { /* check for valid WPA group keys */ - if (adapter->wpa_mcast_key.len || - adapter->wpa_unicast_key.len) { + if (priv->wpa_mcast_key.len || + priv->wpa_unicast_key.len) { lbs_deb_host( "EXEC_NEXT_CMD: WPA enabled and GTK_SET" " go back to PS_SLEEP"); @@ -1874,7 +1857,6 @@ void lbs_send_iwevcustom_event(struct lbs_private *priv, s8 *str) static int sendconfirmsleep(struct lbs_private *priv, u8 *cmdptr, u16 size) { unsigned long flags; - struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_HOST); @@ -1887,24 +1869,24 @@ static int sendconfirmsleep(struct lbs_private *priv, u8 *cmdptr, u16 size) ret = priv->hw_host_to_card(priv, MVMS_CMD, cmdptr, size); priv->dnld_sent = DNLD_RES_RECEIVED; - spin_lock_irqsave(&adapter->driver_lock, flags); - if (adapter->intcounter || adapter->currenttxskb) + spin_lock_irqsave(&priv->driver_lock, flags); + if (priv->intcounter || priv->currenttxskb) lbs_deb_host("SEND_SLEEPC_CMD: intcounter %d, currenttxskb %p\n", - adapter->intcounter, adapter->currenttxskb); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + priv->intcounter, priv->currenttxskb); + spin_unlock_irqrestore(&priv->driver_lock, flags); if (ret) { lbs_pr_alert( "SEND_SLEEPC_CMD: Host to Card failed for Confirm Sleep\n"); } else { - spin_lock_irqsave(&adapter->driver_lock, flags); - if (!adapter->intcounter) { - adapter->psstate = PS_STATE_SLEEP; + spin_lock_irqsave(&priv->driver_lock, flags); + if (!priv->intcounter) { + priv->psstate = PS_STATE_SLEEP; } else { lbs_deb_host("SEND_SLEEPC_CMD: after sent, intcounter %d\n", - adapter->intcounter); + priv->intcounter); } - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); lbs_deb_host("SEND_SLEEPC_CMD: sent confirm sleep\n"); } @@ -1961,7 +1943,6 @@ void lbs_ps_wakeup(struct lbs_private *priv, int wait_option) void lbs_ps_confirm_sleep(struct lbs_private *priv, u16 psmode) { unsigned long flags =0; - struct lbs_adapter *adapter = priv->adapter; u8 allowed = 1; lbs_deb_enter(LBS_DEB_HOST); @@ -1971,20 +1952,20 @@ void lbs_ps_confirm_sleep(struct lbs_private *priv, u16 psmode) lbs_deb_host("dnld_sent was set"); } - spin_lock_irqsave(&adapter->driver_lock, flags); - if (adapter->cur_cmd) { + spin_lock_irqsave(&priv->driver_lock, flags); + if (priv->cur_cmd) { allowed = 0; lbs_deb_host("cur_cmd was set"); } - if (adapter->intcounter > 0) { + if (priv->intcounter > 0) { allowed = 0; - lbs_deb_host("intcounter %d", adapter->intcounter); + lbs_deb_host("intcounter %d", priv->intcounter); } - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); if (allowed) { lbs_deb_host("sending lbs_ps_confirm_sleep\n"); - sendconfirmsleep(priv, (u8 *) & adapter->lbs_ps_confirm_sleep, + sendconfirmsleep(priv, (u8 *) & priv->lbs_ps_confirm_sleep, sizeof(struct PS_CMD_ConfirmSleep)); } else { lbs_deb_host("sleep confirm has been delayed\n"); @@ -2014,7 +1995,6 @@ void lbs_ps_confirm_sleep(struct lbs_private *priv, u16 psmode) int lbs_cmd(struct lbs_private *priv, uint16_t command, void *cmd, int cmd_size, int (*callback)(uint16_t, struct cmd_ds_command *, struct lbs_private *)) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *cmdnode; struct cmd_ds_gen *cmdptr; unsigned long flags; @@ -2022,13 +2002,13 @@ int lbs_cmd(struct lbs_private *priv, uint16_t command, void *cmd, int cmd_size, lbs_deb_enter(LBS_DEB_HOST); - if (!adapter) { - lbs_deb_host("PREP_CMD: adapter is NULL\n"); + if (!priv) { + lbs_deb_host("PREP_CMD: priv is NULL\n"); ret = -1; goto done; } - if (adapter->surpriseremoved) { + if (priv->surpriseremoved) { lbs_deb_host("PREP_CMD: card removed\n"); ret = -1; goto done; @@ -2050,10 +2030,10 @@ int lbs_cmd(struct lbs_private *priv, uint16_t command, void *cmd, int cmd_size, cmdnode->callback = callback; /* Set sequence number, clean result, move to buffer */ - adapter->seqnum++; + priv->seqnum++; cmdptr->command = cpu_to_le16(command); cmdptr->size = cpu_to_le16(cmd_size + S_DS_GEN); - cmdptr->seqnum = cpu_to_le16(adapter->seqnum); + cmdptr->seqnum = cpu_to_le16(priv->seqnum); cmdptr->result = 0; memcpy(cmdptr->cmdresp, cmd, cmd_size); @@ -2063,20 +2043,20 @@ int lbs_cmd(struct lbs_private *priv, uint16_t command, void *cmd, int cmd_size, * because the caller of lbs_cmd() sets up all of *cmd for us. */ cmdnode->cmdwaitqwoken = 0; - lbs_queue_cmd(adapter, cmdnode, 1); + lbs_queue_cmd(priv, cmdnode, 1); wake_up_interruptible(&priv->waitq); might_sleep(); wait_event_interruptible(cmdnode->cmdwait_q, cmdnode->cmdwaitqwoken); - spin_lock_irqsave(&adapter->driver_lock, flags); - if (adapter->cur_cmd_retcode) { + spin_lock_irqsave(&priv->driver_lock, flags); + if (priv->cur_cmd_retcode) { lbs_deb_host("PREP_CMD: command failed with return code %d\n", - adapter->cur_cmd_retcode); - adapter->cur_cmd_retcode = 0; + priv->cur_cmd_retcode); + priv->cur_cmd_retcode = 0; ret = -1; } - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); done: lbs_deb_leave_args(LBS_DEB_HOST, "ret %d", ret); diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 44865bf12ba..ab6e729efac 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -25,10 +25,9 @@ */ void lbs_mac_event_disconnected(struct lbs_private *priv) { - struct lbs_adapter *adapter = priv->adapter; union iwreq_data wrqu; - if (adapter->connect_status != LBS_CONNECTED) + if (priv->connect_status != LBS_CONNECTED) return; lbs_deb_enter(LBS_DEB_ASSOC); @@ -45,31 +44,31 @@ void lbs_mac_event_disconnected(struct lbs_private *priv) wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); /* Free Tx and Rx packets */ - kfree_skb(priv->adapter->currenttxskb); - priv->adapter->currenttxskb = NULL; + kfree_skb(priv->currenttxskb); + priv->currenttxskb = NULL; /* report disconnect to upper layer */ netif_stop_queue(priv->dev); netif_carrier_off(priv->dev); /* reset SNR/NF/RSSI values */ - memset(adapter->SNR, 0x00, sizeof(adapter->SNR)); - memset(adapter->NF, 0x00, sizeof(adapter->NF)); - memset(adapter->RSSI, 0x00, sizeof(adapter->RSSI)); - memset(adapter->rawSNR, 0x00, sizeof(adapter->rawSNR)); - memset(adapter->rawNF, 0x00, sizeof(adapter->rawNF)); - adapter->nextSNRNF = 0; - adapter->numSNRNF = 0; - adapter->connect_status = LBS_DISCONNECTED; + memset(priv->SNR, 0x00, sizeof(priv->SNR)); + memset(priv->NF, 0x00, sizeof(priv->NF)); + memset(priv->RSSI, 0x00, sizeof(priv->RSSI)); + memset(priv->rawSNR, 0x00, sizeof(priv->rawSNR)); + memset(priv->rawNF, 0x00, sizeof(priv->rawNF)); + priv->nextSNRNF = 0; + priv->numSNRNF = 0; + priv->connect_status = LBS_DISCONNECTED; /* Clear out associated SSID and BSSID since connection is * no longer valid. */ - memset(&adapter->curbssparams.bssid, 0, ETH_ALEN); - memset(&adapter->curbssparams.ssid, 0, IW_ESSID_MAX_SIZE); - adapter->curbssparams.ssid_len = 0; + memset(&priv->curbssparams.bssid, 0, ETH_ALEN); + memset(&priv->curbssparams.ssid, 0, IW_ESSID_MAX_SIZE); + priv->curbssparams.ssid_len = 0; - if (adapter->psstate != PS_STATE_FULL_POWER) { + if (priv->psstate != PS_STATE_FULL_POWER) { /* make firmware to exit PS mode */ lbs_deb_cmd("disconnected, so exit PS mode\n"); lbs_ps_wakeup(priv, 0); @@ -107,7 +106,6 @@ static int lbs_ret_reg_access(struct lbs_private *priv, u16 type, struct cmd_ds_command *resp) { int ret = 0; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -116,8 +114,8 @@ static int lbs_ret_reg_access(struct lbs_private *priv, { struct cmd_ds_mac_reg_access *reg = &resp->params.macreg; - adapter->offsetvalue.offset = (u32)le16_to_cpu(reg->offset); - adapter->offsetvalue.value = le32_to_cpu(reg->value); + priv->offsetvalue.offset = (u32)le16_to_cpu(reg->offset); + priv->offsetvalue.value = le32_to_cpu(reg->value); break; } @@ -125,8 +123,8 @@ static int lbs_ret_reg_access(struct lbs_private *priv, { struct cmd_ds_bbp_reg_access *reg = &resp->params.bbpreg; - adapter->offsetvalue.offset = (u32)le16_to_cpu(reg->offset); - adapter->offsetvalue.value = reg->value; + priv->offsetvalue.offset = (u32)le16_to_cpu(reg->offset); + priv->offsetvalue.value = reg->value; break; } @@ -134,8 +132,8 @@ static int lbs_ret_reg_access(struct lbs_private *priv, { struct cmd_ds_rf_reg_access *reg = &resp->params.rfreg; - adapter->offsetvalue.offset = (u32)le16_to_cpu(reg->offset); - adapter->offsetvalue.value = reg->value; + priv->offsetvalue.offset = (u32)le16_to_cpu(reg->offset); + priv->offsetvalue.value = reg->value; break; } @@ -152,19 +150,18 @@ static int lbs_ret_get_hw_spec(struct lbs_private *priv, { u32 i; struct cmd_ds_get_hw_spec *hwspec = &resp->params.hwspec; - struct lbs_adapter *adapter = priv->adapter; int ret = 0; DECLARE_MAC_BUF(mac); lbs_deb_enter(LBS_DEB_CMD); - adapter->fwcapinfo = le32_to_cpu(hwspec->fwcapinfo); + priv->fwcapinfo = le32_to_cpu(hwspec->fwcapinfo); - memcpy(adapter->fwreleasenumber, hwspec->fwreleasenumber, 4); + memcpy(priv->fwreleasenumber, hwspec->fwreleasenumber, 4); lbs_deb_cmd("GET_HW_SPEC: firmware release %u.%u.%up%u\n", - adapter->fwreleasenumber[2], adapter->fwreleasenumber[1], - adapter->fwreleasenumber[0], adapter->fwreleasenumber[3]); + priv->fwreleasenumber[2], priv->fwreleasenumber[1], + priv->fwreleasenumber[0], priv->fwreleasenumber[3]); lbs_deb_cmd("GET_HW_SPEC: MAC addr %s\n", print_mac(mac, hwspec->permanentaddr)); lbs_deb_cmd("GET_HW_SPEC: hardware interface 0x%x, hardware spec 0x%04x\n", @@ -174,29 +171,29 @@ static int lbs_ret_get_hw_spec(struct lbs_private *priv, * only ever be 8-bit, even though the field size is 16-bit. Some firmware * returns non-zero high 8 bits here. */ - adapter->regioncode = le16_to_cpu(hwspec->regioncode) & 0xFF; + priv->regioncode = le16_to_cpu(hwspec->regioncode) & 0xFF; for (i = 0; i < MRVDRV_MAX_REGION_CODE; i++) { /* use the region code to search for the index */ - if (adapter->regioncode == lbs_region_code_to_index[i]) { + if (priv->regioncode == lbs_region_code_to_index[i]) { break; } } /* if it's unidentified region code, use the default (USA) */ if (i >= MRVDRV_MAX_REGION_CODE) { - adapter->regioncode = 0x10; + priv->regioncode = 0x10; lbs_pr_info("unidentified region code; using the default (USA)\n"); } - if (adapter->current_addr[0] == 0xff) - memmove(adapter->current_addr, hwspec->permanentaddr, ETH_ALEN); + if (priv->current_addr[0] == 0xff) + memmove(priv->current_addr, hwspec->permanentaddr, ETH_ALEN); - memcpy(priv->dev->dev_addr, adapter->current_addr, ETH_ALEN); + memcpy(priv->dev->dev_addr, priv->current_addr, ETH_ALEN); if (priv->mesh_dev) - memcpy(priv->mesh_dev->dev_addr, adapter->current_addr, ETH_ALEN); + memcpy(priv->mesh_dev->dev_addr, priv->current_addr, ETH_ALEN); - if (lbs_set_regiontable(priv, adapter->regioncode, 0)) { + if (lbs_set_regiontable(priv, priv->regioncode, 0)) { ret = -1; goto done; } @@ -215,7 +212,6 @@ static int lbs_ret_802_11_sleep_params(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_sleep_params *sp = &resp->params.sleep_params; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -224,12 +220,12 @@ static int lbs_ret_802_11_sleep_params(struct lbs_private *priv, le16_to_cpu(sp->offset), le16_to_cpu(sp->stabletime), sp->calcontrol, sp->externalsleepclk); - adapter->sp.sp_error = le16_to_cpu(sp->error); - adapter->sp.sp_offset = le16_to_cpu(sp->offset); - adapter->sp.sp_stabletime = le16_to_cpu(sp->stabletime); - adapter->sp.sp_calcontrol = sp->calcontrol; - adapter->sp.sp_extsleepclk = sp->externalsleepclk; - adapter->sp.sp_reserved = le16_to_cpu(sp->reserved); + priv->sp.sp_error = le16_to_cpu(sp->error); + priv->sp.sp_offset = le16_to_cpu(sp->offset); + priv->sp.sp_stabletime = le16_to_cpu(sp->stabletime); + priv->sp.sp_calcontrol = sp->calcontrol; + priv->sp.sp_extsleepclk = sp->externalsleepclk; + priv->sp.sp_reserved = le16_to_cpu(sp->reserved); lbs_deb_enter(LBS_DEB_CMD); return 0; @@ -239,13 +235,12 @@ static int lbs_ret_802_11_stat(struct lbs_private *priv, struct cmd_ds_command *resp) { lbs_deb_enter(LBS_DEB_CMD); -/* currently adapter->wlan802_11Stat is unused +/* currently priv->wlan802_11Stat is unused struct cmd_ds_802_11_get_stat *p11Stat = &resp->params.gstat; - struct lbs_adapter *adapter = priv->adapter; // TODO Convert it to Big endian befor copy - memcpy(&adapter->wlan802_11Stat, + memcpy(&priv->wlan802_11Stat, p11Stat, sizeof(struct cmd_ds_802_11_get_stat)); */ lbs_deb_leave(LBS_DEB_CMD); @@ -268,22 +263,22 @@ static int lbs_ret_802_11_snmp_mib(struct lbs_private *priv, if (querytype == CMD_ACT_GET) { switch (oid) { case FRAGTHRESH_I: - priv->adapter->fragthsd = + priv->fragthsd = le16_to_cpu(*((__le16 *)(smib->value))); lbs_deb_cmd("SNMP_RESP: frag threshold %u\n", - priv->adapter->fragthsd); + priv->fragthsd); break; case RTSTHRESH_I: - priv->adapter->rtsthsd = + priv->rtsthsd = le16_to_cpu(*((__le16 *)(smib->value))); lbs_deb_cmd("SNMP_RESP: rts threshold %u\n", - priv->adapter->rtsthsd); + priv->rtsthsd); break; case SHORT_RETRYLIM_I: - priv->adapter->txretrycount = + priv->txretrycount = le16_to_cpu(*((__le16 *)(smib->value))); lbs_deb_cmd("SNMP_RESP: tx retry count %u\n", - priv->adapter->rtsthsd); + priv->rtsthsd); break; default: break; @@ -299,7 +294,6 @@ static int lbs_ret_802_11_key_material(struct lbs_private *priv, { struct cmd_ds_802_11_key_material *pkeymaterial = &resp->params.keymaterial; - struct lbs_adapter *adapter = priv->adapter; u16 action = le16_to_cpu(pkeymaterial->action); lbs_deb_enter(LBS_DEB_CMD); @@ -327,9 +321,9 @@ static int lbs_ret_802_11_key_material(struct lbs_private *priv, break; if (key_flags & KEY_INFO_WPA_UNICAST) - pkey = &adapter->wpa_unicast_key; + pkey = &priv->wpa_unicast_key; else if (key_flags & KEY_INFO_WPA_MCAST) - pkey = &adapter->wpa_mcast_key; + pkey = &priv->wpa_mcast_key; else break; @@ -354,11 +348,10 @@ static int lbs_ret_802_11_mac_address(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_mac_address *macadd = &resp->params.macadd; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); - memcpy(adapter->current_addr, macadd->macadd, ETH_ALEN); + memcpy(priv->current_addr, macadd->macadd, ETH_ALEN); lbs_deb_enter(LBS_DEB_CMD); return 0; @@ -368,13 +361,12 @@ static int lbs_ret_802_11_rf_tx_power(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_rf_tx_power *rtp = &resp->params.txp; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); - adapter->txpowerlevel = le16_to_cpu(rtp->currentlevel); + priv->txpowerlevel = le16_to_cpu(rtp->currentlevel); - lbs_deb_cmd("TX power currently %d\n", adapter->txpowerlevel); + lbs_deb_cmd("TX power currently %d\n", priv->txpowerlevel); lbs_deb_leave(LBS_DEB_CMD); return 0; @@ -384,13 +376,12 @@ static int lbs_ret_802_11_rate_adapt_rateset(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_rate_adapt_rateset *rates = &resp->params.rateset; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); if (rates->action == CMD_ACT_GET) { - adapter->enablehwauto = le16_to_cpu(rates->enablehwauto); - adapter->ratebitmap = le16_to_cpu(rates->bitmap); + priv->enablehwauto = le16_to_cpu(rates->enablehwauto); + priv->ratebitmap = le16_to_cpu(rates->bitmap); } lbs_deb_leave(LBS_DEB_CMD); @@ -401,7 +392,6 @@ static int lbs_ret_802_11_data_rate(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_data_rate *pdatarate = &resp->params.drate; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); @@ -411,8 +401,8 @@ static int lbs_ret_802_11_data_rate(struct lbs_private *priv, /* FIXME: get actual rates FW can do if this command actually returns * all data rates supported. */ - adapter->cur_rate = lbs_fw_index_to_data_rate(pdatarate->rates[0]); - lbs_deb_cmd("DATA_RATE: current rate 0x%02x\n", adapter->cur_rate); + priv->cur_rate = lbs_fw_index_to_data_rate(pdatarate->rates[0]); + lbs_deb_cmd("DATA_RATE: current rate 0x%02x\n", priv->cur_rate); lbs_deb_leave(LBS_DEB_CMD); return 0; @@ -422,19 +412,18 @@ static int lbs_ret_802_11_rf_channel(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_rf_channel *rfchannel = &resp->params.rfchannel; - struct lbs_adapter *adapter = priv->adapter; u16 action = le16_to_cpu(rfchannel->action); u16 newchannel = le16_to_cpu(rfchannel->currentchannel); lbs_deb_enter(LBS_DEB_CMD); if (action == CMD_OPT_802_11_RF_CHANNEL_GET - && adapter->curbssparams.channel != newchannel) { + && priv->curbssparams.channel != newchannel) { lbs_deb_cmd("channel switch from %d to %d\n", - adapter->curbssparams.channel, newchannel); + priv->curbssparams.channel, newchannel); /* Update the channel again */ - adapter->curbssparams.channel = newchannel; + priv->curbssparams.channel = newchannel; } lbs_deb_enter(LBS_DEB_CMD); @@ -445,28 +434,27 @@ static int lbs_ret_802_11_rssi(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_rssi_rsp *rssirsp = &resp->params.rssirsp; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); /* store the non average value */ - adapter->SNR[TYPE_BEACON][TYPE_NOAVG] = le16_to_cpu(rssirsp->SNR); - adapter->NF[TYPE_BEACON][TYPE_NOAVG] = le16_to_cpu(rssirsp->noisefloor); + priv->SNR[TYPE_BEACON][TYPE_NOAVG] = le16_to_cpu(rssirsp->SNR); + priv->NF[TYPE_BEACON][TYPE_NOAVG] = le16_to_cpu(rssirsp->noisefloor); - adapter->SNR[TYPE_BEACON][TYPE_AVG] = le16_to_cpu(rssirsp->avgSNR); - adapter->NF[TYPE_BEACON][TYPE_AVG] = le16_to_cpu(rssirsp->avgnoisefloor); + priv->SNR[TYPE_BEACON][TYPE_AVG] = le16_to_cpu(rssirsp->avgSNR); + priv->NF[TYPE_BEACON][TYPE_AVG] = le16_to_cpu(rssirsp->avgnoisefloor); - adapter->RSSI[TYPE_BEACON][TYPE_NOAVG] = - CAL_RSSI(adapter->SNR[TYPE_BEACON][TYPE_NOAVG], - adapter->NF[TYPE_BEACON][TYPE_NOAVG]); + priv->RSSI[TYPE_BEACON][TYPE_NOAVG] = + CAL_RSSI(priv->SNR[TYPE_BEACON][TYPE_NOAVG], + priv->NF[TYPE_BEACON][TYPE_NOAVG]); - adapter->RSSI[TYPE_BEACON][TYPE_AVG] = - CAL_RSSI(adapter->SNR[TYPE_BEACON][TYPE_AVG] / AVG_SCALE, - adapter->NF[TYPE_BEACON][TYPE_AVG] / AVG_SCALE); + priv->RSSI[TYPE_BEACON][TYPE_AVG] = + CAL_RSSI(priv->SNR[TYPE_BEACON][TYPE_AVG] / AVG_SCALE, + priv->NF[TYPE_BEACON][TYPE_AVG] / AVG_SCALE); lbs_deb_cmd("RSSI: beacon %d, avg %d\n", - adapter->RSSI[TYPE_BEACON][TYPE_NOAVG], - adapter->RSSI[TYPE_BEACON][TYPE_AVG]); + priv->RSSI[TYPE_BEACON][TYPE_NOAVG], + priv->RSSI[TYPE_BEACON][TYPE_AVG]); lbs_deb_leave(LBS_DEB_CMD); return 0; @@ -475,9 +463,8 @@ static int lbs_ret_802_11_rssi(struct lbs_private *priv, static int lbs_ret_802_11_eeprom_access(struct lbs_private *priv, struct cmd_ds_command *resp) { - struct lbs_adapter *adapter = priv->adapter; struct lbs_ioctl_regrdwr *pbuf; - pbuf = (struct lbs_ioctl_regrdwr *) adapter->prdeeprom; + pbuf = (struct lbs_ioctl_regrdwr *) priv->prdeeprom; lbs_deb_enter_args(LBS_DEB_CMD, "len %d", le16_to_cpu(resp->params.rdeeprom.bytecount)); @@ -502,12 +489,11 @@ static int lbs_ret_get_log(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_get_log *logmessage = &resp->params.glog; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); /* Stored little-endian */ - memcpy(&adapter->logmsg, logmessage, sizeof(struct cmd_ds_802_11_get_log)); + memcpy(&priv->logmsg, logmessage, sizeof(struct cmd_ds_802_11_get_log)); lbs_deb_leave(LBS_DEB_CMD); return 0; @@ -517,8 +503,7 @@ static int lbs_ret_802_11_enable_rsn(struct lbs_private *priv, struct cmd_ds_command *resp) { struct cmd_ds_802_11_enable_rsn *enable_rsn = &resp->params.enbrsn; - struct lbs_adapter *adapter = priv->adapter; - u32 * pdata_buf = adapter->cur_cmd->pdata_buf; + u32 * pdata_buf = priv->cur_cmd->pdata_buf; lbs_deb_enter(LBS_DEB_CMD); @@ -536,13 +521,12 @@ static int lbs_ret_802_11_bcn_ctrl(struct lbs_private * priv, { struct cmd_ds_802_11_beacon_control *bcn_ctrl = &resp->params.bcn_ctrl; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_CMD); if (bcn_ctrl->action == CMD_ACT_GET) { - adapter->beacon_enable = (u8) le16_to_cpu(bcn_ctrl->beacon_enable); - adapter->beacon_period = le16_to_cpu(bcn_ctrl->beacon_period); + priv->beacon_enable = (u8) le16_to_cpu(bcn_ctrl->beacon_enable); + priv->beacon_period = le16_to_cpu(bcn_ctrl->beacon_period); } lbs_deb_enter(LBS_DEB_CMD); @@ -552,11 +536,10 @@ static int lbs_ret_802_11_bcn_ctrl(struct lbs_private * priv, static int lbs_ret_802_11_subscribe_event(struct lbs_private *priv, struct cmd_ds_command *resp) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_subscribe_event *cmd_event = &resp->params.subscribe_event; struct cmd_ds_802_11_subscribe_event *dst_event = - adapter->cur_cmd->pdata_buf; + priv->cur_cmd->pdata_buf; lbs_deb_enter(LBS_DEB_CMD); @@ -575,7 +558,6 @@ static inline int handle_cmd_response(u16 respcmd, { int ret = 0; unsigned long flags; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_HOST); @@ -628,10 +610,10 @@ static inline int handle_cmd_response(u16 respcmd, case CMD_RET(CMD_802_11_SET_AFC): case CMD_RET(CMD_802_11_GET_AFC): - spin_lock_irqsave(&adapter->driver_lock, flags); - memmove(adapter->cur_cmd->pdata_buf, &resp->params.afc, + spin_lock_irqsave(&priv->driver_lock, flags); + memmove(priv->cur_cmd->pdata_buf, &resp->params.afc, sizeof(struct cmd_ds_802_11_afc)); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); break; @@ -686,59 +668,59 @@ static inline int handle_cmd_response(u16 respcmd, ret = lbs_ret_802_11_sleep_params(priv, resp); break; case CMD_RET(CMD_802_11_INACTIVITY_TIMEOUT): - spin_lock_irqsave(&adapter->driver_lock, flags); - *((u16 *) adapter->cur_cmd->pdata_buf) = + spin_lock_irqsave(&priv->driver_lock, flags); + *((u16 *) priv->cur_cmd->pdata_buf) = le16_to_cpu(resp->params.inactivity_timeout.timeout); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); break; case CMD_RET(CMD_802_11_TPC_CFG): - spin_lock_irqsave(&adapter->driver_lock, flags); - memmove(adapter->cur_cmd->pdata_buf, &resp->params.tpccfg, + spin_lock_irqsave(&priv->driver_lock, flags); + memmove(priv->cur_cmd->pdata_buf, &resp->params.tpccfg, sizeof(struct cmd_ds_802_11_tpc_cfg)); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); break; case CMD_RET(CMD_802_11_LED_GPIO_CTRL): - spin_lock_irqsave(&adapter->driver_lock, flags); - memmove(adapter->cur_cmd->pdata_buf, &resp->params.ledgpio, + spin_lock_irqsave(&priv->driver_lock, flags); + memmove(priv->cur_cmd->pdata_buf, &resp->params.ledgpio, sizeof(struct cmd_ds_802_11_led_ctrl)); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); break; case CMD_RET(CMD_802_11_SUBSCRIBE_EVENT): ret = lbs_ret_802_11_subscribe_event(priv, resp); break; case CMD_RET(CMD_802_11_PWR_CFG): - spin_lock_irqsave(&adapter->driver_lock, flags); - memmove(adapter->cur_cmd->pdata_buf, &resp->params.pwrcfg, + spin_lock_irqsave(&priv->driver_lock, flags); + memmove(priv->cur_cmd->pdata_buf, &resp->params.pwrcfg, sizeof(struct cmd_ds_802_11_pwr_cfg)); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); break; case CMD_RET(CMD_GET_TSF): - spin_lock_irqsave(&adapter->driver_lock, flags); - memcpy(priv->adapter->cur_cmd->pdata_buf, + spin_lock_irqsave(&priv->driver_lock, flags); + memcpy(priv->cur_cmd->pdata_buf, &resp->params.gettsf.tsfvalue, sizeof(u64)); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); break; case CMD_RET(CMD_BT_ACCESS): - spin_lock_irqsave(&adapter->driver_lock, flags); - if (adapter->cur_cmd->pdata_buf) - memcpy(adapter->cur_cmd->pdata_buf, + spin_lock_irqsave(&priv->driver_lock, flags); + if (priv->cur_cmd->pdata_buf) + memcpy(priv->cur_cmd->pdata_buf, &resp->params.bt.addr1, 2 * ETH_ALEN); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); break; case CMD_RET(CMD_FWT_ACCESS): - spin_lock_irqsave(&adapter->driver_lock, flags); - if (adapter->cur_cmd->pdata_buf) - memcpy(adapter->cur_cmd->pdata_buf, &resp->params.fwt, + spin_lock_irqsave(&priv->driver_lock, flags); + if (priv->cur_cmd->pdata_buf) + memcpy(priv->cur_cmd->pdata_buf, &resp->params.fwt, sizeof(resp->params.fwt)); - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); break; case CMD_RET(CMD_MESH_ACCESS): - if (adapter->cur_cmd->pdata_buf) - memcpy(adapter->cur_cmd->pdata_buf, &resp->params.mesh, + if (priv->cur_cmd->pdata_buf) + memcpy(priv->cur_cmd->pdata_buf, &resp->params.mesh, sizeof(resp->params.mesh)); break; case CMD_RET(CMD_802_11_BEACON_CTRL): @@ -758,7 +740,6 @@ int lbs_process_rx_command(struct lbs_private *priv) { u16 respcmd; struct cmd_ds_command *resp; - struct lbs_adapter *adapter = priv->adapter; int ret = 0; ulong flags; u16 result; @@ -766,39 +747,39 @@ int lbs_process_rx_command(struct lbs_private *priv) lbs_deb_enter(LBS_DEB_HOST); /* Now we got response from FW, cancel the command timer */ - del_timer(&adapter->command_timer); + del_timer(&priv->command_timer); - mutex_lock(&adapter->lock); - spin_lock_irqsave(&adapter->driver_lock, flags); + mutex_lock(&priv->lock); + spin_lock_irqsave(&priv->driver_lock, flags); - if (!adapter->cur_cmd) { + if (!priv->cur_cmd) { lbs_deb_host("CMD_RESP: cur_cmd is NULL\n"); ret = -1; - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); goto done; } - resp = (struct cmd_ds_command *)(adapter->cur_cmd->bufvirtualaddr); + resp = (struct cmd_ds_command *)(priv->cur_cmd->bufvirtualaddr); respcmd = le16_to_cpu(resp->command); result = le16_to_cpu(resp->result); lbs_deb_host("CMD_RESP: response 0x%04x, size %d, jiffies %lu\n", respcmd, priv->upld_len, jiffies); - lbs_deb_hex(LBS_DEB_HOST, "CMD_RESP", adapter->cur_cmd->bufvirtualaddr, + lbs_deb_hex(LBS_DEB_HOST, "CMD_RESP", priv->cur_cmd->bufvirtualaddr, priv->upld_len); if (!(respcmd & 0x8000)) { lbs_deb_host("invalid response!\n"); - adapter->cur_cmd_retcode = -1; - __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->cur_cmd = NULL; - spin_unlock_irqrestore(&adapter->driver_lock, flags); + priv->cur_cmd_retcode = -1; + __lbs_cleanup_and_insert_cmd(priv, priv->cur_cmd); + priv->cur_cmd = NULL; + spin_unlock_irqrestore(&priv->driver_lock, flags); ret = -1; goto done; } /* Store the response code to cur_cmd_retcode. */ - adapter->cur_cmd_retcode = result; + priv->cur_cmd_retcode = result; if (respcmd == CMD_RET(CMD_802_11_PS_MODE)) { struct cmd_ds_802_11_ps_mode *psmode = &resp->params.psmode; @@ -816,15 +797,15 @@ int lbs_process_rx_command(struct lbs_private *priv) * ad-hoc mode. It takes place in * lbs_execute_next_command(). */ - if (adapter->mode == IW_MODE_ADHOC && + if (priv->mode == IW_MODE_ADHOC && action == CMD_SUBCMD_ENTER_PS) - adapter->psmode = LBS802_11POWERMODECAM; + priv->psmode = LBS802_11POWERMODECAM; } else if (action == CMD_SUBCMD_ENTER_PS) { - adapter->needtowakeup = 0; - adapter->psstate = PS_STATE_AWAKE; + priv->needtowakeup = 0; + priv->psstate = PS_STATE_AWAKE; lbs_deb_host("CMD_RESP: ENTER_PS command response\n"); - if (adapter->connect_status != LBS_CONNECTED) { + if (priv->connect_status != LBS_CONNECTED) { /* * When Deauth Event received before Enter_PS command * response, We need to wake up the firmware. @@ -832,23 +813,23 @@ int lbs_process_rx_command(struct lbs_private *priv) lbs_deb_host( "disconnected, invoking lbs_ps_wakeup\n"); - spin_unlock_irqrestore(&adapter->driver_lock, flags); - mutex_unlock(&adapter->lock); + spin_unlock_irqrestore(&priv->driver_lock, flags); + mutex_unlock(&priv->lock); lbs_ps_wakeup(priv, 0); - mutex_lock(&adapter->lock); - spin_lock_irqsave(&adapter->driver_lock, flags); + mutex_lock(&priv->lock); + spin_lock_irqsave(&priv->driver_lock, flags); } } else if (action == CMD_SUBCMD_EXIT_PS) { - adapter->needtowakeup = 0; - adapter->psstate = PS_STATE_FULL_POWER; + priv->needtowakeup = 0; + priv->psstate = PS_STATE_FULL_POWER; lbs_deb_host("CMD_RESP: EXIT_PS command response\n"); } else { lbs_deb_host("CMD_RESP: PS action 0x%X\n", action); } - __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->cur_cmd = NULL; - spin_unlock_irqrestore(&adapter->driver_lock, flags); + __lbs_cleanup_and_insert_cmd(priv, priv->cur_cmd); + priv->cur_cmd = NULL; + spin_unlock_irqrestore(&priv->driver_lock, flags); ret = 0; goto done; @@ -869,32 +850,32 @@ int lbs_process_rx_command(struct lbs_private *priv) } - __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->cur_cmd = NULL; - spin_unlock_irqrestore(&adapter->driver_lock, flags); + __lbs_cleanup_and_insert_cmd(priv, priv->cur_cmd); + priv->cur_cmd = NULL; + spin_unlock_irqrestore(&priv->driver_lock, flags); ret = -1; goto done; } - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); - if (adapter->cur_cmd && adapter->cur_cmd->callback) - ret = adapter->cur_cmd->callback(respcmd, resp, priv); + if (priv->cur_cmd && priv->cur_cmd->callback) + ret = priv->cur_cmd->callback(respcmd, resp, priv); else ret = handle_cmd_response(respcmd, resp, priv); - spin_lock_irqsave(&adapter->driver_lock, flags); + spin_lock_irqsave(&priv->driver_lock, flags); - if (adapter->cur_cmd) { + if (priv->cur_cmd) { /* Clean up and Put current command back to cmdfreeq */ - __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); - adapter->cur_cmd = NULL; + __lbs_cleanup_and_insert_cmd(priv, priv->cur_cmd); + priv->cur_cmd = NULL; } - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); done: - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_leave_args(LBS_DEB_HOST, "ret %d", ret); return ret; } @@ -902,14 +883,13 @@ done: int lbs_process_event(struct lbs_private *priv) { int ret = 0; - struct lbs_adapter *adapter = priv->adapter; u32 eventcause; lbs_deb_enter(LBS_DEB_CMD); - spin_lock_irq(&adapter->driver_lock); - eventcause = adapter->eventcause >> SBI_EVENT_CAUSE_SHIFT; - spin_unlock_irq(&adapter->driver_lock); + spin_lock_irq(&priv->driver_lock); + eventcause = priv->eventcause >> SBI_EVENT_CAUSE_SHIFT; + spin_unlock_irq(&priv->driver_lock); lbs_deb_cmd("event cause %d\n", eventcause); @@ -937,14 +917,14 @@ int lbs_process_event(struct lbs_private *priv) lbs_deb_cmd("EVENT: sleep\n"); /* handle unexpected PS SLEEP event */ - if (adapter->psstate == PS_STATE_FULL_POWER) { + if (priv->psstate == PS_STATE_FULL_POWER) { lbs_deb_cmd( "EVENT: in FULL POWER mode, ignoreing PS_SLEEP\n"); break; } - adapter->psstate = PS_STATE_PRE_SLEEP; + priv->psstate = PS_STATE_PRE_SLEEP; - lbs_ps_confirm_sleep(priv, (u16) adapter->psmode); + lbs_ps_confirm_sleep(priv, (u16) priv->psmode); break; @@ -952,19 +932,19 @@ int lbs_process_event(struct lbs_private *priv) lbs_deb_cmd("EVENT: awake\n"); /* handle unexpected PS AWAKE event */ - if (adapter->psstate == PS_STATE_FULL_POWER) { + if (priv->psstate == PS_STATE_FULL_POWER) { lbs_deb_cmd( "EVENT: In FULL POWER mode - ignore PS AWAKE\n"); break; } - adapter->psstate = PS_STATE_AWAKE; + priv->psstate = PS_STATE_AWAKE; - if (adapter->needtowakeup) { + if (priv->needtowakeup) { /* * wait for the command processing to finish * before resuming sending - * adapter->needtowakeup will be set to FALSE + * priv->needtowakeup will be set to FALSE * in lbs_ps_wakeup() */ lbs_deb_cmd("waking up ...\n"); @@ -1012,12 +992,12 @@ int lbs_process_event(struct lbs_private *priv) break; } lbs_pr_info("EVENT: MESH_AUTO_STARTED\n"); - adapter->mesh_connect_status = LBS_CONNECTED; + priv->mesh_connect_status = LBS_CONNECTED; if (priv->mesh_open == 1) { netif_wake_queue(priv->mesh_dev); netif_carrier_on(priv->mesh_dev); } - adapter->mode = IW_MODE_ADHOC; + priv->mode = IW_MODE_ADHOC; schedule_work(&priv->sync_channel); break; @@ -1026,9 +1006,9 @@ int lbs_process_event(struct lbs_private *priv) break; } - spin_lock_irq(&adapter->driver_lock); - adapter->eventcause = 0; - spin_unlock_irq(&adapter->driver_lock); + spin_lock_irq(&priv->driver_lock); + priv->eventcause = 0; + spin_unlock_irq(&priv->driver_lock); lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret); return ret; diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c index 9a041e5b209..fe422b28a4f 100644 --- a/drivers/net/wireless/libertas/debugfs.c +++ b/drivers/net/wireless/libertas/debugfs.c @@ -45,9 +45,9 @@ static ssize_t lbs_dev_info(struct file *file, char __user *userbuf, ssize_t res; pos += snprintf(buf+pos, len-pos, "state = %s\n", - szStates[priv->adapter->connect_status]); + szStates[priv->connect_status]); pos += snprintf(buf+pos, len-pos, "region_code = %02x\n", - (u32) priv->adapter->regioncode); + (u32) priv->regioncode); res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); @@ -70,8 +70,8 @@ static ssize_t lbs_getscantable(struct file *file, char __user *userbuf, pos += snprintf(buf+pos, len-pos, "# | ch | rssi | bssid | cap | Qual | SSID \n"); - mutex_lock(&priv->adapter->lock); - list_for_each_entry (iter_bss, &priv->adapter->network_list, list) { + mutex_lock(&priv->lock); + list_for_each_entry (iter_bss, &priv->network_list, list) { u16 ibss = (iter_bss->capability & WLAN_CAPABILITY_IBSS); u16 privacy = (iter_bss->capability & WLAN_CAPABILITY_PRIVACY); u16 spectrum_mgmt = (iter_bss->capability & WLAN_CAPABILITY_SPECTRUM_MGMT); @@ -90,7 +90,7 @@ static ssize_t lbs_getscantable(struct file *file, char __user *userbuf, numscansdone++; } - mutex_unlock(&priv->adapter->lock); + mutex_unlock(&priv->lock); res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); @@ -118,12 +118,12 @@ static ssize_t lbs_sleepparams_write(struct file *file, res = -EFAULT; goto out_unlock; } - priv->adapter->sp.sp_error = p1; - priv->adapter->sp.sp_offset = p2; - priv->adapter->sp.sp_stabletime = p3; - priv->adapter->sp.sp_calcontrol = p4; - priv->adapter->sp.sp_extsleepclk = p5; - priv->adapter->sp.sp_reserved = p6; + priv->sp.sp_error = p1; + priv->sp.sp_offset = p2; + priv->sp.sp_stabletime = p3; + priv->sp.sp_calcontrol = p4; + priv->sp.sp_extsleepclk = p5; + priv->sp.sp_reserved = p6; res = lbs_prepare_and_send_command(priv, CMD_802_11_SLEEP_PARAMS, @@ -144,7 +144,6 @@ static ssize_t lbs_sleepparams_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct lbs_private *priv = file->private_data; - struct lbs_adapter *adapter = priv->adapter; ssize_t res; size_t pos = 0; unsigned long addr = get_zeroed_page(GFP_KERNEL); @@ -159,10 +158,10 @@ static ssize_t lbs_sleepparams_read(struct file *file, char __user *userbuf, goto out_unlock; } - pos += snprintf(buf, len, "%d %d %d %d %d %d\n", adapter->sp.sp_error, - adapter->sp.sp_offset, adapter->sp.sp_stabletime, - adapter->sp.sp_calcontrol, adapter->sp.sp_extsleepclk, - adapter->sp.sp_reserved); + pos += snprintf(buf, len, "%d %d %d %d %d %d\n", priv->sp.sp_error, + priv->sp.sp_offset, priv->sp.sp_stabletime, + priv->sp.sp_calcontrol, priv->sp.sp_extsleepclk, + priv->sp.sp_reserved); res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); @@ -321,11 +320,11 @@ static ssize_t lbs_setuserscan(struct file *file, lbs_parse_type(buf, count, scan_cfg); lbs_scan_networks(priv, scan_cfg, 1); - wait_event_interruptible(priv->adapter->cmd_pending, - priv->adapter->surpriseremoved || - (!priv->adapter->cur_cmd && list_empty(&priv->adapter->cmdpendingq))); + wait_event_interruptible(priv->cmd_pending, + priv->surpriseremoved || + (!priv->cur_cmd && list_empty(&priv->cmdpendingq))); - if (priv->adapter->surpriseremoved) + if (priv->surpriseremoved) goto out_scan_cfg; memset(&wrqu, 0x00, sizeof(union iwreq_data)); @@ -620,7 +619,6 @@ static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct lbs_private *priv = file->private_data; - struct lbs_adapter *adapter = priv->adapter; struct lbs_offset_value offval; ssize_t pos = 0; int ret; @@ -635,7 +633,7 @@ static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf, CMD_OPTION_WAITFORRSP, 0, &offval); mdelay(10); pos += snprintf(buf+pos, len-pos, "MAC[0x%x] = 0x%08x\n", - priv->mac_offset, adapter->offsetvalue.value); + priv->mac_offset, priv->offsetvalue.value); ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos); free_page(addr); @@ -703,7 +701,6 @@ static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct lbs_private *priv = file->private_data; - struct lbs_adapter *adapter = priv->adapter; struct lbs_offset_value offval; ssize_t pos = 0; int ret; @@ -718,7 +715,7 @@ static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf, CMD_OPTION_WAITFORRSP, 0, &offval); mdelay(10); pos += snprintf(buf+pos, len-pos, "BBP[0x%x] = 0x%08x\n", - priv->bbp_offset, adapter->offsetvalue.value); + priv->bbp_offset, priv->offsetvalue.value); ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos); free_page(addr); @@ -787,7 +784,6 @@ static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct lbs_private *priv = file->private_data; - struct lbs_adapter *adapter = priv->adapter; struct lbs_offset_value offval; ssize_t pos = 0; int ret; @@ -802,7 +798,7 @@ static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf, CMD_OPTION_WAITFORRSP, 0, &offval); mdelay(10); pos += snprintf(buf+pos, len-pos, "RF[0x%x] = 0x%08x\n", - priv->rf_offset, adapter->offsetvalue.value); + priv->rf_offset, priv->offsetvalue.value); ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos); free_page(addr); @@ -1009,8 +1005,8 @@ void lbs_debugfs_remove_one(struct lbs_private *priv) #ifdef PROC_DEBUG -#define item_size(n) (FIELD_SIZEOF(struct lbs_adapter, n)) -#define item_addr(n) (offsetof(struct lbs_adapter, n)) +#define item_size(n) (FIELD_SIZEOF(struct lbs_private, n)) +#define item_addr(n) (offsetof(struct lbs_private, n)) struct debug_data { @@ -1019,7 +1015,7 @@ struct debug_data { size_t addr; }; -/* To debug any member of struct lbs_adapter, simply add one line here. +/* To debug any member of struct lbs_private, simply add one line here. */ static struct debug_data items[] = { {"intcounter", item_size(intcounter), item_addr(intcounter)}, @@ -1158,7 +1154,7 @@ static void lbs_debug_init(struct lbs_private *priv, struct net_device *dev) return; for (i = 0; i < num_of_items; i++) - items[i].addr += (size_t) priv->adapter; + items[i].addr += (size_t) priv; priv->debugfs_debug = debugfs_create_file("debug", 0644, priv->debugfs_dir, &items[0], diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h index 1a8fdaa7375..e255b191574 100644 --- a/drivers/net/wireless/libertas/decl.h +++ b/drivers/net/wireless/libertas/decl.h @@ -12,7 +12,6 @@ /** Function Prototype Declaration */ struct lbs_private; -struct lbs_adapter; struct sk_buff; struct net_device; struct cmd_ctrl_node; @@ -32,7 +31,7 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, u16 cmd_action, u16 wait_option, u32 cmd_oid, void *pdata_buf); -void lbs_queue_cmd(struct lbs_adapter *adapter, +void lbs_queue_cmd(struct lbs_private *priv, struct cmd_ctrl_node *cmdnode, u8 addtail); @@ -43,7 +42,7 @@ void lbs_interrupt(struct net_device *); int lbs_set_radio_control(struct lbs_private *priv); u32 lbs_fw_index_to_data_rate(u8 index); u8 lbs_data_rate_to_fw_index(u32 rate); -void lbs_get_fwversion(struct lbs_adapter *adapter, +void lbs_get_fwversion(struct lbs_private *priv, char *fwversion, int maxlen); @@ -66,7 +65,7 @@ void lbs_ps_wakeup(struct lbs_private *priv, int wait_option); void lbs_tx_runqueue(struct lbs_private *priv); struct chan_freq_power *lbs_find_cfp_by_band_and_channel( - struct lbs_adapter *adapter, + struct lbs_private *priv, u8 band, u16 channel); diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index eaa45d4bb9d..21b0d382096 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -1,7 +1,7 @@ /** * This file contains definitions and data structures specific * to Marvell 802.11 NIC. It contains the Device Information - * structure struct lbs_adapter. + * structure struct lbs_private.. */ #ifndef _LBS_DEV_H_ #define _LBS_DEV_H_ @@ -109,7 +109,6 @@ struct lbs_private { char name[DEV_NAME_LEN]; void *card; - struct lbs_adapter *adapter; struct net_device *dev; struct net_device_stats stats; @@ -156,54 +155,10 @@ struct lbs_private { int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb); int (*hw_get_int_status) (struct lbs_private *priv, u8 *); int (*hw_read_event_cause) (struct lbs_private *); -}; - -/** Association request - * - * Encapsulates all the options that describe a specific assocation request - * or configuration of the wireless card's radio, mode, and security settings. - */ -struct assoc_request { -#define ASSOC_FLAG_SSID 1 -#define ASSOC_FLAG_CHANNEL 2 -#define ASSOC_FLAG_BAND 3 -#define ASSOC_FLAG_MODE 4 -#define ASSOC_FLAG_BSSID 5 -#define ASSOC_FLAG_WEP_KEYS 6 -#define ASSOC_FLAG_WEP_TX_KEYIDX 7 -#define ASSOC_FLAG_WPA_MCAST_KEY 8 -#define ASSOC_FLAG_WPA_UCAST_KEY 9 -#define ASSOC_FLAG_SECINFO 10 -#define ASSOC_FLAG_WPA_IE 11 - unsigned long flags; - - u8 ssid[IW_ESSID_MAX_SIZE + 1]; - u8 ssid_len; - u8 channel; - u8 band; - u8 mode; - u8 bssid[ETH_ALEN]; - - /** WEP keys */ - struct enc_key wep_keys[4]; - u16 wep_tx_keyidx; - - /** WPA keys */ - struct enc_key wpa_mcast_key; - struct enc_key wpa_unicast_key; - - struct lbs_802_11_security secinfo; - /** WPA Information Elements*/ - u8 wpa_ie[MAX_WPA_IE_LEN]; - u8 wpa_ie_len; - - /* BSS to associate with for infrastructure of Ad-Hoc join */ - struct bss_descriptor bss; -}; + /* was struct lbs_adapter from here... */ -/** Wlan adapter data structure*/ -struct lbs_adapter { + /** Wlan adapter data structure*/ /** STATUS variables */ u8 fwreleasenumber[4]; u32 fwcapinfo; @@ -229,7 +184,7 @@ struct lbs_adapter { struct list_head cmdpendingq; wait_queue_head_t cmd_pending; - /* command related variables protected by adapter->driver_lock */ + /* command related variables protected by priv->driver_lock */ /** Async and Sync Event variables */ u32 intcounter; @@ -366,4 +321,48 @@ struct lbs_adapter { u8 fw_ready; }; +/** Association request + * + * Encapsulates all the options that describe a specific assocation request + * or configuration of the wireless card's radio, mode, and security settings. + */ +struct assoc_request { +#define ASSOC_FLAG_SSID 1 +#define ASSOC_FLAG_CHANNEL 2 +#define ASSOC_FLAG_BAND 3 +#define ASSOC_FLAG_MODE 4 +#define ASSOC_FLAG_BSSID 5 +#define ASSOC_FLAG_WEP_KEYS 6 +#define ASSOC_FLAG_WEP_TX_KEYIDX 7 +#define ASSOC_FLAG_WPA_MCAST_KEY 8 +#define ASSOC_FLAG_WPA_UCAST_KEY 9 +#define ASSOC_FLAG_SECINFO 10 +#define ASSOC_FLAG_WPA_IE 11 + unsigned long flags; + + u8 ssid[IW_ESSID_MAX_SIZE + 1]; + u8 ssid_len; + u8 channel; + u8 band; + u8 mode; + u8 bssid[ETH_ALEN]; + + /** WEP keys */ + struct enc_key wep_keys[4]; + u16 wep_tx_keyidx; + + /** WPA keys */ + struct enc_key wpa_mcast_key; + struct enc_key wpa_unicast_key; + + struct lbs_802_11_security secinfo; + + /** WPA Information Elements*/ + u8 wpa_ie[MAX_WPA_IE_LEN]; + u8 wpa_ie_len; + + /* BSS to associate with for infrastructure of Ad-Hoc join */ + struct bss_descriptor bss; +}; + #endif diff --git a/drivers/net/wireless/libertas/ethtool.c b/drivers/net/wireless/libertas/ethtool.c index f32fb00129e..a54b4f406af 100644 --- a/drivers/net/wireless/libertas/ethtool.c +++ b/drivers/net/wireless/libertas/ethtool.c @@ -25,7 +25,7 @@ static void lbs_ethtool_get_drvinfo(struct net_device *dev, struct lbs_private *priv = (struct lbs_private *) dev->priv; char fwver[32]; - lbs_get_fwversion(priv->adapter, fwver, sizeof(fwver) - 1); + lbs_get_fwversion(priv, fwver, sizeof(fwver) - 1); strcpy(info->driver, "libertas"); strcpy(info->version, lbs_driver_version); @@ -46,7 +46,6 @@ static int lbs_ethtool_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 * bytes) { struct lbs_private *priv = (struct lbs_private *) dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct lbs_ioctl_regrdwr regctrl; char *ptr; int ret; @@ -60,10 +59,10 @@ static int lbs_ethtool_get_eeprom(struct net_device *dev, // mutex_lock(&priv->mutex); - adapter->prdeeprom = kmalloc(eeprom->len+sizeof(regctrl), GFP_KERNEL); - if (!adapter->prdeeprom) + priv->prdeeprom = kmalloc(eeprom->len+sizeof(regctrl), GFP_KERNEL); + if (!priv->prdeeprom) return -ENOMEM; - memcpy(adapter->prdeeprom, ®ctrl, sizeof(regctrl)); + memcpy(priv->prdeeprom, ®ctrl, sizeof(regctrl)); /* +14 is for action, offset, and NOB in * response */ @@ -77,14 +76,14 @@ static int lbs_ethtool_get_eeprom(struct net_device *dev, ®ctrl); if (ret) { - if (adapter->prdeeprom) - kfree(adapter->prdeeprom); + if (priv->prdeeprom) + kfree(priv->prdeeprom); goto done; } mdelay(10); - ptr = (char *)adapter->prdeeprom; + ptr = (char *)priv->prdeeprom; /* skip the command header, but include the "value" u32 variable */ ptr = ptr + sizeof(struct lbs_ioctl_regrdwr) - 4; @@ -94,8 +93,8 @@ static int lbs_ethtool_get_eeprom(struct net_device *dev, */ memcpy(bytes, ptr, eeprom->len); - if (adapter->prdeeprom) - kfree(adapter->prdeeprom); + if (priv->prdeeprom) + kfree(priv->prdeeprom); // mutex_unlock(&priv->mutex); ret = 0; diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c index 8508260a286..49a01780dd0 100644 --- a/drivers/net/wireless/libertas/if_cs.c +++ b/drivers/net/wireless/libertas/if_cs.c @@ -255,7 +255,7 @@ static irqreturn_t if_cs_interrupt(int irq, void *data) } else if (int_cause == 0xffff) { /* Read in junk, the card has probably been removed */ - card->priv->adapter->surpriseremoved = 1; + card->priv->surpriseremoved = 1; } else { if (int_cause & IF_CS_H_IC_TX_OVER) @@ -644,7 +644,6 @@ static int if_cs_host_to_card(struct lbs_private *priv, static int if_cs_get_int_status(struct lbs_private *priv, u8 *ireg) { struct if_cs_card *card = (struct if_cs_card *)priv->card; - /* struct lbs_adapter *adapter = priv->adapter; */ int ret = 0; u16 int_cause; u8 *cmdbuf; @@ -652,7 +651,7 @@ static int if_cs_get_int_status(struct lbs_private *priv, u8 *ireg) lbs_deb_enter(LBS_DEB_CS); - if (priv->adapter->surpriseremoved) + if (priv->surpriseremoved) goto out; int_cause = if_cs_read16(card, IF_CS_C_INT_CAUSE) & IF_CS_C_IC_MASK; @@ -678,22 +677,22 @@ sbi_get_int_status_exit: /* Card has a command result for us */ if (*ireg & IF_CS_C_S_CMD_UPLD_RDY) { - spin_lock(&priv->adapter->driver_lock); - if (!priv->adapter->cur_cmd) { + spin_lock(&priv->driver_lock); + if (!priv->cur_cmd) { cmdbuf = priv->upld_buf; - priv->adapter->hisregcpy &= ~IF_CS_C_S_RX_UPLD_RDY; + priv->hisregcpy &= ~IF_CS_C_S_RX_UPLD_RDY; } else { - cmdbuf = priv->adapter->cur_cmd->bufvirtualaddr; + cmdbuf = priv->cur_cmd->bufvirtualaddr; } ret = if_cs_receive_cmdres(priv, cmdbuf, &priv->upld_len); - spin_unlock(&priv->adapter->driver_lock); + spin_unlock(&priv->driver_lock); if (ret < 0) lbs_pr_err("could not receive cmd from card\n"); } out: - lbs_deb_leave_args(LBS_DEB_CS, "ret %d, ireg 0x%x, hisregcpy 0x%x", ret, *ireg, priv->adapter->hisregcpy); + lbs_deb_leave_args(LBS_DEB_CS, "ret %d, ireg 0x%x, hisregcpy 0x%x", ret, *ireg, priv->hisregcpy); return ret; } @@ -702,7 +701,7 @@ static int if_cs_read_event_cause(struct lbs_private *priv) { lbs_deb_enter(LBS_DEB_CS); - priv->adapter->eventcause = (if_cs_read16(priv->card, IF_CS_C_STATUS) & IF_CS_C_S_STATUS_MASK) >> 5; + priv->eventcause = (if_cs_read16(priv->card, IF_CS_C_STATUS) & IF_CS_C_S_STATUS_MASK) >> 5; if_cs_write16(priv->card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_HOST_EVENT); return 0; @@ -869,7 +868,7 @@ static int if_cs_probe(struct pcmcia_device *p_dev) priv->hw_get_int_status = if_cs_get_int_status; priv->hw_read_event_cause = if_cs_read_event_cause; - priv->adapter->fw_ready = 1; + priv->fw_ready = 1; /* Now actually get the IRQ */ ret = request_irq(p_dev->irq.AssignedIRQ, if_cs_interrupt, diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index 181ebf0fc0d..24239609367 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c @@ -134,9 +134,9 @@ static int if_sdio_handle_cmd(struct if_sdio_card *card, lbs_deb_enter(LBS_DEB_SDIO); - spin_lock_irqsave(&card->priv->adapter->driver_lock, flags); + spin_lock_irqsave(&card->priv->driver_lock, flags); - if (!card->priv->adapter->cur_cmd) { + if (!card->priv->cur_cmd) { lbs_deb_sdio("discarding spurious response\n"); ret = 0; goto out; @@ -149,7 +149,7 @@ static int if_sdio_handle_cmd(struct if_sdio_card *card, goto out; } - memcpy(card->priv->adapter->cur_cmd->bufvirtualaddr, buffer, size); + memcpy(card->priv->cur_cmd->bufvirtualaddr, buffer, size); card->priv->upld_len = size; card->int_cause |= MRVDRV_CMD_UPLD_RDY; @@ -159,7 +159,7 @@ static int if_sdio_handle_cmd(struct if_sdio_card *card, ret = 0; out: - spin_unlock_irqrestore(&card->priv->adapter->driver_lock, flags); + spin_unlock_irqrestore(&card->priv->driver_lock, flags); lbs_deb_leave_args(LBS_DEB_SDIO, "ret %d", ret); @@ -231,14 +231,14 @@ static int if_sdio_handle_event(struct if_sdio_card *card, event <<= SBI_EVENT_CAUSE_SHIFT; } - spin_lock_irqsave(&card->priv->adapter->driver_lock, flags); + spin_lock_irqsave(&card->priv->driver_lock, flags); card->event = event; card->int_cause |= MRVDRV_CARDEVENT; lbs_interrupt(card->priv->dev); - spin_unlock_irqrestore(&card->priv->adapter->driver_lock, flags); + spin_unlock_irqrestore(&card->priv->driver_lock, flags); ret = 0; @@ -800,7 +800,7 @@ static int if_sdio_read_event_cause(struct lbs_private *priv) card = priv->card; - priv->adapter->eventcause = card->event; + priv->eventcause = card->event; lbs_deb_leave(LBS_DEB_SDIO); @@ -962,7 +962,7 @@ static int if_sdio_probe(struct sdio_func *func, priv->hw_get_int_status = if_sdio_get_int_status; priv->hw_read_event_cause = if_sdio_read_event_cause; - priv->adapter->fw_ready = 1; + priv->fw_ready = 1; /* * Enable interrupts now that everything is set up @@ -985,7 +985,7 @@ out: err_activate_card: flush_scheduled_work(); free_netdev(priv->dev); - kfree(priv->adapter); + kfree(priv); reclaim: sdio_claim_host(func); release_int: @@ -1015,7 +1015,7 @@ static void if_sdio_remove(struct sdio_func *func) card = sdio_get_drvdata(func); - card->priv->adapter->surpriseremoved = 1; + card->priv->surpriseremoved = 1; lbs_deb_sdio("call remove card\n"); lbs_stop_card(card->priv); diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 7c4bd8d982a..87bed4a1718 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -229,7 +229,7 @@ static int if_usb_probe(struct usb_interface *intf, /* Delay 200 ms to waiting for the FW ready */ if_usb_submit_rx_urb(cardp); msleep_interruptible(200); - priv->adapter->fw_ready = 1; + priv->fw_ready = 1; if (lbs_start_card(priv)) goto err_start_card; @@ -270,9 +270,8 @@ static void if_usb_disconnect(struct usb_interface *intf) cardp->surprise_removed = 1; if (priv) { - struct lbs_adapter *adapter = priv->adapter; - adapter->surpriseremoved = 1; + priv->surpriseremoved = 1; lbs_stop_card(priv); lbs_remove_mesh(priv); lbs_remove_card(priv); @@ -609,14 +608,14 @@ static inline void process_cmdrequest(int recvlength, u8 *recvbuff, if (!in_interrupt()) BUG(); - spin_lock(&priv->adapter->driver_lock); + spin_lock(&priv->driver_lock); /* take care of cur_cmd = NULL case by reading the * data to clear the interrupt */ - if (!priv->adapter->cur_cmd) { + if (!priv->cur_cmd) { cmdbuf = priv->upld_buf; - priv->adapter->hisregcpy &= ~MRVDRV_CMD_UPLD_RDY; + priv->hisregcpy &= ~MRVDRV_CMD_UPLD_RDY; } else - cmdbuf = priv->adapter->cur_cmd->bufvirtualaddr; + cmdbuf = priv->cur_cmd->bufvirtualaddr; cardp->usb_int_cause |= MRVDRV_CMD_UPLD_RDY; priv->upld_len = (recvlength - MESSAGE_HEADER_LEN); @@ -625,7 +624,7 @@ static inline void process_cmdrequest(int recvlength, u8 *recvbuff, kfree_skb(skb); lbs_interrupt(priv->dev); - spin_unlock(&priv->adapter->driver_lock); + spin_unlock(&priv->driver_lock); lbs_deb_usbd(&cardp->udev->dev, "Wake up main thread to handle cmd response\n"); @@ -685,20 +684,20 @@ static void if_usb_receive(struct urb *urb) case CMD_TYPE_INDICATION: /* Event cause handling */ - spin_lock(&priv->adapter->driver_lock); + spin_lock(&priv->driver_lock); cardp->usb_event_cause = le32_to_cpu(*(__le32 *) (recvbuff + MESSAGE_HEADER_LEN)); lbs_deb_usbd(&cardp->udev->dev,"**EVENT** 0x%X\n", cardp->usb_event_cause); if (cardp->usb_event_cause & 0xffff0000) { lbs_send_tx_feedback(priv); - spin_unlock(&priv->adapter->driver_lock); + spin_unlock(&priv->driver_lock); break; } cardp->usb_event_cause <<= 3; cardp->usb_int_cause |= MRVDRV_CARDEVENT; kfree_skb(skb); lbs_interrupt(priv->dev); - spin_unlock(&priv->adapter->driver_lock); + spin_unlock(&priv->driver_lock); goto rx_exit; default: lbs_deb_usbd(&cardp->udev->dev, "Unknown command type 0x%X\n", @@ -750,7 +749,7 @@ static int if_usb_host_to_card(struct lbs_private *priv, nb + MESSAGE_HEADER_LEN); } -/* called with adapter->driver_lock held */ +/* called with priv->driver_lock held */ static int if_usb_get_int_status(struct lbs_private *priv, u8 *ireg) { struct usb_card_rec *cardp = priv->card; @@ -767,7 +766,7 @@ static int if_usb_read_event_cause(struct lbs_private *priv) { struct usb_card_rec *cardp = priv->card; - priv->adapter->eventcause = cardp->usb_event_cause; + priv->eventcause = cardp->usb_event_cause; /* Re-submit rx urb here to avoid event lost issue */ if_usb_submit_rx_urb(cardp); return 0; @@ -942,7 +941,7 @@ static int if_usb_suspend(struct usb_interface *intf, pm_message_t message) lbs_deb_enter(LBS_DEB_USB); - if (priv->adapter->psstate != PS_STATE_FULL_POWER) + if (priv->psstate != PS_STATE_FULL_POWER) return -1; if (priv->mesh_dev && !priv->mesh_autostart_enabled) { diff --git a/drivers/net/wireless/libertas/join.c b/drivers/net/wireless/libertas/join.c index 1550e6afb05..14425d9a198 100644 --- a/drivers/net/wireless/libertas/join.c +++ b/drivers/net/wireless/libertas/join.c @@ -30,13 +30,13 @@ * NOTE: Setting the MSB of the basic rates need to be taken * care, either before or after calling this function * - * @param adapter A pointer to struct lbs_adapter structure + * @param priv A pointer to struct lbs_private structure * @param rate1 the buffer which keeps input and output * @param rate1_size the size of rate1 buffer; new size of buffer on return * * @return 0 or -1 */ -static int get_common_rates(struct lbs_adapter *adapter, +static int get_common_rates(struct lbs_private *priv, u8 *rates, u16 *rates_size) { @@ -57,15 +57,15 @@ static int get_common_rates(struct lbs_adapter *adapter, lbs_deb_hex(LBS_DEB_JOIN, "AP rates ", rates, *rates_size); lbs_deb_hex(LBS_DEB_JOIN, "card rates ", card_rates, num_card_rates); lbs_deb_hex(LBS_DEB_JOIN, "common rates", tmp, tmp_size); - lbs_deb_join("TX data rate 0x%02x\n", adapter->cur_rate); + lbs_deb_join("TX data rate 0x%02x\n", priv->cur_rate); - if (!adapter->auto_rate) { + if (!priv->auto_rate) { for (i = 0; i < tmp_size; i++) { - if (tmp[i] == adapter->cur_rate) + if (tmp[i] == priv->cur_rate) goto done; } lbs_pr_alert("Previously set fixed data rate %#x isn't " - "compatible with the network.\n", adapter->cur_rate); + "compatible with the network.\n", priv->cur_rate); ret = -1; goto done; } @@ -125,7 +125,6 @@ void lbs_unset_basic_rate_flags(u8 *rates, size_t len) */ int lbs_associate(struct lbs_private *priv, struct assoc_request *assoc_req) { - struct lbs_adapter *adapter = priv->adapter; int ret; lbs_deb_enter(LBS_DEB_ASSOC); @@ -138,11 +137,11 @@ int lbs_associate(struct lbs_private *priv, struct assoc_request *assoc_req) goto done; /* set preamble to firmware */ - if ( (adapter->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) + if ( (priv->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) && (assoc_req->bss.capability & WLAN_CAPABILITY_SHORT_PREAMBLE)) - adapter->preamble = CMD_TYPE_SHORT_PREAMBLE; + priv->preamble = CMD_TYPE_SHORT_PREAMBLE; else - adapter->preamble = CMD_TYPE_LONG_PREAMBLE; + priv->preamble = CMD_TYPE_LONG_PREAMBLE; lbs_set_radio_control(priv); @@ -164,17 +163,16 @@ done: int lbs_start_adhoc_network(struct lbs_private *priv, struct assoc_request *assoc_req) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; - adapter->adhoccreate = 1; + priv->adhoccreate = 1; - if (adapter->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) { + if (priv->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) { lbs_deb_join("AdhocStart: Short preamble\n"); - adapter->preamble = CMD_TYPE_SHORT_PREAMBLE; + priv->preamble = CMD_TYPE_SHORT_PREAMBLE; } else { lbs_deb_join("AdhocStart: Long preamble\n"); - adapter->preamble = CMD_TYPE_LONG_PREAMBLE; + priv->preamble = CMD_TYPE_LONG_PREAMBLE; } lbs_set_radio_control(priv); @@ -200,26 +198,25 @@ int lbs_start_adhoc_network(struct lbs_private *priv, int lbs_join_adhoc_network(struct lbs_private *priv, struct assoc_request *assoc_req) { - struct lbs_adapter *adapter = priv->adapter; struct bss_descriptor * bss = &assoc_req->bss; int ret = 0; lbs_deb_join("%s: Current SSID '%s', ssid length %u\n", __func__, - escape_essid(adapter->curbssparams.ssid, - adapter->curbssparams.ssid_len), - adapter->curbssparams.ssid_len); + escape_essid(priv->curbssparams.ssid, + priv->curbssparams.ssid_len), + priv->curbssparams.ssid_len); lbs_deb_join("%s: requested ssid '%s', ssid length %u\n", __func__, escape_essid(bss->ssid, bss->ssid_len), bss->ssid_len); /* check if the requested SSID is already joined */ - if ( adapter->curbssparams.ssid_len - && !lbs_ssid_cmp(adapter->curbssparams.ssid, - adapter->curbssparams.ssid_len, + if ( priv->curbssparams.ssid_len + && !lbs_ssid_cmp(priv->curbssparams.ssid, + priv->curbssparams.ssid_len, bss->ssid, bss->ssid_len) - && (adapter->mode == IW_MODE_ADHOC) - && (adapter->connect_status == LBS_CONNECTED)) { + && (priv->mode == IW_MODE_ADHOC) + && (priv->connect_status == LBS_CONNECTED)) { union iwreq_data wrqu; lbs_deb_join("ADHOC_J_CMD: New ad-hoc SSID is the same as " @@ -229,7 +226,7 @@ int lbs_join_adhoc_network(struct lbs_private *priv, * request really was successful, even if just a null-op. */ memset(&wrqu, 0, sizeof(wrqu)); - memcpy(wrqu.ap_addr.sa_data, adapter->curbssparams.bssid, + memcpy(wrqu.ap_addr.sa_data, priv->curbssparams.bssid, ETH_ALEN); wrqu.ap_addr.sa_family = ARPHRD_ETHER; wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); @@ -239,12 +236,12 @@ int lbs_join_adhoc_network(struct lbs_private *priv, /* Use shortpreamble only when both creator and card supports short preamble */ if ( !(bss->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) - || !(adapter->capability & WLAN_CAPABILITY_SHORT_PREAMBLE)) { + || !(priv->capability & WLAN_CAPABILITY_SHORT_PREAMBLE)) { lbs_deb_join("AdhocJoin: Long preamble\n"); - adapter->preamble = CMD_TYPE_LONG_PREAMBLE; + priv->preamble = CMD_TYPE_LONG_PREAMBLE; } else { lbs_deb_join("AdhocJoin: Short preamble\n"); - adapter->preamble = CMD_TYPE_SHORT_PREAMBLE; + priv->preamble = CMD_TYPE_SHORT_PREAMBLE; } lbs_set_radio_control(priv); @@ -252,7 +249,7 @@ int lbs_join_adhoc_network(struct lbs_private *priv, lbs_deb_join("AdhocJoin: channel = %d\n", assoc_req->channel); lbs_deb_join("AdhocJoin: band = %c\n", assoc_req->band); - adapter->adhoccreate = 0; + priv->adhoccreate = 0; ret = lbs_prepare_and_send_command(priv, CMD_802_11_AD_HOC_JOIN, 0, CMD_OPTION_WAITFORRSP, @@ -293,7 +290,6 @@ int lbs_cmd_80211_authenticate(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_authenticate *pauthenticate = &cmd->params.auth; int ret = -1; u8 *bssid = pdata_buf; @@ -306,7 +302,7 @@ int lbs_cmd_80211_authenticate(struct lbs_private *priv, + S_DS_GEN); /* translate auth mode to 802.11 defined wire value */ - switch (adapter->secinfo.auth_mode) { + switch (priv->secinfo.auth_mode) { case IW_AUTH_ALG_OPEN_SYSTEM: pauthenticate->authtype = 0x00; break; @@ -318,7 +314,7 @@ int lbs_cmd_80211_authenticate(struct lbs_private *priv, break; default: lbs_deb_join("AUTH_CMD: invalid auth alg 0x%X\n", - adapter->secinfo.auth_mode); + priv->secinfo.auth_mode); goto out; } @@ -336,7 +332,6 @@ out: int lbs_cmd_80211_deauthenticate(struct lbs_private *priv, struct cmd_ds_command *cmd) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_deauthenticate *dauth = &cmd->params.deauth; lbs_deb_enter(LBS_DEB_JOIN); @@ -346,7 +341,7 @@ int lbs_cmd_80211_deauthenticate(struct lbs_private *priv, S_DS_GEN); /* set AP MAC address */ - memmove(dauth->macaddr, adapter->curbssparams.bssid, ETH_ALEN); + memmove(dauth->macaddr, priv->curbssparams.bssid, ETH_ALEN); /* Reason code 3 = Station is leaving */ #define REASON_CODE_STA_LEAVING 3 @@ -359,7 +354,6 @@ int lbs_cmd_80211_deauthenticate(struct lbs_private *priv, int lbs_cmd_80211_associate(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_associate *passo = &cmd->params.associate; int ret = 0; struct assoc_request * assoc_req = pdata_buf; @@ -376,7 +370,7 @@ int lbs_cmd_80211_associate(struct lbs_private *priv, pos = (u8 *) passo; - if (!adapter) { + if (!priv) { ret = -1; goto done; } @@ -420,7 +414,7 @@ int lbs_cmd_80211_associate(struct lbs_private *priv, rates->header.type = cpu_to_le16(TLV_TYPE_RATES); memcpy(&rates->rates, &bss->rates, MAX_RATES); tmplen = MAX_RATES; - if (get_common_rates(adapter, rates->rates, &tmplen)) { + if (get_common_rates(priv, rates->rates, &tmplen)) { ret = -1; goto done; } @@ -429,8 +423,8 @@ int lbs_cmd_80211_associate(struct lbs_private *priv, lbs_deb_assoc("ASSOC_CMD: num rates %u\n", tmplen); /* Copy the infra. association rates into Current BSS state structure */ - memset(&adapter->curbssparams.rates, 0, sizeof(adapter->curbssparams.rates)); - memcpy(&adapter->curbssparams.rates, &rates->rates, tmplen); + memset(&priv->curbssparams.rates, 0, sizeof(priv->curbssparams.rates)); + memcpy(&priv->curbssparams.rates, &rates->rates, tmplen); /* Set MSB on basic rates as the firmware requires, but _after_ * copying to current bss rates. @@ -450,7 +444,7 @@ int lbs_cmd_80211_associate(struct lbs_private *priv, } /* update curbssparams */ - adapter->curbssparams.channel = bss->phyparamset.dsparamset.currentchan; + priv->curbssparams.channel = bss->phyparamset.dsparamset.currentchan; if (lbs_parse_dnld_countryinfo_11d(priv, bss)) { ret = -1; @@ -474,7 +468,6 @@ done: int lbs_cmd_80211_ad_hoc_start(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_ad_hoc_start *adhs = &cmd->params.ads; int ret = 0; int cmdappendsize = 0; @@ -484,7 +477,7 @@ int lbs_cmd_80211_ad_hoc_start(struct lbs_private *priv, lbs_deb_enter(LBS_DEB_JOIN); - if (!adapter) { + if (!priv) { ret = -1; goto done; } @@ -494,7 +487,7 @@ int lbs_cmd_80211_ad_hoc_start(struct lbs_private *priv, /* * Fill in the parameters for 2 data structures: * 1. cmd_ds_802_11_ad_hoc_start command - * 2. adapter->scantable[i] + * 2. priv->scantable[i] * * Driver will fill up SSID, bsstype,IBSS param, Physical Param, * probe delay, and cap info. @@ -512,10 +505,10 @@ int lbs_cmd_80211_ad_hoc_start(struct lbs_private *priv, /* set the BSS type */ adhs->bsstype = CMD_BSS_TYPE_IBSS; - adapter->mode = IW_MODE_ADHOC; - if (adapter->beacon_period == 0) - adapter->beacon_period = MRVDRV_BEACON_INTERVAL; - adhs->beaconperiod = cpu_to_le16(adapter->beacon_period); + priv->mode = IW_MODE_ADHOC; + if (priv->beacon_period == 0) + priv->beacon_period = MRVDRV_BEACON_INTERVAL; + adhs->beaconperiod = cpu_to_le16(priv->beacon_period); /* set Physical param set */ #define DS_PARA_IE_ID 3 @@ -557,8 +550,8 @@ int lbs_cmd_80211_ad_hoc_start(struct lbs_private *priv, memcpy(adhs->rates, lbs_bg_rates, ratesize); /* Copy the ad-hoc creating rates into Current BSS state structure */ - memset(&adapter->curbssparams.rates, 0, sizeof(adapter->curbssparams.rates)); - memcpy(&adapter->curbssparams.rates, &adhs->rates, ratesize); + memset(&priv->curbssparams.rates, 0, sizeof(priv->curbssparams.rates)); + memcpy(&priv->curbssparams.rates, &adhs->rates, ratesize); /* Set MSB on basic rates as the firmware requires, but _after_ * copying to current bss rates. @@ -597,7 +590,6 @@ int lbs_cmd_80211_ad_hoc_stop(struct lbs_private *priv, int lbs_cmd_80211_ad_hoc_join(struct lbs_private *priv, struct cmd_ds_command *cmd, void *pdata_buf) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_ad_hoc_join *join_cmd = &cmd->params.adj; struct assoc_request * assoc_req = pdata_buf; struct bss_descriptor *bss = &assoc_req->bss; @@ -638,21 +630,21 @@ int lbs_cmd_80211_ad_hoc_join(struct lbs_private *priv, /* probedelay */ join_cmd->probedelay = cpu_to_le16(CMD_SCAN_PROBE_DELAY_TIME); - adapter->curbssparams.channel = bss->channel; + priv->curbssparams.channel = bss->channel; /* Copy Data rates from the rates recorded in scan response */ memset(join_cmd->bss.rates, 0, sizeof(join_cmd->bss.rates)); ratesize = min_t(u16, sizeof(join_cmd->bss.rates), MAX_RATES); memcpy(join_cmd->bss.rates, bss->rates, ratesize); - if (get_common_rates(adapter, join_cmd->bss.rates, &ratesize)) { + if (get_common_rates(priv, join_cmd->bss.rates, &ratesize)) { lbs_deb_join("ADHOC_J_CMD: get_common_rates returns error.\n"); ret = -1; goto done; } /* Copy the ad-hoc creating rates into Current BSS state structure */ - memset(&adapter->curbssparams.rates, 0, sizeof(adapter->curbssparams.rates)); - memcpy(&adapter->curbssparams.rates, join_cmd->bss.rates, ratesize); + memset(&priv->curbssparams.rates, 0, sizeof(priv->curbssparams.rates)); + memcpy(&priv->curbssparams.rates, join_cmd->bss.rates, ratesize); /* Set MSB on basic rates as the firmware requires, but _after_ * copying to current bss rates. @@ -668,7 +660,7 @@ int lbs_cmd_80211_ad_hoc_join(struct lbs_private *priv, join_cmd->bss.capability = cpu_to_le16(tmp); } - if (adapter->psmode == LBS802_11POWERMODEMAX_PSP) { + if (priv->psmode == LBS802_11POWERMODEMAX_PSP) { /* wake up first */ __le32 Localpsmode; @@ -700,7 +692,6 @@ done: int lbs_ret_80211_associate(struct lbs_private *priv, struct cmd_ds_command *resp) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; union iwreq_data wrqu; struct ieeetypes_assocrsp *passocrsp; @@ -709,12 +700,12 @@ int lbs_ret_80211_associate(struct lbs_private *priv, lbs_deb_enter(LBS_DEB_ASSOC); - if (!adapter->in_progress_assoc_req) { + if (!priv->in_progress_assoc_req) { lbs_deb_assoc("ASSOC_RESP: no in-progress assoc request\n"); ret = -1; goto done; } - bss = &adapter->in_progress_assoc_req->bss; + bss = &priv->in_progress_assoc_req->bss; passocrsp = (struct ieeetypes_assocrsp *) & resp->params; @@ -771,29 +762,29 @@ int lbs_ret_80211_associate(struct lbs_private *priv, le16_to_cpu(resp->size) - S_DS_GEN); /* Send a Media Connected event, according to the Spec */ - adapter->connect_status = LBS_CONNECTED; + priv->connect_status = LBS_CONNECTED; /* Update current SSID and BSSID */ - memcpy(&adapter->curbssparams.ssid, &bss->ssid, IW_ESSID_MAX_SIZE); - adapter->curbssparams.ssid_len = bss->ssid_len; - memcpy(adapter->curbssparams.bssid, bss->bssid, ETH_ALEN); + memcpy(&priv->curbssparams.ssid, &bss->ssid, IW_ESSID_MAX_SIZE); + priv->curbssparams.ssid_len = bss->ssid_len; + memcpy(priv->curbssparams.bssid, bss->bssid, ETH_ALEN); lbs_deb_assoc("ASSOC_RESP: currentpacketfilter is 0x%x\n", - adapter->currentpacketfilter); + priv->currentpacketfilter); - adapter->SNR[TYPE_RXPD][TYPE_AVG] = 0; - adapter->NF[TYPE_RXPD][TYPE_AVG] = 0; + priv->SNR[TYPE_RXPD][TYPE_AVG] = 0; + priv->NF[TYPE_RXPD][TYPE_AVG] = 0; - memset(adapter->rawSNR, 0x00, sizeof(adapter->rawSNR)); - memset(adapter->rawNF, 0x00, sizeof(adapter->rawNF)); - adapter->nextSNRNF = 0; - adapter->numSNRNF = 0; + memset(priv->rawSNR, 0x00, sizeof(priv->rawSNR)); + memset(priv->rawNF, 0x00, sizeof(priv->rawNF)); + priv->nextSNRNF = 0; + priv->numSNRNF = 0; netif_carrier_on(priv->dev); netif_wake_queue(priv->dev); - memcpy(wrqu.ap_addr.sa_data, adapter->curbssparams.bssid, ETH_ALEN); + memcpy(wrqu.ap_addr.sa_data, priv->curbssparams.bssid, ETH_ALEN); wrqu.ap_addr.sa_family = ARPHRD_ETHER; wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); @@ -816,7 +807,6 @@ int lbs_ret_80211_disassociate(struct lbs_private *priv, int lbs_ret_80211_ad_hoc_start(struct lbs_private *priv, struct cmd_ds_command *resp) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; u16 command = le16_to_cpu(resp->command); u16 result = le16_to_cpu(resp->result); @@ -833,19 +823,19 @@ int lbs_ret_80211_ad_hoc_start(struct lbs_private *priv, lbs_deb_join("ADHOC_RESP: command = %x\n", command); lbs_deb_join("ADHOC_RESP: result = %x\n", result); - if (!adapter->in_progress_assoc_req) { + if (!priv->in_progress_assoc_req) { lbs_deb_join("ADHOC_RESP: no in-progress association request\n"); ret = -1; goto done; } - bss = &adapter->in_progress_assoc_req->bss; + bss = &priv->in_progress_assoc_req->bss; /* * Join result code 0 --> SUCCESS */ if (result) { lbs_deb_join("ADHOC_RESP: failed\n"); - if (adapter->connect_status == LBS_CONNECTED) { + if (priv->connect_status == LBS_CONNECTED) { lbs_mac_event_disconnected(priv); } ret = -1; @@ -860,7 +850,7 @@ int lbs_ret_80211_ad_hoc_start(struct lbs_private *priv, escape_essid(bss->ssid, bss->ssid_len)); /* Send a Media Connected event, according to the Spec */ - adapter->connect_status = LBS_CONNECTED; + priv->connect_status = LBS_CONNECTED; if (command == CMD_RET(CMD_802_11_AD_HOC_START)) { /* Update the created network descriptor with the new BSSID */ @@ -868,22 +858,22 @@ int lbs_ret_80211_ad_hoc_start(struct lbs_private *priv, } /* Set the BSSID from the joined/started descriptor */ - memcpy(&adapter->curbssparams.bssid, bss->bssid, ETH_ALEN); + memcpy(&priv->curbssparams.bssid, bss->bssid, ETH_ALEN); /* Set the new SSID to current SSID */ - memcpy(&adapter->curbssparams.ssid, &bss->ssid, IW_ESSID_MAX_SIZE); - adapter->curbssparams.ssid_len = bss->ssid_len; + memcpy(&priv->curbssparams.ssid, &bss->ssid, IW_ESSID_MAX_SIZE); + priv->curbssparams.ssid_len = bss->ssid_len; netif_carrier_on(priv->dev); netif_wake_queue(priv->dev); memset(&wrqu, 0, sizeof(wrqu)); - memcpy(wrqu.ap_addr.sa_data, adapter->curbssparams.bssid, ETH_ALEN); + memcpy(wrqu.ap_addr.sa_data, priv->curbssparams.bssid, ETH_ALEN); wrqu.ap_addr.sa_family = ARPHRD_ETHER; wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); lbs_deb_join("ADHOC_RESP: - Joined/Started Ad Hoc\n"); - lbs_deb_join("ADHOC_RESP: channel = %d\n", adapter->curbssparams.channel); + lbs_deb_join("ADHOC_RESP: channel = %d\n", priv->curbssparams.channel); lbs_deb_join("ADHOC_RESP: BSSID = %s\n", print_mac(mac, padhocresult->bssid)); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 7155f481816..243cdea419c 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -257,8 +257,7 @@ static ssize_t lbs_rtap_get(struct device *dev, struct device_attribute *attr, char * buf) { struct lbs_private *priv = to_net_dev(dev)->priv; - struct lbs_adapter *adapter = priv->adapter; - return snprintf(buf, 5, "0x%X\n", adapter->monitormode); + return snprintf(buf, 5, "0x%X\n", priv->monitormode); } /** @@ -269,31 +268,30 @@ static ssize_t lbs_rtap_set(struct device *dev, { int monitor_mode; struct lbs_private *priv = to_net_dev(dev)->priv; - struct lbs_adapter *adapter = priv->adapter; sscanf(buf, "%x", &monitor_mode); if (monitor_mode != LBS_MONITOR_OFF) { - if(adapter->monitormode == monitor_mode) + if(priv->monitormode == monitor_mode) return strlen(buf); - if (adapter->monitormode == LBS_MONITOR_OFF) { - if (adapter->mode == IW_MODE_INFRA) + if (priv->monitormode == LBS_MONITOR_OFF) { + if (priv->mode == IW_MODE_INFRA) lbs_send_deauthentication(priv); - else if (adapter->mode == IW_MODE_ADHOC) + else if (priv->mode == IW_MODE_ADHOC) lbs_stop_adhoc_network(priv); lbs_add_rtap(priv); } - adapter->monitormode = monitor_mode; + priv->monitormode = monitor_mode; } else { - if (adapter->monitormode == LBS_MONITOR_OFF) + if (priv->monitormode == LBS_MONITOR_OFF) return strlen(buf); - adapter->monitormode = LBS_MONITOR_OFF; + priv->monitormode = LBS_MONITOR_OFF; lbs_remove_rtap(priv); - if (adapter->currenttxskb) { - dev_kfree_skb_any(adapter->currenttxskb); - adapter->currenttxskb = NULL; + if (priv->currenttxskb) { + dev_kfree_skb_any(priv->currenttxskb); + priv->currenttxskb = NULL; } /* Wake queues, command thread, etc. */ @@ -302,7 +300,7 @@ static ssize_t lbs_rtap_set(struct device *dev, lbs_prepare_and_send_command(priv, CMD_802_11_MONITOR_MODE, CMD_ACT_SET, - CMD_OPTION_WAITFORRSP, 0, &adapter->monitormode); + CMD_OPTION_WAITFORRSP, 0, &priv->monitormode); return strlen(buf); } @@ -382,14 +380,13 @@ static struct attribute_group lbs_mesh_attr_group = { static int pre_open_check(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) dev->priv; - struct lbs_adapter *adapter = priv->adapter; int i = 0; - while (!adapter->fw_ready && i < 20) { + while (!priv->fw_ready && i < 20) { i++; msleep_interruptible(100); } - if (!adapter->fw_ready) { + if (!priv->fw_ready) { lbs_pr_err("firmware not ready\n"); return -1; } @@ -406,19 +403,18 @@ static int pre_open_check(struct net_device *dev) static int lbs_dev_open(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_NET); priv->open = 1; - if (adapter->connect_status == LBS_CONNECTED) + if (priv->connect_status == LBS_CONNECTED) netif_carrier_on(priv->dev); else netif_carrier_off(priv->dev); if (priv->mesh_dev) { - if (adapter->mesh_connect_status == LBS_CONNECTED) + if (priv->mesh_connect_status == LBS_CONNECTED) netif_carrier_on(priv->mesh_dev); else netif_carrier_off(priv->mesh_dev); @@ -442,7 +438,7 @@ static int lbs_mesh_open(struct net_device *dev) priv->mesh_open = 1 ; netif_wake_queue(priv->mesh_dev); - priv->adapter->mesh_connect_status = LBS_CONNECTED; + priv->mesh_connect_status = LBS_CONNECTED; netif_carrier_on(priv->mesh_dev); netif_wake_queue(priv->mesh_dev); @@ -534,7 +530,7 @@ static int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) priv->stats.tx_dropped++; goto done; } - if (priv->adapter->currenttxskb) { + if (priv->currenttxskb) { lbs_pr_err("%s while TX skb pending\n", __func__); priv->stats.tx_dropped++; goto done; @@ -562,7 +558,7 @@ static int lbs_mesh_pre_start_xmit(struct sk_buff *skb, int ret; lbs_deb_enter(LBS_DEB_MESH); - if (priv->adapter->monitormode != LBS_MONITOR_OFF) { + if (priv->monitormode != LBS_MONITOR_OFF) { netif_stop_queue(dev); return -EOPNOTSUPP; } @@ -585,7 +581,7 @@ static int lbs_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) lbs_deb_enter(LBS_DEB_TX); - if (priv->adapter->monitormode != LBS_MONITOR_OFF) { + if (priv->monitormode != LBS_MONITOR_OFF) { netif_stop_queue(dev); return -EOPNOTSUPP; } @@ -608,20 +604,20 @@ static void lbs_tx_timeout(struct net_device *dev) priv->dnld_sent = DNLD_RES_RECEIVED; dev->trans_start = jiffies; - if (priv->adapter->currenttxskb) { - if (priv->adapter->monitormode != LBS_MONITOR_OFF) { + if (priv->currenttxskb) { + if (priv->monitormode != LBS_MONITOR_OFF) { /* If we are here, we have not received feedback from the previous packet. Assume TX_FAIL and move on. */ - priv->adapter->eventcause = 0x01000000; + priv->eventcause = 0x01000000; lbs_send_tx_feedback(priv); } else wake_up_interruptible(&priv->waitq); } else if (dev == priv->dev) { - if (priv->adapter->connect_status == LBS_CONNECTED) + if (priv->connect_status == LBS_CONNECTED) netif_wake_queue(priv->dev); } else if (dev == priv->mesh_dev) { - if (priv->adapter->mesh_connect_status == LBS_CONNECTED) + if (priv->mesh_connect_status == LBS_CONNECTED) netif_wake_queue(priv->mesh_dev); } @@ -630,23 +626,22 @@ static void lbs_tx_timeout(struct net_device *dev) void lbs_host_to_card_done(struct lbs_private *priv) { - struct lbs_adapter *adapter = priv->adapter; priv->dnld_sent = DNLD_RES_RECEIVED; /* Wake main thread if commands are pending */ - if (!adapter->cur_cmd) + if (!priv->cur_cmd) wake_up_interruptible(&priv->waitq); /* Don't wake netif queues if we're in monitor mode and a TX packet is already pending. */ - if (priv->adapter->currenttxskb) + if (priv->currenttxskb) return; - if (priv->dev && adapter->connect_status == LBS_CONNECTED) + if (priv->dev && priv->connect_status == LBS_CONNECTED) netif_wake_queue(priv->dev); - if (priv->mesh_dev && adapter->mesh_connect_status == LBS_CONNECTED) + if (priv->mesh_dev && priv->mesh_connect_status == LBS_CONNECTED) netif_wake_queue(priv->mesh_dev); } EXPORT_SYMBOL_GPL(lbs_host_to_card_done); @@ -668,7 +663,6 @@ static int lbs_set_mac_address(struct net_device *dev, void *addr) { int ret = 0; struct lbs_private *priv = (struct lbs_private *) dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct sockaddr *phwaddr = addr; lbs_deb_enter(LBS_DEB_NET); @@ -676,13 +670,13 @@ static int lbs_set_mac_address(struct net_device *dev, void *addr) /* In case it was called from the mesh device */ dev = priv->dev ; - memset(adapter->current_addr, 0, ETH_ALEN); + memset(priv->current_addr, 0, ETH_ALEN); /* dev->dev_addr is 8 bytes */ lbs_deb_hex(LBS_DEB_NET, "dev->dev_addr", dev->dev_addr, ETH_ALEN); lbs_deb_hex(LBS_DEB_NET, "addr", phwaddr->sa_data, ETH_ALEN); - memcpy(adapter->current_addr, phwaddr->sa_data, ETH_ALEN); + memcpy(priv->current_addr, phwaddr->sa_data, ETH_ALEN); ret = lbs_prepare_and_send_command(priv, CMD_802_11_MAC_ADDRESS, CMD_ACT_SET, @@ -694,24 +688,24 @@ static int lbs_set_mac_address(struct net_device *dev, void *addr) goto done; } - lbs_deb_hex(LBS_DEB_NET, "adapter->macaddr", adapter->current_addr, ETH_ALEN); - memcpy(dev->dev_addr, adapter->current_addr, ETH_ALEN); + lbs_deb_hex(LBS_DEB_NET, "priv->macaddr", priv->current_addr, ETH_ALEN); + memcpy(dev->dev_addr, priv->current_addr, ETH_ALEN); if (priv->mesh_dev) - memcpy(priv->mesh_dev->dev_addr, adapter->current_addr, ETH_ALEN); + memcpy(priv->mesh_dev->dev_addr, priv->current_addr, ETH_ALEN); done: lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret); return ret; } -static int lbs_copy_multicast_address(struct lbs_adapter *adapter, +static int lbs_copy_multicast_address(struct lbs_private *priv, struct net_device *dev) { int i = 0; struct dev_mc_list *mcptr = dev->mc_list; for (i = 0; i < dev->mc_count; i++) { - memcpy(&adapter->multicastlist[i], mcptr->dmi_addr, ETH_ALEN); + memcpy(&priv->multicastlist[i], mcptr->dmi_addr, ETH_ALEN); mcptr = mcptr->next; } @@ -722,50 +716,49 @@ static int lbs_copy_multicast_address(struct lbs_adapter *adapter, static void lbs_set_multicast_list(struct net_device *dev) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; int oldpacketfilter; DECLARE_MAC_BUF(mac); lbs_deb_enter(LBS_DEB_NET); - oldpacketfilter = adapter->currentpacketfilter; + oldpacketfilter = priv->currentpacketfilter; if (dev->flags & IFF_PROMISC) { lbs_deb_net("enable promiscuous mode\n"); - adapter->currentpacketfilter |= + priv->currentpacketfilter |= CMD_ACT_MAC_PROMISCUOUS_ENABLE; - adapter->currentpacketfilter &= + priv->currentpacketfilter &= ~(CMD_ACT_MAC_ALL_MULTICAST_ENABLE | CMD_ACT_MAC_MULTICAST_ENABLE); } else { /* Multicast */ - adapter->currentpacketfilter &= + priv->currentpacketfilter &= ~CMD_ACT_MAC_PROMISCUOUS_ENABLE; if (dev->flags & IFF_ALLMULTI || dev->mc_count > MRVDRV_MAX_MULTICAST_LIST_SIZE) { lbs_deb_net( "enabling all multicast\n"); - adapter->currentpacketfilter |= + priv->currentpacketfilter |= CMD_ACT_MAC_ALL_MULTICAST_ENABLE; - adapter->currentpacketfilter &= + priv->currentpacketfilter &= ~CMD_ACT_MAC_MULTICAST_ENABLE; } else { - adapter->currentpacketfilter &= + priv->currentpacketfilter &= ~CMD_ACT_MAC_ALL_MULTICAST_ENABLE; if (!dev->mc_count) { lbs_deb_net("no multicast addresses, " "disabling multicast\n"); - adapter->currentpacketfilter &= + priv->currentpacketfilter &= ~CMD_ACT_MAC_MULTICAST_ENABLE; } else { int i; - adapter->currentpacketfilter |= + priv->currentpacketfilter |= CMD_ACT_MAC_MULTICAST_ENABLE; - adapter->nr_of_multicastmacaddr = - lbs_copy_multicast_address(adapter, dev); + priv->nr_of_multicastmacaddr = + lbs_copy_multicast_address(priv, dev); lbs_deb_net("multicast addresses: %d\n", dev->mc_count); @@ -773,7 +766,7 @@ static void lbs_set_multicast_list(struct net_device *dev) for (i = 0; i < dev->mc_count; i++) { lbs_deb_net("Multicast address %d:%s\n", i, print_mac(mac, - adapter->multicastlist[i])); + priv->multicastlist[i])); } /* send multicast addresses to firmware */ lbs_prepare_and_send_command(priv, @@ -784,7 +777,7 @@ static void lbs_set_multicast_list(struct net_device *dev) } } - if (adapter->currentpacketfilter != oldpacketfilter) { + if (priv->currentpacketfilter != oldpacketfilter) { lbs_set_mac_packet_filter(priv); } @@ -803,7 +796,6 @@ static int lbs_thread(void *data) { struct net_device *dev = data; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; wait_queue_t wait; u8 ireg = 0; @@ -815,99 +807,99 @@ static int lbs_thread(void *data) for (;;) { lbs_deb_thread( "main-thread 111: intcounter=%d currenttxskb=%p dnld_sent=%d\n", - adapter->intcounter, adapter->currenttxskb, priv->dnld_sent); + priv->intcounter, priv->currenttxskb, priv->dnld_sent); add_wait_queue(&priv->waitq, &wait); set_current_state(TASK_INTERRUPTIBLE); - spin_lock_irq(&adapter->driver_lock); + spin_lock_irq(&priv->driver_lock); - if ((adapter->psstate == PS_STATE_SLEEP) || - (!adapter->intcounter && (priv->dnld_sent || adapter->cur_cmd || list_empty(&adapter->cmdpendingq)))) { + if ((priv->psstate == PS_STATE_SLEEP) || + (!priv->intcounter && (priv->dnld_sent || priv->cur_cmd || list_empty(&priv->cmdpendingq)))) { lbs_deb_thread("main-thread sleeping... Conn=%d IntC=%d PS_mode=%d PS_State=%d\n", - adapter->connect_status, adapter->intcounter, - adapter->psmode, adapter->psstate); - spin_unlock_irq(&adapter->driver_lock); + priv->connect_status, priv->intcounter, + priv->psmode, priv->psstate); + spin_unlock_irq(&priv->driver_lock); schedule(); } else - spin_unlock_irq(&adapter->driver_lock); + spin_unlock_irq(&priv->driver_lock); lbs_deb_thread("main-thread 222 (waking up): intcounter=%d currenttxskb=%p dnld_sent=%d\n", - adapter->intcounter, adapter->currenttxskb, priv->dnld_sent); + priv->intcounter, priv->currenttxskb, priv->dnld_sent); set_current_state(TASK_RUNNING); remove_wait_queue(&priv->waitq, &wait); try_to_freeze(); lbs_deb_thread("main-thread 333: intcounter=%d currenttxskb=%p dnld_sent=%d\n", - adapter->intcounter, adapter->currenttxskb, priv->dnld_sent); + priv->intcounter, priv->currenttxskb, priv->dnld_sent); - if (kthread_should_stop() || adapter->surpriseremoved) { + if (kthread_should_stop() || priv->surpriseremoved) { lbs_deb_thread("main-thread: break from main thread: surpriseremoved=0x%x\n", - adapter->surpriseremoved); + priv->surpriseremoved); break; } - spin_lock_irq(&adapter->driver_lock); + spin_lock_irq(&priv->driver_lock); - if (adapter->intcounter) { + if (priv->intcounter) { u8 int_status; - adapter->intcounter = 0; + priv->intcounter = 0; int_status = priv->hw_get_int_status(priv, &ireg); if (int_status) { lbs_deb_thread("main-thread: reading HOST_INT_STATUS_REG failed\n"); - spin_unlock_irq(&adapter->driver_lock); + spin_unlock_irq(&priv->driver_lock); continue; } - adapter->hisregcpy |= ireg; + priv->hisregcpy |= ireg; } lbs_deb_thread("main-thread 444: intcounter=%d currenttxskb=%p dnld_sent=%d\n", - adapter->intcounter, adapter->currenttxskb, priv->dnld_sent); + priv->intcounter, priv->currenttxskb, priv->dnld_sent); /* command response? */ - if (adapter->hisregcpy & MRVDRV_CMD_UPLD_RDY) { + if (priv->hisregcpy & MRVDRV_CMD_UPLD_RDY) { lbs_deb_thread("main-thread: cmd response ready\n"); - adapter->hisregcpy &= ~MRVDRV_CMD_UPLD_RDY; - spin_unlock_irq(&adapter->driver_lock); + priv->hisregcpy &= ~MRVDRV_CMD_UPLD_RDY; + spin_unlock_irq(&priv->driver_lock); lbs_process_rx_command(priv); - spin_lock_irq(&adapter->driver_lock); + spin_lock_irq(&priv->driver_lock); } /* Any Card Event */ - if (adapter->hisregcpy & MRVDRV_CARDEVENT) { + if (priv->hisregcpy & MRVDRV_CARDEVENT) { lbs_deb_thread("main-thread: Card Event Activity\n"); - adapter->hisregcpy &= ~MRVDRV_CARDEVENT; + priv->hisregcpy &= ~MRVDRV_CARDEVENT; if (priv->hw_read_event_cause(priv)) { lbs_pr_alert("main-thread: hw_read_event_cause failed\n"); - spin_unlock_irq(&adapter->driver_lock); + spin_unlock_irq(&priv->driver_lock); continue; } - spin_unlock_irq(&adapter->driver_lock); + spin_unlock_irq(&priv->driver_lock); lbs_process_event(priv); } else - spin_unlock_irq(&adapter->driver_lock); + spin_unlock_irq(&priv->driver_lock); /* Check if we need to confirm Sleep Request received previously */ - if (adapter->psstate == PS_STATE_PRE_SLEEP && - !priv->dnld_sent && !adapter->cur_cmd) { - if (adapter->connect_status == LBS_CONNECTED) { + if (priv->psstate == PS_STATE_PRE_SLEEP && + !priv->dnld_sent && !priv->cur_cmd) { + if (priv->connect_status == LBS_CONNECTED) { lbs_deb_thread("main_thread: PRE_SLEEP--intcounter=%d currenttxskb=%p dnld_sent=%d cur_cmd=%p, confirm now\n", - adapter->intcounter, adapter->currenttxskb, priv->dnld_sent, adapter->cur_cmd); + priv->intcounter, priv->currenttxskb, priv->dnld_sent, priv->cur_cmd); - lbs_ps_confirm_sleep(priv, (u16) adapter->psmode); + lbs_ps_confirm_sleep(priv, (u16) priv->psmode); } else { /* workaround for firmware sending * deauth/linkloss event immediately * after sleep request; remove this * after firmware fixes it */ - adapter->psstate = PS_STATE_AWAKE; + priv->psstate = PS_STATE_AWAKE; lbs_pr_alert("main-thread: ignore PS_SleepConfirm in non-connected state\n"); } } @@ -915,25 +907,25 @@ static int lbs_thread(void *data) /* The PS state is changed during processing of Sleep Request * event above */ - if ((priv->adapter->psstate == PS_STATE_SLEEP) || - (priv->adapter->psstate == PS_STATE_PRE_SLEEP)) + if ((priv->psstate == PS_STATE_SLEEP) || + (priv->psstate == PS_STATE_PRE_SLEEP)) continue; /* Execute the next command */ - if (!priv->dnld_sent && !priv->adapter->cur_cmd) + if (!priv->dnld_sent && !priv->cur_cmd) lbs_execute_next_command(priv); /* Wake-up command waiters which can't sleep in * lbs_prepare_and_send_command */ - if (!list_empty(&adapter->cmdpendingq)) - wake_up_all(&adapter->cmd_pending); + if (!list_empty(&priv->cmdpendingq)) + wake_up_all(&priv->cmd_pending); lbs_tx_runqueue(priv); } - del_timer(&adapter->command_timer); - wake_up_all(&adapter->cmd_pending); + del_timer(&priv->command_timer); + wake_up_all(&priv->cmd_pending); lbs_deb_leave(LBS_DEB_THREAD); return 0; @@ -950,7 +942,6 @@ static int lbs_thread(void *data) static int lbs_setup_firmware(struct lbs_private *priv) { int ret = -1; - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_mesh_access mesh_access; lbs_deb_enter(LBS_DEB_FW); @@ -958,7 +949,7 @@ static int lbs_setup_firmware(struct lbs_private *priv) /* * Read MAC address from HW */ - memset(adapter->current_addr, 0xff, ETH_ALEN); + memset(priv->current_addr, 0xff, ETH_ALEN); ret = lbs_prepare_and_send_command(priv, CMD_GET_HW_SPEC, 0, CMD_OPTION_WAITFORRSP, 0, NULL); @@ -1008,12 +999,11 @@ done: static void command_timer_fn(unsigned long data) { struct lbs_private *priv = (struct lbs_private *)data; - struct lbs_adapter *adapter = priv->adapter; struct cmd_ctrl_node *ptempnode; struct cmd_ds_command *cmd; unsigned long flags; - ptempnode = adapter->cur_cmd; + ptempnode = priv->cur_cmd; if (ptempnode == NULL) { lbs_deb_fw("ptempnode empty\n"); return; @@ -1027,15 +1017,15 @@ static void command_timer_fn(unsigned long data) lbs_deb_fw("command_timer_fn fired, cmd %x\n", cmd->command); - if (!adapter->fw_ready) + if (!priv->fw_ready) return; - spin_lock_irqsave(&adapter->driver_lock, flags); - adapter->cur_cmd = NULL; - spin_unlock_irqrestore(&adapter->driver_lock, flags); + spin_lock_irqsave(&priv->driver_lock, flags); + priv->cur_cmd = NULL; + spin_unlock_irqrestore(&priv->driver_lock, flags); lbs_deb_fw("re-sending same command because of timeout\n"); - lbs_queue_cmd(adapter, ptempnode, 0); + lbs_queue_cmd(priv, ptempnode, 0); wake_up_interruptible(&priv->waitq); @@ -1044,63 +1034,62 @@ static void command_timer_fn(unsigned long data) static int lbs_init_adapter(struct lbs_private *priv) { - struct lbs_adapter *adapter = priv->adapter; size_t bufsize; int i, ret = 0; /* Allocate buffer to store the BSSID list */ bufsize = MAX_NETWORK_COUNT * sizeof(struct bss_descriptor); - adapter->networks = kzalloc(bufsize, GFP_KERNEL); - if (!adapter->networks) { + priv->networks = kzalloc(bufsize, GFP_KERNEL); + if (!priv->networks) { lbs_pr_err("Out of memory allocating beacons\n"); ret = -1; goto out; } /* Initialize scan result lists */ - INIT_LIST_HEAD(&adapter->network_free_list); - INIT_LIST_HEAD(&adapter->network_list); + INIT_LIST_HEAD(&priv->network_free_list); + INIT_LIST_HEAD(&priv->network_list); for (i = 0; i < MAX_NETWORK_COUNT; i++) { - list_add_tail(&adapter->networks[i].list, - &adapter->network_free_list); + list_add_tail(&priv->networks[i].list, + &priv->network_free_list); } - adapter->lbs_ps_confirm_sleep.seqnum = cpu_to_le16(++adapter->seqnum); - adapter->lbs_ps_confirm_sleep.command = + priv->lbs_ps_confirm_sleep.seqnum = cpu_to_le16(++priv->seqnum); + priv->lbs_ps_confirm_sleep.command = cpu_to_le16(CMD_802_11_PS_MODE); - adapter->lbs_ps_confirm_sleep.size = + priv->lbs_ps_confirm_sleep.size = cpu_to_le16(sizeof(struct PS_CMD_ConfirmSleep)); - adapter->lbs_ps_confirm_sleep.action = + priv->lbs_ps_confirm_sleep.action = cpu_to_le16(CMD_SUBCMD_SLEEP_CONFIRMED); - memset(adapter->current_addr, 0xff, ETH_ALEN); + memset(priv->current_addr, 0xff, ETH_ALEN); - adapter->connect_status = LBS_DISCONNECTED; - adapter->mesh_connect_status = LBS_DISCONNECTED; - adapter->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; - adapter->mode = IW_MODE_INFRA; - adapter->curbssparams.channel = DEFAULT_AD_HOC_CHANNEL; - adapter->currentpacketfilter = CMD_ACT_MAC_RX_ON | CMD_ACT_MAC_TX_ON; - adapter->radioon = RADIO_ON; - adapter->auto_rate = 1; - adapter->capability = WLAN_CAPABILITY_SHORT_PREAMBLE; - adapter->psmode = LBS802_11POWERMODECAM; - adapter->psstate = PS_STATE_FULL_POWER; + priv->connect_status = LBS_DISCONNECTED; + priv->mesh_connect_status = LBS_DISCONNECTED; + priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; + priv->mode = IW_MODE_INFRA; + priv->curbssparams.channel = DEFAULT_AD_HOC_CHANNEL; + priv->currentpacketfilter = CMD_ACT_MAC_RX_ON | CMD_ACT_MAC_TX_ON; + priv->radioon = RADIO_ON; + priv->auto_rate = 1; + priv->capability = WLAN_CAPABILITY_SHORT_PREAMBLE; + priv->psmode = LBS802_11POWERMODECAM; + priv->psstate = PS_STATE_FULL_POWER; - mutex_init(&adapter->lock); + mutex_init(&priv->lock); - memset(&adapter->tx_queue_ps, 0, NR_TX_QUEUE*sizeof(struct sk_buff*)); - adapter->tx_queue_idx = 0; - spin_lock_init(&adapter->txqueue_lock); + memset(&priv->tx_queue_ps, 0, NR_TX_QUEUE*sizeof(struct sk_buff*)); + priv->tx_queue_idx = 0; + spin_lock_init(&priv->txqueue_lock); - setup_timer(&adapter->command_timer, command_timer_fn, + setup_timer(&priv->command_timer, command_timer_fn, (unsigned long)priv); - INIT_LIST_HEAD(&adapter->cmdfreeq); - INIT_LIST_HEAD(&adapter->cmdpendingq); + INIT_LIST_HEAD(&priv->cmdfreeq); + INIT_LIST_HEAD(&priv->cmdpendingq); - spin_lock_init(&adapter->driver_lock); - init_waitqueue_head(&adapter->cmd_pending); + spin_lock_init(&priv->driver_lock); + init_waitqueue_head(&priv->cmd_pending); /* Allocate the command buffers */ if (lbs_allocate_cmd_buffer(priv)) { @@ -1114,27 +1103,15 @@ out: static void lbs_free_adapter(struct lbs_private *priv) { - struct lbs_adapter *adapter = priv->adapter; - - if (!adapter) { - lbs_deb_fw("why double free adapter?\n"); - return; - } - lbs_deb_fw("free command buffer\n"); lbs_free_cmd_buffer(priv); lbs_deb_fw("free command_timer\n"); - del_timer(&adapter->command_timer); + del_timer(&priv->command_timer); lbs_deb_fw("free scan results table\n"); - kfree(adapter->networks); - adapter->networks = NULL; - - /* Free the adapter object itself */ - lbs_deb_fw("free adapter\n"); - kfree(adapter); - priv->adapter = NULL; + kfree(priv->networks); + priv->networks = NULL; } /** @@ -1159,13 +1136,6 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) } priv = dev->priv; - /* allocate buffer for struct lbs_adapter */ - priv->adapter = kzalloc(sizeof(struct lbs_adapter), GFP_KERNEL); - if (!priv->adapter) { - lbs_pr_err("allocate buffer for struct lbs_adapter failed\n"); - goto err_kzalloc; - } - if (lbs_init_adapter(priv)) { lbs_pr_err("failed to initialize adapter structure.\n"); goto err_init_adapter; @@ -1212,8 +1182,6 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) err_init_adapter: lbs_free_adapter(priv); - -err_kzalloc: free_netdev(dev); priv = NULL; @@ -1226,7 +1194,6 @@ EXPORT_SYMBOL_GPL(lbs_add_card); int lbs_remove_card(struct lbs_private *priv) { - struct lbs_adapter *adapter = priv->adapter; struct net_device *dev = priv->dev; union iwreq_data wrqu; @@ -1241,8 +1208,8 @@ int lbs_remove_card(struct lbs_private *priv) cancel_delayed_work(&priv->assoc_work); destroy_workqueue(priv->work_thread); - if (adapter->psmode == LBS802_11POWERMODEMAX_PSP) { - adapter->psmode = LBS802_11POWERMODECAM; + if (priv->psmode == LBS802_11POWERMODEMAX_PSP) { + priv->psmode = LBS802_11POWERMODECAM; lbs_ps_wakeup(priv, CMD_OPTION_WAITFORRSP); } @@ -1251,7 +1218,7 @@ int lbs_remove_card(struct lbs_private *priv) wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); /* Stop the thread servicing the interrupts */ - adapter->surpriseremoved = 1; + priv->surpriseremoved = 1; kthread_stop(priv->main_thread); lbs_free_adapter(priv); @@ -1315,12 +1282,12 @@ int lbs_stop_card(struct lbs_private *priv) lbs_debugfs_remove_one(priv); /* Flush pending command nodes */ - spin_lock_irqsave(&priv->adapter->driver_lock, flags); - list_for_each_entry(cmdnode, &priv->adapter->cmdpendingq, list) { + spin_lock_irqsave(&priv->driver_lock, flags); + list_for_each_entry(cmdnode, &priv->cmdpendingq, list) { cmdnode->cmdwaitqwoken = 1; wake_up_interruptible(&cmdnode->cmdwait_q); } - spin_unlock_irqrestore(&priv->adapter->driver_lock, flags); + spin_unlock_irqrestore(&priv->driver_lock, flags); unregister_netdev(dev); @@ -1452,7 +1419,6 @@ struct chan_freq_power *lbs_get_region_cfp_table(u8 region, u8 band, int *cfp_no int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; int i = 0; @@ -1461,22 +1427,22 @@ int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band) lbs_deb_enter(LBS_DEB_MAIN); - memset(adapter->region_channel, 0, sizeof(adapter->region_channel)); + memset(priv->region_channel, 0, sizeof(priv->region_channel)); { cfp = lbs_get_region_cfp_table(region, band, &cfp_no); if (cfp != NULL) { - adapter->region_channel[i].nrcfp = cfp_no; - adapter->region_channel[i].CFP = cfp; + priv->region_channel[i].nrcfp = cfp_no; + priv->region_channel[i].CFP = cfp; } else { lbs_deb_main("wrong region code %#x in band B/G\n", region); ret = -1; goto out; } - adapter->region_channel[i].valid = 1; - adapter->region_channel[i].region = region; - adapter->region_channel[i].band = band; + priv->region_channel[i].valid = 1; + priv->region_channel[i].region = region; + priv->region_channel[i].band = band; i++; } out: @@ -1499,12 +1465,12 @@ void lbs_interrupt(struct net_device *dev) lbs_deb_enter(LBS_DEB_THREAD); lbs_deb_thread("lbs_interrupt: intcounter=%d\n", - priv->adapter->intcounter); + priv->intcounter); - priv->adapter->intcounter++; + priv->intcounter++; - if (priv->adapter->psstate == PS_STATE_SLEEP) { - priv->adapter->psstate = PS_STATE_AWAKE; + if (priv->psstate == PS_STATE_SLEEP) { + priv->psstate = PS_STATE_AWAKE; netif_wake_queue(dev); if (priv->mesh_dev) netif_wake_queue(priv->mesh_dev); diff --git a/drivers/net/wireless/libertas/rx.c b/drivers/net/wireless/libertas/rx.c index a252a8f74be..58e83110812 100644 --- a/drivers/net/wireless/libertas/rx.c +++ b/drivers/net/wireless/libertas/rx.c @@ -48,12 +48,11 @@ static u8 lbs_getavgsnr(struct lbs_private *priv) { u8 i; u16 temp = 0; - struct lbs_adapter *adapter = priv->adapter; - if (adapter->numSNRNF == 0) + if (priv->numSNRNF == 0) return 0; - for (i = 0; i < adapter->numSNRNF; i++) - temp += adapter->rawSNR[i]; - return (u8) (temp / adapter->numSNRNF); + for (i = 0; i < priv->numSNRNF; i++) + temp += priv->rawSNR[i]; + return (u8) (temp / priv->numSNRNF); } @@ -67,12 +66,11 @@ static u8 lbs_getavgnf(struct lbs_private *priv) { u8 i; u16 temp = 0; - struct lbs_adapter *adapter = priv->adapter; - if (adapter->numSNRNF == 0) + if (priv->numSNRNF == 0) return 0; - for (i = 0; i < adapter->numSNRNF; i++) - temp += adapter->rawNF[i]; - return (u8) (temp / adapter->numSNRNF); + for (i = 0; i < priv->numSNRNF; i++) + temp += priv->rawNF[i]; + return (u8) (temp / priv->numSNRNF); } @@ -85,14 +83,13 @@ static u8 lbs_getavgnf(struct lbs_private *priv) */ static void lbs_save_rawSNRNF(struct lbs_private *priv, struct rxpd *p_rx_pd) { - struct lbs_adapter *adapter = priv->adapter; - if (adapter->numSNRNF < DEFAULT_DATA_AVG_FACTOR) - adapter->numSNRNF++; - adapter->rawSNR[adapter->nextSNRNF] = p_rx_pd->snr; - adapter->rawNF[adapter->nextSNRNF] = p_rx_pd->nf; - adapter->nextSNRNF++; - if (adapter->nextSNRNF >= DEFAULT_DATA_AVG_FACTOR) - adapter->nextSNRNF = 0; + if (priv->numSNRNF < DEFAULT_DATA_AVG_FACTOR) + priv->numSNRNF++; + priv->rawSNR[priv->nextSNRNF] = p_rx_pd->snr; + priv->rawNF[priv->nextSNRNF] = p_rx_pd->nf; + priv->nextSNRNF++; + if (priv->nextSNRNF >= DEFAULT_DATA_AVG_FACTOR) + priv->nextSNRNF = 0; return; } @@ -105,32 +102,31 @@ static void lbs_save_rawSNRNF(struct lbs_private *priv, struct rxpd *p_rx_pd) */ static void lbs_compute_rssi(struct lbs_private *priv, struct rxpd *p_rx_pd) { - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_RX); lbs_deb_rx("rxpd: SNR %d, NF %d\n", p_rx_pd->snr, p_rx_pd->nf); lbs_deb_rx("before computing SNR: SNR-avg = %d, NF-avg = %d\n", - adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE, - adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE); + priv->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE, + priv->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE); - adapter->SNR[TYPE_RXPD][TYPE_NOAVG] = p_rx_pd->snr; - adapter->NF[TYPE_RXPD][TYPE_NOAVG] = p_rx_pd->nf; + priv->SNR[TYPE_RXPD][TYPE_NOAVG] = p_rx_pd->snr; + priv->NF[TYPE_RXPD][TYPE_NOAVG] = p_rx_pd->nf; lbs_save_rawSNRNF(priv, p_rx_pd); - adapter->SNR[TYPE_RXPD][TYPE_AVG] = lbs_getavgsnr(priv) * AVG_SCALE; - adapter->NF[TYPE_RXPD][TYPE_AVG] = lbs_getavgnf(priv) * AVG_SCALE; + priv->SNR[TYPE_RXPD][TYPE_AVG] = lbs_getavgsnr(priv) * AVG_SCALE; + priv->NF[TYPE_RXPD][TYPE_AVG] = lbs_getavgnf(priv) * AVG_SCALE; lbs_deb_rx("after computing SNR: SNR-avg = %d, NF-avg = %d\n", - adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE, - adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE); + priv->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE, + priv->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE); - adapter->RSSI[TYPE_RXPD][TYPE_NOAVG] = - CAL_RSSI(adapter->SNR[TYPE_RXPD][TYPE_NOAVG], - adapter->NF[TYPE_RXPD][TYPE_NOAVG]); + priv->RSSI[TYPE_RXPD][TYPE_NOAVG] = + CAL_RSSI(priv->SNR[TYPE_RXPD][TYPE_NOAVG], + priv->NF[TYPE_RXPD][TYPE_NOAVG]); - adapter->RSSI[TYPE_RXPD][TYPE_AVG] = - CAL_RSSI(adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE, - adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE); + priv->RSSI[TYPE_RXPD][TYPE_AVG] = + CAL_RSSI(priv->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE, + priv->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE); lbs_deb_leave(LBS_DEB_RX); } @@ -139,7 +135,7 @@ void lbs_upload_rx_packet(struct lbs_private *priv, struct sk_buff *skb) { lbs_deb_rx("skb->data %p\n", skb->data); - if (priv->adapter->monitormode != LBS_MONITOR_OFF) { + if (priv->monitormode != LBS_MONITOR_OFF) { skb->protocol = eth_type_trans(skb, priv->rtap_net_dev); } else { if (priv->mesh_dev && IS_MESH_FRAME(skb)) @@ -161,7 +157,6 @@ void lbs_upload_rx_packet(struct lbs_private *priv, struct sk_buff *skb) */ int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *skb) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct rxpackethdr *p_rx_pkt; @@ -174,7 +169,7 @@ int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *skb) lbs_deb_enter(LBS_DEB_RX); - if (priv->adapter->monitormode != LBS_MONITOR_OFF) + if (priv->monitormode != LBS_MONITOR_OFF) return process_rxed_802_11_packet(priv, skb); p_rx_pkt = (struct rxpackethdr *) skb->data; @@ -258,8 +253,8 @@ int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *skb) /* Take the data rate from the rxpd structure * only if the rate is auto */ - if (adapter->auto_rate) - adapter->cur_rate = lbs_fw_index_to_data_rate(p_rx_pd->rx_rate); + if (priv->auto_rate) + priv->cur_rate = lbs_fw_index_to_data_rate(p_rx_pd->rx_rate); lbs_compute_rssi(priv, p_rx_pd); @@ -327,7 +322,6 @@ static u8 convert_mv_rate_to_radiotap(u8 rate) static int process_rxed_802_11_packet(struct lbs_private *priv, struct sk_buff *skb) { - struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct rx80211packethdr *p_rx_pkt; @@ -361,7 +355,7 @@ static int process_rxed_802_11_packet(struct lbs_private *priv, skb->len, sizeof(struct rxpd), skb->len - sizeof(struct rxpd)); /* create the exported radio header */ - if (priv->adapter->monitormode == LBS_MONITOR_OFF) { + if (priv->monitormode == LBS_MONITOR_OFF) { /* no radio header */ /* chop the rxpd */ skb_pull(skb, sizeof(struct rxpd)); @@ -410,8 +404,8 @@ static int process_rxed_802_11_packet(struct lbs_private *priv, /* Take the data rate from the rxpd structure * only if the rate is auto */ - if (adapter->auto_rate) - adapter->cur_rate = lbs_fw_index_to_data_rate(prxpd->rx_rate); + if (priv->auto_rate) + priv->cur_rate = lbs_fw_index_to_data_rate(prxpd->rx_rate); lbs_compute_rssi(priv, prxpd); diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c index 90c18889b71..8b6ce61aba4 100644 --- a/drivers/net/wireless/libertas/scan.c +++ b/drivers/net/wireless/libertas/scan.c @@ -190,13 +190,13 @@ static inline int is_same_network(struct bss_descriptor *src, * 0 0 0 0 !=NONE 1 0 0 yes Dynamic WEP * * - * @param adapter A pointer to struct lbs_adapter + * @param priv A pointer to struct lbs_private * @param index Index in scantable to check against current driver settings * @param mode Network mode: Infrastructure or IBSS * * @return Index in scantable, or error code if negative */ -static int is_network_compatible(struct lbs_adapter *adapter, +static int is_network_compatible(struct lbs_private *priv, struct bss_descriptor * bss, u8 mode) { int matched = 0; @@ -206,31 +206,31 @@ static int is_network_compatible(struct lbs_adapter *adapter, if (bss->mode != mode) goto done; - if ((matched = match_bss_no_security(&adapter->secinfo, bss))) { + if ((matched = match_bss_no_security(&priv->secinfo, bss))) { goto done; - } else if ((matched = match_bss_static_wep(&adapter->secinfo, bss))) { + } else if ((matched = match_bss_static_wep(&priv->secinfo, bss))) { goto done; - } else if ((matched = match_bss_wpa(&adapter->secinfo, bss))) { + } else if ((matched = match_bss_wpa(&priv->secinfo, bss))) { lbs_deb_scan( "is_network_compatible() WPA: wpa_ie 0x%x " "wpa2_ie 0x%x WEP %s WPA %s WPA2 %s " "privacy 0x%x\n", bss->wpa_ie[0], bss->rsn_ie[0], - adapter->secinfo.wep_enabled ? "e" : "d", - adapter->secinfo.WPAenabled ? "e" : "d", - adapter->secinfo.WPA2enabled ? "e" : "d", + priv->secinfo.wep_enabled ? "e" : "d", + priv->secinfo.WPAenabled ? "e" : "d", + priv->secinfo.WPA2enabled ? "e" : "d", (bss->capability & WLAN_CAPABILITY_PRIVACY)); goto done; - } else if ((matched = match_bss_wpa2(&adapter->secinfo, bss))) { + } else if ((matched = match_bss_wpa2(&priv->secinfo, bss))) { lbs_deb_scan( "is_network_compatible() WPA2: wpa_ie 0x%x " "wpa2_ie 0x%x WEP %s WPA %s WPA2 %s " "privacy 0x%x\n", bss->wpa_ie[0], bss->rsn_ie[0], - adapter->secinfo.wep_enabled ? "e" : "d", - adapter->secinfo.WPAenabled ? "e" : "d", - adapter->secinfo.WPA2enabled ? "e" : "d", + priv->secinfo.wep_enabled ? "e" : "d", + priv->secinfo.WPAenabled ? "e" : "d", + priv->secinfo.WPA2enabled ? "e" : "d", (bss->capability & WLAN_CAPABILITY_PRIVACY)); goto done; - } else if ((matched = match_bss_dynamic_wep(&adapter->secinfo, bss))) { + } else if ((matched = match_bss_dynamic_wep(&priv->secinfo, bss))) { lbs_deb_scan( "is_network_compatible() dynamic WEP: " "wpa_ie 0x%x wpa2_ie 0x%x privacy 0x%x\n", @@ -244,9 +244,9 @@ static int is_network_compatible(struct lbs_adapter *adapter, "is_network_compatible() FAILED: wpa_ie 0x%x " "wpa2_ie 0x%x WEP %s WPA %s WPA2 %s privacy 0x%x\n", bss->wpa_ie[0], bss->rsn_ie[0], - adapter->secinfo.wep_enabled ? "e" : "d", - adapter->secinfo.WPAenabled ? "e" : "d", - adapter->secinfo.WPA2enabled ? "e" : "d", + priv->secinfo.wep_enabled ? "e" : "d", + priv->secinfo.WPAenabled ? "e" : "d", + priv->secinfo.WPA2enabled ? "e" : "d", (bss->capability & WLAN_CAPABILITY_PRIVACY)); done: @@ -298,7 +298,6 @@ static int lbs_scan_create_channel_list(struct lbs_private *priv, u8 filteredscan) { - struct lbs_adapter *adapter = priv->adapter; struct region_channel *scanregion; struct chan_freq_power *cfp; int rgnidx; @@ -314,22 +313,22 @@ static int lbs_scan_create_channel_list(struct lbs_private *priv, */ scantype = CMD_SCAN_TYPE_ACTIVE; - for (rgnidx = 0; rgnidx < ARRAY_SIZE(adapter->region_channel); rgnidx++) { - if (priv->adapter->enable11d && - (adapter->connect_status != LBS_CONNECTED) && - (adapter->mesh_connect_status != LBS_CONNECTED)) { + for (rgnidx = 0; rgnidx < ARRAY_SIZE(priv->region_channel); rgnidx++) { + if (priv->enable11d && + (priv->connect_status != LBS_CONNECTED) && + (priv->mesh_connect_status != LBS_CONNECTED)) { /* Scan all the supported chan for the first scan */ - if (!adapter->universal_channel[rgnidx].valid) + if (!priv->universal_channel[rgnidx].valid) continue; - scanregion = &adapter->universal_channel[rgnidx]; + scanregion = &priv->universal_channel[rgnidx]; /* clear the parsed_region_chan for the first scan */ - memset(&adapter->parsed_region_chan, 0x00, - sizeof(adapter->parsed_region_chan)); + memset(&priv->parsed_region_chan, 0x00, + sizeof(priv->parsed_region_chan)); } else { - if (!adapter->region_channel[rgnidx].valid) + if (!priv->region_channel[rgnidx].valid) continue; - scanregion = &adapter->region_channel[rgnidx]; + scanregion = &priv->region_channel[rgnidx]; } for (nextchan = 0; @@ -337,10 +336,10 @@ static int lbs_scan_create_channel_list(struct lbs_private *priv, cfp = scanregion->CFP + nextchan; - if (priv->adapter->enable11d) { + if (priv->enable11d) { scantype = lbs_get_scan_type_11d(cfp->channel, - &adapter-> + &priv-> parsed_region_chan); } @@ -540,7 +539,6 @@ int lbs_scan_networks(struct lbs_private *priv, const struct lbs_ioctl_user_scan_cfg *user_cfg, int full_scan) { - struct lbs_adapter *adapter = priv->adapter; int ret = -ENOMEM; struct chanscanparamset *chan_list; struct chanscanparamset *curr_chans; @@ -598,12 +596,12 @@ int lbs_scan_networks(struct lbs_private *priv, /* Prepare to continue an interrupted scan */ lbs_deb_scan("chan_count %d, last_scanned_channel %d\n", - chan_count, adapter->last_scanned_channel); + chan_count, priv->last_scanned_channel); curr_chans = chan_list; /* advance channel list by already-scanned-channels */ - if (adapter->last_scanned_channel > 0) { - curr_chans += adapter->last_scanned_channel; - chan_count -= adapter->last_scanned_channel; + if (priv->last_scanned_channel > 0) { + curr_chans += priv->last_scanned_channel; + chan_count -= priv->last_scanned_channel; } /* Send scan command(s) @@ -627,12 +625,12 @@ int lbs_scan_networks(struct lbs_private *priv, /* somehow schedule the next part of the scan */ if (chan_count && !full_scan && - !priv->adapter->surpriseremoved) { + !priv->surpriseremoved) { /* -1 marks just that we're currently scanning */ - if (adapter->last_scanned_channel < 0) - adapter->last_scanned_channel = to_scan; + if (priv->last_scanned_channel < 0) + priv->last_scanned_channel = to_scan; else - adapter->last_scanned_channel += to_scan; + priv->last_scanned_channel += to_scan; cancel_delayed_work(&priv->scan_work); queue_delayed_work(priv->work_thread, &priv->scan_work, msecs_to_jiffies(300)); @@ -646,24 +644,24 @@ int lbs_scan_networks(struct lbs_private *priv, #ifdef CONFIG_LIBERTAS_DEBUG /* Dump the scan table */ - mutex_lock(&adapter->lock); + mutex_lock(&priv->lock); lbs_deb_scan("scan table:\n"); - list_for_each_entry(iter, &adapter->network_list, list) + list_for_each_entry(iter, &priv->network_list, list) lbs_deb_scan("%02d: BSSID %s, RSSI %d, SSID '%s'\n", i++, print_mac(mac, iter->bssid), (s32) iter->rssi, escape_essid(iter->ssid, iter->ssid_len)); - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); #endif out2: - adapter->last_scanned_channel = 0; + priv->last_scanned_channel = 0; out: - if (adapter->connect_status == LBS_CONNECTED) { + if (priv->connect_status == LBS_CONNECTED) { netif_carrier_on(priv->dev); netif_wake_queue(priv->dev); } - if (priv->mesh_dev && (adapter->mesh_connect_status == LBS_CONNECTED)) { + if (priv->mesh_dev && (priv->mesh_connect_status == LBS_CONNECTED)) { netif_carrier_on(priv->mesh_dev); netif_wake_queue(priv->mesh_dev); } @@ -931,13 +929,13 @@ done: * * Used in association code * - * @param adapter A pointer to struct lbs_adapter + * @param priv A pointer to struct lbs_private * @param bssid BSSID to find in the scan list * @param mode Network mode: Infrastructure or IBSS * * @return index in BSSID list, or error return code (< 0) */ -struct bss_descriptor *lbs_find_bssid_in_list(struct lbs_adapter *adapter, +struct bss_descriptor *lbs_find_bssid_in_list(struct lbs_private *priv, u8 * bssid, u8 mode) { struct bss_descriptor * iter_bss; @@ -955,14 +953,14 @@ struct bss_descriptor *lbs_find_bssid_in_list(struct lbs_adapter *adapter, * continue past a matched bssid that is not compatible in case there * is an AP with multiple SSIDs assigned to the same BSSID */ - mutex_lock(&adapter->lock); - list_for_each_entry (iter_bss, &adapter->network_list, list) { + mutex_lock(&priv->lock); + list_for_each_entry (iter_bss, &priv->network_list, list) { if (compare_ether_addr(iter_bss->bssid, bssid)) continue; /* bssid doesn't match */ switch (mode) { case IW_MODE_INFRA: case IW_MODE_ADHOC: - if (!is_network_compatible(adapter, iter_bss, mode)) + if (!is_network_compatible(priv, iter_bss, mode)) break; found_bss = iter_bss; break; @@ -971,7 +969,7 @@ struct bss_descriptor *lbs_find_bssid_in_list(struct lbs_adapter *adapter, break; } } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); out: lbs_deb_leave_args(LBS_DEB_SCAN, "found_bss %p", found_bss); @@ -983,14 +981,14 @@ out: * * Used in association code * - * @param adapter A pointer to struct lbs_adapter + * @param priv A pointer to struct lbs_private * @param ssid SSID to find in the list * @param bssid BSSID to qualify the SSID selection (if provided) * @param mode Network mode: Infrastructure or IBSS * * @return index in BSSID list */ -struct bss_descriptor *lbs_find_ssid_in_list(struct lbs_adapter *adapter, +struct bss_descriptor *lbs_find_ssid_in_list(struct lbs_private *priv, u8 *ssid, u8 ssid_len, u8 * bssid, u8 mode, int channel) { @@ -1001,9 +999,9 @@ struct bss_descriptor *lbs_find_ssid_in_list(struct lbs_adapter *adapter, lbs_deb_enter(LBS_DEB_SCAN); - mutex_lock(&adapter->lock); + mutex_lock(&priv->lock); - list_for_each_entry (iter_bss, &adapter->network_list, list) { + list_for_each_entry (iter_bss, &priv->network_list, list) { if ( !tmp_oldest || (iter_bss->last_scanned < tmp_oldest->last_scanned)) tmp_oldest = iter_bss; @@ -1019,7 +1017,7 @@ struct bss_descriptor *lbs_find_ssid_in_list(struct lbs_adapter *adapter, switch (mode) { case IW_MODE_INFRA: case IW_MODE_ADHOC: - if (!is_network_compatible(adapter, iter_bss, mode)) + if (!is_network_compatible(priv, iter_bss, mode)) break; if (bssid) { @@ -1044,7 +1042,7 @@ struct bss_descriptor *lbs_find_ssid_in_list(struct lbs_adapter *adapter, } out: - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_leave_args(LBS_DEB_SCAN, "found_bss %p", found_bss); return found_bss; } @@ -1055,12 +1053,12 @@ out: * Search the scan table for the best SSID that also matches the current * adapter network preference (infrastructure or adhoc) * - * @param adapter A pointer to struct lbs_adapter + * @param priv A pointer to struct lbs_private * * @return index in BSSID list */ static struct bss_descriptor *lbs_find_best_ssid_in_list( - struct lbs_adapter *adapter, + struct lbs_private *priv, u8 mode) { u8 bestrssi = 0; @@ -1069,13 +1067,13 @@ static struct bss_descriptor *lbs_find_best_ssid_in_list( lbs_deb_enter(LBS_DEB_SCAN); - mutex_lock(&adapter->lock); + mutex_lock(&priv->lock); - list_for_each_entry (iter_bss, &adapter->network_list, list) { + list_for_each_entry (iter_bss, &priv->network_list, list) { switch (mode) { case IW_MODE_INFRA: case IW_MODE_ADHOC: - if (!is_network_compatible(adapter, iter_bss, mode)) + if (!is_network_compatible(priv, iter_bss, mode)) break; if (SCAN_RSSI(iter_bss->rssi) <= bestrssi) break; @@ -1092,7 +1090,7 @@ static struct bss_descriptor *lbs_find_best_ssid_in_list( } } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_leave_args(LBS_DEB_SCAN, "best_bss %p", best_bss); return best_bss; } @@ -1110,17 +1108,16 @@ static struct bss_descriptor *lbs_find_best_ssid_in_list( int lbs_find_best_network_ssid(struct lbs_private *priv, u8 *out_ssid, u8 *out_ssid_len, u8 preferred_mode, u8 *out_mode) { - struct lbs_adapter *adapter = priv->adapter; int ret = -1; struct bss_descriptor * found; lbs_deb_enter(LBS_DEB_SCAN); lbs_scan_networks(priv, NULL, 1); - if (adapter->surpriseremoved) + if (priv->surpriseremoved) goto out; - found = lbs_find_best_ssid_in_list(adapter, preferred_mode); + found = lbs_find_best_ssid_in_list(priv, preferred_mode); if (found && (found->ssid_len > 0)) { memcpy(out_ssid, &found->ssid, IW_ESSID_MAX_SIZE); *out_ssid_len = found->ssid_len; @@ -1150,7 +1147,6 @@ out: int lbs_send_specific_ssid_scan(struct lbs_private *priv, u8 *ssid, u8 ssid_len, u8 clear_ssid) { - struct lbs_adapter *adapter = priv->adapter; struct lbs_ioctl_user_scan_cfg scancfg; int ret = 0; @@ -1166,7 +1162,7 @@ int lbs_send_specific_ssid_scan(struct lbs_private *priv, scancfg.clear_ssid = clear_ssid; lbs_scan_networks(priv, &scancfg, 1); - if (adapter->surpriseremoved) { + if (priv->surpriseremoved) { ret = -1; goto out; } @@ -1192,7 +1188,6 @@ static inline char *lbs_translate_scan(struct lbs_private *priv, char *start, char *stop, struct bss_descriptor *bss) { - struct lbs_adapter *adapter = priv->adapter; struct chan_freq_power *cfp; char *current_val; /* For rates */ struct iw_event iwe; /* Temporary buffer */ @@ -1204,7 +1199,7 @@ static inline char *lbs_translate_scan(struct lbs_private *priv, lbs_deb_enter(LBS_DEB_SCAN); - cfp = lbs_find_cfp_by_band_and_channel(adapter, 0, bss->channel); + cfp = lbs_find_cfp_by_band_and_channel(priv, 0, bss->channel); if (!cfp) { lbs_deb_scan("Invalid channel number %d\n", bss->channel); start = NULL; @@ -1247,25 +1242,25 @@ static inline char *lbs_translate_scan(struct lbs_private *priv, if (iwe.u.qual.qual > 100) iwe.u.qual.qual = 100; - if (adapter->NF[TYPE_BEACON][TYPE_NOAVG] == 0) { + if (priv->NF[TYPE_BEACON][TYPE_NOAVG] == 0) { iwe.u.qual.noise = MRVDRV_NF_DEFAULT_SCAN_VALUE; } else { iwe.u.qual.noise = - CAL_NF(adapter->NF[TYPE_BEACON][TYPE_NOAVG]); + CAL_NF(priv->NF[TYPE_BEACON][TYPE_NOAVG]); } /* Locally created ad-hoc BSSs won't have beacons if this is the * only station in the adhoc network; so get signal strength * from receive statistics. */ - if ((adapter->mode == IW_MODE_ADHOC) - && adapter->adhoccreate - && !lbs_ssid_cmp(adapter->curbssparams.ssid, - adapter->curbssparams.ssid_len, + if ((priv->mode == IW_MODE_ADHOC) + && priv->adhoccreate + && !lbs_ssid_cmp(priv->curbssparams.ssid, + priv->curbssparams.ssid_len, bss->ssid, bss->ssid_len)) { int snr, nf; - snr = adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE; - nf = adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE; + snr = priv->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE; + nf = priv->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE; iwe.u.qual.level = CAL_RSSI(snr, nf); } start = iwe_stream_add_event(start, stop, &iwe, IW_EV_QUAL_LEN); @@ -1294,10 +1289,10 @@ static inline char *lbs_translate_scan(struct lbs_private *priv, stop, &iwe, IW_EV_PARAM_LEN); } if ((bss->mode == IW_MODE_ADHOC) - && !lbs_ssid_cmp(adapter->curbssparams.ssid, - adapter->curbssparams.ssid_len, + && !lbs_ssid_cmp(priv->curbssparams.ssid, + priv->curbssparams.ssid_len, bss->ssid, bss->ssid_len) - && adapter->adhoccreate) { + && priv->adhoccreate) { iwe.u.bitrate.value = 22 * 500000; current_val = iwe_stream_add_value(start, current_val, stop, &iwe, IW_EV_PARAM_LEN); @@ -1356,7 +1351,6 @@ int lbs_set_scan(struct net_device *dev, struct iw_request_info *info, struct iw_param *wrqu, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_SCAN); @@ -1380,9 +1374,9 @@ int lbs_set_scan(struct net_device *dev, struct iw_request_info *info, queue_delayed_work(priv->work_thread, &priv->scan_work, msecs_to_jiffies(50)); /* set marker that currently a scan is taking place */ - adapter->last_scanned_channel = -1; + priv->last_scanned_channel = -1; - if (adapter->surpriseremoved) + if (priv->surpriseremoved) return -EIO; lbs_deb_leave(LBS_DEB_SCAN); @@ -1405,7 +1399,6 @@ int lbs_get_scan(struct net_device *dev, struct iw_request_info *info, { #define SCAN_ITEM_SIZE 128 struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; int err = 0; char *ev = extra; char *stop = ev + dwrq->length; @@ -1415,17 +1408,17 @@ int lbs_get_scan(struct net_device *dev, struct iw_request_info *info, lbs_deb_enter(LBS_DEB_SCAN); /* iwlist should wait until the current scan is finished */ - if (adapter->last_scanned_channel) + if (priv->last_scanned_channel) return -EAGAIN; /* Update RSSI if current BSS is a locally created ad-hoc BSS */ - if ((adapter->mode == IW_MODE_ADHOC) && adapter->adhoccreate) { + if ((priv->mode == IW_MODE_ADHOC) && priv->adhoccreate) { lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0, CMD_OPTION_WAITFORRSP, 0, NULL); } - mutex_lock(&adapter->lock); - list_for_each_entry_safe (iter_bss, safe, &adapter->network_list, list) { + mutex_lock(&priv->lock); + list_for_each_entry_safe (iter_bss, safe, &priv->network_list, list) { char * next_ev; unsigned long stale_time; @@ -1442,7 +1435,7 @@ int lbs_get_scan(struct net_device *dev, struct iw_request_info *info, stale_time = iter_bss->last_scanned + DEFAULT_MAX_SCAN_AGE; if (time_after(jiffies, stale_time)) { list_move_tail (&iter_bss->list, - &adapter->network_free_list); + &priv->network_free_list); clear_bss_descriptor(iter_bss); continue; } @@ -1453,7 +1446,7 @@ int lbs_get_scan(struct net_device *dev, struct iw_request_info *info, continue; ev = next_ev; } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); dwrq->length = (ev - extra); dwrq->flags = 0; @@ -1538,7 +1531,6 @@ int lbs_cmd_80211_scan(struct lbs_private *priv, */ int lbs_ret_80211_scan(struct lbs_private *priv, struct cmd_ds_command *resp) { - struct lbs_adapter *adapter = priv->adapter; struct cmd_ds_802_11_scan_rsp *pscan; struct bss_descriptor * iter_bss; struct bss_descriptor * safe; @@ -1552,11 +1544,11 @@ int lbs_ret_80211_scan(struct lbs_private *priv, struct cmd_ds_command *resp) lbs_deb_enter(LBS_DEB_SCAN); /* Prune old entries from scan table */ - list_for_each_entry_safe (iter_bss, safe, &adapter->network_list, list) { + list_for_each_entry_safe (iter_bss, safe, &priv->network_list, list) { unsigned long stale_time = iter_bss->last_scanned + DEFAULT_MAX_SCAN_AGE; if (time_before(jiffies, stale_time)) continue; - list_move_tail (&iter_bss->list, &adapter->network_free_list); + list_move_tail (&iter_bss->list, &priv->network_free_list); clear_bss_descriptor(iter_bss); } @@ -1609,7 +1601,7 @@ int lbs_ret_80211_scan(struct lbs_private *priv, struct cmd_ds_command *resp) } /* Try to find this bss in the scan table */ - list_for_each_entry (iter_bss, &adapter->network_list, list) { + list_for_each_entry (iter_bss, &priv->network_list, list) { if (is_same_network(iter_bss, &new)) { found = iter_bss; break; @@ -1623,16 +1615,16 @@ int lbs_ret_80211_scan(struct lbs_private *priv, struct cmd_ds_command *resp) if (found) { /* found, clear it */ clear_bss_descriptor(found); - } else if (!list_empty(&adapter->network_free_list)) { + } else if (!list_empty(&priv->network_free_list)) { /* Pull one from the free list */ - found = list_entry(adapter->network_free_list.next, + found = list_entry(priv->network_free_list.next, struct bss_descriptor, list); - list_move_tail(&found->list, &adapter->network_list); + list_move_tail(&found->list, &priv->network_list); } else if (oldest) { /* If there are no more slots, expire the oldest */ found = oldest; clear_bss_descriptor(found); - list_move_tail(&found->list, &adapter->network_list); + list_move_tail(&found->list, &priv->network_list); } else { continue; } diff --git a/drivers/net/wireless/libertas/scan.h b/drivers/net/wireless/libertas/scan.h index 9b62e2b01f6..319f70dde35 100644 --- a/drivers/net/wireless/libertas/scan.h +++ b/drivers/net/wireless/libertas/scan.h @@ -10,8 +10,6 @@ #include #include "hostcmd.h" -struct lbs_adapter; - /** * @brief Maximum number of channels that can be sent in a setuserscan ioctl * @@ -168,11 +166,11 @@ struct bss_descriptor { int lbs_ssid_cmp(u8 *ssid1, u8 ssid1_len, u8 *ssid2, u8 ssid2_len); -struct bss_descriptor *lbs_find_ssid_in_list(struct lbs_adapter *adapter, +struct bss_descriptor *lbs_find_ssid_in_list(struct lbs_private *priv, u8 *ssid, u8 ssid_len, u8 *bssid, u8 mode, int channel); -struct bss_descriptor *lbs_find_bssid_in_list(struct lbs_adapter *adapter, +struct bss_descriptor *lbs_find_bssid_in_list(struct lbs_private *priv, u8 *bssid, u8 mode); int lbs_find_best_network_ssid(struct lbs_private *priv, u8 *out_ssid, diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c index 131ef3fe033..4cb39d33003 100644 --- a/drivers/net/wireless/libertas/tx.c +++ b/drivers/net/wireless/libertas/tx.c @@ -64,11 +64,11 @@ static int SendSinglePacket(struct lbs_private *priv, struct sk_buff *skb) u8 *p802x_hdr; struct tx_radiotap_hdr *pradiotap_hdr; u32 new_rate; - u8 *ptr = priv->adapter->tmptxbuf; + u8 *ptr = priv->tmptxbuf; lbs_deb_enter(LBS_DEB_TX); - if (priv->adapter->surpriseremoved) + if (priv->surpriseremoved) return -1; if (!skb->len || (skb->len > MRVDRV_ETH_TX_PACKET_BUFFER_SIZE)) { @@ -86,7 +86,7 @@ static int SendSinglePacket(struct lbs_private *priv, struct sk_buff *skb) plocaltxpd->tx_packet_location = cpu_to_le32(sizeof(struct txpd)); p802x_hdr = skb->data; - if (priv->adapter->monitormode != LBS_MONITOR_OFF) { + if (priv->monitormode != LBS_MONITOR_OFF) { /* locate radiotap header */ pradiotap_hdr = (struct tx_radiotap_hdr *)skb->data; @@ -106,7 +106,7 @@ static int SendSinglePacket(struct lbs_private *priv, struct sk_buff *skb) } /* copy destination address from 802.3 or 802.11 header */ - if (priv->adapter->monitormode != LBS_MONITOR_OFF) + if (priv->monitormode != LBS_MONITOR_OFF) memcpy(plocaltxpd->tx_dest_addr_high, p802x_hdr + 4, ETH_ALEN); else memcpy(plocaltxpd->tx_dest_addr_high, p802x_hdr, ETH_ALEN); @@ -124,7 +124,7 @@ static int SendSinglePacket(struct lbs_private *priv, struct sk_buff *skb) lbs_deb_hex(LBS_DEB_TX, "Tx Data", (u8 *) p802x_hdr, le16_to_cpu(plocaltxpd->tx_packet_length)); memcpy(ptr, p802x_hdr, le16_to_cpu(plocaltxpd->tx_packet_length)); ret = priv->hw_host_to_card(priv, MVMS_DAT, - priv->adapter->tmptxbuf, + priv->tmptxbuf, le16_to_cpu(plocaltxpd->tx_packet_length) + sizeof(struct txpd)); @@ -144,7 +144,7 @@ done: priv->stats.tx_errors++; } - if (!ret && priv->adapter->monitormode != LBS_MONITOR_OFF) { + if (!ret && priv->monitormode != LBS_MONITOR_OFF) { /* Keep the skb to echo it back once Tx feedback is received from FW */ skb_orphan(skb); @@ -154,7 +154,7 @@ done: netif_stop_queue(priv->mesh_dev); /* Keep the skb around for when we get feedback */ - priv->adapter->currenttxskb = skb; + priv->currenttxskb = skb; } else { dev_kfree_skb_any(skb); } @@ -166,29 +166,27 @@ done: void lbs_tx_runqueue(struct lbs_private *priv) { - struct lbs_adapter *adapter = priv->adapter; int i; - spin_lock(&adapter->txqueue_lock); - for (i = 0; i < adapter->tx_queue_idx; i++) { - struct sk_buff *skb = adapter->tx_queue_ps[i]; - spin_unlock(&adapter->txqueue_lock); + spin_lock(&priv->txqueue_lock); + for (i = 0; i < priv->tx_queue_idx; i++) { + struct sk_buff *skb = priv->tx_queue_ps[i]; + spin_unlock(&priv->txqueue_lock); SendSinglePacket(priv, skb); - spin_lock(&adapter->txqueue_lock); + spin_lock(&priv->txqueue_lock); } - adapter->tx_queue_idx = 0; - spin_unlock(&adapter->txqueue_lock); + priv->tx_queue_idx = 0; + spin_unlock(&priv->txqueue_lock); } static void lbs_tx_queue(struct lbs_private *priv, struct sk_buff *skb) { - struct lbs_adapter *adapter = priv->adapter; - spin_lock(&adapter->txqueue_lock); + spin_lock(&priv->txqueue_lock); - WARN_ON(priv->adapter->tx_queue_idx >= NR_TX_QUEUE); - adapter->tx_queue_ps[adapter->tx_queue_idx++] = skb; - if (adapter->tx_queue_idx == NR_TX_QUEUE) { + WARN_ON(priv->tx_queue_idx >= NR_TX_QUEUE); + priv->tx_queue_ps[priv->tx_queue_idx++] = skb; + if (priv->tx_queue_idx == NR_TX_QUEUE) { netif_stop_queue(priv->dev); if (priv->mesh_dev) netif_stop_queue(priv->mesh_dev); @@ -198,7 +196,7 @@ static void lbs_tx_queue(struct lbs_private *priv, struct sk_buff *skb) netif_start_queue(priv->mesh_dev); } - spin_unlock(&adapter->txqueue_lock); + spin_unlock(&priv->txqueue_lock); } /** @@ -221,8 +219,8 @@ int lbs_process_tx(struct lbs_private *priv, struct sk_buff *skb) goto done; } - if ((priv->adapter->psstate == PS_STATE_SLEEP) || - (priv->adapter->psstate == PS_STATE_PRE_SLEEP)) { + if ((priv->psstate == PS_STATE_SLEEP) || + (priv->psstate == PS_STATE_PRE_SLEEP)) { lbs_tx_queue(priv, skb); return ret; } @@ -244,17 +242,16 @@ done: */ void lbs_send_tx_feedback(struct lbs_private *priv) { - struct lbs_adapter *adapter = priv->adapter; struct tx_radiotap_hdr *radiotap_hdr; - u32 status = adapter->eventcause; + u32 status = priv->eventcause; int txfail; int try_count; - if (adapter->monitormode == LBS_MONITOR_OFF || - adapter->currenttxskb == NULL) + if (priv->monitormode == LBS_MONITOR_OFF || + priv->currenttxskb == NULL) return; - radiotap_hdr = (struct tx_radiotap_hdr *)adapter->currenttxskb->data; + radiotap_hdr = (struct tx_radiotap_hdr *)priv->currenttxskb->data; txfail = (status >> 24); @@ -267,14 +264,14 @@ void lbs_send_tx_feedback(struct lbs_private *priv) #endif try_count = (status >> 16) & 0xff; radiotap_hdr->data_retries = (try_count) ? - (1 + adapter->txretrycount - try_count) : 0; - lbs_upload_rx_packet(priv, adapter->currenttxskb); - adapter->currenttxskb = NULL; + (1 + priv->txretrycount - try_count) : 0; + lbs_upload_rx_packet(priv, priv->currenttxskb); + priv->currenttxskb = NULL; - if (adapter->connect_status == LBS_CONNECTED) + if (priv->connect_status == LBS_CONNECTED) netif_wake_queue(priv->dev); - if (priv->mesh_dev && (adapter->mesh_connect_status == LBS_CONNECTED)) + if (priv->mesh_dev && (priv->mesh_connect_status == LBS_CONNECTED)) netif_wake_queue(priv->mesh_dev); } EXPORT_SYMBOL_GPL(lbs_send_tx_feedback); diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c index 1af140bbbcb..1e0b2245db5 100644 --- a/drivers/net/wireless/libertas/wext.c +++ b/drivers/net/wireless/libertas/wext.c @@ -23,7 +23,7 @@ static inline void lbs_postpone_association_work(struct lbs_private *priv) { - if (priv->adapter->surpriseremoved) + if (priv->surpriseremoved) return; cancel_delayed_work(&priv->assoc_work); queue_delayed_work(priv->work_thread, &priv->assoc_work, HZ / 2); @@ -32,21 +32,21 @@ static inline void lbs_postpone_association_work(struct lbs_private *priv) static inline void lbs_cancel_association_work(struct lbs_private *priv) { cancel_delayed_work(&priv->assoc_work); - kfree(priv->adapter->pending_assoc_req); - priv->adapter->pending_assoc_req = NULL; + kfree(priv->pending_assoc_req); + priv->pending_assoc_req = NULL; } /** * @brief Find the channel frequency power info with specific channel * - * @param adapter A pointer to struct lbs_adapter structure + * @param priv A pointer to struct lbs_private structure * @param band it can be BAND_A, BAND_G or BAND_B * @param channel the channel for looking * @return A pointer to struct chan_freq_power structure or NULL if not find. */ struct chan_freq_power *lbs_find_cfp_by_band_and_channel( - struct lbs_adapter *adapter, + struct lbs_private *priv, u8 band, u16 channel) { @@ -54,11 +54,11 @@ struct chan_freq_power *lbs_find_cfp_by_band_and_channel( struct region_channel *rc; int i, j; - for (j = 0; !cfp && (j < ARRAY_SIZE(adapter->region_channel)); j++) { - rc = &adapter->region_channel[j]; + for (j = 0; !cfp && (j < ARRAY_SIZE(priv->region_channel)); j++) { + rc = &priv->region_channel[j]; - if (adapter->enable11d) - rc = &adapter->universal_channel[j]; + if (priv->enable11d) + rc = &priv->universal_channel[j]; if (!rc->valid || !rc->CFP) continue; if (rc->band != band) @@ -81,13 +81,13 @@ struct chan_freq_power *lbs_find_cfp_by_band_and_channel( /** * @brief Find the channel frequency power info with specific frequency * - * @param adapter A pointer to struct lbs_adapter structure + * @param priv A pointer to struct lbs_private structure * @param band it can be BAND_A, BAND_G or BAND_B * @param freq the frequency for looking * @return A pointer to struct chan_freq_power structure or NULL if not find. */ static struct chan_freq_power *find_cfp_by_band_and_freq( - struct lbs_adapter *adapter, + struct lbs_private *priv, u8 band, u32 freq) { @@ -95,11 +95,11 @@ static struct chan_freq_power *find_cfp_by_band_and_freq( struct region_channel *rc; int i, j; - for (j = 0; !cfp && (j < ARRAY_SIZE(adapter->region_channel)); j++) { - rc = &adapter->region_channel[j]; + for (j = 0; !cfp && (j < ARRAY_SIZE(priv->region_channel)); j++) { + rc = &priv->region_channel[j]; - if (adapter->enable11d) - rc = &adapter->universal_channel[j]; + if (priv->enable11d) + rc = &priv->universal_channel[j]; if (!rc->valid || !rc->CFP) continue; if (rc->band != band) @@ -130,13 +130,12 @@ static struct chan_freq_power *find_cfp_by_band_and_freq( static int lbs_radio_ioctl(struct lbs_private *priv, u8 option) { int ret = 0; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); - if (adapter->radioon != option) { + if (priv->radioon != option) { lbs_deb_wext("switching radio %s\n", option ? "on" : "off"); - adapter->radioon = option; + priv->radioon = option; ret = lbs_prepare_and_send_command(priv, CMD_802_11_RADIO_CONTROL, @@ -151,18 +150,18 @@ static int lbs_radio_ioctl(struct lbs_private *priv, u8 option) /** * @brief Copy active data rates based on adapter mode and status * - * @param adapter A pointer to struct lbs_adapter structure + * @param priv A pointer to struct lbs_private structure * @param rate The buf to return the active rates */ -static void copy_active_data_rates(struct lbs_adapter *adapter, u8 *rates) +static void copy_active_data_rates(struct lbs_private *priv, u8 *rates) { lbs_deb_enter(LBS_DEB_WEXT); - if ((adapter->connect_status != LBS_CONNECTED) && - (adapter->mesh_connect_status != LBS_CONNECTED)) + if ((priv->connect_status != LBS_CONNECTED) && + (priv->mesh_connect_status != LBS_CONNECTED)) memcpy(rates, lbs_bg_rates, MAX_RATES); else - memcpy(rates, adapter->curbssparams.rates, MAX_RATES); + memcpy(rates, priv->curbssparams.rates, MAX_RATES); lbs_deb_leave(LBS_DEB_WEXT); } @@ -184,18 +183,17 @@ static int lbs_get_freq(struct net_device *dev, struct iw_request_info *info, struct iw_freq *fwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct chan_freq_power *cfp; lbs_deb_enter(LBS_DEB_WEXT); - cfp = lbs_find_cfp_by_band_and_channel(adapter, 0, - adapter->curbssparams.channel); + cfp = lbs_find_cfp_by_band_and_channel(priv, 0, + priv->curbssparams.channel); if (!cfp) { - if (adapter->curbssparams.channel) + if (priv->curbssparams.channel) lbs_deb_wext("invalid channel %d\n", - adapter->curbssparams.channel); + priv->curbssparams.channel); return -EINVAL; } @@ -211,12 +209,11 @@ static int lbs_get_wap(struct net_device *dev, struct iw_request_info *info, struct sockaddr *awrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); - if (adapter->connect_status == LBS_CONNECTED) { - memcpy(awrq->sa_data, adapter->curbssparams.bssid, ETH_ALEN); + if (priv->connect_status == LBS_CONNECTED) { + memcpy(awrq->sa_data, priv->curbssparams.bssid, ETH_ALEN); } else { memset(awrq->sa_data, 0, ETH_ALEN); } @@ -230,7 +227,6 @@ static int lbs_set_nick(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -242,10 +238,10 @@ static int lbs_set_nick(struct net_device *dev, struct iw_request_info *info, return -E2BIG; } - mutex_lock(&adapter->lock); - memset(adapter->nodename, 0, sizeof(adapter->nodename)); - memcpy(adapter->nodename, extra, dwrq->length); - mutex_unlock(&adapter->lock); + mutex_lock(&priv->lock); + memset(priv->nodename, 0, sizeof(priv->nodename)); + memcpy(priv->nodename, extra, dwrq->length); + mutex_unlock(&priv->lock); lbs_deb_leave(LBS_DEB_WEXT); return 0; @@ -255,12 +251,11 @@ static int lbs_get_nick(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); - dwrq->length = strlen(adapter->nodename); - memcpy(extra, adapter->nodename, dwrq->length); + dwrq->length = strlen(priv->nodename); + memcpy(extra, priv->nodename, dwrq->length); extra[dwrq->length] = '\0'; dwrq->flags = 1; /* active */ @@ -273,13 +268,12 @@ static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); /* Use nickname to indicate that mesh is on */ - if (adapter->mesh_connect_status == LBS_CONNECTED) { + if (priv->mesh_connect_status == LBS_CONNECTED) { strncpy(extra, "Mesh", 12); extra[12] = '\0'; dwrq->length = strlen(extra); @@ -299,17 +293,16 @@ static int lbs_set_rts(struct net_device *dev, struct iw_request_info *info, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; u32 rthr = vwrq->value; lbs_deb_enter(LBS_DEB_WEXT); if (vwrq->disabled) { - adapter->rtsthsd = rthr = MRVDRV_RTS_MAX_VALUE; + priv->rtsthsd = rthr = MRVDRV_RTS_MAX_VALUE; } else { if (rthr < MRVDRV_RTS_MIN_VALUE || rthr > MRVDRV_RTS_MAX_VALUE) return -EINVAL; - adapter->rtsthsd = rthr; + priv->rtsthsd = rthr; } ret = lbs_prepare_and_send_command(priv, CMD_802_11_SNMP_MIB, @@ -325,18 +318,17 @@ static int lbs_get_rts(struct net_device *dev, struct iw_request_info *info, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); - adapter->rtsthsd = 0; + priv->rtsthsd = 0; ret = lbs_prepare_and_send_command(priv, CMD_802_11_SNMP_MIB, CMD_ACT_GET, CMD_OPTION_WAITFORRSP, OID_802_11_RTS_THRESHOLD, NULL); if (ret) goto out; - vwrq->value = adapter->rtsthsd; + vwrq->value = priv->rtsthsd; vwrq->disabled = ((vwrq->value < MRVDRV_RTS_MIN_VALUE) || (vwrq->value > MRVDRV_RTS_MAX_VALUE)); vwrq->fixed = 1; @@ -352,17 +344,16 @@ static int lbs_set_frag(struct net_device *dev, struct iw_request_info *info, int ret = 0; u32 fthr = vwrq->value; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); if (vwrq->disabled) { - adapter->fragthsd = fthr = MRVDRV_FRAG_MAX_VALUE; + priv->fragthsd = fthr = MRVDRV_FRAG_MAX_VALUE; } else { if (fthr < MRVDRV_FRAG_MIN_VALUE || fthr > MRVDRV_FRAG_MAX_VALUE) return -EINVAL; - adapter->fragthsd = fthr; + priv->fragthsd = fthr; } ret = lbs_prepare_and_send_command(priv, CMD_802_11_SNMP_MIB, @@ -378,11 +369,10 @@ static int lbs_get_frag(struct net_device *dev, struct iw_request_info *info, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); - adapter->fragthsd = 0; + priv->fragthsd = 0; ret = lbs_prepare_and_send_command(priv, CMD_802_11_SNMP_MIB, CMD_ACT_GET, CMD_OPTION_WAITFORRSP, @@ -390,7 +380,7 @@ static int lbs_get_frag(struct net_device *dev, struct iw_request_info *info, if (ret) goto out; - vwrq->value = adapter->fragthsd; + vwrq->value = priv->fragthsd; vwrq->disabled = ((vwrq->value < MRVDRV_FRAG_MIN_VALUE) || (vwrq->value > MRVDRV_FRAG_MAX_VALUE)); vwrq->fixed = 1; @@ -404,11 +394,10 @@ static int lbs_get_mode(struct net_device *dev, struct iw_request_info *info, u32 * uwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); - *uwrq = adapter->mode; + *uwrq = priv->mode; lbs_deb_leave(LBS_DEB_WEXT); return 0; @@ -432,7 +421,6 @@ static int lbs_get_txpow(struct net_device *dev, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -444,10 +432,10 @@ static int lbs_get_txpow(struct net_device *dev, if (ret) goto out; - lbs_deb_wext("tx power level %d dbm\n", adapter->txpowerlevel); - vwrq->value = adapter->txpowerlevel; + lbs_deb_wext("tx power level %d dbm\n", priv->txpowerlevel); + vwrq->value = priv->txpowerlevel; vwrq->fixed = 1; - if (adapter->radioon) { + if (priv->radioon) { vwrq->disabled = 0; vwrq->flags = IW_TXPOW_DBM; } else { @@ -464,7 +452,6 @@ static int lbs_set_retry(struct net_device *dev, struct iw_request_info *info, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -477,7 +464,7 @@ static int lbs_set_retry(struct net_device *dev, struct iw_request_info *info, return -EINVAL; /* Adding 1 to convert retry count to try count */ - adapter->txretrycount = vwrq->value + 1; + priv->txretrycount = vwrq->value + 1; ret = lbs_prepare_and_send_command(priv, CMD_802_11_SNMP_MIB, CMD_ACT_SET, @@ -499,12 +486,11 @@ static int lbs_get_retry(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; int ret = 0; lbs_deb_enter(LBS_DEB_WEXT); - adapter->txretrycount = 0; + priv->txretrycount = 0; ret = lbs_prepare_and_send_command(priv, CMD_802_11_SNMP_MIB, CMD_ACT_GET, CMD_OPTION_WAITFORRSP, @@ -516,7 +502,7 @@ static int lbs_get_retry(struct net_device *dev, struct iw_request_info *info, if (!vwrq->flags) { vwrq->flags = IW_RETRY_LIMIT; /* Subtract 1 to convert try count to retry count */ - vwrq->value = adapter->txretrycount - 1; + vwrq->value = priv->txretrycount - 1; } out: @@ -568,7 +554,6 @@ static int lbs_get_range(struct net_device *dev, struct iw_request_info *info, { int i, j; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct iw_range *range = (struct iw_range *)extra; struct chan_freq_power *cfp; u8 rates[MAX_RATES + 1]; @@ -584,7 +569,7 @@ static int lbs_get_range(struct net_device *dev, struct iw_request_info *info, range->max_nwid = 0; memset(rates, 0, sizeof(rates)); - copy_active_data_rates(adapter, rates); + copy_active_data_rates(priv, rates); range->num_bitrates = strnlen(rates, IW_MAX_BITRATES); for (i = 0; i < range->num_bitrates; i++) range->bitrate[i] = rates[i] * 500000; @@ -593,14 +578,14 @@ static int lbs_get_range(struct net_device *dev, struct iw_request_info *info, range->num_bitrates); range->num_frequency = 0; - if (priv->adapter->enable11d && - (adapter->connect_status == LBS_CONNECTED || - adapter->mesh_connect_status == LBS_CONNECTED)) { + if (priv->enable11d && + (priv->connect_status == LBS_CONNECTED || + priv->mesh_connect_status == LBS_CONNECTED)) { u8 chan_no; u8 band; struct parsed_region_chan_11d *parsed_region_chan = - &adapter->parsed_region_chan; + &priv->parsed_region_chan; if (parsed_region_chan == NULL) { lbs_deb_wext("11d: parsed_region_chan is NULL\n"); @@ -624,12 +609,12 @@ static int lbs_get_range(struct net_device *dev, struct iw_request_info *info, } if (!flag) { for (j = 0; (range->num_frequency < IW_MAX_FREQUENCIES) - && (j < ARRAY_SIZE(adapter->region_channel)); j++) { - cfp = adapter->region_channel[j].CFP; + && (j < ARRAY_SIZE(priv->region_channel)); j++) { + cfp = priv->region_channel[j].CFP; for (i = 0; (range->num_frequency < IW_MAX_FREQUENCIES) - && adapter->region_channel[j].valid + && priv->region_channel[j].valid && cfp - && (i < adapter->region_channel[j].nrcfp); i++) { + && (i < priv->region_channel[j].nrcfp); i++) { range->freq[range->num_frequency].i = (long)cfp->channel; range->freq[range->num_frequency].m = @@ -729,7 +714,7 @@ static int lbs_get_range(struct net_device *dev, struct iw_request_info *info, IW_EVENT_CAPA_MASK(SIOCGIWSCAN)); range->event_capa[1] = IW_EVENT_CAPA_K_1; - if (adapter->fwcapinfo & FW_CAPINFO_WPA) { + if (priv->fwcapinfo & FW_CAPINFO_WPA) { range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 | IW_ENC_CAPA_CIPHER_TKIP @@ -745,7 +730,6 @@ static int lbs_set_power(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -754,8 +738,8 @@ static int lbs_set_power(struct net_device *dev, struct iw_request_info *info, */ if (vwrq->disabled) { - adapter->psmode = LBS802_11POWERMODECAM; - if (adapter->psstate != PS_STATE_FULL_POWER) { + priv->psmode = LBS802_11POWERMODECAM; + if (priv->psstate != PS_STATE_FULL_POWER) { lbs_ps_wakeup(priv, CMD_OPTION_WAITFORRSP); } @@ -771,13 +755,13 @@ static int lbs_set_power(struct net_device *dev, struct iw_request_info *info, return -EINVAL; } - if (adapter->psmode != LBS802_11POWERMODECAM) { + if (priv->psmode != LBS802_11POWERMODECAM) { return 0; } - adapter->psmode = LBS802_11POWERMODEMAX_PSP; + priv->psmode = LBS802_11POWERMODEMAX_PSP; - if (adapter->connect_status == LBS_CONNECTED) { + if (priv->connect_status == LBS_CONNECTED) { lbs_ps_sleep(priv, CMD_OPTION_WAITFORRSP); } @@ -789,15 +773,14 @@ static int lbs_get_power(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; int mode; lbs_deb_enter(LBS_DEB_WEXT); - mode = adapter->psmode; + mode = priv->psmode; if ((vwrq->disabled = (mode == LBS802_11POWERMODECAM)) - || adapter->connect_status == LBS_DISCONNECTED) + || priv->connect_status == LBS_DISCONNECTED) { goto out; } @@ -820,7 +803,6 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) PERFECT = 100 }; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; u32 rssi_qual; u32 tx_qual; u32 quality = 0; @@ -830,23 +812,23 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) lbs_deb_enter(LBS_DEB_WEXT); - priv->wstats.status = adapter->mode; + priv->wstats.status = priv->mode; /* If we're not associated, all quality values are meaningless */ - if ((adapter->connect_status != LBS_CONNECTED) && - (adapter->mesh_connect_status != LBS_CONNECTED)) + if ((priv->connect_status != LBS_CONNECTED) && + (priv->mesh_connect_status != LBS_CONNECTED)) goto out; /* Quality by RSSI */ priv->wstats.qual.level = - CAL_RSSI(adapter->SNR[TYPE_BEACON][TYPE_NOAVG], - adapter->NF[TYPE_BEACON][TYPE_NOAVG]); + CAL_RSSI(priv->SNR[TYPE_BEACON][TYPE_NOAVG], + priv->NF[TYPE_BEACON][TYPE_NOAVG]); - if (adapter->NF[TYPE_BEACON][TYPE_NOAVG] == 0) { + if (priv->NF[TYPE_BEACON][TYPE_NOAVG] == 0) { priv->wstats.qual.noise = MRVDRV_NF_DEFAULT_SCAN_VALUE; } else { priv->wstats.qual.noise = - CAL_NF(adapter->NF[TYPE_BEACON][TYPE_NOAVG]); + CAL_NF(priv->NF[TYPE_BEACON][TYPE_NOAVG]); } lbs_deb_wext("signal level %#x\n", priv->wstats.qual.level); @@ -870,7 +852,7 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) /* Quality by TX errors */ priv->wstats.discard.retries = priv->stats.tx_errors; - tx_retries = le32_to_cpu(adapter->logmsg.retry); + tx_retries = le32_to_cpu(priv->logmsg.retry); if (tx_retries > 75) tx_qual = (90 - tx_retries) * POOR / 15; @@ -886,10 +868,10 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) (PERFECT - VERY_GOOD) / 50 + VERY_GOOD; quality = min(quality, tx_qual); - priv->wstats.discard.code = le32_to_cpu(adapter->logmsg.wepundecryptable); - priv->wstats.discard.fragment = le32_to_cpu(adapter->logmsg.rxfrag); + priv->wstats.discard.code = le32_to_cpu(priv->logmsg.wepundecryptable); + priv->wstats.discard.fragment = le32_to_cpu(priv->logmsg.rxfrag); priv->wstats.discard.retries = tx_retries; - priv->wstats.discard.misc = le32_to_cpu(adapter->logmsg.ackfailure); + priv->wstats.discard.misc = le32_to_cpu(priv->logmsg.ackfailure); /* Calculate quality */ priv->wstats.qual.qual = min_t(u8, quality, 100); @@ -924,14 +906,13 @@ static int lbs_set_freq(struct net_device *dev, struct iw_request_info *info, { int ret = -EINVAL; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct chan_freq_power *cfp; struct assoc_request * assoc_req; lbs_deb_enter(LBS_DEB_WEXT); - mutex_lock(&adapter->lock); - assoc_req = lbs_get_association_request(adapter); + mutex_lock(&priv->lock); + assoc_req = lbs_get_association_request(priv); if (!assoc_req) { ret = -ENOMEM; goto out; @@ -941,7 +922,7 @@ static int lbs_set_freq(struct net_device *dev, struct iw_request_info *info, if (fwrq->e == 1) { long f = fwrq->m / 100000; - cfp = find_cfp_by_band_and_freq(adapter, 0, f); + cfp = find_cfp_by_band_and_freq(priv, 0, f); if (!cfp) { lbs_deb_wext("invalid freq %ld\n", f); goto out; @@ -956,7 +937,7 @@ static int lbs_set_freq(struct net_device *dev, struct iw_request_info *info, goto out; } - cfp = lbs_find_cfp_by_band_and_channel(adapter, 0, fwrq->m); + cfp = lbs_find_cfp_by_band_and_channel(priv, 0, fwrq->m); if (!cfp) { goto out; } @@ -971,7 +952,7 @@ out: } else { lbs_cancel_association_work(priv); } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); return ret; @@ -981,7 +962,6 @@ static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; u32 new_rate; u16 action; int ret = -EINVAL; @@ -993,14 +973,14 @@ static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, /* Auto rate? */ if (vwrq->value == -1) { action = CMD_ACT_SET_TX_AUTO; - adapter->auto_rate = 1; - adapter->cur_rate = 0; + priv->auto_rate = 1; + priv->cur_rate = 0; } else { if (vwrq->value % 100000) goto out; memset(rates, 0, sizeof(rates)); - copy_active_data_rates(adapter, rates); + copy_active_data_rates(priv, rates); new_rate = vwrq->value / 500000; if (!memchr(rates, new_rate, sizeof(rates))) { lbs_pr_alert("fixed data rate 0x%X out of range\n", @@ -1008,9 +988,9 @@ static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, goto out; } - adapter->cur_rate = new_rate; + priv->cur_rate = new_rate; action = CMD_ACT_SET_TX_FIX_RATE; - adapter->auto_rate = 0; + priv->auto_rate = 0; } ret = lbs_prepare_and_send_command(priv, CMD_802_11_DATA_RATE, @@ -1025,14 +1005,13 @@ static int lbs_get_rate(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); - if (adapter->connect_status == LBS_CONNECTED) { - vwrq->value = adapter->cur_rate * 500000; + if (priv->connect_status == LBS_CONNECTED) { + vwrq->value = priv->cur_rate * 500000; - if (adapter->auto_rate) + if (priv->auto_rate) vwrq->fixed = 0; else vwrq->fixed = 1; @@ -1051,7 +1030,6 @@ static int lbs_set_mode(struct net_device *dev, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req; lbs_deb_enter(LBS_DEB_WEXT); @@ -1064,8 +1042,8 @@ static int lbs_set_mode(struct net_device *dev, goto out; } - mutex_lock(&adapter->lock); - assoc_req = lbs_get_association_request(adapter); + mutex_lock(&priv->lock); + assoc_req = lbs_get_association_request(priv); if (!assoc_req) { ret = -ENOMEM; lbs_cancel_association_work(priv); @@ -1075,7 +1053,7 @@ static int lbs_set_mode(struct net_device *dev, lbs_postpone_association_work(priv); lbs_deb_wext("Switching to mode: 0x%x\n", *uwrq); } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); out: lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); @@ -1097,18 +1075,17 @@ static int lbs_get_encode(struct net_device *dev, struct iw_point *dwrq, u8 * extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; int index = (dwrq->flags & IW_ENCODE_INDEX) - 1; lbs_deb_enter(LBS_DEB_WEXT); lbs_deb_wext("flags 0x%x, index %d, length %d, wep_tx_keyidx %d\n", - dwrq->flags, index, dwrq->length, adapter->wep_tx_keyidx); + dwrq->flags, index, dwrq->length, priv->wep_tx_keyidx); dwrq->flags = 0; /* Authentication method */ - switch (adapter->secinfo.auth_mode) { + switch (priv->secinfo.auth_mode) { case IW_AUTH_ALG_OPEN_SYSTEM: dwrq->flags = IW_ENCODE_OPEN; break; @@ -1124,22 +1101,22 @@ static int lbs_get_encode(struct net_device *dev, memset(extra, 0, 16); - mutex_lock(&adapter->lock); + mutex_lock(&priv->lock); /* Default to returning current transmit key */ if (index < 0) - index = adapter->wep_tx_keyidx; + index = priv->wep_tx_keyidx; - if ((adapter->wep_keys[index].len) && adapter->secinfo.wep_enabled) { - memcpy(extra, adapter->wep_keys[index].key, - adapter->wep_keys[index].len); - dwrq->length = adapter->wep_keys[index].len; + if ((priv->wep_keys[index].len) && priv->secinfo.wep_enabled) { + memcpy(extra, priv->wep_keys[index].key, + priv->wep_keys[index].len); + dwrq->length = priv->wep_keys[index].len; dwrq->flags |= (index + 1); /* Return WEP enabled */ dwrq->flags &= ~IW_ENCODE_DISABLED; - } else if ((adapter->secinfo.WPAenabled) - || (adapter->secinfo.WPA2enabled)) { + } else if ((priv->secinfo.WPAenabled) + || (priv->secinfo.WPA2enabled)) { /* return WPA enabled */ dwrq->flags &= ~IW_ENCODE_DISABLED; dwrq->flags |= IW_ENCODE_NOKEY; @@ -1147,7 +1124,7 @@ static int lbs_get_encode(struct net_device *dev, dwrq->flags |= IW_ENCODE_DISABLED; } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_wext("key: %02x:%02x:%02x:%02x:%02x:%02x, keylen %d\n", extra[0], extra[1], extra[2], @@ -1293,14 +1270,13 @@ static int lbs_set_encode(struct net_device *dev, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req; u16 is_default = 0, index = 0, set_tx_key = 0; lbs_deb_enter(LBS_DEB_WEXT); - mutex_lock(&adapter->lock); - assoc_req = lbs_get_association_request(adapter); + mutex_lock(&priv->lock); + assoc_req = lbs_get_association_request(priv); if (!assoc_req) { ret = -ENOMEM; goto out; @@ -1348,7 +1324,7 @@ out: } else { lbs_cancel_association_work(priv); } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); return ret; @@ -1370,7 +1346,6 @@ static int lbs_get_encodeext(struct net_device *dev, { int ret = -EINVAL; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; int index, max_key_len; @@ -1386,46 +1361,46 @@ static int lbs_get_encodeext(struct net_device *dev, goto out; index--; } else { - index = adapter->wep_tx_keyidx; + index = priv->wep_tx_keyidx; } if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) && ext->alg != IW_ENCODE_ALG_WEP) { - if (index != 0 || adapter->mode != IW_MODE_INFRA) + if (index != 0 || priv->mode != IW_MODE_INFRA) goto out; } dwrq->flags = index + 1; memset(ext, 0, sizeof(*ext)); - if ( !adapter->secinfo.wep_enabled - && !adapter->secinfo.WPAenabled - && !adapter->secinfo.WPA2enabled) { + if ( !priv->secinfo.wep_enabled + && !priv->secinfo.WPAenabled + && !priv->secinfo.WPA2enabled) { ext->alg = IW_ENCODE_ALG_NONE; ext->key_len = 0; dwrq->flags |= IW_ENCODE_DISABLED; } else { u8 *key = NULL; - if ( adapter->secinfo.wep_enabled - && !adapter->secinfo.WPAenabled - && !adapter->secinfo.WPA2enabled) { + if ( priv->secinfo.wep_enabled + && !priv->secinfo.WPAenabled + && !priv->secinfo.WPA2enabled) { /* WEP */ ext->alg = IW_ENCODE_ALG_WEP; - ext->key_len = adapter->wep_keys[index].len; - key = &adapter->wep_keys[index].key[0]; - } else if ( !adapter->secinfo.wep_enabled - && (adapter->secinfo.WPAenabled || - adapter->secinfo.WPA2enabled)) { + ext->key_len = priv->wep_keys[index].len; + key = &priv->wep_keys[index].key[0]; + } else if ( !priv->secinfo.wep_enabled + && (priv->secinfo.WPAenabled || + priv->secinfo.WPA2enabled)) { /* WPA */ struct enc_key * pkey = NULL; - if ( adapter->wpa_mcast_key.len - && (adapter->wpa_mcast_key.flags & KEY_INFO_WPA_ENABLED)) - pkey = &adapter->wpa_mcast_key; - else if ( adapter->wpa_unicast_key.len - && (adapter->wpa_unicast_key.flags & KEY_INFO_WPA_ENABLED)) - pkey = &adapter->wpa_unicast_key; + if ( priv->wpa_mcast_key.len + && (priv->wpa_mcast_key.flags & KEY_INFO_WPA_ENABLED)) + pkey = &priv->wpa_mcast_key; + else if ( priv->wpa_unicast_key.len + && (priv->wpa_unicast_key.flags & KEY_INFO_WPA_ENABLED)) + pkey = &priv->wpa_unicast_key; if (pkey) { if (pkey->type == KEY_TYPE_ID_AES) { @@ -1477,15 +1452,14 @@ static int lbs_set_encodeext(struct net_device *dev, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; int alg = ext->alg; struct assoc_request * assoc_req; lbs_deb_enter(LBS_DEB_WEXT); - mutex_lock(&adapter->lock); - assoc_req = lbs_get_association_request(adapter); + mutex_lock(&priv->lock); + assoc_req = lbs_get_association_request(priv); if (!assoc_req) { ret = -ENOMEM; goto out; @@ -1589,7 +1563,7 @@ out: } else { lbs_cancel_association_work(priv); } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); return ret; @@ -1602,14 +1576,13 @@ static int lbs_set_genie(struct net_device *dev, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; int ret = 0; struct assoc_request * assoc_req; lbs_deb_enter(LBS_DEB_WEXT); - mutex_lock(&adapter->lock); - assoc_req = lbs_get_association_request(adapter); + mutex_lock(&priv->lock); + assoc_req = lbs_get_association_request(priv); if (!assoc_req) { ret = -ENOMEM; goto out; @@ -1625,7 +1598,7 @@ static int lbs_set_genie(struct net_device *dev, memcpy(&assoc_req->wpa_ie[0], extra, dwrq->length); assoc_req->wpa_ie_len = dwrq->length; } else { - memset(&assoc_req->wpa_ie[0], 0, sizeof(adapter->wpa_ie)); + memset(&assoc_req->wpa_ie[0], 0, sizeof(priv->wpa_ie)); assoc_req->wpa_ie_len = 0; } @@ -1636,7 +1609,7 @@ out: } else { lbs_cancel_association_work(priv); } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); return ret; @@ -1649,22 +1622,21 @@ static int lbs_get_genie(struct net_device *dev, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); - if (adapter->wpa_ie_len == 0) { + if (priv->wpa_ie_len == 0) { dwrq->length = 0; goto out; } - if (dwrq->length < adapter->wpa_ie_len) { + if (dwrq->length < priv->wpa_ie_len) { ret = -E2BIG; goto out; } - dwrq->length = adapter->wpa_ie_len; - memcpy(extra, &adapter->wpa_ie[0], adapter->wpa_ie_len); + dwrq->length = priv->wpa_ie_len; + memcpy(extra, &priv->wpa_ie[0], priv->wpa_ie_len); out: lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); @@ -1678,15 +1650,14 @@ static int lbs_set_auth(struct net_device *dev, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req; int ret = 0; int updated = 0; lbs_deb_enter(LBS_DEB_WEXT); - mutex_lock(&adapter->lock); - assoc_req = lbs_get_association_request(adapter); + mutex_lock(&priv->lock); + assoc_req = lbs_get_association_request(priv); if (!assoc_req) { ret = -ENOMEM; goto out; @@ -1765,7 +1736,7 @@ out: } else if (ret != -EOPNOTSUPP) { lbs_cancel_association_work(priv); } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); return ret; @@ -1778,27 +1749,26 @@ static int lbs_get_auth(struct net_device *dev, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); switch (dwrq->flags & IW_AUTH_INDEX) { case IW_AUTH_WPA_VERSION: dwrq->value = 0; - if (adapter->secinfo.WPAenabled) + if (priv->secinfo.WPAenabled) dwrq->value |= IW_AUTH_WPA_VERSION_WPA; - if (adapter->secinfo.WPA2enabled) + if (priv->secinfo.WPA2enabled) dwrq->value |= IW_AUTH_WPA_VERSION_WPA2; if (!dwrq->value) dwrq->value |= IW_AUTH_WPA_VERSION_DISABLED; break; case IW_AUTH_80211_AUTH_ALG: - dwrq->value = adapter->secinfo.auth_mode; + dwrq->value = priv->secinfo.auth_mode; break; case IW_AUTH_WPA_ENABLED: - if (adapter->secinfo.WPAenabled && adapter->secinfo.WPA2enabled) + if (priv->secinfo.WPAenabled && priv->secinfo.WPA2enabled) dwrq->value = 1; break; @@ -1816,7 +1786,6 @@ static int lbs_set_txpow(struct net_device *dev, struct iw_request_info *info, { int ret = 0; struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; u16 dbm; @@ -1827,7 +1796,7 @@ static int lbs_set_txpow(struct net_device *dev, struct iw_request_info *info, return 0; } - adapter->preamble = CMD_TYPE_AUTO_PREAMBLE; + priv->preamble = CMD_TYPE_AUTO_PREAMBLE; lbs_radio_ioctl(priv, RADIO_ON); @@ -1858,7 +1827,6 @@ static int lbs_get_essid(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; lbs_deb_enter(LBS_DEB_WEXT); @@ -1870,19 +1838,19 @@ static int lbs_get_essid(struct net_device *dev, struct iw_request_info *info, /* * Get the current SSID */ - if (adapter->connect_status == LBS_CONNECTED) { - memcpy(extra, adapter->curbssparams.ssid, - adapter->curbssparams.ssid_len); - extra[adapter->curbssparams.ssid_len] = '\0'; + if (priv->connect_status == LBS_CONNECTED) { + memcpy(extra, priv->curbssparams.ssid, + priv->curbssparams.ssid_len); + extra[priv->curbssparams.ssid_len] = '\0'; } else { memset(extra, 0, 32); - extra[adapter->curbssparams.ssid_len] = '\0'; + extra[priv->curbssparams.ssid_len] = '\0'; } /* * If none, we may want to get the one that was set */ - dwrq->length = adapter->curbssparams.ssid_len; + dwrq->length = priv->curbssparams.ssid_len; dwrq->flags = 1; /* active */ @@ -1894,7 +1862,6 @@ static int lbs_set_essid(struct net_device *dev, struct iw_request_info *info, struct iw_point *dwrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; int ret = 0; u8 ssid[IW_ESSID_MAX_SIZE]; u8 ssid_len = 0; @@ -1927,10 +1894,10 @@ static int lbs_set_essid(struct net_device *dev, struct iw_request_info *info, } out: - mutex_lock(&adapter->lock); + mutex_lock(&priv->lock); if (ret == 0) { /* Get or create the current association request */ - assoc_req = lbs_get_association_request(adapter); + assoc_req = lbs_get_association_request(priv); if (!assoc_req) { ret = -ENOMEM; } else { @@ -1947,7 +1914,7 @@ out: lbs_cancel_association_work(priv); } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); return ret; @@ -1966,7 +1933,6 @@ static int lbs_set_wap(struct net_device *dev, struct iw_request_info *info, struct sockaddr *awrq, char *extra) { struct lbs_private *priv = dev->priv; - struct lbs_adapter *adapter = priv->adapter; struct assoc_request * assoc_req; int ret = 0; DECLARE_MAC_BUF(mac); @@ -1978,10 +1944,10 @@ static int lbs_set_wap(struct net_device *dev, struct iw_request_info *info, lbs_deb_wext("ASSOC: WAP: sa_data %s\n", print_mac(mac, awrq->sa_data)); - mutex_lock(&adapter->lock); + mutex_lock(&priv->lock); /* Get or create the current association request */ - assoc_req = lbs_get_association_request(adapter); + assoc_req = lbs_get_association_request(priv); if (!assoc_req) { lbs_cancel_association_work(priv); ret = -ENOMEM; @@ -1992,30 +1958,30 @@ static int lbs_set_wap(struct net_device *dev, struct iw_request_info *info, lbs_postpone_association_work(priv); } - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); return ret; } -void lbs_get_fwversion(struct lbs_adapter *adapter, char *fwversion, int maxlen) +void lbs_get_fwversion(struct lbs_private *priv, char *fwversion, int maxlen) { char fwver[32]; - mutex_lock(&adapter->lock); + mutex_lock(&priv->lock); - if (adapter->fwreleasenumber[3] == 0) + if (priv->fwreleasenumber[3] == 0) sprintf(fwver, "%u.%u.%u", - adapter->fwreleasenumber[2], - adapter->fwreleasenumber[1], - adapter->fwreleasenumber[0]); + priv->fwreleasenumber[2], + priv->fwreleasenumber[1], + priv->fwreleasenumber[0]); else sprintf(fwver, "%u.%u.%u.p%u", - adapter->fwreleasenumber[2], - adapter->fwreleasenumber[1], - adapter->fwreleasenumber[0], - adapter->fwreleasenumber[3]); + priv->fwreleasenumber[2], + priv->fwreleasenumber[1], + priv->fwreleasenumber[0], + priv->fwreleasenumber[3]); - mutex_unlock(&adapter->lock); + mutex_unlock(&priv->lock); snprintf(fwversion, maxlen, fwver); } -- cgit v1.2.3-70-g09d2 From a63b22bb5bb58d7a1d1b38aeac9a55c51565131c Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 8 Dec 2007 20:56:44 +0000 Subject: libertas: use lbs_host_to_card_done() in lbs_tx_timeout() Also attempt some locking in lbs_host_to_card_done() Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 40 +++++++++++++++--------------------- 1 file changed, 17 insertions(+), 23 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 243cdea419c..2ff5f1b77b1 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -601,31 +601,24 @@ static void lbs_tx_timeout(struct net_device *dev) lbs_pr_err("tx watch dog timeout\n"); - priv->dnld_sent = DNLD_RES_RECEIVED; dev->trans_start = jiffies; if (priv->currenttxskb) { - if (priv->monitormode != LBS_MONITOR_OFF) { - /* If we are here, we have not received feedback from - the previous packet. Assume TX_FAIL and move on. */ - priv->eventcause = 0x01000000; - lbs_send_tx_feedback(priv); - } else - wake_up_interruptible(&priv->waitq); - } else if (dev == priv->dev) { - if (priv->connect_status == LBS_CONNECTED) - netif_wake_queue(priv->dev); - - } else if (dev == priv->mesh_dev) { - if (priv->mesh_connect_status == LBS_CONNECTED) - netif_wake_queue(priv->mesh_dev); + priv->eventcause = 0x01000000; + lbs_send_tx_feedback(priv); } + /* XX: Shouldn't we also call into the hw-specific driver + to kick it somehow? */ + lbs_host_to_card_done(priv); lbs_deb_leave(LBS_DEB_TX); } void lbs_host_to_card_done(struct lbs_private *priv) { + unsigned long flags; + + spin_lock_irqsave(&priv->driver_lock, flags); priv->dnld_sent = DNLD_RES_RECEIVED; @@ -634,15 +627,16 @@ void lbs_host_to_card_done(struct lbs_private *priv) wake_up_interruptible(&priv->waitq); /* Don't wake netif queues if we're in monitor mode and - a TX packet is already pending. */ - if (priv->currenttxskb) - return; - - if (priv->dev && priv->connect_status == LBS_CONNECTED) - netif_wake_queue(priv->dev); + a TX packet is already pending, or if there are commands + queued to be sent. */ + if (!priv->currenttxskb && list_empty(&priv->cmdpendingq)) { + if (priv->dev && priv->connect_status == LBS_CONNECTED) + netif_wake_queue(priv->dev); - if (priv->mesh_dev && priv->mesh_connect_status == LBS_CONNECTED) - netif_wake_queue(priv->mesh_dev); + if (priv->mesh_dev && priv->mesh_connect_status == LBS_CONNECTED) + netif_wake_queue(priv->mesh_dev); + } + spin_unlock_irqrestore(&priv->driver_lock, flags); } EXPORT_SYMBOL_GPL(lbs_host_to_card_done); -- cgit v1.2.3-70-g09d2 From 2abdc0b7756ece70b1f0fd65a651bf8ce487a223 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 9 Dec 2007 12:37:27 -0500 Subject: libertas: kill internal tx queue for PS mode It was buggy as hell anyway, since it was just spewing packets at the device when it wasn't necessarily ready for them (in the USB case, while the URB was still busy). We could probably do with a better way of flushing packets to the device _immediately_, before we stick it back into sleep mode. But we can no longer just dequeue packets directly, it seems. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/decl.h | 2 -- drivers/net/wireless/libertas/dev.h | 5 ----- drivers/net/wireless/libertas/main.c | 6 ------ drivers/net/wireless/libertas/tx.c | 40 +++--------------------------------- 4 files changed, 3 insertions(+), 50 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h index e255b191574..b0945140ba1 100644 --- a/drivers/net/wireless/libertas/decl.h +++ b/drivers/net/wireless/libertas/decl.h @@ -62,8 +62,6 @@ void lbs_ps_sleep(struct lbs_private *priv, int wait_option); void lbs_ps_confirm_sleep(struct lbs_private *priv, u16 psmode); void lbs_ps_wakeup(struct lbs_private *priv, int wait_option); -void lbs_tx_runqueue(struct lbs_private *priv); - struct chan_freq_power *lbs_find_cfp_by_band_and_channel( struct lbs_private *priv, u8 band, diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 21b0d382096..a9c3adc421b 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -197,11 +197,6 @@ struct lbs_private { /** Timers */ struct timer_list command_timer; - /* TX queue used in PS mode */ - spinlock_t txqueue_lock; - struct sk_buff *tx_queue_ps[NR_TX_QUEUE]; - unsigned int tx_queue_idx; - u8 hisregcpy; /** current ssid/bssid related parameters*/ diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 2ff5f1b77b1..c6389951824 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -914,8 +914,6 @@ static int lbs_thread(void *data) */ if (!list_empty(&priv->cmdpendingq)) wake_up_all(&priv->cmd_pending); - - lbs_tx_runqueue(priv); } del_timer(&priv->command_timer); @@ -1072,10 +1070,6 @@ static int lbs_init_adapter(struct lbs_private *priv) mutex_init(&priv->lock); - memset(&priv->tx_queue_ps, 0, NR_TX_QUEUE*sizeof(struct sk_buff*)); - priv->tx_queue_idx = 0; - spin_lock_init(&priv->txqueue_lock); - setup_timer(&priv->command_timer, command_timer_fn, (unsigned long)priv); diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c index 4cb39d33003..749535e3f77 100644 --- a/drivers/net/wireless/libertas/tx.c +++ b/drivers/net/wireless/libertas/tx.c @@ -164,41 +164,6 @@ done: } -void lbs_tx_runqueue(struct lbs_private *priv) -{ - int i; - - spin_lock(&priv->txqueue_lock); - for (i = 0; i < priv->tx_queue_idx; i++) { - struct sk_buff *skb = priv->tx_queue_ps[i]; - spin_unlock(&priv->txqueue_lock); - SendSinglePacket(priv, skb); - spin_lock(&priv->txqueue_lock); - } - priv->tx_queue_idx = 0; - spin_unlock(&priv->txqueue_lock); -} - -static void lbs_tx_queue(struct lbs_private *priv, struct sk_buff *skb) -{ - - spin_lock(&priv->txqueue_lock); - - WARN_ON(priv->tx_queue_idx >= NR_TX_QUEUE); - priv->tx_queue_ps[priv->tx_queue_idx++] = skb; - if (priv->tx_queue_idx == NR_TX_QUEUE) { - netif_stop_queue(priv->dev); - if (priv->mesh_dev) - netif_stop_queue(priv->mesh_dev); - } else { - netif_start_queue(priv->dev); - if (priv->mesh_dev) - netif_start_queue(priv->mesh_dev); - } - - spin_unlock(&priv->txqueue_lock); -} - /** * @brief This function checks the conditions and sends packet to IF * layer if everything is ok. @@ -221,8 +186,9 @@ int lbs_process_tx(struct lbs_private *priv, struct sk_buff *skb) if ((priv->psstate == PS_STATE_SLEEP) || (priv->psstate == PS_STATE_PRE_SLEEP)) { - lbs_tx_queue(priv, skb); - return ret; + lbs_pr_alert("TX error: packet xmit in %ssleep mode\n", + priv->psstate == PS_STATE_SLEEP?"":"pre-"); + goto done; } ret = SendSinglePacket(priv, skb); -- cgit v1.2.3-70-g09d2 From a9bdce6564b25268af7315d3dd17f4f5b6435a45 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 9 Dec 2007 12:52:19 -0500 Subject: libertas: move lbs_hard_start_xmit() into tx.c ... where it can shortly be merged with lbs_process_tx()... Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/decl.h | 2 +- drivers/net/wireless/libertas/main.c | 32 -------------------------------- drivers/net/wireless/libertas/tx.c | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 34 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h index b0945140ba1..fcb5a851290 100644 --- a/drivers/net/wireless/libertas/decl.h +++ b/drivers/net/wireless/libertas/decl.h @@ -50,10 +50,10 @@ void lbs_upload_rx_packet(struct lbs_private *priv, struct sk_buff *skb); /** The proc fs interface */ int lbs_process_rx_command(struct lbs_private *priv); -int lbs_process_tx(struct lbs_private *priv, struct sk_buff *skb); void __lbs_cleanup_and_insert_cmd(struct lbs_private *priv, struct cmd_ctrl_node *ptempcmd); +int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev); int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band); int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index c6389951824..d311d5773f0 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -515,38 +515,6 @@ static int lbs_close(struct net_device *dev) return 0; } - -static int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) -{ - int ret = 0; - struct lbs_private *priv = dev->priv; - - lbs_deb_enter(LBS_DEB_TX); - - /* We could return NETDEV_TX_BUSY here, but I'd actually - like to get the point where we can BUG() */ - if (priv->dnld_sent) { - lbs_pr_err("%s while dnld_sent\n", __func__); - priv->stats.tx_dropped++; - goto done; - } - if (priv->currenttxskb) { - lbs_pr_err("%s while TX skb pending\n", __func__); - priv->stats.tx_dropped++; - goto done; - } - - netif_stop_queue(priv->dev); - if (priv->mesh_dev) - netif_stop_queue(priv->mesh_dev); - - if (lbs_process_tx(priv, skb) == 0) - dev->trans_start = jiffies; -done: - lbs_deb_leave_args(LBS_DEB_TX, "ret %d", ret); - return ret; -} - /** * @brief Mark mesh packets and handover them to lbs_hard_start_xmit * diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c index 10596f3bb59..336544cdeca 100644 --- a/drivers/net/wireless/libertas/tx.c +++ b/drivers/net/wireless/libertas/tx.c @@ -56,7 +56,7 @@ static u32 convert_radiotap_rate_to_mv(u8 rate) * @param skb A pointer to skb which includes TX packet * @return 0 or -1 */ -int lbs_process_tx(struct lbs_private *priv, struct sk_buff *skb) +static int lbs_process_tx(struct lbs_private *priv, struct sk_buff *skb) { int ret = -1; struct txpd localtxpd; @@ -179,6 +179,37 @@ done: return ret; } +int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +{ + int ret = 0; + struct lbs_private *priv = dev->priv; + + lbs_deb_enter(LBS_DEB_TX); + + /* We could return NETDEV_TX_BUSY here, but I'd actually + like to get the point where we can BUG() */ + if (priv->dnld_sent) { + lbs_pr_err("%s while dnld_sent\n", __func__); + priv->stats.tx_dropped++; + goto done; + } + if (priv->currenttxskb) { + lbs_pr_err("%s while TX skb pending\n", __func__); + priv->stats.tx_dropped++; + goto done; + } + + netif_stop_queue(priv->dev); + if (priv->mesh_dev) + netif_stop_queue(priv->mesh_dev); + + if (lbs_process_tx(priv, skb) == 0) + dev->trans_start = jiffies; +done: + lbs_deb_leave_args(LBS_DEB_TX, "ret %d", ret); + return ret; +} + /** * @brief This function sends to the host the last transmitted packet, * filling the radiotap headers with transmission information. -- cgit v1.2.3-70-g09d2 From 198cefb9320ea0aa1be43a93b398435447583081 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 9 Dec 2007 15:04:19 -0500 Subject: libertas: kill lbs_pre_start_xmit(), lib_mesh_pre_start_xmit() These wrappers only do two things. Firstly, they set the frame type, which isn't necessary since lbs_hard_start_xmit() gets to see which device it belongs to anyway. Secondly, they return -EOPNOTSUPP if the device is in monitor mode. Which is a strange thing to do and will provide nasty warnings from qdisc_restart(). And lbs_hard_start_xmit() seems to have code to cope with monitor mode anyway. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 50 ++---------------------------------- 1 file changed, 2 insertions(+), 48 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index d311d5773f0..5c8cb0079d4 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -515,52 +515,6 @@ static int lbs_close(struct net_device *dev) return 0; } -/** - * @brief Mark mesh packets and handover them to lbs_hard_start_xmit - * - */ -static int lbs_mesh_pre_start_xmit(struct sk_buff *skb, - struct net_device *dev) -{ - struct lbs_private *priv = dev->priv; - int ret; - - lbs_deb_enter(LBS_DEB_MESH); - if (priv->monitormode != LBS_MONITOR_OFF) { - netif_stop_queue(dev); - return -EOPNOTSUPP; - } - - SET_MESH_FRAME(skb); - - ret = lbs_hard_start_xmit(skb, priv->mesh_dev); - lbs_deb_leave_args(LBS_DEB_MESH, "ret %d", ret); - return ret; -} - -/** - * @brief Mark non-mesh packets and handover them to lbs_hard_start_xmit - * - */ -static int lbs_pre_start_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct lbs_private *priv = dev->priv; - int ret; - - lbs_deb_enter(LBS_DEB_TX); - - if (priv->monitormode != LBS_MONITOR_OFF) { - netif_stop_queue(dev); - return -EOPNOTSUPP; - } - - UNSET_MESH_FRAME(skb); - - ret = lbs_hard_start_xmit(skb, dev); - lbs_deb_leave_args(LBS_DEB_TX, "ret %d", ret); - return ret; -} - static void lbs_tx_timeout(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) dev->priv; @@ -1104,7 +1058,7 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) /* Setup the OS Interface to our functions */ dev->open = lbs_open; - dev->hard_start_xmit = lbs_pre_start_xmit; + dev->hard_start_xmit = lbs_hard_start_xmit; dev->stop = lbs_close; dev->set_mac_address = lbs_set_mac_address; dev->tx_timeout = lbs_tx_timeout; @@ -1276,7 +1230,7 @@ int lbs_add_mesh(struct lbs_private *priv, struct device *dev) priv->mesh_dev = mesh_dev; mesh_dev->open = lbs_mesh_open; - mesh_dev->hard_start_xmit = lbs_mesh_pre_start_xmit; + mesh_dev->hard_start_xmit = lbs_hard_start_xmit; mesh_dev->stop = lbs_mesh_close; mesh_dev->get_stats = lbs_get_stats; mesh_dev->set_mac_address = lbs_set_mac_address; -- cgit v1.2.3-70-g09d2 From d9268fb9a124d067cf93710a85bb6c158d131c97 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 9 Dec 2007 16:22:21 -0500 Subject: libertas: stop using ieee80211 for radiotap device There seems to be no point in doing it as an ieee80211 device instead of a normal netdev, and when we override its ->priv and then call free_ieee80211() it has a distressing tendency to crash horribly. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/dev.h | 2 -- drivers/net/wireless/libertas/main.c | 36 +++++++++++++++--------------------- 2 files changed, 15 insertions(+), 23 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index a9c3adc421b..04cf33da589 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -10,7 +10,6 @@ #include #include #include -#include #include "defs.h" #include "scan.h" @@ -114,7 +113,6 @@ struct lbs_private { struct net_device_stats stats; struct net_device *mesh_dev; /* Virtual device */ struct net_device *rtap_net_dev; - struct ieee80211_device *ieee; struct iw_statistics wstats; struct lbs_mesh_stats mstats; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 5c8cb0079d4..55dce8dbd0d 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1448,7 +1448,7 @@ static int lbs_rtap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) static struct net_device_stats *lbs_rtap_get_stats(struct net_device *dev) { struct lbs_private *priv = dev->priv; - return &priv->ieee->stats; + return &priv->stats; } @@ -1457,42 +1457,36 @@ void lbs_remove_rtap(struct lbs_private *priv) if (priv->rtap_net_dev == NULL) return; unregister_netdev(priv->rtap_net_dev); - free_ieee80211(priv->rtap_net_dev); + free_netdev(priv->rtap_net_dev); priv->rtap_net_dev = NULL; } int lbs_add_rtap(struct lbs_private *priv) { int rc = 0; + struct net_device *rtap_dev; if (priv->rtap_net_dev) return -EPERM; - priv->rtap_net_dev = alloc_ieee80211(0); - if (priv->rtap_net_dev == NULL) + rtap_dev = alloc_netdev(0, "rtap%d", ether_setup); + if (rtap_dev == NULL) return -ENOMEM; + rtap_dev->type = ARPHRD_IEEE80211_RADIOTAP; + rtap_dev->open = lbs_rtap_open; + rtap_dev->stop = lbs_rtap_stop; + rtap_dev->get_stats = lbs_rtap_get_stats; + rtap_dev->hard_start_xmit = lbs_rtap_hard_start_xmit; + rtap_dev->set_multicast_list = lbs_set_multicast_list; + rtap_dev->priv = priv; - priv->ieee = netdev_priv(priv->rtap_net_dev); - - strcpy(priv->rtap_net_dev->name, "rtap%d"); - - priv->rtap_net_dev->type = ARPHRD_IEEE80211_RADIOTAP; - priv->rtap_net_dev->open = lbs_rtap_open; - priv->rtap_net_dev->stop = lbs_rtap_stop; - priv->rtap_net_dev->get_stats = lbs_rtap_get_stats; - priv->rtap_net_dev->hard_start_xmit = lbs_rtap_hard_start_xmit; - priv->rtap_net_dev->set_multicast_list = lbs_set_multicast_list; - priv->rtap_net_dev->priv = priv; - - priv->ieee->iw_mode = IW_MODE_MONITOR; - - rc = register_netdev(priv->rtap_net_dev); + rc = register_netdev(rtap_dev); if (rc) { - free_ieee80211(priv->rtap_net_dev); - priv->rtap_net_dev = NULL; + free_netdev(rtap_dev); return rc; } + priv->rtap_net_dev = rtap_dev; return 0; } -- cgit v1.2.3-70-g09d2 From 121947c62ab049bfaeb8fadc9908834b5a99daf0 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 9 Dec 2007 19:54:11 -0500 Subject: libertas: set dev_addr on rtap device This lets us bring it up, because eth_validate_addr() succeeds instead of returning -EINVAL. And finally monitor mode seems to (mostly) work. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 55dce8dbd0d..e9c6b4ffd8e 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1473,6 +1473,7 @@ int lbs_add_rtap(struct lbs_private *priv) if (rtap_dev == NULL) return -ENOMEM; + memcpy(rtap_dev->dev_addr, priv->current_addr, ETH_ALEN); rtap_dev->type = ARPHRD_IEEE80211_RADIOTAP; rtap_dev->open = lbs_rtap_open; rtap_dev->stop = lbs_rtap_stop; -- cgit v1.2.3-70-g09d2 From b8d40bc9c9099943cbcf18d285bf241f1f080a44 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 9 Dec 2007 23:44:43 -0500 Subject: libertas: refactor the 'should I sleep?' decision in lbs_thread() This was making my brain hurt. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index e9c6b4ffd8e..42b64b5ad08 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -722,6 +722,8 @@ static int lbs_thread(void *data) set_freezable(); for (;;) { + int shouldsleep; + lbs_deb_thread( "main-thread 111: intcounter=%d currenttxskb=%p dnld_sent=%d\n", priv->intcounter, priv->currenttxskb, priv->dnld_sent); @@ -729,8 +731,22 @@ static int lbs_thread(void *data) set_current_state(TASK_INTERRUPTIBLE); spin_lock_irq(&priv->driver_lock); - if ((priv->psstate == PS_STATE_SLEEP) || - (!priv->intcounter && (priv->dnld_sent || priv->cur_cmd || list_empty(&priv->cmdpendingq)))) { + if (priv->surpriseremoved) + shouldsleep = 0; /* Bye */ + else if (priv->psstate == PS_STATE_SLEEP) + shouldsleep = 1; /* Sleep mode. Nothing we can do till it wakes */ + else if (priv->intcounter) + shouldsleep = 0; /* Interrupt pending. Deal with it now */ + else if (priv->dnld_sent) + shouldsleep = 1; /* Something is en route to the device already */ + else if (priv->cur_cmd) + shouldsleep = 1; /* Can't send a command; one already running */ + else if (!list_empty(&priv->cmdpendingq)) + shouldsleep = 0; /* We have a command to send */ + else + shouldsleep = 1; /* No command */ + + if (shouldsleep) { lbs_deb_thread("main-thread sleeping... Conn=%d IntC=%d PS_mode=%d PS_State=%d\n", priv->connect_status, priv->intcounter, priv->psmode, priv->psstate); -- cgit v1.2.3-70-g09d2 From 2eb188a1c57ae79283cee951c317bd191cf1ca56 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 9 Dec 2007 23:54:27 -0500 Subject: libertas: Move actual transmission to main thread The locking issues with TX, especially TX from multiple netdevs, get _so_ much easier if you do it like this. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/dev.h | 5 +- drivers/net/wireless/libertas/main.c | 24 ++++++++ drivers/net/wireless/libertas/tx.c | 103 +++++++++++++++-------------------- 3 files changed, 71 insertions(+), 61 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 04cf33da589..468140512a6 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -164,7 +164,10 @@ struct lbs_private { struct mutex lock; - u8 tmptxbuf[LBS_UPLD_SIZE]; + /* TX packet ready to be sent... */ + int tx_pending_len; /* -1 while building packet */ + + u8 tx_pending_buf[LBS_UPLD_SIZE]; /* protected by hard_start_xmit serialization */ /** command-related variables */ diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 42b64b5ad08..f16c93ba6ef 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -739,6 +739,8 @@ static int lbs_thread(void *data) shouldsleep = 0; /* Interrupt pending. Deal with it now */ else if (priv->dnld_sent) shouldsleep = 1; /* Something is en route to the device already */ + else if (priv->tx_pending_len > 0) + shouldsleep = 0; /* We've a packet to send */ else if (priv->cur_cmd) shouldsleep = 1; /* Can't send a command; one already running */ else if (!list_empty(&priv->cmdpendingq)) @@ -852,6 +854,28 @@ static int lbs_thread(void *data) */ if (!list_empty(&priv->cmdpendingq)) wake_up_all(&priv->cmd_pending); + + spin_lock_irq(&priv->driver_lock); + if (!priv->dnld_sent && priv->tx_pending_len > 0) { + int ret = priv->hw_host_to_card(priv, MVMS_DAT, + priv->tx_pending_buf, + priv->tx_pending_len); + if (ret) { + lbs_deb_tx("host_to_card failed %d\n", ret); + priv->dnld_sent = DNLD_RES_RECEIVED; + } + priv->tx_pending_len = 0; + if (!priv->currenttxskb) { + /* We can wake the queues immediately if we aren't + waiting for TX feedback */ + if (priv->connect_status == LBS_CONNECTED) + netif_wake_queue(priv->dev); + if (priv->mesh_dev && + priv->mesh_connect_status == LBS_CONNECTED) + netif_wake_queue(priv->mesh_dev); + } + } + spin_unlock_irq(&priv->driver_lock); } del_timer(&priv->command_timer); diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c index 300aa05edeb..e2141f0a67d 100644 --- a/drivers/net/wireless/libertas/tx.c +++ b/drivers/net/wireless/libertas/tx.c @@ -67,39 +67,45 @@ int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) lbs_deb_enter(LBS_DEB_TX); - ret = NETDEV_TX_BUSY; - - if (priv->dnld_sent) { - lbs_pr_alert( "TX error: dnld_sent = %d, not sending\n", - priv->dnld_sent); - goto done; - } - - if (priv->currenttxskb) { - lbs_pr_err("%s while TX skb pending\n", __func__); - goto done; - } + ret = NETDEV_TX_OK; - if ((priv->psstate == PS_STATE_SLEEP) || - (priv->psstate == PS_STATE_PRE_SLEEP)) { - lbs_pr_alert("TX error: packet xmit in %ssleep mode\n", - priv->psstate == PS_STATE_SLEEP?"":"pre-"); - goto done; - } + /* We need to protect against the queues being restarted before + we get round to stopping them */ + spin_lock_irqsave(&priv->driver_lock, flags); if (priv->surpriseremoved) - goto drop; + goto free; if (!skb->len || (skb->len > MRVDRV_ETH_TX_PACKET_BUFFER_SIZE)) { lbs_deb_tx("tx err: skb length %d 0 or > %zd\n", skb->len, MRVDRV_ETH_TX_PACKET_BUFFER_SIZE); /* We'll never manage to send this one; drop it and return 'OK' */ - goto drop; + + priv->stats.tx_dropped++; + priv->stats.tx_errors++; + goto free; + } + + + netif_stop_queue(priv->dev); + if (priv->mesh_dev) + netif_stop_queue(priv->mesh_dev); + + if (priv->tx_pending_len) { + /* This can happen if packets come in on the mesh and eth + device simultaneously -- there's no mutual exclusion on + hard_start_xmit() calls between devices. */ + lbs_deb_tx("Packet on %s while busy\n", dev->name); + ret = NETDEV_TX_BUSY; + goto unlock; } + priv->tx_pending_len = -1; + spin_unlock_irqrestore(&priv->driver_lock, flags); + lbs_deb_hex(LBS_DEB_TX, "TX Data", skb->data, min_t(unsigned int, skb->len, 100)); - txpd = (void *)priv->tmptxbuf; + txpd = (void *)priv->tx_pending_buf; memset(txpd, 0, sizeof(struct txpd)); p802x_hdr = skb->data; @@ -134,54 +140,31 @@ int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) memcpy(&txpd[1], p802x_hdr, le16_to_cpu(txpd->tx_packet_length)); - /* We need to protect against the queues being restarted before - we get round to stopping them */ spin_lock_irqsave(&priv->driver_lock, flags); + priv->tx_pending_len = pkt_len + sizeof(struct txpd); - ret = priv->hw_host_to_card(priv, MVMS_DAT, priv->tmptxbuf, - pkt_len + sizeof(struct txpd)); - - if (!ret) { - lbs_deb_tx("%s succeeds\n", __func__); - - /* Stop processing outgoing pkts before submitting */ - netif_stop_queue(priv->dev); - if (priv->mesh_dev) - netif_stop_queue(priv->mesh_dev); - - priv->stats.tx_packets++; - priv->stats.tx_bytes += skb->len; - - dev->trans_start = jiffies; + lbs_deb_tx("%s lined up packet\n", __func__); - if (priv->monitormode != LBS_MONITOR_OFF) { - /* Keep the skb to echo it back once Tx feedback is - received from FW */ - skb_orphan(skb); + priv->stats.tx_packets++; + priv->stats.tx_bytes += skb->len; - /* Keep the skb around for when we get feedback */ - priv->currenttxskb = skb; - } else - dev_kfree_skb_any(skb); - - } - - spin_unlock_irqrestore(&priv->driver_lock, flags); + dev->trans_start = jiffies; - if (ret) { - lbs_deb_tx("tx err: hw_host_to_card returned 0x%X\n", ret); -drop: - priv->stats.tx_dropped++; - priv->stats.tx_errors++; + if (priv->monitormode != LBS_MONITOR_OFF) { + /* Keep the skb to echo it back once Tx feedback is + received from FW */ + skb_orphan(skb); + /* Keep the skb around for when we get feedback */ + priv->currenttxskb = skb; + } else { + free: dev_kfree_skb_any(skb); } + unlock: + spin_unlock_irqrestore(&priv->driver_lock, flags); + wake_up(&priv->waitq); - /* Even if we dropped the packet, return OK. Otherwise the - packet gets requeued. */ - ret = NETDEV_TX_OK; - -done: lbs_deb_leave_args(LBS_DEB_TX, "ret %d", ret); return ret; } -- cgit v1.2.3-70-g09d2 From 4f679496567809ce1e95730c25274e1832537f4b Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 10 Dec 2007 14:58:37 -0500 Subject: libertas: clean up lbs_interrupt() Make it take struct lbs_private as argument; that's all it wants anyway, and all callers were starting off from that. Don't wake the netif queues, because those should be handled elsewhere. And sort out the locking, with a big nasty warning for those who don't have the driver_lock locked when they call it. Oh, and fix if_cs.c to lock the driver_lock before calling it. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/decl.h | 2 +- drivers/net/wireless/libertas/if_cs.c | 5 +++-- drivers/net/wireless/libertas/if_sdio.c | 4 ++-- drivers/net/wireless/libertas/if_usb.c | 4 ++-- drivers/net/wireless/libertas/main.c | 19 +++++++++---------- 5 files changed, 17 insertions(+), 17 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h index a086d0c6dfe..82727a87ea9 100644 --- a/drivers/net/wireless/libertas/decl.h +++ b/drivers/net/wireless/libertas/decl.h @@ -39,7 +39,7 @@ void lbs_queue_cmd(struct lbs_private *priv, int lbs_allocate_cmd_buffer(struct lbs_private *priv); int lbs_execute_next_command(struct lbs_private *priv); int lbs_process_event(struct lbs_private *priv); -void lbs_interrupt(struct net_device *); +void lbs_interrupt(struct lbs_private *priv); int lbs_set_radio_control(struct lbs_private *priv); u32 lbs_fw_index_to_data_rate(u8 index); u8 lbs_data_rate_to_fw_index(u32 rate); diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c index 49a01780dd0..2acbe5dcff7 100644 --- a/drivers/net/wireless/libertas/if_cs.c +++ b/drivers/net/wireless/libertas/if_cs.c @@ -264,8 +264,9 @@ static irqreturn_t if_cs_interrupt(int irq, void *data) /* clear interrupt */ if_cs_write16(card, IF_CS_C_INT_CAUSE, int_cause & IF_CS_C_IC_MASK); } - - lbs_interrupt(card->priv->dev); + spin_lock(&card->priv->driver_lock); + lbs_interrupt(card->priv); + spin_unlock(&card->priv->driver_lock); return IRQ_HANDLED; } diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index 24239609367..1ed72b9b6bf 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c @@ -154,7 +154,7 @@ static int if_sdio_handle_cmd(struct if_sdio_card *card, card->int_cause |= MRVDRV_CMD_UPLD_RDY; - lbs_interrupt(card->priv->dev); + lbs_interrupt(card->priv); ret = 0; @@ -236,7 +236,7 @@ static int if_sdio_handle_event(struct if_sdio_card *card, card->event = event; card->int_cause |= MRVDRV_CARDEVENT; - lbs_interrupt(card->priv->dev); + lbs_interrupt(card->priv); spin_unlock_irqrestore(&card->priv->driver_lock, flags); diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index f59fd73468f..1c23166783f 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -632,7 +632,7 @@ static inline void process_cmdrequest(int recvlength, u8 *recvbuff, priv->upld_len); kfree_skb(skb); - lbs_interrupt(priv->dev); + lbs_interrupt(priv); spin_unlock(&priv->driver_lock); lbs_deb_usbd(&cardp->udev->dev, @@ -705,7 +705,7 @@ static void if_usb_receive(struct urb *urb) cardp->usb_event_cause <<= 3; cardp->usb_int_cause |= MRVDRV_CARDEVENT; kfree_skb(skb); - lbs_interrupt(priv->dev); + lbs_interrupt(priv); spin_unlock(&priv->driver_lock); goto rx_exit; default: diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index f16c93ba6ef..2797149649c 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1408,23 +1408,22 @@ out: * @param dev A pointer to net_device structure * @return n/a */ -void lbs_interrupt(struct net_device *dev) +void lbs_interrupt(struct lbs_private *priv) { - struct lbs_private *priv = dev->priv; - lbs_deb_enter(LBS_DEB_THREAD); - lbs_deb_thread("lbs_interrupt: intcounter=%d\n", - priv->intcounter); + lbs_deb_thread("lbs_interrupt: intcounter=%d\n", priv->intcounter); + + if (spin_trylock(&priv->driver_lock)) { + spin_unlock(&priv->driver_lock); + printk(KERN_CRIT "%s called without driver_lock held\n", __func__); + WARN_ON(1); + } priv->intcounter++; - if (priv->psstate == PS_STATE_SLEEP) { + if (priv->psstate == PS_STATE_SLEEP) priv->psstate = PS_STATE_AWAKE; - netif_wake_queue(dev); - if (priv->mesh_dev) - netif_wake_queue(priv->mesh_dev); - } wake_up_interruptible(&priv->waitq); -- cgit v1.2.3-70-g09d2 From b31d8b90dcc6fbe39147863d13b93a8d49d2b341 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 10 Dec 2007 15:25:42 -0500 Subject: libertas: remove pre_open_check() The firmware is always initialised before we register the netdevices. It's not possible for pre_open_check() to fail. One day we might try loading firmware in ->open(), but still it won't be just a _check_, like this. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 32 -------------------------------- 1 file changed, 32 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 2797149649c..3d9de7a1bfc 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -366,34 +366,6 @@ static struct attribute_group lbs_mesh_attr_group = { .attrs = lbs_mesh_sysfs_entries, }; -/** - * @brief Check if the device can be open and wait if necessary. - * - * @param dev A pointer to net_device structure - * @return 0 - * - * For USB adapter, on some systems the device open handler will be - * called before FW ready. Use the following flag check and wait - * function to work around the issue. - * - */ -static int pre_open_check(struct net_device *dev) -{ - struct lbs_private *priv = (struct lbs_private *) dev->priv; - int i = 0; - - while (!priv->fw_ready && i < 20) { - i++; - msleep_interruptible(100); - } - if (!priv->fw_ready) { - lbs_pr_err("firmware not ready\n"); - return -1; - } - - return 0; -} - /** * @brief This function opens the device * @@ -433,8 +405,6 @@ static int lbs_mesh_open(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) dev->priv ; - if (pre_open_check(dev) == -1) - return -1; priv->mesh_open = 1 ; netif_wake_queue(priv->mesh_dev); @@ -457,8 +427,6 @@ static int lbs_open(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) dev->priv ; - if(pre_open_check(dev) == -1) - return -1; priv->infra_open = 1 ; netif_wake_queue(priv->dev); if (priv->open == 0) -- cgit v1.2.3-70-g09d2 From 8552855f9860b222673e86a88de2543f53f83dc2 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 10 Dec 2007 16:38:18 -0500 Subject: libertas: make rtap and normal modes mutually exclusive, clean up open/stop Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/dev.h | 1 - drivers/net/wireless/libertas/main.c | 133 +++++++++++++---------------------- 2 files changed, 50 insertions(+), 84 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 468140512a6..9921d0cd6f1 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -99,7 +99,6 @@ struct lbs_mesh_stats { /** Private structure for the MV device */ struct lbs_private { - int open; int mesh_open; int infra_open; int mesh_autostart_enabled; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 3d9de7a1bfc..88664024bf8 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -274,6 +274,8 @@ static ssize_t lbs_rtap_set(struct device *dev, if(priv->monitormode == monitor_mode) return strlen(buf); if (priv->monitormode == LBS_MONITOR_OFF) { + if (priv->infra_open || priv->mesh_open) + return -EBUSY; if (priv->mode == IW_MODE_INFRA) lbs_send_deauthentication(priv); else if (priv->mode == IW_MODE_ADHOC) @@ -367,84 +369,42 @@ static struct attribute_group lbs_mesh_attr_group = { }; /** - * @brief This function opens the device + * @brief This function opens the ethX or mshX interface * * @param dev A pointer to net_device structure - * @return 0 + * @return 0 or -EBUSY if monitor mode active */ static int lbs_dev_open(struct net_device *dev) { - struct lbs_private *priv = (struct lbs_private *) dev->priv; - - lbs_deb_enter(LBS_DEB_NET); + struct lbs_private *priv = (struct lbs_private *) dev->priv ; + int ret = 0; - priv->open = 1; + spin_lock_irq(&priv->driver_lock); - if (priv->connect_status == LBS_CONNECTED) - netif_carrier_on(priv->dev); - else - netif_carrier_off(priv->dev); + if (priv->monitormode != LBS_MONITOR_OFF) { + ret = -EBUSY; + goto out; + } - if (priv->mesh_dev) { - if (priv->mesh_connect_status == LBS_CONNECTED) - netif_carrier_on(priv->mesh_dev); + if (dev == priv->mesh_dev) { + priv->mesh_open = 1; + priv->mesh_connect_status = LBS_CONNECTED; + netif_carrier_on(dev); + } else { + priv->infra_open = 1; + + if (priv->connect_status == LBS_CONNECTED) + netif_carrier_on(dev); else - netif_carrier_off(priv->mesh_dev); + netif_carrier_off(dev); } - lbs_deb_leave(LBS_DEB_NET); - return 0; -} -/** - * @brief This function opens the mshX interface - * - * @param dev A pointer to net_device structure - * @return 0 - */ -static int lbs_mesh_open(struct net_device *dev) -{ - struct lbs_private *priv = (struct lbs_private *) dev->priv ; - - priv->mesh_open = 1 ; - netif_wake_queue(priv->mesh_dev); - - priv->mesh_connect_status = LBS_CONNECTED; - - netif_carrier_on(priv->mesh_dev); - netif_wake_queue(priv->mesh_dev); - if (priv->infra_open == 0) - return lbs_dev_open(priv->dev) ; - return 0; -} - -/** - * @brief This function opens the ethX interface - * - * @param dev A pointer to net_device structure - * @return 0 - */ -static int lbs_open(struct net_device *dev) -{ - struct lbs_private *priv = (struct lbs_private *) dev->priv ; - - priv->infra_open = 1 ; - netif_wake_queue(priv->dev); - if (priv->open == 0) - return lbs_dev_open(priv->dev) ; - return 0; -} + if (!priv->tx_pending_len) + netif_wake_queue(dev); + out: -static int lbs_dev_close(struct net_device *dev) -{ - struct lbs_private *priv = dev->priv; - - lbs_deb_enter(LBS_DEB_NET); - - netif_carrier_off(priv->dev); - priv->open = 0; - - lbs_deb_leave(LBS_DEB_NET); - return 0; + spin_unlock_irq(&priv->driver_lock); + return ret; } /** @@ -453,16 +413,20 @@ static int lbs_dev_close(struct net_device *dev) * @param dev A pointer to net_device structure * @return 0 */ -static int lbs_mesh_close(struct net_device *dev) +static int lbs_mesh_stop(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) (dev->priv); + spin_lock_irq(&priv->driver_lock); + priv->mesh_open = 0; - netif_stop_queue(priv->mesh_dev); - if (priv->infra_open == 0) - return lbs_dev_close(dev); - else - return 0; + priv->mesh_connect_status = LBS_DISCONNECTED; + + netif_stop_queue(dev); + netif_carrier_off(dev); + + spin_unlock_irq(&priv->driver_lock); + return 0; } /** @@ -471,16 +435,18 @@ static int lbs_mesh_close(struct net_device *dev) * @param dev A pointer to net_device structure * @return 0 */ -static int lbs_close(struct net_device *dev) +static int lbs_eth_stop(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) dev->priv; - netif_stop_queue(dev); + spin_lock_irq(&priv->driver_lock); + priv->infra_open = 0; - if (priv->mesh_open == 0) - return lbs_dev_close(dev); - else - return 0; + + netif_stop_queue(dev); + + spin_unlock_irq(&priv->driver_lock); + return 0; } static void lbs_tx_timeout(struct net_device *dev) @@ -1065,9 +1031,9 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) priv->infra_open = 0; /* Setup the OS Interface to our functions */ - dev->open = lbs_open; + dev->open = lbs_dev_open; dev->hard_start_xmit = lbs_hard_start_xmit; - dev->stop = lbs_close; + dev->stop = lbs_eth_stop; dev->set_mac_address = lbs_set_mac_address; dev->tx_timeout = lbs_tx_timeout; dev->get_stats = lbs_get_stats; @@ -1237,9 +1203,9 @@ int lbs_add_mesh(struct lbs_private *priv, struct device *dev) mesh_dev->priv = priv; priv->mesh_dev = mesh_dev; - mesh_dev->open = lbs_mesh_open; + mesh_dev->open = lbs_dev_open; mesh_dev->hard_start_xmit = lbs_hard_start_xmit; - mesh_dev->stop = lbs_mesh_close; + mesh_dev->stop = lbs_mesh_stop; mesh_dev->get_stats = lbs_get_stats; mesh_dev->set_mac_address = lbs_set_mac_address; mesh_dev->ethtool_ops = &lbs_ethtool_ops; @@ -1436,6 +1402,7 @@ static void __exit lbs_exit_module(void) static int lbs_rtap_open(struct net_device *dev) { + /* Yes, _stop_ the queue. Because we don't support injection */ netif_carrier_off(dev); netif_stop_queue(dev); return 0; @@ -1449,7 +1416,7 @@ static int lbs_rtap_stop(struct net_device *dev) static int lbs_rtap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { netif_stop_queue(dev); - return -EOPNOTSUPP; + return NETDEV_TX_BUSY; } static struct net_device_stats *lbs_rtap_get_stats(struct net_device *dev) -- cgit v1.2.3-70-g09d2 From b15152a4033d4c82015bb79c6b81eeb0a2edeeea Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 11 Dec 2007 11:55:37 -0500 Subject: libertas: don't run thread while firmware not yet ready Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 88664024bf8..9a231099212 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -671,6 +671,8 @@ static int lbs_thread(void *data) shouldsleep = 1; /* Sleep mode. Nothing we can do till it wakes */ else if (priv->intcounter) shouldsleep = 0; /* Interrupt pending. Deal with it now */ + else if (!priv->fw_ready) + shouldsleep = 1; /* Firmware not ready. We're waiting for it */ else if (priv->dnld_sent) shouldsleep = 1; /* Something is en route to the device already */ else if (priv->tx_pending_len > 0) @@ -753,6 +755,9 @@ static int lbs_thread(void *data) } else spin_unlock_irq(&priv->driver_lock); + if (!priv->fw_ready) + continue; + /* Check if we need to confirm Sleep Request received previously */ if (priv->psstate == PS_STATE_PRE_SLEEP && !priv->dnld_sent && !priv->cur_cmd) { -- cgit v1.2.3-70-g09d2 From 6e66f03ff78b23d845920739373b1561c546b13f Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 11 Dec 2007 12:42:16 -0500 Subject: libertas: convert GET_HW_SPEC to a direct command Signed-off-by: Dan Williams Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 76 +++++++++++++++++++++++++++++---- drivers/net/wireless/libertas/cmd.h | 2 + drivers/net/wireless/libertas/cmdresp.c | 67 ----------------------------- drivers/net/wireless/libertas/hostcmd.h | 3 +- drivers/net/wireless/libertas/main.c | 6 +-- 5 files changed, 73 insertions(+), 81 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index c4b32a05de1..bb940cce3a7 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -11,6 +11,7 @@ #include "dev.h" #include "join.h" #include "wext.h" +#include "cmd.h" static void cleanup_cmdnode(struct cmd_ctrl_node *ptempnode); struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv); @@ -36,18 +37,78 @@ static u8 is_command_allowed_in_ps(u16 cmd) return 0; } -static int lbs_cmd_hw_spec(struct lbs_private *priv, struct cmd_ds_command *cmd) +/** + * @brief Updates the hardware details like MAC address and regulatory region + * + * @param priv A pointer to struct lbs_private structure + * + * @return 0 on success, error on failure + */ +int lbs_update_hw_spec(struct lbs_private *priv) { - struct cmd_ds_get_hw_spec *hwspec = &cmd->params.hwspec; + struct cmd_ds_get_hw_spec cmd; + int ret = -1; + u32 i; + DECLARE_MAC_BUF(mac); lbs_deb_enter(LBS_DEB_CMD); - cmd->command = cpu_to_le16(CMD_GET_HW_SPEC); - cmd->size = cpu_to_le16(sizeof(struct cmd_ds_get_hw_spec) + S_DS_GEN); - memcpy(hwspec->permanentaddr, priv->current_addr, ETH_ALEN); + memset(&cmd, 0, sizeof(cmd)); + cmd.hdr.size = cpu_to_le16(sizeof(cmd)); + memcpy(cmd.permanentaddr, priv->current_addr, ETH_ALEN); + ret = lbs_cmd_with_response(priv, CMD_GET_HW_SPEC, cmd); + if (ret) + goto out; + + priv->fwcapinfo = le32_to_cpu(cmd.fwcapinfo); + memcpy(priv->fwreleasenumber, cmd.fwreleasenumber, 4); + + lbs_deb_cmd("GET_HW_SPEC: firmware release %u.%u.%up%u\n", + priv->fwreleasenumber[2], priv->fwreleasenumber[1], + priv->fwreleasenumber[0], priv->fwreleasenumber[3]); + lbs_deb_cmd("GET_HW_SPEC: MAC addr %s\n", + print_mac(mac, cmd.permanentaddr)); + lbs_deb_cmd("GET_HW_SPEC: hardware interface 0x%x, hardware spec 0x%04x\n", + cmd.hwifversion, cmd.version); + + /* Clamp region code to 8-bit since FW spec indicates that it should + * only ever be 8-bit, even though the field size is 16-bit. Some firmware + * returns non-zero high 8 bits here. + */ + priv->regioncode = le16_to_cpu(cmd.regioncode) & 0xFF; + + for (i = 0; i < MRVDRV_MAX_REGION_CODE; i++) { + /* use the region code to search for the index */ + if (priv->regioncode == lbs_region_code_to_index[i]) + break; + } + /* if it's unidentified region code, use the default (USA) */ + if (i >= MRVDRV_MAX_REGION_CODE) { + priv->regioncode = 0x10; + lbs_pr_info("unidentified region code; using the default (USA)\n"); + } + + if (priv->current_addr[0] == 0xff) + memmove(priv->current_addr, cmd.permanentaddr, ETH_ALEN); + + memcpy(priv->dev->dev_addr, priv->current_addr, ETH_ALEN); + if (priv->mesh_dev) + memcpy(priv->mesh_dev->dev_addr, priv->current_addr, ETH_ALEN); + + if (lbs_set_regiontable(priv, priv->regioncode, 0)) { + ret = -1; + goto out; + } + + if (lbs_set_universaltable(priv, 0)) { + ret = -1; + goto out; + } + +out: lbs_deb_leave(LBS_DEB_CMD); - return 0; + return ret; } static int lbs_cmd_802_11_ps_mode(struct lbs_private *priv, @@ -1223,9 +1284,6 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, cmdptr->result = 0; switch (cmd_no) { - case CMD_GET_HW_SPEC: - ret = lbs_cmd_hw_spec(priv, cmdptr); - break; case CMD_802_11_PS_MODE: ret = lbs_cmd_802_11_ps_mode(priv, cmdptr, cmd_action); break; diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index 72857a1a248..b8e5d21329a 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h @@ -22,4 +22,6 @@ int __lbs_cmd(struct lbs_private *priv, uint16_t command, int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra, struct cmd_header *resp); +int lbs_update_hw_spec(struct lbs_private *priv); + #endif /* _LBS_CMD_H */ diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 91136697f69..671e323764c 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -145,69 +145,6 @@ static int lbs_ret_reg_access(struct lbs_private *priv, return ret; } -static int lbs_ret_get_hw_spec(struct lbs_private *priv, - struct cmd_ds_command *resp) -{ - u32 i; - struct cmd_ds_get_hw_spec *hwspec = &resp->params.hwspec; - int ret = 0; - DECLARE_MAC_BUF(mac); - - lbs_deb_enter(LBS_DEB_CMD); - - priv->fwcapinfo = le32_to_cpu(hwspec->fwcapinfo); - - memcpy(priv->fwreleasenumber, hwspec->fwreleasenumber, 4); - - lbs_deb_cmd("GET_HW_SPEC: firmware release %u.%u.%up%u\n", - priv->fwreleasenumber[2], priv->fwreleasenumber[1], - priv->fwreleasenumber[0], priv->fwreleasenumber[3]); - lbs_deb_cmd("GET_HW_SPEC: MAC addr %s\n", - print_mac(mac, hwspec->permanentaddr)); - lbs_deb_cmd("GET_HW_SPEC: hardware interface 0x%x, hardware spec 0x%04x\n", - hwspec->hwifversion, hwspec->version); - - /* Clamp region code to 8-bit since FW spec indicates that it should - * only ever be 8-bit, even though the field size is 16-bit. Some firmware - * returns non-zero high 8 bits here. - */ - priv->regioncode = le16_to_cpu(hwspec->regioncode) & 0xFF; - - for (i = 0; i < MRVDRV_MAX_REGION_CODE; i++) { - /* use the region code to search for the index */ - if (priv->regioncode == lbs_region_code_to_index[i]) { - break; - } - } - - /* if it's unidentified region code, use the default (USA) */ - if (i >= MRVDRV_MAX_REGION_CODE) { - priv->regioncode = 0x10; - lbs_pr_info("unidentified region code; using the default (USA)\n"); - } - - if (priv->current_addr[0] == 0xff) - memmove(priv->current_addr, hwspec->permanentaddr, ETH_ALEN); - - memcpy(priv->dev->dev_addr, priv->current_addr, ETH_ALEN); - if (priv->mesh_dev) - memcpy(priv->mesh_dev->dev_addr, priv->current_addr, ETH_ALEN); - - if (lbs_set_regiontable(priv, priv->regioncode, 0)) { - ret = -1; - goto done; - } - - if (lbs_set_universaltable(priv, 0)) { - ret = -1; - goto done; - } - -done: - lbs_deb_enter_args(LBS_DEB_CMD, "ret %d", ret); - return ret; -} - static int lbs_ret_802_11_sleep_params(struct lbs_private *priv, struct cmd_ds_command *resp) { @@ -569,10 +506,6 @@ static inline int handle_cmd_response(struct lbs_private *priv, ret = lbs_ret_reg_access(priv, respcmd, resp); break; - case CMD_RET(CMD_GET_HW_SPEC): - ret = lbs_ret_get_hw_spec(priv, resp); - break; - case CMD_RET(CMD_802_11_SCAN): ret = lbs_ret_80211_scan(priv, resp); break; diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h index 93ac46a05c5..a87c2174bbf 100644 --- a/drivers/net/wireless/libertas/hostcmd.h +++ b/drivers/net/wireless/libertas/hostcmd.h @@ -119,6 +119,8 @@ struct cmd_ds_gen { * This structure defines the response for the GET_HW_SPEC command */ struct cmd_ds_get_hw_spec { + struct cmd_header hdr; + /* HW Interface version number */ __le16 hwifversion; /* HW version number */ @@ -637,7 +639,6 @@ struct cmd_ds_command { /* command Body */ union { - struct cmd_ds_get_hw_spec hwspec; struct cmd_ds_802_11_ps_mode psmode; struct cmd_ds_802_11_scan scan; struct cmd_ds_802_11_scan_rsp scanresp; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 9a231099212..9f6c119c2d1 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -22,6 +22,7 @@ #include "debugfs.h" #include "assoc.h" #include "join.h" +#include "cmd.h" #define DRIVER_RELEASE_VERSION "323.p0" const char lbs_driver_version[] = "COMM-USB8388-" DRIVER_RELEASE_VERSION @@ -843,10 +844,7 @@ static int lbs_setup_firmware(struct lbs_private *priv) * Read MAC address from HW */ memset(priv->current_addr, 0xff, ETH_ALEN); - - ret = lbs_prepare_and_send_command(priv, CMD_GET_HW_SPEC, - 0, CMD_OPTION_WAITFORRSP, 0, NULL); - + ret = lbs_update_hw_spec(priv); if (ret) { ret = -1; goto done; -- cgit v1.2.3-70-g09d2 From 10bca0d5f4829a8acd9a7a51cb7b35e38b23280a Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 11 Dec 2007 12:54:43 -0500 Subject: libertas: move removal of lbs_rtap file to lbs_stop_card() This prevents us from trying to remove it when it didn't exist, in the error case. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 9f6c119c2d1..212cce34227 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1089,7 +1089,6 @@ int lbs_remove_card(struct lbs_private *priv) lbs_remove_rtap(priv); dev = priv->dev; - device_remove_file(&dev->dev, &dev_attr_lbs_rtap); cancel_delayed_work(&priv->scan_work); cancel_delayed_work(&priv->assoc_work); @@ -1167,6 +1166,7 @@ int lbs_stop_card(struct lbs_private *priv) netif_carrier_off(priv->dev); lbs_debugfs_remove_one(priv); + device_remove_file(&dev->dev, &dev_attr_lbs_rtap); /* Flush pending command nodes */ spin_lock_irqsave(&priv->driver_lock, flags); -- cgit v1.2.3-70-g09d2 From ddac452680a5164bb47d61ea54f596ddaf3aea7d Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 11 Dec 2007 13:49:39 -0500 Subject: libertas: rename and re-type bufvirtualaddr to cmdbuf Make it a struct cmd_header, since that's what it is, and clean up the places that it's used. Signed-off-by: Dan Williams Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 133 ++++++++++++++------------------ drivers/net/wireless/libertas/cmdresp.c | 14 ++-- drivers/net/wireless/libertas/defs.h | 4 +- drivers/net/wireless/libertas/hostcmd.h | 2 +- drivers/net/wireless/libertas/if_cs.c | 4 +- drivers/net/wireless/libertas/if_sdio.c | 4 +- drivers/net/wireless/libertas/if_usb.c | 4 +- drivers/net/wireless/libertas/main.c | 14 ++-- 8 files changed, 79 insertions(+), 100 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index bb940cce3a7..79a8d0d48bf 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -1028,24 +1028,18 @@ void lbs_queue_cmd(struct lbs_private *priv, u8 addtail) { unsigned long flags; - struct cmd_ds_command *cmdptr; lbs_deb_enter(LBS_DEB_HOST); - if (!cmdnode) { - lbs_deb_host("QUEUE_CMD: cmdnode is NULL\n"); - goto done; - } - - cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr; - if (!cmdptr) { - lbs_deb_host("QUEUE_CMD: cmdptr is NULL\n"); + if (!cmdnode || !cmdnode->cmdbuf) { + lbs_deb_host("QUEUE_CMD: cmdnode or cmdbuf is NULL\n"); goto done; } /* Exit_PS command needs to be queued in the header always. */ - if (le16_to_cpu(cmdptr->command) == CMD_802_11_PS_MODE) { - struct cmd_ds_802_11_ps_mode *psm = &cmdptr->params.psmode; + if (le16_to_cpu(cmdnode->cmdbuf->command) == CMD_802_11_PS_MODE) { + struct cmd_ds_802_11_ps_mode *psm = (void *) cmdnode->cmdbuf; + if (psm->action == cpu_to_le16(CMD_SUBCMD_EXIT_PS)) { if (priv->psstate != PS_STATE_FULL_POWER) addtail = 0; @@ -1062,7 +1056,7 @@ void lbs_queue_cmd(struct lbs_private *priv, spin_unlock_irqrestore(&priv->driver_lock, flags); lbs_deb_host("QUEUE_CMD: inserted command 0x%04x into cmdpendingq\n", - le16_to_cpu(((struct cmd_ds_gen*)cmdnode->bufvirtualaddr)->command)); + le16_to_cpu(cmdnode->cmdbuf->command)); done: lbs_deb_leave(LBS_DEB_HOST); @@ -1079,7 +1073,7 @@ static int DownloadcommandToStation(struct lbs_private *priv, struct cmd_ctrl_node *cmdnode) { unsigned long flags; - struct cmd_ds_command *cmdptr; + struct cmd_header *cmd; int ret = -1; u16 cmdsize; u16 command; @@ -1091,10 +1085,10 @@ static int DownloadcommandToStation(struct lbs_private *priv, goto done; } - cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr; + cmd = cmdnode->cmdbuf; spin_lock_irqsave(&priv->driver_lock, flags); - if (!cmdptr || !cmdptr->size) { + if (!cmd || !cmd->size) { lbs_deb_host("DNLD_CMD: cmdptr is NULL or zero\n"); __lbs_cleanup_and_insert_cmd(priv, cmdnode); spin_unlock_irqrestore(&priv->driver_lock, flags); @@ -1105,16 +1099,16 @@ static int DownloadcommandToStation(struct lbs_private *priv, priv->cur_cmd_retcode = 0; spin_unlock_irqrestore(&priv->driver_lock, flags); - cmdsize = le16_to_cpu(cmdptr->size); - command = le16_to_cpu(cmdptr->command); + cmdsize = le16_to_cpu(cmd->size); + command = le16_to_cpu(cmd->command); lbs_deb_host("DNLD_CMD: command 0x%04x, size %d, jiffies %lu\n", command, cmdsize, jiffies); - lbs_deb_hex(LBS_DEB_HOST, "DNLD_CMD", cmdnode->bufvirtualaddr, cmdsize); + lbs_deb_hex(LBS_DEB_HOST, "DNLD_CMD", (void *) cmdnode->cmdbuf, cmdsize); cmdnode->cmdwaitqwoken = 0; - ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) cmdptr, cmdsize); + ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) cmd, cmdsize); if (ret != 0) { lbs_deb_host("DNLD_CMD: hw_host_to_card failed\n"); @@ -1265,7 +1259,7 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, lbs_set_cmd_ctrl_node(priv, cmdnode, wait_option, pdata_buf); - cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr; + cmdptr = (struct cmd_ds_command *)cmdnode->cmdbuf; lbs_deb_host("PREP_CMD: command 0x%04x\n", cmd_no); @@ -1556,41 +1550,35 @@ EXPORT_SYMBOL_GPL(lbs_prepare_and_send_command); int lbs_allocate_cmd_buffer(struct lbs_private *priv) { int ret = 0; - u32 ulbufsize; + u32 bufsize; u32 i; - struct cmd_ctrl_node *tempcmd_array; - u8 *ptempvirtualaddr; + struct cmd_ctrl_node *cmdarray; lbs_deb_enter(LBS_DEB_HOST); - /* Allocate and initialize cmdCtrlNode */ - ulbufsize = sizeof(struct cmd_ctrl_node) * MRVDRV_NUM_OF_CMD_BUFFER; - - if (!(tempcmd_array = kzalloc(ulbufsize, GFP_KERNEL))) { + /* Allocate and initialize the command array */ + bufsize = sizeof(struct cmd_ctrl_node) * LBS_NUM_CMD_BUFFERS; + if (!(cmdarray = kzalloc(bufsize, GFP_KERNEL))) { lbs_deb_host("ALLOC_CMD_BUF: tempcmd_array is NULL\n"); ret = -1; goto done; } - priv->cmd_array = tempcmd_array; + priv->cmd_array = cmdarray; - /* Allocate and initialize command buffers */ - ulbufsize = MRVDRV_SIZE_OF_CMD_BUFFER; - for (i = 0; i < MRVDRV_NUM_OF_CMD_BUFFER; i++) { - if (!(ptempvirtualaddr = kzalloc(ulbufsize, GFP_KERNEL))) { + /* Allocate and initialize each command buffer in the command array */ + for (i = 0; i < LBS_NUM_CMD_BUFFERS; i++) { + cmdarray[i].cmdbuf = kzalloc(LBS_CMD_BUFFER_SIZE, GFP_KERNEL); + if (!cmdarray[i].cmdbuf) { lbs_deb_host("ALLOC_CMD_BUF: ptempvirtualaddr is NULL\n"); ret = -1; goto done; } - - /* Update command buffer virtual */ - tempcmd_array[i].bufvirtualaddr = ptempvirtualaddr; } - for (i = 0; i < MRVDRV_NUM_OF_CMD_BUFFER; i++) { - init_waitqueue_head(&tempcmd_array[i].cmdwait_q); - lbs_cleanup_and_insert_cmd(priv, &tempcmd_array[i]); + for (i = 0; i < LBS_NUM_CMD_BUFFERS; i++) { + init_waitqueue_head(&cmdarray[i].cmdwait_q); + lbs_cleanup_and_insert_cmd(priv, &cmdarray[i]); } - ret = 0; done: @@ -1606,9 +1594,8 @@ done: */ int lbs_free_cmd_buffer(struct lbs_private *priv) { - u32 ulbufsize; /* Someone needs to die for this. Slowly and painfully */ + struct cmd_ctrl_node *cmdarray; unsigned int i; - struct cmd_ctrl_node *tempcmd_array; lbs_deb_enter(LBS_DEB_HOST); @@ -1618,14 +1605,13 @@ int lbs_free_cmd_buffer(struct lbs_private *priv) goto done; } - tempcmd_array = priv->cmd_array; + cmdarray = priv->cmd_array; /* Release shared memory buffers */ - ulbufsize = MRVDRV_SIZE_OF_CMD_BUFFER; - for (i = 0; i < MRVDRV_NUM_OF_CMD_BUFFER; i++) { - if (tempcmd_array[i].bufvirtualaddr) { - kfree(tempcmd_array[i].bufvirtualaddr); - tempcmd_array[i].bufvirtualaddr = NULL; + for (i = 0; i < LBS_NUM_CMD_BUFFERS; i++) { + if (cmdarray[i].cmdbuf) { + kfree(cmdarray[i].cmdbuf); + cmdarray[i].cmdbuf = NULL; } } @@ -1683,21 +1669,21 @@ struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv) * @param ptempnode A pointer to cmdCtrlNode structure * @return n/a */ -static void cleanup_cmdnode(struct cmd_ctrl_node *ptempnode) +static void cleanup_cmdnode(struct cmd_ctrl_node *cmdnode) { lbs_deb_enter(LBS_DEB_HOST); - if (!ptempnode) + if (!cmdnode) return; - ptempnode->cmdwaitqwoken = 1; - wake_up_interruptible(&ptempnode->cmdwait_q); - ptempnode->wait_option = 0; - ptempnode->pdata_buf = NULL; - ptempnode->callback = NULL; - ptempnode->callback_arg = 0; + cmdnode->cmdwaitqwoken = 1; + wake_up_interruptible(&cmdnode->cmdwait_q); + cmdnode->wait_option = 0; + cmdnode->pdata_buf = NULL; + cmdnode->callback = NULL; + cmdnode->callback_arg = 0; - if (ptempnode->bufvirtualaddr != NULL) - memset(ptempnode->bufvirtualaddr, 0, MRVDRV_SIZE_OF_CMD_BUFFER); + if (cmdnode->cmdbuf != NULL) + memset(cmdnode->cmdbuf, 0, LBS_CMD_BUFFER_SIZE); lbs_deb_leave(LBS_DEB_HOST); } @@ -1739,7 +1725,7 @@ void lbs_set_cmd_ctrl_node(struct lbs_private *priv, int lbs_execute_next_command(struct lbs_private *priv) { struct cmd_ctrl_node *cmdnode = NULL; - struct cmd_ds_command *cmdptr; + struct cmd_header *cmd; unsigned long flags; int ret = 0; @@ -1765,22 +1751,21 @@ int lbs_execute_next_command(struct lbs_private *priv) spin_unlock_irqrestore(&priv->driver_lock, flags); if (cmdnode) { - cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr; + cmd = cmdnode->cmdbuf; - if (is_command_allowed_in_ps(le16_to_cpu(cmdptr->command))) { + if (is_command_allowed_in_ps(le16_to_cpu(cmd->command))) { if ((priv->psstate == PS_STATE_SLEEP) || (priv->psstate == PS_STATE_PRE_SLEEP)) { lbs_deb_host( "EXEC_NEXT_CMD: cannot send cmd 0x%04x in psstate %d\n", - le16_to_cpu(cmdptr->command), + le16_to_cpu(cmd->command), priv->psstate); ret = -1; goto done; } lbs_deb_host("EXEC_NEXT_CMD: OK to send command " - "0x%04x in psstate %d\n", - le16_to_cpu(cmdptr->command), - priv->psstate); + "0x%04x in psstate %d\n", + le16_to_cpu(cmd->command), priv->psstate); } else if (priv->psstate != PS_STATE_FULL_POWER) { /* * 1. Non-PS command: @@ -1793,8 +1778,7 @@ int lbs_execute_next_command(struct lbs_private *priv) * otherwise send this command down to firmware * immediately. */ - if (cmdptr->command != - cpu_to_le16(CMD_802_11_PS_MODE)) { + if (cmd->command != cpu_to_le16(CMD_802_11_PS_MODE)) { /* Prepare to send Exit PS, * this non PS command will be sent later */ if ((priv->psstate == PS_STATE_SLEEP) @@ -1813,8 +1797,7 @@ int lbs_execute_next_command(struct lbs_private *priv) * PS command. Ignore it if it is not Exit_PS. * otherwise send it down immediately. */ - struct cmd_ds_802_11_ps_mode *psm = - &cmdptr->params.psmode; + struct cmd_ds_802_11_ps_mode *psm = (void *)cmd; lbs_deb_host( "EXEC_NEXT_CMD: PS cmd, action 0x%02x\n", @@ -1848,7 +1831,7 @@ int lbs_execute_next_command(struct lbs_private *priv) } list_del(&cmdnode->list); lbs_deb_host("EXEC_NEXT_CMD: sending command 0x%04x\n", - le16_to_cpu(cmdptr->command)); + le16_to_cpu(cmd->command)); DownloadcommandToStation(priv, cmdnode); } else { /* @@ -2079,7 +2062,6 @@ int __lbs_cmd(struct lbs_private *priv, uint16_t command, unsigned long callback_arg) { struct cmd_ctrl_node *cmdnode; - struct cmd_header *send_cmd; unsigned long flags; int ret = 0; @@ -2107,20 +2089,19 @@ int __lbs_cmd(struct lbs_private *priv, uint16_t command, goto done; } - send_cmd = (struct cmd_header *) cmdnode->bufvirtualaddr; cmdnode->wait_option = CMD_OPTION_WAITFORRSP; cmdnode->callback = callback; cmdnode->callback_arg = callback_arg; /* Copy the incoming command to the buffer */ - memcpy(send_cmd, in_cmd, in_cmd_size); + memcpy(cmdnode->cmdbuf, in_cmd, in_cmd_size); /* Set sequence number, clean result, move to buffer */ priv->seqnum++; - send_cmd->command = cpu_to_le16(command); - send_cmd->size = cpu_to_le16(in_cmd_size); - send_cmd->seqnum = cpu_to_le16(priv->seqnum); - send_cmd->result = 0; + cmdnode->cmdbuf->command = cpu_to_le16(command); + cmdnode->cmdbuf->size = cpu_to_le16(in_cmd_size); + cmdnode->cmdbuf->seqnum = cpu_to_le16(priv->seqnum); + cmdnode->cmdbuf->result = 0; lbs_deb_host("PREP_CMD: command 0x%04x\n", command); diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 671e323764c..b4cd7b79f54 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -491,8 +491,9 @@ static int lbs_ret_802_11_subscribe_event(struct lbs_private *priv, static inline int handle_cmd_response(struct lbs_private *priv, unsigned long dummy, - struct cmd_ds_command *resp) + struct cmd_header *cmd_response) { + struct cmd_ds_command *resp = (struct cmd_ds_command *) cmd_response; int ret = 0; unsigned long flags; uint16_t respcmd = le16_to_cpu(resp->command); @@ -673,7 +674,7 @@ static inline int handle_cmd_response(struct lbs_private *priv, int lbs_process_rx_command(struct lbs_private *priv) { u16 respcmd; - struct cmd_ds_command *resp; + struct cmd_header *resp; int ret = 0; ulong flags; u16 result; @@ -692,15 +693,14 @@ int lbs_process_rx_command(struct lbs_private *priv) spin_unlock_irqrestore(&priv->driver_lock, flags); goto done; } - resp = (struct cmd_ds_command *)(priv->cur_cmd->bufvirtualaddr); + resp = priv->cur_cmd->cmdbuf; respcmd = le16_to_cpu(resp->command); result = le16_to_cpu(resp->result); lbs_deb_host("CMD_RESP: response 0x%04x, size %d, jiffies %lu\n", respcmd, priv->upld_len, jiffies); - lbs_deb_hex(LBS_DEB_HOST, "CMD_RESP", priv->cur_cmd->bufvirtualaddr, - priv->upld_len); + lbs_deb_hex(LBS_DEB_HOST, "CMD_RESP", (void *) resp, priv->upld_len); if (!(respcmd & 0x8000)) { lbs_deb_host("invalid response!\n"); @@ -716,7 +716,7 @@ int lbs_process_rx_command(struct lbs_private *priv) priv->cur_cmd_retcode = result; if (respcmd == CMD_RET(CMD_802_11_PS_MODE)) { - struct cmd_ds_802_11_ps_mode *psmode = &resp->params.psmode; + struct cmd_ds_802_11_ps_mode *psmode = (void *) resp; u16 action = le16_to_cpu(psmode->action); lbs_deb_host( @@ -796,7 +796,7 @@ int lbs_process_rx_command(struct lbs_private *priv) if (priv->cur_cmd && priv->cur_cmd->callback) { ret = priv->cur_cmd->callback(priv, priv->cur_cmd->callback_arg, - (struct cmd_header *) resp); + resp); } else ret = handle_cmd_response(priv, 0, resp); diff --git a/drivers/net/wireless/libertas/defs.h b/drivers/net/wireless/libertas/defs.h index 04db6af72a5..9b98ae720bc 100644 --- a/drivers/net/wireless/libertas/defs.h +++ b/drivers/net/wireless/libertas/defs.h @@ -132,8 +132,8 @@ static inline void lbs_deb_hex(unsigned int grp, const char *prompt, u8 *buf, in */ #define MRVDRV_MAX_MULTICAST_LIST_SIZE 32 -#define MRVDRV_NUM_OF_CMD_BUFFER 10 -#define MRVDRV_SIZE_OF_CMD_BUFFER (2 * 1024) +#define LBS_NUM_CMD_BUFFERS 10 +#define LBS_CMD_BUFFER_SIZE (2 * 1024) #define MRVDRV_MAX_CHANNEL_SIZE 14 #define MRVDRV_ASSOCIATION_TIME_OUT 255 #define MRVDRV_SNAP_HEADER_LEN 8 diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h index a87c2174bbf..e5e2106cd5a 100644 --- a/drivers/net/wireless/libertas/hostcmd.h +++ b/drivers/net/wireless/libertas/hostcmd.h @@ -81,7 +81,7 @@ struct cmd_ctrl_node { int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *); unsigned long callback_arg; /* command data */ - u8 *bufvirtualaddr; + struct cmd_header *cmdbuf; /* wait queue */ u16 cmdwaitqwoken; wait_queue_head_t cmdwait_q; diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c index 2acbe5dcff7..58143637c73 100644 --- a/drivers/net/wireless/libertas/if_cs.c +++ b/drivers/net/wireless/libertas/if_cs.c @@ -364,7 +364,7 @@ static int if_cs_receive_cmdres(struct lbs_private *priv, u8 *data, u32 *len) } *len = if_cs_read16(priv->card, IF_CS_C_CMD_LEN); - if ((*len == 0) || (*len > MRVDRV_SIZE_OF_CMD_BUFFER)) { + if ((*len == 0) || (*len > LBS_CMD_BUFFER_SIZE)) { lbs_pr_err("card cmd buffer has invalid # of bytes (%d)\n", *len); goto out; } @@ -683,7 +683,7 @@ sbi_get_int_status_exit: cmdbuf = priv->upld_buf; priv->hisregcpy &= ~IF_CS_C_S_RX_UPLD_RDY; } else { - cmdbuf = priv->cur_cmd->bufvirtualaddr; + cmdbuf = (u8 *) priv->cur_cmd->cmdbuf; } ret = if_cs_receive_cmdres(priv, cmdbuf, &priv->upld_len); diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index 1ed72b9b6bf..7f829c86c45 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c @@ -142,14 +142,14 @@ static int if_sdio_handle_cmd(struct if_sdio_card *card, goto out; } - if (size > MRVDRV_SIZE_OF_CMD_BUFFER) { + if (size > LBS_CMD_BUFFER_SIZE) { lbs_deb_sdio("response packet too large (%d bytes)\n", (int)size); ret = -E2BIG; goto out; } - memcpy(card->priv->cur_cmd->bufvirtualaddr, buffer, size); + memcpy(card->priv->cur_cmd->cmdbuf, buffer, size); card->priv->upld_len = size; card->int_cause |= MRVDRV_CMD_UPLD_RDY; diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index c94b6dfa20f..5f2d944312a 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -639,7 +639,7 @@ static inline void process_cmdrequest(int recvlength, u8 *recvbuff, struct lbs_private *priv) { u8 *cmdbuf; - if (recvlength > MRVDRV_SIZE_OF_CMD_BUFFER) { + if (recvlength > LBS_CMD_BUFFER_SIZE) { lbs_deb_usbd(&cardp->udev->dev, "The receive buffer is too large\n"); kfree_skb(skb); @@ -656,7 +656,7 @@ static inline void process_cmdrequest(int recvlength, u8 *recvbuff, cmdbuf = priv->upld_buf; priv->hisregcpy &= ~MRVDRV_CMD_UPLD_RDY; } else - cmdbuf = priv->cur_cmd->bufvirtualaddr; + cmdbuf = (u8 *) priv->cur_cmd->cmdbuf; cardp->usb_int_cause |= MRVDRV_CMD_UPLD_RDY; priv->upld_len = (recvlength - MESSAGE_HEADER_LEN); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 212cce34227..a081b91fb9b 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -890,23 +890,21 @@ done: static void command_timer_fn(unsigned long data) { struct lbs_private *priv = (struct lbs_private *)data; - struct cmd_ctrl_node *ptempnode; - struct cmd_ds_command *cmd; + struct cmd_ctrl_node *node; unsigned long flags; - ptempnode = priv->cur_cmd; - if (ptempnode == NULL) { + node = priv->cur_cmd; + if (node == NULL) { lbs_deb_fw("ptempnode empty\n"); return; } - cmd = (struct cmd_ds_command *)ptempnode->bufvirtualaddr; - if (!cmd) { + if (!node->cmdbuf) { lbs_deb_fw("cmd is NULL\n"); return; } - lbs_deb_fw("command_timer_fn fired, cmd %x\n", cmd->command); + lbs_deb_fw("command_timer_fn fired, cmd %x\n", node->cmdbuf->command); if (!priv->fw_ready) return; @@ -916,7 +914,7 @@ static void command_timer_fn(unsigned long data) spin_unlock_irqrestore(&priv->driver_lock, flags); lbs_deb_fw("re-sending same command because of timeout\n"); - lbs_queue_cmd(priv, ptempnode, 0); + lbs_queue_cmd(priv, node, 0); wake_up_interruptible(&priv->waitq); -- cgit v1.2.3-70-g09d2 From 301eacbf30e33f461701df91cb250d3fc24c5fe5 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 11 Dec 2007 15:23:59 -0500 Subject: libertas: convert CMD_MESH_ACCESS to a direct command Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 28 +++++++++-------------- drivers/net/wireless/libertas/cmd.h | 3 +++ drivers/net/wireless/libertas/cmdresp.c | 5 ----- drivers/net/wireless/libertas/hostcmd.h | 3 ++- drivers/net/wireless/libertas/if_usb.c | 11 +++------ drivers/net/wireless/libertas/main.c | 40 ++++++++++++++++----------------- 6 files changed, 39 insertions(+), 51 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index eeb09e05903..9d621fe7f08 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -976,27 +976,25 @@ static int lbs_cmd_fwt_access(struct lbs_private *priv, return 0; } -static int lbs_cmd_mesh_access(struct lbs_private *priv, - struct cmd_ds_command *cmd, - u16 cmd_action, void *pdata_buf) +int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action, + struct cmd_ds_mesh_access *cmd) { - struct cmd_ds_mesh_access *mesh_access = &cmd->params.mesh; + int ret; + lbs_deb_enter_args(LBS_DEB_CMD, "action %d", cmd_action); - cmd->command = cpu_to_le16(CMD_MESH_ACCESS); - cmd->size = cpu_to_le16(sizeof(struct cmd_ds_mesh_access) + S_DS_GEN); - cmd->result = 0; + cmd->hdr.command = cpu_to_le16(CMD_MESH_ACCESS); + cmd->hdr.size = cpu_to_le16(sizeof(struct cmd_ds_mesh_access) + S_DS_GEN); + cmd->hdr.result = 0; - if (pdata_buf) - memcpy(mesh_access, pdata_buf, sizeof(*mesh_access)); - else - memset(mesh_access, 0, sizeof(*mesh_access)); + cmd->action = cpu_to_le16(cmd_action); - mesh_access->action = cpu_to_le16(cmd_action); + ret = lbs_cmd_with_response(priv, CMD_MESH_ACCESS, (*cmd)); lbs_deb_leave(LBS_DEB_CMD); - return 0; + return ret; } +EXPORT_SYMBOL_GPL(lbs_mesh_access); static int lbs_cmd_bcn_ctrl(struct lbs_private * priv, struct cmd_ds_command *cmd, @@ -1486,10 +1484,6 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, ret = lbs_cmd_fwt_access(priv, cmdptr, cmd_action, pdata_buf); break; - case CMD_MESH_ACCESS: - ret = lbs_cmd_mesh_access(priv, cmdptr, cmd_action, pdata_buf); - break; - case CMD_GET_TSF: cmdptr->command = cpu_to_le16(CMD_GET_TSF); cmdptr->size = cpu_to_le16(sizeof(struct cmd_ds_get_tsf) + diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index b8e5d21329a..716f25be5b3 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h @@ -24,4 +24,7 @@ int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra, int lbs_update_hw_spec(struct lbs_private *priv); +int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action, + struct cmd_ds_mesh_access *cmd); + #endif /* _LBS_CMD_H */ diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index b4cd7b79f54..6ff705b49dd 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -653,11 +653,6 @@ static inline int handle_cmd_response(struct lbs_private *priv, sizeof(resp->params.fwt)); spin_unlock_irqrestore(&priv->driver_lock, flags); break; - case CMD_RET(CMD_MESH_ACCESS): - if (priv->cur_cmd->pdata_buf) - memcpy(priv->cur_cmd->pdata_buf, &resp->params.mesh, - sizeof(resp->params.mesh)); - break; case CMD_RET(CMD_802_11_BEACON_CTRL): ret = lbs_ret_802_11_bcn_ctrl(priv, resp); break; diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h index e5e2106cd5a..d9b151a2880 100644 --- a/drivers/net/wireless/libertas/hostcmd.h +++ b/drivers/net/wireless/libertas/hostcmd.h @@ -623,6 +623,8 @@ struct cmd_ds_fwt_access { } __attribute__ ((packed)); struct cmd_ds_mesh_access { + struct cmd_header hdr; + __le16 action; __le32 data[32]; /* last position reserved */ } __attribute__ ((packed)); @@ -687,7 +689,6 @@ struct cmd_ds_command { struct cmd_tx_rate_query txrate; struct cmd_ds_bt_access bt; struct cmd_ds_fwt_access fwt; - struct cmd_ds_mesh_access mesh; struct cmd_ds_get_tsf gettsf; struct cmd_ds_802_11_subscribe_event subscribe_event; struct cmd_ds_802_11_beacon_control bcn_ctrl; diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 5f2d944312a..a0866efb964 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -990,11 +990,9 @@ static int if_usb_suspend(struct usb_interface *intf, pm_message_t message) */ struct cmd_ds_mesh_access mesh_access; memset(&mesh_access, 0, sizeof(mesh_access)); + mesh_access.data[0] = cpu_to_le32(1); - lbs_prepare_and_send_command(priv, - CMD_MESH_ACCESS, - CMD_ACT_MESH_SET_AUTOSTART_ENABLED, - CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); + lbs_mesh_access(priv, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, &mesh_access); } netif_device_detach(cardp->eth_dev); @@ -1031,10 +1029,7 @@ static int if_usb_resume(struct usb_interface *intf) struct cmd_ds_mesh_access mesh_access; memset(&mesh_access, 0, sizeof(mesh_access)); mesh_access.data[0] = cpu_to_le32(0); - lbs_prepare_and_send_command(priv, - CMD_MESH_ACCESS, - CMD_ACT_MESH_SET_AUTOSTART_ENABLED, - CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); + lbs_mesh_access(priv, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, &mesh_access); } lbs_deb_leave(LBS_DEB_USB); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index a081b91fb9b..7f6b3ccef0c 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -217,13 +217,15 @@ u8 lbs_data_rate_to_fw_index(u32 rate) static ssize_t lbs_anycast_get(struct device *dev, struct device_attribute *attr, char * buf) { + struct lbs_private *priv = to_net_dev(dev)->priv; struct cmd_ds_mesh_access mesh_access; + int ret; memset(&mesh_access, 0, sizeof(mesh_access)); - lbs_prepare_and_send_command(to_net_dev(dev)->priv, - CMD_MESH_ACCESS, - CMD_ACT_MESH_GET_ANYCAST, - CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); + + ret = lbs_mesh_access(priv, CMD_ACT_MESH_GET_ANYCAST, &mesh_access); + if (ret) + return ret; return snprintf(buf, 12, "0x%X\n", le32_to_cpu(mesh_access.data[0])); } @@ -234,17 +236,19 @@ static ssize_t lbs_anycast_get(struct device *dev, static ssize_t lbs_anycast_set(struct device *dev, struct device_attribute *attr, const char * buf, size_t count) { + struct lbs_private *priv = to_net_dev(dev)->priv; struct cmd_ds_mesh_access mesh_access; uint32_t datum; + int ret; memset(&mesh_access, 0, sizeof(mesh_access)); sscanf(buf, "%x", &datum); mesh_access.data[0] = cpu_to_le32(datum); - lbs_prepare_and_send_command((to_net_dev(dev))->priv, - CMD_MESH_ACCESS, - CMD_ACT_MESH_SET_ANYCAST, - CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); + ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_ANYCAST, &mesh_access); + if (ret) + return ret; + return strlen(buf); } @@ -323,14 +327,15 @@ static DEVICE_ATTR(anycast_mask, 0644, lbs_anycast_get, lbs_anycast_set); static ssize_t lbs_autostart_enabled_get(struct device *dev, struct device_attribute *attr, char * buf) { + struct lbs_private *priv = to_net_dev(dev)->priv; struct cmd_ds_mesh_access mesh_access; + int ret; memset(&mesh_access, 0, sizeof(mesh_access)); - lbs_prepare_and_send_command(to_net_dev(dev)->priv, - CMD_MESH_ACCESS, - CMD_ACT_MESH_GET_AUTOSTART_ENABLED, - CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); + ret = lbs_mesh_access(priv, CMD_ACT_MESH_GET_AUTOSTART_ENABLED, &mesh_access); + if (ret) + return ret; return sprintf(buf, "%d\n", le32_to_cpu(mesh_access.data[0])); } @@ -346,10 +351,7 @@ static ssize_t lbs_autostart_enabled_set(struct device *dev, sscanf(buf, "%d", &datum); mesh_access.data[0] = cpu_to_le32(datum); - ret = lbs_prepare_and_send_command(priv, - CMD_MESH_ACCESS, - CMD_ACT_MESH_SET_AUTOSTART_ENABLED, - CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); + ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, &mesh_access); if (ret == 0) priv->mesh_autostart_enabled = datum ? 1 : 0; @@ -866,10 +868,8 @@ static int lbs_setup_firmware(struct lbs_private *priv) if (priv->mesh_dev) { memset(&mesh_access, 0, sizeof(mesh_access)); mesh_access.data[0] = cpu_to_le32(0); - ret = lbs_prepare_and_send_command(priv, - CMD_MESH_ACCESS, - CMD_ACT_MESH_SET_AUTOSTART_ENABLED, - CMD_OPTION_WAITFORRSP, 0, (void *)&mesh_access); + ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, + &mesh_access); if (ret) { ret = -1; goto done; -- cgit v1.2.3-70-g09d2 From 8e3c91bb70372da692a5fefae9f698c94bb1e641 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 11 Dec 2007 15:50:59 -0500 Subject: libertas: convert DATA_RATE to a direct command Signed-off-by: Dan Williams Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 93 ++++++++++++++++++++++++++------- drivers/net/wireless/libertas/cmd.h | 3 ++ drivers/net/wireless/libertas/cmdresp.c | 23 -------- drivers/net/wireless/libertas/hostcmd.h | 3 +- drivers/net/wireless/libertas/main.c | 8 +-- drivers/net/wireless/libertas/wext.c | 9 ++-- 6 files changed, 83 insertions(+), 56 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 9d621fe7f08..eff78792fc6 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -706,30 +706,86 @@ static int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv, return 0; } -static int lbs_cmd_802_11_data_rate(struct lbs_private *priv, - struct cmd_ds_command *cmd, - u16 cmd_action) +/** + * @brief Get the current data rate + * + * @param priv A pointer to struct lbs_private structure + * + * @return The data rate on success, error on failure + */ +int lbs_get_data_rate(struct lbs_private *priv) { - struct cmd_ds_802_11_data_rate *pdatarate = &cmd->params.drate; + struct cmd_ds_802_11_data_rate cmd; + int ret = -1; lbs_deb_enter(LBS_DEB_CMD); - cmd->size = cpu_to_le16(sizeof(struct cmd_ds_802_11_data_rate) + - S_DS_GEN); - cmd->command = cpu_to_le16(CMD_802_11_DATA_RATE); - memset(pdatarate, 0, sizeof(struct cmd_ds_802_11_data_rate)); - pdatarate->action = cpu_to_le16(cmd_action); - - if (cmd_action == CMD_ACT_SET_TX_FIX_RATE) { - pdatarate->rates[0] = lbs_data_rate_to_fw_index(priv->cur_rate); - lbs_deb_cmd("DATA_RATE: set fixed 0x%02X\n", - priv->cur_rate); - } else if (cmd_action == CMD_ACT_SET_TX_AUTO) { + memset(&cmd, 0, sizeof(cmd)); + cmd.hdr.size = cpu_to_le16(sizeof(cmd)); + cmd.action = cpu_to_le16(CMD_ACT_GET_TX_RATE); + + ret = lbs_cmd_with_response(priv, CMD_802_11_DATA_RATE, cmd); + if (ret) + goto out; + + lbs_deb_hex(LBS_DEB_CMD, "DATA_RATE_RESP", (u8 *) &cmd, sizeof (cmd)); + + ret = (int) lbs_fw_index_to_data_rate(cmd.rates[0]); + lbs_deb_cmd("DATA_RATE: current rate 0x%02x\n", ret); + +out: + lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret); + return ret; +} + +/** + * @brief Set the data rate + * + * @param priv A pointer to struct lbs_private structure + * @param rate The desired data rate, or 0 to clear a locked rate + * + * @return 0 on success, error on failure + */ +int lbs_set_data_rate(struct lbs_private *priv, u8 rate) +{ + struct cmd_ds_802_11_data_rate cmd; + int ret = 0; + + lbs_deb_enter(LBS_DEB_CMD); + + memset(&cmd, 0, sizeof(cmd)); + cmd.hdr.size = cpu_to_le16(sizeof(cmd)); + + if (rate > 0) { + cmd.action = cpu_to_le16(CMD_ACT_SET_TX_FIX_RATE); + cmd.rates[0] = lbs_data_rate_to_fw_index(rate); + if (cmd.rates[0] == 0) { + lbs_deb_cmd("DATA_RATE: invalid requested rate of" + " 0x%02X\n", rate); + ret = 0; + goto out; + } + lbs_deb_cmd("DATA_RATE: set fixed 0x%02X\n", cmd.rates[0]); + } else { + cmd.action = cpu_to_le16(CMD_ACT_SET_TX_AUTO); lbs_deb_cmd("DATA_RATE: setting auto\n"); } - lbs_deb_leave(LBS_DEB_CMD); - return 0; + ret = lbs_cmd_with_response(priv, CMD_802_11_DATA_RATE, cmd); + if (ret) + goto out; + + lbs_deb_hex(LBS_DEB_CMD, "DATA_RATE_RESP", (u8 *) &cmd, sizeof (cmd)); + + /* FIXME: get actual rates FW can do if this command actually returns + * all data rates supported. + */ + priv->cur_rate = lbs_fw_index_to_data_rate(cmd.rates[0]); + lbs_deb_cmd("DATA_RATE: current rate is 0x%02x\n", priv->cur_rate); + +out: + lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret); + return ret; } static int lbs_cmd_mac_multicast_adr(struct lbs_private *priv, @@ -1348,9 +1404,6 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, ret = lbs_cmd_802_11_radio_control(priv, cmdptr, cmd_action); break; - case CMD_802_11_DATA_RATE: - ret = lbs_cmd_802_11_data_rate(priv, cmdptr, cmd_action); - break; case CMD_802_11_RATE_ADAPT_RATESET: ret = lbs_cmd_802_11_rate_adapt_rateset(priv, cmdptr, cmd_action); diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index 950acce3baa..4bd6f56281f 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h @@ -27,4 +27,7 @@ int lbs_update_hw_spec(struct lbs_private *priv); int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action, struct cmd_ds_mesh_access *cmd); +int lbs_get_data_rate(struct lbs_private *priv); +int lbs_set_data_rate(struct lbs_private *priv, u8 rate); + #endif /* _LBS_CMD_H */ diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 6ff705b49dd..797c943457e 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -325,26 +325,6 @@ static int lbs_ret_802_11_rate_adapt_rateset(struct lbs_private *priv, return 0; } -static int lbs_ret_802_11_data_rate(struct lbs_private *priv, - struct cmd_ds_command *resp) -{ - struct cmd_ds_802_11_data_rate *pdatarate = &resp->params.drate; - - lbs_deb_enter(LBS_DEB_CMD); - - lbs_deb_hex(LBS_DEB_CMD, "DATA_RATE_RESP", (u8 *) pdatarate, - sizeof(struct cmd_ds_802_11_data_rate)); - - /* FIXME: get actual rates FW can do if this command actually returns - * all data rates supported. - */ - priv->cur_rate = lbs_fw_index_to_data_rate(pdatarate->rates[0]); - lbs_deb_cmd("DATA_RATE: current rate 0x%02x\n", priv->cur_rate); - - lbs_deb_leave(LBS_DEB_CMD); - return 0; -} - static int lbs_ret_802_11_rf_channel(struct lbs_private *priv, struct cmd_ds_command *resp) { @@ -565,9 +545,6 @@ static inline int handle_cmd_response(struct lbs_private *priv, ret = lbs_ret_802_11_enable_rsn(priv, resp); break; - case CMD_RET(CMD_802_11_DATA_RATE): - ret = lbs_ret_802_11_data_rate(priv, resp); - break; case CMD_RET(CMD_802_11_RATE_ADAPT_RATESET): ret = lbs_ret_802_11_rate_adapt_rateset(priv, resp); break; diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h index d9b151a2880..d51010c47b5 100644 --- a/drivers/net/wireless/libertas/hostcmd.h +++ b/drivers/net/wireless/libertas/hostcmd.h @@ -461,6 +461,8 @@ struct PS_CMD_ConfirmSleep { }; struct cmd_ds_802_11_data_rate { + struct cmd_header hdr; + __le16 action; __le16 reserved; u8 rates[MAX_RATES]; @@ -659,7 +661,6 @@ struct cmd_ds_command { struct cmd_ds_802_11_rf_tx_power txp; struct cmd_ds_802_11_rf_antenna rant; struct cmd_ds_802_11_monitor_mode monitor; - struct cmd_ds_802_11_data_rate drate; struct cmd_ds_802_11_rate_adapt_rateset rateset; struct cmd_ds_mac_multicast_adr madr; struct cmd_ds_802_11_ad_hoc_join adj; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 7f6b3ccef0c..2fe7ad0f832 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -854,12 +854,8 @@ static int lbs_setup_firmware(struct lbs_private *priv) lbs_set_mac_packet_filter(priv); - /* Get the supported Data rates */ - ret = lbs_prepare_and_send_command(priv, CMD_802_11_DATA_RATE, - CMD_ACT_GET_TX_RATE, - CMD_OPTION_WAITFORRSP, 0, NULL); - - if (ret) { + ret = lbs_get_data_rate(priv); + if (ret < 0) { ret = -1; goto done; } diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c index 1e0b2245db5..e44c0ce804e 100644 --- a/drivers/net/wireless/libertas/wext.c +++ b/drivers/net/wireless/libertas/wext.c @@ -19,6 +19,7 @@ #include "join.h" #include "wext.h" #include "assoc.h" +#include "cmd.h" static inline void lbs_postpone_association_work(struct lbs_private *priv) @@ -962,8 +963,7 @@ static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { struct lbs_private *priv = dev->priv; - u32 new_rate; - u16 action; + u8 new_rate = 0; int ret = -EINVAL; u8 rates[MAX_RATES + 1]; @@ -972,7 +972,6 @@ static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, /* Auto rate? */ if (vwrq->value == -1) { - action = CMD_ACT_SET_TX_AUTO; priv->auto_rate = 1; priv->cur_rate = 0; } else { @@ -989,12 +988,10 @@ static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, } priv->cur_rate = new_rate; - action = CMD_ACT_SET_TX_FIX_RATE; priv->auto_rate = 0; } - ret = lbs_prepare_and_send_command(priv, CMD_802_11_DATA_RATE, - action, CMD_OPTION_WAITFORRSP, 0, NULL); + ret = lbs_set_data_rate(priv, new_rate); out: lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); -- cgit v1.2.3-70-g09d2 From 2fd6cfe307557f3022b47288db3dc094c076e539 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 11 Dec 2007 17:44:10 -0500 Subject: libertas: make some more functions static sparse was getting on my tits. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 12 ++++++------ drivers/net/wireless/libertas/if_usb.c | 2 +- drivers/net/wireless/libertas/main.c | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 0f07c2ab9ca..2228feccb24 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -14,8 +14,8 @@ #include "cmd.h" static void cleanup_cmdnode(struct cmd_ctrl_node *ptempnode); -struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv); -void lbs_set_cmd_ctrl_node(struct lbs_private *priv, +static struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv); +static void lbs_set_cmd_ctrl_node(struct lbs_private *priv, struct cmd_ctrl_node *ptempnode, u16 wait_option, void *pdata_buf); @@ -1716,7 +1716,7 @@ done: * @param priv A pointer to struct lbs_private structure * @return cmd_ctrl_node A pointer to cmd_ctrl_node structure or NULL */ -struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv) +static struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv) { struct cmd_ctrl_node *tempnode; unsigned long flags; @@ -1780,9 +1780,9 @@ static void cleanup_cmdnode(struct cmd_ctrl_node *cmdnode) * @param pdata_buf A pointer to informaion buffer * @return 0 or -1 */ -void lbs_set_cmd_ctrl_node(struct lbs_private *priv, - struct cmd_ctrl_node *ptempnode, - u16 wait_option, void *pdata_buf) +static void lbs_set_cmd_ctrl_node(struct lbs_private *priv, + struct cmd_ctrl_node *ptempnode, + u16 wait_option, void *pdata_buf) { lbs_deb_enter(LBS_DEB_HOST); diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index a0866efb964..7c57ff44ad0 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -113,7 +113,7 @@ static void if_usb_set_boot2_ver(struct lbs_private *priv) lbs_deb_usb("Setting boot2 version failed\n"); } -void if_usb_fw_timeo(unsigned long priv) +static void if_usb_fw_timeo(unsigned long priv) { struct usb_card_rec *cardp = (void *)priv; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 2fe7ad0f832..c51d3af131f 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -252,8 +252,8 @@ static ssize_t lbs_anycast_set(struct device *dev, return strlen(buf); } -int lbs_add_rtap(struct lbs_private *priv); -void lbs_remove_rtap(struct lbs_private *priv); +static int lbs_add_rtap(struct lbs_private *priv); +static void lbs_remove_rtap(struct lbs_private *priv); /** * Get function for sysfs attribute rtap @@ -1423,7 +1423,7 @@ static struct net_device_stats *lbs_rtap_get_stats(struct net_device *dev) } -void lbs_remove_rtap(struct lbs_private *priv) +static void lbs_remove_rtap(struct lbs_private *priv) { if (priv->rtap_net_dev == NULL) return; @@ -1432,7 +1432,7 @@ void lbs_remove_rtap(struct lbs_private *priv) priv->rtap_net_dev = NULL; } -int lbs_add_rtap(struct lbs_private *priv) +static int lbs_add_rtap(struct lbs_private *priv) { int rc = 0; struct net_device *rtap_dev; -- cgit v1.2.3-70-g09d2 From 23a397ac821ab0aa263bda47131bb0628e49101a Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 11 Dec 2007 18:56:42 -0500 Subject: libertas: add lbs_mesh sysfs attribute for enabling mesh Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 17 ++++++++ drivers/net/wireless/libertas/cmd.h | 2 + drivers/net/wireless/libertas/decl.h | 2 - drivers/net/wireless/libertas/dev.h | 2 + drivers/net/wireless/libertas/host.h | 1 + drivers/net/wireless/libertas/hostcmd.h | 12 ++++++ drivers/net/wireless/libertas/if_usb.c | 6 --- drivers/net/wireless/libertas/main.c | 74 +++++++++++++++++++++++++++++---- 8 files changed, 99 insertions(+), 17 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 2228feccb24..01d23493b4e 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -1093,6 +1093,23 @@ int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action, } EXPORT_SYMBOL_GPL(lbs_mesh_access); +int lbs_mesh_config(struct lbs_private *priv, int enable) +{ + struct cmd_ds_mesh_config cmd; + + memset(&cmd, 0, sizeof(cmd)); + cmd.action = cpu_to_le16(enable); + cmd.channel = cpu_to_le16(priv->curbssparams.channel); + cmd.type = cpu_to_le16(0x100 + 37); + + if (enable) { + cmd.length = cpu_to_le16(priv->mesh_ssid_len); + memcpy(cmd.data, priv->mesh_ssid, priv->mesh_ssid_len); + } + + return lbs_cmd_with_response(priv, CMD_MESH_CONFIG, cmd); +} + static int lbs_cmd_bcn_ctrl(struct lbs_private * priv, struct cmd_ds_command *cmd, u16 cmd_action) diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index 5b02d73c8a0..80714b51285 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h @@ -33,4 +33,6 @@ int lbs_set_data_rate(struct lbs_private *priv, u8 rate); int lbs_get_channel(struct lbs_private *priv); int lbs_set_channel(struct lbs_private *priv, u8 channel); +int lbs_mesh_config(struct lbs_private *priv, int enable); + #endif /* _LBS_CMD_H */ diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h index 33c8305b5c0..9b0ef166185 100644 --- a/drivers/net/wireless/libertas/decl.h +++ b/drivers/net/wireless/libertas/decl.h @@ -74,8 +74,6 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev); int lbs_remove_card(struct lbs_private *priv); int lbs_start_card(struct lbs_private *priv); int lbs_stop_card(struct lbs_private *priv); -int lbs_add_mesh(struct lbs_private *priv, struct device *dev); -void lbs_remove_mesh(struct lbs_private *priv); int lbs_reset_device(struct lbs_private *priv); void lbs_host_to_card_done(struct lbs_private *priv); diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 9921d0cd6f1..86b45a471fc 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -201,6 +201,8 @@ struct lbs_private { /** current ssid/bssid related parameters*/ struct current_bss_params curbssparams; + u8 mesh_ssid[IW_ESSID_MAX_SIZE + 1]; + u8 mesh_ssid_len; /* IW_MODE_* */ u8 mode; diff --git a/drivers/net/wireless/libertas/host.h b/drivers/net/wireless/libertas/host.h index cc5f9bf6cf2..fcd223807ba 100644 --- a/drivers/net/wireless/libertas/host.h +++ b/drivers/net/wireless/libertas/host.h @@ -113,6 +113,7 @@ #define CMD_802_11_MONITOR_MODE 0x0098 #define CMD_MESH_ACCESS 0x009b +#define CMD_MESH_CONFIG 0x00a3 #define CMD_SET_BOOT2_VER 0x00a5 diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h index 7acb6511667..aab5d64f32d 100644 --- a/drivers/net/wireless/libertas/hostcmd.h +++ b/drivers/net/wireless/libertas/hostcmd.h @@ -626,6 +626,18 @@ struct cmd_ds_fwt_access { u8 prec[ETH_ALEN]; } __attribute__ ((packed)); + +struct cmd_ds_mesh_config { + struct cmd_header hdr; + + __le16 action; + __le16 channel; + __le16 type; + __le16 length; + u8 data[128]; /* last position reserved */ +} __attribute__ ((packed)); + + struct cmd_ds_mesh_access { struct cmd_header hdr; diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 7c57ff44ad0..351c7ea4318 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -232,9 +232,6 @@ static int if_usb_probe(struct usb_interface *intf, cardp->priv = priv; cardp->priv->fw_ready = 1; - if (lbs_add_mesh(priv, &udev->dev)) - goto err_add_mesh; - cardp->eth_dev = priv->dev; priv->hw_host_to_card = if_usb_host_to_card; @@ -255,8 +252,6 @@ static int if_usb_probe(struct usb_interface *intf, return 0; err_start_card: - lbs_remove_mesh(priv); -err_add_mesh: lbs_remove_card(priv); err_prog_firmware: if_usb_reset_device(cardp); @@ -286,7 +281,6 @@ static void if_usb_disconnect(struct usb_interface *intf) priv->surpriseremoved = 1; lbs_stop_card(priv); - lbs_remove_mesh(priv); lbs_remove_card(priv); } diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index c51d3af131f..fd76c46225d 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -254,6 +254,9 @@ static ssize_t lbs_anycast_set(struct device *dev, static int lbs_add_rtap(struct lbs_private *priv); static void lbs_remove_rtap(struct lbs_private *priv); +static int lbs_add_mesh(struct lbs_private *priv); +static void lbs_remove_mesh(struct lbs_private *priv); + /** * Get function for sysfs attribute rtap @@ -312,11 +315,53 @@ static ssize_t lbs_rtap_set(struct device *dev, } /** - * lbs_rtap attribute to be exported per mshX interface - * through sysfs (/sys/class/net/mshX/libertas-rtap) + * lbs_rtap attribute to be exported per ethX interface + * through sysfs (/sys/class/net/ethX/lbs_rtap) */ -static DEVICE_ATTR(lbs_rtap, 0644, lbs_rtap_get, - lbs_rtap_set ); +static DEVICE_ATTR(lbs_rtap, 0644, lbs_rtap_get, lbs_rtap_set ); + +/** + * Get function for sysfs attribute mesh + */ +static ssize_t lbs_mesh_get(struct device *dev, + struct device_attribute *attr, char * buf) +{ + struct lbs_private *priv = to_net_dev(dev)->priv; + return snprintf(buf, 5, "0x%X\n", !!priv->mesh_dev); +} + +/** + * Set function for sysfs attribute mesh + */ +static ssize_t lbs_mesh_set(struct device *dev, + struct device_attribute *attr, const char * buf, size_t count) +{ + struct lbs_private *priv = to_net_dev(dev)->priv; + int enable; + int ret; + + sscanf(buf, "%x", &enable); + enable = !!enable; + if (enable == !!priv->mesh_dev) + return count; + + ret = lbs_mesh_config(priv, enable); + if (ret) + return ret; + + if (enable) + lbs_add_mesh(priv); + else + lbs_remove_mesh(priv); + + return count; +} + +/** + * lbs_mesh attribute to be exported per ethX interface + * through sysfs (/sys/class/net/ethX/lbs_mesh) + */ +static DEVICE_ATTR(lbs_mesh, 0644, lbs_mesh_get, lbs_mesh_set); /** * anycast_mask attribute to be exported per mshX interface @@ -867,7 +912,9 @@ static int lbs_setup_firmware(struct lbs_private *priv) ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, &mesh_access); if (ret) { - ret = -1; + printk("Mesh autostart set failed\n"); + ret = 0; + //ret = -1; goto done; } priv->mesh_autostart_enabled = 0; @@ -1059,6 +1106,9 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) INIT_DELAYED_WORK(&priv->scan_work, lbs_scan_worker); INIT_WORK(&priv->sync_channel, lbs_sync_channel); + sprintf(priv->mesh_ssid, "mesh"); + priv->mesh_ssid_len = 4; + goto done; err_init_adapter: @@ -1080,6 +1130,7 @@ int lbs_remove_card(struct lbs_private *priv) lbs_deb_enter(LBS_DEB_MAIN); + lbs_remove_mesh(priv); lbs_remove_rtap(priv); dev = priv->dev; @@ -1133,6 +1184,8 @@ int lbs_start_card(struct lbs_private *priv) } if (device_create_file(&dev->dev, &dev_attr_lbs_rtap)) lbs_pr_err("cannot register lbs_rtap attribute\n"); + if (device_create_file(&dev->dev, &dev_attr_lbs_mesh)) + lbs_pr_err("cannot register lbs_mesh attribute\n"); lbs_debugfs_init_one(priv, dev); @@ -1161,6 +1214,7 @@ int lbs_stop_card(struct lbs_private *priv) lbs_debugfs_remove_one(priv); device_remove_file(&dev->dev, &dev_attr_lbs_rtap); + device_remove_file(&dev->dev, &dev_attr_lbs_mesh); /* Flush pending command nodes */ spin_lock_irqsave(&priv->driver_lock, flags); @@ -1184,7 +1238,7 @@ EXPORT_SYMBOL_GPL(lbs_stop_card); * @param priv A pointer to the struct lbs_private structure * @return 0 if successful, -X otherwise */ -int lbs_add_mesh(struct lbs_private *priv, struct device *dev) +static int lbs_add_mesh(struct lbs_private *priv) { struct net_device *mesh_dev = NULL; int ret = 0; @@ -1209,7 +1263,7 @@ int lbs_add_mesh(struct lbs_private *priv, struct device *dev) memcpy(mesh_dev->dev_addr, priv->dev->dev_addr, sizeof(priv->dev->dev_addr)); - SET_NETDEV_DEV(priv->mesh_dev, dev); + SET_NETDEV_DEV(priv->mesh_dev, priv->dev->dev.parent); #ifdef WIRELESS_EXT mesh_dev->wireless_handlers = (struct iw_handler_def *)&mesh_handler_def; @@ -1242,7 +1296,7 @@ done: EXPORT_SYMBOL_GPL(lbs_add_mesh); -void lbs_remove_mesh(struct lbs_private *priv) +static void lbs_remove_mesh(struct lbs_private *priv) { struct net_device *mesh_dev; @@ -1252,6 +1306,8 @@ void lbs_remove_mesh(struct lbs_private *priv) goto out; mesh_dev = priv->mesh_dev; + if (!mesh_dev) + goto out; netif_stop_queue(mesh_dev); netif_carrier_off(priv->mesh_dev); @@ -1259,7 +1315,7 @@ void lbs_remove_mesh(struct lbs_private *priv) sysfs_remove_group(&(mesh_dev->dev.kobj), &lbs_mesh_attr_group); unregister_netdev(mesh_dev); - priv->mesh_dev = NULL ; + priv->mesh_dev = NULL; free_netdev(mesh_dev); out: -- cgit v1.2.3-70-g09d2 From 1f8a08342c8c1c90d0b752f28eb6f24ea7164cdb Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 11 Dec 2007 18:57:49 -0500 Subject: libertas: kill references to mesh autostart Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/if_usb.c | 21 ------------- drivers/net/wireless/libertas/main.c | 54 ---------------------------------- 2 files changed, 75 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 351c7ea4318..b19a6c9c2a7 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -978,17 +978,6 @@ static int if_usb_suspend(struct usb_interface *intf, pm_message_t message) if (priv->psstate != PS_STATE_FULL_POWER) return -1; - if (priv->mesh_dev && !priv->mesh_autostart_enabled) { - /* Mesh autostart must be activated while sleeping - * On resume it will go back to the current state - */ - struct cmd_ds_mesh_access mesh_access; - memset(&mesh_access, 0, sizeof(mesh_access)); - - mesh_access.data[0] = cpu_to_le32(1); - lbs_mesh_access(priv, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, &mesh_access); - } - netif_device_detach(cardp->eth_dev); netif_device_detach(priv->mesh_dev); @@ -1016,16 +1005,6 @@ static int if_usb_resume(struct usb_interface *intf) netif_device_attach(cardp->eth_dev); netif_device_attach(priv->mesh_dev); - if (priv->mesh_dev && !priv->mesh_autostart_enabled) { - /* Mesh autostart was activated while sleeping - * Disable it if appropriate - */ - struct cmd_ds_mesh_access mesh_access; - memset(&mesh_access, 0, sizeof(mesh_access)); - mesh_access.data[0] = cpu_to_le32(0); - lbs_mesh_access(priv, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, &mesh_access); - } - lbs_deb_leave(LBS_DEB_USB); return 0; } diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index fd76c46225d..bb685ac8e15 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -369,46 +369,8 @@ static DEVICE_ATTR(lbs_mesh, 0644, lbs_mesh_get, lbs_mesh_set); */ static DEVICE_ATTR(anycast_mask, 0644, lbs_anycast_get, lbs_anycast_set); -static ssize_t lbs_autostart_enabled_get(struct device *dev, - struct device_attribute *attr, char * buf) -{ - struct lbs_private *priv = to_net_dev(dev)->priv; - struct cmd_ds_mesh_access mesh_access; - int ret; - - memset(&mesh_access, 0, sizeof(mesh_access)); - - ret = lbs_mesh_access(priv, CMD_ACT_MESH_GET_AUTOSTART_ENABLED, &mesh_access); - if (ret) - return ret; - return sprintf(buf, "%d\n", le32_to_cpu(mesh_access.data[0])); -} - -static ssize_t lbs_autostart_enabled_set(struct device *dev, - struct device_attribute *attr, const char * buf, size_t count) -{ - struct cmd_ds_mesh_access mesh_access; - uint32_t datum; - struct lbs_private *priv = (to_net_dev(dev))->priv; - int ret; - - memset(&mesh_access, 0, sizeof(mesh_access)); - sscanf(buf, "%d", &datum); - mesh_access.data[0] = cpu_to_le32(datum); - - ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, &mesh_access); - if (ret == 0) - priv->mesh_autostart_enabled = datum ? 1 : 0; - - return strlen(buf); -} - -static DEVICE_ATTR(autostart_enabled, 0644, - lbs_autostart_enabled_get, lbs_autostart_enabled_set); - static struct attribute *lbs_mesh_sysfs_entries[] = { &dev_attr_anycast_mask.attr, - &dev_attr_autostart_enabled.attr, NULL, }; @@ -883,7 +845,6 @@ static int lbs_thread(void *data) static int lbs_setup_firmware(struct lbs_private *priv) { int ret = -1; - struct cmd_ds_mesh_access mesh_access; lbs_deb_enter(LBS_DEB_FW); @@ -905,21 +866,6 @@ static int lbs_setup_firmware(struct lbs_private *priv) goto done; } - /* Disable mesh autostart */ - if (priv->mesh_dev) { - memset(&mesh_access, 0, sizeof(mesh_access)); - mesh_access.data[0] = cpu_to_le32(0); - ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_AUTOSTART_ENABLED, - &mesh_access); - if (ret) { - printk("Mesh autostart set failed\n"); - ret = 0; - //ret = -1; - goto done; - } - priv->mesh_autostart_enabled = 0; - } - ret = 0; done: lbs_deb_leave_args(LBS_DEB_FW, "ret %d", ret); -- cgit v1.2.3-70-g09d2 From e1258177e437cb8b892622f2b7beedd4701540ac Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 11 Dec 2007 23:42:49 -0500 Subject: libertas: be more careful about command responses matching cur_cmd Especially in the light of OLPC trac #5461, in which the firmware starts sending us seemingly random command responses which bear little relation to the command we sent it. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 4 ++-- drivers/net/wireless/libertas/cmdresp.c | 36 ++++++++++++++++++++------------- drivers/net/wireless/libertas/if_usb.c | 1 + drivers/net/wireless/libertas/main.c | 2 +- 4 files changed, 26 insertions(+), 17 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 1cb42dc9001..5ddb46a477a 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -1216,8 +1216,8 @@ static int DownloadcommandToStation(struct lbs_private *priv, cmdsize = le16_to_cpu(cmd->size); command = le16_to_cpu(cmd->command); - lbs_deb_host("DNLD_CMD: command 0x%04x, size %d, jiffies %lu\n", - command, cmdsize, jiffies); + lbs_deb_host("DNLD_CMD: command 0x%04x, seq %d, size %d, jiffies %lu\n", + command, le16_to_cpu(cmd->seqnum), cmdsize, jiffies); lbs_deb_hex(LBS_DEB_HOST, "DNLD_CMD", (void *) cmdnode->cmdbuf, cmdsize); cmdnode->cmdwaitqwoken = 0; diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index bf9941ecc23..53f73c4abdd 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -611,7 +611,7 @@ static inline int handle_cmd_response(struct lbs_private *priv, default: lbs_deb_host("CMD_RESP: unknown cmd response 0x%04x\n", - resp->command); + le16_to_cpu(resp->command)); break; } lbs_deb_leave(LBS_DEB_HOST); @@ -620,17 +620,14 @@ static inline int handle_cmd_response(struct lbs_private *priv, int lbs_process_rx_command(struct lbs_private *priv) { - u16 respcmd; + uint16_t respcmd, curcmd; struct cmd_header *resp; int ret = 0; - ulong flags; - u16 result; + unsigned long flags; + uint16_t result; lbs_deb_enter(LBS_DEB_HOST); - /* Now we got response from FW, cancel the command timer */ - del_timer(&priv->command_timer); - mutex_lock(&priv->lock); spin_lock_irqsave(&priv->driver_lock, flags); @@ -640,24 +637,35 @@ int lbs_process_rx_command(struct lbs_private *priv) spin_unlock_irqrestore(&priv->driver_lock, flags); goto done; } + + curcmd = le16_to_cpu(priv->cur_cmd->cmdbuf->command); + resp = priv->cur_cmd->cmdbuf; respcmd = le16_to_cpu(resp->command); result = le16_to_cpu(resp->result); - lbs_deb_host("CMD_RESP: response 0x%04x, size %d, jiffies %lu\n", - respcmd, priv->upld_len, jiffies); + lbs_deb_host("CMD_RESP: response 0x%04x, seq %d, size %d, jiffies %lu\n", + respcmd, le16_to_cpu(resp->seqnum), priv->upld_len, jiffies); lbs_deb_hex(LBS_DEB_HOST, "CMD_RESP", (void *) resp, priv->upld_len); - if (!(respcmd & 0x8000)) { - lbs_deb_host("invalid response!\n"); - priv->cur_cmd_retcode = -1; - __lbs_cleanup_and_insert_cmd(priv, priv->cur_cmd); - priv->cur_cmd = NULL; + if (resp->seqnum != priv->cur_cmd->cmdbuf->seqnum) { + lbs_pr_info("Received CMD_RESP with invalid sequence %d (expected %d)\n", + le16_to_cpu(resp->seqnum), le16_to_cpu(priv->cur_cmd->cmdbuf->seqnum)); spin_unlock_irqrestore(&priv->driver_lock, flags); ret = -1; goto done; } + if (respcmd != CMD_RET(curcmd) && + respcmd != CMD_802_11_ASSOCIATE && curcmd != CMD_RET_802_11_ASSOCIATE) { + lbs_pr_info("Invalid CMD_RESP %x to command %x!\n", respcmd, curcmd); + spin_unlock_irqrestore(&priv->driver_lock, flags); + ret = -1; + goto done; + } + + /* Now we got response from FW, cancel the command timer */ + del_timer(&priv->command_timer); /* Store the response code to cur_cmd_retcode. */ priv->cur_cmd_retcode = result; diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 02192e8a15e..6b8ac62e6f9 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -643,6 +643,7 @@ static inline void process_cmdrequest(int recvlength, u8 *recvbuff, /* take care of cur_cmd = NULL case by reading the * data to clear the interrupt */ if (!priv->cur_cmd) { + lbs_deb_hex(LBS_DEB_HOST, "Unsolicited CMD_RESP", (void *) recvbuff + MESSAGE_HEADER_LEN, priv->upld_len); cmdbuf = priv->upld_buf; priv->hisregcpy &= ~MRVDRV_CMD_UPLD_RDY; } else diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index bb685ac8e15..cdf5934aaf8 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -893,7 +893,7 @@ static void command_timer_fn(unsigned long data) return; } - lbs_deb_fw("command_timer_fn fired, cmd %x\n", node->cmdbuf->command); + lbs_pr_info("command %x timed out\n", le16_to_cpu(node->cmdbuf->command)); if (!priv->fw_ready) return; -- cgit v1.2.3-70-g09d2 From a27b9f96f21a2f15c423cca745f65de3db61e364 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 12 Dec 2007 00:41:51 -0500 Subject: libertas: slight cleanup of netif queue stop/wake In particular, we shouldn't be waking the queues in lbs_host_to_card_done() any more. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmdresp.c | 14 ++++++++------ drivers/net/wireless/libertas/join.c | 7 ++++--- drivers/net/wireless/libertas/main.c | 12 +----------- drivers/net/wireless/libertas/scan.c | 12 +++++++----- 4 files changed, 20 insertions(+), 25 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 53f73c4abdd..a809f8f9997 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -43,14 +43,15 @@ void lbs_mac_event_disconnected(struct lbs_private *priv) msleep_interruptible(1000); wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); - /* Free Tx and Rx packets */ - kfree_skb(priv->currenttxskb); - priv->currenttxskb = NULL; - /* report disconnect to upper layer */ netif_stop_queue(priv->dev); netif_carrier_off(priv->dev); + /* Free Tx and Rx packets */ + kfree_skb(priv->currenttxskb); + priv->currenttxskb = NULL; + priv->tx_pending_len = 0; + /* reset SNR/NF/RSSI values */ memset(priv->SNR, 0x00, sizeof(priv->SNR)); memset(priv->NF, 0x00, sizeof(priv->NF)); @@ -883,9 +884,10 @@ int lbs_process_event(struct lbs_private *priv) } lbs_pr_info("EVENT: MESH_AUTO_STARTED\n"); priv->mesh_connect_status = LBS_CONNECTED; - if (priv->mesh_open == 1) { - netif_wake_queue(priv->mesh_dev); + if (priv->mesh_open) { netif_carrier_on(priv->mesh_dev); + if (!priv->tx_pending_len) + netif_wake_queue(priv->mesh_dev); } priv->mode = IW_MODE_ADHOC; schedule_work(&priv->sync_channel); diff --git a/drivers/net/wireless/libertas/join.c b/drivers/net/wireless/libertas/join.c index 14425d9a198..2d4508048b6 100644 --- a/drivers/net/wireless/libertas/join.c +++ b/drivers/net/wireless/libertas/join.c @@ -781,8 +781,8 @@ int lbs_ret_80211_associate(struct lbs_private *priv, priv->numSNRNF = 0; netif_carrier_on(priv->dev); - netif_wake_queue(priv->dev); - + if (!priv->tx_pending_len) + netif_wake_queue(priv->dev); memcpy(wrqu.ap_addr.sa_data, priv->curbssparams.bssid, ETH_ALEN); wrqu.ap_addr.sa_family = ARPHRD_ETHER; @@ -865,7 +865,8 @@ int lbs_ret_80211_ad_hoc_start(struct lbs_private *priv, priv->curbssparams.ssid_len = bss->ssid_len; netif_carrier_on(priv->dev); - netif_wake_queue(priv->dev); + if (!priv->tx_pending_len) + netif_wake_queue(priv->dev); memset(&wrqu, 0, sizeof(wrqu)); memcpy(wrqu.ap_addr.sa_data, priv->curbssparams.bssid, ETH_ALEN); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index cdf5934aaf8..f9bdd123ec4 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -489,19 +489,9 @@ void lbs_host_to_card_done(struct lbs_private *priv) priv->dnld_sent = DNLD_RES_RECEIVED; /* Wake main thread if commands are pending */ - if (!priv->cur_cmd) + if (!priv->cur_cmd || priv->tx_pending_len > 0) wake_up_interruptible(&priv->waitq); - /* Don't wake netif queues if we're in monitor mode and - a TX packet is already pending, or if there are commands - queued to be sent. */ - if (!priv->currenttxskb && list_empty(&priv->cmdpendingq)) { - if (priv->dev && priv->connect_status == LBS_CONNECTED) - netif_wake_queue(priv->dev); - - if (priv->mesh_dev && priv->mesh_connect_status == LBS_CONNECTED) - netif_wake_queue(priv->mesh_dev); - } spin_unlock_irqrestore(&priv->driver_lock, flags); } EXPORT_SYMBOL_GPL(lbs_host_to_card_done); diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c index 92d84c72e2a..9a61188b62e 100644 --- a/drivers/net/wireless/libertas/scan.c +++ b/drivers/net/wireless/libertas/scan.c @@ -590,13 +590,13 @@ int lbs_scan_networks(struct lbs_private *priv, netif_stop_queue(priv->dev); netif_carrier_off(priv->dev); if (priv->mesh_dev) { - netif_stop_queue(priv->mesh_dev); - netif_carrier_off(priv->mesh_dev); + netif_stop_queue(priv->mesh_dev); + netif_carrier_off(priv->mesh_dev); } /* Prepare to continue an interrupted scan */ lbs_deb_scan("chan_count %d, last_scanned_channel %d\n", - chan_count, priv->last_scanned_channel); + chan_count, priv->last_scanned_channel); curr_chans = chan_list; /* advance channel list by already-scanned-channels */ if (priv->last_scanned_channel > 0) { @@ -659,11 +659,13 @@ out2: out: if (priv->connect_status == LBS_CONNECTED) { netif_carrier_on(priv->dev); - netif_wake_queue(priv->dev); + if (!priv->tx_pending_len) + netif_wake_queue(priv->dev); } if (priv->mesh_dev && (priv->mesh_connect_status == LBS_CONNECTED)) { netif_carrier_on(priv->mesh_dev); - netif_wake_queue(priv->mesh_dev); + if (!priv->tx_pending_len) + netif_wake_queue(priv->mesh_dev); } kfree(chan_list); -- cgit v1.2.3-70-g09d2 From f3db2bb411512d1ebd6233b3985d98f4fe7ea8a8 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 12 Dec 2007 16:04:12 -0500 Subject: libertas: make worker thread not freezable We want it to send the HOST_SLEEP_ACTIVATE command on the way down... Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index f9bdd123ec4..dd432ea6194 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -6,7 +6,6 @@ #include #include -#include #include #include #include @@ -653,8 +652,6 @@ static int lbs_thread(void *data) init_waitqueue_entry(&wait, current); - set_freezable(); - for (;;) { int shouldsleep; @@ -698,7 +695,6 @@ static int lbs_thread(void *data) set_current_state(TASK_RUNNING); remove_wait_queue(&priv->waitq, &wait); - try_to_freeze(); lbs_deb_thread("main-thread 333: intcounter=%d currenttxskb=%p dnld_sent=%d\n", priv->intcounter, priv->currenttxskb, priv->dnld_sent); -- cgit v1.2.3-70-g09d2 From ab25ecaea5459f2206dbae25106cff67a24d309e Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 12 Dec 2007 17:38:56 -0500 Subject: libertas: implement suspend and resume core methods We (ab)use priv->fw_ready to stop the worker thread from sending more commands or data after the response to the HOST_SLEEP_ACTIVATE command comes in. And we set it from the callback function _directly_ to ensure that the worker thread sees it immediately; if we did it in lbs_suspend() after waking up, that might be too late. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.h | 2 ++ drivers/net/wireless/libertas/main.c | 47 ++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index e800295479b..e44a0db5048 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h @@ -35,5 +35,7 @@ int lbs_mesh_config(struct lbs_private *priv, int enable); int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria, uint8_t gpio, uint8_t gap); +int lbs_suspend(struct lbs_private *priv); +int lbs_resume(struct lbs_private *priv); #endif /* _LBS_CMD_H */ diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index dd432ea6194..1ea119ed3d2 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -820,6 +820,53 @@ static int lbs_thread(void *data) return 0; } +static int lbs_suspend_callback(struct lbs_private *priv, unsigned long dummy, + struct cmd_header *cmd) +{ + lbs_deb_fw("HOST_SLEEP_ACTIVATE succeeded\n"); + + netif_device_detach(priv->dev); + if (priv->mesh_dev) + netif_device_detach(priv->mesh_dev); + + priv->fw_ready = 0; + return 0; +} + + +int lbs_suspend(struct lbs_private *priv) +{ + struct cmd_header cmd; + int ret; + + memset(&cmd, 0, sizeof(cmd)); + + ret = __lbs_cmd(priv, CMD_802_11_HOST_SLEEP_ACTIVATE, &cmd, + sizeof(cmd), lbs_suspend_callback, 0); + if (ret) + lbs_pr_info("HOST_SLEEP_ACTIVATE failed: %d\n", ret); + + return ret; +} +EXPORT_SYMBOL_GPL(lbs_suspend); + +int lbs_resume(struct lbs_private *priv) +{ + priv->fw_ready = 1; + + /* Firmware doesn't seem to give us RX packets any more + until we send it some command. Might as well update */ + lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0, + 0, 0, NULL); + + netif_device_attach(priv->dev); + if (priv->mesh_dev) + netif_device_attach(priv->mesh_dev); + + return 0; +} +EXPORT_SYMBOL_GPL(lbs_resume); + /** * @brief This function downloads firmware image, gets * HW spec from firmware and set basic parameters to -- cgit v1.2.3-70-g09d2 From 506e9025e030c441679fb1ae77fb0d6266c34443 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 12 Dec 2007 20:06:06 -0500 Subject: libertas: add ethtool support for wake-on-lan configuration Also, check that suspend is refused if HOST_SLEEP_CFG hasn't been done. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 14 +++++----- drivers/net/wireless/libertas/cmd.h | 3 +-- drivers/net/wireless/libertas/dev.h | 5 ++++ drivers/net/wireless/libertas/ethtool.c | 47 +++++++++++++++++++++++++++++++++ drivers/net/wireless/libertas/if_usb.c | 6 ++--- drivers/net/wireless/libertas/main.c | 8 ++++++ 6 files changed, 72 insertions(+), 11 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index f87cecb4c57..ddf15271244 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -111,21 +111,23 @@ out: return ret; } -int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria, - uint8_t gpio, uint8_t gap) +int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria) { struct cmd_ds_host_sleep cmd_config; int ret; cmd_config.criteria = cpu_to_le32(criteria); - cmd_config.gpio = gpio; - cmd_config.gap = gap; + cmd_config.gpio = priv->wol_gpio; + cmd_config.gap = priv->wol_gap; ret = lbs_cmd_with_response(priv, CMD_802_11_HOST_SLEEP_CFG, &cmd_config); - if (ret) { + if (!ret) { + lbs_deb_cmd("Set WOL criteria to %x\n", criteria); + priv->wol_criteria = criteria; + } else { lbs_pr_info("HOST_SLEEP_CFG failed %d\n", ret); - return ret; } + return ret; } EXPORT_SYMBOL_GPL(lbs_host_sleep_cfg); diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index e44a0db5048..55f2436574d 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h @@ -33,8 +33,7 @@ int lbs_set_channel(struct lbs_private *priv, u8 channel); int lbs_mesh_config(struct lbs_private *priv, int enable); -int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria, - uint8_t gpio, uint8_t gap); +int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria); int lbs_suspend(struct lbs_private *priv); int lbs_resume(struct lbs_private *priv); diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 86b45a471fc..60a6a51d0dc 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -153,6 +153,11 @@ struct lbs_private { int (*hw_get_int_status) (struct lbs_private *priv, u8 *); int (*hw_read_event_cause) (struct lbs_private *); + /* Wake On LAN */ + uint32_t wol_criteria; + uint8_t wol_gpio; + uint8_t wol_gap; + /* was struct lbs_adapter from here... */ /** Wlan adapter data structure*/ diff --git a/drivers/net/wireless/libertas/ethtool.c b/drivers/net/wireless/libertas/ethtool.c index a54b4f406af..21e6f988ea8 100644 --- a/drivers/net/wireless/libertas/ethtool.c +++ b/drivers/net/wireless/libertas/ethtool.c @@ -8,6 +8,8 @@ #include "dev.h" #include "join.h" #include "wext.h" +#include "cmd.h" + static const char * mesh_stat_strings[]= { "drop_duplicate_bcast", "drop_ttl_zero", @@ -172,6 +174,49 @@ static void lbs_ethtool_get_strings(struct net_device *dev, lbs_deb_enter(LBS_DEB_ETHTOOL); } +static void lbs_ethtool_get_wol(struct net_device *dev, + struct ethtool_wolinfo *wol) +{ + struct lbs_private *priv = dev->priv; + + if (priv->wol_criteria == 0xffffffff) { + /* Interface driver didn't configure wake */ + wol->supported = wol->wolopts = 0; + return; + } + + wol->supported = WAKE_UCAST|WAKE_MCAST|WAKE_BCAST|WAKE_PHY; + + if (priv->wol_criteria & EHS_WAKE_ON_UNICAST_DATA) + wol->wolopts |= WAKE_UCAST; + if (priv->wol_criteria & EHS_WAKE_ON_MULTICAST_DATA) + wol->wolopts |= WAKE_MCAST; + if (priv->wol_criteria & EHS_WAKE_ON_BROADCAST_DATA) + wol->wolopts |= WAKE_BCAST; + if (priv->wol_criteria & EHS_WAKE_ON_MAC_EVENT) + wol->wolopts |= WAKE_PHY; +} + +static int lbs_ethtool_set_wol(struct net_device *dev, + struct ethtool_wolinfo *wol) +{ + struct lbs_private *priv = dev->priv; + uint32_t criteria = 0; + + if (priv->wol_criteria == 0xffffffff && wol->wolopts) + return -EOPNOTSUPP; + + if (wol->wolopts & ~(WAKE_UCAST|WAKE_MCAST|WAKE_BCAST|WAKE_PHY)) + return -EOPNOTSUPP; + + if (wol->wolopts & WAKE_UCAST) criteria |= EHS_WAKE_ON_UNICAST_DATA; + if (wol->wolopts & WAKE_MCAST) criteria |= EHS_WAKE_ON_MULTICAST_DATA; + if (wol->wolopts & WAKE_BCAST) criteria |= EHS_WAKE_ON_BROADCAST_DATA; + if (wol->wolopts & WAKE_PHY) criteria |= EHS_WAKE_ON_MAC_EVENT; + + return lbs_host_sleep_cfg(priv, criteria); +} + struct ethtool_ops lbs_ethtool_ops = { .get_drvinfo = lbs_ethtool_get_drvinfo, .get_eeprom = lbs_ethtool_get_eeprom, @@ -179,5 +224,7 @@ struct ethtool_ops lbs_ethtool_ops = { .get_sset_count = lbs_ethtool_get_sset_count, .get_ethtool_stats = lbs_ethtool_get_stats, .get_strings = lbs_ethtool_get_strings, + .get_wol = lbs_ethtool_get_wol, + .set_wol = lbs_ethtool_set_wol, }; diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 15715a6b59e..81914165259 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -242,9 +242,9 @@ static int if_usb_probe(struct usb_interface *intf, if_usb_set_boot2_ver(priv); - /* Set suspend/resume configuration: - wake via GPIO2 after a 20ms delay */ - lbs_host_sleep_cfg(priv, EHS_WAKE_ON_UNICAST_DATA, 2, 20); + priv->wol_gpio = 2; /* Wake via GPIO2... */ + priv->wol_gap = 20; /* ... after 20ms */ + lbs_host_sleep_cfg(priv, EHS_WAKE_ON_UNICAST_DATA); usb_get_dev(udev); usb_set_intfdata(intf, cardp); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 1ea119ed3d2..5e2f3296be3 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -839,6 +839,11 @@ int lbs_suspend(struct lbs_private *priv) struct cmd_header cmd; int ret; + if (priv->wol_criteria == 0xffffffff) { + lbs_pr_info("Suspend attempt without configuring wake params!\n"); + return -EINVAL; + } + memset(&cmd, 0, sizeof(cmd)); ret = __lbs_cmd(priv, CMD_802_11_HOST_SLEEP_ACTIVATE, &cmd, @@ -1088,6 +1093,9 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) sprintf(priv->mesh_ssid, "mesh"); priv->mesh_ssid_len = 4; + priv->wol_criteria = 0xffffffff; + priv->wol_gpio = 0xff; + goto done; err_init_adapter: -- cgit v1.2.3-70-g09d2 From 020f3d0001cb249ceae623c1a7ae0c196326ef3f Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 12 Dec 2007 23:29:13 -0500 Subject: libertas: cope with both old and new mesh TLV values Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 6 +++--- drivers/net/wireless/libertas/dev.h | 2 ++ drivers/net/wireless/libertas/main.c | 32 +++++++++++++++++++++++++++++--- 3 files changed, 34 insertions(+), 6 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index ddf15271244..c4299ae1774 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -1121,14 +1121,14 @@ int lbs_mesh_config(struct lbs_private *priv, int enable) memset(&cmd, 0, sizeof(cmd)); cmd.action = cpu_to_le16(enable); cmd.channel = cpu_to_le16(priv->curbssparams.channel); - cmd.type = cpu_to_le16(0x100 + 37); + cmd.type = cpu_to_le16(priv->mesh_tlv); if (enable) { cmd.length = cpu_to_le16(priv->mesh_ssid_len); memcpy(cmd.data, priv->mesh_ssid, priv->mesh_ssid_len); } - lbs_deb_cmd("mesh config channel %d SSID %s\n", - priv->curbssparams.channel, + lbs_deb_cmd("mesh config enable %d TLV %x channel %d SSID %s\n", + enable, priv->mesh_tlv, priv->curbssparams.channel, escape_essid(priv->mesh_ssid, priv->mesh_ssid_len)); return lbs_cmd_with_response(priv, CMD_MESH_CONFIG, &cmd); } diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 60a6a51d0dc..e6f553d5d2c 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -206,6 +206,8 @@ struct lbs_private { /** current ssid/bssid related parameters*/ struct current_bss_params curbssparams; + + uint16_t mesh_tlv; u8 mesh_ssid[IW_ESSID_MAX_SIZE + 1]; u8 mesh_ssid_len; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 5e2f3296be3..2409df85c2e 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1171,8 +1171,33 @@ int lbs_start_card(struct lbs_private *priv) } if (device_create_file(&dev->dev, &dev_attr_lbs_rtap)) lbs_pr_err("cannot register lbs_rtap attribute\n"); - if (device_create_file(&dev->dev, &dev_attr_lbs_mesh)) - lbs_pr_err("cannot register lbs_mesh attribute\n"); + + /* Enable mesh, if supported, and work out which TLV it uses. + 0x100 + 291 is an unofficial value used in 5.110.20.pXX + 0x100 + 37 is the official value used in 5.110.21.pXX + but we check them in that order because 20.pXX doesn't + give an error -- it just silently fails. */ + + /* 5.110.20.pXX firmware will fail the command if the channel + doesn't match the existing channel. But only if the TLV + is correct. If the channel is wrong, _BOTH_ versions will + give an error to 0x100+291, and allow 0x100+37 to succeed. + It's just that 5.110.20.pXX will not have done anything + useful */ + + lbs_update_channel(priv); + priv->mesh_tlv = 0x100 + 291; + if (lbs_mesh_config(priv, 1)) { + priv->mesh_tlv = 0x100 + 37; + if (lbs_mesh_config(priv, 1)) + priv->mesh_tlv = 0; + } + if (priv->mesh_tlv) { + lbs_add_mesh(priv); + + if (device_create_file(&dev->dev, &dev_attr_lbs_mesh)) + lbs_pr_err("cannot register lbs_mesh attribute\n"); + } lbs_debugfs_init_one(priv, dev); @@ -1201,7 +1226,8 @@ int lbs_stop_card(struct lbs_private *priv) lbs_debugfs_remove_one(priv); device_remove_file(&dev->dev, &dev_attr_lbs_rtap); - device_remove_file(&dev->dev, &dev_attr_lbs_mesh); + if (priv->mesh_tlv) + device_remove_file(&dev->dev, &dev_attr_lbs_mesh); /* Flush pending command nodes */ spin_lock_irqsave(&priv->driver_lock, flags); -- cgit v1.2.3-70-g09d2 From 860621347e88b23517fc4ec93fa5af940401c3ec Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 13 Dec 2007 00:32:36 -0500 Subject: libertas: pass channel argument directly to lbs_mesh_config() There is weirdness here; the firmware seems to refuse to change channels at will. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/assoc.c | 11 ++++++----- drivers/net/wireless/libertas/cmd.c | 6 +++--- drivers/net/wireless/libertas/cmd.h | 2 +- drivers/net/wireless/libertas/main.c | 6 +++--- drivers/net/wireless/libertas/wext.c | 7 +++---- 5 files changed, 16 insertions(+), 16 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c index ff976ebcd01..cd8e043b16f 100644 --- a/drivers/net/wireless/libertas/assoc.c +++ b/drivers/net/wireless/libertas/assoc.c @@ -205,13 +205,14 @@ static int assoc_helper_channel(struct lbs_private *priv, goto done; if (priv->mesh_dev) { - /* Disconnect mesh while associating -- otherwise it - won't let us change channels */ - lbs_mesh_config(priv, 0); + /* Change mesh channel first; 21.p21 firmware won't let + you change channel otherwise (even though it'll return + an error to this */ + lbs_mesh_config(priv, 0, assoc_req->channel); } lbs_deb_assoc("ASSOC: channel: %d -> %d\n", - priv->curbssparams.channel, assoc_req->channel); + priv->curbssparams.channel, assoc_req->channel); ret = lbs_set_channel(priv, assoc_req->channel); if (ret < 0) @@ -244,7 +245,7 @@ static int assoc_helper_channel(struct lbs_private *priv, restore_mesh: if (priv->mesh_dev) - lbs_mesh_config(priv, 1); + lbs_mesh_config(priv, 1, priv->curbssparams.channel); done: lbs_deb_leave_args(LBS_DEB_ASSOC, "ret %d", ret); diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index c4299ae1774..171acc27ffb 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -1114,13 +1114,13 @@ int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action, } EXPORT_SYMBOL_GPL(lbs_mesh_access); -int lbs_mesh_config(struct lbs_private *priv, int enable) +int lbs_mesh_config(struct lbs_private *priv, uint16_t enable, uint16_t chan) { struct cmd_ds_mesh_config cmd; memset(&cmd, 0, sizeof(cmd)); cmd.action = cpu_to_le16(enable); - cmd.channel = cpu_to_le16(priv->curbssparams.channel); + cmd.channel = cpu_to_le16(chan); cmd.type = cpu_to_le16(priv->mesh_tlv); if (enable) { @@ -1128,7 +1128,7 @@ int lbs_mesh_config(struct lbs_private *priv, int enable) memcpy(cmd.data, priv->mesh_ssid, priv->mesh_ssid_len); } lbs_deb_cmd("mesh config enable %d TLV %x channel %d SSID %s\n", - enable, priv->mesh_tlv, priv->curbssparams.channel, + enable, priv->mesh_tlv, chan, escape_essid(priv->mesh_ssid, priv->mesh_ssid_len)); return lbs_cmd_with_response(priv, CMD_MESH_CONFIG, &cmd); } diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index 55f2436574d..a4aaa6b34a7 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h @@ -31,7 +31,7 @@ int lbs_set_data_rate(struct lbs_private *priv, u8 rate); int lbs_get_channel(struct lbs_private *priv); int lbs_set_channel(struct lbs_private *priv, u8 channel); -int lbs_mesh_config(struct lbs_private *priv, int enable); +int lbs_mesh_config(struct lbs_private *priv, uint16_t enable, uint16_t chan); int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria); int lbs_suspend(struct lbs_private *priv); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 2409df85c2e..9232b975a42 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -344,7 +344,7 @@ static ssize_t lbs_mesh_set(struct device *dev, if (enable == !!priv->mesh_dev) return count; - ret = lbs_mesh_config(priv, enable); + ret = lbs_mesh_config(priv, enable, priv->curbssparams.channel); if (ret) return ret; @@ -1187,9 +1187,9 @@ int lbs_start_card(struct lbs_private *priv) lbs_update_channel(priv); priv->mesh_tlv = 0x100 + 291; - if (lbs_mesh_config(priv, 1)) { + if (lbs_mesh_config(priv, 1, priv->curbssparams.channel)) { priv->mesh_tlv = 0x100 + 37; - if (lbs_mesh_config(priv, 1)) + if (lbs_mesh_config(priv, 1, priv->curbssparams.channel)) priv->mesh_tlv = 0; } if (priv->mesh_tlv) { diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c index 262d4cc5804..b1e24723f2f 100644 --- a/drivers/net/wireless/libertas/wext.c +++ b/drivers/net/wireless/libertas/wext.c @@ -1000,9 +1000,8 @@ static int lbs_mesh_set_freq(struct net_device *dev, else if (priv->mode == IW_MODE_ADHOC) lbs_stop_adhoc_network(priv); } - priv->curbssparams.channel = fwrq->m; - lbs_mesh_config(priv, 0); - lbs_mesh_config(priv, 1); + lbs_mesh_config(priv, 1, fwrq->m); + lbs_update_channel(priv); ret = 0; out: @@ -2010,7 +2009,7 @@ static int lbs_mesh_set_essid(struct net_device *dev, priv->mesh_ssid_len = dwrq->length; } - lbs_mesh_config(priv, 1); + lbs_mesh_config(priv, 1, priv->curbssparams.channel); out: lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); return ret; -- cgit v1.2.3-70-g09d2 From f5a3ea6f966700ae82504202fdd827f2d3c79e66 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 13 Dec 2007 01:53:57 -0500 Subject: libertas: use spin_is_locked() instead of spin_trylock() in lbs_interrupt() We get scary warnings on UP if we use spin_trylock() and find, as we hoped, that the lock in question is already locked. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 9232b975a42..5d2bf539d4b 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1414,8 +1414,7 @@ void lbs_interrupt(struct lbs_private *priv) lbs_deb_thread("lbs_interrupt: intcounter=%d\n", priv->intcounter); - if (spin_trylock(&priv->driver_lock)) { - spin_unlock(&priv->driver_lock); + if (!spin_is_locked(&priv->driver_lock)) { printk(KERN_CRIT "%s called without driver_lock held\n", __func__); WARN_ON(1); } -- cgit v1.2.3-70-g09d2 From d9f88705a7ce2f9ef13d6656ee715493a663edfc Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 13 Dec 2007 21:48:00 -0500 Subject: libertas: don't exit worker thread until kthread_stop() is called The kthread code can't cope with a thread exiting of its own accord and then someone calling kthread_stop() for it. When the thread detects that it needs to die, make it wait for kthread_stop() to be called. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 5d2bf539d4b..b51513fb59e 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -662,8 +662,10 @@ static int lbs_thread(void *data) set_current_state(TASK_INTERRUPTIBLE); spin_lock_irq(&priv->driver_lock); - if (priv->surpriseremoved) + if (kthread_should_stop()) shouldsleep = 0; /* Bye */ + else if (priv->surpriseremoved) + shouldsleep = 1; /* We need to wait until we're _told_ to die */ else if (priv->psstate == PS_STATE_SLEEP) shouldsleep = 1; /* Sleep mode. Nothing we can do till it wakes */ else if (priv->intcounter) @@ -699,12 +701,15 @@ static int lbs_thread(void *data) lbs_deb_thread("main-thread 333: intcounter=%d currenttxskb=%p dnld_sent=%d\n", priv->intcounter, priv->currenttxskb, priv->dnld_sent); - if (kthread_should_stop() || priv->surpriseremoved) { - lbs_deb_thread("main-thread: break from main thread: surpriseremoved=0x%x\n", - priv->surpriseremoved); + if (kthread_should_stop()) { + lbs_deb_thread("main-thread: break from main thread\n"); break; } + if (priv->surpriseremoved) { + lbs_deb_thread("adapter removed; waiting to die...\n"); + continue; + } spin_lock_irq(&priv->driver_lock); -- cgit v1.2.3-70-g09d2 From 7e226272fcf9c1ec8b67fac995ce4227f4f76971 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Fri, 14 Dec 2007 22:53:41 -0500 Subject: libertas: kill whitespace at end of lines Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 2 +- drivers/net/wireless/libertas/cmd.h | 4 ++-- drivers/net/wireless/libertas/debugfs.c | 2 +- drivers/net/wireless/libertas/if_sdio.c | 2 +- drivers/net/wireless/libertas/if_usb.c | 4 ++-- drivers/net/wireless/libertas/main.c | 14 +++++++------- drivers/net/wireless/libertas/tx.c | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 171acc27ffb..ffef7212621 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -1122,7 +1122,7 @@ int lbs_mesh_config(struct lbs_private *priv, uint16_t enable, uint16_t chan) cmd.action = cpu_to_le16(enable); cmd.channel = cpu_to_le16(chan); cmd.type = cpu_to_le16(priv->mesh_tlv); - + if (enable) { cmd.length = cpu_to_le16(priv->mesh_ssid_len); memcpy(cmd.data, priv->mesh_ssid, priv->mesh_ssid_len); diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index a4aaa6b34a7..999fabe5964 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h @@ -11,9 +11,9 @@ #define lbs_cmd_with_response(priv, cmdnr, cmd) \ lbs_cmd(priv, cmdnr, cmd, lbs_cmd_copyback, (unsigned long) (cmd)) - + int __lbs_cmd(struct lbs_private *priv, uint16_t command, - struct cmd_header *in_cmd, int in_cmd_size, + struct cmd_header *in_cmd, int in_cmd_size, int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *), unsigned long callback_arg); diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c index c5130a2581f..f2781596714 100644 --- a/drivers/net/wireless/libertas/debugfs.c +++ b/drivers/net/wireless/libertas/debugfs.c @@ -296,7 +296,7 @@ static ssize_t lbs_setuserscan(struct file *file, if (!buf) return -ENOMEM; - + buf_size = min(count, len - 1); if (copy_from_user(buf, userbuf, buf_size)) { res = -EFAULT; diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index 7f829c86c45..9225546b9d4 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c @@ -19,7 +19,7 @@ * current block size. * * As SDIO is still new to the kernel, it is unfortunately common with - * bugs in the host controllers related to that. One such bug is that + * bugs in the host controllers related to that. One such bug is that * controllers cannot do transfers that aren't a multiple of 4 bytes. * If you don't have time to fix the host controller driver, you can * work around the problem by modifying if_sdio_host_to_card() and diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 9cb9e031040..396ce676cad 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c @@ -152,7 +152,7 @@ static int if_usb_probe(struct usb_interface *intf, setup_timer(&cardp->fw_timeout, if_usb_fw_timeo, (unsigned long)cardp); init_waitqueue_head(&cardp->fw_wq); - + cardp->udev = udev; iface_desc = intf->cur_altsetting; @@ -871,7 +871,7 @@ restart: /* ... and wait for the process to complete */ wait_event_interruptible(cardp->fw_wq, cardp->surprise_removed || cardp->fwdnldover); - + del_timer_sync(&cardp->fw_timeout); usb_kill_urb(cardp->rx_urb); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index b51513fb59e..0dc7de6a067 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -255,7 +255,7 @@ static int lbs_add_rtap(struct lbs_private *priv); static void lbs_remove_rtap(struct lbs_private *priv); static int lbs_add_mesh(struct lbs_private *priv); static void lbs_remove_mesh(struct lbs_private *priv); - + /** * Get function for sysfs attribute rtap @@ -347,7 +347,7 @@ static ssize_t lbs_mesh_set(struct device *dev, ret = lbs_mesh_config(priv, enable, priv->curbssparams.channel); if (ret) return ret; - + if (enable) lbs_add_mesh(priv); else @@ -401,7 +401,7 @@ static int lbs_dev_open(struct net_device *dev) netif_carrier_on(dev); } else { priv->infra_open = 1; - + if (priv->connect_status == LBS_CONNECTED) netif_carrier_on(dev); else @@ -433,7 +433,7 @@ static int lbs_mesh_stop(struct net_device *dev) netif_stop_queue(dev); netif_carrier_off(dev); - + spin_unlock_irq(&priv->driver_lock); return 0; } @@ -453,7 +453,7 @@ static int lbs_eth_stop(struct net_device *dev) priv->infra_open = 0; netif_stop_queue(dev); - + spin_unlock_irq(&priv->driver_lock); return 0; } @@ -850,7 +850,7 @@ int lbs_suspend(struct lbs_private *priv) } memset(&cmd, 0, sizeof(cmd)); - + ret = __lbs_cmd(priv, CMD_802_11_HOST_SLEEP_ACTIVATE, &cmd, sizeof(cmd), lbs_suspend_callback, 0); if (ret) @@ -1180,7 +1180,7 @@ int lbs_start_card(struct lbs_private *priv) /* Enable mesh, if supported, and work out which TLV it uses. 0x100 + 291 is an unofficial value used in 5.110.20.pXX 0x100 + 37 is the official value used in 5.110.21.pXX - but we check them in that order because 20.pXX doesn't + but we check them in that order because 20.pXX doesn't give an error -- it just silently fails. */ /* 5.110.20.pXX firmware will fail the command if the channel diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c index 8a1a3965f1c..00d95f75bd8 100644 --- a/drivers/net/wireless/libertas/tx.c +++ b/drivers/net/wireless/libertas/tx.c @@ -93,8 +93,8 @@ int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) netif_stop_queue(priv->mesh_dev); if (priv->tx_pending_len) { - /* This can happen if packets come in on the mesh and eth - device simultaneously -- there's no mutual exclusion on + /* This can happen if packets come in on the mesh and eth + device simultaneously -- there's no mutual exclusion on hard_start_xmit() calls between devices. */ lbs_deb_tx("Packet on %s while busy\n", dev->name); ret = NETDEV_TX_BUSY; -- cgit v1.2.3-70-g09d2 From ae125bf8278249b8c44168c5183f551c3ed28b84 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 15 Dec 2007 04:22:52 -0500 Subject: libertas: store command result in cmdnode instead of priv->cur_cmd_retcode ... at least for users of __lbs_cmd(). Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmd.c | 12 ++++++------ drivers/net/wireless/libertas/hostcmd.h | 1 + drivers/net/wireless/libertas/main.c | 1 + 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index f2e027b5810..c8f1bd58359 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c @@ -1173,6 +1173,7 @@ void lbs_queue_cmd(struct lbs_private *priv, lbs_deb_host("DNLD_CMD: cmd size is zero\n"); goto done; } + cmdnode->result = 0; /* Exit_PS command needs to be queued in the header always. */ if (le16_to_cpu(cmdnode->cmdbuf->command) == CMD_802_11_PS_MODE) { @@ -1306,6 +1307,7 @@ void lbs_complete_command(struct lbs_private *priv, struct cmd_ctrl_node *cmd, if (cmd == priv->cur_cmd) priv->cur_cmd_retcode = result; + cmd->result = result; cmd->cmdwaitqwoken = 1; wake_up_interruptible(&cmd->cmdwait_q); @@ -2212,12 +2214,10 @@ int __lbs_cmd(struct lbs_private *priv, uint16_t command, wait_event_interruptible(cmdnode->cmdwait_q, cmdnode->cmdwaitqwoken); spin_lock_irqsave(&priv->driver_lock, flags); - if (priv->cur_cmd_retcode) { - lbs_deb_host("PREP_CMD: command failed with return code %d\n", - priv->cur_cmd_retcode); - priv->cur_cmd_retcode = 0; - ret = -1; - } + ret = cmdnode->result; + if (ret) + lbs_pr_info("PREP_CMD: command 0x%04x failed: %d\n", + command, ret); __lbs_cleanup_and_insert_cmd(priv, cmdnode); spin_unlock_irqrestore(&priv->driver_lock, flags); diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h index 719da737aaf..ea4d484b2ba 100644 --- a/drivers/net/wireless/libertas/hostcmd.h +++ b/drivers/net/wireless/libertas/hostcmd.h @@ -74,6 +74,7 @@ struct cmd_header { struct cmd_ctrl_node { struct list_head list; + int result; /* command response */ int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *); unsigned long callback_arg; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 0dc7de6a067..839ffe818c1 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1237,6 +1237,7 @@ int lbs_stop_card(struct lbs_private *priv) /* Flush pending command nodes */ spin_lock_irqsave(&priv->driver_lock, flags); list_for_each_entry(cmdnode, &priv->cmdpendingq, list) { + cmdnode->result = -ENOENT; cmdnode->cmdwaitqwoken = 1; wake_up_interruptible(&cmdnode->cmdwait_q); } -- cgit v1.2.3-70-g09d2 From 2a345099a4fbe551a1982630b3d89c85fa5a341d Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 15 Dec 2007 19:33:43 -0500 Subject: libertas: handle command timeout in main thread instead of directly in timer And handle the case where it times out more than once, too, instead of locking up for ever. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/cmdresp.c | 6 ++++ drivers/net/wireless/libertas/dev.h | 2 ++ drivers/net/wireless/libertas/main.c | 52 +++++++++++++++++++-------------- 3 files changed, 38 insertions(+), 22 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 4c22e784951..ef63c376c55 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c @@ -667,6 +667,12 @@ int lbs_process_rx_command(struct lbs_private *priv) /* Now we got response from FW, cancel the command timer */ del_timer(&priv->command_timer); + priv->cmd_timed_out = 0; + if (priv->nr_retries) { + lbs_pr_info("Received result %x to command %x after %d retries\n", + result, curcmd, priv->nr_retries); + priv->nr_retries = 0; + } /* Store the response code to cur_cmd_retcode. */ priv->cur_cmd_retcode = result; diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index e6f553d5d2c..465080fd060 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h @@ -201,6 +201,8 @@ struct lbs_private { /** Timers */ struct timer_list command_timer; + int nr_retries; + int cmd_timed_out; u8 hisregcpy; diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 839ffe818c1..9677b0d7716 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -670,6 +670,8 @@ static int lbs_thread(void *data) shouldsleep = 1; /* Sleep mode. Nothing we can do till it wakes */ else if (priv->intcounter) shouldsleep = 0; /* Interrupt pending. Deal with it now */ + else if (priv->cmd_timed_out) + shouldsleep = 0; /* Command timed out. Recover */ else if (!priv->fw_ready) shouldsleep = 1; /* Firmware not ready. We're waiting for it */ else if (priv->dnld_sent) @@ -740,6 +742,26 @@ static int lbs_thread(void *data) spin_lock_irq(&priv->driver_lock); } + if (priv->cmd_timed_out && priv->cur_cmd) { + struct cmd_ctrl_node *cmdnode = priv->cur_cmd; + + if (++priv->nr_retries > 10) { + lbs_pr_info("Excessive timeouts submitting command %x\n", + le16_to_cpu(cmdnode->cmdbuf->command)); + lbs_complete_command(priv, cmdnode, -ETIMEDOUT); + priv->nr_retries = 0; + } else { + priv->cur_cmd = NULL; + lbs_pr_info("requeueing command %x due to timeout (#%d)\n", + le16_to_cpu(cmdnode->cmdbuf->command), priv->nr_retries); + + /* Stick it back at the _top_ of the pending queue + for immediate resubmission */ + list_add(&cmdnode->list, &priv->cmdpendingq); + } + } + priv->cmd_timed_out = 0; + /* Any Card Event */ if (priv->hisregcpy & MRVDRV_CARDEVENT) { lbs_deb_thread("main-thread: Card Event Activity\n"); @@ -922,35 +944,21 @@ done: static void command_timer_fn(unsigned long data) { struct lbs_private *priv = (struct lbs_private *)data; - struct cmd_ctrl_node *node; unsigned long flags; - node = priv->cur_cmd; - if (node == NULL) { - lbs_deb_fw("ptempnode empty\n"); - return; - } + spin_lock_irqsave(&priv->driver_lock, flags); - if (!node->cmdbuf) { - lbs_deb_fw("cmd is NULL\n"); - return; + if (!priv->cur_cmd) { + lbs_pr_info("Command timer expired; no pending command\n"); + goto out; } - lbs_pr_info("command %x timed out\n", le16_to_cpu(node->cmdbuf->command)); - - if (!priv->fw_ready) - return; - - spin_lock_irqsave(&priv->driver_lock, flags); - priv->cur_cmd = NULL; - spin_unlock_irqrestore(&priv->driver_lock, flags); - - lbs_deb_fw("re-sending same command because of timeout\n"); - lbs_queue_cmd(priv, node, 0); + lbs_pr_info("Command %x timed out\n", le16_to_cpu(priv->cur_cmd->cmdbuf->command)); + priv->cmd_timed_out = 1; wake_up_interruptible(&priv->waitq); - - return; + out: + spin_unlock_irqrestore(&priv->driver_lock, flags); } static int lbs_init_adapter(struct lbs_private *priv) -- cgit v1.2.3-70-g09d2 From 354eca9820f1efbf11978585640f1b2e92d4c5b4 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 17 Dec 2007 19:22:40 -0500 Subject: libertas: submit RSSI command on tx timeout, to check whether module is dead We don't necessarily want to reset the device on a TX timeout. But more often than not, the real cause is that the firmware has crapped itself, not just that the network is busy. So submit any harmless command, and if _that_ times out, then the error handling code will reset the module, as appropriate. Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 9677b0d7716..74353e1d72f 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -476,6 +476,13 @@ static void lbs_tx_timeout(struct net_device *dev) to kick it somehow? */ lbs_host_to_card_done(priv); + /* More often than not, this actually happens because the + firmware has crapped itself -- rather than just a very + busy medium. So send a harmless command, and if/when + _that_ times out, we'll kick it in the head. */ + lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0, + 0, 0, NULL); + lbs_deb_leave(LBS_DEB_TX); } -- cgit v1.2.3-70-g09d2 From 7e94041ca17685cf12c658b8edc008dd0bdb00c7 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 18 Dec 2007 11:41:43 +0000 Subject: libertas: remove check for driver_lock in lbs_interrupt() Signed-off-by: David Woodhouse Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 74353e1d72f..91b2f2398a6 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1435,11 +1435,6 @@ void lbs_interrupt(struct lbs_private *priv) lbs_deb_thread("lbs_interrupt: intcounter=%d\n", priv->intcounter); - if (!spin_is_locked(&priv->driver_lock)) { - printk(KERN_CRIT "%s called without driver_lock held\n", __func__); - WARN_ON(1); - } - priv->intcounter++; if (priv->psstate == PS_STATE_SLEEP) -- cgit v1.2.3-70-g09d2 From c9d1be36197bf638be68cec6685c68e462273b65 Mon Sep 17 00:00:00 2001 From: Holger Schurig Date: Wed, 16 Jan 2008 15:57:44 +0100 Subject: libertas: don't blindly try mesh The CF card only has a very old firmware (5.0.16p0). This firmware doesn't know anything about mesh config. However, current code blindly calls mesh_config when the card is inserted. So check the firmware version before issuing this command. Signed-off-by: Holger Schurig Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 50 +++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 23 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 91b2f2398a6..8f3e661db98 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1192,31 +1192,35 @@ int lbs_start_card(struct lbs_private *priv) if (device_create_file(&dev->dev, &dev_attr_lbs_rtap)) lbs_pr_err("cannot register lbs_rtap attribute\n"); - /* Enable mesh, if supported, and work out which TLV it uses. - 0x100 + 291 is an unofficial value used in 5.110.20.pXX - 0x100 + 37 is the official value used in 5.110.21.pXX - but we check them in that order because 20.pXX doesn't - give an error -- it just silently fails. */ - - /* 5.110.20.pXX firmware will fail the command if the channel - doesn't match the existing channel. But only if the TLV - is correct. If the channel is wrong, _BOTH_ versions will - give an error to 0x100+291, and allow 0x100+37 to succeed. - It's just that 5.110.20.pXX will not have done anything - useful */ - lbs_update_channel(priv); - priv->mesh_tlv = 0x100 + 291; - if (lbs_mesh_config(priv, 1, priv->curbssparams.channel)) { - priv->mesh_tlv = 0x100 + 37; - if (lbs_mesh_config(priv, 1, priv->curbssparams.channel)) - priv->mesh_tlv = 0; - } - if (priv->mesh_tlv) { - lbs_add_mesh(priv); - if (device_create_file(&dev->dev, &dev_attr_lbs_mesh)) - lbs_pr_err("cannot register lbs_mesh attribute\n"); + /* 5.0.16p0 is known to NOT support any mesh */ + if (priv->fwrelease > 0x05001000) { + /* Enable mesh, if supported, and work out which TLV it uses. + 0x100 + 291 is an unofficial value used in 5.110.20.pXX + 0x100 + 37 is the official value used in 5.110.21.pXX + but we check them in that order because 20.pXX doesn't + give an error -- it just silently fails. */ + + /* 5.110.20.pXX firmware will fail the command if the channel + doesn't match the existing channel. But only if the TLV + is correct. If the channel is wrong, _BOTH_ versions will + give an error to 0x100+291, and allow 0x100+37 to succeed. + It's just that 5.110.20.pXX will not have done anything + useful */ + + priv->mesh_tlv = 0x100 + 291; + if (lbs_mesh_config(priv, 1, priv->curbssparams.channel)) { + priv->mesh_tlv = 0x100 + 37; + if (lbs_mesh_config(priv, 1, priv->curbssparams.channel)) + priv->mesh_tlv = 0; + } + if (priv->mesh_tlv) { + lbs_add_mesh(priv); + + if (device_create_file(&dev->dev, &dev_attr_lbs_mesh)) + lbs_pr_err("cannot register lbs_mesh attribute\n"); + } } lbs_debugfs_init_one(priv, dev); -- cgit v1.2.3-70-g09d2 From 61d30020dc2c49d36d95f3efb8b5ed727e459087 Mon Sep 17 00:00:00 2001 From: Holger Schurig Date: Wed, 16 Jan 2008 15:59:52 +0100 Subject: libertas: pepper main with debug statement libertas: re-pepper debug statementThe recent fluff of updates didn't put proper lbs_deb_enter/leave calls into the source code. Add them where appropriate. Also contains some whitespace changes. Signed-off-by: Holger Schurig Signed-off-by: John W. Linville --- drivers/net/wireless/libertas/main.c | 144 ++++++++++++++++++++--------------- 1 file changed, 82 insertions(+), 62 deletions(-) (limited to 'drivers/net/wireless/libertas/main.c') diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 8f3e661db98..84fb49ca0fa 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -388,6 +388,8 @@ static int lbs_dev_open(struct net_device *dev) struct lbs_private *priv = (struct lbs_private *) dev->priv ; int ret = 0; + lbs_deb_enter(LBS_DEB_NET); + spin_lock_irq(&priv->driver_lock); if (priv->monitormode != LBS_MONITOR_OFF) { @@ -413,6 +415,7 @@ static int lbs_dev_open(struct net_device *dev) out: spin_unlock_irq(&priv->driver_lock); + lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret); return ret; } @@ -426,6 +429,7 @@ static int lbs_mesh_stop(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) (dev->priv); + lbs_deb_enter(LBS_DEB_MESH); spin_lock_irq(&priv->driver_lock); priv->mesh_open = 0; @@ -435,6 +439,8 @@ static int lbs_mesh_stop(struct net_device *dev) netif_carrier_off(dev); spin_unlock_irq(&priv->driver_lock); + + lbs_deb_leave(LBS_DEB_MESH); return 0; } @@ -448,13 +454,14 @@ static int lbs_eth_stop(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) dev->priv; - spin_lock_irq(&priv->driver_lock); + lbs_deb_enter(LBS_DEB_NET); + spin_lock_irq(&priv->driver_lock); priv->infra_open = 0; - netif_stop_queue(dev); - spin_unlock_irq(&priv->driver_lock); + + lbs_deb_leave(LBS_DEB_NET); return 0; } @@ -490,6 +497,8 @@ void lbs_host_to_card_done(struct lbs_private *priv) { unsigned long flags; + lbs_deb_enter(LBS_DEB_THREAD); + spin_lock_irqsave(&priv->driver_lock, flags); priv->dnld_sent = DNLD_RES_RECEIVED; @@ -499,6 +508,7 @@ void lbs_host_to_card_done(struct lbs_private *priv) wake_up_interruptible(&priv->waitq); spin_unlock_irqrestore(&priv->driver_lock, flags); + lbs_deb_leave(LBS_DEB_THREAD); } EXPORT_SYMBOL_GPL(lbs_host_to_card_done); @@ -512,6 +522,7 @@ static struct net_device_stats *lbs_get_stats(struct net_device *dev) { struct lbs_private *priv = (struct lbs_private *) dev->priv; + lbs_deb_enter(LBS_DEB_NET); return &priv->stats; } @@ -564,9 +575,7 @@ static int lbs_copy_multicast_address(struct lbs_private *priv, memcpy(&priv->multicastlist[i], mcptr->dmi_addr, ETH_ALEN); mcptr = mcptr->next; } - return i; - } static void lbs_set_multicast_list(struct net_device *dev) @@ -620,7 +629,7 @@ static void lbs_set_multicast_list(struct net_device *dev) dev->mc_count); for (i = 0; i < dev->mc_count; i++) { - lbs_deb_net("Multicast address %d:%s\n", + lbs_deb_net("Multicast address %d: %s\n", i, print_mac(mac, priv->multicastlist[i])); } @@ -857,22 +866,24 @@ static int lbs_thread(void *data) static int lbs_suspend_callback(struct lbs_private *priv, unsigned long dummy, struct cmd_header *cmd) { - lbs_deb_fw("HOST_SLEEP_ACTIVATE succeeded\n"); + lbs_deb_enter(LBS_DEB_FW); netif_device_detach(priv->dev); if (priv->mesh_dev) netif_device_detach(priv->mesh_dev); priv->fw_ready = 0; + lbs_deb_leave(LBS_DEB_FW); return 0; } - int lbs_suspend(struct lbs_private *priv) { struct cmd_header cmd; int ret; + lbs_deb_enter(LBS_DEB_FW); + if (priv->wol_criteria == 0xffffffff) { lbs_pr_info("Suspend attempt without configuring wake params!\n"); return -EINVAL; @@ -885,12 +896,15 @@ int lbs_suspend(struct lbs_private *priv) if (ret) lbs_pr_info("HOST_SLEEP_ACTIVATE failed: %d\n", ret); + lbs_deb_leave_args(LBS_DEB_FW, "ret %d", ret); return ret; } EXPORT_SYMBOL_GPL(lbs_suspend); int lbs_resume(struct lbs_private *priv) { + lbs_deb_enter(LBS_DEB_FW); + priv->fw_ready = 1; /* Firmware doesn't seem to give us RX packets any more @@ -902,6 +916,7 @@ int lbs_resume(struct lbs_private *priv) if (priv->mesh_dev) netif_device_attach(priv->mesh_dev); + lbs_deb_leave(LBS_DEB_FW); return 0; } EXPORT_SYMBOL_GPL(lbs_resume); @@ -953,6 +968,7 @@ static void command_timer_fn(unsigned long data) struct lbs_private *priv = (struct lbs_private *)data; unsigned long flags; + lbs_deb_enter(LBS_DEB_CMD); spin_lock_irqsave(&priv->driver_lock, flags); if (!priv->cur_cmd) { @@ -964,8 +980,9 @@ static void command_timer_fn(unsigned long data) priv->cmd_timed_out = 1; wake_up_interruptible(&priv->waitq); - out: +out: spin_unlock_irqrestore(&priv->driver_lock, flags); + lbs_deb_leave(LBS_DEB_CMD); } static int lbs_init_adapter(struct lbs_private *priv) @@ -973,6 +990,8 @@ static int lbs_init_adapter(struct lbs_private *priv) size_t bufsize; int i, ret = 0; + lbs_deb_enter(LBS_DEB_MAIN); + /* Allocate buffer to store the BSSID list */ bufsize = MAX_NETWORK_COUNT * sizeof(struct bss_descriptor); priv->networks = kzalloc(bufsize, GFP_KERNEL); @@ -1015,7 +1034,7 @@ static int lbs_init_adapter(struct lbs_private *priv) mutex_init(&priv->lock); setup_timer(&priv->command_timer, command_timer_fn, - (unsigned long)priv); + (unsigned long)priv); INIT_LIST_HEAD(&priv->cmdfreeq); INIT_LIST_HEAD(&priv->cmdpendingq); @@ -1030,20 +1049,21 @@ static int lbs_init_adapter(struct lbs_private *priv) } out: + lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret); + return ret; } static void lbs_free_adapter(struct lbs_private *priv) { - lbs_deb_fw("free command buffer\n"); - lbs_free_cmd_buffer(priv); + lbs_deb_enter(LBS_DEB_MAIN); - lbs_deb_fw("free command_timer\n"); + lbs_free_cmd_buffer(priv); del_timer(&priv->command_timer); - - lbs_deb_fw("free scan results table\n"); kfree(priv->networks); priv->networks = NULL; + + lbs_deb_leave(LBS_DEB_MAIN); } /** @@ -1058,7 +1078,7 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) struct net_device *dev = NULL; struct lbs_private *priv = NULL; - lbs_deb_enter(LBS_DEB_NET); + lbs_deb_enter(LBS_DEB_MAIN); /* Allocate an Ethernet device and register it */ dev = alloc_etherdev(sizeof(struct lbs_private)); @@ -1124,7 +1144,7 @@ err_init_adapter: priv = NULL; done: - lbs_deb_leave_args(LBS_DEB_NET, "priv %p", priv); + lbs_deb_leave_args(LBS_DEB_MAIN, "priv %p", priv); return priv; } EXPORT_SYMBOL_GPL(lbs_add_card); @@ -1338,26 +1358,19 @@ static void lbs_remove_mesh(struct lbs_private *priv) { struct net_device *mesh_dev; - lbs_deb_enter(LBS_DEB_MAIN); - - if (!priv) - goto out; mesh_dev = priv->mesh_dev; if (!mesh_dev) - goto out; + return; + lbs_deb_enter(LBS_DEB_MESH); netif_stop_queue(mesh_dev); netif_carrier_off(priv->mesh_dev); - sysfs_remove_group(&(mesh_dev->dev.kobj), &lbs_mesh_attr_group); unregister_netdev(mesh_dev); - priv->mesh_dev = NULL; free_netdev(mesh_dev); - -out: - lbs_deb_leave(LBS_DEB_MAIN); + lbs_deb_leave(LBS_DEB_MESH); } EXPORT_SYMBOL_GPL(lbs_remove_mesh); @@ -1404,22 +1417,20 @@ int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band) memset(priv->region_channel, 0, sizeof(priv->region_channel)); - { - cfp = lbs_get_region_cfp_table(region, band, &cfp_no); - if (cfp != NULL) { - priv->region_channel[i].nrcfp = cfp_no; - priv->region_channel[i].CFP = cfp; - } else { - lbs_deb_main("wrong region code %#x in band B/G\n", - region); - ret = -1; - goto out; - } - priv->region_channel[i].valid = 1; - priv->region_channel[i].region = region; - priv->region_channel[i].band = band; - i++; + cfp = lbs_get_region_cfp_table(region, band, &cfp_no); + if (cfp != NULL) { + priv->region_channel[i].nrcfp = cfp_no; + priv->region_channel[i].CFP = cfp; + } else { + lbs_deb_main("wrong region code %#x in band B/G\n", + region); + ret = -1; + goto out; } + priv->region_channel[i].valid = 1; + priv->region_channel[i].region = region; + priv->region_channel[i].band = band; + i++; out: lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret); return ret; @@ -1438,12 +1449,9 @@ void lbs_interrupt(struct lbs_private *priv) lbs_deb_enter(LBS_DEB_THREAD); lbs_deb_thread("lbs_interrupt: intcounter=%d\n", priv->intcounter); - priv->intcounter++; - if (priv->psstate == PS_STATE_SLEEP) priv->psstate = PS_STATE_AWAKE; - wake_up_interruptible(&priv->waitq); lbs_deb_leave(LBS_DEB_THREAD); @@ -1475,9 +1483,7 @@ static int __init lbs_init_module(void) static void __exit lbs_exit_module(void) { lbs_deb_enter(LBS_DEB_MAIN); - lbs_debugfs_remove(); - lbs_deb_leave(LBS_DEB_MAIN); } @@ -1488,49 +1494,61 @@ static void __exit lbs_exit_module(void) static int lbs_rtap_open(struct net_device *dev) { /* Yes, _stop_ the queue. Because we don't support injection */ - netif_carrier_off(dev); - netif_stop_queue(dev); - return 0; + lbs_deb_enter(LBS_DEB_MAIN); + netif_carrier_off(dev); + netif_stop_queue(dev); + lbs_deb_leave(LBS_DEB_LEAVE); + return 0; } static int lbs_rtap_stop(struct net_device *dev) { - return 0; + lbs_deb_enter(LBS_DEB_MAIN); + lbs_deb_leave(LBS_DEB_MAIN); + return 0; } static int lbs_rtap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { - netif_stop_queue(dev); - return NETDEV_TX_BUSY; + netif_stop_queue(dev); + return NETDEV_TX_BUSY; } static struct net_device_stats *lbs_rtap_get_stats(struct net_device *dev) { struct lbs_private *priv = dev->priv; + lbs_deb_enter(LBS_DEB_NET); return &priv->stats; } static void lbs_remove_rtap(struct lbs_private *priv) { + lbs_deb_enter(LBS_DEB_MAIN); if (priv->rtap_net_dev == NULL) return; unregister_netdev(priv->rtap_net_dev); free_netdev(priv->rtap_net_dev); priv->rtap_net_dev = NULL; + lbs_deb_leave(LBS_DEB_MAIN); } static int lbs_add_rtap(struct lbs_private *priv) { - int rc = 0; + int ret = 0; struct net_device *rtap_dev; - if (priv->rtap_net_dev) - return -EPERM; + lbs_deb_enter(LBS_DEB_MAIN); + if (priv->rtap_net_dev) { + ret = -EPERM; + goto out; + } rtap_dev = alloc_netdev(0, "rtap%d", ether_setup); - if (rtap_dev == NULL) - return -ENOMEM; + if (rtap_dev == NULL) { + ret = -ENOMEM; + goto out; + } memcpy(rtap_dev->dev_addr, priv->current_addr, ETH_ALEN); rtap_dev->type = ARPHRD_IEEE80211_RADIOTAP; @@ -1541,14 +1559,16 @@ static int lbs_add_rtap(struct lbs_private *priv) rtap_dev->set_multicast_list = lbs_set_multicast_list; rtap_dev->priv = priv; - rc = register_netdev(rtap_dev); - if (rc) { + ret = register_netdev(rtap_dev); + if (ret) { free_netdev(rtap_dev); - return rc; + goto out; } priv->rtap_net_dev = rtap_dev; - return 0; +out: + lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret); + return ret; } -- cgit v1.2.3-70-g09d2