diff options
author | Michael Buesch <mb@bu3sch.de> | 2006-06-27 15:38:40 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2006-07-10 14:19:41 -0400 |
commit | efa6a370216f1816456b49aac03295071720f7eb (patch) | |
tree | a29c205e603d96ad3b4ef34b274335a851672aac /drivers/net/wireless/bcm43xx/bcm43xx_wx.c | |
parent | b312d799b324e895745ffe148def234fc60d5b74 (diff) |
[PATCH] bcm43xx: opencoded locking
As many people don't seem to like the locking "obfuscation"
in the bcm43xx driver, this patch removes it.
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/bcm43xx/bcm43xx_wx.c')
-rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_wx.c | 121 |
1 files changed, 67 insertions, 54 deletions
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_wx.c b/drivers/net/wireless/bcm43xx/bcm43xx_wx.c index 5c36e29efff7..ebe2a8469a78 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_wx.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_wx.c | |||
@@ -56,12 +56,11 @@ static int bcm43xx_wx_get_name(struct net_device *net_dev, | |||
56 | { | 56 | { |
57 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 57 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
58 | int i; | 58 | int i; |
59 | unsigned long flags; | ||
60 | struct bcm43xx_phyinfo *phy; | 59 | struct bcm43xx_phyinfo *phy; |
61 | char suffix[7] = { 0 }; | 60 | char suffix[7] = { 0 }; |
62 | int have_a = 0, have_b = 0, have_g = 0; | 61 | int have_a = 0, have_b = 0, have_g = 0; |
63 | 62 | ||
64 | bcm43xx_lock_irqsafe(bcm, flags); | 63 | mutex_lock(&bcm->mutex); |
65 | for (i = 0; i < bcm->nr_80211_available; i++) { | 64 | for (i = 0; i < bcm->nr_80211_available; i++) { |
66 | phy = &(bcm->core_80211_ext[i].phy); | 65 | phy = &(bcm->core_80211_ext[i].phy); |
67 | switch (phy->type) { | 66 | switch (phy->type) { |
@@ -77,7 +76,7 @@ static int bcm43xx_wx_get_name(struct net_device *net_dev, | |||
77 | assert(0); | 76 | assert(0); |
78 | } | 77 | } |
79 | } | 78 | } |
80 | bcm43xx_unlock_irqsafe(bcm, flags); | 79 | mutex_unlock(&bcm->mutex); |
81 | 80 | ||
82 | i = 0; | 81 | i = 0; |
83 | if (have_a) { | 82 | if (have_a) { |
@@ -111,7 +110,9 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev, | |||
111 | int freq; | 110 | int freq; |
112 | int err = -EINVAL; | 111 | int err = -EINVAL; |
113 | 112 | ||
114 | bcm43xx_lock_irqsafe(bcm, flags); | 113 | mutex_lock(&bcm->mutex); |
114 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
115 | |||
115 | if ((data->freq.m >= 0) && (data->freq.m <= 1000)) { | 116 | if ((data->freq.m >= 0) && (data->freq.m <= 1000)) { |
116 | channel = data->freq.m; | 117 | channel = data->freq.m; |
117 | freq = bcm43xx_channel_to_freq(bcm, channel); | 118 | freq = bcm43xx_channel_to_freq(bcm, channel); |
@@ -131,7 +132,8 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev, | |||
131 | err = 0; | 132 | err = 0; |
132 | } | 133 | } |
133 | out_unlock: | 134 | out_unlock: |
134 | bcm43xx_unlock_irqsafe(bcm, flags); | 135 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
136 | mutex_unlock(&bcm->mutex); | ||
135 | 137 | ||
136 | return err; | 138 | return err; |
137 | } | 139 | } |
@@ -143,11 +145,10 @@ static int bcm43xx_wx_get_channelfreq(struct net_device *net_dev, | |||
143 | { | 145 | { |
144 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 146 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
145 | struct bcm43xx_radioinfo *radio; | 147 | struct bcm43xx_radioinfo *radio; |
146 | unsigned long flags; | ||
147 | int err = -ENODEV; | 148 | int err = -ENODEV; |
148 | u16 channel; | 149 | u16 channel; |
149 | 150 | ||
150 | bcm43xx_lock_irqsafe(bcm, flags); | 151 | mutex_lock(&bcm->mutex); |
151 | radio = bcm43xx_current_radio(bcm); | 152 | radio = bcm43xx_current_radio(bcm); |
152 | channel = radio->channel; | 153 | channel = radio->channel; |
153 | if (channel == 0xFF) { | 154 | if (channel == 0xFF) { |
@@ -162,7 +163,7 @@ static int bcm43xx_wx_get_channelfreq(struct net_device *net_dev, | |||
162 | 163 | ||
163 | err = 0; | 164 | err = 0; |
164 | out_unlock: | 165 | out_unlock: |
165 | bcm43xx_unlock_irqsafe(bcm, flags); | 166 | mutex_unlock(&bcm->mutex); |
166 | 167 | ||
167 | return err; | 168 | return err; |
168 | } | 169 | } |
@@ -180,13 +181,15 @@ static int bcm43xx_wx_set_mode(struct net_device *net_dev, | |||
180 | if (mode == IW_MODE_AUTO) | 181 | if (mode == IW_MODE_AUTO) |
181 | mode = BCM43xx_INITIAL_IWMODE; | 182 | mode = BCM43xx_INITIAL_IWMODE; |
182 | 183 | ||
183 | bcm43xx_lock_irqsafe(bcm, flags); | 184 | mutex_lock(&bcm->mutex); |
185 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
184 | if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) { | 186 | if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) { |
185 | if (bcm->ieee->iw_mode != mode) | 187 | if (bcm->ieee->iw_mode != mode) |
186 | bcm43xx_set_iwmode(bcm, mode); | 188 | bcm43xx_set_iwmode(bcm, mode); |
187 | } else | 189 | } else |
188 | bcm->ieee->iw_mode = mode; | 190 | bcm->ieee->iw_mode = mode; |
189 | bcm43xx_unlock_irqsafe(bcm, flags); | 191 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
192 | mutex_unlock(&bcm->mutex); | ||
190 | 193 | ||
191 | return 0; | 194 | return 0; |
192 | } | 195 | } |
@@ -197,11 +200,10 @@ static int bcm43xx_wx_get_mode(struct net_device *net_dev, | |||
197 | char *extra) | 200 | char *extra) |
198 | { | 201 | { |
199 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 202 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
200 | unsigned long flags; | ||
201 | 203 | ||
202 | bcm43xx_lock_irqsafe(bcm, flags); | 204 | mutex_lock(&bcm->mutex); |
203 | data->mode = bcm->ieee->iw_mode; | 205 | data->mode = bcm->ieee->iw_mode; |
204 | bcm43xx_unlock_irqsafe(bcm, flags); | 206 | mutex_unlock(&bcm->mutex); |
205 | 207 | ||
206 | return 0; | 208 | return 0; |
207 | } | 209 | } |
@@ -214,7 +216,6 @@ static int bcm43xx_wx_get_rangeparams(struct net_device *net_dev, | |||
214 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 216 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
215 | struct iw_range *range = (struct iw_range *)extra; | 217 | struct iw_range *range = (struct iw_range *)extra; |
216 | const struct ieee80211_geo *geo; | 218 | const struct ieee80211_geo *geo; |
217 | unsigned long flags; | ||
218 | int i, j; | 219 | int i, j; |
219 | struct bcm43xx_phyinfo *phy; | 220 | struct bcm43xx_phyinfo *phy; |
220 | 221 | ||
@@ -254,7 +255,7 @@ static int bcm43xx_wx_get_rangeparams(struct net_device *net_dev, | |||
254 | IW_ENC_CAPA_CIPHER_TKIP | | 255 | IW_ENC_CAPA_CIPHER_TKIP | |
255 | IW_ENC_CAPA_CIPHER_CCMP; | 256 | IW_ENC_CAPA_CIPHER_CCMP; |
256 | 257 | ||
257 | bcm43xx_lock_irqsafe(bcm, flags); | 258 | mutex_lock(&bcm->mutex); |
258 | phy = bcm43xx_current_phy(bcm); | 259 | phy = bcm43xx_current_phy(bcm); |
259 | 260 | ||
260 | range->num_bitrates = 0; | 261 | range->num_bitrates = 0; |
@@ -301,7 +302,7 @@ static int bcm43xx_wx_get_rangeparams(struct net_device *net_dev, | |||
301 | } | 302 | } |
302 | range->num_frequency = j; | 303 | range->num_frequency = j; |
303 | 304 | ||
304 | bcm43xx_unlock_irqsafe(bcm, flags); | 305 | mutex_unlock(&bcm->mutex); |
305 | 306 | ||
306 | return 0; | 307 | return 0; |
307 | } | 308 | } |
@@ -314,11 +315,11 @@ static int bcm43xx_wx_set_nick(struct net_device *net_dev, | |||
314 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 315 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
315 | size_t len; | 316 | size_t len; |
316 | 317 | ||
317 | bcm43xx_lock_noirq(bcm); | 318 | mutex_lock(&bcm->mutex); |
318 | len = min((size_t)data->data.length, (size_t)IW_ESSID_MAX_SIZE); | 319 | len = min((size_t)data->data.length, (size_t)IW_ESSID_MAX_SIZE); |
319 | memcpy(bcm->nick, extra, len); | 320 | memcpy(bcm->nick, extra, len); |
320 | bcm->nick[len] = '\0'; | 321 | bcm->nick[len] = '\0'; |
321 | bcm43xx_unlock_noirq(bcm); | 322 | mutex_unlock(&bcm->mutex); |
322 | 323 | ||
323 | return 0; | 324 | return 0; |
324 | } | 325 | } |
@@ -331,12 +332,12 @@ static int bcm43xx_wx_get_nick(struct net_device *net_dev, | |||
331 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 332 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
332 | size_t len; | 333 | size_t len; |
333 | 334 | ||
334 | bcm43xx_lock_noirq(bcm); | 335 | mutex_lock(&bcm->mutex); |
335 | len = strlen(bcm->nick) + 1; | 336 | len = strlen(bcm->nick) + 1; |
336 | memcpy(extra, bcm->nick, len); | 337 | memcpy(extra, bcm->nick, len); |
337 | data->data.length = (__u16)len; | 338 | data->data.length = (__u16)len; |
338 | data->data.flags = 1; | 339 | data->data.flags = 1; |
339 | bcm43xx_unlock_noirq(bcm); | 340 | mutex_unlock(&bcm->mutex); |
340 | 341 | ||
341 | return 0; | 342 | return 0; |
342 | } | 343 | } |
@@ -350,7 +351,8 @@ static int bcm43xx_wx_set_rts(struct net_device *net_dev, | |||
350 | unsigned long flags; | 351 | unsigned long flags; |
351 | int err = -EINVAL; | 352 | int err = -EINVAL; |
352 | 353 | ||
353 | bcm43xx_lock_irqsafe(bcm, flags); | 354 | mutex_lock(&bcm->mutex); |
355 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
354 | if (data->rts.disabled) { | 356 | if (data->rts.disabled) { |
355 | bcm->rts_threshold = BCM43xx_MAX_RTS_THRESHOLD; | 357 | bcm->rts_threshold = BCM43xx_MAX_RTS_THRESHOLD; |
356 | err = 0; | 358 | err = 0; |
@@ -361,7 +363,8 @@ static int bcm43xx_wx_set_rts(struct net_device *net_dev, | |||
361 | err = 0; | 363 | err = 0; |
362 | } | 364 | } |
363 | } | 365 | } |
364 | bcm43xx_unlock_irqsafe(bcm, flags); | 366 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
367 | mutex_unlock(&bcm->mutex); | ||
365 | 368 | ||
366 | return err; | 369 | return err; |
367 | } | 370 | } |
@@ -372,13 +375,12 @@ static int bcm43xx_wx_get_rts(struct net_device *net_dev, | |||
372 | char *extra) | 375 | char *extra) |
373 | { | 376 | { |
374 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 377 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
375 | unsigned long flags; | ||
376 | 378 | ||
377 | bcm43xx_lock_irqsafe(bcm, flags); | 379 | mutex_lock(&bcm->mutex); |
378 | data->rts.value = bcm->rts_threshold; | 380 | data->rts.value = bcm->rts_threshold; |
379 | data->rts.fixed = 0; | 381 | data->rts.fixed = 0; |
380 | data->rts.disabled = (bcm->rts_threshold == BCM43xx_MAX_RTS_THRESHOLD); | 382 | data->rts.disabled = (bcm->rts_threshold == BCM43xx_MAX_RTS_THRESHOLD); |
381 | bcm43xx_unlock_irqsafe(bcm, flags); | 383 | mutex_unlock(&bcm->mutex); |
382 | 384 | ||
383 | return 0; | 385 | return 0; |
384 | } | 386 | } |
@@ -392,7 +394,8 @@ static int bcm43xx_wx_set_frag(struct net_device *net_dev, | |||
392 | unsigned long flags; | 394 | unsigned long flags; |
393 | int err = -EINVAL; | 395 | int err = -EINVAL; |
394 | 396 | ||
395 | bcm43xx_lock_irqsafe(bcm, flags); | 397 | mutex_lock(&bcm->mutex); |
398 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
396 | if (data->frag.disabled) { | 399 | if (data->frag.disabled) { |
397 | bcm->ieee->fts = MAX_FRAG_THRESHOLD; | 400 | bcm->ieee->fts = MAX_FRAG_THRESHOLD; |
398 | err = 0; | 401 | err = 0; |
@@ -403,7 +406,8 @@ static int bcm43xx_wx_set_frag(struct net_device *net_dev, | |||
403 | err = 0; | 406 | err = 0; |
404 | } | 407 | } |
405 | } | 408 | } |
406 | bcm43xx_unlock_irqsafe(bcm, flags); | 409 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
410 | mutex_unlock(&bcm->mutex); | ||
407 | 411 | ||
408 | return err; | 412 | return err; |
409 | } | 413 | } |
@@ -414,13 +418,12 @@ static int bcm43xx_wx_get_frag(struct net_device *net_dev, | |||
414 | char *extra) | 418 | char *extra) |
415 | { | 419 | { |
416 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 420 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
417 | unsigned long flags; | ||
418 | 421 | ||
419 | bcm43xx_lock_irqsafe(bcm, flags); | 422 | mutex_lock(&bcm->mutex); |
420 | data->frag.value = bcm->ieee->fts; | 423 | data->frag.value = bcm->ieee->fts; |
421 | data->frag.fixed = 0; | 424 | data->frag.fixed = 0; |
422 | data->frag.disabled = (bcm->ieee->fts == MAX_FRAG_THRESHOLD); | 425 | data->frag.disabled = (bcm->ieee->fts == MAX_FRAG_THRESHOLD); |
423 | bcm43xx_unlock_irqsafe(bcm, flags); | 426 | mutex_unlock(&bcm->mutex); |
424 | 427 | ||
425 | return 0; | 428 | return 0; |
426 | } | 429 | } |
@@ -442,7 +445,8 @@ static int bcm43xx_wx_set_xmitpower(struct net_device *net_dev, | |||
442 | return -EOPNOTSUPP; | 445 | return -EOPNOTSUPP; |
443 | } | 446 | } |
444 | 447 | ||
445 | bcm43xx_lock_irqsafe(bcm, flags); | 448 | mutex_lock(&bcm->mutex); |
449 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
446 | if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED) | 450 | if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED) |
447 | goto out_unlock; | 451 | goto out_unlock; |
448 | radio = bcm43xx_current_radio(bcm); | 452 | radio = bcm43xx_current_radio(bcm); |
@@ -466,7 +470,8 @@ static int bcm43xx_wx_set_xmitpower(struct net_device *net_dev, | |||
466 | err = 0; | 470 | err = 0; |
467 | 471 | ||
468 | out_unlock: | 472 | out_unlock: |
469 | bcm43xx_unlock_irqsafe(bcm, flags); | 473 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
474 | mutex_unlock(&bcm->mutex); | ||
470 | 475 | ||
471 | return err; | 476 | return err; |
472 | } | 477 | } |
@@ -478,10 +483,9 @@ static int bcm43xx_wx_get_xmitpower(struct net_device *net_dev, | |||
478 | { | 483 | { |
479 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 484 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
480 | struct bcm43xx_radioinfo *radio; | 485 | struct bcm43xx_radioinfo *radio; |
481 | unsigned long flags; | ||
482 | int err = -ENODEV; | 486 | int err = -ENODEV; |
483 | 487 | ||
484 | bcm43xx_lock_irqsafe(bcm, flags); | 488 | mutex_lock(&bcm->mutex); |
485 | if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED) | 489 | if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED) |
486 | goto out_unlock; | 490 | goto out_unlock; |
487 | radio = bcm43xx_current_radio(bcm); | 491 | radio = bcm43xx_current_radio(bcm); |
@@ -493,7 +497,7 @@ static int bcm43xx_wx_get_xmitpower(struct net_device *net_dev, | |||
493 | 497 | ||
494 | err = 0; | 498 | err = 0; |
495 | out_unlock: | 499 | out_unlock: |
496 | bcm43xx_unlock_irqsafe(bcm, flags); | 500 | mutex_unlock(&bcm->mutex); |
497 | 501 | ||
498 | return err; | 502 | return err; |
499 | } | 503 | } |
@@ -580,7 +584,8 @@ static int bcm43xx_wx_set_interfmode(struct net_device *net_dev, | |||
580 | return -EINVAL; | 584 | return -EINVAL; |
581 | } | 585 | } |
582 | 586 | ||
583 | bcm43xx_lock_irqsafe(bcm, flags); | 587 | mutex_lock(&bcm->mutex); |
588 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
584 | if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) { | 589 | if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) { |
585 | err = bcm43xx_radio_set_interference_mitigation(bcm, mode); | 590 | err = bcm43xx_radio_set_interference_mitigation(bcm, mode); |
586 | if (err) { | 591 | if (err) { |
@@ -595,7 +600,8 @@ static int bcm43xx_wx_set_interfmode(struct net_device *net_dev, | |||
595 | } else | 600 | } else |
596 | bcm43xx_current_radio(bcm)->interfmode = mode; | 601 | bcm43xx_current_radio(bcm)->interfmode = mode; |
597 | } | 602 | } |
598 | bcm43xx_unlock_irqsafe(bcm, flags); | 603 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
604 | mutex_unlock(&bcm->mutex); | ||
599 | 605 | ||
600 | return err; | 606 | return err; |
601 | } | 607 | } |
@@ -606,12 +612,11 @@ static int bcm43xx_wx_get_interfmode(struct net_device *net_dev, | |||
606 | char *extra) | 612 | char *extra) |
607 | { | 613 | { |
608 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 614 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
609 | unsigned long flags; | ||
610 | int mode; | 615 | int mode; |
611 | 616 | ||
612 | bcm43xx_lock_irqsafe(bcm, flags); | 617 | mutex_lock(&bcm->mutex); |
613 | mode = bcm43xx_current_radio(bcm)->interfmode; | 618 | mode = bcm43xx_current_radio(bcm)->interfmode; |
614 | bcm43xx_unlock_irqsafe(bcm, flags); | 619 | mutex_unlock(&bcm->mutex); |
615 | 620 | ||
616 | switch (mode) { | 621 | switch (mode) { |
617 | case BCM43xx_RADIO_INTERFMODE_NONE: | 622 | case BCM43xx_RADIO_INTERFMODE_NONE: |
@@ -641,9 +646,11 @@ static int bcm43xx_wx_set_shortpreamble(struct net_device *net_dev, | |||
641 | int on; | 646 | int on; |
642 | 647 | ||
643 | on = *((int *)extra); | 648 | on = *((int *)extra); |
644 | bcm43xx_lock_irqsafe(bcm, flags); | 649 | mutex_lock(&bcm->mutex); |
650 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
645 | bcm->short_preamble = !!on; | 651 | bcm->short_preamble = !!on; |
646 | bcm43xx_unlock_irqsafe(bcm, flags); | 652 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
653 | mutex_unlock(&bcm->mutex); | ||
647 | 654 | ||
648 | return 0; | 655 | return 0; |
649 | } | 656 | } |
@@ -654,12 +661,11 @@ static int bcm43xx_wx_get_shortpreamble(struct net_device *net_dev, | |||
654 | char *extra) | 661 | char *extra) |
655 | { | 662 | { |
656 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 663 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
657 | unsigned long flags; | ||
658 | int on; | 664 | int on; |
659 | 665 | ||
660 | bcm43xx_lock_irqsafe(bcm, flags); | 666 | mutex_lock(&bcm->mutex); |
661 | on = bcm->short_preamble; | 667 | on = bcm->short_preamble; |
662 | bcm43xx_unlock_irqsafe(bcm, flags); | 668 | mutex_unlock(&bcm->mutex); |
663 | 669 | ||
664 | if (on) | 670 | if (on) |
665 | strncpy(extra, "1 (Short Preamble enabled)", MAX_WX_STRING); | 671 | strncpy(extra, "1 (Short Preamble enabled)", MAX_WX_STRING); |
@@ -681,11 +687,13 @@ static int bcm43xx_wx_set_swencryption(struct net_device *net_dev, | |||
681 | 687 | ||
682 | on = *((int *)extra); | 688 | on = *((int *)extra); |
683 | 689 | ||
684 | bcm43xx_lock_irqsafe(bcm, flags); | 690 | mutex_lock(&bcm->mutex); |
691 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
685 | bcm->ieee->host_encrypt = !!on; | 692 | bcm->ieee->host_encrypt = !!on; |
686 | bcm->ieee->host_decrypt = !!on; | 693 | bcm->ieee->host_decrypt = !!on; |
687 | bcm->ieee->host_build_iv = !on; | 694 | bcm->ieee->host_build_iv = !on; |
688 | bcm43xx_unlock_irqsafe(bcm, flags); | 695 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
696 | mutex_unlock(&bcm->mutex); | ||
689 | 697 | ||
690 | return 0; | 698 | return 0; |
691 | } | 699 | } |
@@ -696,12 +704,11 @@ static int bcm43xx_wx_get_swencryption(struct net_device *net_dev, | |||
696 | char *extra) | 704 | char *extra) |
697 | { | 705 | { |
698 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); | 706 | struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); |
699 | unsigned long flags; | ||
700 | int on; | 707 | int on; |
701 | 708 | ||
702 | bcm43xx_lock_irqsafe(bcm, flags); | 709 | mutex_lock(&bcm->mutex); |
703 | on = bcm->ieee->host_encrypt; | 710 | on = bcm->ieee->host_encrypt; |
704 | bcm43xx_unlock_irqsafe(bcm, flags); | 711 | mutex_unlock(&bcm->mutex); |
705 | 712 | ||
706 | if (on) | 713 | if (on) |
707 | strncpy(extra, "1 (SW encryption enabled) ", MAX_WX_STRING); | 714 | strncpy(extra, "1 (SW encryption enabled) ", MAX_WX_STRING); |
@@ -764,11 +771,13 @@ static int bcm43xx_wx_sprom_read(struct net_device *net_dev, | |||
764 | if (!sprom) | 771 | if (!sprom) |
765 | goto out; | 772 | goto out; |
766 | 773 | ||
767 | bcm43xx_lock_irqsafe(bcm, flags); | 774 | mutex_lock(&bcm->mutex); |
775 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
768 | err = -ENODEV; | 776 | err = -ENODEV; |
769 | if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) | 777 | if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) |
770 | err = bcm43xx_sprom_read(bcm, sprom); | 778 | err = bcm43xx_sprom_read(bcm, sprom); |
771 | bcm43xx_unlock_irqsafe(bcm, flags); | 779 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
780 | mutex_unlock(&bcm->mutex); | ||
772 | if (!err) | 781 | if (!err) |
773 | data->data.length = sprom2hex(sprom, extra); | 782 | data->data.length = sprom2hex(sprom, extra); |
774 | kfree(sprom); | 783 | kfree(sprom); |
@@ -809,11 +818,15 @@ static int bcm43xx_wx_sprom_write(struct net_device *net_dev, | |||
809 | if (err) | 818 | if (err) |
810 | goto out_kfree; | 819 | goto out_kfree; |
811 | 820 | ||
812 | bcm43xx_lock_irqsafe(bcm, flags); | 821 | mutex_lock(&bcm->mutex); |
822 | spin_lock_irqsave(&bcm->irq_lock, flags); | ||
823 | spin_lock(&bcm->leds_lock); | ||
813 | err = -ENODEV; | 824 | err = -ENODEV; |
814 | if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) | 825 | if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) |
815 | err = bcm43xx_sprom_write(bcm, sprom); | 826 | err = bcm43xx_sprom_write(bcm, sprom); |
816 | bcm43xx_unlock_irqsafe(bcm, flags); | 827 | spin_unlock(&bcm->leds_lock); |
828 | spin_unlock_irqrestore(&bcm->irq_lock, flags); | ||
829 | mutex_unlock(&bcm->mutex); | ||
817 | out_kfree: | 830 | out_kfree: |
818 | kfree(sprom); | 831 | kfree(sprom); |
819 | out: | 832 | out: |