iwl-agn-hcmd-check.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /******************************************************************************
  2. *
  3. * GPL LICENSE SUMMARY
  4. *
  5. * Copyright(c) 2008 Intel Corporation. All rights reserved.
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of version 2 of the GNU General Public License as
  9. * published by the Free Software Foundation.
  10. *
  11. * This program is distributed in the hope that it will be useful, but
  12. * WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
  19. * USA
  20. *
  21. * The full GNU General Public License is included in this distribution
  22. * in the file called LICENSE.GPL.
  23. *
  24. * Contact Information:
  25. * Intel Linux Wireless <ilw@linux.intel.com>
  26. * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  27. *****************************************************************************/
  28. #include <linux/kernel.h>
  29. #include <net/mac80211.h>
  30. #include "iwl-dev.h"
  31. #include "iwl-debug.h"
  32. #include "iwl-commands.h"
  33. /**
  34. * iwl_check_rxon_cmd - validate RXON structure is valid
  35. *
  36. * NOTE: This is really only useful during development and can eventually
  37. * be #ifdef'd out once the driver is stable and folks aren't actively
  38. * making changes
  39. */
  40. int iwl_agn_check_rxon_cmd(struct iwl_rxon_cmd *rxon)
  41. {
  42. int error = 0;
  43. int counter = 1;
  44. if (rxon->flags & RXON_FLG_BAND_24G_MSK) {
  45. error |= le32_to_cpu(rxon->flags &
  46. (RXON_FLG_TGJ_NARROW_BAND_MSK |
  47. RXON_FLG_RADAR_DETECT_MSK));
  48. if (error)
  49. IWL_WARNING("check 24G fields %d | %d\n",
  50. counter++, error);
  51. } else {
  52. error |= (rxon->flags & RXON_FLG_SHORT_SLOT_MSK) ?
  53. 0 : le32_to_cpu(RXON_FLG_SHORT_SLOT_MSK);
  54. if (error)
  55. IWL_WARNING("check 52 fields %d | %d\n",
  56. counter++, error);
  57. error |= le32_to_cpu(rxon->flags & RXON_FLG_CCK_MSK);
  58. if (error)
  59. IWL_WARNING("check 52 CCK %d | %d\n",
  60. counter++, error);
  61. }
  62. error |= (rxon->node_addr[0] | rxon->bssid_addr[0]) & 0x1;
  63. if (error)
  64. IWL_WARNING("check mac addr %d | %d\n", counter++, error);
  65. /* make sure basic rates 6Mbps and 1Mbps are supported */
  66. error |= (((rxon->ofdm_basic_rates & IWL_RATE_6M_MASK) == 0) &&
  67. ((rxon->cck_basic_rates & IWL_RATE_1M_MASK) == 0));
  68. if (error)
  69. IWL_WARNING("check basic rate %d | %d\n", counter++, error);
  70. error |= (le16_to_cpu(rxon->assoc_id) > 2007);
  71. if (error)
  72. IWL_WARNING("check assoc id %d | %d\n", counter++, error);
  73. error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK))
  74. == (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK));
  75. if (error)
  76. IWL_WARNING("check CCK and short slot %d | %d\n",
  77. counter++, error);
  78. error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK))
  79. == (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK));
  80. if (error)
  81. IWL_WARNING("check CCK & auto detect %d | %d\n",
  82. counter++, error);
  83. error |= ((rxon->flags & (RXON_FLG_AUTO_DETECT_MSK |
  84. RXON_FLG_TGG_PROTECT_MSK)) == RXON_FLG_TGG_PROTECT_MSK);
  85. if (error)
  86. IWL_WARNING("check TGG and auto detect %d | %d\n",
  87. counter++, error);
  88. if (error)
  89. IWL_WARNING("Tuning to channel %d\n",
  90. le16_to_cpu(rxon->channel));
  91. if (error) {
  92. IWL_ERROR("Not a valid iwl4965_rxon_assoc_cmd field values\n");
  93. return -1;
  94. }
  95. return 0;
  96. }