2 * Marvell Wireless LAN device driver: PCIE specific handling
4 * Copyright (C) 2011, Marvell International Ltd.
6 * This software file (the "File") is distributed by Marvell International
7 * Ltd. under the terms of the GNU General Public License Version 2, June 1991
8 * (the "License"). You may use, redistribute and/or modify this File in
9 * accordance with the terms and conditions of the License, a copy of which
10 * is available by writing to the Free Software Foundation, Inc.,
11 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
12 * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
14 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
16 * ARE EXPRESSLY DISCLAIMED. The License provides additional details about
17 * this warranty disclaimer.
20 #include <linux/firmware.h>
31 #define PCIE_VERSION "1.0"
32 #define DRV_NAME "Marvell mwifiex PCIe"
36 static struct mwifiex_if_ops pcie_ops;
38 static struct semaphore add_remove_card_sem;
39 static int mwifiex_pcie_enable_host_int(struct mwifiex_adapter *adapter);
40 static int mwifiex_pcie_resume(struct pci_dev *pdev);
43 mwifiex_map_pci_memory(struct mwifiex_adapter *adapter, struct sk_buff *skb,
46 struct pcie_service_card *card = adapter->card;
49 buf_pa = pci_map_single(card->dev, skb->data, size, flags);
50 if (pci_dma_mapping_error(card->dev, buf_pa)) {
51 dev_err(adapter->dev, "failed to map pci memory!\n");
54 memcpy(skb->cb, &buf_pa, sizeof(dma_addr_t));
59 * This function reads sleep cookie and checks if FW is ready
61 static bool mwifiex_pcie_ok_to_access_hw(struct mwifiex_adapter *adapter)
64 struct pcie_service_card *card = adapter->card;
66 if (card->sleep_cookie_vbase) {
67 cookie_addr = (u32 *)card->sleep_cookie_vbase;
68 dev_dbg(adapter->dev, "info: ACCESS_HW: sleep cookie=0x%x\n",
70 if (*cookie_addr == FW_AWAKE_COOKIE)
78 * This function probes an mwifiex device and registers it. It allocates
79 * the card structure, enables PCIE function number and initiates the
80 * device registration and initialization procedure by adding a logical
83 static int mwifiex_pcie_probe(struct pci_dev *pdev,
84 const struct pci_device_id *ent)
86 struct pcie_service_card *card;
88 pr_debug("info: vendor=0x%4.04X device=0x%4.04X rev=%d\n",
89 pdev->vendor, pdev->device, pdev->revision);
91 card = kzalloc(sizeof(struct pcie_service_card), GFP_KERNEL);
97 if (mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops,
99 pr_err("%s failed\n", __func__);
108 * This function removes the interface and frees up the card structure.
110 static void mwifiex_pcie_remove(struct pci_dev *pdev)
112 struct pcie_service_card *card;
113 struct mwifiex_adapter *adapter;
114 struct mwifiex_private *priv;
117 card = pci_get_drvdata(pdev);
121 adapter = card->adapter;
122 if (!adapter || !adapter->priv_num)
125 /* In case driver is removed when asynchronous FW load is in progress */
126 wait_for_completion(&adapter->fw_load);
130 if (adapter->is_suspended)
131 mwifiex_pcie_resume(pdev);
134 for (i = 0; i < adapter->priv_num; i++)
135 if ((GET_BSS_ROLE(adapter->priv[i]) ==
136 MWIFIEX_BSS_ROLE_STA) &&
137 adapter->priv[i]->media_connected)
138 mwifiex_deauthenticate(adapter->priv[i], NULL);
140 priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
142 mwifiex_disable_auto_ds(priv);
144 mwifiex_init_shutdown_fw(priv, MWIFIEX_FUNC_SHUTDOWN);
147 mwifiex_remove_card(card->adapter, &add_remove_card_sem);
152 * Kernel needs to suspend all functions separately. Therefore all
153 * registered functions must have drivers with suspend and resume
154 * methods. Failing that the kernel simply removes the whole card.
156 * If already not suspended, this function allocates and sends a host
157 * sleep activate request to the firmware and turns off the traffic.
159 static int mwifiex_pcie_suspend(struct pci_dev *pdev, pm_message_t state)
161 struct mwifiex_adapter *adapter;
162 struct pcie_service_card *card;
166 card = (struct pcie_service_card *) pci_get_drvdata(pdev);
167 if (!card || card->adapter) {
168 pr_err("Card or adapter structure is not valid\n");
172 pr_err("PCIE device is not specified\n");
176 adapter = card->adapter;
178 hs_actived = mwifiex_enable_hs(adapter);
180 /* Indicate device suspended */
181 adapter->is_suspended = true;
183 for (i = 0; i < adapter->priv_num; i++)
184 netif_carrier_off(adapter->priv[i]->netdev);
190 * Kernel needs to suspend all functions separately. Therefore all
191 * registered functions must have drivers with suspend and resume
192 * methods. Failing that the kernel simply removes the whole card.
194 * If already not resumed, this function turns on the traffic and
195 * sends a host sleep cancel request to the firmware.
197 static int mwifiex_pcie_resume(struct pci_dev *pdev)
199 struct mwifiex_adapter *adapter;
200 struct pcie_service_card *card;
204 card = (struct pcie_service_card *) pci_get_drvdata(pdev);
205 if (!card || !card->adapter) {
206 pr_err("Card or adapter structure is not valid\n");
210 pr_err("PCIE device is not specified\n");
214 adapter = card->adapter;
216 if (!adapter->is_suspended) {
217 dev_warn(adapter->dev, "Device already resumed\n");
221 adapter->is_suspended = false;
223 for (i = 0; i < adapter->priv_num; i++)
224 if (adapter->priv[i]->media_connected)
225 netif_carrier_on(adapter->priv[i]->netdev);
227 mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA),
233 #define PCIE_VENDOR_ID_MARVELL (0x11ab)
234 #define PCIE_DEVICE_ID_MARVELL_88W8766P (0x2b30)
236 static DEFINE_PCI_DEVICE_TABLE(mwifiex_ids) = {
238 PCIE_VENDOR_ID_MARVELL, PCIE_DEVICE_ID_MARVELL_88W8766P,
239 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
244 MODULE_DEVICE_TABLE(pci, mwifiex_ids);
246 /* PCI Device Driver */
247 static struct pci_driver __refdata mwifiex_pcie = {
248 .name = "mwifiex_pcie",
249 .id_table = mwifiex_ids,
250 .probe = mwifiex_pcie_probe,
251 .remove = mwifiex_pcie_remove,
253 /* Power Management Hooks */
254 .suspend = mwifiex_pcie_suspend,
255 .resume = mwifiex_pcie_resume,
260 * This function writes data into PCIE card register.
262 static int mwifiex_write_reg(struct mwifiex_adapter *adapter, int reg, u32 data)
264 struct pcie_service_card *card = adapter->card;
266 iowrite32(data, card->pci_mmap1 + reg);
272 * This function reads data from PCIE card register.
274 static int mwifiex_read_reg(struct mwifiex_adapter *adapter, int reg, u32 *data)
276 struct pcie_service_card *card = adapter->card;
278 *data = ioread32(card->pci_mmap1 + reg);
284 * This function wakes up the card.
286 * A host power up command is written to the card configuration
287 * register to wake up the card.
289 static int mwifiex_pm_wakeup_card(struct mwifiex_adapter *adapter)
293 while (mwifiex_pcie_ok_to_access_hw(adapter)) {
295 usleep_range(10, 20);
301 dev_dbg(adapter->dev, "event: Wakeup device...\n");
303 /* Enable interrupts or any chip access will wakeup device */
304 if (mwifiex_write_reg(adapter, PCIE_HOST_INT_MASK, HOST_INTR_MASK)) {
305 dev_warn(adapter->dev, "Enable host interrupt failed\n");
309 dev_dbg(adapter->dev, "PCIE wakeup: Setting PS_STATE_AWAKE\n");
310 adapter->ps_state = PS_STATE_AWAKE;
316 * This function is called after the card has woken up.
318 * The card configuration register is reset.
320 static int mwifiex_pm_wakeup_card_complete(struct mwifiex_adapter *adapter)
322 dev_dbg(adapter->dev, "cmd: Wakeup device completed\n");
328 * This function disables the host interrupt.
330 * The host interrupt mask is read, the disable bit is reset and
331 * written back to the card host interrupt mask register.
333 static int mwifiex_pcie_disable_host_int(struct mwifiex_adapter *adapter)
335 if (mwifiex_pcie_ok_to_access_hw(adapter)) {
336 if (mwifiex_write_reg(adapter, PCIE_HOST_INT_MASK,
338 dev_warn(adapter->dev, "Disable host interrupt failed\n");
347 * This function enables the host interrupt.
349 * The host interrupt enable mask is written to the card
350 * host interrupt mask register.
352 static int mwifiex_pcie_enable_host_int(struct mwifiex_adapter *adapter)
354 if (mwifiex_pcie_ok_to_access_hw(adapter)) {
355 /* Simply write the mask to the register */
356 if (mwifiex_write_reg(adapter, PCIE_HOST_INT_MASK,
358 dev_warn(adapter->dev, "Enable host interrupt failed\n");
367 * This function creates buffer descriptor ring for TX
369 static int mwifiex_pcie_create_txbd_ring(struct mwifiex_adapter *adapter)
371 struct pcie_service_card *card = adapter->card;
375 * driver maintaines the write pointer and firmware maintaines the read
376 * pointer. The write pointer starts at 0 (zero) while the read pointer
377 * starts at zero with rollover bit set
379 card->txbd_wrptr = 0;
380 card->txbd_rdptr |= MWIFIEX_BD_FLAG_ROLLOVER_IND;
382 /* allocate shared memory for the BD ring and divide the same in to
383 several descriptors */
384 card->txbd_ring_size = sizeof(struct mwifiex_pcie_buf_desc) *
386 dev_dbg(adapter->dev, "info: txbd_ring: Allocating %d bytes\n",
387 card->txbd_ring_size);
388 card->txbd_ring_vbase = pci_alloc_consistent(card->dev,
389 card->txbd_ring_size,
390 &card->txbd_ring_pbase);
391 if (!card->txbd_ring_vbase) {
392 dev_err(adapter->dev,
393 "allocate consistent memory (%d bytes) failed!\n",
394 card->txbd_ring_size);
397 dev_dbg(adapter->dev,
398 "info: txbd_ring - base: %p, pbase: %#x:%x, len: %x\n",
399 card->txbd_ring_vbase, (unsigned int)card->txbd_ring_pbase,
400 (u32)((u64)card->txbd_ring_pbase >> 32), card->txbd_ring_size);
402 for (i = 0; i < MWIFIEX_MAX_TXRX_BD; i++) {
403 card->txbd_ring[i] = (struct mwifiex_pcie_buf_desc *)
404 (card->txbd_ring_vbase +
405 (sizeof(struct mwifiex_pcie_buf_desc)
408 card->tx_buf_list[i] = NULL;
409 card->txbd_ring[i]->paddr = 0;
410 card->txbd_ring[i]->len = 0;
411 card->txbd_ring[i]->flags = 0;
417 static int mwifiex_pcie_delete_txbd_ring(struct mwifiex_adapter *adapter)
419 struct pcie_service_card *card = adapter->card;
423 for (i = 0; i < MWIFIEX_MAX_TXRX_BD; i++) {
424 if (card->tx_buf_list[i]) {
425 skb = card->tx_buf_list[i];
426 pci_unmap_single(card->dev, card->txbd_ring[i]->paddr,
427 skb->len, PCI_DMA_TODEVICE);
428 dev_kfree_skb_any(skb);
430 card->tx_buf_list[i] = NULL;
431 card->txbd_ring[i]->paddr = 0;
432 card->txbd_ring[i]->len = 0;
433 card->txbd_ring[i]->flags = 0;
434 card->txbd_ring[i] = NULL;
437 if (card->txbd_ring_vbase)
438 pci_free_consistent(card->dev, card->txbd_ring_size,
439 card->txbd_ring_vbase,
440 card->txbd_ring_pbase);
441 card->txbd_ring_size = 0;
442 card->txbd_wrptr = 0;
443 card->txbd_rdptr = 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND;
444 card->txbd_ring_vbase = NULL;
445 card->txbd_ring_pbase = 0;
451 * This function creates buffer descriptor ring for RX
453 static int mwifiex_pcie_create_rxbd_ring(struct mwifiex_adapter *adapter)
455 struct pcie_service_card *card = adapter->card;
461 * driver maintaines the read pointer and firmware maintaines the write
462 * pointer. The write pointer starts at 0 (zero) while the read pointer
463 * starts at zero with rollover bit set
465 card->rxbd_wrptr = 0;
466 card->rxbd_rdptr |= MWIFIEX_BD_FLAG_ROLLOVER_IND;
468 card->rxbd_ring_size = sizeof(struct mwifiex_pcie_buf_desc) *
470 dev_dbg(adapter->dev, "info: rxbd_ring: Allocating %d bytes\n",
471 card->rxbd_ring_size);
472 card->rxbd_ring_vbase = pci_alloc_consistent(card->dev,
473 card->rxbd_ring_size,
474 &card->rxbd_ring_pbase);
475 if (!card->rxbd_ring_vbase) {
476 dev_err(adapter->dev,
477 "allocate consistent memory (%d bytes) failed!\n",
478 card->rxbd_ring_size);
482 dev_dbg(adapter->dev,
483 "info: rxbd_ring - base: %p, pbase: %#x:%x, len: %#x\n",
484 card->rxbd_ring_vbase, (u32)card->rxbd_ring_pbase,
485 (u32)((u64)card->rxbd_ring_pbase >> 32),
486 card->rxbd_ring_size);
488 for (i = 0; i < MWIFIEX_MAX_TXRX_BD; i++) {
489 card->rxbd_ring[i] = (struct mwifiex_pcie_buf_desc *)
490 (card->rxbd_ring_vbase +
491 (sizeof(struct mwifiex_pcie_buf_desc)
494 /* Allocate skb here so that firmware can DMA data from it */
495 skb = dev_alloc_skb(MWIFIEX_RX_DATA_BUF_SIZE);
497 dev_err(adapter->dev,
498 "Unable to allocate skb for RX ring.\n");
499 kfree(card->rxbd_ring_vbase);
502 if (mwifiex_map_pci_memory(adapter, skb,
503 MWIFIEX_RX_DATA_BUF_SIZE,
507 MWIFIEX_SKB_PACB(skb, &buf_pa);
509 dev_dbg(adapter->dev, "info: RX ring: add new skb base: %p, "
510 "buf_base: %p, buf_pbase: %#x:%x, buf_len: %#x\n",
511 skb, skb->data, (u32)buf_pa, (u32)((u64)buf_pa >> 32),
514 card->rx_buf_list[i] = skb;
515 card->rxbd_ring[i]->paddr = buf_pa;
516 card->rxbd_ring[i]->len = (u16)skb->len;
517 card->rxbd_ring[i]->flags = 0;
524 * This function deletes Buffer descriptor ring for RX
526 static int mwifiex_pcie_delete_rxbd_ring(struct mwifiex_adapter *adapter)
528 struct pcie_service_card *card = adapter->card;
532 for (i = 0; i < MWIFIEX_MAX_TXRX_BD; i++) {
533 if (card->rx_buf_list[i]) {
534 skb = card->rx_buf_list[i];
535 pci_unmap_single(card->dev, card->rxbd_ring[i]->paddr ,
536 MWIFIEX_RX_DATA_BUF_SIZE,
538 dev_kfree_skb_any(skb);
540 card->rx_buf_list[i] = NULL;
541 card->rxbd_ring[i]->paddr = 0;
542 card->rxbd_ring[i]->len = 0;
543 card->rxbd_ring[i]->flags = 0;
544 card->rxbd_ring[i] = NULL;
547 if (card->rxbd_ring_vbase)
548 pci_free_consistent(card->dev, card->rxbd_ring_size,
549 card->rxbd_ring_vbase,
550 card->rxbd_ring_pbase);
551 card->rxbd_ring_size = 0;
552 card->rxbd_wrptr = 0;
553 card->rxbd_rdptr = 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND;
554 card->rxbd_ring_vbase = NULL;
555 card->rxbd_ring_pbase = 0;
561 * This function creates buffer descriptor ring for Events
563 static int mwifiex_pcie_create_evtbd_ring(struct mwifiex_adapter *adapter)
565 struct pcie_service_card *card = adapter->card;
571 * driver maintaines the read pointer and firmware maintaines the write
572 * pointer. The write pointer starts at 0 (zero) while the read pointer
573 * starts at zero with rollover bit set
575 card->evtbd_wrptr = 0;
576 card->evtbd_rdptr |= MWIFIEX_BD_FLAG_ROLLOVER_IND;
578 card->evtbd_ring_size = sizeof(struct mwifiex_pcie_buf_desc) *
580 dev_dbg(adapter->dev, "info: evtbd_ring: Allocating %d bytes\n",
581 card->evtbd_ring_size);
582 card->evtbd_ring_vbase = pci_alloc_consistent(card->dev,
583 card->evtbd_ring_size,
584 &card->evtbd_ring_pbase);
585 if (!card->evtbd_ring_vbase) {
586 dev_err(adapter->dev,
587 "allocate consistent memory (%d bytes) failed!\n",
588 card->evtbd_ring_size);
592 dev_dbg(adapter->dev,
593 "info: CMDRSP/EVT bd_ring - base: %p pbase: %#x:%x len: %#x\n",
594 card->evtbd_ring_vbase, (u32)card->evtbd_ring_pbase,
595 (u32)((u64)card->evtbd_ring_pbase >> 32),
596 card->evtbd_ring_size);
598 for (i = 0; i < MWIFIEX_MAX_EVT_BD; i++) {
599 card->evtbd_ring[i] = (struct mwifiex_pcie_buf_desc *)
600 (card->evtbd_ring_vbase +
601 (sizeof(struct mwifiex_pcie_buf_desc)
604 /* Allocate skb here so that firmware can DMA data from it */
605 skb = dev_alloc_skb(MAX_EVENT_SIZE);
607 dev_err(adapter->dev,
608 "Unable to allocate skb for EVENT buf.\n");
609 kfree(card->evtbd_ring_vbase);
612 skb_put(skb, MAX_EVENT_SIZE);
614 if (mwifiex_map_pci_memory(adapter, skb, MAX_EVENT_SIZE,
618 MWIFIEX_SKB_PACB(skb, &buf_pa);
619 dev_dbg(adapter->dev, "info: Evt ring: add new skb. base: %p, "
620 "buf_base: %p, buf_pbase: %#x:%x, buf_len: %#x\n",
621 skb, skb->data, (u32)buf_pa, (u32)((u64)buf_pa >> 32),
624 card->evt_buf_list[i] = skb;
625 card->evtbd_ring[i]->paddr = buf_pa;
626 card->evtbd_ring[i]->len = (u16)skb->len;
627 card->evtbd_ring[i]->flags = 0;
634 * This function deletes Buffer descriptor ring for Events
636 static int mwifiex_pcie_delete_evtbd_ring(struct mwifiex_adapter *adapter)
638 struct pcie_service_card *card = adapter->card;
642 for (i = 0; i < MWIFIEX_MAX_EVT_BD; i++) {
643 if (card->evt_buf_list[i]) {
644 skb = card->evt_buf_list[i];
645 pci_unmap_single(card->dev, card->evtbd_ring[i]->paddr,
646 MAX_EVENT_SIZE, PCI_DMA_FROMDEVICE);
647 dev_kfree_skb_any(skb);
649 card->evt_buf_list[i] = NULL;
650 card->evtbd_ring[i]->paddr = 0;
651 card->evtbd_ring[i]->len = 0;
652 card->evtbd_ring[i]->flags = 0;
653 card->evtbd_ring[i] = NULL;
656 if (card->evtbd_ring_vbase)
657 pci_free_consistent(card->dev, card->evtbd_ring_size,
658 card->evtbd_ring_vbase,
659 card->evtbd_ring_pbase);
660 card->evtbd_wrptr = 0;
661 card->evtbd_rdptr = 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND;
662 card->evtbd_ring_size = 0;
663 card->evtbd_ring_vbase = NULL;
664 card->evtbd_ring_pbase = 0;
670 * This function allocates a buffer for CMDRSP
672 static int mwifiex_pcie_alloc_cmdrsp_buf(struct mwifiex_adapter *adapter)
674 struct pcie_service_card *card = adapter->card;
677 /* Allocate memory for receiving command response data */
678 skb = dev_alloc_skb(MWIFIEX_UPLD_SIZE);
680 dev_err(adapter->dev,
681 "Unable to allocate skb for command response data.\n");
684 skb_put(skb, MWIFIEX_UPLD_SIZE);
685 if (mwifiex_map_pci_memory(adapter, skb, MWIFIEX_UPLD_SIZE,
689 card->cmdrsp_buf = skb;
695 * This function deletes a buffer for CMDRSP
697 static int mwifiex_pcie_delete_cmdrsp_buf(struct mwifiex_adapter *adapter)
699 struct pcie_service_card *card;
705 card = adapter->card;
707 if (card && card->cmdrsp_buf) {
708 MWIFIEX_SKB_PACB(card->cmdrsp_buf, &buf_pa);
709 pci_unmap_single(card->dev, buf_pa, MWIFIEX_UPLD_SIZE,
711 dev_kfree_skb_any(card->cmdrsp_buf);
714 if (card && card->cmd_buf) {
715 MWIFIEX_SKB_PACB(card->cmd_buf, &buf_pa);
716 pci_unmap_single(card->dev, buf_pa, MWIFIEX_SIZE_OF_CMD_BUFFER,
718 dev_kfree_skb_any(card->cmd_buf);
724 * This function allocates a buffer for sleep cookie
726 static int mwifiex_pcie_alloc_sleep_cookie_buf(struct mwifiex_adapter *adapter)
728 struct pcie_service_card *card = adapter->card;
730 card->sleep_cookie_vbase = pci_alloc_consistent(card->dev, sizeof(u32),
731 &card->sleep_cookie_pbase);
732 if (!card->sleep_cookie_vbase) {
733 dev_err(adapter->dev, "pci_alloc_consistent failed!\n");
736 /* Init val of Sleep Cookie */
737 *(u32 *)card->sleep_cookie_vbase = FW_AWAKE_COOKIE;
739 dev_dbg(adapter->dev, "alloc_scook: sleep cookie=0x%x\n",
740 *((u32 *)card->sleep_cookie_vbase));
746 * This function deletes buffer for sleep cookie
748 static int mwifiex_pcie_delete_sleep_cookie_buf(struct mwifiex_adapter *adapter)
750 struct pcie_service_card *card;
755 card = adapter->card;
757 if (card && card->sleep_cookie_vbase) {
758 pci_free_consistent(card->dev, sizeof(u32),
759 card->sleep_cookie_vbase,
760 card->sleep_cookie_pbase);
761 card->sleep_cookie_vbase = NULL;
767 /* This function flushes the TX buffer descriptor ring
768 * This function defined as handler is also called while cleaning TXRX
769 * during disconnect/ bss stop.
771 static int mwifiex_clean_pcie_ring_buf(struct mwifiex_adapter *adapter)
773 struct pcie_service_card *card = adapter->card;
776 /* Read the TX ring read pointer set by firmware */
777 if (mwifiex_read_reg(adapter, REG_TXBD_RDPTR, &rdptr)) {
778 dev_err(adapter->dev,
779 "Flush TXBD: failed to read REG_TXBD_RDPTR\n");
783 if (!mwifiex_pcie_txbd_empty(card, rdptr)) {
784 card->txbd_flush = 1;
785 /* write pointer already set at last send
786 * send dnld-rdy intr again, wait for completion.
788 if (mwifiex_write_reg(adapter, PCIE_CPU_INT_EVENT,
789 CPU_INTR_DNLD_RDY)) {
790 dev_err(adapter->dev,
791 "failed to assert dnld-rdy interrupt.\n");
799 * This function sends data buffer to device
802 mwifiex_pcie_send_data(struct mwifiex_adapter *adapter, struct sk_buff *skb)
804 struct pcie_service_card *card = adapter->card;
809 if (!mwifiex_pcie_ok_to_access_hw(adapter))
810 mwifiex_pm_wakeup_card(adapter);
812 /* Read the TX ring read pointer set by firmware */
813 if (mwifiex_read_reg(adapter, REG_TXBD_RDPTR, &rdptr)) {
814 dev_err(adapter->dev,
815 "SEND DATA: failed to read REG_TXBD_RDPTR\n");
819 wrindx = card->txbd_wrptr & MWIFIEX_TXBD_MASK;
821 dev_dbg(adapter->dev, "info: SEND DATA: <Rd: %#x, Wr: %#x>\n", rdptr,
823 if (((card->txbd_wrptr & MWIFIEX_TXBD_MASK) !=
824 (rdptr & MWIFIEX_TXBD_MASK)) ||
825 ((card->txbd_wrptr & MWIFIEX_BD_FLAG_ROLLOVER_IND) !=
826 (rdptr & MWIFIEX_BD_FLAG_ROLLOVER_IND))) {
827 struct sk_buff *skb_data;
830 adapter->data_sent = true;
831 skb_data = card->tx_buf_list[wrindx];
832 memcpy(skb_data->data, skb->data, skb->len);
833 payload = skb_data->data;
834 tmp = (__le16 *)&payload[0];
835 *tmp = cpu_to_le16((u16)skb->len);
836 tmp = (__le16 *)&payload[2];
837 *tmp = cpu_to_le16(MWIFIEX_TYPE_DATA);
838 skb_put(skb_data, MWIFIEX_RX_DATA_BUF_SIZE - skb_data->len);
839 skb_trim(skb_data, skb->len);
840 MWIFIEX_SKB_PACB(skb_data, &buf_pa);
841 card->txbd_ring[wrindx]->paddr = buf_pa;
842 card->txbd_ring[wrindx]->len = (u16)skb_data->len;
843 card->txbd_ring[wrindx]->flags = MWIFIEX_BD_FLAG_FIRST_DESC |
844 MWIFIEX_BD_FLAG_LAST_DESC;
846 if ((++card->txbd_wrptr & MWIFIEX_TXBD_MASK) ==
848 card->txbd_wrptr = ((card->txbd_wrptr &
849 MWIFIEX_BD_FLAG_ROLLOVER_IND) ^
850 MWIFIEX_BD_FLAG_ROLLOVER_IND);
852 /* Write the TX ring write pointer in to REG_TXBD_WRPTR */
853 if (mwifiex_write_reg(adapter, REG_TXBD_WRPTR,
855 dev_err(adapter->dev,
856 "SEND DATA: failed to write REG_TXBD_WRPTR\n");
860 /* Send the TX ready interrupt */
861 if (mwifiex_write_reg(adapter, PCIE_CPU_INT_EVENT,
862 CPU_INTR_DNLD_RDY)) {
863 dev_err(adapter->dev,
864 "SEND DATA: failed to assert door-bell intr\n");
867 dev_dbg(adapter->dev, "info: SEND DATA: Updated <Rd: %#x, Wr: "
868 "%#x> and sent packet to firmware successfully\n",
869 rdptr, card->txbd_wrptr);
871 dev_dbg(adapter->dev,
872 "info: TX Ring full, can't send packets to fw\n");
873 adapter->data_sent = true;
874 /* Send the TX ready interrupt */
875 if (mwifiex_write_reg(adapter, PCIE_CPU_INT_EVENT,
877 dev_err(adapter->dev,
878 "SEND DATA: failed to assert door-bell intr\n");
886 * This function handles received buffer ring and
887 * dispatches packets to upper
889 static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter)
891 struct pcie_service_card *card = adapter->card;
894 struct sk_buff *skb_tmp = NULL;
896 /* Read the RX ring Write pointer set by firmware */
897 if (mwifiex_read_reg(adapter, REG_RXBD_WRPTR, &wrptr)) {
898 dev_err(adapter->dev,
899 "RECV DATA: failed to read REG_TXBD_RDPTR\n");
904 while (((wrptr & MWIFIEX_RXBD_MASK) !=
905 (card->rxbd_rdptr & MWIFIEX_RXBD_MASK)) ||
906 ((wrptr & MWIFIEX_BD_FLAG_ROLLOVER_IND) ==
907 (card->rxbd_rdptr & MWIFIEX_BD_FLAG_ROLLOVER_IND))) {
908 struct sk_buff *skb_data;
911 rd_index = card->rxbd_rdptr & MWIFIEX_RXBD_MASK;
912 skb_data = card->rx_buf_list[rd_index];
914 /* Get data length from interface header -
915 first byte is len, second byte is type */
916 rx_len = *((u16 *)skb_data->data);
917 dev_dbg(adapter->dev,
918 "info: RECV DATA: Rd=%#x, Wr=%#x, Len=%d\n",
919 card->rxbd_rdptr, wrptr, rx_len);
920 skb_tmp = dev_alloc_skb(rx_len);
922 dev_dbg(adapter->dev,
923 "info: Failed to alloc skb for RX\n");
928 skb_put(skb_tmp, rx_len);
930 memcpy(skb_tmp->data, skb_data->data + INTF_HEADER_LEN, rx_len);
931 if ((++card->rxbd_rdptr & MWIFIEX_RXBD_MASK) ==
932 MWIFIEX_MAX_TXRX_BD) {
933 card->rxbd_rdptr = ((card->rxbd_rdptr &
934 MWIFIEX_BD_FLAG_ROLLOVER_IND) ^
935 MWIFIEX_BD_FLAG_ROLLOVER_IND);
937 dev_dbg(adapter->dev, "info: RECV DATA: <Rd: %#x, Wr: %#x>\n",
938 card->rxbd_rdptr, wrptr);
940 /* Write the RX ring read pointer in to REG_RXBD_RDPTR */
941 if (mwifiex_write_reg(adapter, REG_RXBD_RDPTR,
943 dev_err(adapter->dev,
944 "RECV DATA: failed to write REG_RXBD_RDPTR\n");
949 /* Read the RX ring Write pointer set by firmware */
950 if (mwifiex_read_reg(adapter, REG_RXBD_WRPTR, &wrptr)) {
951 dev_err(adapter->dev,
952 "RECV DATA: failed to read REG_TXBD_RDPTR\n");
956 dev_dbg(adapter->dev,
957 "info: RECV DATA: Rcvd packet from fw successfully\n");
958 mwifiex_handle_rx_packet(adapter, skb_tmp);
963 dev_kfree_skb_any(skb_tmp);
968 * This function downloads the boot command to device
971 mwifiex_pcie_send_boot_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
974 struct pcie_service_card *card = adapter->card;
976 if (!(skb->data && skb->len)) {
977 dev_err(adapter->dev,
978 "Invalid parameter in %s <%p. len %d>\n",
979 __func__, skb->data, skb->len);
983 if (mwifiex_map_pci_memory(adapter, skb, skb->len , PCI_DMA_TODEVICE))
986 MWIFIEX_SKB_PACB(skb, &buf_pa);
988 /* Write the lower 32bits of the physical address to scratch
990 if (mwifiex_write_reg(adapter, PCIE_SCRATCH_0_REG, (u32)buf_pa)) {
991 dev_err(adapter->dev,
992 "%s: failed to write download command to boot code.\n",
994 pci_unmap_single(card->dev, buf_pa, MWIFIEX_UPLD_SIZE,
999 /* Write the upper 32bits of the physical address to scratch
1001 if (mwifiex_write_reg(adapter, PCIE_SCRATCH_1_REG,
1002 (u32)((u64)buf_pa >> 32))) {
1003 dev_err(adapter->dev,
1004 "%s: failed to write download command to boot code.\n",
1006 pci_unmap_single(card->dev, buf_pa, MWIFIEX_UPLD_SIZE,
1011 /* Write the command length to scratch register 2 */
1012 if (mwifiex_write_reg(adapter, PCIE_SCRATCH_2_REG, skb->len)) {
1013 dev_err(adapter->dev,
1014 "%s: failed to write command len to scratch reg 2\n",
1016 pci_unmap_single(card->dev, buf_pa, MWIFIEX_UPLD_SIZE,
1021 /* Ring the door bell */
1022 if (mwifiex_write_reg(adapter, PCIE_CPU_INT_EVENT,
1023 CPU_INTR_DOOR_BELL)) {
1024 dev_err(adapter->dev,
1025 "%s: failed to assert door-bell intr\n", __func__);
1026 pci_unmap_single(card->dev, buf_pa,
1027 MWIFIEX_UPLD_SIZE, PCI_DMA_TODEVICE);
1034 /* This function init rx port in firmware which in turn enables to receive data
1035 * from device before transmitting any packet.
1037 static int mwifiex_pcie_init_fw_port(struct mwifiex_adapter *adapter)
1039 struct pcie_service_card *card = adapter->card;
1041 /* Write the RX ring read pointer in to REG_RXBD_RDPTR */
1042 if (mwifiex_write_reg(adapter, REG_RXBD_RDPTR, card->rxbd_rdptr | 0)) {
1043 dev_err(adapter->dev,
1044 "RECV DATA: failed to write REG_RXBD_RDPTR\n");
1050 /* This function downloads commands to the device
1053 mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1055 struct pcie_service_card *card = adapter->card;
1057 dma_addr_t cmd_buf_pa, cmdrsp_buf_pa;
1058 u8 *payload = (u8 *)skb->data;
1060 if (!(skb->data && skb->len)) {
1061 dev_err(adapter->dev, "Invalid parameter in %s <%p, %#x>\n",
1062 __func__, skb->data, skb->len);
1066 /* Make sure a command response buffer is available */
1067 if (!card->cmdrsp_buf) {
1068 dev_err(adapter->dev,
1069 "No response buffer available, send command failed\n");
1073 if (!mwifiex_pcie_ok_to_access_hw(adapter))
1074 mwifiex_pm_wakeup_card(adapter);
1076 adapter->cmd_sent = true;
1078 *(__le16 *)&payload[0] = cpu_to_le16((u16)skb->len);
1079 *(__le16 *)&payload[2] = cpu_to_le16(MWIFIEX_TYPE_CMD);
1081 if (mwifiex_map_pci_memory(adapter, skb, skb->len, PCI_DMA_TODEVICE))
1084 card->cmd_buf = skb;
1086 /* To send a command, the driver will:
1087 1. Write the 64bit physical address of the data buffer to
1089 2. Ring the door bell (i.e. set the door bell interrupt)
1091 In response to door bell interrupt, the firmware will perform
1092 the DMA of the command packet (first header to obtain the total
1093 length and then rest of the command).
1096 if (card->cmdrsp_buf) {
1097 MWIFIEX_SKB_PACB(card->cmdrsp_buf, &cmdrsp_buf_pa);
1098 /* Write the lower 32bits of the cmdrsp buffer physical
1100 if (mwifiex_write_reg(adapter, REG_CMDRSP_ADDR_LO,
1101 (u32)cmdrsp_buf_pa)) {
1102 dev_err(adapter->dev,
1103 "Failed to write download cmd to boot code.\n");
1107 /* Write the upper 32bits of the cmdrsp buffer physical
1109 if (mwifiex_write_reg(adapter, REG_CMDRSP_ADDR_HI,
1110 (u32)((u64)cmdrsp_buf_pa >> 32))) {
1111 dev_err(adapter->dev,
1112 "Failed to write download cmd to boot code.\n");
1118 MWIFIEX_SKB_PACB(card->cmd_buf, &cmd_buf_pa);
1119 /* Write the lower 32bits of the physical address to REG_CMD_ADDR_LO */
1120 if (mwifiex_write_reg(adapter, REG_CMD_ADDR_LO, (u32)cmd_buf_pa)) {
1121 dev_err(adapter->dev,
1122 "Failed to write download cmd to boot code.\n");
1126 /* Write the upper 32bits of the physical address to REG_CMD_ADDR_HI */
1127 if (mwifiex_write_reg(adapter, REG_CMD_ADDR_HI,
1128 (u32)((u64)cmd_buf_pa >> 32))) {
1129 dev_err(adapter->dev,
1130 "Failed to write download cmd to boot code.\n");
1135 /* Write the command length to REG_CMD_SIZE */
1136 if (mwifiex_write_reg(adapter, REG_CMD_SIZE, card->cmd_buf->len)) {
1137 dev_err(adapter->dev,
1138 "Failed to write cmd len to REG_CMD_SIZE\n");
1143 /* Ring the door bell */
1144 if (mwifiex_write_reg(adapter, PCIE_CPU_INT_EVENT,
1145 CPU_INTR_DOOR_BELL)) {
1146 dev_err(adapter->dev,
1147 "Failed to assert door-bell intr\n");
1154 adapter->cmd_sent = false;
1160 * This function handles command complete interrupt
1162 static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
1164 struct pcie_service_card *card = adapter->card;
1165 struct sk_buff *skb = card->cmdrsp_buf;
1171 dev_dbg(adapter->dev, "info: Rx CMD Response\n");
1173 MWIFIEX_SKB_PACB(skb, &buf_pa);
1174 pci_unmap_single(card->dev, buf_pa, MWIFIEX_UPLD_SIZE,
1175 PCI_DMA_FROMDEVICE);
1177 pkt_len = *((__le16 *)skb->data);
1178 rx_len = le16_to_cpu(pkt_len);
1179 skb_trim(skb, rx_len);
1180 skb_pull(skb, INTF_HEADER_LEN);
1182 if (!adapter->curr_cmd) {
1183 if (adapter->ps_state == PS_STATE_SLEEP_CFM) {
1184 mwifiex_process_sleep_confirm_resp(adapter, skb->data,
1186 while (mwifiex_pcie_ok_to_access_hw(adapter) &&
1188 usleep_range(50, 60);
1190 dev_err(adapter->dev,
1191 "There is no command but got cmdrsp\n");
1193 memcpy(adapter->upld_buf, skb->data,
1194 min_t(u32, MWIFIEX_SIZE_OF_CMD_BUFFER, skb->len));
1195 if (mwifiex_map_pci_memory(adapter, skb, MWIFIEX_UPLD_SIZE,
1196 PCI_DMA_FROMDEVICE))
1199 MWIFIEX_SKB_PACB(skb, &buf_pa);
1200 } else if (mwifiex_pcie_ok_to_access_hw(adapter)) {
1201 adapter->curr_cmd->resp_skb = skb;
1202 adapter->cmd_resp_received = true;
1203 /* Take the pointer and set it to CMD node and will
1204 return in the response complete callback */
1205 card->cmdrsp_buf = NULL;
1207 /* Clear the cmd-rsp buffer address in scratch registers. This
1208 will prevent firmware from writing to the same response
1210 if (mwifiex_write_reg(adapter, REG_CMDRSP_ADDR_LO, 0)) {
1211 dev_err(adapter->dev,
1212 "cmd_done: failed to clear cmd_rsp_addr_lo\n");
1215 /* Write the upper 32bits of the cmdrsp buffer physical
1217 if (mwifiex_write_reg(adapter, REG_CMDRSP_ADDR_HI, 0)) {
1218 dev_err(adapter->dev,
1219 "cmd_done: failed to clear cmd_rsp_addr_hi\n");
1228 * Command Response processing complete handler
1230 static int mwifiex_pcie_cmdrsp_complete(struct mwifiex_adapter *adapter,
1231 struct sk_buff *skb)
1233 struct pcie_service_card *card = adapter->card;
1235 struct sk_buff *skb_tmp;
1238 card->cmdrsp_buf = skb;
1239 skb_push(card->cmdrsp_buf, INTF_HEADER_LEN);
1240 if (mwifiex_map_pci_memory(adapter, skb, MWIFIEX_UPLD_SIZE,
1241 PCI_DMA_FROMDEVICE))
1245 skb_tmp = card->cmd_buf;
1247 MWIFIEX_SKB_PACB(skb_tmp, &buf_pa);
1248 pci_unmap_single(card->dev, buf_pa, MWIFIEX_UPLD_SIZE,
1249 PCI_DMA_FROMDEVICE);
1250 card->cmd_buf = NULL;
1257 * This function handles firmware event ready interrupt
1259 static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter *adapter)
1261 struct pcie_service_card *card = adapter->card;
1262 u32 rdptr = card->evtbd_rdptr & MWIFIEX_EVTBD_MASK;
1266 if (!mwifiex_pcie_ok_to_access_hw(adapter))
1267 mwifiex_pm_wakeup_card(adapter);
1269 if (adapter->event_received) {
1270 dev_dbg(adapter->dev, "info: Event being processed, "
1271 "do not process this interrupt just yet\n");
1275 if (rdptr >= MWIFIEX_MAX_EVT_BD) {
1276 dev_dbg(adapter->dev, "info: Invalid read pointer...\n");
1280 /* Read the event ring write pointer set by firmware */
1281 if (mwifiex_read_reg(adapter, REG_EVTBD_WRPTR, &wrptr)) {
1282 dev_err(adapter->dev,
1283 "EventReady: failed to read REG_EVTBD_WRPTR\n");
1287 dev_dbg(adapter->dev, "info: EventReady: Initial <Rd: 0x%x, Wr: 0x%x>",
1288 card->evtbd_rdptr, wrptr);
1289 if (((wrptr & MWIFIEX_EVTBD_MASK) != (card->evtbd_rdptr
1290 & MWIFIEX_EVTBD_MASK)) ||
1291 ((wrptr & MWIFIEX_BD_FLAG_ROLLOVER_IND) ==
1292 (card->evtbd_rdptr & MWIFIEX_BD_FLAG_ROLLOVER_IND))) {
1293 struct sk_buff *skb_cmd;
1294 __le16 data_len = 0;
1297 dev_dbg(adapter->dev, "info: Read Index: %d\n", rdptr);
1298 skb_cmd = card->evt_buf_list[rdptr];
1299 MWIFIEX_SKB_PACB(skb_cmd, &buf_pa);
1300 pci_unmap_single(card->dev, buf_pa, MAX_EVENT_SIZE,
1301 PCI_DMA_FROMDEVICE);
1303 /* Take the pointer and set it to event pointer in adapter
1304 and will return back after event handling callback */
1305 card->evt_buf_list[rdptr] = NULL;
1306 card->evtbd_ring[rdptr]->paddr = 0;
1307 card->evtbd_ring[rdptr]->len = 0;
1308 card->evtbd_ring[rdptr]->flags = 0;
1310 event = *(u32 *) &skb_cmd->data[INTF_HEADER_LEN];
1311 adapter->event_cause = event;
1312 /* The first 4bytes will be the event transfer header
1313 len is 2 bytes followed by type which is 2 bytes */
1314 memcpy(&data_len, skb_cmd->data, sizeof(__le16));
1315 evt_len = le16_to_cpu(data_len);
1317 skb_pull(skb_cmd, INTF_HEADER_LEN);
1318 dev_dbg(adapter->dev, "info: Event length: %d\n", evt_len);
1320 if ((evt_len > 0) && (evt_len < MAX_EVENT_SIZE))
1321 memcpy(adapter->event_body, skb_cmd->data +
1322 MWIFIEX_EVENT_HEADER_LEN, evt_len -
1323 MWIFIEX_EVENT_HEADER_LEN);
1325 adapter->event_received = true;
1326 adapter->event_skb = skb_cmd;
1328 /* Do not update the event read pointer here, wait till the
1329 buffer is released. This is just to make things simpler,
1330 we need to find a better method of managing these buffers.
1338 * Event processing complete handler
1340 static int mwifiex_pcie_event_complete(struct mwifiex_adapter *adapter,
1341 struct sk_buff *skb)
1343 struct pcie_service_card *card = adapter->card;
1345 u32 rdptr = card->evtbd_rdptr & MWIFIEX_EVTBD_MASK;
1352 if (rdptr >= MWIFIEX_MAX_EVT_BD) {
1353 dev_err(adapter->dev, "event_complete: Invalid rdptr 0x%x\n",
1358 /* Read the event ring write pointer set by firmware */
1359 if (mwifiex_read_reg(adapter, REG_EVTBD_WRPTR, &wrptr)) {
1360 dev_err(adapter->dev,
1361 "event_complete: failed to read REG_EVTBD_WRPTR\n");
1365 if (!card->evt_buf_list[rdptr]) {
1366 skb_push(skb, INTF_HEADER_LEN);
1367 if (mwifiex_map_pci_memory(adapter, skb,
1369 PCI_DMA_FROMDEVICE))
1371 MWIFIEX_SKB_PACB(skb, &buf_pa);
1372 card->evt_buf_list[rdptr] = skb;
1373 MWIFIEX_SKB_PACB(skb, &buf_pa);
1374 card->evtbd_ring[rdptr]->paddr = buf_pa;
1375 card->evtbd_ring[rdptr]->len = (u16)skb->len;
1376 card->evtbd_ring[rdptr]->flags = 0;
1379 dev_dbg(adapter->dev,
1380 "info: ERROR: buf still valid at index %d, <%p, %p>\n",
1381 rdptr, card->evt_buf_list[rdptr], skb);
1384 if ((++card->evtbd_rdptr & MWIFIEX_EVTBD_MASK) == MWIFIEX_MAX_EVT_BD) {
1385 card->evtbd_rdptr = ((card->evtbd_rdptr &
1386 MWIFIEX_BD_FLAG_ROLLOVER_IND) ^
1387 MWIFIEX_BD_FLAG_ROLLOVER_IND);
1390 dev_dbg(adapter->dev, "info: Updated <Rd: 0x%x, Wr: 0x%x>",
1391 card->evtbd_rdptr, wrptr);
1393 /* Write the event ring read pointer in to REG_EVTBD_RDPTR */
1394 if (mwifiex_write_reg(adapter, REG_EVTBD_RDPTR, card->evtbd_rdptr)) {
1395 dev_err(adapter->dev,
1396 "event_complete: failed to read REG_EVTBD_RDPTR\n");
1400 dev_dbg(adapter->dev, "info: Check Events Again\n");
1401 ret = mwifiex_pcie_process_event_ready(adapter);
1407 * This function downloads the firmware to the card.
1409 * Firmware is downloaded to the card in blocks. Every block download
1410 * is tested for CRC errors, and retried a number of times before
1411 * returning failure.
1413 static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
1414 struct mwifiex_fw_image *fw)
1417 u8 *firmware = fw->fw_buf;
1418 u32 firmware_len = fw->fw_len;
1420 struct sk_buff *skb;
1421 u32 txlen, tx_blocks = 0, tries, len;
1422 u32 block_retry_cnt = 0;
1424 struct pcie_service_card *card = adapter->card;
1426 if (!firmware || !firmware_len) {
1427 dev_err(adapter->dev,
1428 "No firmware image found! Terminating download\n");
1432 dev_dbg(adapter->dev, "info: Downloading FW image (%d bytes)\n",
1435 if (mwifiex_pcie_disable_host_int(adapter)) {
1436 dev_err(adapter->dev,
1437 "%s: Disabling interrupts failed.\n", __func__);
1441 skb = dev_alloc_skb(MWIFIEX_UPLD_SIZE);
1447 /* Perform firmware data transfer */
1452 if (offset >= firmware_len)
1455 for (tries = 0; tries < MAX_POLL_TRIES; tries++) {
1456 ret = mwifiex_read_reg(adapter, PCIE_SCRATCH_2_REG,
1459 dev_warn(adapter->dev,
1460 "Failed reading len from boot code\n");
1465 usleep_range(10, 20);
1470 } else if (len > MWIFIEX_UPLD_SIZE) {
1471 pr_err("FW download failure @ %d, invalid length %d\n",
1481 if (block_retry_cnt > MAX_WRITE_IOMEM_RETRY) {
1482 pr_err("FW download failure @ %d, over max "
1483 "retry count\n", offset);
1487 dev_err(adapter->dev, "FW CRC error indicated by the "
1488 "helper: len = 0x%04X, txlen = %d\n",
1491 /* Setting this to 0 to resend from same offset */
1494 block_retry_cnt = 0;
1495 /* Set blocksize to transfer - checking for
1497 if (firmware_len - offset < txlen)
1498 txlen = firmware_len - offset;
1500 dev_dbg(adapter->dev, ".");
1502 tx_blocks = (txlen +
1503 MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD - 1) /
1504 MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD;
1506 /* Copy payload to buffer */
1507 memmove(skb->data, &firmware[offset], txlen);
1510 skb_put(skb, MWIFIEX_UPLD_SIZE - skb->len);
1511 skb_trim(skb, tx_blocks * MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD);
1513 /* Send the boot command to device */
1514 if (mwifiex_pcie_send_boot_cmd(adapter, skb)) {
1515 dev_err(adapter->dev,
1516 "Failed to send firmware download command\n");
1521 MWIFIEX_SKB_PACB(skb, &buf_pa);
1523 /* Wait for the command done interrupt */
1525 if (mwifiex_read_reg(adapter, PCIE_CPU_INT_STATUS,
1527 dev_err(adapter->dev, "%s: Failed to read "
1528 "interrupt status during fw dnld.\n",
1530 pci_unmap_single(card->dev, buf_pa, skb->len,
1535 } while ((ireg_intr & CPU_INTR_DOOR_BELL) ==
1536 CPU_INTR_DOOR_BELL);
1538 pci_unmap_single(card->dev, buf_pa, skb->len,
1544 dev_dbg(adapter->dev, "info:\nFW download over, size %d bytes\n",
1550 dev_kfree_skb_any(skb);
1555 * This function checks the firmware status in card.
1557 * The winner interface is also determined by this function.
1560 mwifiex_check_fw_status(struct mwifiex_adapter *adapter, u32 poll_num)
1563 u32 firmware_stat, winner_status;
1566 /* Mask spurios interrupts */
1567 if (mwifiex_write_reg(adapter, PCIE_HOST_INT_STATUS_MASK,
1569 dev_warn(adapter->dev, "Write register failed\n");
1573 dev_dbg(adapter->dev, "Setting driver ready signature\n");
1574 if (mwifiex_write_reg(adapter, REG_DRV_READY, FIRMWARE_READY_PCIE)) {
1575 dev_err(adapter->dev,
1576 "Failed to write driver ready signature\n");
1580 /* Wait for firmware initialization event */
1581 for (tries = 0; tries < poll_num; tries++) {
1582 if (mwifiex_read_reg(adapter, PCIE_SCRATCH_3_REG,
1589 if (firmware_stat == FIRMWARE_READY_PCIE) {
1599 if (mwifiex_read_reg(adapter, PCIE_SCRATCH_3_REG,
1602 else if (!winner_status) {
1603 dev_err(adapter->dev, "PCI-E is the winner\n");
1604 adapter->winner = 1;
1607 dev_err(adapter->dev,
1608 "PCI-E is not the winner <%#x,%d>, exit dnld\n",
1609 ret, adapter->winner);
1618 * This function reads the interrupt status from card.
1620 static void mwifiex_interrupt_status(struct mwifiex_adapter *adapter)
1623 unsigned long flags;
1625 if (!mwifiex_pcie_ok_to_access_hw(adapter))
1628 if (mwifiex_read_reg(adapter, PCIE_HOST_INT_STATUS, &pcie_ireg)) {
1629 dev_warn(adapter->dev, "Read register failed\n");
1633 if ((pcie_ireg != 0xFFFFFFFF) && (pcie_ireg)) {
1635 mwifiex_pcie_disable_host_int(adapter);
1637 /* Clear the pending interrupts */
1638 if (mwifiex_write_reg(adapter, PCIE_HOST_INT_STATUS,
1640 dev_warn(adapter->dev, "Write register failed\n");
1643 spin_lock_irqsave(&adapter->int_lock, flags);
1644 adapter->int_status |= pcie_ireg;
1645 spin_unlock_irqrestore(&adapter->int_lock, flags);
1647 if (pcie_ireg & HOST_INTR_CMD_DONE) {
1648 if ((adapter->ps_state == PS_STATE_SLEEP_CFM) ||
1649 (adapter->ps_state == PS_STATE_SLEEP)) {
1650 mwifiex_pcie_enable_host_int(adapter);
1651 if (mwifiex_write_reg(adapter,
1653 CPU_INTR_SLEEP_CFM_DONE)
1655 dev_warn(adapter->dev,
1656 "Write register failed\n");
1661 } else if (!adapter->pps_uapsd_mode &&
1662 adapter->ps_state == PS_STATE_SLEEP) {
1663 /* Potentially for PCIe we could get other
1664 * interrupts like shared. Don't change power
1665 * state until cookie is set */
1666 if (mwifiex_pcie_ok_to_access_hw(adapter))
1667 adapter->ps_state = PS_STATE_AWAKE;
1673 * Interrupt handler for PCIe root port
1675 * This function reads the interrupt status from firmware and assigns
1676 * the main process in workqueue which will handle the interrupt.
1678 static irqreturn_t mwifiex_pcie_interrupt(int irq, void *context)
1680 struct pci_dev *pdev = (struct pci_dev *)context;
1681 struct pcie_service_card *card;
1682 struct mwifiex_adapter *adapter;
1685 pr_debug("info: %s: pdev is NULL\n", (u8 *)pdev);
1689 card = (struct pcie_service_card *) pci_get_drvdata(pdev);
1690 if (!card || !card->adapter) {
1691 pr_debug("info: %s: card=%p adapter=%p\n", __func__, card,
1692 card ? card->adapter : NULL);
1695 adapter = card->adapter;
1697 if (adapter->surprise_removed)
1700 mwifiex_interrupt_status(adapter);
1701 queue_work(adapter->workqueue, &adapter->main_work);
1708 * This function checks the current interrupt status.
1710 * The following interrupts are checked and handled by this function -
1713 * - Command received
1714 * - Packets received
1717 * In case of Rx packets received, the packets are uploaded from card to
1718 * host and processed accordingly.
1720 static int mwifiex_process_int_status(struct mwifiex_adapter *adapter)
1724 unsigned long flags;
1726 spin_lock_irqsave(&adapter->int_lock, flags);
1727 /* Clear out unused interrupts */
1728 pcie_ireg = adapter->int_status;
1729 adapter->int_status = 0;
1730 spin_unlock_irqrestore(&adapter->int_lock, flags);
1732 while (pcie_ireg & HOST_INTR_MASK) {
1733 if (pcie_ireg & HOST_INTR_DNLD_DONE) {
1734 pcie_ireg &= ~HOST_INTR_DNLD_DONE;
1735 if (adapter->data_sent) {
1736 dev_dbg(adapter->dev, "info: DATA sent intr\n");
1737 adapter->data_sent = false;
1740 if (pcie_ireg & HOST_INTR_UPLD_RDY) {
1741 pcie_ireg &= ~HOST_INTR_UPLD_RDY;
1742 dev_dbg(adapter->dev, "info: Rx DATA\n");
1743 ret = mwifiex_pcie_process_recv_data(adapter);
1747 if (pcie_ireg & HOST_INTR_EVENT_RDY) {
1748 pcie_ireg &= ~HOST_INTR_EVENT_RDY;
1749 dev_dbg(adapter->dev, "info: Rx EVENT\n");
1750 ret = mwifiex_pcie_process_event_ready(adapter);
1755 if (pcie_ireg & HOST_INTR_CMD_DONE) {
1756 pcie_ireg &= ~HOST_INTR_CMD_DONE;
1757 if (adapter->cmd_sent) {
1758 dev_dbg(adapter->dev,
1759 "info: CMD sent Interrupt\n");
1760 adapter->cmd_sent = false;
1762 /* Handle command response */
1763 ret = mwifiex_pcie_process_cmd_complete(adapter);
1768 if (mwifiex_pcie_ok_to_access_hw(adapter)) {
1769 if (mwifiex_read_reg(adapter, PCIE_HOST_INT_STATUS,
1771 dev_warn(adapter->dev,
1772 "Read register failed\n");
1776 if ((pcie_ireg != 0xFFFFFFFF) && (pcie_ireg)) {
1777 if (mwifiex_write_reg(adapter,
1778 PCIE_HOST_INT_STATUS,
1780 dev_warn(adapter->dev,
1781 "Write register failed\n");
1788 dev_dbg(adapter->dev, "info: cmd_sent=%d data_sent=%d\n",
1789 adapter->cmd_sent, adapter->data_sent);
1790 mwifiex_pcie_enable_host_int(adapter);
1796 * This function downloads data from driver to card.
1798 * Both commands and data packets are transferred to the card by this
1801 * This function adds the PCIE specific header to the front of the buffer
1802 * before transferring. The header contains the length of the packet and
1803 * the type. The firmware handles the packets based upon this set type.
1805 static int mwifiex_pcie_host_to_card(struct mwifiex_adapter *adapter, u8 type,
1806 struct sk_buff *skb,
1807 struct mwifiex_tx_param *tx_param)
1810 dev_err(adapter->dev, "Passed NULL skb to %s\n", __func__);
1814 if (type == MWIFIEX_TYPE_DATA)
1815 return mwifiex_pcie_send_data(adapter, skb);
1816 else if (type == MWIFIEX_TYPE_CMD)
1817 return mwifiex_pcie_send_cmd(adapter, skb);
1823 * This function initializes the PCI-E host memory space, WCB rings, etc.
1825 * The following initializations steps are followed -
1826 * - Allocate TXBD ring buffers
1827 * - Allocate RXBD ring buffers
1828 * - Allocate event BD ring buffers
1829 * - Allocate command response ring buffer
1830 * - Allocate sleep cookie buffer
1832 static int mwifiex_pcie_init(struct mwifiex_adapter *adapter)
1834 struct pcie_service_card *card = adapter->card;
1836 struct pci_dev *pdev = card->dev;
1838 pci_set_drvdata(pdev, card);
1840 ret = pci_enable_device(pdev);
1842 goto err_enable_dev;
1844 pci_set_master(pdev);
1846 dev_dbg(adapter->dev, "try set_consistent_dma_mask(32)\n");
1847 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1849 dev_err(adapter->dev, "set_dma_mask(32) failed\n");
1850 goto err_set_dma_mask;
1853 ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1855 dev_err(adapter->dev, "set_consistent_dma_mask(64) failed\n");
1856 goto err_set_dma_mask;
1859 ret = pci_request_region(pdev, 0, DRV_NAME);
1861 dev_err(adapter->dev, "req_reg(0) error\n");
1862 goto err_req_region0;
1864 card->pci_mmap = pci_iomap(pdev, 0, 0);
1865 if (!card->pci_mmap) {
1866 dev_err(adapter->dev, "iomap(0) error\n");
1869 ret = pci_request_region(pdev, 2, DRV_NAME);
1871 dev_err(adapter->dev, "req_reg(2) error\n");
1872 goto err_req_region2;
1874 card->pci_mmap1 = pci_iomap(pdev, 2, 0);
1875 if (!card->pci_mmap1) {
1876 dev_err(adapter->dev, "iomap(2) error\n");
1880 dev_dbg(adapter->dev,
1881 "PCI memory map Virt0: %p PCI memory map Virt2: %p\n",
1882 card->pci_mmap, card->pci_mmap1);
1884 card->cmdrsp_buf = NULL;
1885 ret = mwifiex_pcie_create_txbd_ring(adapter);
1888 ret = mwifiex_pcie_create_rxbd_ring(adapter);
1891 ret = mwifiex_pcie_create_evtbd_ring(adapter);
1894 ret = mwifiex_pcie_alloc_cmdrsp_buf(adapter);
1896 goto err_alloc_cmdbuf;
1897 ret = mwifiex_pcie_alloc_sleep_cookie_buf(adapter);
1899 goto err_alloc_cookie;
1904 mwifiex_pcie_delete_cmdrsp_buf(adapter);
1906 mwifiex_pcie_delete_evtbd_ring(adapter);
1908 mwifiex_pcie_delete_rxbd_ring(adapter);
1910 mwifiex_pcie_delete_txbd_ring(adapter);
1912 pci_iounmap(pdev, card->pci_mmap1);
1914 pci_release_region(pdev, 2);
1916 pci_iounmap(pdev, card->pci_mmap);
1918 pci_release_region(pdev, 0);
1921 pci_disable_device(pdev);
1923 pci_set_drvdata(pdev, NULL);
1928 * This function cleans up the allocated card buffers.
1930 * The following are freed by this function -
1931 * - TXBD ring buffers
1932 * - RXBD ring buffers
1933 * - Event BD ring buffers
1934 * - Command response ring buffer
1935 * - Sleep cookie buffer
1937 static void mwifiex_pcie_cleanup(struct mwifiex_adapter *adapter)
1939 struct pcie_service_card *card = adapter->card;
1940 struct pci_dev *pdev = card->dev;
1943 dev_dbg(adapter->dev, "Clearing driver ready signature\n");
1944 if (mwifiex_write_reg(adapter, REG_DRV_READY, 0x00000000))
1945 dev_err(adapter->dev,
1946 "Failed to write driver not-ready signature\n");
1950 pci_iounmap(pdev, card->pci_mmap);
1951 pci_iounmap(pdev, card->pci_mmap1);
1953 pci_release_regions(pdev);
1954 pci_disable_device(pdev);
1955 pci_set_drvdata(pdev, NULL);
1960 * This function registers the PCIE device.
1962 * PCIE IRQ is claimed, block size is set and driver data is initialized.
1964 static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
1967 struct pcie_service_card *card = adapter->card;
1968 struct pci_dev *pdev = card->dev;
1970 /* save adapter pointer in card */
1971 card->adapter = adapter;
1973 ret = request_irq(pdev->irq, mwifiex_pcie_interrupt, IRQF_SHARED,
1976 pr_err("request_irq failed: ret=%d\n", ret);
1977 adapter->card = NULL;
1981 adapter->dev = &pdev->dev;
1982 strcpy(adapter->fw_name, PCIE8766_DEFAULT_FW_NAME);
1988 * This function unregisters the PCIE device.
1990 * The PCIE IRQ is released, the function is disabled and driver
1991 * data is set to null.
1993 static void mwifiex_unregister_dev(struct mwifiex_adapter *adapter)
1995 struct pcie_service_card *card = adapter->card;
1998 dev_dbg(adapter->dev, "%s(): calling free_irq()\n", __func__);
1999 free_irq(card->dev->irq, card->dev);
2001 mwifiex_pcie_delete_sleep_cookie_buf(adapter);
2002 mwifiex_pcie_delete_cmdrsp_buf(adapter);
2003 mwifiex_pcie_delete_evtbd_ring(adapter);
2004 mwifiex_pcie_delete_rxbd_ring(adapter);
2005 mwifiex_pcie_delete_txbd_ring(adapter);
2006 card->cmdrsp_buf = NULL;
2010 static struct mwifiex_if_ops pcie_ops = {
2011 .init_if = mwifiex_pcie_init,
2012 .cleanup_if = mwifiex_pcie_cleanup,
2013 .check_fw_status = mwifiex_check_fw_status,
2014 .prog_fw = mwifiex_prog_fw_w_helper,
2015 .register_dev = mwifiex_register_dev,
2016 .unregister_dev = mwifiex_unregister_dev,
2017 .enable_int = mwifiex_pcie_enable_host_int,
2018 .process_int_status = mwifiex_process_int_status,
2019 .host_to_card = mwifiex_pcie_host_to_card,
2020 .wakeup = mwifiex_pm_wakeup_card,
2021 .wakeup_complete = mwifiex_pm_wakeup_card_complete,
2024 .cmdrsp_complete = mwifiex_pcie_cmdrsp_complete,
2025 .event_complete = mwifiex_pcie_event_complete,
2026 .update_mp_end_port = NULL,
2027 .cleanup_mpa_buf = NULL,
2028 .init_fw_port = mwifiex_pcie_init_fw_port,
2029 .clean_pcie_ring = mwifiex_clean_pcie_ring_buf,
2033 * This function initializes the PCIE driver module.
2035 * This initiates the semaphore and registers the device with
2038 static int mwifiex_pcie_init_module(void)
2042 pr_debug("Marvell 8766 PCIe Driver\n");
2044 sema_init(&add_remove_card_sem, 1);
2046 /* Clear the flag in case user removes the card. */
2049 ret = pci_register_driver(&mwifiex_pcie);
2051 pr_err("Driver register failed!\n");
2053 pr_debug("info: Driver registered successfully!\n");
2059 * This function cleans up the PCIE driver.
2061 * The following major steps are followed for cleanup -
2062 * - Resume the device if its suspended
2063 * - Disconnect the device if connected
2064 * - Shutdown the firmware
2065 * - Unregister the device from PCIE bus.
2067 static void mwifiex_pcie_cleanup_module(void)
2069 if (!down_interruptible(&add_remove_card_sem))
2070 up(&add_remove_card_sem);
2072 /* Set the flag as user is removing this module. */
2075 pci_unregister_driver(&mwifiex_pcie);
2078 module_init(mwifiex_pcie_init_module);
2079 module_exit(mwifiex_pcie_cleanup_module);
2081 MODULE_AUTHOR("Marvell International Ltd.");
2082 MODULE_DESCRIPTION("Marvell WiFi-Ex PCI-Express Driver version " PCIE_VERSION);
2083 MODULE_VERSION(PCIE_VERSION);
2084 MODULE_LICENSE("GPL v2");
2085 MODULE_FIRMWARE("mrvl/pcie8766_uapsta.bin");