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 * This function is called after skb allocation to update
44 * "skb->cb" with physical address of data pointer.
46 static phys_addr_t
*mwifiex_update_sk_buff_pa(struct sk_buff
*skb
)
48 phys_addr_t
*buf_pa
= MWIFIEX_SKB_PACB(skb
);
50 *buf_pa
= (phys_addr_t
)virt_to_phys(skb
->data
);
56 * This function reads sleep cookie and checks if FW is ready
58 static bool mwifiex_pcie_ok_to_access_hw(struct mwifiex_adapter
*adapter
)
61 struct pcie_service_card
*card
= adapter
->card
;
63 if (card
->sleep_cookie
) {
64 cookie_addr
= (u32
*)card
->sleep_cookie
->data
;
65 dev_dbg(adapter
->dev
, "info: ACCESS_HW: sleep cookie=0x%x\n",
67 if (*cookie_addr
== FW_AWAKE_COOKIE
)
75 * This function probes an mwifiex device and registers it. It allocates
76 * the card structure, enables PCIE function number and initiates the
77 * device registration and initialization procedure by adding a logical
80 static int mwifiex_pcie_probe(struct pci_dev
*pdev
,
81 const struct pci_device_id
*ent
)
83 struct pcie_service_card
*card
;
85 pr_debug("info: vendor=0x%4.04X device=0x%4.04X rev=%d\n",
86 pdev
->vendor
, pdev
->device
, pdev
->revision
);
88 card
= kzalloc(sizeof(struct pcie_service_card
), GFP_KERNEL
);
94 if (mwifiex_add_card(card
, &add_remove_card_sem
, &pcie_ops
,
96 pr_err("%s failed\n", __func__
);
105 * This function removes the interface and frees up the card structure.
107 static void mwifiex_pcie_remove(struct pci_dev
*pdev
)
109 struct pcie_service_card
*card
;
110 struct mwifiex_adapter
*adapter
;
111 struct mwifiex_private
*priv
;
114 card
= pci_get_drvdata(pdev
);
118 adapter
= card
->adapter
;
119 if (!adapter
|| !adapter
->priv_num
)
122 /* In case driver is removed when asynchronous FW load is in progress */
123 wait_for_completion(&adapter
->fw_load
);
127 if (adapter
->is_suspended
)
128 mwifiex_pcie_resume(pdev
);
131 for (i
= 0; i
< adapter
->priv_num
; i
++)
132 if ((GET_BSS_ROLE(adapter
->priv
[i
]) ==
133 MWIFIEX_BSS_ROLE_STA
) &&
134 adapter
->priv
[i
]->media_connected
)
135 mwifiex_deauthenticate(adapter
->priv
[i
], NULL
);
137 priv
= mwifiex_get_priv(adapter
, MWIFIEX_BSS_ROLE_ANY
);
139 mwifiex_disable_auto_ds(priv
);
141 mwifiex_init_shutdown_fw(priv
, MWIFIEX_FUNC_SHUTDOWN
);
144 mwifiex_remove_card(card
->adapter
, &add_remove_card_sem
);
149 * Kernel needs to suspend all functions separately. Therefore all
150 * registered functions must have drivers with suspend and resume
151 * methods. Failing that the kernel simply removes the whole card.
153 * If already not suspended, this function allocates and sends a host
154 * sleep activate request to the firmware and turns off the traffic.
156 static int mwifiex_pcie_suspend(struct pci_dev
*pdev
, pm_message_t state
)
158 struct mwifiex_adapter
*adapter
;
159 struct pcie_service_card
*card
;
163 card
= (struct pcie_service_card
*) pci_get_drvdata(pdev
);
164 if (!card
|| card
->adapter
) {
165 pr_err("Card or adapter structure is not valid\n");
169 pr_err("PCIE device is not specified\n");
173 adapter
= card
->adapter
;
175 hs_actived
= mwifiex_enable_hs(adapter
);
177 /* Indicate device suspended */
178 adapter
->is_suspended
= true;
180 for (i
= 0; i
< adapter
->priv_num
; i
++)
181 netif_carrier_off(adapter
->priv
[i
]->netdev
);
187 * Kernel needs to suspend all functions separately. Therefore all
188 * registered functions must have drivers with suspend and resume
189 * methods. Failing that the kernel simply removes the whole card.
191 * If already not resumed, this function turns on the traffic and
192 * sends a host sleep cancel request to the firmware.
194 static int mwifiex_pcie_resume(struct pci_dev
*pdev
)
196 struct mwifiex_adapter
*adapter
;
197 struct pcie_service_card
*card
;
201 card
= (struct pcie_service_card
*) pci_get_drvdata(pdev
);
202 if (!card
|| !card
->adapter
) {
203 pr_err("Card or adapter structure is not valid\n");
207 pr_err("PCIE device is not specified\n");
211 adapter
= card
->adapter
;
213 if (!adapter
->is_suspended
) {
214 dev_warn(adapter
->dev
, "Device already resumed\n");
218 adapter
->is_suspended
= false;
220 for (i
= 0; i
< adapter
->priv_num
; i
++)
221 if (adapter
->priv
[i
]->media_connected
)
222 netif_carrier_on(adapter
->priv
[i
]->netdev
);
224 mwifiex_cancel_hs(mwifiex_get_priv(adapter
, MWIFIEX_BSS_ROLE_STA
),
230 #define PCIE_VENDOR_ID_MARVELL (0x11ab)
231 #define PCIE_DEVICE_ID_MARVELL_88W8766P (0x2b30)
233 static DEFINE_PCI_DEVICE_TABLE(mwifiex_ids
) = {
235 PCIE_VENDOR_ID_MARVELL
, PCIE_DEVICE_ID_MARVELL_88W8766P
,
236 PCI_ANY_ID
, PCI_ANY_ID
, 0, 0,
241 MODULE_DEVICE_TABLE(pci
, mwifiex_ids
);
243 /* PCI Device Driver */
244 static struct pci_driver __refdata mwifiex_pcie
= {
245 .name
= "mwifiex_pcie",
246 .id_table
= mwifiex_ids
,
247 .probe
= mwifiex_pcie_probe
,
248 .remove
= mwifiex_pcie_remove
,
250 /* Power Management Hooks */
251 .suspend
= mwifiex_pcie_suspend
,
252 .resume
= mwifiex_pcie_resume
,
257 * This function writes data into PCIE card register.
259 static int mwifiex_write_reg(struct mwifiex_adapter
*adapter
, int reg
, u32 data
)
261 struct pcie_service_card
*card
= adapter
->card
;
263 iowrite32(data
, card
->pci_mmap1
+ reg
);
269 * This function reads data from PCIE card register.
271 static int mwifiex_read_reg(struct mwifiex_adapter
*adapter
, int reg
, u32
*data
)
273 struct pcie_service_card
*card
= adapter
->card
;
275 *data
= ioread32(card
->pci_mmap1
+ reg
);
281 * This function wakes up the card.
283 * A host power up command is written to the card configuration
284 * register to wake up the card.
286 static int mwifiex_pm_wakeup_card(struct mwifiex_adapter
*adapter
)
290 while (mwifiex_pcie_ok_to_access_hw(adapter
)) {
292 usleep_range(10, 20);
298 dev_dbg(adapter
->dev
, "event: Wakeup device...\n");
300 /* Enable interrupts or any chip access will wakeup device */
301 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_MASK
, HOST_INTR_MASK
)) {
302 dev_warn(adapter
->dev
, "Enable host interrupt failed\n");
306 dev_dbg(adapter
->dev
, "PCIE wakeup: Setting PS_STATE_AWAKE\n");
307 adapter
->ps_state
= PS_STATE_AWAKE
;
313 * This function is called after the card has woken up.
315 * The card configuration register is reset.
317 static int mwifiex_pm_wakeup_card_complete(struct mwifiex_adapter
*adapter
)
319 dev_dbg(adapter
->dev
, "cmd: Wakeup device completed\n");
325 * This function disables the host interrupt.
327 * The host interrupt mask is read, the disable bit is reset and
328 * written back to the card host interrupt mask register.
330 static int mwifiex_pcie_disable_host_int(struct mwifiex_adapter
*adapter
)
332 if (mwifiex_pcie_ok_to_access_hw(adapter
)) {
333 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_MASK
,
335 dev_warn(adapter
->dev
, "Disable host interrupt failed\n");
344 * This function enables the host interrupt.
346 * The host interrupt enable mask is written to the card
347 * host interrupt mask register.
349 static int mwifiex_pcie_enable_host_int(struct mwifiex_adapter
*adapter
)
351 if (mwifiex_pcie_ok_to_access_hw(adapter
)) {
352 /* Simply write the mask to the register */
353 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_MASK
,
355 dev_warn(adapter
->dev
, "Enable host interrupt failed\n");
364 * This function creates buffer descriptor ring for TX
366 static int mwifiex_pcie_create_txbd_ring(struct mwifiex_adapter
*adapter
)
368 struct pcie_service_card
*card
= adapter
->card
;
374 * driver maintaines the write pointer and firmware maintaines the read
375 * pointer. The write pointer starts at 0 (zero) while the read pointer
376 * starts at zero with rollover bit set
378 card
->txbd_wrptr
= 0;
379 card
->txbd_rdptr
|= MWIFIEX_BD_FLAG_ROLLOVER_IND
;
381 /* allocate shared memory for the BD ring and divide the same in to
382 several descriptors */
383 card
->txbd_ring_size
= sizeof(struct mwifiex_pcie_buf_desc
) *
385 dev_dbg(adapter
->dev
, "info: txbd_ring: Allocating %d bytes\n",
386 card
->txbd_ring_size
);
387 card
->txbd_ring_vbase
= kzalloc(card
->txbd_ring_size
, GFP_KERNEL
);
388 if (!card
->txbd_ring_vbase
) {
389 dev_err(adapter
->dev
, "Unable to alloc buffer for txbd ring\n");
392 card
->txbd_ring_pbase
= virt_to_phys(card
->txbd_ring_vbase
);
394 dev_dbg(adapter
->dev
,
395 "info: txbd_ring - base: %p, pbase: %#x:%x, len: %x\n",
396 card
->txbd_ring_vbase
, (u32
)card
->txbd_ring_pbase
,
397 (u32
)((u64
)card
->txbd_ring_pbase
>> 32), card
->txbd_ring_size
);
399 for (i
= 0; i
< MWIFIEX_MAX_TXRX_BD
; i
++) {
400 card
->txbd_ring
[i
] = (struct mwifiex_pcie_buf_desc
*)
401 (card
->txbd_ring_vbase
+
402 (sizeof(struct mwifiex_pcie_buf_desc
)
405 /* Allocate buffer here so that firmware can DMA data from it */
406 skb
= dev_alloc_skb(MWIFIEX_RX_DATA_BUF_SIZE
);
408 dev_err(adapter
->dev
, "Unable to allocate skb for TX ring.\n");
409 kfree(card
->txbd_ring_vbase
);
412 buf_pa
= mwifiex_update_sk_buff_pa(skb
);
414 skb_put(skb
, MWIFIEX_RX_DATA_BUF_SIZE
);
415 dev_dbg(adapter
->dev
, "info: TX ring: add new skb base: %p, "
416 "buf_base: %p, buf_pbase: %#x:%x, buf_len: %#x\n",
417 skb
, skb
->data
, (u32
)*buf_pa
,
418 (u32
)(((u64
)*buf_pa
>> 32)), skb
->len
);
420 card
->tx_buf_list
[i
] = skb
;
421 card
->txbd_ring
[i
]->paddr
= *buf_pa
;
422 card
->txbd_ring
[i
]->len
= (u16
)skb
->len
;
423 card
->txbd_ring
[i
]->flags
= 0;
429 static int mwifiex_pcie_delete_txbd_ring(struct mwifiex_adapter
*adapter
)
431 struct pcie_service_card
*card
= adapter
->card
;
434 for (i
= 0; i
< MWIFIEX_MAX_TXRX_BD
; i
++) {
435 if (card
->tx_buf_list
[i
])
436 dev_kfree_skb_any(card
->tx_buf_list
[i
]);
437 card
->tx_buf_list
[i
] = NULL
;
438 card
->txbd_ring
[i
]->paddr
= 0;
439 card
->txbd_ring
[i
]->len
= 0;
440 card
->txbd_ring
[i
]->flags
= 0;
441 card
->txbd_ring
[i
] = NULL
;
444 kfree(card
->txbd_ring_vbase
);
445 card
->txbd_ring_size
= 0;
446 card
->txbd_wrptr
= 0;
447 card
->txbd_rdptr
= 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND
;
448 card
->txbd_ring_vbase
= NULL
;
454 * This function creates buffer descriptor ring for RX
456 static int mwifiex_pcie_create_rxbd_ring(struct mwifiex_adapter
*adapter
)
458 struct pcie_service_card
*card
= adapter
->card
;
464 * driver maintaines the read pointer and firmware maintaines the write
465 * pointer. The write pointer starts at 0 (zero) while the read pointer
466 * starts at zero with rollover bit set
468 card
->rxbd_wrptr
= 0;
469 card
->rxbd_rdptr
|= MWIFIEX_BD_FLAG_ROLLOVER_IND
;
471 card
->rxbd_ring_size
= sizeof(struct mwifiex_pcie_buf_desc
) *
473 dev_dbg(adapter
->dev
, "info: rxbd_ring: Allocating %d bytes\n",
474 card
->rxbd_ring_size
);
475 card
->rxbd_ring_vbase
= kzalloc(card
->rxbd_ring_size
, GFP_KERNEL
);
476 if (!card
->rxbd_ring_vbase
) {
477 dev_err(adapter
->dev
, "Unable to allocate buffer for "
481 card
->rxbd_ring_pbase
= virt_to_phys(card
->rxbd_ring_vbase
);
483 dev_dbg(adapter
->dev
,
484 "info: rxbd_ring - base: %p, pbase: %#x:%x, len: %#x\n",
485 card
->rxbd_ring_vbase
, (u32
)card
->rxbd_ring_pbase
,
486 (u32
)((u64
)card
->rxbd_ring_pbase
>> 32),
487 card
->rxbd_ring_size
);
489 for (i
= 0; i
< MWIFIEX_MAX_TXRX_BD
; i
++) {
490 card
->rxbd_ring
[i
] = (struct mwifiex_pcie_buf_desc
*)
491 (card
->rxbd_ring_vbase
+
492 (sizeof(struct mwifiex_pcie_buf_desc
)
495 /* Allocate skb here so that firmware can DMA data from it */
496 skb
= dev_alloc_skb(MWIFIEX_RX_DATA_BUF_SIZE
);
498 dev_err(adapter
->dev
,
499 "Unable to allocate skb for RX ring.\n");
500 kfree(card
->rxbd_ring_vbase
);
503 buf_pa
= mwifiex_update_sk_buff_pa(skb
);
504 skb_put(skb
, MWIFIEX_RX_DATA_BUF_SIZE
);
506 dev_dbg(adapter
->dev
, "info: RX ring: add new skb base: %p, "
507 "buf_base: %p, buf_pbase: %#x:%x, buf_len: %#x\n",
508 skb
, skb
->data
, (u32
)*buf_pa
, (u32
)((u64
)*buf_pa
>> 32),
511 card
->rx_buf_list
[i
] = skb
;
512 card
->rxbd_ring
[i
]->paddr
= *buf_pa
;
513 card
->rxbd_ring
[i
]->len
= (u16
)skb
->len
;
514 card
->rxbd_ring
[i
]->flags
= 0;
521 * This function deletes Buffer descriptor ring for RX
523 static int mwifiex_pcie_delete_rxbd_ring(struct mwifiex_adapter
*adapter
)
525 struct pcie_service_card
*card
= adapter
->card
;
528 for (i
= 0; i
< MWIFIEX_MAX_TXRX_BD
; i
++) {
529 if (card
->rx_buf_list
[i
])
530 dev_kfree_skb_any(card
->rx_buf_list
[i
]);
531 card
->rx_buf_list
[i
] = NULL
;
532 card
->rxbd_ring
[i
]->paddr
= 0;
533 card
->rxbd_ring
[i
]->len
= 0;
534 card
->rxbd_ring
[i
]->flags
= 0;
535 card
->rxbd_ring
[i
] = NULL
;
538 kfree(card
->rxbd_ring_vbase
);
539 card
->rxbd_ring_size
= 0;
540 card
->rxbd_wrptr
= 0;
541 card
->rxbd_rdptr
= 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND
;
542 card
->rxbd_ring_vbase
= NULL
;
548 * This function creates buffer descriptor ring for Events
550 static int mwifiex_pcie_create_evtbd_ring(struct mwifiex_adapter
*adapter
)
552 struct pcie_service_card
*card
= adapter
->card
;
558 * driver maintaines the read pointer and firmware maintaines the write
559 * pointer. The write pointer starts at 0 (zero) while the read pointer
560 * starts at zero with rollover bit set
562 card
->evtbd_wrptr
= 0;
563 card
->evtbd_rdptr
|= MWIFIEX_BD_FLAG_ROLLOVER_IND
;
565 card
->evtbd_ring_size
= sizeof(struct mwifiex_pcie_buf_desc
) *
567 dev_dbg(adapter
->dev
, "info: evtbd_ring: Allocating %d bytes\n",
568 card
->evtbd_ring_size
);
569 card
->evtbd_ring_vbase
= kzalloc(card
->evtbd_ring_size
, GFP_KERNEL
);
570 if (!card
->evtbd_ring_vbase
) {
571 dev_err(adapter
->dev
,
572 "Unable to allocate buffer. Terminating download\n");
575 card
->evtbd_ring_pbase
= virt_to_phys(card
->evtbd_ring_vbase
);
577 dev_dbg(adapter
->dev
,
578 "info: CMDRSP/EVT bd_ring - base: %p pbase: %#x:%x len: %#x\n",
579 card
->evtbd_ring_vbase
, (u32
)card
->evtbd_ring_pbase
,
580 (u32
)((u64
)card
->evtbd_ring_pbase
>> 32),
581 card
->evtbd_ring_size
);
583 for (i
= 0; i
< MWIFIEX_MAX_EVT_BD
; i
++) {
584 card
->evtbd_ring
[i
] = (struct mwifiex_pcie_buf_desc
*)
585 (card
->evtbd_ring_vbase
+
586 (sizeof(struct mwifiex_pcie_buf_desc
)
589 /* Allocate skb here so that firmware can DMA data from it */
590 skb
= dev_alloc_skb(MAX_EVENT_SIZE
);
592 dev_err(adapter
->dev
,
593 "Unable to allocate skb for EVENT buf.\n");
594 kfree(card
->evtbd_ring_vbase
);
597 buf_pa
= mwifiex_update_sk_buff_pa(skb
);
598 skb_put(skb
, MAX_EVENT_SIZE
);
600 dev_dbg(adapter
->dev
, "info: Evt ring: add new skb. base: %p, "
601 "buf_base: %p, buf_pbase: %#x:%x, buf_len: %#x\n",
602 skb
, skb
->data
, (u32
)*buf_pa
, (u32
)((u64
)*buf_pa
>> 32),
605 card
->evt_buf_list
[i
] = skb
;
606 card
->evtbd_ring
[i
]->paddr
= *buf_pa
;
607 card
->evtbd_ring
[i
]->len
= (u16
)skb
->len
;
608 card
->evtbd_ring
[i
]->flags
= 0;
615 * This function deletes Buffer descriptor ring for Events
617 static int mwifiex_pcie_delete_evtbd_ring(struct mwifiex_adapter
*adapter
)
619 struct pcie_service_card
*card
= adapter
->card
;
622 for (i
= 0; i
< MWIFIEX_MAX_EVT_BD
; i
++) {
623 if (card
->evt_buf_list
[i
])
624 dev_kfree_skb_any(card
->evt_buf_list
[i
]);
625 card
->evt_buf_list
[i
] = NULL
;
626 card
->evtbd_ring
[i
]->paddr
= 0;
627 card
->evtbd_ring
[i
]->len
= 0;
628 card
->evtbd_ring
[i
]->flags
= 0;
629 card
->evtbd_ring
[i
] = NULL
;
632 kfree(card
->evtbd_ring_vbase
);
633 card
->evtbd_wrptr
= 0;
634 card
->evtbd_rdptr
= 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND
;
635 card
->evtbd_ring_size
= 0;
636 card
->evtbd_ring_vbase
= NULL
;
642 * This function allocates a buffer for CMDRSP
644 static int mwifiex_pcie_alloc_cmdrsp_buf(struct mwifiex_adapter
*adapter
)
646 struct pcie_service_card
*card
= adapter
->card
;
649 /* Allocate memory for receiving command response data */
650 skb
= dev_alloc_skb(MWIFIEX_UPLD_SIZE
);
652 dev_err(adapter
->dev
,
653 "Unable to allocate skb for command response data.\n");
656 mwifiex_update_sk_buff_pa(skb
);
657 skb_put(skb
, MWIFIEX_UPLD_SIZE
);
658 card
->cmdrsp_buf
= skb
;
661 /* Allocate memory for sending command to firmware */
662 skb
= dev_alloc_skb(MWIFIEX_SIZE_OF_CMD_BUFFER
);
664 dev_err(adapter
->dev
,
665 "Unable to allocate skb for command data.\n");
668 mwifiex_update_sk_buff_pa(skb
);
669 skb_put(skb
, MWIFIEX_SIZE_OF_CMD_BUFFER
);
676 * This function deletes a buffer for CMDRSP
678 static int mwifiex_pcie_delete_cmdrsp_buf(struct mwifiex_adapter
*adapter
)
680 struct pcie_service_card
*card
;
685 card
= adapter
->card
;
687 if (card
&& card
->cmdrsp_buf
)
688 dev_kfree_skb_any(card
->cmdrsp_buf
);
690 if (card
&& card
->cmd_buf
)
691 dev_kfree_skb_any(card
->cmd_buf
);
697 * This function allocates a buffer for sleep cookie
699 static int mwifiex_pcie_alloc_sleep_cookie_buf(struct mwifiex_adapter
*adapter
)
702 struct pcie_service_card
*card
= adapter
->card
;
704 /* Allocate memory for sleep cookie */
705 skb
= dev_alloc_skb(sizeof(u32
));
707 dev_err(adapter
->dev
,
708 "Unable to allocate skb for sleep cookie!\n");
711 mwifiex_update_sk_buff_pa(skb
);
712 skb_put(skb
, sizeof(u32
));
714 /* Init val of Sleep Cookie */
715 *(u32
*)skb
->data
= FW_AWAKE_COOKIE
;
717 dev_dbg(adapter
->dev
, "alloc_scook: sleep cookie=0x%x\n",
718 *((u32
*)skb
->data
));
720 /* Save the sleep cookie */
721 card
->sleep_cookie
= skb
;
727 * This function deletes buffer for sleep cookie
729 static int mwifiex_pcie_delete_sleep_cookie_buf(struct mwifiex_adapter
*adapter
)
731 struct pcie_service_card
*card
;
736 card
= adapter
->card
;
738 if (card
&& card
->sleep_cookie
) {
739 dev_kfree_skb_any(card
->sleep_cookie
);
740 card
->sleep_cookie
= NULL
;
747 * This function sends data buffer to device
750 mwifiex_pcie_send_data(struct mwifiex_adapter
*adapter
, struct sk_buff
*skb
)
752 struct pcie_service_card
*card
= adapter
->card
;
757 if (!mwifiex_pcie_ok_to_access_hw(adapter
))
758 mwifiex_pm_wakeup_card(adapter
);
760 /* Read the TX ring read pointer set by firmware */
761 if (mwifiex_read_reg(adapter
, REG_TXBD_RDPTR
, &rdptr
)) {
762 dev_err(adapter
->dev
,
763 "SEND DATA: failed to read REG_TXBD_RDPTR\n");
767 wrindx
= card
->txbd_wrptr
& MWIFIEX_TXBD_MASK
;
769 dev_dbg(adapter
->dev
, "info: SEND DATA: <Rd: %#x, Wr: %#x>\n", rdptr
,
771 if (((card
->txbd_wrptr
& MWIFIEX_TXBD_MASK
) !=
772 (rdptr
& MWIFIEX_TXBD_MASK
)) ||
773 ((card
->txbd_wrptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
) !=
774 (rdptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
))) {
775 struct sk_buff
*skb_data
;
778 adapter
->data_sent
= true;
779 skb_data
= card
->tx_buf_list
[wrindx
];
780 memcpy(skb_data
->data
, skb
->data
, skb
->len
);
781 payload
= skb_data
->data
;
782 tmp
= (__le16
*)&payload
[0];
783 *tmp
= cpu_to_le16((u16
)skb
->len
);
784 tmp
= (__le16
*)&payload
[2];
785 *tmp
= cpu_to_le16(MWIFIEX_TYPE_DATA
);
786 skb_put(skb_data
, MWIFIEX_RX_DATA_BUF_SIZE
- skb_data
->len
);
787 skb_trim(skb_data
, skb
->len
);
788 buf_pa
= MWIFIEX_SKB_PACB(skb_data
);
789 card
->txbd_ring
[wrindx
]->paddr
= *buf_pa
;
790 card
->txbd_ring
[wrindx
]->len
= (u16
)skb_data
->len
;
791 card
->txbd_ring
[wrindx
]->flags
= MWIFIEX_BD_FLAG_FIRST_DESC
|
792 MWIFIEX_BD_FLAG_LAST_DESC
;
794 if ((++card
->txbd_wrptr
& MWIFIEX_TXBD_MASK
) ==
796 card
->txbd_wrptr
= ((card
->txbd_wrptr
&
797 MWIFIEX_BD_FLAG_ROLLOVER_IND
) ^
798 MWIFIEX_BD_FLAG_ROLLOVER_IND
);
800 /* Write the TX ring write pointer in to REG_TXBD_WRPTR */
801 if (mwifiex_write_reg(adapter
, REG_TXBD_WRPTR
,
803 dev_err(adapter
->dev
,
804 "SEND DATA: failed to write REG_TXBD_WRPTR\n");
808 /* Send the TX ready interrupt */
809 if (mwifiex_write_reg(adapter
, PCIE_CPU_INT_EVENT
,
810 CPU_INTR_DNLD_RDY
)) {
811 dev_err(adapter
->dev
,
812 "SEND DATA: failed to assert door-bell intr\n");
815 dev_dbg(adapter
->dev
, "info: SEND DATA: Updated <Rd: %#x, Wr: "
816 "%#x> and sent packet to firmware successfully\n",
817 rdptr
, card
->txbd_wrptr
);
819 dev_dbg(adapter
->dev
,
820 "info: TX Ring full, can't send packets to fw\n");
821 adapter
->data_sent
= true;
822 /* Send the TX ready interrupt */
823 if (mwifiex_write_reg(adapter
, PCIE_CPU_INT_EVENT
,
825 dev_err(adapter
->dev
,
826 "SEND DATA: failed to assert door-bell intr\n");
834 * This function handles received buffer ring and
835 * dispatches packets to upper
837 static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter
*adapter
)
839 struct pcie_service_card
*card
= adapter
->card
;
842 struct sk_buff
*skb_tmp
= NULL
;
844 /* Read the RX ring Write pointer set by firmware */
845 if (mwifiex_read_reg(adapter
, REG_RXBD_WRPTR
, &wrptr
)) {
846 dev_err(adapter
->dev
,
847 "RECV DATA: failed to read REG_TXBD_RDPTR\n");
852 while (((wrptr
& MWIFIEX_RXBD_MASK
) !=
853 (card
->rxbd_rdptr
& MWIFIEX_RXBD_MASK
)) ||
854 ((wrptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
) ==
855 (card
->rxbd_rdptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
))) {
856 struct sk_buff
*skb_data
;
859 rd_index
= card
->rxbd_rdptr
& MWIFIEX_RXBD_MASK
;
860 skb_data
= card
->rx_buf_list
[rd_index
];
862 /* Get data length from interface header -
863 first byte is len, second byte is type */
864 rx_len
= *((u16
*)skb_data
->data
);
865 dev_dbg(adapter
->dev
,
866 "info: RECV DATA: Rd=%#x, Wr=%#x, Len=%d\n",
867 card
->rxbd_rdptr
, wrptr
, rx_len
);
868 skb_tmp
= dev_alloc_skb(rx_len
);
870 dev_dbg(adapter
->dev
,
871 "info: Failed to alloc skb for RX\n");
876 skb_put(skb_tmp
, rx_len
);
878 memcpy(skb_tmp
->data
, skb_data
->data
+ INTF_HEADER_LEN
, rx_len
);
879 if ((++card
->rxbd_rdptr
& MWIFIEX_RXBD_MASK
) ==
880 MWIFIEX_MAX_TXRX_BD
) {
881 card
->rxbd_rdptr
= ((card
->rxbd_rdptr
&
882 MWIFIEX_BD_FLAG_ROLLOVER_IND
) ^
883 MWIFIEX_BD_FLAG_ROLLOVER_IND
);
885 dev_dbg(adapter
->dev
, "info: RECV DATA: <Rd: %#x, Wr: %#x>\n",
886 card
->rxbd_rdptr
, wrptr
);
888 /* Write the RX ring read pointer in to REG_RXBD_RDPTR */
889 if (mwifiex_write_reg(adapter
, REG_RXBD_RDPTR
,
891 dev_err(adapter
->dev
,
892 "RECV DATA: failed to write REG_RXBD_RDPTR\n");
897 /* Read the RX ring Write pointer set by firmware */
898 if (mwifiex_read_reg(adapter
, REG_RXBD_WRPTR
, &wrptr
)) {
899 dev_err(adapter
->dev
,
900 "RECV DATA: failed to read REG_TXBD_RDPTR\n");
904 dev_dbg(adapter
->dev
,
905 "info: RECV DATA: Rcvd packet from fw successfully\n");
906 mwifiex_handle_rx_packet(adapter
, skb_tmp
);
911 dev_kfree_skb_any(skb_tmp
);
916 * This function downloads the boot command to device
919 mwifiex_pcie_send_boot_cmd(struct mwifiex_adapter
*adapter
, struct sk_buff
*skb
)
921 phys_addr_t
*buf_pa
= MWIFIEX_SKB_PACB(skb
);
923 if (!(skb
->data
&& skb
->len
&& *buf_pa
)) {
924 dev_err(adapter
->dev
,
925 "Invalid parameter in %s <%p, %#x:%x, %x>\n",
926 __func__
, skb
->data
, skb
->len
,
927 (u32
)*buf_pa
, (u32
)((u64
)*buf_pa
>> 32));
931 /* Write the lower 32bits of the physical address to scratch
933 if (mwifiex_write_reg(adapter
, PCIE_SCRATCH_0_REG
, (u32
)*buf_pa
)) {
934 dev_err(adapter
->dev
,
935 "%s: failed to write download command to boot code.\n",
940 /* Write the upper 32bits of the physical address to scratch
942 if (mwifiex_write_reg(adapter
, PCIE_SCRATCH_1_REG
,
943 (u32
)((u64
)*buf_pa
>> 32))) {
944 dev_err(adapter
->dev
,
945 "%s: failed to write download command to boot code.\n",
950 /* Write the command length to scratch register 2 */
951 if (mwifiex_write_reg(adapter
, PCIE_SCRATCH_2_REG
, skb
->len
)) {
952 dev_err(adapter
->dev
,
953 "%s: failed to write command len to scratch reg 2\n",
958 /* Ring the door bell */
959 if (mwifiex_write_reg(adapter
, PCIE_CPU_INT_EVENT
,
960 CPU_INTR_DOOR_BELL
)) {
961 dev_err(adapter
->dev
,
962 "%s: failed to assert door-bell intr\n", __func__
);
970 * This function downloads commands to the device
973 mwifiex_pcie_send_cmd(struct mwifiex_adapter
*adapter
, struct sk_buff
*skb
)
975 struct pcie_service_card
*card
= adapter
->card
;
977 phys_addr_t
*cmd_buf_pa
;
978 phys_addr_t
*cmdrsp_buf_pa
;
980 if (!(skb
->data
&& skb
->len
)) {
981 dev_err(adapter
->dev
, "Invalid parameter in %s <%p, %#x>\n",
982 __func__
, skb
->data
, skb
->len
);
986 /* Make sure a command response buffer is available */
987 if (!card
->cmdrsp_buf
) {
988 dev_err(adapter
->dev
,
989 "No response buffer available, send command failed\n");
993 /* Make sure a command buffer is available */
994 if (!card
->cmd_buf
) {
995 dev_err(adapter
->dev
, "Command buffer not available\n");
999 adapter
->cmd_sent
= true;
1000 /* Copy the given skb in to DMA accessable shared buffer */
1001 skb_put(card
->cmd_buf
, MWIFIEX_SIZE_OF_CMD_BUFFER
- card
->cmd_buf
->len
);
1002 skb_trim(card
->cmd_buf
, skb
->len
);
1003 memcpy(card
->cmd_buf
->data
, skb
->data
, skb
->len
);
1005 /* To send a command, the driver will:
1006 1. Write the 64bit physical address of the data buffer to
1008 2. Ring the door bell (i.e. set the door bell interrupt)
1010 In response to door bell interrupt, the firmware will perform
1011 the DMA of the command packet (first header to obtain the total
1012 length and then rest of the command).
1015 if (card
->cmdrsp_buf
) {
1016 cmdrsp_buf_pa
= MWIFIEX_SKB_PACB(card
->cmdrsp_buf
);
1017 /* Write the lower 32bits of the cmdrsp buffer physical
1019 if (mwifiex_write_reg(adapter
, REG_CMDRSP_ADDR_LO
,
1020 (u32
)*cmdrsp_buf_pa
)) {
1021 dev_err(adapter
->dev
,
1022 "Failed to write download cmd to boot code.\n");
1026 /* Write the upper 32bits of the cmdrsp buffer physical
1028 if (mwifiex_write_reg(adapter
, REG_CMDRSP_ADDR_HI
,
1029 (u32
)((u64
)*cmdrsp_buf_pa
>> 32))) {
1030 dev_err(adapter
->dev
,
1031 "Failed to write download cmd to boot code.\n");
1037 cmd_buf_pa
= MWIFIEX_SKB_PACB(card
->cmd_buf
);
1038 /* Write the lower 32bits of the physical address to REG_CMD_ADDR_LO */
1039 if (mwifiex_write_reg(adapter
, REG_CMD_ADDR_LO
, (u32
)*cmd_buf_pa
)) {
1040 dev_err(adapter
->dev
,
1041 "Failed to write download cmd to boot code.\n");
1045 /* Write the upper 32bits of the physical address to REG_CMD_ADDR_HI */
1046 if (mwifiex_write_reg(adapter
, REG_CMD_ADDR_HI
,
1047 (u32
)((u64
)*cmd_buf_pa
>> 32))) {
1048 dev_err(adapter
->dev
,
1049 "Failed to write download cmd to boot code.\n");
1054 /* Write the command length to REG_CMD_SIZE */
1055 if (mwifiex_write_reg(adapter
, REG_CMD_SIZE
, card
->cmd_buf
->len
)) {
1056 dev_err(adapter
->dev
,
1057 "Failed to write cmd len to REG_CMD_SIZE\n");
1062 /* Ring the door bell */
1063 if (mwifiex_write_reg(adapter
, PCIE_CPU_INT_EVENT
,
1064 CPU_INTR_DOOR_BELL
)) {
1065 dev_err(adapter
->dev
,
1066 "Failed to assert door-bell intr\n");
1073 adapter
->cmd_sent
= false;
1079 * This function handles command complete interrupt
1081 static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter
*adapter
)
1083 struct pcie_service_card
*card
= adapter
->card
;
1084 struct sk_buff
*skb
= card
->cmdrsp_buf
;
1087 dev_dbg(adapter
->dev
, "info: Rx CMD Response\n");
1089 if (!adapter
->curr_cmd
) {
1090 skb_pull(skb
, INTF_HEADER_LEN
);
1091 if (adapter
->ps_state
== PS_STATE_SLEEP_CFM
) {
1092 mwifiex_process_sleep_confirm_resp(adapter
, skb
->data
,
1094 while (mwifiex_pcie_ok_to_access_hw(adapter
) &&
1096 usleep_range(50, 60);
1098 dev_err(adapter
->dev
,
1099 "There is no command but got cmdrsp\n");
1101 memcpy(adapter
->upld_buf
, skb
->data
,
1102 min_t(u32
, MWIFIEX_SIZE_OF_CMD_BUFFER
, skb
->len
));
1103 skb_push(skb
, INTF_HEADER_LEN
);
1104 } else if (mwifiex_pcie_ok_to_access_hw(adapter
)) {
1105 skb_pull(skb
, INTF_HEADER_LEN
);
1106 adapter
->curr_cmd
->resp_skb
= skb
;
1107 adapter
->cmd_resp_received
= true;
1108 /* Take the pointer and set it to CMD node and will
1109 return in the response complete callback */
1110 card
->cmdrsp_buf
= NULL
;
1112 /* Clear the cmd-rsp buffer address in scratch registers. This
1113 will prevent firmware from writing to the same response
1115 if (mwifiex_write_reg(adapter
, REG_CMDRSP_ADDR_LO
, 0)) {
1116 dev_err(adapter
->dev
,
1117 "cmd_done: failed to clear cmd_rsp_addr_lo\n");
1120 /* Write the upper 32bits of the cmdrsp buffer physical
1122 if (mwifiex_write_reg(adapter
, REG_CMDRSP_ADDR_HI
, 0)) {
1123 dev_err(adapter
->dev
,
1124 "cmd_done: failed to clear cmd_rsp_addr_hi\n");
1133 * Command Response processing complete handler
1135 static int mwifiex_pcie_cmdrsp_complete(struct mwifiex_adapter
*adapter
,
1136 struct sk_buff
*skb
)
1138 struct pcie_service_card
*card
= adapter
->card
;
1141 card
->cmdrsp_buf
= skb
;
1142 skb_push(card
->cmdrsp_buf
, INTF_HEADER_LEN
);
1149 * This function handles firmware event ready interrupt
1151 static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter
*adapter
)
1153 struct pcie_service_card
*card
= adapter
->card
;
1154 u32 rdptr
= card
->evtbd_rdptr
& MWIFIEX_EVTBD_MASK
;
1157 if (adapter
->event_received
) {
1158 dev_dbg(adapter
->dev
, "info: Event being processed, "
1159 "do not process this interrupt just yet\n");
1163 if (rdptr
>= MWIFIEX_MAX_EVT_BD
) {
1164 dev_dbg(adapter
->dev
, "info: Invalid read pointer...\n");
1168 /* Read the event ring write pointer set by firmware */
1169 if (mwifiex_read_reg(adapter
, REG_EVTBD_WRPTR
, &wrptr
)) {
1170 dev_err(adapter
->dev
,
1171 "EventReady: failed to read REG_EVTBD_WRPTR\n");
1175 dev_dbg(adapter
->dev
, "info: EventReady: Initial <Rd: 0x%x, Wr: 0x%x>",
1176 card
->evtbd_rdptr
, wrptr
);
1177 if (((wrptr
& MWIFIEX_EVTBD_MASK
) != (card
->evtbd_rdptr
1178 & MWIFIEX_EVTBD_MASK
)) ||
1179 ((wrptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
) ==
1180 (card
->evtbd_rdptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
))) {
1181 struct sk_buff
*skb_cmd
;
1182 __le16 data_len
= 0;
1185 dev_dbg(adapter
->dev
, "info: Read Index: %d\n", rdptr
);
1186 skb_cmd
= card
->evt_buf_list
[rdptr
];
1187 /* Take the pointer and set it to event pointer in adapter
1188 and will return back after event handling callback */
1189 card
->evt_buf_list
[rdptr
] = NULL
;
1190 card
->evtbd_ring
[rdptr
]->paddr
= 0;
1191 card
->evtbd_ring
[rdptr
]->len
= 0;
1192 card
->evtbd_ring
[rdptr
]->flags
= 0;
1194 event
= *(u32
*) &skb_cmd
->data
[INTF_HEADER_LEN
];
1195 adapter
->event_cause
= event
;
1196 /* The first 4bytes will be the event transfer header
1197 len is 2 bytes followed by type which is 2 bytes */
1198 memcpy(&data_len
, skb_cmd
->data
, sizeof(__le16
));
1199 evt_len
= le16_to_cpu(data_len
);
1201 skb_pull(skb_cmd
, INTF_HEADER_LEN
);
1202 dev_dbg(adapter
->dev
, "info: Event length: %d\n", evt_len
);
1204 if ((evt_len
> 0) && (evt_len
< MAX_EVENT_SIZE
))
1205 memcpy(adapter
->event_body
, skb_cmd
->data
+
1206 MWIFIEX_EVENT_HEADER_LEN
, evt_len
-
1207 MWIFIEX_EVENT_HEADER_LEN
);
1209 adapter
->event_received
= true;
1210 adapter
->event_skb
= skb_cmd
;
1212 /* Do not update the event read pointer here, wait till the
1213 buffer is released. This is just to make things simpler,
1214 we need to find a better method of managing these buffers.
1222 * Event processing complete handler
1224 static int mwifiex_pcie_event_complete(struct mwifiex_adapter
*adapter
,
1225 struct sk_buff
*skb
)
1227 struct pcie_service_card
*card
= adapter
->card
;
1229 u32 rdptr
= card
->evtbd_rdptr
& MWIFIEX_EVTBD_MASK
;
1231 phys_addr_t
*buf_pa
;
1236 if (rdptr
>= MWIFIEX_MAX_EVT_BD
) {
1237 dev_err(adapter
->dev
, "event_complete: Invalid rdptr 0x%x\n",
1242 /* Read the event ring write pointer set by firmware */
1243 if (mwifiex_read_reg(adapter
, REG_EVTBD_WRPTR
, &wrptr
)) {
1244 dev_err(adapter
->dev
,
1245 "event_complete: failed to read REG_EVTBD_WRPTR\n");
1249 if (!card
->evt_buf_list
[rdptr
]) {
1250 skb_push(skb
, INTF_HEADER_LEN
);
1251 card
->evt_buf_list
[rdptr
] = skb
;
1252 buf_pa
= MWIFIEX_SKB_PACB(skb
);
1253 card
->evtbd_ring
[rdptr
]->paddr
= *buf_pa
;
1254 card
->evtbd_ring
[rdptr
]->len
= (u16
)skb
->len
;
1255 card
->evtbd_ring
[rdptr
]->flags
= 0;
1258 dev_dbg(adapter
->dev
,
1259 "info: ERROR: buf still valid at index %d, <%p, %p>\n",
1260 rdptr
, card
->evt_buf_list
[rdptr
], skb
);
1263 if ((++card
->evtbd_rdptr
& MWIFIEX_EVTBD_MASK
) == MWIFIEX_MAX_EVT_BD
) {
1264 card
->evtbd_rdptr
= ((card
->evtbd_rdptr
&
1265 MWIFIEX_BD_FLAG_ROLLOVER_IND
) ^
1266 MWIFIEX_BD_FLAG_ROLLOVER_IND
);
1269 dev_dbg(adapter
->dev
, "info: Updated <Rd: 0x%x, Wr: 0x%x>",
1270 card
->evtbd_rdptr
, wrptr
);
1272 /* Write the event ring read pointer in to REG_EVTBD_RDPTR */
1273 if (mwifiex_write_reg(adapter
, REG_EVTBD_RDPTR
, card
->evtbd_rdptr
)) {
1274 dev_err(adapter
->dev
,
1275 "event_complete: failed to read REG_EVTBD_RDPTR\n");
1279 dev_dbg(adapter
->dev
, "info: Check Events Again\n");
1280 ret
= mwifiex_pcie_process_event_ready(adapter
);
1286 * This function downloads the firmware to the card.
1288 * Firmware is downloaded to the card in blocks. Every block download
1289 * is tested for CRC errors, and retried a number of times before
1290 * returning failure.
1292 static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter
*adapter
,
1293 struct mwifiex_fw_image
*fw
)
1296 u8
*firmware
= fw
->fw_buf
;
1297 u32 firmware_len
= fw
->fw_len
;
1299 struct sk_buff
*skb
;
1300 u32 txlen
, tx_blocks
= 0, tries
, len
;
1301 u32 block_retry_cnt
= 0;
1304 pr_err("adapter structure is not valid\n");
1308 if (!firmware
|| !firmware_len
) {
1309 dev_err(adapter
->dev
,
1310 "No firmware image found! Terminating download\n");
1314 dev_dbg(adapter
->dev
, "info: Downloading FW image (%d bytes)\n",
1317 if (mwifiex_pcie_disable_host_int(adapter
)) {
1318 dev_err(adapter
->dev
,
1319 "%s: Disabling interrupts failed.\n", __func__
);
1323 skb
= dev_alloc_skb(MWIFIEX_UPLD_SIZE
);
1328 mwifiex_update_sk_buff_pa(skb
);
1330 /* Perform firmware data transfer */
1335 if (offset
>= firmware_len
)
1338 for (tries
= 0; tries
< MAX_POLL_TRIES
; tries
++) {
1339 ret
= mwifiex_read_reg(adapter
, PCIE_SCRATCH_2_REG
,
1342 dev_warn(adapter
->dev
,
1343 "Failed reading len from boot code\n");
1348 usleep_range(10, 20);
1353 } else if (len
> MWIFIEX_UPLD_SIZE
) {
1354 pr_err("FW download failure @ %d, invalid length %d\n",
1364 if (block_retry_cnt
> MAX_WRITE_IOMEM_RETRY
) {
1365 pr_err("FW download failure @ %d, over max "
1366 "retry count\n", offset
);
1370 dev_err(adapter
->dev
, "FW CRC error indicated by the "
1371 "helper: len = 0x%04X, txlen = %d\n",
1374 /* Setting this to 0 to resend from same offset */
1377 block_retry_cnt
= 0;
1378 /* Set blocksize to transfer - checking for
1380 if (firmware_len
- offset
< txlen
)
1381 txlen
= firmware_len
- offset
;
1383 dev_dbg(adapter
->dev
, ".");
1385 tx_blocks
= (txlen
+
1386 MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD
- 1) /
1387 MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD
;
1389 /* Copy payload to buffer */
1390 memmove(skb
->data
, &firmware
[offset
], txlen
);
1393 skb_put(skb
, MWIFIEX_UPLD_SIZE
- skb
->len
);
1394 skb_trim(skb
, tx_blocks
* MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD
);
1396 /* Send the boot command to device */
1397 if (mwifiex_pcie_send_boot_cmd(adapter
, skb
)) {
1398 dev_err(adapter
->dev
,
1399 "Failed to send firmware download command\n");
1403 /* Wait for the command done interrupt */
1405 if (mwifiex_read_reg(adapter
, PCIE_CPU_INT_STATUS
,
1407 dev_err(adapter
->dev
, "%s: Failed to read "
1408 "interrupt status during fw dnld.\n",
1413 } while ((ireg_intr
& CPU_INTR_DOOR_BELL
) ==
1414 CPU_INTR_DOOR_BELL
);
1418 dev_dbg(adapter
->dev
, "info:\nFW download over, size %d bytes\n",
1424 dev_kfree_skb_any(skb
);
1429 * This function checks the firmware status in card.
1431 * The winner interface is also determined by this function.
1434 mwifiex_check_fw_status(struct mwifiex_adapter
*adapter
, u32 poll_num
)
1437 u32 firmware_stat
, winner_status
;
1440 /* Mask spurios interrupts */
1441 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_STATUS_MASK
,
1443 dev_warn(adapter
->dev
, "Write register failed\n");
1447 dev_dbg(adapter
->dev
, "Setting driver ready signature\n");
1448 if (mwifiex_write_reg(adapter
, REG_DRV_READY
, FIRMWARE_READY_PCIE
)) {
1449 dev_err(adapter
->dev
,
1450 "Failed to write driver ready signature\n");
1454 /* Wait for firmware initialization event */
1455 for (tries
= 0; tries
< poll_num
; tries
++) {
1456 if (mwifiex_read_reg(adapter
, PCIE_SCRATCH_3_REG
,
1463 if (firmware_stat
== FIRMWARE_READY_PCIE
) {
1473 if (mwifiex_read_reg(adapter
, PCIE_SCRATCH_3_REG
,
1476 else if (!winner_status
) {
1477 dev_err(adapter
->dev
, "PCI-E is the winner\n");
1478 adapter
->winner
= 1;
1481 dev_err(adapter
->dev
,
1482 "PCI-E is not the winner <%#x,%d>, exit dnld\n",
1483 ret
, adapter
->winner
);
1492 * This function reads the interrupt status from card.
1494 static void mwifiex_interrupt_status(struct mwifiex_adapter
*adapter
)
1497 unsigned long flags
;
1499 if (!mwifiex_pcie_ok_to_access_hw(adapter
))
1502 if (mwifiex_read_reg(adapter
, PCIE_HOST_INT_STATUS
, &pcie_ireg
)) {
1503 dev_warn(adapter
->dev
, "Read register failed\n");
1507 if ((pcie_ireg
!= 0xFFFFFFFF) && (pcie_ireg
)) {
1509 mwifiex_pcie_disable_host_int(adapter
);
1511 /* Clear the pending interrupts */
1512 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_STATUS
,
1514 dev_warn(adapter
->dev
, "Write register failed\n");
1517 spin_lock_irqsave(&adapter
->int_lock
, flags
);
1518 adapter
->int_status
|= pcie_ireg
;
1519 spin_unlock_irqrestore(&adapter
->int_lock
, flags
);
1521 if (pcie_ireg
& HOST_INTR_CMD_DONE
) {
1522 if ((adapter
->ps_state
== PS_STATE_SLEEP_CFM
) ||
1523 (adapter
->ps_state
== PS_STATE_SLEEP
)) {
1524 mwifiex_pcie_enable_host_int(adapter
);
1525 if (mwifiex_write_reg(adapter
,
1527 CPU_INTR_SLEEP_CFM_DONE
)
1529 dev_warn(adapter
->dev
,
1530 "Write register failed\n");
1535 } else if (!adapter
->pps_uapsd_mode
&&
1536 adapter
->ps_state
== PS_STATE_SLEEP
) {
1537 /* Potentially for PCIe we could get other
1538 * interrupts like shared. Don't change power
1539 * state until cookie is set */
1540 if (mwifiex_pcie_ok_to_access_hw(adapter
))
1541 adapter
->ps_state
= PS_STATE_AWAKE
;
1547 * Interrupt handler for PCIe root port
1549 * This function reads the interrupt status from firmware and assigns
1550 * the main process in workqueue which will handle the interrupt.
1552 static irqreturn_t
mwifiex_pcie_interrupt(int irq
, void *context
)
1554 struct pci_dev
*pdev
= (struct pci_dev
*)context
;
1555 struct pcie_service_card
*card
;
1556 struct mwifiex_adapter
*adapter
;
1559 pr_debug("info: %s: pdev is NULL\n", (u8
*)pdev
);
1563 card
= (struct pcie_service_card
*) pci_get_drvdata(pdev
);
1564 if (!card
|| !card
->adapter
) {
1565 pr_debug("info: %s: card=%p adapter=%p\n", __func__
, card
,
1566 card
? card
->adapter
: NULL
);
1569 adapter
= card
->adapter
;
1571 if (adapter
->surprise_removed
)
1574 mwifiex_interrupt_status(adapter
);
1575 queue_work(adapter
->workqueue
, &adapter
->main_work
);
1582 * This function checks the current interrupt status.
1584 * The following interrupts are checked and handled by this function -
1587 * - Command received
1588 * - Packets received
1591 * In case of Rx packets received, the packets are uploaded from card to
1592 * host and processed accordingly.
1594 static int mwifiex_process_int_status(struct mwifiex_adapter
*adapter
)
1598 unsigned long flags
;
1600 spin_lock_irqsave(&adapter
->int_lock
, flags
);
1601 /* Clear out unused interrupts */
1602 adapter
->int_status
&= HOST_INTR_MASK
;
1603 spin_unlock_irqrestore(&adapter
->int_lock
, flags
);
1605 while (adapter
->int_status
& HOST_INTR_MASK
) {
1606 if (adapter
->int_status
& HOST_INTR_DNLD_DONE
) {
1607 adapter
->int_status
&= ~HOST_INTR_DNLD_DONE
;
1608 if (adapter
->data_sent
) {
1609 dev_dbg(adapter
->dev
, "info: DATA sent intr\n");
1610 adapter
->data_sent
= false;
1613 if (adapter
->int_status
& HOST_INTR_UPLD_RDY
) {
1614 adapter
->int_status
&= ~HOST_INTR_UPLD_RDY
;
1615 dev_dbg(adapter
->dev
, "info: Rx DATA\n");
1616 ret
= mwifiex_pcie_process_recv_data(adapter
);
1620 if (adapter
->int_status
& HOST_INTR_EVENT_RDY
) {
1621 adapter
->int_status
&= ~HOST_INTR_EVENT_RDY
;
1622 dev_dbg(adapter
->dev
, "info: Rx EVENT\n");
1623 ret
= mwifiex_pcie_process_event_ready(adapter
);
1628 if (adapter
->int_status
& HOST_INTR_CMD_DONE
) {
1629 adapter
->int_status
&= ~HOST_INTR_CMD_DONE
;
1630 if (adapter
->cmd_sent
) {
1631 dev_dbg(adapter
->dev
,
1632 "info: CMD sent Interrupt\n");
1633 adapter
->cmd_sent
= false;
1635 /* Handle command response */
1636 ret
= mwifiex_pcie_process_cmd_complete(adapter
);
1641 if (mwifiex_pcie_ok_to_access_hw(adapter
)) {
1642 if (mwifiex_read_reg(adapter
, PCIE_HOST_INT_STATUS
,
1644 dev_warn(adapter
->dev
,
1645 "Read register failed\n");
1649 if ((pcie_ireg
!= 0xFFFFFFFF) && (pcie_ireg
)) {
1650 if (mwifiex_write_reg(adapter
,
1651 PCIE_HOST_INT_STATUS
,
1653 dev_warn(adapter
->dev
,
1654 "Write register failed\n");
1657 adapter
->int_status
|= pcie_ireg
;
1658 adapter
->int_status
&= HOST_INTR_MASK
;
1663 dev_dbg(adapter
->dev
, "info: cmd_sent=%d data_sent=%d\n",
1664 adapter
->cmd_sent
, adapter
->data_sent
);
1665 mwifiex_pcie_enable_host_int(adapter
);
1671 * This function downloads data from driver to card.
1673 * Both commands and data packets are transferred to the card by this
1676 * This function adds the PCIE specific header to the front of the buffer
1677 * before transferring. The header contains the length of the packet and
1678 * the type. The firmware handles the packets based upon this set type.
1680 static int mwifiex_pcie_host_to_card(struct mwifiex_adapter
*adapter
, u8 type
,
1681 struct sk_buff
*skb
,
1682 struct mwifiex_tx_param
*tx_param
)
1685 dev_err(adapter
->dev
, "Passed NULL skb to %s\n", __func__
);
1689 if (type
== MWIFIEX_TYPE_DATA
)
1690 return mwifiex_pcie_send_data(adapter
, skb
);
1691 else if (type
== MWIFIEX_TYPE_CMD
)
1692 return mwifiex_pcie_send_cmd(adapter
, skb
);
1698 * This function initializes the PCI-E host memory space, WCB rings, etc.
1700 * The following initializations steps are followed -
1701 * - Allocate TXBD ring buffers
1702 * - Allocate RXBD ring buffers
1703 * - Allocate event BD ring buffers
1704 * - Allocate command response ring buffer
1705 * - Allocate sleep cookie buffer
1707 static int mwifiex_pcie_init(struct mwifiex_adapter
*adapter
)
1709 struct pcie_service_card
*card
= adapter
->card
;
1711 struct pci_dev
*pdev
= card
->dev
;
1713 pci_set_drvdata(pdev
, card
);
1715 ret
= pci_enable_device(pdev
);
1717 goto err_enable_dev
;
1719 pci_set_master(pdev
);
1721 dev_dbg(adapter
->dev
, "try set_consistent_dma_mask(32)\n");
1722 ret
= pci_set_dma_mask(pdev
, DMA_BIT_MASK(32));
1724 dev_err(adapter
->dev
, "set_dma_mask(32) failed\n");
1725 goto err_set_dma_mask
;
1728 ret
= pci_set_consistent_dma_mask(pdev
, DMA_BIT_MASK(32));
1730 dev_err(adapter
->dev
, "set_consistent_dma_mask(64) failed\n");
1731 goto err_set_dma_mask
;
1734 ret
= pci_request_region(pdev
, 0, DRV_NAME
);
1736 dev_err(adapter
->dev
, "req_reg(0) error\n");
1737 goto err_req_region0
;
1739 card
->pci_mmap
= pci_iomap(pdev
, 0, 0);
1740 if (!card
->pci_mmap
) {
1741 dev_err(adapter
->dev
, "iomap(0) error\n");
1744 ret
= pci_request_region(pdev
, 2, DRV_NAME
);
1746 dev_err(adapter
->dev
, "req_reg(2) error\n");
1747 goto err_req_region2
;
1749 card
->pci_mmap1
= pci_iomap(pdev
, 2, 0);
1750 if (!card
->pci_mmap1
) {
1751 dev_err(adapter
->dev
, "iomap(2) error\n");
1755 dev_dbg(adapter
->dev
,
1756 "PCI memory map Virt0: %p PCI memory map Virt2: %p\n",
1757 card
->pci_mmap
, card
->pci_mmap1
);
1759 card
->cmdrsp_buf
= NULL
;
1760 ret
= mwifiex_pcie_create_txbd_ring(adapter
);
1763 ret
= mwifiex_pcie_create_rxbd_ring(adapter
);
1766 ret
= mwifiex_pcie_create_evtbd_ring(adapter
);
1769 ret
= mwifiex_pcie_alloc_cmdrsp_buf(adapter
);
1771 goto err_alloc_cmdbuf
;
1772 ret
= mwifiex_pcie_alloc_sleep_cookie_buf(adapter
);
1774 goto err_alloc_cookie
;
1779 mwifiex_pcie_delete_cmdrsp_buf(adapter
);
1781 mwifiex_pcie_delete_evtbd_ring(adapter
);
1783 mwifiex_pcie_delete_rxbd_ring(adapter
);
1785 mwifiex_pcie_delete_txbd_ring(adapter
);
1787 pci_iounmap(pdev
, card
->pci_mmap1
);
1789 pci_release_region(pdev
, 2);
1791 pci_iounmap(pdev
, card
->pci_mmap
);
1793 pci_release_region(pdev
, 0);
1796 pci_disable_device(pdev
);
1798 pci_set_drvdata(pdev
, NULL
);
1803 * This function cleans up the allocated card buffers.
1805 * The following are freed by this function -
1806 * - TXBD ring buffers
1807 * - RXBD ring buffers
1808 * - Event BD ring buffers
1809 * - Command response ring buffer
1810 * - Sleep cookie buffer
1812 static void mwifiex_pcie_cleanup(struct mwifiex_adapter
*adapter
)
1814 struct pcie_service_card
*card
= adapter
->card
;
1815 struct pci_dev
*pdev
= card
->dev
;
1817 mwifiex_pcie_delete_sleep_cookie_buf(adapter
);
1818 mwifiex_pcie_delete_cmdrsp_buf(adapter
);
1819 mwifiex_pcie_delete_evtbd_ring(adapter
);
1820 mwifiex_pcie_delete_rxbd_ring(adapter
);
1821 mwifiex_pcie_delete_txbd_ring(adapter
);
1822 card
->cmdrsp_buf
= NULL
;
1824 dev_dbg(adapter
->dev
, "Clearing driver ready signature\n");
1826 if (mwifiex_write_reg(adapter
, REG_DRV_READY
, 0x00000000))
1827 dev_err(adapter
->dev
,
1828 "Failed to write driver not-ready signature\n");
1832 pci_iounmap(pdev
, card
->pci_mmap
);
1833 pci_iounmap(pdev
, card
->pci_mmap1
);
1835 pci_release_regions(pdev
);
1836 pci_disable_device(pdev
);
1837 pci_set_drvdata(pdev
, NULL
);
1842 * This function registers the PCIE device.
1844 * PCIE IRQ is claimed, block size is set and driver data is initialized.
1846 static int mwifiex_register_dev(struct mwifiex_adapter
*adapter
)
1849 struct pcie_service_card
*card
= adapter
->card
;
1850 struct pci_dev
*pdev
= card
->dev
;
1852 /* save adapter pointer in card */
1853 card
->adapter
= adapter
;
1855 ret
= request_irq(pdev
->irq
, mwifiex_pcie_interrupt
, IRQF_SHARED
,
1858 pr_err("request_irq failed: ret=%d\n", ret
);
1859 adapter
->card
= NULL
;
1863 adapter
->dev
= &pdev
->dev
;
1864 strcpy(adapter
->fw_name
, PCIE8766_DEFAULT_FW_NAME
);
1870 * This function unregisters the PCIE device.
1872 * The PCIE IRQ is released, the function is disabled and driver
1873 * data is set to null.
1875 static void mwifiex_unregister_dev(struct mwifiex_adapter
*adapter
)
1877 struct pcie_service_card
*card
= adapter
->card
;
1880 dev_dbg(adapter
->dev
, "%s(): calling free_irq()\n", __func__
);
1881 free_irq(card
->dev
->irq
, card
->dev
);
1885 static struct mwifiex_if_ops pcie_ops
= {
1886 .init_if
= mwifiex_pcie_init
,
1887 .cleanup_if
= mwifiex_pcie_cleanup
,
1888 .check_fw_status
= mwifiex_check_fw_status
,
1889 .prog_fw
= mwifiex_prog_fw_w_helper
,
1890 .register_dev
= mwifiex_register_dev
,
1891 .unregister_dev
= mwifiex_unregister_dev
,
1892 .enable_int
= mwifiex_pcie_enable_host_int
,
1893 .process_int_status
= mwifiex_process_int_status
,
1894 .host_to_card
= mwifiex_pcie_host_to_card
,
1895 .wakeup
= mwifiex_pm_wakeup_card
,
1896 .wakeup_complete
= mwifiex_pm_wakeup_card_complete
,
1899 .cmdrsp_complete
= mwifiex_pcie_cmdrsp_complete
,
1900 .event_complete
= mwifiex_pcie_event_complete
,
1901 .update_mp_end_port
= NULL
,
1902 .cleanup_mpa_buf
= NULL
,
1906 * This function initializes the PCIE driver module.
1908 * This initiates the semaphore and registers the device with
1911 static int mwifiex_pcie_init_module(void)
1915 pr_debug("Marvell 8766 PCIe Driver\n");
1917 sema_init(&add_remove_card_sem
, 1);
1919 /* Clear the flag in case user removes the card. */
1922 ret
= pci_register_driver(&mwifiex_pcie
);
1924 pr_err("Driver register failed!\n");
1926 pr_debug("info: Driver registered successfully!\n");
1932 * This function cleans up the PCIE driver.
1934 * The following major steps are followed for cleanup -
1935 * - Resume the device if its suspended
1936 * - Disconnect the device if connected
1937 * - Shutdown the firmware
1938 * - Unregister the device from PCIE bus.
1940 static void mwifiex_pcie_cleanup_module(void)
1942 if (!down_interruptible(&add_remove_card_sem
))
1943 up(&add_remove_card_sem
);
1945 /* Set the flag as user is removing this module. */
1948 pci_unregister_driver(&mwifiex_pcie
);
1951 module_init(mwifiex_pcie_init_module
);
1952 module_exit(mwifiex_pcie_cleanup_module
);
1954 MODULE_AUTHOR("Marvell International Ltd.");
1955 MODULE_DESCRIPTION("Marvell WiFi-Ex PCI-Express Driver version " PCIE_VERSION
);
1956 MODULE_VERSION(PCIE_VERSION
);
1957 MODULE_LICENSE("GPL v2");
1958 MODULE_FIRMWARE("mrvl/pcie8766_uapsta.bin");