• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
29 #include <linux/kernel.h>
30 #include <net/mac80211.h>
31 #include "iwl-dev.h"
32 #include "iwl-debug.h"
33 #include "iwl-commands.h"
34 
35 
36 /**
37  * iwl_check_rxon_cmd - validate RXON structure is valid
38  *
39  * NOTE:  This is really only useful during development and can eventually
40  * be #ifdef'd out once the driver is stable and folks aren't actively
41  * making changes
42  */
iwl_agn_check_rxon_cmd(struct iwl_rxon_cmd * rxon)43 int iwl_agn_check_rxon_cmd(struct iwl_rxon_cmd *rxon)
44 {
45 	int error = 0;
46 	int counter = 1;
47 
48 	if (rxon->flags & RXON_FLG_BAND_24G_MSK) {
49 		error |= le32_to_cpu(rxon->flags &
50 				(RXON_FLG_TGJ_NARROW_BAND_MSK |
51 				 RXON_FLG_RADAR_DETECT_MSK));
52 		if (error)
53 			IWL_WARNING("check 24G fields %d | %d\n",
54 				    counter++, error);
55 	} else {
56 		error |= (rxon->flags & RXON_FLG_SHORT_SLOT_MSK) ?
57 				0 : le32_to_cpu(RXON_FLG_SHORT_SLOT_MSK);
58 		if (error)
59 			IWL_WARNING("check 52 fields %d | %d\n",
60 				    counter++, error);
61 		error |= le32_to_cpu(rxon->flags & RXON_FLG_CCK_MSK);
62 		if (error)
63 			IWL_WARNING("check 52 CCK %d | %d\n",
64 				    counter++, error);
65 	}
66 	error |= (rxon->node_addr[0] | rxon->bssid_addr[0]) & 0x1;
67 	if (error)
68 		IWL_WARNING("check mac addr %d | %d\n", counter++, error);
69 
70 	/* make sure basic rates 6Mbps and 1Mbps are supported */
71 	error |= (((rxon->ofdm_basic_rates & IWL_RATE_6M_MASK) == 0) &&
72 		  ((rxon->cck_basic_rates & IWL_RATE_1M_MASK) == 0));
73 	if (error)
74 		IWL_WARNING("check basic rate %d | %d\n", counter++, error);
75 
76 	error |= (le16_to_cpu(rxon->assoc_id) > 2007);
77 	if (error)
78 		IWL_WARNING("check assoc id %d | %d\n", counter++, error);
79 
80 	error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK))
81 			== (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK));
82 	if (error)
83 		IWL_WARNING("check CCK and short slot %d | %d\n",
84 			    counter++, error);
85 
86 	error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK))
87 			== (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK));
88 	if (error)
89 		IWL_WARNING("check CCK & auto detect %d | %d\n",
90 			    counter++, error);
91 
92 	error |= ((rxon->flags & (RXON_FLG_AUTO_DETECT_MSK |
93 			RXON_FLG_TGG_PROTECT_MSK)) == RXON_FLG_TGG_PROTECT_MSK);
94 	if (error)
95 		IWL_WARNING("check TGG and auto detect %d | %d\n",
96 			    counter++, error);
97 
98 	if (error)
99 		IWL_WARNING("Tuning to channel %d\n",
100 			    le16_to_cpu(rxon->channel));
101 
102 	if (error) {
103 		IWL_ERROR("Not a valid iwl4965_rxon_assoc_cmd field values\n");
104 		return -1;
105 	}
106 	return 0;
107 }
108 
109