aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c102
1 files changed, 50 insertions, 52 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 09a4d1700952..ecf5c9b90089 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -510,76 +510,74 @@ void iwl_set_rxon_hwcrypto(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
510} 510}
511EXPORT_SYMBOL(iwl_set_rxon_hwcrypto); 511EXPORT_SYMBOL(iwl_set_rxon_hwcrypto);
512 512
513/** 513/* validate RXON structure is valid */
514 * iwl_check_rxon_cmd - validate RXON structure is valid
515 *
516 * NOTE: This is really only useful during development and can eventually
517 * be #ifdef'd out once the driver is stable and folks aren't actively
518 * making changes
519 */
520int iwl_check_rxon_cmd(struct iwl_priv *priv, struct iwl_rxon_context *ctx) 514int iwl_check_rxon_cmd(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
521{ 515{
522 int error = 0;
523 int counter = 1;
524 struct iwl_rxon_cmd *rxon = &ctx->staging; 516 struct iwl_rxon_cmd *rxon = &ctx->staging;
517 bool error = false;
525 518
526 if (rxon->flags & RXON_FLG_BAND_24G_MSK) { 519 if (rxon->flags & RXON_FLG_BAND_24G_MSK) {
527 error |= le32_to_cpu(rxon->flags & 520 if (rxon->flags & RXON_FLG_TGJ_NARROW_BAND_MSK) {
528 (RXON_FLG_TGJ_NARROW_BAND_MSK | 521 IWL_WARN(priv, "check 2.4G: wrong narrow\n");
529 RXON_FLG_RADAR_DETECT_MSK)); 522 error = true;
530 if (error) 523 }
531 IWL_WARN(priv, "check 24G fields %d | %d\n", 524 if (rxon->flags & RXON_FLG_RADAR_DETECT_MSK) {
532 counter++, error); 525 IWL_WARN(priv, "check 2.4G: wrong radar\n");
526 error = true;
527 }
533 } else { 528 } else {
534 error |= (rxon->flags & RXON_FLG_SHORT_SLOT_MSK) ? 529 if (!(rxon->flags & RXON_FLG_SHORT_SLOT_MSK)) {
535 0 : le32_to_cpu(RXON_FLG_SHORT_SLOT_MSK); 530 IWL_WARN(priv, "check 5.2G: not short slot!\n");
536 if (error) 531 error = true;
537 IWL_WARN(priv, "check 52 fields %d | %d\n", 532 }
538 counter++, error); 533 if (rxon->flags & RXON_FLG_CCK_MSK) {
539 error |= le32_to_cpu(rxon->flags & RXON_FLG_CCK_MSK); 534 IWL_WARN(priv, "check 5.2G: CCK!\n");
540 if (error) 535 error = true;
541 IWL_WARN(priv, "check 52 CCK %d | %d\n", 536 }
542 counter++, error); 537 }
543 } 538 if ((rxon->node_addr[0] | rxon->bssid_addr[0]) & 0x1) {
544 error |= (rxon->node_addr[0] | rxon->bssid_addr[0]) & 0x1; 539 IWL_WARN(priv, "mac/bssid mcast!\n");
545 if (error) 540 error = true;
546 IWL_WARN(priv, "check mac addr %d | %d\n", counter++, error); 541 }
547 542
548 /* make sure basic rates 6Mbps and 1Mbps are supported */ 543 /* make sure basic rates 6Mbps and 1Mbps are supported */
549 error |= (((rxon->ofdm_basic_rates & IWL_RATE_6M_MASK) == 0) && 544 if ((rxon->ofdm_basic_rates & IWL_RATE_6M_MASK) == 0 &&
550 ((rxon->cck_basic_rates & IWL_RATE_1M_MASK) == 0)); 545 (rxon->cck_basic_rates & IWL_RATE_1M_MASK) == 0) {
551 if (error) 546 IWL_WARN(priv, "neither 1 nor 6 are basic\n");
552 IWL_WARN(priv, "check basic rate %d | %d\n", counter++, error); 547 error = true;
548 }
553 549
554 error |= (le16_to_cpu(rxon->assoc_id) > 2007); 550 if (le16_to_cpu(rxon->assoc_id) > 2007) {
555 if (error) 551 IWL_WARN(priv, "aid > 2007\n");
556 IWL_WARN(priv, "check assoc id %d | %d\n", counter++, error); 552 error = true;
553 }
557 554
558 error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK)) 555 if ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK))
559 == (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK)); 556 == (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK)) {
560 if (error) 557 IWL_WARN(priv, "CCK and short slot\n");
561 IWL_WARN(priv, "check CCK and short slot %d | %d\n", 558 error = true;
562 counter++, error); 559 }
563 560
564 error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK)) 561 if ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK))
565 == (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK)); 562 == (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK)) {
566 if (error) 563 IWL_WARN(priv, "CCK and auto detect");
567 IWL_WARN(priv, "check CCK & auto detect %d | %d\n", 564 error = true;
568 counter++, error); 565 }
569 566
570 error |= ((rxon->flags & (RXON_FLG_AUTO_DETECT_MSK | 567 if ((rxon->flags & (RXON_FLG_AUTO_DETECT_MSK |
571 RXON_FLG_TGG_PROTECT_MSK)) == RXON_FLG_TGG_PROTECT_MSK); 568 RXON_FLG_TGG_PROTECT_MSK)) ==
572 if (error) 569 RXON_FLG_TGG_PROTECT_MSK) {
573 IWL_WARN(priv, "check TGG and auto detect %d | %d\n", 570 IWL_WARN(priv, "TGg but no auto-detect\n");
574 counter++, error); 571 error = true;
572 }
575 573
576 if (error) 574 if (error)
577 IWL_WARN(priv, "Tuning to channel %d\n", 575 IWL_WARN(priv, "Tuning to channel %d\n",
578 le16_to_cpu(rxon->channel)); 576 le16_to_cpu(rxon->channel));
579 577
580 if (error) { 578 if (error) {
581 IWL_ERR(priv, "Not a valid iwl_rxon_assoc_cmd field values\n"); 579 IWL_ERR(priv, "Invalid RXON\n");
582 return -1; 580 return -EINVAL;
583 } 581 }
584 return 0; 582 return 0;
585} 583}