iwl-core.h 7.3 KB
Newer Older
T
Tomas Winkler 已提交
1 2 3 4 5 6 7
/******************************************************************************
 *
 * This file is provided under a dual BSD/GPLv2 license.  When using or
 * redistributing this file, you may do so under either license.
 *
 * GPL LICENSE SUMMARY
 *
W
Wey-Yi Guy 已提交
8
 * Copyright(c) 2008 - 2012 Intel Corporation. All rights reserved.
T
Tomas Winkler 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
 * USA
 *
 * The full GNU General Public License is included in this distribution
 * in the file called LICENSE.GPL.
 *
 * Contact Information:
28
 *  Intel Linux Wireless <ilw@linux.intel.com>
T
Tomas Winkler 已提交
29 30 31 32
 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
 *
 * BSD LICENSE
 *
W
Wey-Yi Guy 已提交
33
 * Copyright(c) 2005 - 2012 Intel Corporation. All rights reserved.
T
Tomas Winkler 已提交
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  * Neither the name Intel Corporation nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *****************************************************************************/

#ifndef __iwl_core_h__
#define __iwl_core_h__

J
Johannes Berg 已提交
66
#include "iwl-dev.h"
67
#include "iwl-io.h"
J
Johannes Berg 已提交
68

69 70 71 72 73 74
/************************
 * forward declarations *
 ************************/
struct iwl_host_cmd;
struct iwl_cmd;

75 76
#define TIME_UNIT		1024

77 78 79 80
/***************************
 *   L i b                 *
 ***************************/

W
Wey-Yi Guy 已提交
81
void iwl_set_rxon_channel(struct iwl_priv *priv, struct ieee80211_channel *ch,
82
			 struct iwl_rxon_context *ctx);
83
void iwl_set_flags_for_band(struct iwl_priv *priv,
84
			    struct iwl_rxon_context *ctx,
85 86
			    enum ieee80211_band band,
			    struct ieee80211_vif *vif);
J
Johannes Berg 已提交
87
void iwl_set_rxon_ht(struct iwl_priv *priv, struct iwl_ht_config *ht_conf);
88
void iwl_connection_init_rx_config(struct iwl_priv *priv,
89
				   struct iwl_rxon_context *ctx);
90
void iwl_set_rate(struct iwl_priv *priv);
91
int iwl_cmd_echo_test(struct iwl_priv *priv);
92 93 94 95 96 97 98
#ifdef CONFIG_IWLWIFI_DEBUGFS
int iwl_alloc_traffic_mem(struct iwl_priv *priv);
void iwl_free_traffic_mem(struct iwl_priv *priv);
void iwl_dbg_log_tx_data_frame(struct iwl_priv *priv,
				u16 length, struct ieee80211_hdr *header);
void iwl_dbg_log_rx_data_frame(struct iwl_priv *priv,
				u16 length, struct ieee80211_hdr *header);
99 100
const char *get_mgmt_string(int cmd);
const char *get_ctrl_string(int cmd);
101
void iwl_clear_traffic_stats(struct iwl_priv *priv);
102 103
void iwl_update_stats(struct iwl_priv *priv, bool is_tx, __le16 fc,
		      u16 len);
104 105
void iwl_reset_traffic_log(struct iwl_priv *priv);

106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
#else
static inline int iwl_alloc_traffic_mem(struct iwl_priv *priv)
{
	return 0;
}
static inline void iwl_free_traffic_mem(struct iwl_priv *priv)
{
}
static inline void iwl_reset_traffic_log(struct iwl_priv *priv)
{
}
static inline void iwl_dbg_log_tx_data_frame(struct iwl_priv *priv,
		      u16 length, struct ieee80211_hdr *header)
{
}
static inline void iwl_dbg_log_rx_data_frame(struct iwl_priv *priv,
		      u16 length, struct ieee80211_hdr *header)
{
}
125 126 127 128
static inline void iwl_update_stats(struct iwl_priv *priv, bool is_tx,
				    __le16 fc, u16 len)
{
}
129
#endif
A
Abhijeet Kolekar 已提交
130

131 132 133
/*****************************************************
* RX
******************************************************/
134
void iwl_chswitch_done(struct iwl_priv *priv, bool is_success);
135

136 137 138 139 140
/*****************************************************
 * TX power
 ****************************************************/
int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force);

141 142 143
/*******************************************************************************
 * Scanning
 ******************************************************************************/
T
Tomas Winkler 已提交
144
void iwl_init_scan_params(struct iwl_priv *priv);
145
int iwl_scan_cancel(struct iwl_priv *priv);
146
void iwl_scan_cancel_timeout(struct iwl_priv *priv, unsigned long ms);
147
void iwl_force_scan_end(struct iwl_priv *priv);
J
Johannes Berg 已提交
148
void iwl_internal_short_hw_scan(struct iwl_priv *priv);
149 150
void iwl_setup_rx_scan_handlers(struct iwl_priv *priv);
void iwl_setup_scan_deferred_work(struct iwl_priv *priv);
151
void iwl_cancel_scan_deferred_work(struct iwl_priv *priv);
J
Johannes Berg 已提交
152 153 154 155
int __must_check iwl_scan_initiate(struct iwl_priv *priv,
				   struct ieee80211_vif *vif,
				   enum iwl_scan_type scan_type,
				   enum ieee80211_band band);
156

S
Samuel Ortiz 已提交
157 158 159 160 161 162
/* For faster active scanning, scan will move to the next channel if fewer than
 * PLCP_QUIET_THRESH packets are heard on this channel within
 * ACTIVE_QUIET_TIME after sending probe request.  This shortens the dwell
 * time if it's a quiet channel (nothing responded to our probe, and there's
 * no other traffic).
 * Disable "quiet" feature by setting PLCP_QUIET_THRESH to 0. */
163 164
#define IWL_ACTIVE_QUIET_TIME       cpu_to_le16(10)  /* msec */
#define IWL_PLCP_QUIET_THRESH       cpu_to_le16(1)  /* packets */
S
Samuel Ortiz 已提交
165

166
#define IWL_SCAN_CHECK_WATCHDOG		(HZ * 7)
S
Samuel Ortiz 已提交
167

168 169 170 171
/* traffic log definitions */
#define IWL_TRAFFIC_ENTRIES	(256)
#define IWL_TRAFFIC_ENTRY_SIZE  (64)

172 173 174 175
/*****************************************************
 *   S e n d i n g     H o s t     C o m m a n d s   *
 *****************************************************/

176
extern void iwl_send_bt_config(struct iwl_priv *priv);
177 178
extern int iwl_send_statistics_request(struct iwl_priv *priv,
				       u8 flags, bool clear);
179

180 181 182 183 184
static inline const struct ieee80211_supported_band *iwl_get_hw_mode(
			struct iwl_priv *priv, enum ieee80211_band band)
{
	return priv->hw->wiphy->bands[band];
}
185

186 187
static inline bool iwl_advanced_bt_coexist(struct iwl_priv *priv)
{
188 189
	return cfg(priv)->bt_params &&
	       cfg(priv)->bt_params->advanced_bt_coexist;
190 191
}

192
extern bool bt_siso_mode;
193

T
Tomas Winkler 已提交
194
#endif /* __iwl_core_h__ */