xref: /linux/drivers/net/wireless/marvell/libertas/if_sdio.c (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *  linux/drivers/net/wireless/libertas/if_sdio.c
4  *
5  *  Copyright 2007-2008 Pierre Ossman
6  *
7  * Inspired by if_cs.c, Copyright 2007 Holger Schurig
8  *
9  * This hardware has more or less no CMD53 support, so all registers
10  * must be accessed using sdio_readb()/sdio_writeb().
11  *
12  * Transfers must be in one transaction or the firmware goes bonkers.
13  * This means that the transfer must either be small enough to do a
14  * byte based transfer or it must be padded to a multiple of the
15  * current block size.
16  *
17  * As SDIO is still new to the kernel, it is unfortunately common with
18  * bugs in the host controllers related to that. One such bug is that
19  * controllers cannot do transfers that aren't a multiple of 4 bytes.
20  * If you don't have time to fix the host controller driver, you can
21  * work around the problem by modifying if_sdio_host_to_card() and
22  * if_sdio_card_to_host() to pad the data.
23  */
24 
25 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
26 
27 #include <linux/kernel.h>
28 #include <linux/module.h>
29 #include <linux/slab.h>
30 #include <linux/firmware.h>
31 #include <linux/netdevice.h>
32 #include <linux/delay.h>
33 #include <linux/mmc/card.h>
34 #include <linux/mmc/sdio_func.h>
35 #include <linux/mmc/sdio_ids.h>
36 #include <linux/mmc/sdio.h>
37 #include <linux/mmc/host.h>
38 #include <linux/pm_runtime.h>
39 
40 #include "host.h"
41 #include "decl.h"
42 #include "defs.h"
43 #include "dev.h"
44 #include "cmd.h"
45 #include "if_sdio.h"
46 
47 static void if_sdio_interrupt(struct sdio_func *func);
48 
49 /* The if_sdio_remove() callback function is called when
50  * user removes this module from kernel space or ejects
51  * the card from the slot. The driver handles these 2 cases
52  * differently for SD8688 combo chip.
53  * If the user is removing the module, the FUNC_SHUTDOWN
54  * command for SD8688 is sent to the firmware.
55  * If the card is removed, there is no need to send this command.
56  *
57  * The variable 'user_rmmod' is used to distinguish these two
58  * scenarios. This flag is initialized as FALSE in case the card
59  * is removed, and will be set to TRUE for module removal when
60  * module_exit function is called.
61  */
62 static u8 user_rmmod;
63 
64 static const struct sdio_device_id if_sdio_ids[] = {
65 	{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL,
66 			SDIO_DEVICE_ID_MARVELL_LIBERTAS) },
67 	{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL,
68 			SDIO_DEVICE_ID_MARVELL_8688_WLAN) },
69 	{ /* end: all zeroes */				},
70 };
71 
72 MODULE_DEVICE_TABLE(sdio, if_sdio_ids);
73 
74 #define MODEL_8385	0x04
75 #define MODEL_8686	0x0b
76 #define MODEL_8688	0x10
77 
78 static const struct lbs_fw_table fw_table[] = {
79 	{ MODEL_8385, "libertas/sd8385_helper.bin", "libertas/sd8385.bin" },
80 	{ MODEL_8385, "sd8385_helper.bin", "sd8385.bin" },
81 	{ MODEL_8686, "libertas/sd8686_v9_helper.bin", "libertas/sd8686_v9.bin" },
82 	{ MODEL_8686, "libertas/sd8686_v8_helper.bin", "libertas/sd8686_v8.bin" },
83 	{ MODEL_8686, "sd8686_helper.bin", "sd8686.bin" },
84 	{ MODEL_8688, "libertas/sd8688_helper.bin", "libertas/sd8688.bin" },
85 	{ MODEL_8688, "sd8688_helper.bin", "sd8688.bin" },
86 	{ 0, NULL, NULL }
87 };
88 MODULE_FIRMWARE("libertas/sd8385_helper.bin");
89 MODULE_FIRMWARE("libertas/sd8385.bin");
90 MODULE_FIRMWARE("sd8385_helper.bin");
91 MODULE_FIRMWARE("sd8385.bin");
92 MODULE_FIRMWARE("libertas/sd8686_v9_helper.bin");
93 MODULE_FIRMWARE("libertas/sd8686_v9.bin");
94 MODULE_FIRMWARE("libertas/sd8686_v8_helper.bin");
95 MODULE_FIRMWARE("libertas/sd8686_v8.bin");
96 MODULE_FIRMWARE("sd8686_helper.bin");
97 MODULE_FIRMWARE("sd8686.bin");
98 MODULE_FIRMWARE("libertas/sd8688_helper.bin");
99 MODULE_FIRMWARE("libertas/sd8688.bin");
100 MODULE_FIRMWARE("sd8688_helper.bin");
101 MODULE_FIRMWARE("sd8688.bin");
102 
103 struct if_sdio_packet {
104 	struct list_head	list;
105 	u16			nb;
106 	u8			buffer[] __aligned(4);
107 };
108 
109 struct if_sdio_card {
110 	struct sdio_func	*func;
111 	struct lbs_private	*priv;
112 
113 	int			model;
114 	unsigned long		ioport;
115 	unsigned int		scratch_reg;
116 	bool			started;
117 	wait_queue_head_t	pwron_waitq;
118 
119 	u8			buffer[65536] __attribute__((aligned(4)));
120 
121 	spinlock_t		lock;
122 	struct list_head	packets;
123 
124 	struct workqueue_struct	*workqueue;
125 	struct work_struct	packet_worker;
126 	struct work_struct	reset_worker;
127 
128 	u8			rx_unit;
129 };
130 
131 static void if_sdio_finish_power_on(struct if_sdio_card *card);
132 static int if_sdio_power_off(struct if_sdio_card *card);
133 
134 /********************************************************************/
135 /* I/O                                                              */
136 /********************************************************************/
137 
138 /*
139  *  For SD8385/SD8686, this function reads firmware status after
140  *  the image is downloaded, or reads RX packet length when
141  *  interrupt (with IF_SDIO_H_INT_UPLD bit set) is received.
142  *  For SD8688, this function reads firmware status only.
143  */
144 static u16 if_sdio_read_scratch(struct if_sdio_card *card, int *err)
145 {
146 	int ret;
147 	u16 scratch;
148 
149 	scratch = sdio_readb(card->func, card->scratch_reg, &ret);
150 	if (!ret)
151 		scratch |= sdio_readb(card->func, card->scratch_reg + 1,
152 					&ret) << 8;
153 
154 	if (err)
155 		*err = ret;
156 
157 	if (ret)
158 		return 0xffff;
159 
160 	return scratch;
161 }
162 
163 static u8 if_sdio_read_rx_unit(struct if_sdio_card *card)
164 {
165 	int ret;
166 	u8 rx_unit;
167 
168 	rx_unit = sdio_readb(card->func, IF_SDIO_RX_UNIT, &ret);
169 
170 	if (ret)
171 		rx_unit = 0;
172 
173 	return rx_unit;
174 }
175 
176 static u16 if_sdio_read_rx_len(struct if_sdio_card *card, int *err)
177 {
178 	int ret;
179 	u16 rx_len;
180 
181 	switch (card->model) {
182 	case MODEL_8385:
183 	case MODEL_8686:
184 		rx_len = if_sdio_read_scratch(card, &ret);
185 		break;
186 	case MODEL_8688:
187 	default: /* for newer chipsets */
188 		rx_len = sdio_readb(card->func, IF_SDIO_RX_LEN, &ret);
189 		if (!ret)
190 			rx_len <<= card->rx_unit;
191 		else
192 			rx_len = 0xffff;	/* invalid length */
193 
194 		break;
195 	}
196 
197 	if (err)
198 		*err = ret;
199 
200 	return rx_len;
201 }
202 
203 static int if_sdio_handle_cmd(struct if_sdio_card *card,
204 		u8 *buffer, unsigned size)
205 {
206 	struct lbs_private *priv = card->priv;
207 	int ret;
208 	unsigned long flags;
209 	u8 i;
210 
211 	if (size > LBS_CMD_BUFFER_SIZE) {
212 		lbs_deb_sdio("response packet too large (%d bytes)\n",
213 			(int)size);
214 		ret = -E2BIG;
215 		goto out;
216 	}
217 
218 	spin_lock_irqsave(&priv->driver_lock, flags);
219 
220 	i = (priv->resp_idx == 0) ? 1 : 0;
221 	BUG_ON(priv->resp_len[i]);
222 	priv->resp_len[i] = size;
223 	memcpy(priv->resp_buf[i], buffer, size);
224 	lbs_notify_command_response(priv, i);
225 
226 	spin_unlock_irqrestore(&priv->driver_lock, flags);
227 
228 	ret = 0;
229 
230 out:
231 	return ret;
232 }
233 
234 static int if_sdio_handle_data(struct if_sdio_card *card,
235 		u8 *buffer, unsigned size)
236 {
237 	int ret;
238 	struct sk_buff *skb;
239 
240 	if (size > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE) {
241 		lbs_deb_sdio("response packet too large (%d bytes)\n",
242 			(int)size);
243 		ret = -E2BIG;
244 		goto out;
245 	}
246 
247 	skb = dev_alloc_skb(MRVDRV_ETH_RX_PACKET_BUFFER_SIZE + NET_IP_ALIGN);
248 	if (!skb) {
249 		ret = -ENOMEM;
250 		goto out;
251 	}
252 
253 	skb_reserve(skb, NET_IP_ALIGN);
254 
255 	skb_put_data(skb, buffer, size);
256 
257 	lbs_process_rxed_packet(card->priv, skb);
258 
259 	ret = 0;
260 
261 out:
262 	return ret;
263 }
264 
265 static int if_sdio_handle_event(struct if_sdio_card *card,
266 		u8 *buffer, unsigned size)
267 {
268 	int ret;
269 	u32 event;
270 
271 	if (card->model == MODEL_8385) {
272 		event = sdio_readb(card->func, IF_SDIO_EVENT, &ret);
273 		if (ret)
274 			goto out;
275 
276 		/* right shift 3 bits to get the event id */
277 		event >>= 3;
278 	} else {
279 		if (size < 4) {
280 			lbs_deb_sdio("event packet too small (%d bytes)\n",
281 				(int)size);
282 			ret = -EINVAL;
283 			goto out;
284 		}
285 		event = buffer[3] << 24;
286 		event |= buffer[2] << 16;
287 		event |= buffer[1] << 8;
288 		event |= buffer[0] << 0;
289 	}
290 
291 	lbs_queue_event(card->priv, event & 0xFF);
292 	ret = 0;
293 
294 out:
295 	return ret;
296 }
297 
298 static int if_sdio_wait_status(struct if_sdio_card *card, const u8 condition)
299 {
300 	u8 status;
301 	unsigned long timeout;
302 	int ret = 0;
303 
304 	timeout = jiffies + HZ;
305 	while (1) {
306 		status = sdio_readb(card->func, IF_SDIO_STATUS, &ret);
307 		if (ret)
308 			return ret;
309 		if ((status & condition) == condition)
310 			break;
311 		if (time_after(jiffies, timeout))
312 			return -ETIMEDOUT;
313 		mdelay(1);
314 	}
315 	return ret;
316 }
317 
318 static int if_sdio_card_to_host(struct if_sdio_card *card)
319 {
320 	int ret;
321 	u16 size, type, chunk;
322 
323 	size = if_sdio_read_rx_len(card, &ret);
324 	if (ret)
325 		goto out;
326 
327 	if (size < 4) {
328 		lbs_deb_sdio("invalid packet size (%d bytes) from firmware\n",
329 			(int)size);
330 		ret = -EINVAL;
331 		goto out;
332 	}
333 
334 	ret = if_sdio_wait_status(card, IF_SDIO_IO_RDY);
335 	if (ret)
336 		goto out;
337 
338 	/*
339 	 * The transfer must be in one transaction or the firmware
340 	 * goes suicidal. There's no way to guarantee that for all
341 	 * controllers, but we can at least try.
342 	 */
343 	chunk = sdio_align_size(card->func, size);
344 
345 	ret = sdio_readsb(card->func, card->buffer, card->ioport, chunk);
346 	if (ret)
347 		goto out;
348 
349 	chunk = card->buffer[0] | (card->buffer[1] << 8);
350 	type = card->buffer[2] | (card->buffer[3] << 8);
351 
352 	lbs_deb_sdio("packet of type %d and size %d bytes\n",
353 		(int)type, (int)chunk);
354 
355 	if (chunk > size) {
356 		lbs_deb_sdio("packet fragment (%d > %d)\n",
357 			(int)chunk, (int)size);
358 		ret = -EINVAL;
359 		goto out;
360 	}
361 
362 	if (chunk < size) {
363 		lbs_deb_sdio("packet fragment (%d < %d)\n",
364 			(int)chunk, (int)size);
365 	}
366 
367 	switch (type) {
368 	case MVMS_CMD:
369 		ret = if_sdio_handle_cmd(card, card->buffer + 4, chunk - 4);
370 		if (ret)
371 			goto out;
372 		break;
373 	case MVMS_DAT:
374 		ret = if_sdio_handle_data(card, card->buffer + 4, chunk - 4);
375 		if (ret)
376 			goto out;
377 		break;
378 	case MVMS_EVENT:
379 		ret = if_sdio_handle_event(card, card->buffer + 4, chunk - 4);
380 		if (ret)
381 			goto out;
382 		break;
383 	default:
384 		lbs_deb_sdio("invalid type (%d) from firmware\n",
385 				(int)type);
386 		ret = -EINVAL;
387 		goto out;
388 	}
389 
390 out:
391 	if (ret)
392 		pr_err("problem fetching packet from firmware\n");
393 
394 	return ret;
395 }
396 
397 static void if_sdio_host_to_card_worker(struct work_struct *work)
398 {
399 	struct if_sdio_card *card;
400 	struct if_sdio_packet *packet;
401 	int ret;
402 	unsigned long flags;
403 
404 	card = container_of(work, struct if_sdio_card, packet_worker);
405 
406 	while (1) {
407 		spin_lock_irqsave(&card->lock, flags);
408 		packet = list_first_entry_or_null(&card->packets,
409 						  struct if_sdio_packet, list);
410 		if (packet)
411 			list_del(&packet->list);
412 		spin_unlock_irqrestore(&card->lock, flags);
413 
414 		if (!packet)
415 			break;
416 
417 		sdio_claim_host(card->func);
418 
419 		ret = if_sdio_wait_status(card, IF_SDIO_IO_RDY);
420 		if (ret == 0) {
421 			ret = sdio_writesb(card->func, card->ioport,
422 					   packet->buffer, packet->nb);
423 		}
424 
425 		if (ret)
426 			pr_err("error %d sending packet to firmware\n", ret);
427 
428 		sdio_release_host(card->func);
429 
430 		kfree(packet);
431 	}
432 }
433 
434 /********************************************************************/
435 /* Firmware                                                         */
436 /********************************************************************/
437 
438 #define FW_DL_READY_STATUS (IF_SDIO_IO_RDY | IF_SDIO_DL_RDY)
439 
440 static int if_sdio_prog_helper(struct if_sdio_card *card,
441 				const struct firmware *fw)
442 {
443 	int ret;
444 	unsigned long timeout;
445 	u8 *chunk_buffer;
446 	u32 chunk_size;
447 	const u8 *firmware;
448 	size_t size;
449 
450 	chunk_buffer = kzalloc(64, GFP_KERNEL);
451 	if (!chunk_buffer) {
452 		ret = -ENOMEM;
453 		goto out;
454 	}
455 
456 	sdio_claim_host(card->func);
457 
458 	ret = sdio_set_block_size(card->func, 32);
459 	if (ret)
460 		goto release;
461 
462 	firmware = fw->data;
463 	size = fw->size;
464 
465 	while (size) {
466 		ret = if_sdio_wait_status(card, FW_DL_READY_STATUS);
467 		if (ret)
468 			goto release;
469 
470 		/* On some platforms (like Davinci) the chip needs more time
471 		 * between helper blocks.
472 		 */
473 		mdelay(2);
474 
475 		chunk_size = min_t(size_t, size, 60);
476 
477 		*((__le32*)chunk_buffer) = cpu_to_le32(chunk_size);
478 		memcpy(chunk_buffer + 4, firmware, chunk_size);
479 /*
480 		lbs_deb_sdio("sending %d bytes chunk\n", chunk_size);
481 */
482 		ret = sdio_writesb(card->func, card->ioport,
483 				chunk_buffer, 64);
484 		if (ret)
485 			goto release;
486 
487 		firmware += chunk_size;
488 		size -= chunk_size;
489 	}
490 
491 	/* an empty block marks the end of the transfer */
492 	memset(chunk_buffer, 0, 4);
493 	ret = sdio_writesb(card->func, card->ioport, chunk_buffer, 64);
494 	if (ret)
495 		goto release;
496 
497 	lbs_deb_sdio("waiting for helper to boot...\n");
498 
499 	/* wait for the helper to boot by looking at the size register */
500 	timeout = jiffies + HZ;
501 	while (1) {
502 		u16 req_size;
503 
504 		req_size = sdio_readb(card->func, IF_SDIO_RD_BASE, &ret);
505 		if (ret)
506 			goto release;
507 
508 		req_size |= sdio_readb(card->func, IF_SDIO_RD_BASE + 1, &ret) << 8;
509 		if (ret)
510 			goto release;
511 
512 		if (req_size != 0)
513 			break;
514 
515 		if (time_after(jiffies, timeout)) {
516 			ret = -ETIMEDOUT;
517 			goto release;
518 		}
519 
520 		msleep(10);
521 	}
522 
523 	ret = 0;
524 
525 release:
526 	sdio_release_host(card->func);
527 	kfree(chunk_buffer);
528 
529 out:
530 	if (ret)
531 		pr_err("failed to load helper firmware\n");
532 
533 	return ret;
534 }
535 
536 static int if_sdio_prog_real(struct if_sdio_card *card,
537 				const struct firmware *fw)
538 {
539 	int ret;
540 	unsigned long timeout;
541 	u8 *chunk_buffer;
542 	u32 chunk_size;
543 	const u8 *firmware;
544 	size_t size, req_size;
545 
546 	chunk_buffer = kzalloc(512, GFP_KERNEL);
547 	if (!chunk_buffer) {
548 		ret = -ENOMEM;
549 		goto out;
550 	}
551 
552 	sdio_claim_host(card->func);
553 
554 	ret = sdio_set_block_size(card->func, 32);
555 	if (ret)
556 		goto release;
557 
558 	firmware = fw->data;
559 	size = fw->size;
560 
561 	while (size) {
562 		timeout = jiffies + HZ;
563 		while (1) {
564 			ret = if_sdio_wait_status(card, FW_DL_READY_STATUS);
565 			if (ret)
566 				goto release;
567 
568 			req_size = sdio_readb(card->func, IF_SDIO_RD_BASE,
569 					&ret);
570 			if (ret)
571 				goto release;
572 
573 			req_size |= sdio_readb(card->func, IF_SDIO_RD_BASE + 1,
574 					&ret) << 8;
575 			if (ret)
576 				goto release;
577 
578 			/*
579 			 * For SD8688 wait until the length is not 0, 1 or 2
580 			 * before downloading the first FW block,
581 			 * since BOOT code writes the register to indicate the
582 			 * helper/FW download winner,
583 			 * the value could be 1 or 2 (Func1 or Func2).
584 			 */
585 			if ((size != fw->size) || (req_size > 2))
586 				break;
587 			if (time_after(jiffies, timeout)) {
588 				ret = -ETIMEDOUT;
589 				goto release;
590 			}
591 			mdelay(1);
592 		}
593 
594 /*
595 		lbs_deb_sdio("firmware wants %d bytes\n", (int)req_size);
596 */
597 		if (req_size == 0) {
598 			lbs_deb_sdio("firmware helper gave up early\n");
599 			ret = -EIO;
600 			goto release;
601 		}
602 
603 		if (req_size & 0x01) {
604 			lbs_deb_sdio("firmware helper signalled error\n");
605 			ret = -EIO;
606 			goto release;
607 		}
608 
609 		if (req_size > size)
610 			req_size = size;
611 
612 		while (req_size) {
613 			chunk_size = min_t(size_t, req_size, 512);
614 
615 			memcpy(chunk_buffer, firmware, chunk_size);
616 /*
617 			lbs_deb_sdio("sending %d bytes (%d bytes) chunk\n",
618 				chunk_size, (chunk_size + 31) / 32 * 32);
619 */
620 			ret = sdio_writesb(card->func, card->ioport,
621 				chunk_buffer, roundup(chunk_size, 32));
622 			if (ret)
623 				goto release;
624 
625 			firmware += chunk_size;
626 			size -= chunk_size;
627 			req_size -= chunk_size;
628 		}
629 	}
630 
631 	ret = 0;
632 
633 	lbs_deb_sdio("waiting for firmware to boot...\n");
634 
635 	/* wait for the firmware to boot */
636 	timeout = jiffies + HZ;
637 	while (1) {
638 		u16 scratch;
639 
640 		scratch = if_sdio_read_scratch(card, &ret);
641 		if (ret)
642 			goto release;
643 
644 		if (scratch == IF_SDIO_FIRMWARE_OK)
645 			break;
646 
647 		if (time_after(jiffies, timeout)) {
648 			ret = -ETIMEDOUT;
649 			goto release;
650 		}
651 
652 		msleep(10);
653 	}
654 
655 	ret = 0;
656 
657 release:
658 	sdio_release_host(card->func);
659 	kfree(chunk_buffer);
660 
661 out:
662 	if (ret)
663 		pr_err("failed to load firmware\n");
664 
665 	return ret;
666 }
667 
668 static void if_sdio_do_prog_firmware(struct lbs_private *priv, int ret,
669 				     const struct firmware *helper,
670 				     const struct firmware *mainfw)
671 {
672 	struct if_sdio_card *card = priv->card;
673 
674 	if (ret) {
675 		pr_err("failed to find firmware (%d)\n", ret);
676 		return;
677 	}
678 
679 	ret = if_sdio_prog_helper(card, helper);
680 	if (ret)
681 		return;
682 
683 	lbs_deb_sdio("Helper firmware loaded\n");
684 
685 	ret = if_sdio_prog_real(card, mainfw);
686 	if (ret)
687 		return;
688 
689 	lbs_deb_sdio("Firmware loaded\n");
690 	if_sdio_finish_power_on(card);
691 }
692 
693 static int if_sdio_prog_firmware(struct if_sdio_card *card)
694 {
695 	int ret;
696 	u16 scratch;
697 
698 	/*
699 	 * Disable interrupts
700 	 */
701 	sdio_claim_host(card->func);
702 	sdio_writeb(card->func, 0x00, IF_SDIO_H_INT_MASK, &ret);
703 	sdio_release_host(card->func);
704 
705 	sdio_claim_host(card->func);
706 	scratch = if_sdio_read_scratch(card, &ret);
707 	sdio_release_host(card->func);
708 
709 	lbs_deb_sdio("firmware status = %#x\n", scratch);
710 	lbs_deb_sdio("scratch ret = %d\n", ret);
711 
712 	if (ret)
713 		goto out;
714 
715 
716 	/*
717 	 * The manual clearly describes that FEDC is the right code to use
718 	 * to detect firmware presence, but for SD8686 it is not that simple.
719 	 * Scratch is also used to store the RX packet length, so we lose
720 	 * the FEDC value early on. So we use a non-zero check in order
721 	 * to validate firmware presence.
722 	 * Additionally, the SD8686 in the Gumstix always has the high scratch
723 	 * bit set, even when the firmware is not loaded. So we have to
724 	 * exclude that from the test.
725 	 */
726 	if (scratch == IF_SDIO_FIRMWARE_OK) {
727 		lbs_deb_sdio("firmware already loaded\n");
728 		if_sdio_finish_power_on(card);
729 		return 0;
730 	} else if ((card->model == MODEL_8686) && (scratch & 0x7fff)) {
731 		lbs_deb_sdio("firmware may be running\n");
732 		if_sdio_finish_power_on(card);
733 		return 0;
734 	}
735 
736 	ret = lbs_get_firmware_async(card->priv, &card->func->dev, card->model,
737 				     fw_table, if_sdio_do_prog_firmware);
738 
739 out:
740 	return ret;
741 }
742 
743 /********************************************************************/
744 /* Power management                                                 */
745 /********************************************************************/
746 
747 /* Finish power on sequence (after firmware is loaded) */
748 static void if_sdio_finish_power_on(struct if_sdio_card *card)
749 {
750 	struct sdio_func *func = card->func;
751 	struct lbs_private *priv = card->priv;
752 	int ret;
753 
754 	sdio_claim_host(func);
755 	sdio_set_block_size(card->func, IF_SDIO_BLOCK_SIZE);
756 
757 	/*
758 	 * Get rx_unit if the chip is SD8688 or newer.
759 	 * SD8385 & SD8686 do not have rx_unit.
760 	 */
761 	if ((card->model != MODEL_8385)
762 			&& (card->model != MODEL_8686))
763 		card->rx_unit = if_sdio_read_rx_unit(card);
764 	else
765 		card->rx_unit = 0;
766 
767 	/*
768 	 * Set up the interrupt handler late.
769 	 *
770 	 * If we set it up earlier, the (buggy) hardware generates a spurious
771 	 * interrupt, even before the interrupt has been enabled, with
772 	 * CCCR_INTx = 0.
773 	 *
774 	 * We register the interrupt handler late so that we can handle any
775 	 * spurious interrupts, and also to avoid generation of that known
776 	 * spurious interrupt in the first place.
777 	 */
778 	ret = sdio_claim_irq(func, if_sdio_interrupt);
779 	if (ret)
780 		goto release;
781 
782 	/*
783 	 * Enable interrupts now that everything is set up
784 	 */
785 	sdio_writeb(func, 0x0f, IF_SDIO_H_INT_MASK, &ret);
786 	if (ret)
787 		goto release_irq;
788 
789 	sdio_release_host(func);
790 
791 	/* Set fw_ready before queuing any commands so that
792 	 * lbs_thread won't block from sending them to firmware.
793 	 */
794 	priv->fw_ready = 1;
795 
796 	/*
797 	 * FUNC_INIT is required for SD8688 WLAN/BT multiple functions
798 	 */
799 	if (card->model == MODEL_8688) {
800 		struct cmd_header cmd;
801 
802 		memset(&cmd, 0, sizeof(cmd));
803 
804 		lbs_deb_sdio("send function INIT command\n");
805 		if (__lbs_cmd(priv, CMD_FUNC_INIT, &cmd, sizeof(cmd),
806 				lbs_cmd_copyback, (unsigned long) &cmd))
807 			netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n");
808 	}
809 
810 	wake_up(&card->pwron_waitq);
811 
812 	if (!card->started) {
813 		ret = lbs_start_card(priv);
814 		if_sdio_power_off(card);
815 		if (ret == 0) {
816 			card->started = true;
817 			/* Tell PM core that we don't need the card to be
818 			 * powered now */
819 			pm_runtime_put(&func->dev);
820 		}
821 	}
822 
823 	return;
824 
825 release_irq:
826 	sdio_release_irq(func);
827 release:
828 	sdio_release_host(func);
829 }
830 
831 static int if_sdio_power_on(struct if_sdio_card *card)
832 {
833 	struct sdio_func *func = card->func;
834 	struct mmc_host *host = func->card->host;
835 	int ret;
836 
837 	sdio_claim_host(func);
838 
839 	ret = sdio_enable_func(func);
840 	if (ret)
841 		goto release;
842 
843 	/* For 1-bit transfers to the 8686 model, we need to enable the
844 	 * interrupt flag in the CCCR register. Set the MMC_QUIRK_LENIENT_FN0
845 	 * bit to allow access to non-vendor registers. */
846 	if ((card->model == MODEL_8686) &&
847 	    (host->caps & MMC_CAP_SDIO_IRQ) &&
848 	    (host->ios.bus_width == MMC_BUS_WIDTH_1)) {
849 		u8 reg;
850 
851 		func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
852 		reg = sdio_f0_readb(func, SDIO_CCCR_IF, &ret);
853 		if (ret)
854 			goto disable;
855 
856 		reg |= SDIO_BUS_ECSI;
857 		sdio_f0_writeb(func, reg, SDIO_CCCR_IF, &ret);
858 		if (ret)
859 			goto disable;
860 	}
861 
862 	card->ioport = sdio_readb(func, IF_SDIO_IOPORT, &ret);
863 	if (ret)
864 		goto disable;
865 
866 	card->ioport |= sdio_readb(func, IF_SDIO_IOPORT + 1, &ret) << 8;
867 	if (ret)
868 		goto disable;
869 
870 	card->ioport |= sdio_readb(func, IF_SDIO_IOPORT + 2, &ret) << 16;
871 	if (ret)
872 		goto disable;
873 
874 	sdio_release_host(func);
875 	ret = if_sdio_prog_firmware(card);
876 	if (ret) {
877 		sdio_claim_host(func);
878 		goto disable;
879 	}
880 
881 	return 0;
882 
883 disable:
884 	sdio_disable_func(func);
885 release:
886 	sdio_release_host(func);
887 	return ret;
888 }
889 
890 static int if_sdio_power_off(struct if_sdio_card *card)
891 {
892 	struct sdio_func *func = card->func;
893 	struct lbs_private *priv = card->priv;
894 
895 	priv->fw_ready = 0;
896 
897 	sdio_claim_host(func);
898 	sdio_release_irq(func);
899 	sdio_disable_func(func);
900 	sdio_release_host(func);
901 	return 0;
902 }
903 
904 
905 /*******************************************************************/
906 /* Libertas callbacks                                              */
907 /*******************************************************************/
908 
909 static int if_sdio_host_to_card(struct lbs_private *priv,
910 		u8 type, u8 *buf, u16 nb)
911 {
912 	int ret;
913 	struct if_sdio_card *card;
914 	struct if_sdio_packet *packet;
915 	u16 size;
916 	unsigned long flags;
917 
918 	card = priv->card;
919 
920 	if (nb > (65536 - sizeof(struct if_sdio_packet) - 4)) {
921 		ret = -EINVAL;
922 		goto out;
923 	}
924 
925 	/*
926 	 * The transfer must be in one transaction or the firmware
927 	 * goes suicidal. There's no way to guarantee that for all
928 	 * controllers, but we can at least try.
929 	 */
930 	size = sdio_align_size(card->func, nb + 4);
931 
932 	packet = kzalloc(sizeof(struct if_sdio_packet) + size,
933 			GFP_ATOMIC);
934 	if (!packet) {
935 		ret = -ENOMEM;
936 		goto out;
937 	}
938 
939 	packet->nb = size;
940 
941 	/*
942 	 * SDIO specific header.
943 	 */
944 	packet->buffer[0] = (nb + 4) & 0xff;
945 	packet->buffer[1] = ((nb + 4) >> 8) & 0xff;
946 	packet->buffer[2] = type;
947 	packet->buffer[3] = 0;
948 
949 	memcpy(packet->buffer + 4, buf, nb);
950 
951 	spin_lock_irqsave(&card->lock, flags);
952 
953 	list_add_tail(&packet->list, &card->packets);
954 
955 	switch (type) {
956 	case MVMS_CMD:
957 		priv->dnld_sent = DNLD_CMD_SENT;
958 		break;
959 	case MVMS_DAT:
960 		priv->dnld_sent = DNLD_DATA_SENT;
961 		break;
962 	default:
963 		lbs_deb_sdio("unknown packet type %d\n", (int)type);
964 	}
965 
966 	spin_unlock_irqrestore(&card->lock, flags);
967 
968 	queue_work(card->workqueue, &card->packet_worker);
969 
970 	ret = 0;
971 
972 out:
973 	return ret;
974 }
975 
976 static int if_sdio_enter_deep_sleep(struct lbs_private *priv)
977 {
978 	int ret;
979 	struct cmd_header cmd;
980 
981 	memset(&cmd, 0, sizeof(cmd));
982 
983 	lbs_deb_sdio("send DEEP_SLEEP command\n");
984 	ret = __lbs_cmd(priv, CMD_802_11_DEEP_SLEEP, &cmd, sizeof(cmd),
985 			lbs_cmd_copyback, (unsigned long) &cmd);
986 	if (ret)
987 		netdev_err(priv->dev, "DEEP_SLEEP cmd failed\n");
988 
989 	mdelay(200);
990 	return ret;
991 }
992 
993 static int if_sdio_exit_deep_sleep(struct lbs_private *priv)
994 {
995 	struct if_sdio_card *card = priv->card;
996 	int ret = -1;
997 
998 	sdio_claim_host(card->func);
999 
1000 	sdio_writeb(card->func, HOST_POWER_UP, CONFIGURATION_REG, &ret);
1001 	if (ret)
1002 		netdev_err(priv->dev, "sdio_writeb failed!\n");
1003 
1004 	sdio_release_host(card->func);
1005 
1006 	return ret;
1007 }
1008 
1009 static int if_sdio_reset_deep_sleep_wakeup(struct lbs_private *priv)
1010 {
1011 	struct if_sdio_card *card = priv->card;
1012 	int ret = -1;
1013 
1014 	sdio_claim_host(card->func);
1015 
1016 	sdio_writeb(card->func, 0, CONFIGURATION_REG, &ret);
1017 	if (ret)
1018 		netdev_err(priv->dev, "sdio_writeb failed!\n");
1019 
1020 	sdio_release_host(card->func);
1021 
1022 	return ret;
1023 
1024 }
1025 
1026 static void if_sdio_reset_card_worker(struct work_struct *work)
1027 {
1028 	int ret;
1029 	const char *name;
1030 	struct device *dev;
1031 	struct if_sdio_card *card;
1032 	struct mmc_host *reset_host;
1033 
1034 	card = container_of(work, struct if_sdio_card, reset_worker);
1035 	reset_host = card->func->card->host;
1036 	name = card->priv->dev->name;
1037 	dev = &card->func->dev;
1038 
1039 	/*
1040 	 * The actual reset operation must be run outside of lbs_thread. This
1041 	 * is because mmc_remove_host() will cause the device to be instantly
1042 	 * destroyed, and the libertas driver then needs to end lbs_thread,
1043 	 * leading to a deadlock.
1044 	 *
1045 	 * We run it in a workqueue totally independent from the if_sdio_card
1046 	 * instance for that reason.
1047 	 */
1048 
1049 	dev_info(dev, "resetting card %s...", name);
1050 	mmc_remove_host(reset_host);
1051 	ret = mmc_add_host(reset_host);
1052 	if (ret)
1053 		dev_err(dev, "%s: can't add mmc host, error %d\n", name, ret);
1054 }
1055 
1056 static void if_sdio_reset_card(struct lbs_private *priv)
1057 {
1058 	struct if_sdio_card *card = priv->card;
1059 
1060 	if (!work_pending(&card->reset_worker))
1061 		schedule_work(&card->reset_worker);
1062 }
1063 
1064 static int if_sdio_power_save(struct lbs_private *priv)
1065 {
1066 	struct if_sdio_card *card = priv->card;
1067 	int ret;
1068 
1069 	flush_workqueue(card->workqueue);
1070 
1071 	ret = if_sdio_power_off(card);
1072 
1073 	/* Let runtime PM know the card is powered off */
1074 	pm_runtime_put_sync(&card->func->dev);
1075 
1076 	return ret;
1077 }
1078 
1079 static int if_sdio_power_restore(struct lbs_private *priv)
1080 {
1081 	struct if_sdio_card *card = priv->card;
1082 	int r;
1083 
1084 	/* Make sure the card will not be powered off by runtime PM */
1085 	pm_runtime_get_sync(&card->func->dev);
1086 
1087 	r = if_sdio_power_on(card);
1088 	if (r)
1089 		return r;
1090 
1091 	wait_event(card->pwron_waitq, priv->fw_ready);
1092 	return 0;
1093 }
1094 
1095 
1096 /*******************************************************************/
1097 /* SDIO callbacks                                                  */
1098 /*******************************************************************/
1099 
1100 static void if_sdio_interrupt(struct sdio_func *func)
1101 {
1102 	int ret;
1103 	struct if_sdio_card *card;
1104 	u8 cause;
1105 
1106 	card = sdio_get_drvdata(func);
1107 
1108 	cause = sdio_readb(card->func, IF_SDIO_H_INT_STATUS, &ret);
1109 	if (ret || !cause)
1110 		return;
1111 
1112 	lbs_deb_sdio("interrupt: 0x%X\n", (unsigned)cause);
1113 
1114 	sdio_writeb(card->func, ~cause, IF_SDIO_H_INT_STATUS, &ret);
1115 	if (ret)
1116 		return;
1117 
1118 	/*
1119 	 * Ignore the define name, this really means the card has
1120 	 * successfully received the command.
1121 	 */
1122 	card->priv->is_activity_detected = 1;
1123 	if (cause & IF_SDIO_H_INT_DNLD)
1124 		lbs_host_to_card_done(card->priv);
1125 
1126 
1127 	if (cause & IF_SDIO_H_INT_UPLD) {
1128 		ret = if_sdio_card_to_host(card);
1129 		if (ret)
1130 			return;
1131 	}
1132 }
1133 
1134 static int if_sdio_probe(struct sdio_func *func,
1135 		const struct sdio_device_id *id)
1136 {
1137 	struct if_sdio_card *card;
1138 	struct lbs_private *priv;
1139 	int ret, i;
1140 	unsigned int model;
1141 	struct if_sdio_packet *packet, *tmp;
1142 
1143 	for (i = 0;i < func->card->num_info;i++) {
1144 		if (sscanf(func->card->info[i],
1145 				"802.11 SDIO ID: %x", &model) == 1)
1146 			break;
1147 		if (sscanf(func->card->info[i],
1148 				"ID: %x", &model) == 1)
1149 			break;
1150 		if (!strcmp(func->card->info[i], "IBIS Wireless SDIO Card")) {
1151 			model = MODEL_8385;
1152 			break;
1153 		}
1154 	}
1155 
1156 	if (i == func->card->num_info) {
1157 		pr_err("unable to identify card model\n");
1158 		return -ENODEV;
1159 	}
1160 
1161 	card = kzalloc(sizeof(struct if_sdio_card), GFP_KERNEL);
1162 	if (!card)
1163 		return -ENOMEM;
1164 
1165 	card->func = func;
1166 	card->model = model;
1167 
1168 	switch (card->model) {
1169 	case MODEL_8385:
1170 		card->scratch_reg = IF_SDIO_SCRATCH_OLD;
1171 		break;
1172 	case MODEL_8686:
1173 		card->scratch_reg = IF_SDIO_SCRATCH;
1174 		break;
1175 	case MODEL_8688:
1176 	default: /* for newer chipsets */
1177 		card->scratch_reg = IF_SDIO_FW_STATUS;
1178 		break;
1179 	}
1180 
1181 	spin_lock_init(&card->lock);
1182 	INIT_LIST_HEAD(&card->packets);
1183 
1184 	card->workqueue = alloc_workqueue("libertas_sdio", WQ_MEM_RECLAIM, 0);
1185 	if (unlikely(!card->workqueue)) {
1186 		ret = -ENOMEM;
1187 		goto err_queue;
1188 	}
1189 
1190 	INIT_WORK(&card->reset_worker, if_sdio_reset_card_worker);
1191 	INIT_WORK(&card->packet_worker, if_sdio_host_to_card_worker);
1192 	init_waitqueue_head(&card->pwron_waitq);
1193 
1194 	/* Check if we support this card */
1195 	for (i = 0; i < ARRAY_SIZE(fw_table); i++) {
1196 		if (card->model == fw_table[i].model)
1197 			break;
1198 	}
1199 	if (i == ARRAY_SIZE(fw_table)) {
1200 		pr_err("unknown card model 0x%x\n", card->model);
1201 		ret = -ENODEV;
1202 		goto free;
1203 	}
1204 
1205 	sdio_set_drvdata(func, card);
1206 
1207 	lbs_deb_sdio("class = 0x%X, vendor = 0x%X, "
1208 			"device = 0x%X, model = 0x%X, ioport = 0x%X\n",
1209 			func->class, func->vendor, func->device,
1210 			model, (unsigned)card->ioport);
1211 
1212 
1213 	priv = lbs_add_card(card, &func->dev);
1214 	if (IS_ERR(priv)) {
1215 		ret = PTR_ERR(priv);
1216 		goto free;
1217 	}
1218 
1219 	card->priv = priv;
1220 
1221 	priv->card = card;
1222 	priv->hw_host_to_card = if_sdio_host_to_card;
1223 	priv->enter_deep_sleep = if_sdio_enter_deep_sleep;
1224 	priv->exit_deep_sleep = if_sdio_exit_deep_sleep;
1225 	priv->reset_deep_sleep_wakeup = if_sdio_reset_deep_sleep_wakeup;
1226 	priv->reset_card = if_sdio_reset_card;
1227 	priv->power_save = if_sdio_power_save;
1228 	priv->power_restore = if_sdio_power_restore;
1229 	priv->is_polling = !(func->card->host->caps & MMC_CAP_SDIO_IRQ);
1230 	ret = if_sdio_power_on(card);
1231 	if (ret)
1232 		goto err_activate_card;
1233 
1234 out:
1235 	return ret;
1236 
1237 err_activate_card:
1238 	flush_workqueue(card->workqueue);
1239 	lbs_remove_card(priv);
1240 free:
1241 	cancel_work_sync(&card->packet_worker);
1242 	cancel_work_sync(&card->reset_worker);
1243 	destroy_workqueue(card->workqueue);
1244 err_queue:
1245 	list_for_each_entry_safe(packet, tmp, &card->packets, list)
1246 		kfree(packet);
1247 
1248 	kfree(card);
1249 
1250 	goto out;
1251 }
1252 
1253 static void if_sdio_remove(struct sdio_func *func)
1254 {
1255 	struct if_sdio_card *card;
1256 	struct if_sdio_packet *packet, *tmp;
1257 
1258 	card = sdio_get_drvdata(func);
1259 
1260 	/* Undo decrement done above in if_sdio_probe */
1261 	pm_runtime_get_noresume(&func->dev);
1262 
1263 	if (user_rmmod && (card->model == MODEL_8688)) {
1264 		/*
1265 		 * FUNC_SHUTDOWN is required for SD8688 WLAN/BT
1266 		 * multiple functions
1267 		 */
1268 		struct cmd_header cmd;
1269 
1270 		memset(&cmd, 0, sizeof(cmd));
1271 
1272 		lbs_deb_sdio("send function SHUTDOWN command\n");
1273 		if (__lbs_cmd(card->priv, CMD_FUNC_SHUTDOWN,
1274 				&cmd, sizeof(cmd), lbs_cmd_copyback,
1275 				(unsigned long) &cmd))
1276 			pr_alert("CMD_FUNC_SHUTDOWN cmd failed\n");
1277 	}
1278 
1279 
1280 	lbs_deb_sdio("call remove card\n");
1281 	lbs_stop_card(card->priv);
1282 	lbs_remove_card(card->priv);
1283 
1284 	cancel_work_sync(&card->packet_worker);
1285 	cancel_work_sync(&card->reset_worker);
1286 	destroy_workqueue(card->workqueue);
1287 
1288 	list_for_each_entry_safe(packet, tmp, &card->packets, list)
1289 		kfree(packet);
1290 
1291 	kfree(card);
1292 }
1293 
1294 static int if_sdio_suspend(struct device *dev)
1295 {
1296 	struct sdio_func *func = dev_to_sdio_func(dev);
1297 	struct if_sdio_card *card = sdio_get_drvdata(func);
1298 	struct lbs_private *priv = card->priv;
1299 	int ret;
1300 
1301 	mmc_pm_flag_t flags = sdio_get_host_pm_caps(func);
1302 	priv->power_up_on_resume = false;
1303 
1304 	/* If we're powered off anyway, just let the mmc layer remove the
1305 	 * card. */
1306 	if (!lbs_iface_active(priv)) {
1307 		if (priv->fw_ready) {
1308 			priv->power_up_on_resume = true;
1309 			if_sdio_power_off(card);
1310 		}
1311 
1312 		return 0;
1313 	}
1314 
1315 	dev_info(dev, "%s: suspend: PM flags = 0x%x\n",
1316 		 sdio_func_id(func), flags);
1317 
1318 	/* If we aren't being asked to wake on anything, we should bail out
1319 	 * and let the SD stack power down the card.
1320 	 */
1321 	if (priv->wol_criteria == EHS_REMOVE_WAKEUP) {
1322 		dev_info(dev, "Suspend without wake params -- powering down card\n");
1323 		if (priv->fw_ready) {
1324 			ret = lbs_suspend(priv);
1325 			if (ret)
1326 				return ret;
1327 
1328 			priv->power_up_on_resume = true;
1329 			if_sdio_power_off(card);
1330 		}
1331 
1332 		return 0;
1333 	}
1334 
1335 	if (!(flags & MMC_PM_KEEP_POWER)) {
1336 		dev_err(dev, "%s: cannot remain alive while host is suspended\n",
1337 			sdio_func_id(func));
1338 		return -ENOSYS;
1339 	}
1340 
1341 	ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
1342 	if (ret)
1343 		return ret;
1344 
1345 	ret = lbs_suspend(priv);
1346 	if (ret)
1347 		return ret;
1348 
1349 	return sdio_set_host_pm_flags(func, MMC_PM_WAKE_SDIO_IRQ);
1350 }
1351 
1352 static int if_sdio_resume(struct device *dev)
1353 {
1354 	struct sdio_func *func = dev_to_sdio_func(dev);
1355 	struct if_sdio_card *card = sdio_get_drvdata(func);
1356 	int ret;
1357 
1358 	dev_info(dev, "%s: resume: we're back\n", sdio_func_id(func));
1359 
1360 	if (card->priv->power_up_on_resume) {
1361 		if_sdio_power_on(card);
1362 		wait_event(card->pwron_waitq, card->priv->fw_ready);
1363 	}
1364 
1365 	ret = lbs_resume(card->priv);
1366 
1367 	return ret;
1368 }
1369 
1370 static const struct dev_pm_ops if_sdio_pm_ops = {
1371 	.suspend	= if_sdio_suspend,
1372 	.resume		= if_sdio_resume,
1373 };
1374 
1375 static struct sdio_driver if_sdio_driver = {
1376 	.name		= "libertas_sdio",
1377 	.id_table	= if_sdio_ids,
1378 	.probe		= if_sdio_probe,
1379 	.remove		= if_sdio_remove,
1380 	.drv = {
1381 		.pm = &if_sdio_pm_ops,
1382 	},
1383 };
1384 
1385 /*******************************************************************/
1386 /* Module functions                                                */
1387 /*******************************************************************/
1388 
1389 static int __init if_sdio_init_module(void)
1390 {
1391 	int ret = 0;
1392 
1393 	printk(KERN_INFO "libertas_sdio: Libertas SDIO driver\n");
1394 	printk(KERN_INFO "libertas_sdio: Copyright Pierre Ossman\n");
1395 
1396 	ret = sdio_register_driver(&if_sdio_driver);
1397 
1398 	/* Clear the flag in case user removes the card. */
1399 	user_rmmod = 0;
1400 
1401 	return ret;
1402 }
1403 
1404 static void __exit if_sdio_exit_module(void)
1405 {
1406 	/* Set the flag as user is removing this module. */
1407 	user_rmmod = 1;
1408 
1409 	sdio_unregister_driver(&if_sdio_driver);
1410 }
1411 
1412 module_init(if_sdio_init_module);
1413 module_exit(if_sdio_exit_module);
1414 
1415 MODULE_DESCRIPTION("Libertas SDIO WLAN Driver");
1416 MODULE_AUTHOR("Pierre Ossman");
1417 MODULE_LICENSE("GPL");
1418