diff options
author | Holger Schurig <hs4233@mail.mn-solutions.de> | 2007-05-25 12:01:42 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2007-06-11 14:28:38 -0400 |
commit | 3874d0fefd965eedfc7f8e0a5459ddf914eb4306 (patch) | |
tree | ece3d62a0667d9650db6496457286a528b539861 /drivers/net/wireless/libertas | |
parent | fb3dddf22c63d7e0622d4819a87dbb8563f0e968 (diff) |
[PATCH] libertas: move reset_device() code main.c to if_usb.c
The reset_device() logic is only needed for USB devices, not for CF
devices.
Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas')
-rw-r--r-- | drivers/net/wireless/libertas/decl.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/if_usb.c | 37 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/main.c | 25 |
3 files changed, 35 insertions, 28 deletions
diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h index 895f85331ce2..b0694fe20f30 100644 --- a/drivers/net/wireless/libertas/decl.h +++ b/drivers/net/wireless/libertas/decl.h | |||
@@ -73,7 +73,6 @@ extern void libertas_mac_event_disconnected(wlan_private * priv); | |||
73 | 73 | ||
74 | void libertas_send_iwevcustom_event(wlan_private * priv, s8 * str); | 74 | void libertas_send_iwevcustom_event(wlan_private * priv, s8 * str); |
75 | 75 | ||
76 | int reset_device(wlan_private *priv); | ||
77 | /* main.c */ | 76 | /* main.c */ |
78 | extern struct chan_freq_power *libertas_get_region_cfp_table(u8 region, u8 band, | 77 | extern struct chan_freq_power *libertas_get_region_cfp_table(u8 region, u8 band, |
79 | int *cfp_no); | 78 | int *cfp_no); |
diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index bf7ef6582c59..99f4ba35d6ef 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c | |||
@@ -17,6 +17,10 @@ | |||
17 | 17 | ||
18 | static const char usbdriver_name[] = "usb8xxx"; | 18 | static const char usbdriver_name[] = "usb8xxx"; |
19 | 19 | ||
20 | #define MAX_DEVS 5 | ||
21 | static struct net_device *libertas_devs[MAX_DEVS]; | ||
22 | static int libertas_found = 0; | ||
23 | |||
20 | static struct usb_device_id if_usb_table[] = { | 24 | static struct usb_device_id if_usb_table[] = { |
21 | /* Enter the device signature inside */ | 25 | /* Enter the device signature inside */ |
22 | { USB_DEVICE(0x1286, 0x2001) }, | 26 | { USB_DEVICE(0x1286, 0x2001) }, |
@@ -28,6 +32,7 @@ MODULE_DEVICE_TABLE(usb, if_usb_table); | |||
28 | 32 | ||
29 | static void if_usb_receive(struct urb *urb); | 33 | static void if_usb_receive(struct urb *urb); |
30 | static void if_usb_receive_fwload(struct urb *urb); | 34 | static void if_usb_receive_fwload(struct urb *urb); |
35 | static int reset_device(wlan_private *priv); | ||
31 | 36 | ||
32 | /** | 37 | /** |
33 | * @brief call back function to handle the status of the URB | 38 | * @brief call back function to handle the status of the URB |
@@ -189,6 +194,12 @@ static int if_usb_probe(struct usb_interface *intf, | |||
189 | */ | 194 | */ |
190 | if (!(priv = wlan_add_card(usb_cardp))) | 195 | if (!(priv = wlan_add_card(usb_cardp))) |
191 | goto dealloc; | 196 | goto dealloc; |
197 | |||
198 | if (libertas_found < MAX_DEVS) { | ||
199 | libertas_devs[libertas_found] = priv->wlan_dev.netdev; | ||
200 | libertas_found++; | ||
201 | } | ||
202 | |||
192 | if (wlan_add_mesh(priv)) | 203 | if (wlan_add_mesh(priv)) |
193 | goto dealloc; | 204 | goto dealloc; |
194 | 205 | ||
@@ -220,6 +231,7 @@ static void if_usb_disconnect(struct usb_interface *intf) | |||
220 | struct usb_card_rec *cardp = usb_get_intfdata(intf); | 231 | struct usb_card_rec *cardp = usb_get_intfdata(intf); |
221 | wlan_private *priv = (wlan_private *) cardp->priv; | 232 | wlan_private *priv = (wlan_private *) cardp->priv; |
222 | wlan_adapter *adapter = NULL; | 233 | wlan_adapter *adapter = NULL; |
234 | int i; | ||
223 | 235 | ||
224 | adapter = priv->adapter; | 236 | adapter = priv->adapter; |
225 | 237 | ||
@@ -228,6 +240,14 @@ static void if_usb_disconnect(struct usb_interface *intf) | |||
228 | */ | 240 | */ |
229 | adapter->surpriseremoved = 1; | 241 | adapter->surpriseremoved = 1; |
230 | 242 | ||
243 | for (i = 0; i<libertas_found; i++) { | ||
244 | if (libertas_devs[i]==priv->wlan_dev.netdev) { | ||
245 | libertas_devs[i] = libertas_devs[--libertas_found]; | ||
246 | libertas_devs[libertas_found] = NULL ; | ||
247 | break; | ||
248 | } | ||
249 | } | ||
250 | |||
231 | /* card is removed and we can call wlan_remove_card */ | 251 | /* card is removed and we can call wlan_remove_card */ |
232 | lbs_deb_usbd(&cardp->udev->dev, "call remove card\n"); | 252 | lbs_deb_usbd(&cardp->udev->dev, "call remove card\n"); |
233 | wlan_remove_mesh(priv); | 253 | wlan_remove_mesh(priv); |
@@ -330,12 +350,17 @@ static int libertas_do_reset(wlan_private *priv) | |||
330 | int ret; | 350 | int ret; |
331 | struct usb_card_rec *cardp = priv->wlan_dev.card; | 351 | struct usb_card_rec *cardp = priv->wlan_dev.card; |
332 | 352 | ||
353 | lbs_deb_enter(LBS_DEB_USB); | ||
354 | |||
333 | ret = usb_reset_device(cardp->udev); | 355 | ret = usb_reset_device(cardp->udev); |
334 | if (!ret) { | 356 | if (!ret) { |
335 | msleep(10); | 357 | msleep(10); |
336 | reset_device(priv); | 358 | reset_device(priv); |
337 | msleep(10); | 359 | msleep(10); |
338 | } | 360 | } |
361 | |||
362 | lbs_deb_leave_args(LBS_DEB_USB, "ret %d", ret); | ||
363 | |||
339 | return ret; | 364 | return ret; |
340 | } | 365 | } |
341 | 366 | ||
@@ -718,14 +743,16 @@ int libertas_sbi_read_event_cause(wlan_private * priv) | |||
718 | return 0; | 743 | return 0; |
719 | } | 744 | } |
720 | 745 | ||
721 | int reset_device(wlan_private *priv) | 746 | static int reset_device(wlan_private *priv) |
722 | { | 747 | { |
723 | int ret; | 748 | int ret; |
724 | 749 | ||
750 | lbs_deb_enter(LBS_DEB_USB); | ||
725 | ret = libertas_prepare_and_send_command(priv, cmd_802_11_reset, | 751 | ret = libertas_prepare_and_send_command(priv, cmd_802_11_reset, |
726 | cmd_act_halt, 0, 0, NULL); | 752 | cmd_act_halt, 0, 0, NULL); |
727 | msleep_interruptible(10); | 753 | msleep_interruptible(10); |
728 | 754 | ||
755 | lbs_deb_leave_args(LBS_DEB_USB, "ret %d", ret); | ||
729 | return ret; | 756 | return ret; |
730 | } | 757 | } |
731 | 758 | ||
@@ -935,7 +962,13 @@ int libertas_sbi_register(void) | |||
935 | */ | 962 | */ |
936 | void libertas_sbi_unregister(void) | 963 | void libertas_sbi_unregister(void) |
937 | { | 964 | { |
965 | int i; | ||
966 | |||
967 | for (i = 0; i<libertas_found; i++) { | ||
968 | wlan_private *priv = libertas_devs[i]->priv; | ||
969 | reset_device(priv); | ||
970 | } | ||
971 | |||
938 | /* API unregisters the driver from USB subsystem */ | 972 | /* API unregisters the driver from USB subsystem */ |
939 | usb_deregister(&if_usb_driver); | 973 | usb_deregister(&if_usb_driver); |
940 | return; | ||
941 | } | 974 | } |
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 8c4fceaa486b..417f92771375 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c | |||
@@ -169,10 +169,6 @@ u8 libertas_adhoc_rates_g[G_SUPPORTED_RATES] = | |||
169 | */ | 169 | */ |
170 | u8 libertas_adhoc_rates_b[4] = { 0x82, 0x84, 0x8b, 0x96 }; | 170 | u8 libertas_adhoc_rates_b[4] = { 0x82, 0x84, 0x8b, 0x96 }; |
171 | 171 | ||
172 | #define MAX_DEVS 5 | ||
173 | static struct net_device *libertas_devs[MAX_DEVS]; | ||
174 | static int libertas_found = 0; | ||
175 | |||
176 | /** | 172 | /** |
177 | * the table to keep region code | 173 | * the table to keep region code |
178 | */ | 174 | */ |
@@ -851,11 +847,6 @@ wlan_private *wlan_add_card(void *card) | |||
851 | 847 | ||
852 | libertas_debugfs_init_one(priv, dev); | 848 | libertas_debugfs_init_one(priv, dev); |
853 | 849 | ||
854 | if (libertas_found == MAX_DEVS) | ||
855 | goto err_init_fw; | ||
856 | libertas_devs[libertas_found] = dev; | ||
857 | libertas_found++; | ||
858 | |||
859 | lbs_deb_leave_args(LBS_DEB_NET, "priv %p", priv); | 850 | lbs_deb_leave_args(LBS_DEB_NET, "priv %p", priv); |
860 | return priv; | 851 | return priv; |
861 | 852 | ||
@@ -960,7 +951,6 @@ int wlan_remove_card(wlan_private *priv) | |||
960 | wlan_adapter *adapter; | 951 | wlan_adapter *adapter; |
961 | struct net_device *dev; | 952 | struct net_device *dev; |
962 | union iwreq_data wrqu; | 953 | union iwreq_data wrqu; |
963 | int i; | ||
964 | 954 | ||
965 | lbs_deb_enter(LBS_DEB_NET); | 955 | lbs_deb_enter(LBS_DEB_NET); |
966 | 956 | ||
@@ -1003,14 +993,6 @@ int wlan_remove_card(wlan_private *priv) | |||
1003 | lbs_deb_net("free adapter\n"); | 993 | lbs_deb_net("free adapter\n"); |
1004 | libertas_free_adapter(priv); | 994 | libertas_free_adapter(priv); |
1005 | 995 | ||
1006 | for (i = 0; i<libertas_found; i++) { | ||
1007 | if (libertas_devs[i]==priv->wlan_dev.netdev) { | ||
1008 | libertas_devs[i] = libertas_devs[--libertas_found]; | ||
1009 | libertas_devs[libertas_found] = NULL ; | ||
1010 | break ; | ||
1011 | } | ||
1012 | } | ||
1013 | |||
1014 | lbs_deb_net("unregister finish\n"); | 996 | lbs_deb_net("unregister finish\n"); |
1015 | 997 | ||
1016 | priv->wlan_dev.netdev = NULL; | 998 | priv->wlan_dev.netdev = NULL; |
@@ -1161,15 +1143,8 @@ static int wlan_init_module(void) | |||
1161 | 1143 | ||
1162 | static void wlan_cleanup_module(void) | 1144 | static void wlan_cleanup_module(void) |
1163 | { | 1145 | { |
1164 | int i; | ||
1165 | |||
1166 | lbs_deb_enter(LBS_DEB_MAIN); | 1146 | lbs_deb_enter(LBS_DEB_MAIN); |
1167 | 1147 | ||
1168 | for (i = 0; i<libertas_found; i++) { | ||
1169 | wlan_private *priv = libertas_devs[i]->priv; | ||
1170 | reset_device(priv); | ||
1171 | } | ||
1172 | |||
1173 | libertas_sbi_unregister(); | 1148 | libertas_sbi_unregister(); |
1174 | libertas_debugfs_remove(); | 1149 | libertas_debugfs_remove(); |
1175 | 1150 | ||