Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.31-rc2 995 lines 25 kB view raw
1/* 2 Copyright (C) 2004 - 2009 rt2x00 SourceForge Project 3 <http://rt2x00.serialmonkey.com> 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the 17 Free Software Foundation, Inc., 18 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 */ 20 21/* 22 Module: rt2x00lib 23 Abstract: rt2x00 generic device routines. 24 */ 25 26#include <linux/kernel.h> 27#include <linux/module.h> 28 29#include "rt2x00.h" 30#include "rt2x00lib.h" 31 32/* 33 * Radio control handlers. 34 */ 35int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev) 36{ 37 int status; 38 39 /* 40 * Don't enable the radio twice. 41 * And check if the hardware button has been disabled. 42 */ 43 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags) || 44 test_bit(DEVICE_STATE_DISABLED_RADIO_HW, &rt2x00dev->flags)) 45 return 0; 46 47 /* 48 * Initialize all data queues. 49 */ 50 rt2x00queue_init_queues(rt2x00dev); 51 52 /* 53 * Enable radio. 54 */ 55 status = 56 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_ON); 57 if (status) 58 return status; 59 60 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_ON); 61 62 rt2x00leds_led_radio(rt2x00dev, true); 63 rt2x00led_led_activity(rt2x00dev, true); 64 65 set_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags); 66 67 /* 68 * Enable RX. 69 */ 70 rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON); 71 72 /* 73 * Start the TX queues. 74 */ 75 ieee80211_wake_queues(rt2x00dev->hw); 76 77 return 0; 78} 79 80void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev) 81{ 82 if (!test_and_clear_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) 83 return; 84 85 /* 86 * Stop the TX queues in mac80211. 87 */ 88 ieee80211_stop_queues(rt2x00dev->hw); 89 rt2x00queue_stop_queues(rt2x00dev); 90 91 /* 92 * Disable RX. 93 */ 94 rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF); 95 96 /* 97 * Disable radio. 98 */ 99 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_OFF); 100 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_OFF); 101 rt2x00led_led_activity(rt2x00dev, false); 102 rt2x00leds_led_radio(rt2x00dev, false); 103} 104 105void rt2x00lib_toggle_rx(struct rt2x00_dev *rt2x00dev, enum dev_state state) 106{ 107 /* 108 * When we are disabling the RX, we should also stop the link tuner. 109 */ 110 if (state == STATE_RADIO_RX_OFF) 111 rt2x00link_stop_tuner(rt2x00dev); 112 113 rt2x00dev->ops->lib->set_device_state(rt2x00dev, state); 114 115 /* 116 * When we are enabling the RX, we should also start the link tuner. 117 */ 118 if (state == STATE_RADIO_RX_ON) 119 rt2x00link_start_tuner(rt2x00dev); 120} 121 122static void rt2x00lib_packetfilter_scheduled(struct work_struct *work) 123{ 124 struct rt2x00_dev *rt2x00dev = 125 container_of(work, struct rt2x00_dev, filter_work); 126 127 rt2x00dev->ops->lib->config_filter(rt2x00dev, rt2x00dev->packet_filter); 128} 129 130static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac, 131 struct ieee80211_vif *vif) 132{ 133 struct rt2x00_dev *rt2x00dev = data; 134 struct rt2x00_intf *intf = vif_to_intf(vif); 135 struct ieee80211_bss_conf conf; 136 int delayed_flags; 137 138 /* 139 * Copy all data we need during this action under the protection 140 * of a spinlock. Otherwise race conditions might occur which results 141 * into an invalid configuration. 142 */ 143 spin_lock(&intf->lock); 144 145 memcpy(&conf, &vif->bss_conf, sizeof(conf)); 146 delayed_flags = intf->delayed_flags; 147 intf->delayed_flags = 0; 148 149 spin_unlock(&intf->lock); 150 151 /* 152 * It is possible the radio was disabled while the work had been 153 * scheduled. If that happens we should return here immediately, 154 * note that in the spinlock protected area above the delayed_flags 155 * have been cleared correctly. 156 */ 157 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) 158 return; 159 160 if (delayed_flags & DELAYED_UPDATE_BEACON) 161 rt2x00queue_update_beacon(rt2x00dev, vif, true); 162 163 if (delayed_flags & DELAYED_CONFIG_ERP) 164 rt2x00lib_config_erp(rt2x00dev, intf, &conf); 165 166 if (delayed_flags & DELAYED_LED_ASSOC) 167 rt2x00leds_led_assoc(rt2x00dev, !!rt2x00dev->intf_associated); 168} 169 170static void rt2x00lib_intf_scheduled(struct work_struct *work) 171{ 172 struct rt2x00_dev *rt2x00dev = 173 container_of(work, struct rt2x00_dev, intf_work); 174 175 /* 176 * Iterate over each interface and perform the 177 * requested configurations. 178 */ 179 ieee80211_iterate_active_interfaces(rt2x00dev->hw, 180 rt2x00lib_intf_scheduled_iter, 181 rt2x00dev); 182} 183 184/* 185 * Interrupt context handlers. 186 */ 187static void rt2x00lib_beacondone_iter(void *data, u8 *mac, 188 struct ieee80211_vif *vif) 189{ 190 struct rt2x00_dev *rt2x00dev = data; 191 struct rt2x00_intf *intf = vif_to_intf(vif); 192 193 if (vif->type != NL80211_IFTYPE_AP && 194 vif->type != NL80211_IFTYPE_ADHOC && 195 vif->type != NL80211_IFTYPE_MESH_POINT && 196 vif->type != NL80211_IFTYPE_WDS) 197 return; 198 199 /* 200 * Clean up the beacon skb. 201 */ 202 rt2x00queue_free_skb(rt2x00dev, intf->beacon->skb); 203 intf->beacon->skb = NULL; 204 205 spin_lock(&intf->lock); 206 intf->delayed_flags |= DELAYED_UPDATE_BEACON; 207 spin_unlock(&intf->lock); 208} 209 210void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev) 211{ 212 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) 213 return; 214 215 ieee80211_iterate_active_interfaces_atomic(rt2x00dev->hw, 216 rt2x00lib_beacondone_iter, 217 rt2x00dev); 218 219 queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work); 220} 221EXPORT_SYMBOL_GPL(rt2x00lib_beacondone); 222 223void rt2x00lib_txdone(struct queue_entry *entry, 224 struct txdone_entry_desc *txdesc) 225{ 226 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; 227 struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb); 228 struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb); 229 enum data_queue_qid qid = skb_get_queue_mapping(entry->skb); 230 unsigned int header_length = ieee80211_get_hdrlen_from_skb(entry->skb); 231 u8 rate_idx, rate_flags; 232 233 /* 234 * Unmap the skb. 235 */ 236 rt2x00queue_unmap_skb(rt2x00dev, entry->skb); 237 238 /* 239 * Remove L2 padding which was added during 240 */ 241 if (test_bit(DRIVER_REQUIRE_L2PAD, &rt2x00dev->flags)) 242 rt2x00queue_payload_align(entry->skb, true, header_length); 243 244 /* 245 * If the IV/EIV data was stripped from the frame before it was 246 * passed to the hardware, we should now reinsert it again because 247 * mac80211 will expect the the same data to be present it the 248 * frame as it was passed to us. 249 */ 250 if (test_bit(CONFIG_SUPPORT_HW_CRYPTO, &rt2x00dev->flags)) 251 rt2x00crypto_tx_insert_iv(entry->skb, header_length); 252 253 /* 254 * Send frame to debugfs immediately, after this call is completed 255 * we are going to overwrite the skb->cb array. 256 */ 257 rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_TXDONE, entry->skb); 258 259 /* 260 * Update TX statistics. 261 */ 262 rt2x00dev->link.qual.tx_success += 263 test_bit(TXDONE_SUCCESS, &txdesc->flags) || 264 test_bit(TXDONE_UNKNOWN, &txdesc->flags); 265 rt2x00dev->link.qual.tx_failed += 266 test_bit(TXDONE_FAILURE, &txdesc->flags); 267 268 rate_idx = skbdesc->tx_rate_idx; 269 rate_flags = skbdesc->tx_rate_flags; 270 271 /* 272 * Initialize TX status 273 */ 274 memset(&tx_info->status, 0, sizeof(tx_info->status)); 275 tx_info->status.ack_signal = 0; 276 tx_info->status.rates[0].idx = rate_idx; 277 tx_info->status.rates[0].flags = rate_flags; 278 tx_info->status.rates[0].count = txdesc->retry + 1; 279 tx_info->status.rates[1].idx = -1; /* terminate */ 280 281 if (!(tx_info->flags & IEEE80211_TX_CTL_NO_ACK)) { 282 if (test_bit(TXDONE_SUCCESS, &txdesc->flags) || 283 test_bit(TXDONE_UNKNOWN, &txdesc->flags)) 284 tx_info->flags |= IEEE80211_TX_STAT_ACK; 285 else if (test_bit(TXDONE_FAILURE, &txdesc->flags)) 286 rt2x00dev->low_level_stats.dot11ACKFailureCount++; 287 } 288 289 if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) { 290 if (test_bit(TXDONE_SUCCESS, &txdesc->flags) || 291 test_bit(TXDONE_UNKNOWN, &txdesc->flags)) 292 rt2x00dev->low_level_stats.dot11RTSSuccessCount++; 293 else if (test_bit(TXDONE_FAILURE, &txdesc->flags)) 294 rt2x00dev->low_level_stats.dot11RTSFailureCount++; 295 } 296 297 /* 298 * Only send the status report to mac80211 when TX status was 299 * requested by it. If this was a extra frame coming through 300 * a mac80211 library call (RTS/CTS) then we should not send the 301 * status report back. 302 */ 303 if (tx_info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS) 304 ieee80211_tx_status_irqsafe(rt2x00dev->hw, entry->skb); 305 else 306 dev_kfree_skb_irq(entry->skb); 307 308 /* 309 * Make this entry available for reuse. 310 */ 311 entry->skb = NULL; 312 entry->flags = 0; 313 314 rt2x00dev->ops->lib->clear_entry(entry); 315 316 clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags); 317 rt2x00queue_index_inc(entry->queue, Q_INDEX_DONE); 318 319 /* 320 * If the data queue was below the threshold before the txdone 321 * handler we must make sure the packet queue in the mac80211 stack 322 * is reenabled when the txdone handler has finished. 323 */ 324 if (!rt2x00queue_threshold(entry->queue)) 325 ieee80211_wake_queue(rt2x00dev->hw, qid); 326} 327EXPORT_SYMBOL_GPL(rt2x00lib_txdone); 328 329static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev, 330 struct rxdone_entry_desc *rxdesc) 331{ 332 struct ieee80211_supported_band *sband; 333 const struct rt2x00_rate *rate; 334 unsigned int i; 335 int signal; 336 int type; 337 338 /* 339 * For non-HT rates the MCS value needs to contain the 340 * actually used rate modulation (CCK or OFDM). 341 */ 342 if (rxdesc->dev_flags & RXDONE_SIGNAL_MCS) 343 signal = RATE_MCS(rxdesc->rate_mode, rxdesc->signal); 344 else 345 signal = rxdesc->signal; 346 347 type = (rxdesc->dev_flags & RXDONE_SIGNAL_MASK); 348 349 sband = &rt2x00dev->bands[rt2x00dev->curr_band]; 350 for (i = 0; i < sband->n_bitrates; i++) { 351 rate = rt2x00_get_rate(sband->bitrates[i].hw_value); 352 353 if (((type == RXDONE_SIGNAL_PLCP) && 354 (rate->plcp == signal)) || 355 ((type == RXDONE_SIGNAL_BITRATE) && 356 (rate->bitrate == signal)) || 357 ((type == RXDONE_SIGNAL_MCS) && 358 (rate->mcs == signal))) { 359 return i; 360 } 361 } 362 363 WARNING(rt2x00dev, "Frame received with unrecognized signal, " 364 "signal=0x%.4x, type=%d.\n", signal, type); 365 return 0; 366} 367 368void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev, 369 struct queue_entry *entry) 370{ 371 struct rxdone_entry_desc rxdesc; 372 struct sk_buff *skb; 373 struct ieee80211_rx_status *rx_status = &rt2x00dev->rx_status; 374 unsigned int header_length; 375 bool l2pad; 376 int rate_idx; 377 /* 378 * Allocate a new sk_buffer. If no new buffer available, drop the 379 * received frame and reuse the existing buffer. 380 */ 381 skb = rt2x00queue_alloc_rxskb(rt2x00dev, entry); 382 if (!skb) 383 return; 384 385 /* 386 * Unmap the skb. 387 */ 388 rt2x00queue_unmap_skb(rt2x00dev, entry->skb); 389 390 /* 391 * Extract the RXD details. 392 */ 393 memset(&rxdesc, 0, sizeof(rxdesc)); 394 rt2x00dev->ops->lib->fill_rxdone(entry, &rxdesc); 395 396 /* Trim buffer to correct size */ 397 skb_trim(entry->skb, rxdesc.size); 398 399 /* 400 * The data behind the ieee80211 header must be 401 * aligned on a 4 byte boundary. 402 */ 403 header_length = ieee80211_get_hdrlen_from_skb(entry->skb); 404 l2pad = !!(rxdesc.dev_flags & RXDONE_L2PAD); 405 406 /* 407 * Hardware might have stripped the IV/EIV/ICV data, 408 * in that case it is possible that the data was 409 * provided seperately (through hardware descriptor) 410 * in which case we should reinsert the data into the frame. 411 */ 412 if ((rxdesc.dev_flags & RXDONE_CRYPTO_IV) && 413 (rxdesc.flags & RX_FLAG_IV_STRIPPED)) 414 rt2x00crypto_rx_insert_iv(entry->skb, l2pad, header_length, 415 &rxdesc); 416 else 417 rt2x00queue_payload_align(entry->skb, l2pad, header_length); 418 419 /* 420 * Check if the frame was received using HT. In that case, 421 * the rate is the MCS index and should be passed to mac80211 422 * directly. Otherwise we need to translate the signal to 423 * the correct bitrate index. 424 */ 425 if (rxdesc.rate_mode == RATE_MODE_CCK || 426 rxdesc.rate_mode == RATE_MODE_OFDM) { 427 rate_idx = rt2x00lib_rxdone_read_signal(rt2x00dev, &rxdesc); 428 } else { 429 rxdesc.flags |= RX_FLAG_HT; 430 rate_idx = rxdesc.signal; 431 } 432 433 /* 434 * Update extra components 435 */ 436 rt2x00link_update_stats(rt2x00dev, entry->skb, &rxdesc); 437 rt2x00debug_update_crypto(rt2x00dev, &rxdesc); 438 439 rx_status->mactime = rxdesc.timestamp; 440 rx_status->rate_idx = rate_idx; 441 rx_status->qual = rt2x00link_calculate_signal(rt2x00dev, rxdesc.rssi); 442 rx_status->signal = rxdesc.rssi; 443 rx_status->noise = rxdesc.noise; 444 rx_status->flag = rxdesc.flags; 445 rx_status->antenna = rt2x00dev->link.ant.active.rx; 446 447 /* 448 * Send frame to mac80211 & debugfs. 449 * mac80211 will clean up the skb structure. 450 */ 451 rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_RXDONE, entry->skb); 452 ieee80211_rx_irqsafe(rt2x00dev->hw, entry->skb, rx_status); 453 454 /* 455 * Replace the skb with the freshly allocated one. 456 */ 457 entry->skb = skb; 458 entry->flags = 0; 459 460 rt2x00dev->ops->lib->clear_entry(entry); 461 462 rt2x00queue_index_inc(entry->queue, Q_INDEX); 463} 464EXPORT_SYMBOL_GPL(rt2x00lib_rxdone); 465 466/* 467 * Driver initialization handlers. 468 */ 469const struct rt2x00_rate rt2x00_supported_rates[12] = { 470 { 471 .flags = DEV_RATE_CCK, 472 .bitrate = 10, 473 .ratemask = BIT(0), 474 .plcp = 0x00, 475 .mcs = RATE_MCS(RATE_MODE_CCK, 0), 476 }, 477 { 478 .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE, 479 .bitrate = 20, 480 .ratemask = BIT(1), 481 .plcp = 0x01, 482 .mcs = RATE_MCS(RATE_MODE_CCK, 1), 483 }, 484 { 485 .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE, 486 .bitrate = 55, 487 .ratemask = BIT(2), 488 .plcp = 0x02, 489 .mcs = RATE_MCS(RATE_MODE_CCK, 2), 490 }, 491 { 492 .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE, 493 .bitrate = 110, 494 .ratemask = BIT(3), 495 .plcp = 0x03, 496 .mcs = RATE_MCS(RATE_MODE_CCK, 3), 497 }, 498 { 499 .flags = DEV_RATE_OFDM, 500 .bitrate = 60, 501 .ratemask = BIT(4), 502 .plcp = 0x0b, 503 .mcs = RATE_MCS(RATE_MODE_OFDM, 0), 504 }, 505 { 506 .flags = DEV_RATE_OFDM, 507 .bitrate = 90, 508 .ratemask = BIT(5), 509 .plcp = 0x0f, 510 .mcs = RATE_MCS(RATE_MODE_OFDM, 1), 511 }, 512 { 513 .flags = DEV_RATE_OFDM, 514 .bitrate = 120, 515 .ratemask = BIT(6), 516 .plcp = 0x0a, 517 .mcs = RATE_MCS(RATE_MODE_OFDM, 2), 518 }, 519 { 520 .flags = DEV_RATE_OFDM, 521 .bitrate = 180, 522 .ratemask = BIT(7), 523 .plcp = 0x0e, 524 .mcs = RATE_MCS(RATE_MODE_OFDM, 3), 525 }, 526 { 527 .flags = DEV_RATE_OFDM, 528 .bitrate = 240, 529 .ratemask = BIT(8), 530 .plcp = 0x09, 531 .mcs = RATE_MCS(RATE_MODE_OFDM, 4), 532 }, 533 { 534 .flags = DEV_RATE_OFDM, 535 .bitrate = 360, 536 .ratemask = BIT(9), 537 .plcp = 0x0d, 538 .mcs = RATE_MCS(RATE_MODE_OFDM, 5), 539 }, 540 { 541 .flags = DEV_RATE_OFDM, 542 .bitrate = 480, 543 .ratemask = BIT(10), 544 .plcp = 0x08, 545 .mcs = RATE_MCS(RATE_MODE_OFDM, 6), 546 }, 547 { 548 .flags = DEV_RATE_OFDM, 549 .bitrate = 540, 550 .ratemask = BIT(11), 551 .plcp = 0x0c, 552 .mcs = RATE_MCS(RATE_MODE_OFDM, 7), 553 }, 554}; 555 556static void rt2x00lib_channel(struct ieee80211_channel *entry, 557 const int channel, const int tx_power, 558 const int value) 559{ 560 entry->center_freq = ieee80211_channel_to_frequency(channel); 561 entry->hw_value = value; 562 entry->max_power = tx_power; 563 entry->max_antenna_gain = 0xff; 564} 565 566static void rt2x00lib_rate(struct ieee80211_rate *entry, 567 const u16 index, const struct rt2x00_rate *rate) 568{ 569 entry->flags = 0; 570 entry->bitrate = rate->bitrate; 571 entry->hw_value =index; 572 entry->hw_value_short = index; 573 574 if (rate->flags & DEV_RATE_SHORT_PREAMBLE) 575 entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE; 576} 577 578static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev, 579 struct hw_mode_spec *spec) 580{ 581 struct ieee80211_hw *hw = rt2x00dev->hw; 582 struct ieee80211_channel *channels; 583 struct ieee80211_rate *rates; 584 unsigned int num_rates; 585 unsigned int i; 586 587 num_rates = 0; 588 if (spec->supported_rates & SUPPORT_RATE_CCK) 589 num_rates += 4; 590 if (spec->supported_rates & SUPPORT_RATE_OFDM) 591 num_rates += 8; 592 593 channels = kzalloc(sizeof(*channels) * spec->num_channels, GFP_KERNEL); 594 if (!channels) 595 return -ENOMEM; 596 597 rates = kzalloc(sizeof(*rates) * num_rates, GFP_KERNEL); 598 if (!rates) 599 goto exit_free_channels; 600 601 /* 602 * Initialize Rate list. 603 */ 604 for (i = 0; i < num_rates; i++) 605 rt2x00lib_rate(&rates[i], i, rt2x00_get_rate(i)); 606 607 /* 608 * Initialize Channel list. 609 */ 610 for (i = 0; i < spec->num_channels; i++) { 611 rt2x00lib_channel(&channels[i], 612 spec->channels[i].channel, 613 spec->channels_info[i].tx_power1, i); 614 } 615 616 /* 617 * Intitialize 802.11b, 802.11g 618 * Rates: CCK, OFDM. 619 * Channels: 2.4 GHz 620 */ 621 if (spec->supported_bands & SUPPORT_BAND_2GHZ) { 622 rt2x00dev->bands[IEEE80211_BAND_2GHZ].n_channels = 14; 623 rt2x00dev->bands[IEEE80211_BAND_2GHZ].n_bitrates = num_rates; 624 rt2x00dev->bands[IEEE80211_BAND_2GHZ].channels = channels; 625 rt2x00dev->bands[IEEE80211_BAND_2GHZ].bitrates = rates; 626 hw->wiphy->bands[IEEE80211_BAND_2GHZ] = 627 &rt2x00dev->bands[IEEE80211_BAND_2GHZ]; 628 memcpy(&rt2x00dev->bands[IEEE80211_BAND_2GHZ].ht_cap, 629 &spec->ht, sizeof(spec->ht)); 630 } 631 632 /* 633 * Intitialize 802.11a 634 * Rates: OFDM. 635 * Channels: OFDM, UNII, HiperLAN2. 636 */ 637 if (spec->supported_bands & SUPPORT_BAND_5GHZ) { 638 rt2x00dev->bands[IEEE80211_BAND_5GHZ].n_channels = 639 spec->num_channels - 14; 640 rt2x00dev->bands[IEEE80211_BAND_5GHZ].n_bitrates = 641 num_rates - 4; 642 rt2x00dev->bands[IEEE80211_BAND_5GHZ].channels = &channels[14]; 643 rt2x00dev->bands[IEEE80211_BAND_5GHZ].bitrates = &rates[4]; 644 hw->wiphy->bands[IEEE80211_BAND_5GHZ] = 645 &rt2x00dev->bands[IEEE80211_BAND_5GHZ]; 646 memcpy(&rt2x00dev->bands[IEEE80211_BAND_5GHZ].ht_cap, 647 &spec->ht, sizeof(spec->ht)); 648 } 649 650 return 0; 651 652 exit_free_channels: 653 kfree(channels); 654 ERROR(rt2x00dev, "Allocation ieee80211 modes failed.\n"); 655 return -ENOMEM; 656} 657 658static void rt2x00lib_remove_hw(struct rt2x00_dev *rt2x00dev) 659{ 660 if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags)) 661 ieee80211_unregister_hw(rt2x00dev->hw); 662 663 if (likely(rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ])) { 664 kfree(rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ]->channels); 665 kfree(rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ]->bitrates); 666 rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = NULL; 667 rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = NULL; 668 } 669 670 kfree(rt2x00dev->spec.channels_info); 671} 672 673static int rt2x00lib_probe_hw(struct rt2x00_dev *rt2x00dev) 674{ 675 struct hw_mode_spec *spec = &rt2x00dev->spec; 676 int status; 677 678 if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags)) 679 return 0; 680 681 /* 682 * Initialize HW modes. 683 */ 684 status = rt2x00lib_probe_hw_modes(rt2x00dev, spec); 685 if (status) 686 return status; 687 688 /* 689 * Initialize HW fields. 690 */ 691 rt2x00dev->hw->queues = rt2x00dev->ops->tx_queues; 692 693 /* 694 * Register HW. 695 */ 696 status = ieee80211_register_hw(rt2x00dev->hw); 697 if (status) 698 return status; 699 700 set_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags); 701 702 return 0; 703} 704 705/* 706 * Initialization/uninitialization handlers. 707 */ 708static void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev) 709{ 710 if (!test_and_clear_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags)) 711 return; 712 713 /* 714 * Unregister extra components. 715 */ 716 rt2x00rfkill_unregister(rt2x00dev); 717 718 /* 719 * Allow the HW to uninitialize. 720 */ 721 rt2x00dev->ops->lib->uninitialize(rt2x00dev); 722 723 /* 724 * Free allocated queue entries. 725 */ 726 rt2x00queue_uninitialize(rt2x00dev); 727} 728 729static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev) 730{ 731 int status; 732 733 if (test_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags)) 734 return 0; 735 736 /* 737 * Allocate all queue entries. 738 */ 739 status = rt2x00queue_initialize(rt2x00dev); 740 if (status) 741 return status; 742 743 /* 744 * Initialize the device. 745 */ 746 status = rt2x00dev->ops->lib->initialize(rt2x00dev); 747 if (status) { 748 rt2x00queue_uninitialize(rt2x00dev); 749 return status; 750 } 751 752 set_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags); 753 754 /* 755 * Register the extra components. 756 */ 757 rt2x00rfkill_register(rt2x00dev); 758 759 return 0; 760} 761 762int rt2x00lib_start(struct rt2x00_dev *rt2x00dev) 763{ 764 int retval; 765 766 if (test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags)) 767 return 0; 768 769 /* 770 * If this is the first interface which is added, 771 * we should load the firmware now. 772 */ 773 retval = rt2x00lib_load_firmware(rt2x00dev); 774 if (retval) 775 return retval; 776 777 /* 778 * Initialize the device. 779 */ 780 retval = rt2x00lib_initialize(rt2x00dev); 781 if (retval) 782 return retval; 783 784 rt2x00dev->intf_ap_count = 0; 785 rt2x00dev->intf_sta_count = 0; 786 rt2x00dev->intf_associated = 0; 787 788 set_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags); 789 790 return 0; 791} 792 793void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev) 794{ 795 if (!test_and_clear_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags)) 796 return; 797 798 /* 799 * Perhaps we can add something smarter here, 800 * but for now just disabling the radio should do. 801 */ 802 rt2x00lib_disable_radio(rt2x00dev); 803 804 rt2x00dev->intf_ap_count = 0; 805 rt2x00dev->intf_sta_count = 0; 806 rt2x00dev->intf_associated = 0; 807} 808 809/* 810 * driver allocation handlers. 811 */ 812int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev) 813{ 814 int retval = -ENOMEM; 815 816 mutex_init(&rt2x00dev->csr_mutex); 817 818 /* 819 * Make room for rt2x00_intf inside the per-interface 820 * structure ieee80211_vif. 821 */ 822 rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf); 823 824 /* 825 * Determine which operating modes are supported, all modes 826 * which require beaconing, depend on the availability of 827 * beacon entries. 828 */ 829 rt2x00dev->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION); 830 if (rt2x00dev->ops->bcn->entry_num > 0) 831 rt2x00dev->hw->wiphy->interface_modes |= 832 BIT(NL80211_IFTYPE_ADHOC) | 833 BIT(NL80211_IFTYPE_AP) | 834 BIT(NL80211_IFTYPE_MESH_POINT) | 835 BIT(NL80211_IFTYPE_WDS); 836 837 /* 838 * Let the driver probe the device to detect the capabilities. 839 */ 840 retval = rt2x00dev->ops->lib->probe_hw(rt2x00dev); 841 if (retval) { 842 ERROR(rt2x00dev, "Failed to allocate device.\n"); 843 goto exit; 844 } 845 846 /* 847 * Initialize configuration work. 848 */ 849 INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled); 850 INIT_WORK(&rt2x00dev->filter_work, rt2x00lib_packetfilter_scheduled); 851 852 /* 853 * Allocate queue array. 854 */ 855 retval = rt2x00queue_allocate(rt2x00dev); 856 if (retval) 857 goto exit; 858 859 /* 860 * Initialize ieee80211 structure. 861 */ 862 retval = rt2x00lib_probe_hw(rt2x00dev); 863 if (retval) { 864 ERROR(rt2x00dev, "Failed to initialize hw.\n"); 865 goto exit; 866 } 867 868 /* 869 * Register extra components. 870 */ 871 rt2x00link_register(rt2x00dev); 872 rt2x00leds_register(rt2x00dev); 873 rt2x00rfkill_allocate(rt2x00dev); 874 rt2x00debug_register(rt2x00dev); 875 876 set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); 877 878 return 0; 879 880exit: 881 rt2x00lib_remove_dev(rt2x00dev); 882 883 return retval; 884} 885EXPORT_SYMBOL_GPL(rt2x00lib_probe_dev); 886 887void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev) 888{ 889 clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); 890 891 /* 892 * Disable radio. 893 */ 894 rt2x00lib_disable_radio(rt2x00dev); 895 896 /* 897 * Uninitialize device. 898 */ 899 rt2x00lib_uninitialize(rt2x00dev); 900 901 /* 902 * Free extra components 903 */ 904 rt2x00debug_deregister(rt2x00dev); 905 rt2x00rfkill_free(rt2x00dev); 906 rt2x00leds_unregister(rt2x00dev); 907 908 /* 909 * Free ieee80211_hw memory. 910 */ 911 rt2x00lib_remove_hw(rt2x00dev); 912 913 /* 914 * Free firmware image. 915 */ 916 rt2x00lib_free_firmware(rt2x00dev); 917 918 /* 919 * Free queue structures. 920 */ 921 rt2x00queue_free(rt2x00dev); 922} 923EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev); 924 925/* 926 * Device state handlers 927 */ 928#ifdef CONFIG_PM 929int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state) 930{ 931 NOTICE(rt2x00dev, "Going to sleep.\n"); 932 933 /* 934 * Prevent mac80211 from accessing driver while suspended. 935 */ 936 if (!test_and_clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) 937 return 0; 938 939 /* 940 * Cleanup as much as possible. 941 */ 942 rt2x00lib_uninitialize(rt2x00dev); 943 944 /* 945 * Suspend/disable extra components. 946 */ 947 rt2x00leds_suspend(rt2x00dev); 948 rt2x00debug_deregister(rt2x00dev); 949 950 /* 951 * Set device mode to sleep for power management, 952 * on some hardware this call seems to consistently fail. 953 * From the specifications it is hard to tell why it fails, 954 * and if this is a "bad thing". 955 * Overall it is safe to just ignore the failure and 956 * continue suspending. The only downside is that the 957 * device will not be in optimal power save mode, but with 958 * the radio and the other components already disabled the 959 * device is as good as disabled. 960 */ 961 if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_SLEEP)) 962 WARNING(rt2x00dev, "Device failed to enter sleep state, " 963 "continue suspending.\n"); 964 965 return 0; 966} 967EXPORT_SYMBOL_GPL(rt2x00lib_suspend); 968 969int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev) 970{ 971 NOTICE(rt2x00dev, "Waking up.\n"); 972 973 /* 974 * Restore/enable extra components. 975 */ 976 rt2x00debug_register(rt2x00dev); 977 rt2x00leds_resume(rt2x00dev); 978 979 /* 980 * We are ready again to receive requests from mac80211. 981 */ 982 set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); 983 984 return 0; 985} 986EXPORT_SYMBOL_GPL(rt2x00lib_resume); 987#endif /* CONFIG_PM */ 988 989/* 990 * rt2x00lib module information. 991 */ 992MODULE_AUTHOR(DRV_PROJECT); 993MODULE_VERSION(DRV_VERSION); 994MODULE_DESCRIPTION("rt2x00 library"); 995MODULE_LICENSE("GPL");