1/******************************************************************************
2 *
3 * This file is provided under a dual BSD/GPLv2 license.  When using or
4 * redistributing this file, you may do so under either license.
5 *
6 * GPL LICENSE SUMMARY
7 *
8 * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved.
9 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of version 2 of the GNU General Public License as
13 * published by the Free Software Foundation.
14 *
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
23 * USA
24 *
25 * The full GNU General Public License is included in this distribution
26 * in the file called COPYING.
27 *
28 * Contact Information:
29 *  Intel Linux Wireless <ilw@linux.intel.com>
30 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
31 *
32 * BSD LICENSE
33 *
34 * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved.
35 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
36 * All rights reserved.
37 *
38 * Redistribution and use in source and binary forms, with or without
39 * modification, are permitted provided that the following conditions
40 * are met:
41 *
42 *  * Redistributions of source code must retain the above copyright
43 *    notice, this list of conditions and the following disclaimer.
44 *  * Redistributions in binary form must reproduce the above copyright
45 *    notice, this list of conditions and the following disclaimer in
46 *    the documentation and/or other materials provided with the
47 *    distribution.
48 *  * Neither the name Intel Corporation nor the names of its
49 *    contributors may be used to endorse or promote products derived
50 *    from this software without specific prior written permission.
51 *
52 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
53 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
54 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
55 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
56 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
57 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
58 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
59 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
60 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
61 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
62 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
63 *
64 *****************************************************************************/
65#include <linux/completion.h>
66#include <linux/dma-mapping.h>
67#include <linux/firmware.h>
68#include <linux/module.h>
69#include <linux/vmalloc.h>
70
71#include "iwl-drv.h"
72#include "iwl-csr.h"
73#include "iwl-debug.h"
74#include "iwl-trans.h"
75#include "iwl-op-mode.h"
76#include "iwl-agn-hw.h"
77#include "iwl-fw.h"
78#include "iwl-config.h"
79#include "iwl-modparams.h"
80
81/******************************************************************************
82 *
83 * module boiler plate
84 *
85 ******************************************************************************/
86
87#define DRV_DESCRIPTION	"Intel(R) Wireless WiFi driver for Linux"
88MODULE_DESCRIPTION(DRV_DESCRIPTION);
89MODULE_AUTHOR(DRV_COPYRIGHT " " DRV_AUTHOR);
90MODULE_LICENSE("GPL");
91
92#ifdef CONFIG_IWLWIFI_DEBUGFS
93static struct dentry *iwl_dbgfs_root;
94#endif
95
96/**
97 * struct iwl_drv - drv common data
98 * @list: list of drv structures using this opmode
99 * @fw: the iwl_fw structure
100 * @op_mode: the running op_mode
101 * @trans: transport layer
102 * @dev: for debug prints only
103 * @cfg: configuration struct
104 * @fw_index: firmware revision to try loading
105 * @firmware_name: composite filename of ucode file to load
106 * @request_firmware_complete: the firmware has been obtained from user space
107 */
108struct iwl_drv {
109	struct list_head list;
110	struct iwl_fw fw;
111
112	struct iwl_op_mode *op_mode;
113	struct iwl_trans *trans;
114	struct device *dev;
115	const struct iwl_cfg *cfg;
116
117	int fw_index;                   /* firmware we're trying to load */
118	char firmware_name[32];         /* name of firmware file to load */
119
120	struct completion request_firmware_complete;
121
122#ifdef CONFIG_IWLWIFI_DEBUGFS
123	struct dentry *dbgfs_drv;
124	struct dentry *dbgfs_trans;
125	struct dentry *dbgfs_op_mode;
126#endif
127};
128
129enum {
130	DVM_OP_MODE =	0,
131	MVM_OP_MODE =	1,
132};
133
134/* Protects the table contents, i.e. the ops pointer & drv list */
135static struct mutex iwlwifi_opmode_table_mtx;
136static struct iwlwifi_opmode_table {
137	const char *name;			/* name: iwldvm, iwlmvm, etc */
138	const struct iwl_op_mode_ops *ops;	/* pointer to op_mode ops */
139	struct list_head drv;		/* list of devices using this op_mode */
140} iwlwifi_opmode_table[] = {		/* ops set when driver is initialized */
141	[DVM_OP_MODE] = { .name = "iwldvm", .ops = NULL },
142	[MVM_OP_MODE] = { .name = "iwlmvm", .ops = NULL },
143};
144
145#define IWL_DEFAULT_SCAN_CHANNELS 40
146
147/*
148 * struct fw_sec: Just for the image parsing process.
149 * For the fw storage we are using struct fw_desc.
150 */
151struct fw_sec {
152	const void *data;		/* the sec data */
153	size_t size;			/* section size */
154	u32 offset;			/* offset of writing in the device */
155};
156
157static void iwl_free_fw_desc(struct iwl_drv *drv, struct fw_desc *desc)
158{
159	vfree(desc->data);
160	desc->data = NULL;
161	desc->len = 0;
162}
163
164static void iwl_free_fw_img(struct iwl_drv *drv, struct fw_img *img)
165{
166	int i;
167	for (i = 0; i < IWL_UCODE_SECTION_MAX; i++)
168		iwl_free_fw_desc(drv, &img->sec[i]);
169}
170
171static void iwl_dealloc_ucode(struct iwl_drv *drv)
172{
173	int i;
174
175	kfree(drv->fw.dbg_dest_tlv);
176	for (i = 0; i < ARRAY_SIZE(drv->fw.dbg_conf_tlv); i++)
177		kfree(drv->fw.dbg_conf_tlv[i]);
178	for (i = 0; i < ARRAY_SIZE(drv->fw.dbg_trigger_tlv); i++)
179		kfree(drv->fw.dbg_trigger_tlv[i]);
180
181	for (i = 0; i < IWL_UCODE_TYPE_MAX; i++)
182		iwl_free_fw_img(drv, drv->fw.img + i);
183}
184
185static int iwl_alloc_fw_desc(struct iwl_drv *drv, struct fw_desc *desc,
186			     struct fw_sec *sec)
187{
188	void *data;
189
190	desc->data = NULL;
191
192	if (!sec || !sec->size)
193		return -EINVAL;
194
195	data = vmalloc(sec->size);
196	if (!data)
197		return -ENOMEM;
198
199	desc->len = sec->size;
200	desc->offset = sec->offset;
201	memcpy(data, sec->data, desc->len);
202	desc->data = data;
203
204	return 0;
205}
206
207static void iwl_req_fw_callback(const struct firmware *ucode_raw,
208				void *context);
209
210#define UCODE_EXPERIMENTAL_INDEX	100
211#define UCODE_EXPERIMENTAL_TAG		"exp"
212
213static int iwl_request_firmware(struct iwl_drv *drv, bool first)
214{
215	const char *name_pre = drv->cfg->fw_name_pre;
216	char tag[8];
217
218	if (first) {
219#ifdef CONFIG_IWLWIFI_DEBUG_EXPERIMENTAL_UCODE
220		drv->fw_index = UCODE_EXPERIMENTAL_INDEX;
221		strcpy(tag, UCODE_EXPERIMENTAL_TAG);
222	} else if (drv->fw_index == UCODE_EXPERIMENTAL_INDEX) {
223#endif
224		drv->fw_index = drv->cfg->ucode_api_max;
225		sprintf(tag, "%d", drv->fw_index);
226	} else {
227		drv->fw_index--;
228		sprintf(tag, "%d", drv->fw_index);
229	}
230
231	if (drv->fw_index < drv->cfg->ucode_api_min) {
232		IWL_ERR(drv, "no suitable firmware found!\n");
233		return -ENOENT;
234	}
235
236	snprintf(drv->firmware_name, sizeof(drv->firmware_name), "%s%s.ucode",
237		 name_pre, tag);
238
239	/*
240	 * Starting 8000B - FW name format has changed. This overwrites the
241	 * previous name and uses the new format.
242	 */
243	if (drv->trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) {
244		char rev_step = 'A' + CSR_HW_REV_STEP(drv->trans->hw_rev);
245
246		snprintf(drv->firmware_name, sizeof(drv->firmware_name),
247			 "%s%c-%s.ucode", name_pre, rev_step, tag);
248	}
249
250	IWL_DEBUG_INFO(drv, "attempting to load firmware %s'%s'\n",
251		       (drv->fw_index == UCODE_EXPERIMENTAL_INDEX)
252				? "EXPERIMENTAL " : "",
253		       drv->firmware_name);
254
255	return request_firmware_nowait(THIS_MODULE, 1, drv->firmware_name,
256				       drv->trans->dev,
257				       GFP_KERNEL, drv, iwl_req_fw_callback);
258}
259
260struct fw_img_parsing {
261	struct fw_sec sec[IWL_UCODE_SECTION_MAX];
262	int sec_counter;
263};
264
265/*
266 * struct fw_sec_parsing: to extract fw section and it's offset from tlv
267 */
268struct fw_sec_parsing {
269	__le32 offset;
270	const u8 data[];
271} __packed;
272
273/**
274 * struct iwl_tlv_calib_data - parse the default calib data from TLV
275 *
276 * @ucode_type: the uCode to which the following default calib relates.
277 * @calib: default calibrations.
278 */
279struct iwl_tlv_calib_data {
280	__le32 ucode_type;
281	struct iwl_tlv_calib_ctrl calib;
282} __packed;
283
284struct iwl_firmware_pieces {
285	struct fw_img_parsing img[IWL_UCODE_TYPE_MAX];
286
287	u32 init_evtlog_ptr, init_evtlog_size, init_errlog_ptr;
288	u32 inst_evtlog_ptr, inst_evtlog_size, inst_errlog_ptr;
289
290	/* FW debug data parsed for driver usage */
291	struct iwl_fw_dbg_dest_tlv *dbg_dest_tlv;
292	struct iwl_fw_dbg_conf_tlv *dbg_conf_tlv[FW_DBG_CONF_MAX];
293	size_t dbg_conf_tlv_len[FW_DBG_CONF_MAX];
294	struct iwl_fw_dbg_trigger_tlv *dbg_trigger_tlv[FW_DBG_TRIGGER_MAX];
295	size_t dbg_trigger_tlv_len[FW_DBG_TRIGGER_MAX];
296};
297
298/*
299 * These functions are just to extract uCode section data from the pieces
300 * structure.
301 */
302static struct fw_sec *get_sec(struct iwl_firmware_pieces *pieces,
303			      enum iwl_ucode_type type,
304			      int  sec)
305{
306	return &pieces->img[type].sec[sec];
307}
308
309static void set_sec_data(struct iwl_firmware_pieces *pieces,
310			 enum iwl_ucode_type type,
311			 int sec,
312			 const void *data)
313{
314	pieces->img[type].sec[sec].data = data;
315}
316
317static void set_sec_size(struct iwl_firmware_pieces *pieces,
318			 enum iwl_ucode_type type,
319			 int sec,
320			 size_t size)
321{
322	pieces->img[type].sec[sec].size = size;
323}
324
325static size_t get_sec_size(struct iwl_firmware_pieces *pieces,
326			   enum iwl_ucode_type type,
327			   int sec)
328{
329	return pieces->img[type].sec[sec].size;
330}
331
332static void set_sec_offset(struct iwl_firmware_pieces *pieces,
333			   enum iwl_ucode_type type,
334			   int sec,
335			   u32 offset)
336{
337	pieces->img[type].sec[sec].offset = offset;
338}
339
340static int iwl_store_cscheme(struct iwl_fw *fw, const u8 *data, const u32 len)
341{
342	int i, j;
343	struct iwl_fw_cscheme_list *l = (struct iwl_fw_cscheme_list *)data;
344	struct iwl_fw_cipher_scheme *fwcs;
345	struct ieee80211_cipher_scheme *cs;
346	u32 cipher;
347
348	if (len < sizeof(*l) ||
349	    len < sizeof(l->size) + l->size * sizeof(l->cs[0]))
350		return -EINVAL;
351
352	for (i = 0, j = 0; i < IWL_UCODE_MAX_CS && i < l->size; i++) {
353		fwcs = &l->cs[j];
354		cipher = le32_to_cpu(fwcs->cipher);
355
356		/* we skip schemes with zero cipher suite selector */
357		if (!cipher)
358			continue;
359
360		cs = &fw->cs[j++];
361		cs->cipher = cipher;
362		cs->iftype = BIT(NL80211_IFTYPE_STATION);
363		cs->hdr_len = fwcs->hdr_len;
364		cs->pn_len = fwcs->pn_len;
365		cs->pn_off = fwcs->pn_off;
366		cs->key_idx_off = fwcs->key_idx_off;
367		cs->key_idx_mask = fwcs->key_idx_mask;
368		cs->key_idx_shift = fwcs->key_idx_shift;
369		cs->mic_len = fwcs->mic_len;
370	}
371
372	return 0;
373}
374
375/*
376 * Gets uCode section from tlv.
377 */
378static int iwl_store_ucode_sec(struct iwl_firmware_pieces *pieces,
379			       const void *data, enum iwl_ucode_type type,
380			       int size)
381{
382	struct fw_img_parsing *img;
383	struct fw_sec *sec;
384	struct fw_sec_parsing *sec_parse;
385
386	if (WARN_ON(!pieces || !data || type >= IWL_UCODE_TYPE_MAX))
387		return -1;
388
389	sec_parse = (struct fw_sec_parsing *)data;
390
391	img = &pieces->img[type];
392	sec = &img->sec[img->sec_counter];
393
394	sec->offset = le32_to_cpu(sec_parse->offset);
395	sec->data = sec_parse->data;
396	sec->size = size - sizeof(sec_parse->offset);
397
398	++img->sec_counter;
399
400	return 0;
401}
402
403static int iwl_set_default_calib(struct iwl_drv *drv, const u8 *data)
404{
405	struct iwl_tlv_calib_data *def_calib =
406					(struct iwl_tlv_calib_data *)data;
407	u32 ucode_type = le32_to_cpu(def_calib->ucode_type);
408	if (ucode_type >= IWL_UCODE_TYPE_MAX) {
409		IWL_ERR(drv, "Wrong ucode_type %u for default calibration.\n",
410			ucode_type);
411		return -EINVAL;
412	}
413	drv->fw.default_calib[ucode_type].flow_trigger =
414		def_calib->calib.flow_trigger;
415	drv->fw.default_calib[ucode_type].event_trigger =
416		def_calib->calib.event_trigger;
417
418	return 0;
419}
420
421static int iwl_set_ucode_api_flags(struct iwl_drv *drv, const u8 *data,
422				   struct iwl_ucode_capabilities *capa)
423{
424	const struct iwl_ucode_api *ucode_api = (void *)data;
425	u32 api_index = le32_to_cpu(ucode_api->api_index);
426
427	if (api_index >= IWL_API_ARRAY_SIZE) {
428		IWL_ERR(drv, "api_index larger than supported by driver\n");
429		return -EINVAL;
430	}
431
432	capa->api[api_index] = le32_to_cpu(ucode_api->api_flags);
433
434	return 0;
435}
436
437static int iwl_set_ucode_capabilities(struct iwl_drv *drv, const u8 *data,
438				      struct iwl_ucode_capabilities *capa)
439{
440	const struct iwl_ucode_capa *ucode_capa = (void *)data;
441	u32 api_index = le32_to_cpu(ucode_capa->api_index);
442
443	if (api_index >= IWL_CAPABILITIES_ARRAY_SIZE) {
444		IWL_ERR(drv, "api_index larger than supported by driver\n");
445		return -EINVAL;
446	}
447
448	capa->capa[api_index] = le32_to_cpu(ucode_capa->api_capa);
449
450	return 0;
451}
452
453static int iwl_parse_v1_v2_firmware(struct iwl_drv *drv,
454				    const struct firmware *ucode_raw,
455				    struct iwl_firmware_pieces *pieces)
456{
457	struct iwl_ucode_header *ucode = (void *)ucode_raw->data;
458	u32 api_ver, hdr_size, build;
459	char buildstr[25];
460	const u8 *src;
461
462	drv->fw.ucode_ver = le32_to_cpu(ucode->ver);
463	api_ver = IWL_UCODE_API(drv->fw.ucode_ver);
464
465	switch (api_ver) {
466	default:
467		hdr_size = 28;
468		if (ucode_raw->size < hdr_size) {
469			IWL_ERR(drv, "File size too small!\n");
470			return -EINVAL;
471		}
472		build = le32_to_cpu(ucode->u.v2.build);
473		set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST,
474			     le32_to_cpu(ucode->u.v2.inst_size));
475		set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA,
476			     le32_to_cpu(ucode->u.v2.data_size));
477		set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST,
478			     le32_to_cpu(ucode->u.v2.init_size));
479		set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA,
480			     le32_to_cpu(ucode->u.v2.init_data_size));
481		src = ucode->u.v2.data;
482		break;
483	case 0:
484	case 1:
485	case 2:
486		hdr_size = 24;
487		if (ucode_raw->size < hdr_size) {
488			IWL_ERR(drv, "File size too small!\n");
489			return -EINVAL;
490		}
491		build = 0;
492		set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST,
493			     le32_to_cpu(ucode->u.v1.inst_size));
494		set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA,
495			     le32_to_cpu(ucode->u.v1.data_size));
496		set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST,
497			     le32_to_cpu(ucode->u.v1.init_size));
498		set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA,
499			     le32_to_cpu(ucode->u.v1.init_data_size));
500		src = ucode->u.v1.data;
501		break;
502	}
503
504	if (build)
505		sprintf(buildstr, " build %u%s", build,
506		       (drv->fw_index == UCODE_EXPERIMENTAL_INDEX)
507				? " (EXP)" : "");
508	else
509		buildstr[0] = '\0';
510
511	snprintf(drv->fw.fw_version,
512		 sizeof(drv->fw.fw_version),
513		 "%u.%u.%u.%u%s",
514		 IWL_UCODE_MAJOR(drv->fw.ucode_ver),
515		 IWL_UCODE_MINOR(drv->fw.ucode_ver),
516		 IWL_UCODE_API(drv->fw.ucode_ver),
517		 IWL_UCODE_SERIAL(drv->fw.ucode_ver),
518		 buildstr);
519
520	/* Verify size of file vs. image size info in file's header */
521
522	if (ucode_raw->size != hdr_size +
523	    get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST) +
524	    get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA) +
525	    get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST) +
526	    get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA)) {
527
528		IWL_ERR(drv,
529			"uCode file size %d does not match expected size\n",
530			(int)ucode_raw->size);
531		return -EINVAL;
532	}
533
534
535	set_sec_data(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST, src);
536	src += get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST);
537	set_sec_offset(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST,
538		       IWLAGN_RTC_INST_LOWER_BOUND);
539	set_sec_data(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA, src);
540	src += get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA);
541	set_sec_offset(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA,
542		       IWLAGN_RTC_DATA_LOWER_BOUND);
543	set_sec_data(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST, src);
544	src += get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST);
545	set_sec_offset(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST,
546		       IWLAGN_RTC_INST_LOWER_BOUND);
547	set_sec_data(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA, src);
548	src += get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA);
549	set_sec_offset(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA,
550		       IWLAGN_RTC_DATA_LOWER_BOUND);
551	return 0;
552}
553
554static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
555				const struct firmware *ucode_raw,
556				struct iwl_firmware_pieces *pieces,
557				struct iwl_ucode_capabilities *capa)
558{
559	struct iwl_tlv_ucode_header *ucode = (void *)ucode_raw->data;
560	struct iwl_ucode_tlv *tlv;
561	size_t len = ucode_raw->size;
562	const u8 *data;
563	u32 tlv_len;
564	enum iwl_ucode_tlv_type tlv_type;
565	const u8 *tlv_data;
566	char buildstr[25];
567	u32 build;
568	int num_of_cpus;
569	bool usniffer_images = false;
570	bool usniffer_req = false;
571
572	if (len < sizeof(*ucode)) {
573		IWL_ERR(drv, "uCode has invalid length: %zd\n", len);
574		return -EINVAL;
575	}
576
577	if (ucode->magic != cpu_to_le32(IWL_TLV_UCODE_MAGIC)) {
578		IWL_ERR(drv, "invalid uCode magic: 0X%x\n",
579			le32_to_cpu(ucode->magic));
580		return -EINVAL;
581	}
582
583	drv->fw.ucode_ver = le32_to_cpu(ucode->ver);
584	memcpy(drv->fw.human_readable, ucode->human_readable,
585	       sizeof(drv->fw.human_readable));
586	build = le32_to_cpu(ucode->build);
587
588	if (build)
589		sprintf(buildstr, " build %u%s", build,
590		       (drv->fw_index == UCODE_EXPERIMENTAL_INDEX)
591				? " (EXP)" : "");
592	else
593		buildstr[0] = '\0';
594
595	snprintf(drv->fw.fw_version,
596		 sizeof(drv->fw.fw_version),
597		 "%u.%u.%u.%u%s",
598		 IWL_UCODE_MAJOR(drv->fw.ucode_ver),
599		 IWL_UCODE_MINOR(drv->fw.ucode_ver),
600		 IWL_UCODE_API(drv->fw.ucode_ver),
601		 IWL_UCODE_SERIAL(drv->fw.ucode_ver),
602		 buildstr);
603
604	data = ucode->data;
605
606	len -= sizeof(*ucode);
607
608	while (len >= sizeof(*tlv)) {
609		len -= sizeof(*tlv);
610		tlv = (void *)data;
611
612		tlv_len = le32_to_cpu(tlv->length);
613		tlv_type = le32_to_cpu(tlv->type);
614		tlv_data = tlv->data;
615
616		if (len < tlv_len) {
617			IWL_ERR(drv, "invalid TLV len: %zd/%u\n",
618				len, tlv_len);
619			return -EINVAL;
620		}
621		len -= ALIGN(tlv_len, 4);
622		data += sizeof(*tlv) + ALIGN(tlv_len, 4);
623
624		switch (tlv_type) {
625		case IWL_UCODE_TLV_INST:
626			set_sec_data(pieces, IWL_UCODE_REGULAR,
627				     IWL_UCODE_SECTION_INST, tlv_data);
628			set_sec_size(pieces, IWL_UCODE_REGULAR,
629				     IWL_UCODE_SECTION_INST, tlv_len);
630			set_sec_offset(pieces, IWL_UCODE_REGULAR,
631				       IWL_UCODE_SECTION_INST,
632				       IWLAGN_RTC_INST_LOWER_BOUND);
633			break;
634		case IWL_UCODE_TLV_DATA:
635			set_sec_data(pieces, IWL_UCODE_REGULAR,
636				     IWL_UCODE_SECTION_DATA, tlv_data);
637			set_sec_size(pieces, IWL_UCODE_REGULAR,
638				     IWL_UCODE_SECTION_DATA, tlv_len);
639			set_sec_offset(pieces, IWL_UCODE_REGULAR,
640				       IWL_UCODE_SECTION_DATA,
641				       IWLAGN_RTC_DATA_LOWER_BOUND);
642			break;
643		case IWL_UCODE_TLV_INIT:
644			set_sec_data(pieces, IWL_UCODE_INIT,
645				     IWL_UCODE_SECTION_INST, tlv_data);
646			set_sec_size(pieces, IWL_UCODE_INIT,
647				     IWL_UCODE_SECTION_INST, tlv_len);
648			set_sec_offset(pieces, IWL_UCODE_INIT,
649				       IWL_UCODE_SECTION_INST,
650				       IWLAGN_RTC_INST_LOWER_BOUND);
651			break;
652		case IWL_UCODE_TLV_INIT_DATA:
653			set_sec_data(pieces, IWL_UCODE_INIT,
654				     IWL_UCODE_SECTION_DATA, tlv_data);
655			set_sec_size(pieces, IWL_UCODE_INIT,
656				     IWL_UCODE_SECTION_DATA, tlv_len);
657			set_sec_offset(pieces, IWL_UCODE_INIT,
658				       IWL_UCODE_SECTION_DATA,
659				       IWLAGN_RTC_DATA_LOWER_BOUND);
660			break;
661		case IWL_UCODE_TLV_BOOT:
662			IWL_ERR(drv, "Found unexpected BOOT ucode\n");
663			break;
664		case IWL_UCODE_TLV_PROBE_MAX_LEN:
665			if (tlv_len != sizeof(u32))
666				goto invalid_tlv_len;
667			capa->max_probe_length =
668					le32_to_cpup((__le32 *)tlv_data);
669			break;
670		case IWL_UCODE_TLV_PAN:
671			if (tlv_len)
672				goto invalid_tlv_len;
673			capa->flags |= IWL_UCODE_TLV_FLAGS_PAN;
674			break;
675		case IWL_UCODE_TLV_FLAGS:
676			/* must be at least one u32 */
677			if (tlv_len < sizeof(u32))
678				goto invalid_tlv_len;
679			/* and a proper number of u32s */
680			if (tlv_len % sizeof(u32))
681				goto invalid_tlv_len;
682			/*
683			 * This driver only reads the first u32 as
684			 * right now no more features are defined,
685			 * if that changes then either the driver
686			 * will not work with the new firmware, or
687			 * it'll not take advantage of new features.
688			 */
689			capa->flags = le32_to_cpup((__le32 *)tlv_data);
690			break;
691		case IWL_UCODE_TLV_API_CHANGES_SET:
692			if (tlv_len != sizeof(struct iwl_ucode_api))
693				goto invalid_tlv_len;
694			if (iwl_set_ucode_api_flags(drv, tlv_data, capa))
695				goto tlv_error;
696			break;
697		case IWL_UCODE_TLV_ENABLED_CAPABILITIES:
698			if (tlv_len != sizeof(struct iwl_ucode_capa))
699				goto invalid_tlv_len;
700			if (iwl_set_ucode_capabilities(drv, tlv_data, capa))
701				goto tlv_error;
702			break;
703		case IWL_UCODE_TLV_INIT_EVTLOG_PTR:
704			if (tlv_len != sizeof(u32))
705				goto invalid_tlv_len;
706			pieces->init_evtlog_ptr =
707					le32_to_cpup((__le32 *)tlv_data);
708			break;
709		case IWL_UCODE_TLV_INIT_EVTLOG_SIZE:
710			if (tlv_len != sizeof(u32))
711				goto invalid_tlv_len;
712			pieces->init_evtlog_size =
713					le32_to_cpup((__le32 *)tlv_data);
714			break;
715		case IWL_UCODE_TLV_INIT_ERRLOG_PTR:
716			if (tlv_len != sizeof(u32))
717				goto invalid_tlv_len;
718			pieces->init_errlog_ptr =
719					le32_to_cpup((__le32 *)tlv_data);
720			break;
721		case IWL_UCODE_TLV_RUNT_EVTLOG_PTR:
722			if (tlv_len != sizeof(u32))
723				goto invalid_tlv_len;
724			pieces->inst_evtlog_ptr =
725					le32_to_cpup((__le32 *)tlv_data);
726			break;
727		case IWL_UCODE_TLV_RUNT_EVTLOG_SIZE:
728			if (tlv_len != sizeof(u32))
729				goto invalid_tlv_len;
730			pieces->inst_evtlog_size =
731					le32_to_cpup((__le32 *)tlv_data);
732			break;
733		case IWL_UCODE_TLV_RUNT_ERRLOG_PTR:
734			if (tlv_len != sizeof(u32))
735				goto invalid_tlv_len;
736			pieces->inst_errlog_ptr =
737					le32_to_cpup((__le32 *)tlv_data);
738			break;
739		case IWL_UCODE_TLV_ENHANCE_SENS_TBL:
740			if (tlv_len)
741				goto invalid_tlv_len;
742			drv->fw.enhance_sensitivity_table = true;
743			break;
744		case IWL_UCODE_TLV_WOWLAN_INST:
745			set_sec_data(pieces, IWL_UCODE_WOWLAN,
746				     IWL_UCODE_SECTION_INST, tlv_data);
747			set_sec_size(pieces, IWL_UCODE_WOWLAN,
748				     IWL_UCODE_SECTION_INST, tlv_len);
749			set_sec_offset(pieces, IWL_UCODE_WOWLAN,
750				       IWL_UCODE_SECTION_INST,
751				       IWLAGN_RTC_INST_LOWER_BOUND);
752			break;
753		case IWL_UCODE_TLV_WOWLAN_DATA:
754			set_sec_data(pieces, IWL_UCODE_WOWLAN,
755				     IWL_UCODE_SECTION_DATA, tlv_data);
756			set_sec_size(pieces, IWL_UCODE_WOWLAN,
757				     IWL_UCODE_SECTION_DATA, tlv_len);
758			set_sec_offset(pieces, IWL_UCODE_WOWLAN,
759				       IWL_UCODE_SECTION_DATA,
760				       IWLAGN_RTC_DATA_LOWER_BOUND);
761			break;
762		case IWL_UCODE_TLV_PHY_CALIBRATION_SIZE:
763			if (tlv_len != sizeof(u32))
764				goto invalid_tlv_len;
765			capa->standard_phy_calibration_size =
766					le32_to_cpup((__le32 *)tlv_data);
767			break;
768		 case IWL_UCODE_TLV_SEC_RT:
769			iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR,
770					    tlv_len);
771			drv->fw.mvm_fw = true;
772			break;
773		case IWL_UCODE_TLV_SEC_INIT:
774			iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT,
775					    tlv_len);
776			drv->fw.mvm_fw = true;
777			break;
778		case IWL_UCODE_TLV_SEC_WOWLAN:
779			iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN,
780					    tlv_len);
781			drv->fw.mvm_fw = true;
782			break;
783		case IWL_UCODE_TLV_DEF_CALIB:
784			if (tlv_len != sizeof(struct iwl_tlv_calib_data))
785				goto invalid_tlv_len;
786			if (iwl_set_default_calib(drv, tlv_data))
787				goto tlv_error;
788			break;
789		case IWL_UCODE_TLV_PHY_SKU:
790			if (tlv_len != sizeof(u32))
791				goto invalid_tlv_len;
792			drv->fw.phy_config = le32_to_cpup((__le32 *)tlv_data);
793			drv->fw.valid_tx_ant = (drv->fw.phy_config &
794						FW_PHY_CFG_TX_CHAIN) >>
795						FW_PHY_CFG_TX_CHAIN_POS;
796			drv->fw.valid_rx_ant = (drv->fw.phy_config &
797						FW_PHY_CFG_RX_CHAIN) >>
798						FW_PHY_CFG_RX_CHAIN_POS;
799			break;
800		 case IWL_UCODE_TLV_SECURE_SEC_RT:
801			iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR,
802					    tlv_len);
803			drv->fw.mvm_fw = true;
804			break;
805		case IWL_UCODE_TLV_SECURE_SEC_INIT:
806			iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT,
807					    tlv_len);
808			drv->fw.mvm_fw = true;
809			break;
810		case IWL_UCODE_TLV_SECURE_SEC_WOWLAN:
811			iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN,
812					    tlv_len);
813			drv->fw.mvm_fw = true;
814			break;
815		case IWL_UCODE_TLV_NUM_OF_CPU:
816			if (tlv_len != sizeof(u32))
817				goto invalid_tlv_len;
818			num_of_cpus =
819				le32_to_cpup((__le32 *)tlv_data);
820
821			if (num_of_cpus == 2) {
822				drv->fw.img[IWL_UCODE_REGULAR].is_dual_cpus =
823					true;
824				drv->fw.img[IWL_UCODE_INIT].is_dual_cpus =
825					true;
826				drv->fw.img[IWL_UCODE_WOWLAN].is_dual_cpus =
827					true;
828			} else if ((num_of_cpus > 2) || (num_of_cpus < 1)) {
829				IWL_ERR(drv, "Driver support upto 2 CPUs\n");
830				return -EINVAL;
831			}
832			break;
833		case IWL_UCODE_TLV_CSCHEME:
834			if (iwl_store_cscheme(&drv->fw, tlv_data, tlv_len))
835				goto invalid_tlv_len;
836			break;
837		case IWL_UCODE_TLV_N_SCAN_CHANNELS:
838			if (tlv_len != sizeof(u32))
839				goto invalid_tlv_len;
840			capa->n_scan_channels =
841				le32_to_cpup((__le32 *)tlv_data);
842			break;
843		case IWL_UCODE_TLV_FW_VERSION: {
844			__le32 *ptr = (void *)tlv_data;
845			u32 major, minor;
846			u8 local_comp;
847
848			if (tlv_len != sizeof(u32) * 3)
849				goto invalid_tlv_len;
850
851			major = le32_to_cpup(ptr++);
852			minor = le32_to_cpup(ptr++);
853			local_comp = le32_to_cpup(ptr);
854
855			snprintf(drv->fw.fw_version,
856				 sizeof(drv->fw.fw_version), "%u.%u.%u",
857				 major, minor, local_comp);
858			break;
859			}
860		case IWL_UCODE_TLV_FW_DBG_DEST: {
861			struct iwl_fw_dbg_dest_tlv *dest = (void *)tlv_data;
862
863			if (pieces->dbg_dest_tlv) {
864				IWL_ERR(drv,
865					"dbg destination ignored, already exists\n");
866				break;
867			}
868
869			pieces->dbg_dest_tlv = dest;
870			IWL_INFO(drv, "Found debug destination: %s\n",
871				 get_fw_dbg_mode_string(dest->monitor_mode));
872
873			drv->fw.dbg_dest_reg_num =
874				tlv_len - offsetof(struct iwl_fw_dbg_dest_tlv,
875						   reg_ops);
876			drv->fw.dbg_dest_reg_num /=
877				sizeof(drv->fw.dbg_dest_tlv->reg_ops[0]);
878
879			break;
880			}
881		case IWL_UCODE_TLV_FW_DBG_CONF: {
882			struct iwl_fw_dbg_conf_tlv *conf = (void *)tlv_data;
883
884			if (!pieces->dbg_dest_tlv) {
885				IWL_ERR(drv,
886					"Ignore dbg config %d - no destination configured\n",
887					conf->id);
888				break;
889			}
890
891			if (conf->id >= ARRAY_SIZE(drv->fw.dbg_conf_tlv)) {
892				IWL_ERR(drv,
893					"Skip unknown configuration: %d\n",
894					conf->id);
895				break;
896			}
897
898			if (pieces->dbg_conf_tlv[conf->id]) {
899				IWL_ERR(drv,
900					"Ignore duplicate dbg config %d\n",
901					conf->id);
902				break;
903			}
904
905			if (conf->usniffer)
906				usniffer_req = true;
907
908			IWL_INFO(drv, "Found debug configuration: %d\n",
909				 conf->id);
910
911			pieces->dbg_conf_tlv[conf->id] = conf;
912			pieces->dbg_conf_tlv_len[conf->id] = tlv_len;
913			break;
914			}
915		case IWL_UCODE_TLV_FW_DBG_TRIGGER: {
916			struct iwl_fw_dbg_trigger_tlv *trigger =
917				(void *)tlv_data;
918			u32 trigger_id = le32_to_cpu(trigger->id);
919
920			if (trigger_id >= ARRAY_SIZE(drv->fw.dbg_trigger_tlv)) {
921				IWL_ERR(drv,
922					"Skip unknown trigger: %u\n",
923					trigger->id);
924				break;
925			}
926
927			if (pieces->dbg_trigger_tlv[trigger_id]) {
928				IWL_ERR(drv,
929					"Ignore duplicate dbg trigger %u\n",
930					trigger->id);
931				break;
932			}
933
934			IWL_INFO(drv, "Found debug trigger: %u\n", trigger->id);
935
936			pieces->dbg_trigger_tlv[trigger_id] = trigger;
937			pieces->dbg_trigger_tlv_len[trigger_id] = tlv_len;
938			break;
939			}
940		case IWL_UCODE_TLV_SEC_RT_USNIFFER:
941			usniffer_images = true;
942			iwl_store_ucode_sec(pieces, tlv_data,
943					    IWL_UCODE_REGULAR_USNIFFER,
944					    tlv_len);
945			break;
946		case IWL_UCODE_TLV_SDIO_ADMA_ADDR:
947			if (tlv_len != sizeof(u32))
948				goto invalid_tlv_len;
949			drv->fw.sdio_adma_addr =
950				le32_to_cpup((__le32 *)tlv_data);
951			break;
952		default:
953			IWL_DEBUG_INFO(drv, "unknown TLV: %d\n", tlv_type);
954			break;
955		}
956	}
957
958	if (usniffer_req && !usniffer_images) {
959		IWL_ERR(drv,
960			"user selected to work with usniffer but usniffer image isn't available in ucode package\n");
961		return -EINVAL;
962	}
963
964	if (len) {
965		IWL_ERR(drv, "invalid TLV after parsing: %zd\n", len);
966		iwl_print_hex_dump(drv, IWL_DL_FW, (u8 *)data, len);
967		return -EINVAL;
968	}
969
970	return 0;
971
972 invalid_tlv_len:
973	IWL_ERR(drv, "TLV %d has invalid size: %u\n", tlv_type, tlv_len);
974 tlv_error:
975	iwl_print_hex_dump(drv, IWL_DL_FW, tlv_data, tlv_len);
976
977	return -EINVAL;
978}
979
980static int iwl_alloc_ucode(struct iwl_drv *drv,
981			   struct iwl_firmware_pieces *pieces,
982			   enum iwl_ucode_type type)
983{
984	int i;
985	for (i = 0;
986	     i < IWL_UCODE_SECTION_MAX && get_sec_size(pieces, type, i);
987	     i++)
988		if (iwl_alloc_fw_desc(drv, &(drv->fw.img[type].sec[i]),
989				      get_sec(pieces, type, i)))
990			return -ENOMEM;
991	return 0;
992}
993
994static int validate_sec_sizes(struct iwl_drv *drv,
995			      struct iwl_firmware_pieces *pieces,
996			      const struct iwl_cfg *cfg)
997{
998	IWL_DEBUG_INFO(drv, "f/w package hdr runtime inst size = %Zd\n",
999		get_sec_size(pieces, IWL_UCODE_REGULAR,
1000			     IWL_UCODE_SECTION_INST));
1001	IWL_DEBUG_INFO(drv, "f/w package hdr runtime data size = %Zd\n",
1002		get_sec_size(pieces, IWL_UCODE_REGULAR,
1003			     IWL_UCODE_SECTION_DATA));
1004	IWL_DEBUG_INFO(drv, "f/w package hdr init inst size = %Zd\n",
1005		get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST));
1006	IWL_DEBUG_INFO(drv, "f/w package hdr init data size = %Zd\n",
1007		get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA));
1008
1009	/* Verify that uCode images will fit in card's SRAM. */
1010	if (get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST) >
1011	    cfg->max_inst_size) {
1012		IWL_ERR(drv, "uCode instr len %Zd too large to fit in\n",
1013			get_sec_size(pieces, IWL_UCODE_REGULAR,
1014				     IWL_UCODE_SECTION_INST));
1015		return -1;
1016	}
1017
1018	if (get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA) >
1019	    cfg->max_data_size) {
1020		IWL_ERR(drv, "uCode data len %Zd too large to fit in\n",
1021			get_sec_size(pieces, IWL_UCODE_REGULAR,
1022				     IWL_UCODE_SECTION_DATA));
1023		return -1;
1024	}
1025
1026	if (get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST) >
1027	     cfg->max_inst_size) {
1028		IWL_ERR(drv, "uCode init instr len %Zd too large to fit in\n",
1029			get_sec_size(pieces, IWL_UCODE_INIT,
1030				     IWL_UCODE_SECTION_INST));
1031		return -1;
1032	}
1033
1034	if (get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA) >
1035	    cfg->max_data_size) {
1036		IWL_ERR(drv, "uCode init data len %Zd too large to fit in\n",
1037			get_sec_size(pieces, IWL_UCODE_REGULAR,
1038				     IWL_UCODE_SECTION_DATA));
1039		return -1;
1040	}
1041	return 0;
1042}
1043
1044static struct iwl_op_mode *
1045_iwl_op_mode_start(struct iwl_drv *drv, struct iwlwifi_opmode_table *op)
1046{
1047	const struct iwl_op_mode_ops *ops = op->ops;
1048	struct dentry *dbgfs_dir = NULL;
1049	struct iwl_op_mode *op_mode = NULL;
1050
1051#ifdef CONFIG_IWLWIFI_DEBUGFS
1052	drv->dbgfs_op_mode = debugfs_create_dir(op->name,
1053						drv->dbgfs_drv);
1054	if (!drv->dbgfs_op_mode) {
1055		IWL_ERR(drv,
1056			"failed to create opmode debugfs directory\n");
1057		return op_mode;
1058	}
1059	dbgfs_dir = drv->dbgfs_op_mode;
1060#endif
1061
1062	op_mode = ops->start(drv->trans, drv->cfg, &drv->fw, dbgfs_dir);
1063
1064#ifdef CONFIG_IWLWIFI_DEBUGFS
1065	if (!op_mode) {
1066		debugfs_remove_recursive(drv->dbgfs_op_mode);
1067		drv->dbgfs_op_mode = NULL;
1068	}
1069#endif
1070
1071	return op_mode;
1072}
1073
1074static void _iwl_op_mode_stop(struct iwl_drv *drv)
1075{
1076	/* op_mode can be NULL if its start failed */
1077	if (drv->op_mode) {
1078		iwl_op_mode_stop(drv->op_mode);
1079		drv->op_mode = NULL;
1080
1081#ifdef CONFIG_IWLWIFI_DEBUGFS
1082		debugfs_remove_recursive(drv->dbgfs_op_mode);
1083		drv->dbgfs_op_mode = NULL;
1084#endif
1085	}
1086}
1087
1088/**
1089 * iwl_req_fw_callback - callback when firmware was loaded
1090 *
1091 * If loaded successfully, copies the firmware into buffers
1092 * for the card to fetch (via DMA).
1093 */
1094static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
1095{
1096	struct iwl_drv *drv = context;
1097	struct iwl_fw *fw = &drv->fw;
1098	struct iwl_ucode_header *ucode;
1099	struct iwlwifi_opmode_table *op;
1100	int err;
1101	struct iwl_firmware_pieces *pieces;
1102	const unsigned int api_max = drv->cfg->ucode_api_max;
1103	unsigned int api_ok = drv->cfg->ucode_api_ok;
1104	const unsigned int api_min = drv->cfg->ucode_api_min;
1105	size_t trigger_tlv_sz[FW_DBG_TRIGGER_MAX];
1106	u32 api_ver;
1107	int i;
1108	bool load_module = false;
1109
1110	fw->ucode_capa.max_probe_length = IWL_DEFAULT_MAX_PROBE_LENGTH;
1111	fw->ucode_capa.standard_phy_calibration_size =
1112			IWL_DEFAULT_STANDARD_PHY_CALIBRATE_TBL_SIZE;
1113	fw->ucode_capa.n_scan_channels = IWL_DEFAULT_SCAN_CHANNELS;
1114
1115	if (!api_ok)
1116		api_ok = api_max;
1117
1118	pieces = kzalloc(sizeof(*pieces), GFP_KERNEL);
1119	if (!pieces)
1120		return;
1121
1122	if (!ucode_raw) {
1123		if (drv->fw_index <= api_ok)
1124			IWL_ERR(drv,
1125				"request for firmware file '%s' failed.\n",
1126				drv->firmware_name);
1127		goto try_again;
1128	}
1129
1130	IWL_DEBUG_INFO(drv, "Loaded firmware file '%s' (%zd bytes).\n",
1131		       drv->firmware_name, ucode_raw->size);
1132
1133	/* Make sure that we got at least the API version number */
1134	if (ucode_raw->size < 4) {
1135		IWL_ERR(drv, "File size way too small!\n");
1136		goto try_again;
1137	}
1138
1139	/* Data from ucode file:  header followed by uCode images */
1140	ucode = (struct iwl_ucode_header *)ucode_raw->data;
1141
1142	if (ucode->ver)
1143		err = iwl_parse_v1_v2_firmware(drv, ucode_raw, pieces);
1144	else
1145		err = iwl_parse_tlv_firmware(drv, ucode_raw, pieces,
1146					     &fw->ucode_capa);
1147
1148	if (err)
1149		goto try_again;
1150
1151	if (drv->fw.ucode_capa.api[0] & IWL_UCODE_TLV_API_NEW_VERSION)
1152		api_ver = drv->fw.ucode_ver;
1153	else
1154		api_ver = IWL_UCODE_API(drv->fw.ucode_ver);
1155
1156	/*
1157	 * api_ver should match the api version forming part of the
1158	 * firmware filename ... but we don't check for that and only rely
1159	 * on the API version read from firmware header from here on forward
1160	 */
1161	/* no api version check required for experimental uCode */
1162	if (drv->fw_index != UCODE_EXPERIMENTAL_INDEX) {
1163		if (api_ver < api_min || api_ver > api_max) {
1164			IWL_ERR(drv,
1165				"Driver unable to support your firmware API. "
1166				"Driver supports v%u, firmware is v%u.\n",
1167				api_max, api_ver);
1168			goto try_again;
1169		}
1170
1171		if (api_ver < api_ok) {
1172			if (api_ok != api_max)
1173				IWL_ERR(drv, "Firmware has old API version, "
1174					"expected v%u through v%u, got v%u.\n",
1175					api_ok, api_max, api_ver);
1176			else
1177				IWL_ERR(drv, "Firmware has old API version, "
1178					"expected v%u, got v%u.\n",
1179					api_max, api_ver);
1180			IWL_ERR(drv, "New firmware can be obtained from "
1181				      "http://www.intellinuxwireless.org/.\n");
1182		}
1183	}
1184
1185	/*
1186	 * In mvm uCode there is no difference between data and instructions
1187	 * sections.
1188	 */
1189	if (!fw->mvm_fw && validate_sec_sizes(drv, pieces, drv->cfg))
1190		goto try_again;
1191
1192	/* Allocate ucode buffers for card's bus-master loading ... */
1193
1194	/* Runtime instructions and 2 copies of data:
1195	 * 1) unmodified from disk
1196	 * 2) backup cache for save/restore during power-downs */
1197	for (i = 0; i < IWL_UCODE_TYPE_MAX; i++)
1198		if (iwl_alloc_ucode(drv, pieces, i))
1199			goto out_free_fw;
1200
1201	if (pieces->dbg_dest_tlv) {
1202		drv->fw.dbg_dest_tlv =
1203			kmemdup(pieces->dbg_dest_tlv,
1204				sizeof(*pieces->dbg_dest_tlv) +
1205				sizeof(pieces->dbg_dest_tlv->reg_ops[0]) *
1206				drv->fw.dbg_dest_reg_num, GFP_KERNEL);
1207
1208		if (!drv->fw.dbg_dest_tlv)
1209			goto out_free_fw;
1210	}
1211
1212	for (i = 0; i < ARRAY_SIZE(drv->fw.dbg_conf_tlv); i++) {
1213		if (pieces->dbg_conf_tlv[i]) {
1214			drv->fw.dbg_conf_tlv_len[i] =
1215				pieces->dbg_conf_tlv_len[i];
1216			drv->fw.dbg_conf_tlv[i] =
1217				kmemdup(pieces->dbg_conf_tlv[i],
1218					drv->fw.dbg_conf_tlv_len[i],
1219					GFP_KERNEL);
1220			if (!drv->fw.dbg_conf_tlv[i])
1221				goto out_free_fw;
1222		}
1223	}
1224
1225	memset(&trigger_tlv_sz, 0xff, sizeof(trigger_tlv_sz));
1226
1227	trigger_tlv_sz[FW_DBG_TRIGGER_MISSED_BEACONS] =
1228		sizeof(struct iwl_fw_dbg_trigger_missed_bcon);
1229	trigger_tlv_sz[FW_DBG_TRIGGER_CHANNEL_SWITCH] = 0;
1230	trigger_tlv_sz[FW_DBG_TRIGGER_FW_NOTIF] =
1231		sizeof(struct iwl_fw_dbg_trigger_cmd);
1232	trigger_tlv_sz[FW_DBG_TRIGGER_MLME] =
1233		sizeof(struct iwl_fw_dbg_trigger_mlme);
1234	trigger_tlv_sz[FW_DBG_TRIGGER_STATS] =
1235		sizeof(struct iwl_fw_dbg_trigger_stats);
1236	trigger_tlv_sz[FW_DBG_TRIGGER_RSSI] =
1237		sizeof(struct iwl_fw_dbg_trigger_low_rssi);
1238	trigger_tlv_sz[FW_DBG_TRIGGER_TXQ_TIMERS] =
1239		sizeof(struct iwl_fw_dbg_trigger_txq_timer);
1240	trigger_tlv_sz[FW_DBG_TRIGGER_TIME_EVENT] =
1241		sizeof(struct iwl_fw_dbg_trigger_time_event);
1242
1243	for (i = 0; i < ARRAY_SIZE(drv->fw.dbg_trigger_tlv); i++) {
1244		if (pieces->dbg_trigger_tlv[i]) {
1245			/*
1246			 * If the trigger isn't long enough, WARN and exit.
1247			 * Someone is trying to debug something and he won't
1248			 * be able to catch the bug he is trying to chase.
1249			 * We'd better be noisy to be sure he knows what's
1250			 * going on.
1251			 */
1252			if (WARN_ON(pieces->dbg_trigger_tlv_len[i] <
1253				    (trigger_tlv_sz[i] +
1254				     sizeof(struct iwl_fw_dbg_trigger_tlv))))
1255				goto out_free_fw;
1256			drv->fw.dbg_trigger_tlv_len[i] =
1257				pieces->dbg_trigger_tlv_len[i];
1258			drv->fw.dbg_trigger_tlv[i] =
1259				kmemdup(pieces->dbg_trigger_tlv[i],
1260					drv->fw.dbg_trigger_tlv_len[i],
1261					GFP_KERNEL);
1262			if (!drv->fw.dbg_trigger_tlv[i])
1263				goto out_free_fw;
1264		}
1265	}
1266
1267	/* Now that we can no longer fail, copy information */
1268
1269	/*
1270	 * The (size - 16) / 12 formula is based on the information recorded
1271	 * for each event, which is of mode 1 (including timestamp) for all
1272	 * new microcodes that include this information.
1273	 */
1274	fw->init_evtlog_ptr = pieces->init_evtlog_ptr;
1275	if (pieces->init_evtlog_size)
1276		fw->init_evtlog_size = (pieces->init_evtlog_size - 16)/12;
1277	else
1278		fw->init_evtlog_size =
1279			drv->cfg->base_params->max_event_log_size;
1280	fw->init_errlog_ptr = pieces->init_errlog_ptr;
1281	fw->inst_evtlog_ptr = pieces->inst_evtlog_ptr;
1282	if (pieces->inst_evtlog_size)
1283		fw->inst_evtlog_size = (pieces->inst_evtlog_size - 16)/12;
1284	else
1285		fw->inst_evtlog_size =
1286			drv->cfg->base_params->max_event_log_size;
1287	fw->inst_errlog_ptr = pieces->inst_errlog_ptr;
1288
1289	/*
1290	 * figure out the offset of chain noise reset and gain commands
1291	 * base on the size of standard phy calibration commands table size
1292	 */
1293	if (fw->ucode_capa.standard_phy_calibration_size >
1294	    IWL_MAX_PHY_CALIBRATE_TBL_SIZE)
1295		fw->ucode_capa.standard_phy_calibration_size =
1296			IWL_MAX_STANDARD_PHY_CALIBRATE_TBL_SIZE;
1297
1298	/* We have our copies now, allow OS release its copies */
1299	release_firmware(ucode_raw);
1300
1301	mutex_lock(&iwlwifi_opmode_table_mtx);
1302	if (fw->mvm_fw)
1303		op = &iwlwifi_opmode_table[MVM_OP_MODE];
1304	else
1305		op = &iwlwifi_opmode_table[DVM_OP_MODE];
1306
1307	IWL_INFO(drv, "loaded firmware version %s op_mode %s\n",
1308		 drv->fw.fw_version, op->name);
1309
1310	/* add this device to the list of devices using this op_mode */
1311	list_add_tail(&drv->list, &op->drv);
1312
1313	if (op->ops) {
1314		drv->op_mode = _iwl_op_mode_start(drv, op);
1315
1316		if (!drv->op_mode) {
1317			mutex_unlock(&iwlwifi_opmode_table_mtx);
1318			goto out_unbind;
1319		}
1320	} else {
1321		load_module = true;
1322	}
1323	mutex_unlock(&iwlwifi_opmode_table_mtx);
1324
1325	/*
1326	 * Complete the firmware request last so that
1327	 * a driver unbind (stop) doesn't run while we
1328	 * are doing the start() above.
1329	 */
1330	complete(&drv->request_firmware_complete);
1331
1332	/*
1333	 * Load the module last so we don't block anything
1334	 * else from proceeding if the module fails to load
1335	 * or hangs loading.
1336	 */
1337	if (load_module) {
1338		err = request_module("%s", op->name);
1339#ifdef CONFIG_IWLWIFI_OPMODE_MODULAR
1340		if (err)
1341			IWL_ERR(drv,
1342				"failed to load module %s (error %d), is dynamic loading enabled?\n",
1343				op->name, err);
1344#endif
1345	}
1346	kfree(pieces);
1347	return;
1348
1349 try_again:
1350	/* try next, if any */
1351	release_firmware(ucode_raw);
1352	if (iwl_request_firmware(drv, false))
1353		goto out_unbind;
1354	kfree(pieces);
1355	return;
1356
1357 out_free_fw:
1358	IWL_ERR(drv, "failed to allocate pci memory\n");
1359	iwl_dealloc_ucode(drv);
1360	release_firmware(ucode_raw);
1361 out_unbind:
1362	kfree(pieces);
1363	complete(&drv->request_firmware_complete);
1364	device_release_driver(drv->trans->dev);
1365}
1366
1367struct iwl_drv *iwl_drv_start(struct iwl_trans *trans,
1368			      const struct iwl_cfg *cfg)
1369{
1370	struct iwl_drv *drv;
1371	int ret;
1372
1373	drv = kzalloc(sizeof(*drv), GFP_KERNEL);
1374	if (!drv) {
1375		ret = -ENOMEM;
1376		goto err;
1377	}
1378
1379	drv->trans = trans;
1380	drv->dev = trans->dev;
1381	drv->cfg = cfg;
1382
1383	init_completion(&drv->request_firmware_complete);
1384	INIT_LIST_HEAD(&drv->list);
1385
1386#ifdef CONFIG_IWLWIFI_DEBUGFS
1387	/* Create the device debugfs entries. */
1388	drv->dbgfs_drv = debugfs_create_dir(dev_name(trans->dev),
1389					    iwl_dbgfs_root);
1390
1391	if (!drv->dbgfs_drv) {
1392		IWL_ERR(drv, "failed to create debugfs directory\n");
1393		ret = -ENOMEM;
1394		goto err_free_drv;
1395	}
1396
1397	/* Create transport layer debugfs dir */
1398	drv->trans->dbgfs_dir = debugfs_create_dir("trans", drv->dbgfs_drv);
1399
1400	if (!drv->trans->dbgfs_dir) {
1401		IWL_ERR(drv, "failed to create transport debugfs directory\n");
1402		ret = -ENOMEM;
1403		goto err_free_dbgfs;
1404	}
1405#endif
1406
1407	ret = iwl_request_firmware(drv, true);
1408	if (ret) {
1409		IWL_ERR(trans, "Couldn't request the fw\n");
1410		goto err_fw;
1411	}
1412
1413	return drv;
1414
1415err_fw:
1416#ifdef CONFIG_IWLWIFI_DEBUGFS
1417err_free_dbgfs:
1418	debugfs_remove_recursive(drv->dbgfs_drv);
1419err_free_drv:
1420#endif
1421	kfree(drv);
1422err:
1423	return ERR_PTR(ret);
1424}
1425
1426void iwl_drv_stop(struct iwl_drv *drv)
1427{
1428	wait_for_completion(&drv->request_firmware_complete);
1429
1430	_iwl_op_mode_stop(drv);
1431
1432	iwl_dealloc_ucode(drv);
1433
1434	mutex_lock(&iwlwifi_opmode_table_mtx);
1435	/*
1436	 * List is empty (this item wasn't added)
1437	 * when firmware loading failed -- in that
1438	 * case we can't remove it from any list.
1439	 */
1440	if (!list_empty(&drv->list))
1441		list_del(&drv->list);
1442	mutex_unlock(&iwlwifi_opmode_table_mtx);
1443
1444#ifdef CONFIG_IWLWIFI_DEBUGFS
1445	debugfs_remove_recursive(drv->dbgfs_drv);
1446#endif
1447
1448	kfree(drv);
1449}
1450
1451
1452/* shared module parameters */
1453struct iwl_mod_params iwlwifi_mod_params = {
1454	.restart_fw = true,
1455	.bt_coex_active = true,
1456	.power_level = IWL_POWER_INDEX_1,
1457	.d0i3_disable = true,
1458#ifndef CONFIG_IWLWIFI_UAPSD
1459	.uapsd_disable = true,
1460#endif /* CONFIG_IWLWIFI_UAPSD */
1461	/* the rest are 0 by default */
1462};
1463IWL_EXPORT_SYMBOL(iwlwifi_mod_params);
1464
1465int iwl_opmode_register(const char *name, const struct iwl_op_mode_ops *ops)
1466{
1467	int i;
1468	struct iwl_drv *drv;
1469	struct iwlwifi_opmode_table *op;
1470
1471	mutex_lock(&iwlwifi_opmode_table_mtx);
1472	for (i = 0; i < ARRAY_SIZE(iwlwifi_opmode_table); i++) {
1473		op = &iwlwifi_opmode_table[i];
1474		if (strcmp(op->name, name))
1475			continue;
1476		op->ops = ops;
1477		/* TODO: need to handle exceptional case */
1478		list_for_each_entry(drv, &op->drv, list)
1479			drv->op_mode = _iwl_op_mode_start(drv, op);
1480
1481		mutex_unlock(&iwlwifi_opmode_table_mtx);
1482		return 0;
1483	}
1484	mutex_unlock(&iwlwifi_opmode_table_mtx);
1485	return -EIO;
1486}
1487IWL_EXPORT_SYMBOL(iwl_opmode_register);
1488
1489void iwl_opmode_deregister(const char *name)
1490{
1491	int i;
1492	struct iwl_drv *drv;
1493
1494	mutex_lock(&iwlwifi_opmode_table_mtx);
1495	for (i = 0; i < ARRAY_SIZE(iwlwifi_opmode_table); i++) {
1496		if (strcmp(iwlwifi_opmode_table[i].name, name))
1497			continue;
1498		iwlwifi_opmode_table[i].ops = NULL;
1499
1500		/* call the stop routine for all devices */
1501		list_for_each_entry(drv, &iwlwifi_opmode_table[i].drv, list)
1502			_iwl_op_mode_stop(drv);
1503
1504		mutex_unlock(&iwlwifi_opmode_table_mtx);
1505		return;
1506	}
1507	mutex_unlock(&iwlwifi_opmode_table_mtx);
1508}
1509IWL_EXPORT_SYMBOL(iwl_opmode_deregister);
1510
1511static int __init iwl_drv_init(void)
1512{
1513	int i;
1514
1515	mutex_init(&iwlwifi_opmode_table_mtx);
1516
1517	for (i = 0; i < ARRAY_SIZE(iwlwifi_opmode_table); i++)
1518		INIT_LIST_HEAD(&iwlwifi_opmode_table[i].drv);
1519
1520	pr_info(DRV_DESCRIPTION "\n");
1521	pr_info(DRV_COPYRIGHT "\n");
1522
1523#ifdef CONFIG_IWLWIFI_DEBUGFS
1524	/* Create the root of iwlwifi debugfs subsystem. */
1525	iwl_dbgfs_root = debugfs_create_dir(DRV_NAME, NULL);
1526
1527	if (!iwl_dbgfs_root)
1528		return -EFAULT;
1529#endif
1530
1531	return iwl_pci_register_driver();
1532}
1533module_init(iwl_drv_init);
1534
1535static void __exit iwl_drv_exit(void)
1536{
1537	iwl_pci_unregister_driver();
1538
1539#ifdef CONFIG_IWLWIFI_DEBUGFS
1540	debugfs_remove_recursive(iwl_dbgfs_root);
1541#endif
1542}
1543module_exit(iwl_drv_exit);
1544
1545#ifdef CONFIG_IWLWIFI_DEBUG
1546module_param_named(debug, iwlwifi_mod_params.debug_level, uint,
1547		   S_IRUGO | S_IWUSR);
1548MODULE_PARM_DESC(debug, "debug output mask");
1549#endif
1550
1551module_param_named(swcrypto, iwlwifi_mod_params.sw_crypto, int, S_IRUGO);
1552MODULE_PARM_DESC(swcrypto, "using crypto in software (default 0 [hardware])");
1553module_param_named(11n_disable, iwlwifi_mod_params.disable_11n, uint, S_IRUGO);
1554MODULE_PARM_DESC(11n_disable,
1555	"disable 11n functionality, bitmap: 1: full, 2: disable agg TX, 4: disable agg RX, 8 enable agg TX");
1556module_param_named(amsdu_size_8K, iwlwifi_mod_params.amsdu_size_8K,
1557		   int, S_IRUGO);
1558MODULE_PARM_DESC(amsdu_size_8K, "enable 8K amsdu size (default 0)");
1559module_param_named(fw_restart, iwlwifi_mod_params.restart_fw, bool, S_IRUGO);
1560MODULE_PARM_DESC(fw_restart, "restart firmware in case of error (default true)");
1561
1562module_param_named(antenna_coupling, iwlwifi_mod_params.ant_coupling,
1563		   int, S_IRUGO);
1564MODULE_PARM_DESC(antenna_coupling,
1565		 "specify antenna coupling in dB (default: 0 dB)");
1566
1567module_param_named(nvm_file, iwlwifi_mod_params.nvm_file, charp, S_IRUGO);
1568MODULE_PARM_DESC(nvm_file, "NVM file name");
1569
1570module_param_named(d0i3_disable, iwlwifi_mod_params.d0i3_disable,
1571		   bool, S_IRUGO);
1572MODULE_PARM_DESC(d0i3_disable, "disable d0i3 functionality (default: Y)");
1573
1574module_param_named(lar_disable, iwlwifi_mod_params.lar_disable,
1575		   bool, S_IRUGO);
1576MODULE_PARM_DESC(lar_disable, "disable LAR functionality (default: N)");
1577
1578module_param_named(uapsd_disable, iwlwifi_mod_params.uapsd_disable,
1579		   bool, S_IRUGO | S_IWUSR);
1580#ifdef CONFIG_IWLWIFI_UAPSD
1581MODULE_PARM_DESC(uapsd_disable, "disable U-APSD functionality (default: N)");
1582#else
1583MODULE_PARM_DESC(uapsd_disable, "disable U-APSD functionality (default: Y)");
1584#endif
1585
1586/*
1587 * set bt_coex_active to true, uCode will do kill/defer
1588 * every time the priority line is asserted (BT is sending signals on the
1589 * priority line in the PCIx).
1590 * set bt_coex_active to false, uCode will ignore the BT activity and
1591 * perform the normal operation
1592 *
1593 * User might experience transmit issue on some platform due to WiFi/BT
1594 * co-exist problem. The possible behaviors are:
1595 *   Able to scan and finding all the available AP
1596 *   Not able to associate with any AP
1597 * On those platforms, WiFi communication can be restored by set
1598 * "bt_coex_active" module parameter to "false"
1599 *
1600 * default: bt_coex_active = true (BT_COEX_ENABLE)
1601 */
1602module_param_named(bt_coex_active, iwlwifi_mod_params.bt_coex_active,
1603		bool, S_IRUGO);
1604MODULE_PARM_DESC(bt_coex_active, "enable wifi/bt co-exist (default: enable)");
1605
1606module_param_named(led_mode, iwlwifi_mod_params.led_mode, int, S_IRUGO);
1607MODULE_PARM_DESC(led_mode, "0=system default, "
1608		"1=On(RF On)/Off(RF Off), 2=blinking, 3=Off (default: 0)");
1609
1610module_param_named(power_save, iwlwifi_mod_params.power_save,
1611		bool, S_IRUGO);
1612MODULE_PARM_DESC(power_save,
1613		 "enable WiFi power management (default: disable)");
1614
1615module_param_named(power_level, iwlwifi_mod_params.power_level,
1616		int, S_IRUGO);
1617MODULE_PARM_DESC(power_level,
1618		 "default power save level (range from 1 - 5, default: 1)");
1619
1620module_param_named(fw_monitor, iwlwifi_mod_params.fw_monitor, bool, S_IRUGO);
1621MODULE_PARM_DESC(fw_monitor,
1622		 "firmware monitor - to debug FW (default: false - needs lots of memory)");
1623