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
);
90 pr_err("%s: failed to alloc memory\n", __func__
);
96 if (mwifiex_add_card(card
, &add_remove_card_sem
, &pcie_ops
,
98 pr_err("%s failed\n", __func__
);
107 * This function removes the interface and frees up the card structure.
109 static void mwifiex_pcie_remove(struct pci_dev
*pdev
)
111 struct pcie_service_card
*card
;
112 struct mwifiex_adapter
*adapter
;
113 struct mwifiex_private
*priv
;
116 card
= pci_get_drvdata(pdev
);
120 adapter
= card
->adapter
;
121 if (!adapter
|| !adapter
->priv_num
)
126 if (adapter
->is_suspended
)
127 mwifiex_pcie_resume(pdev
);
130 for (i
= 0; i
< adapter
->priv_num
; i
++)
131 if ((GET_BSS_ROLE(adapter
->priv
[i
]) ==
132 MWIFIEX_BSS_ROLE_STA
) &&
133 adapter
->priv
[i
]->media_connected
)
134 mwifiex_deauthenticate(adapter
->priv
[i
], NULL
);
136 priv
= mwifiex_get_priv(adapter
, MWIFIEX_BSS_ROLE_ANY
);
138 mwifiex_disable_auto_ds(priv
);
140 mwifiex_init_shutdown_fw(priv
, MWIFIEX_FUNC_SHUTDOWN
);
143 mwifiex_remove_card(card
->adapter
, &add_remove_card_sem
);
148 * Kernel needs to suspend all functions separately. Therefore all
149 * registered functions must have drivers with suspend and resume
150 * methods. Failing that the kernel simply removes the whole card.
152 * If already not suspended, this function allocates and sends a host
153 * sleep activate request to the firmware and turns off the traffic.
155 static int mwifiex_pcie_suspend(struct pci_dev
*pdev
, pm_message_t state
)
157 struct mwifiex_adapter
*adapter
;
158 struct pcie_service_card
*card
;
162 card
= (struct pcie_service_card
*) pci_get_drvdata(pdev
);
163 if (!card
|| card
->adapter
) {
164 pr_err("Card or adapter structure is not valid\n");
168 pr_err("PCIE device is not specified\n");
172 adapter
= card
->adapter
;
174 hs_actived
= mwifiex_enable_hs(adapter
);
176 /* Indicate device suspended */
177 adapter
->is_suspended
= true;
179 for (i
= 0; i
< adapter
->priv_num
; i
++)
180 netif_carrier_off(adapter
->priv
[i
]->netdev
);
186 * Kernel needs to suspend all functions separately. Therefore all
187 * registered functions must have drivers with suspend and resume
188 * methods. Failing that the kernel simply removes the whole card.
190 * If already not resumed, this function turns on the traffic and
191 * sends a host sleep cancel request to the firmware.
193 static int mwifiex_pcie_resume(struct pci_dev
*pdev
)
195 struct mwifiex_adapter
*adapter
;
196 struct pcie_service_card
*card
;
200 card
= (struct pcie_service_card
*) pci_get_drvdata(pdev
);
201 if (!card
|| !card
->adapter
) {
202 pr_err("Card or adapter structure is not valid\n");
206 pr_err("PCIE device is not specified\n");
210 adapter
= card
->adapter
;
212 if (!adapter
->is_suspended
) {
213 dev_warn(adapter
->dev
, "Device already resumed\n");
217 adapter
->is_suspended
= false;
219 for (i
= 0; i
< adapter
->priv_num
; i
++)
220 if (adapter
->priv
[i
]->media_connected
)
221 netif_carrier_on(adapter
->priv
[i
]->netdev
);
223 mwifiex_cancel_hs(mwifiex_get_priv(adapter
, MWIFIEX_BSS_ROLE_STA
),
229 #define PCIE_VENDOR_ID_MARVELL (0x11ab)
230 #define PCIE_DEVICE_ID_MARVELL_88W8766P (0x2b30)
232 static DEFINE_PCI_DEVICE_TABLE(mwifiex_ids
) = {
234 PCIE_VENDOR_ID_MARVELL
, PCIE_DEVICE_ID_MARVELL_88W8766P
,
235 PCI_ANY_ID
, PCI_ANY_ID
, 0, 0,
240 MODULE_DEVICE_TABLE(pci
, mwifiex_ids
);
242 /* PCI Device Driver */
243 static struct pci_driver __refdata mwifiex_pcie
= {
244 .name
= "mwifiex_pcie",
245 .id_table
= mwifiex_ids
,
246 .probe
= mwifiex_pcie_probe
,
247 .remove
= mwifiex_pcie_remove
,
249 /* Power Management Hooks */
250 .suspend
= mwifiex_pcie_suspend
,
251 .resume
= mwifiex_pcie_resume
,
256 * This function writes data into PCIE card register.
258 static int mwifiex_write_reg(struct mwifiex_adapter
*adapter
, int reg
, u32 data
)
260 struct pcie_service_card
*card
= adapter
->card
;
262 iowrite32(data
, card
->pci_mmap1
+ reg
);
268 * This function reads data from PCIE card register.
270 static int mwifiex_read_reg(struct mwifiex_adapter
*adapter
, int reg
, u32
*data
)
272 struct pcie_service_card
*card
= adapter
->card
;
274 *data
= ioread32(card
->pci_mmap1
+ reg
);
280 * This function wakes up the card.
282 * A host power up command is written to the card configuration
283 * register to wake up the card.
285 static int mwifiex_pm_wakeup_card(struct mwifiex_adapter
*adapter
)
289 while (mwifiex_pcie_ok_to_access_hw(adapter
)) {
291 usleep_range(10, 20);
297 dev_dbg(adapter
->dev
, "event: Wakeup device...\n");
299 /* Enable interrupts or any chip access will wakeup device */
300 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_MASK
, HOST_INTR_MASK
)) {
301 dev_warn(adapter
->dev
, "Enable host interrupt failed\n");
305 dev_dbg(adapter
->dev
, "PCIE wakeup: Setting PS_STATE_AWAKE\n");
306 adapter
->ps_state
= PS_STATE_AWAKE
;
312 * This function is called after the card has woken up.
314 * The card configuration register is reset.
316 static int mwifiex_pm_wakeup_card_complete(struct mwifiex_adapter
*adapter
)
318 dev_dbg(adapter
->dev
, "cmd: Wakeup device completed\n");
324 * This function disables the host interrupt.
326 * The host interrupt mask is read, the disable bit is reset and
327 * written back to the card host interrupt mask register.
329 static int mwifiex_pcie_disable_host_int(struct mwifiex_adapter
*adapter
)
331 if (mwifiex_pcie_ok_to_access_hw(adapter
)) {
332 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_MASK
,
334 dev_warn(adapter
->dev
, "Disable host interrupt failed\n");
343 * This function enables the host interrupt.
345 * The host interrupt enable mask is written to the card
346 * host interrupt mask register.
348 static int mwifiex_pcie_enable_host_int(struct mwifiex_adapter
*adapter
)
350 if (mwifiex_pcie_ok_to_access_hw(adapter
)) {
351 /* Simply write the mask to the register */
352 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_MASK
,
354 dev_warn(adapter
->dev
, "Enable host interrupt failed\n");
363 * This function creates buffer descriptor ring for TX
365 static int mwifiex_pcie_create_txbd_ring(struct mwifiex_adapter
*adapter
)
367 struct pcie_service_card
*card
= adapter
->card
;
373 * driver maintaines the write pointer and firmware maintaines the read
374 * pointer. The write pointer starts at 0 (zero) while the read pointer
375 * starts at zero with rollover bit set
377 card
->txbd_wrptr
= 0;
378 card
->txbd_rdptr
|= MWIFIEX_BD_FLAG_ROLLOVER_IND
;
380 /* allocate shared memory for the BD ring and divide the same in to
381 several descriptors */
382 card
->txbd_ring_size
= sizeof(struct mwifiex_pcie_buf_desc
) *
384 dev_dbg(adapter
->dev
, "info: txbd_ring: Allocating %d bytes\n",
385 card
->txbd_ring_size
);
386 card
->txbd_ring_vbase
= kzalloc(card
->txbd_ring_size
, GFP_KERNEL
);
387 if (!card
->txbd_ring_vbase
) {
388 dev_err(adapter
->dev
, "Unable to alloc buffer for txbd ring\n");
391 card
->txbd_ring_pbase
= virt_to_phys(card
->txbd_ring_vbase
);
393 dev_dbg(adapter
->dev
,
394 "info: txbd_ring - base: %p, pbase: %#x:%x, len: %x\n",
395 card
->txbd_ring_vbase
, (u32
)card
->txbd_ring_pbase
,
396 (u32
)((u64
)card
->txbd_ring_pbase
>> 32), card
->txbd_ring_size
);
398 for (i
= 0; i
< MWIFIEX_MAX_TXRX_BD
; i
++) {
399 card
->txbd_ring
[i
] = (struct mwifiex_pcie_buf_desc
*)
400 (card
->txbd_ring_vbase
+
401 (sizeof(struct mwifiex_pcie_buf_desc
)
404 /* Allocate buffer here so that firmware can DMA data from it */
405 skb
= dev_alloc_skb(MWIFIEX_RX_DATA_BUF_SIZE
);
407 dev_err(adapter
->dev
, "Unable to allocate skb for TX ring.\n");
408 kfree(card
->txbd_ring_vbase
);
411 buf_pa
= mwifiex_update_sk_buff_pa(skb
);
413 skb_put(skb
, MWIFIEX_RX_DATA_BUF_SIZE
);
414 dev_dbg(adapter
->dev
, "info: TX ring: add new skb base: %p, "
415 "buf_base: %p, buf_pbase: %#x:%x, buf_len: %#x\n",
416 skb
, skb
->data
, (u32
)*buf_pa
,
417 (u32
)(((u64
)*buf_pa
>> 32)), skb
->len
);
419 card
->tx_buf_list
[i
] = skb
;
420 card
->txbd_ring
[i
]->paddr
= *buf_pa
;
421 card
->txbd_ring
[i
]->len
= (u16
)skb
->len
;
422 card
->txbd_ring
[i
]->flags
= 0;
428 static int mwifiex_pcie_delete_txbd_ring(struct mwifiex_adapter
*adapter
)
430 struct pcie_service_card
*card
= adapter
->card
;
433 for (i
= 0; i
< MWIFIEX_MAX_TXRX_BD
; i
++) {
434 if (card
->tx_buf_list
[i
])
435 dev_kfree_skb_any(card
->tx_buf_list
[i
]);
436 card
->tx_buf_list
[i
] = NULL
;
437 card
->txbd_ring
[i
]->paddr
= 0;
438 card
->txbd_ring
[i
]->len
= 0;
439 card
->txbd_ring
[i
]->flags
= 0;
440 card
->txbd_ring
[i
] = NULL
;
443 kfree(card
->txbd_ring_vbase
);
444 card
->txbd_ring_size
= 0;
445 card
->txbd_wrptr
= 0;
446 card
->txbd_rdptr
= 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND
;
447 card
->txbd_ring_vbase
= NULL
;
453 * This function creates buffer descriptor ring for RX
455 static int mwifiex_pcie_create_rxbd_ring(struct mwifiex_adapter
*adapter
)
457 struct pcie_service_card
*card
= adapter
->card
;
463 * driver maintaines the read pointer and firmware maintaines the write
464 * pointer. The write pointer starts at 0 (zero) while the read pointer
465 * starts at zero with rollover bit set
467 card
->rxbd_wrptr
= 0;
468 card
->rxbd_rdptr
|= MWIFIEX_BD_FLAG_ROLLOVER_IND
;
470 card
->rxbd_ring_size
= sizeof(struct mwifiex_pcie_buf_desc
) *
472 dev_dbg(adapter
->dev
, "info: rxbd_ring: Allocating %d bytes\n",
473 card
->rxbd_ring_size
);
474 card
->rxbd_ring_vbase
= kzalloc(card
->rxbd_ring_size
, GFP_KERNEL
);
475 if (!card
->rxbd_ring_vbase
) {
476 dev_err(adapter
->dev
, "Unable to allocate buffer for "
480 card
->rxbd_ring_pbase
= virt_to_phys(card
->rxbd_ring_vbase
);
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 buf_pa
= mwifiex_update_sk_buff_pa(skb
);
503 skb_put(skb
, MWIFIEX_RX_DATA_BUF_SIZE
);
505 dev_dbg(adapter
->dev
, "info: RX ring: add new skb base: %p, "
506 "buf_base: %p, buf_pbase: %#x:%x, buf_len: %#x\n",
507 skb
, skb
->data
, (u32
)*buf_pa
, (u32
)((u64
)*buf_pa
>> 32),
510 card
->rx_buf_list
[i
] = skb
;
511 card
->rxbd_ring
[i
]->paddr
= *buf_pa
;
512 card
->rxbd_ring
[i
]->len
= (u16
)skb
->len
;
513 card
->rxbd_ring
[i
]->flags
= 0;
520 * This function deletes Buffer descriptor ring for RX
522 static int mwifiex_pcie_delete_rxbd_ring(struct mwifiex_adapter
*adapter
)
524 struct pcie_service_card
*card
= adapter
->card
;
527 for (i
= 0; i
< MWIFIEX_MAX_TXRX_BD
; i
++) {
528 if (card
->rx_buf_list
[i
])
529 dev_kfree_skb_any(card
->rx_buf_list
[i
]);
530 card
->rx_buf_list
[i
] = NULL
;
531 card
->rxbd_ring
[i
]->paddr
= 0;
532 card
->rxbd_ring
[i
]->len
= 0;
533 card
->rxbd_ring
[i
]->flags
= 0;
534 card
->rxbd_ring
[i
] = NULL
;
537 kfree(card
->rxbd_ring_vbase
);
538 card
->rxbd_ring_size
= 0;
539 card
->rxbd_wrptr
= 0;
540 card
->rxbd_rdptr
= 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND
;
541 card
->rxbd_ring_vbase
= NULL
;
547 * This function creates buffer descriptor ring for Events
549 static int mwifiex_pcie_create_evtbd_ring(struct mwifiex_adapter
*adapter
)
551 struct pcie_service_card
*card
= adapter
->card
;
557 * driver maintaines the read pointer and firmware maintaines the write
558 * pointer. The write pointer starts at 0 (zero) while the read pointer
559 * starts at zero with rollover bit set
561 card
->evtbd_wrptr
= 0;
562 card
->evtbd_rdptr
|= MWIFIEX_BD_FLAG_ROLLOVER_IND
;
564 card
->evtbd_ring_size
= sizeof(struct mwifiex_pcie_buf_desc
) *
566 dev_dbg(adapter
->dev
, "info: evtbd_ring: Allocating %d bytes\n",
567 card
->evtbd_ring_size
);
568 card
->evtbd_ring_vbase
= kzalloc(card
->evtbd_ring_size
, GFP_KERNEL
);
569 if (!card
->evtbd_ring_vbase
) {
570 dev_err(adapter
->dev
,
571 "Unable to allocate buffer. Terminating download\n");
574 card
->evtbd_ring_pbase
= virt_to_phys(card
->evtbd_ring_vbase
);
576 dev_dbg(adapter
->dev
,
577 "info: CMDRSP/EVT bd_ring - base: %p pbase: %#x:%x len: %#x\n",
578 card
->evtbd_ring_vbase
, (u32
)card
->evtbd_ring_pbase
,
579 (u32
)((u64
)card
->evtbd_ring_pbase
>> 32),
580 card
->evtbd_ring_size
);
582 for (i
= 0; i
< MWIFIEX_MAX_EVT_BD
; i
++) {
583 card
->evtbd_ring
[i
] = (struct mwifiex_pcie_buf_desc
*)
584 (card
->evtbd_ring_vbase
+
585 (sizeof(struct mwifiex_pcie_buf_desc
)
588 /* Allocate skb here so that firmware can DMA data from it */
589 skb
= dev_alloc_skb(MAX_EVENT_SIZE
);
591 dev_err(adapter
->dev
,
592 "Unable to allocate skb for EVENT buf.\n");
593 kfree(card
->evtbd_ring_vbase
);
596 buf_pa
= mwifiex_update_sk_buff_pa(skb
);
597 skb_put(skb
, MAX_EVENT_SIZE
);
599 dev_dbg(adapter
->dev
, "info: Evt ring: add new skb. base: %p, "
600 "buf_base: %p, buf_pbase: %#x:%x, buf_len: %#x\n",
601 skb
, skb
->data
, (u32
)*buf_pa
, (u32
)((u64
)*buf_pa
>> 32),
604 card
->evt_buf_list
[i
] = skb
;
605 card
->evtbd_ring
[i
]->paddr
= *buf_pa
;
606 card
->evtbd_ring
[i
]->len
= (u16
)skb
->len
;
607 card
->evtbd_ring
[i
]->flags
= 0;
614 * This function deletes Buffer descriptor ring for Events
616 static int mwifiex_pcie_delete_evtbd_ring(struct mwifiex_adapter
*adapter
)
618 struct pcie_service_card
*card
= adapter
->card
;
621 for (i
= 0; i
< MWIFIEX_MAX_EVT_BD
; i
++) {
622 if (card
->evt_buf_list
[i
])
623 dev_kfree_skb_any(card
->evt_buf_list
[i
]);
624 card
->evt_buf_list
[i
] = NULL
;
625 card
->evtbd_ring
[i
]->paddr
= 0;
626 card
->evtbd_ring
[i
]->len
= 0;
627 card
->evtbd_ring
[i
]->flags
= 0;
628 card
->evtbd_ring
[i
] = NULL
;
631 kfree(card
->evtbd_ring_vbase
);
632 card
->evtbd_wrptr
= 0;
633 card
->evtbd_rdptr
= 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND
;
634 card
->evtbd_ring_size
= 0;
635 card
->evtbd_ring_vbase
= NULL
;
641 * This function allocates a buffer for CMDRSP
643 static int mwifiex_pcie_alloc_cmdrsp_buf(struct mwifiex_adapter
*adapter
)
645 struct pcie_service_card
*card
= adapter
->card
;
648 /* Allocate memory for receiving command response data */
649 skb
= dev_alloc_skb(MWIFIEX_UPLD_SIZE
);
651 dev_err(adapter
->dev
,
652 "Unable to allocate skb for command response data.\n");
655 mwifiex_update_sk_buff_pa(skb
);
656 skb_put(skb
, MWIFIEX_UPLD_SIZE
);
657 card
->cmdrsp_buf
= skb
;
660 /* Allocate memory for sending command to firmware */
661 skb
= dev_alloc_skb(MWIFIEX_SIZE_OF_CMD_BUFFER
);
663 dev_err(adapter
->dev
,
664 "Unable to allocate skb for command data.\n");
667 mwifiex_update_sk_buff_pa(skb
);
668 skb_put(skb
, MWIFIEX_SIZE_OF_CMD_BUFFER
);
675 * This function deletes a buffer for CMDRSP
677 static int mwifiex_pcie_delete_cmdrsp_buf(struct mwifiex_adapter
*adapter
)
679 struct pcie_service_card
*card
;
684 card
= adapter
->card
;
686 if (card
&& card
->cmdrsp_buf
)
687 dev_kfree_skb_any(card
->cmdrsp_buf
);
689 if (card
&& card
->cmd_buf
)
690 dev_kfree_skb_any(card
->cmd_buf
);
696 * This function allocates a buffer for sleep cookie
698 static int mwifiex_pcie_alloc_sleep_cookie_buf(struct mwifiex_adapter
*adapter
)
701 struct pcie_service_card
*card
= adapter
->card
;
703 /* Allocate memory for sleep cookie */
704 skb
= dev_alloc_skb(sizeof(u32
));
706 dev_err(adapter
->dev
,
707 "Unable to allocate skb for sleep cookie!\n");
710 mwifiex_update_sk_buff_pa(skb
);
711 skb_put(skb
, sizeof(u32
));
713 /* Init val of Sleep Cookie */
714 *(u32
*)skb
->data
= FW_AWAKE_COOKIE
;
716 dev_dbg(adapter
->dev
, "alloc_scook: sleep cookie=0x%x\n",
717 *((u32
*)skb
->data
));
719 /* Save the sleep cookie */
720 card
->sleep_cookie
= skb
;
726 * This function deletes buffer for sleep cookie
728 static int mwifiex_pcie_delete_sleep_cookie_buf(struct mwifiex_adapter
*adapter
)
730 struct pcie_service_card
*card
;
735 card
= adapter
->card
;
737 if (card
&& card
->sleep_cookie
) {
738 dev_kfree_skb_any(card
->sleep_cookie
);
739 card
->sleep_cookie
= NULL
;
746 * This function sends data buffer to device
749 mwifiex_pcie_send_data(struct mwifiex_adapter
*adapter
, struct sk_buff
*skb
)
751 struct pcie_service_card
*card
= adapter
->card
;
756 if (!mwifiex_pcie_ok_to_access_hw(adapter
))
757 mwifiex_pm_wakeup_card(adapter
);
759 /* Read the TX ring read pointer set by firmware */
760 if (mwifiex_read_reg(adapter
, REG_TXBD_RDPTR
, &rdptr
)) {
761 dev_err(adapter
->dev
,
762 "SEND DATA: failed to read REG_TXBD_RDPTR\n");
766 wrindx
= card
->txbd_wrptr
& MWIFIEX_TXBD_MASK
;
768 dev_dbg(adapter
->dev
, "info: SEND DATA: <Rd: %#x, Wr: %#x>\n", rdptr
,
770 if (((card
->txbd_wrptr
& MWIFIEX_TXBD_MASK
) !=
771 (rdptr
& MWIFIEX_TXBD_MASK
)) ||
772 ((card
->txbd_wrptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
) !=
773 (rdptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
))) {
774 struct sk_buff
*skb_data
;
777 adapter
->data_sent
= true;
778 skb_data
= card
->tx_buf_list
[wrindx
];
779 memcpy(skb_data
->data
, skb
->data
, skb
->len
);
780 payload
= skb_data
->data
;
781 tmp
= (__le16
*)&payload
[0];
782 *tmp
= cpu_to_le16((u16
)skb
->len
);
783 tmp
= (__le16
*)&payload
[2];
784 *tmp
= cpu_to_le16(MWIFIEX_TYPE_DATA
);
785 skb_put(skb_data
, MWIFIEX_RX_DATA_BUF_SIZE
- skb_data
->len
);
786 skb_trim(skb_data
, skb
->len
);
787 buf_pa
= MWIFIEX_SKB_PACB(skb_data
);
788 card
->txbd_ring
[wrindx
]->paddr
= *buf_pa
;
789 card
->txbd_ring
[wrindx
]->len
= (u16
)skb_data
->len
;
790 card
->txbd_ring
[wrindx
]->flags
= MWIFIEX_BD_FLAG_FIRST_DESC
|
791 MWIFIEX_BD_FLAG_LAST_DESC
;
793 if ((++card
->txbd_wrptr
& MWIFIEX_TXBD_MASK
) ==
795 card
->txbd_wrptr
= ((card
->txbd_wrptr
&
796 MWIFIEX_BD_FLAG_ROLLOVER_IND
) ^
797 MWIFIEX_BD_FLAG_ROLLOVER_IND
);
799 /* Write the TX ring write pointer in to REG_TXBD_WRPTR */
800 if (mwifiex_write_reg(adapter
, REG_TXBD_WRPTR
,
802 dev_err(adapter
->dev
,
803 "SEND DATA: failed to write REG_TXBD_WRPTR\n");
807 /* Send the TX ready interrupt */
808 if (mwifiex_write_reg(adapter
, PCIE_CPU_INT_EVENT
,
809 CPU_INTR_DNLD_RDY
)) {
810 dev_err(adapter
->dev
,
811 "SEND DATA: failed to assert door-bell intr\n");
814 dev_dbg(adapter
->dev
, "info: SEND DATA: Updated <Rd: %#x, Wr: "
815 "%#x> and sent packet to firmware successfully\n",
816 rdptr
, card
->txbd_wrptr
);
818 dev_dbg(adapter
->dev
,
819 "info: TX Ring full, can't send packets to fw\n");
820 adapter
->data_sent
= true;
821 /* Send the TX ready interrupt */
822 if (mwifiex_write_reg(adapter
, PCIE_CPU_INT_EVENT
,
824 dev_err(adapter
->dev
,
825 "SEND DATA: failed to assert door-bell intr\n");
833 * This function handles received buffer ring and
834 * dispatches packets to upper
836 static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter
*adapter
)
838 struct pcie_service_card
*card
= adapter
->card
;
841 struct sk_buff
*skb_tmp
= NULL
;
843 /* Read the RX ring Write pointer set by firmware */
844 if (mwifiex_read_reg(adapter
, REG_RXBD_WRPTR
, &wrptr
)) {
845 dev_err(adapter
->dev
,
846 "RECV DATA: failed to read REG_TXBD_RDPTR\n");
851 while (((wrptr
& MWIFIEX_RXBD_MASK
) !=
852 (card
->rxbd_rdptr
& MWIFIEX_RXBD_MASK
)) ||
853 ((wrptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
) ==
854 (card
->rxbd_rdptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
))) {
855 struct sk_buff
*skb_data
;
858 rd_index
= card
->rxbd_rdptr
& MWIFIEX_RXBD_MASK
;
859 skb_data
= card
->rx_buf_list
[rd_index
];
861 /* Get data length from interface header -
862 first byte is len, second byte is type */
863 rx_len
= *((u16
*)skb_data
->data
);
864 dev_dbg(adapter
->dev
,
865 "info: RECV DATA: Rd=%#x, Wr=%#x, Len=%d\n",
866 card
->rxbd_rdptr
, wrptr
, rx_len
);
867 skb_tmp
= dev_alloc_skb(rx_len
);
869 dev_dbg(adapter
->dev
,
870 "info: Failed to alloc skb for RX\n");
875 skb_put(skb_tmp
, rx_len
);
877 memcpy(skb_tmp
->data
, skb_data
->data
+ INTF_HEADER_LEN
, rx_len
);
878 if ((++card
->rxbd_rdptr
& MWIFIEX_RXBD_MASK
) ==
879 MWIFIEX_MAX_TXRX_BD
) {
880 card
->rxbd_rdptr
= ((card
->rxbd_rdptr
&
881 MWIFIEX_BD_FLAG_ROLLOVER_IND
) ^
882 MWIFIEX_BD_FLAG_ROLLOVER_IND
);
884 dev_dbg(adapter
->dev
, "info: RECV DATA: <Rd: %#x, Wr: %#x>\n",
885 card
->rxbd_rdptr
, wrptr
);
887 /* Write the RX ring read pointer in to REG_RXBD_RDPTR */
888 if (mwifiex_write_reg(adapter
, REG_RXBD_RDPTR
,
890 dev_err(adapter
->dev
,
891 "RECV DATA: failed to write REG_RXBD_RDPTR\n");
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");
903 dev_dbg(adapter
->dev
,
904 "info: RECV DATA: Rcvd packet from fw successfully\n");
905 mwifiex_handle_rx_packet(adapter
, skb_tmp
);
910 dev_kfree_skb_any(skb_tmp
);
915 * This function downloads the boot command to device
918 mwifiex_pcie_send_boot_cmd(struct mwifiex_adapter
*adapter
, struct sk_buff
*skb
)
920 phys_addr_t
*buf_pa
= MWIFIEX_SKB_PACB(skb
);
922 if (!(skb
->data
&& skb
->len
&& *buf_pa
)) {
923 dev_err(adapter
->dev
,
924 "Invalid parameter in %s <%p, %#x:%x, %x>\n",
925 __func__
, skb
->data
, skb
->len
,
926 (u32
)*buf_pa
, (u32
)((u64
)*buf_pa
>> 32));
930 /* Write the lower 32bits of the physical address to scratch
932 if (mwifiex_write_reg(adapter
, PCIE_SCRATCH_0_REG
, (u32
)*buf_pa
)) {
933 dev_err(adapter
->dev
,
934 "%s: failed to write download command to boot code.\n",
939 /* Write the upper 32bits of the physical address to scratch
941 if (mwifiex_write_reg(adapter
, PCIE_SCRATCH_1_REG
,
942 (u32
)((u64
)*buf_pa
>> 32))) {
943 dev_err(adapter
->dev
,
944 "%s: failed to write download command to boot code.\n",
949 /* Write the command length to scratch register 2 */
950 if (mwifiex_write_reg(adapter
, PCIE_SCRATCH_2_REG
, skb
->len
)) {
951 dev_err(adapter
->dev
,
952 "%s: failed to write command len to scratch reg 2\n",
957 /* Ring the door bell */
958 if (mwifiex_write_reg(adapter
, PCIE_CPU_INT_EVENT
,
959 CPU_INTR_DOOR_BELL
)) {
960 dev_err(adapter
->dev
,
961 "%s: failed to assert door-bell intr\n", __func__
);
969 * This function downloads commands to the device
972 mwifiex_pcie_send_cmd(struct mwifiex_adapter
*adapter
, struct sk_buff
*skb
)
974 struct pcie_service_card
*card
= adapter
->card
;
976 phys_addr_t
*cmd_buf_pa
;
977 phys_addr_t
*cmdrsp_buf_pa
;
979 if (!(skb
->data
&& skb
->len
)) {
980 dev_err(adapter
->dev
, "Invalid parameter in %s <%p, %#x>\n",
981 __func__
, skb
->data
, skb
->len
);
985 /* Make sure a command response buffer is available */
986 if (!card
->cmdrsp_buf
) {
987 dev_err(adapter
->dev
,
988 "No response buffer available, send command failed\n");
992 /* Make sure a command buffer is available */
993 if (!card
->cmd_buf
) {
994 dev_err(adapter
->dev
, "Command buffer not available\n");
998 adapter
->cmd_sent
= true;
999 /* Copy the given skb in to DMA accessable shared buffer */
1000 skb_put(card
->cmd_buf
, MWIFIEX_SIZE_OF_CMD_BUFFER
- card
->cmd_buf
->len
);
1001 skb_trim(card
->cmd_buf
, skb
->len
);
1002 memcpy(card
->cmd_buf
->data
, skb
->data
, skb
->len
);
1004 /* To send a command, the driver will:
1005 1. Write the 64bit physical address of the data buffer to
1007 2. Ring the door bell (i.e. set the door bell interrupt)
1009 In response to door bell interrupt, the firmware will perform
1010 the DMA of the command packet (first header to obtain the total
1011 length and then rest of the command).
1014 if (card
->cmdrsp_buf
) {
1015 cmdrsp_buf_pa
= MWIFIEX_SKB_PACB(card
->cmdrsp_buf
);
1016 /* Write the lower 32bits of the cmdrsp buffer physical
1018 if (mwifiex_write_reg(adapter
, REG_CMDRSP_ADDR_LO
,
1019 (u32
)*cmdrsp_buf_pa
)) {
1020 dev_err(adapter
->dev
,
1021 "Failed to write download cmd to boot code.\n");
1025 /* Write the upper 32bits of the cmdrsp buffer physical
1027 if (mwifiex_write_reg(adapter
, REG_CMDRSP_ADDR_HI
,
1028 (u32
)((u64
)*cmdrsp_buf_pa
>> 32))) {
1029 dev_err(adapter
->dev
,
1030 "Failed to write download cmd to boot code.\n");
1036 cmd_buf_pa
= MWIFIEX_SKB_PACB(card
->cmd_buf
);
1037 /* Write the lower 32bits of the physical address to REG_CMD_ADDR_LO */
1038 if (mwifiex_write_reg(adapter
, REG_CMD_ADDR_LO
, (u32
)*cmd_buf_pa
)) {
1039 dev_err(adapter
->dev
,
1040 "Failed to write download cmd to boot code.\n");
1044 /* Write the upper 32bits of the physical address to REG_CMD_ADDR_HI */
1045 if (mwifiex_write_reg(adapter
, REG_CMD_ADDR_HI
,
1046 (u32
)((u64
)*cmd_buf_pa
>> 32))) {
1047 dev_err(adapter
->dev
,
1048 "Failed to write download cmd to boot code.\n");
1053 /* Write the command length to REG_CMD_SIZE */
1054 if (mwifiex_write_reg(adapter
, REG_CMD_SIZE
, card
->cmd_buf
->len
)) {
1055 dev_err(adapter
->dev
,
1056 "Failed to write cmd len to REG_CMD_SIZE\n");
1061 /* Ring the door bell */
1062 if (mwifiex_write_reg(adapter
, PCIE_CPU_INT_EVENT
,
1063 CPU_INTR_DOOR_BELL
)) {
1064 dev_err(adapter
->dev
,
1065 "Failed to assert door-bell intr\n");
1072 adapter
->cmd_sent
= false;
1078 * This function handles command complete interrupt
1080 static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter
*adapter
)
1082 struct pcie_service_card
*card
= adapter
->card
;
1083 struct sk_buff
*skb
= card
->cmdrsp_buf
;
1086 dev_dbg(adapter
->dev
, "info: Rx CMD Response\n");
1088 if (!adapter
->curr_cmd
) {
1089 skb_pull(skb
, INTF_HEADER_LEN
);
1090 if (adapter
->ps_state
== PS_STATE_SLEEP_CFM
) {
1091 mwifiex_process_sleep_confirm_resp(adapter
, skb
->data
,
1093 while (mwifiex_pcie_ok_to_access_hw(adapter
) &&
1095 usleep_range(50, 60);
1097 dev_err(adapter
->dev
,
1098 "There is no command but got cmdrsp\n");
1100 memcpy(adapter
->upld_buf
, skb
->data
,
1101 min_t(u32
, MWIFIEX_SIZE_OF_CMD_BUFFER
, skb
->len
));
1102 skb_push(skb
, INTF_HEADER_LEN
);
1103 } else if (mwifiex_pcie_ok_to_access_hw(adapter
)) {
1104 skb_pull(skb
, INTF_HEADER_LEN
);
1105 adapter
->curr_cmd
->resp_skb
= skb
;
1106 adapter
->cmd_resp_received
= true;
1107 /* Take the pointer and set it to CMD node and will
1108 return in the response complete callback */
1109 card
->cmdrsp_buf
= NULL
;
1111 /* Clear the cmd-rsp buffer address in scratch registers. This
1112 will prevent firmware from writing to the same response
1114 if (mwifiex_write_reg(adapter
, REG_CMDRSP_ADDR_LO
, 0)) {
1115 dev_err(adapter
->dev
,
1116 "cmd_done: failed to clear cmd_rsp_addr_lo\n");
1119 /* Write the upper 32bits of the cmdrsp buffer physical
1121 if (mwifiex_write_reg(adapter
, REG_CMDRSP_ADDR_HI
, 0)) {
1122 dev_err(adapter
->dev
,
1123 "cmd_done: failed to clear cmd_rsp_addr_hi\n");
1132 * Command Response processing complete handler
1134 static int mwifiex_pcie_cmdrsp_complete(struct mwifiex_adapter
*adapter
,
1135 struct sk_buff
*skb
)
1137 struct pcie_service_card
*card
= adapter
->card
;
1140 card
->cmdrsp_buf
= skb
;
1141 skb_push(card
->cmdrsp_buf
, INTF_HEADER_LEN
);
1148 * This function handles firmware event ready interrupt
1150 static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter
*adapter
)
1152 struct pcie_service_card
*card
= adapter
->card
;
1153 u32 rdptr
= card
->evtbd_rdptr
& MWIFIEX_EVTBD_MASK
;
1156 if (adapter
->event_received
) {
1157 dev_dbg(adapter
->dev
, "info: Event being processed, "
1158 "do not process this interrupt just yet\n");
1162 if (rdptr
>= MWIFIEX_MAX_EVT_BD
) {
1163 dev_dbg(adapter
->dev
, "info: Invalid read pointer...\n");
1167 /* Read the event ring write pointer set by firmware */
1168 if (mwifiex_read_reg(adapter
, REG_EVTBD_WRPTR
, &wrptr
)) {
1169 dev_err(adapter
->dev
,
1170 "EventReady: failed to read REG_EVTBD_WRPTR\n");
1174 dev_dbg(adapter
->dev
, "info: EventReady: Initial <Rd: 0x%x, Wr: 0x%x>",
1175 card
->evtbd_rdptr
, wrptr
);
1176 if (((wrptr
& MWIFIEX_EVTBD_MASK
) != (card
->evtbd_rdptr
1177 & MWIFIEX_EVTBD_MASK
)) ||
1178 ((wrptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
) ==
1179 (card
->evtbd_rdptr
& MWIFIEX_BD_FLAG_ROLLOVER_IND
))) {
1180 struct sk_buff
*skb_cmd
;
1181 __le16 data_len
= 0;
1184 dev_dbg(adapter
->dev
, "info: Read Index: %d\n", rdptr
);
1185 skb_cmd
= card
->evt_buf_list
[rdptr
];
1186 /* Take the pointer and set it to event pointer in adapter
1187 and will return back after event handling callback */
1188 card
->evt_buf_list
[rdptr
] = NULL
;
1189 card
->evtbd_ring
[rdptr
]->paddr
= 0;
1190 card
->evtbd_ring
[rdptr
]->len
= 0;
1191 card
->evtbd_ring
[rdptr
]->flags
= 0;
1193 event
= *(u32
*) &skb_cmd
->data
[INTF_HEADER_LEN
];
1194 adapter
->event_cause
= event
;
1195 /* The first 4bytes will be the event transfer header
1196 len is 2 bytes followed by type which is 2 bytes */
1197 memcpy(&data_len
, skb_cmd
->data
, sizeof(__le16
));
1198 evt_len
= le16_to_cpu(data_len
);
1200 skb_pull(skb_cmd
, INTF_HEADER_LEN
);
1201 dev_dbg(adapter
->dev
, "info: Event length: %d\n", evt_len
);
1203 if ((evt_len
> 0) && (evt_len
< MAX_EVENT_SIZE
))
1204 memcpy(adapter
->event_body
, skb_cmd
->data
+
1205 MWIFIEX_EVENT_HEADER_LEN
, evt_len
-
1206 MWIFIEX_EVENT_HEADER_LEN
);
1208 adapter
->event_received
= true;
1209 adapter
->event_skb
= skb_cmd
;
1211 /* Do not update the event read pointer here, wait till the
1212 buffer is released. This is just to make things simpler,
1213 we need to find a better method of managing these buffers.
1221 * Event processing complete handler
1223 static int mwifiex_pcie_event_complete(struct mwifiex_adapter
*adapter
,
1224 struct sk_buff
*skb
)
1226 struct pcie_service_card
*card
= adapter
->card
;
1228 u32 rdptr
= card
->evtbd_rdptr
& MWIFIEX_EVTBD_MASK
;
1230 phys_addr_t
*buf_pa
;
1235 if (rdptr
>= MWIFIEX_MAX_EVT_BD
) {
1236 dev_err(adapter
->dev
, "event_complete: Invalid rdptr 0x%x\n",
1241 /* Read the event ring write pointer set by firmware */
1242 if (mwifiex_read_reg(adapter
, REG_EVTBD_WRPTR
, &wrptr
)) {
1243 dev_err(adapter
->dev
,
1244 "event_complete: failed to read REG_EVTBD_WRPTR\n");
1248 if (!card
->evt_buf_list
[rdptr
]) {
1249 skb_push(skb
, INTF_HEADER_LEN
);
1250 card
->evt_buf_list
[rdptr
] = skb
;
1251 buf_pa
= MWIFIEX_SKB_PACB(skb
);
1252 card
->evtbd_ring
[rdptr
]->paddr
= *buf_pa
;
1253 card
->evtbd_ring
[rdptr
]->len
= (u16
)skb
->len
;
1254 card
->evtbd_ring
[rdptr
]->flags
= 0;
1257 dev_dbg(adapter
->dev
,
1258 "info: ERROR: buf still valid at index %d, <%p, %p>\n",
1259 rdptr
, card
->evt_buf_list
[rdptr
], skb
);
1262 if ((++card
->evtbd_rdptr
& MWIFIEX_EVTBD_MASK
) == MWIFIEX_MAX_EVT_BD
) {
1263 card
->evtbd_rdptr
= ((card
->evtbd_rdptr
&
1264 MWIFIEX_BD_FLAG_ROLLOVER_IND
) ^
1265 MWIFIEX_BD_FLAG_ROLLOVER_IND
);
1268 dev_dbg(adapter
->dev
, "info: Updated <Rd: 0x%x, Wr: 0x%x>",
1269 card
->evtbd_rdptr
, wrptr
);
1271 /* Write the event ring read pointer in to REG_EVTBD_RDPTR */
1272 if (mwifiex_write_reg(adapter
, REG_EVTBD_RDPTR
, card
->evtbd_rdptr
)) {
1273 dev_err(adapter
->dev
,
1274 "event_complete: failed to read REG_EVTBD_RDPTR\n");
1278 dev_dbg(adapter
->dev
, "info: Check Events Again\n");
1279 ret
= mwifiex_pcie_process_event_ready(adapter
);
1285 * This function downloads the firmware to the card.
1287 * Firmware is downloaded to the card in blocks. Every block download
1288 * is tested for CRC errors, and retried a number of times before
1289 * returning failure.
1291 static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter
*adapter
,
1292 struct mwifiex_fw_image
*fw
)
1295 u8
*firmware
= fw
->fw_buf
;
1296 u32 firmware_len
= fw
->fw_len
;
1298 struct sk_buff
*skb
;
1299 u32 txlen
, tx_blocks
= 0, tries
, len
;
1300 u32 block_retry_cnt
= 0;
1303 pr_err("adapter structure is not valid\n");
1307 if (!firmware
|| !firmware_len
) {
1308 dev_err(adapter
->dev
,
1309 "No firmware image found! Terminating download\n");
1313 dev_dbg(adapter
->dev
, "info: Downloading FW image (%d bytes)\n",
1316 if (mwifiex_pcie_disable_host_int(adapter
)) {
1317 dev_err(adapter
->dev
,
1318 "%s: Disabling interrupts failed.\n", __func__
);
1322 skb
= dev_alloc_skb(MWIFIEX_UPLD_SIZE
);
1327 mwifiex_update_sk_buff_pa(skb
);
1329 /* Perform firmware data transfer */
1334 if (offset
>= firmware_len
)
1337 for (tries
= 0; tries
< MAX_POLL_TRIES
; tries
++) {
1338 ret
= mwifiex_read_reg(adapter
, PCIE_SCRATCH_2_REG
,
1341 dev_warn(adapter
->dev
,
1342 "Failed reading len from boot code\n");
1347 usleep_range(10, 20);
1352 } else if (len
> MWIFIEX_UPLD_SIZE
) {
1353 pr_err("FW download failure @ %d, invalid length %d\n",
1363 if (block_retry_cnt
> MAX_WRITE_IOMEM_RETRY
) {
1364 pr_err("FW download failure @ %d, over max "
1365 "retry count\n", offset
);
1369 dev_err(adapter
->dev
, "FW CRC error indicated by the "
1370 "helper: len = 0x%04X, txlen = %d\n",
1373 /* Setting this to 0 to resend from same offset */
1376 block_retry_cnt
= 0;
1377 /* Set blocksize to transfer - checking for
1379 if (firmware_len
- offset
< txlen
)
1380 txlen
= firmware_len
- offset
;
1382 dev_dbg(adapter
->dev
, ".");
1384 tx_blocks
= (txlen
+
1385 MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD
- 1) /
1386 MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD
;
1388 /* Copy payload to buffer */
1389 memmove(skb
->data
, &firmware
[offset
], txlen
);
1392 skb_put(skb
, MWIFIEX_UPLD_SIZE
- skb
->len
);
1393 skb_trim(skb
, tx_blocks
* MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD
);
1395 /* Send the boot command to device */
1396 if (mwifiex_pcie_send_boot_cmd(adapter
, skb
)) {
1397 dev_err(adapter
->dev
,
1398 "Failed to send firmware download command\n");
1402 /* Wait for the command done interrupt */
1404 if (mwifiex_read_reg(adapter
, PCIE_CPU_INT_STATUS
,
1406 dev_err(adapter
->dev
, "%s: Failed to read "
1407 "interrupt status during fw dnld.\n",
1412 } while ((ireg_intr
& CPU_INTR_DOOR_BELL
) ==
1413 CPU_INTR_DOOR_BELL
);
1417 dev_dbg(adapter
->dev
, "info:\nFW download over, size %d bytes\n",
1423 dev_kfree_skb_any(skb
);
1428 * This function checks the firmware status in card.
1430 * The winner interface is also determined by this function.
1433 mwifiex_check_fw_status(struct mwifiex_adapter
*adapter
, u32 poll_num
)
1436 u32 firmware_stat
, winner_status
;
1439 /* Mask spurios interrupts */
1440 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_STATUS_MASK
,
1442 dev_warn(adapter
->dev
, "Write register failed\n");
1446 dev_dbg(adapter
->dev
, "Setting driver ready signature\n");
1447 if (mwifiex_write_reg(adapter
, REG_DRV_READY
, FIRMWARE_READY_PCIE
)) {
1448 dev_err(adapter
->dev
,
1449 "Failed to write driver ready signature\n");
1453 /* Wait for firmware initialization event */
1454 for (tries
= 0; tries
< poll_num
; tries
++) {
1455 if (mwifiex_read_reg(adapter
, PCIE_SCRATCH_3_REG
,
1462 if (firmware_stat
== FIRMWARE_READY_PCIE
) {
1472 if (mwifiex_read_reg(adapter
, PCIE_SCRATCH_3_REG
,
1475 else if (!winner_status
) {
1476 dev_err(adapter
->dev
, "PCI-E is the winner\n");
1477 adapter
->winner
= 1;
1480 dev_err(adapter
->dev
,
1481 "PCI-E is not the winner <%#x,%d>, exit dnld\n",
1482 ret
, adapter
->winner
);
1491 * This function reads the interrupt status from card.
1493 static void mwifiex_interrupt_status(struct mwifiex_adapter
*adapter
)
1496 unsigned long flags
;
1498 if (!mwifiex_pcie_ok_to_access_hw(adapter
))
1501 if (mwifiex_read_reg(adapter
, PCIE_HOST_INT_STATUS
, &pcie_ireg
)) {
1502 dev_warn(adapter
->dev
, "Read register failed\n");
1506 if ((pcie_ireg
!= 0xFFFFFFFF) && (pcie_ireg
)) {
1508 mwifiex_pcie_disable_host_int(adapter
);
1510 /* Clear the pending interrupts */
1511 if (mwifiex_write_reg(adapter
, PCIE_HOST_INT_STATUS
,
1513 dev_warn(adapter
->dev
, "Write register failed\n");
1516 spin_lock_irqsave(&adapter
->int_lock
, flags
);
1517 adapter
->int_status
|= pcie_ireg
;
1518 spin_unlock_irqrestore(&adapter
->int_lock
, flags
);
1520 if (pcie_ireg
& HOST_INTR_CMD_DONE
) {
1521 if ((adapter
->ps_state
== PS_STATE_SLEEP_CFM
) ||
1522 (adapter
->ps_state
== PS_STATE_SLEEP
)) {
1523 mwifiex_pcie_enable_host_int(adapter
);
1524 if (mwifiex_write_reg(adapter
,
1526 CPU_INTR_SLEEP_CFM_DONE
)
1528 dev_warn(adapter
->dev
,
1529 "Write register failed\n");
1534 } else if (!adapter
->pps_uapsd_mode
&&
1535 adapter
->ps_state
== PS_STATE_SLEEP
) {
1536 /* Potentially for PCIe we could get other
1537 * interrupts like shared. Don't change power
1538 * state until cookie is set */
1539 if (mwifiex_pcie_ok_to_access_hw(adapter
))
1540 adapter
->ps_state
= PS_STATE_AWAKE
;
1546 * Interrupt handler for PCIe root port
1548 * This function reads the interrupt status from firmware and assigns
1549 * the main process in workqueue which will handle the interrupt.
1551 static irqreturn_t
mwifiex_pcie_interrupt(int irq
, void *context
)
1553 struct pci_dev
*pdev
= (struct pci_dev
*)context
;
1554 struct pcie_service_card
*card
;
1555 struct mwifiex_adapter
*adapter
;
1558 pr_debug("info: %s: pdev is NULL\n", (u8
*)pdev
);
1562 card
= (struct pcie_service_card
*) pci_get_drvdata(pdev
);
1563 if (!card
|| !card
->adapter
) {
1564 pr_debug("info: %s: card=%p adapter=%p\n", __func__
, card
,
1565 card
? card
->adapter
: NULL
);
1568 adapter
= card
->adapter
;
1570 if (adapter
->surprise_removed
)
1573 mwifiex_interrupt_status(adapter
);
1574 queue_work(adapter
->workqueue
, &adapter
->main_work
);
1581 * This function checks the current interrupt status.
1583 * The following interrupts are checked and handled by this function -
1586 * - Command received
1587 * - Packets received
1590 * In case of Rx packets received, the packets are uploaded from card to
1591 * host and processed accordingly.
1593 static int mwifiex_process_int_status(struct mwifiex_adapter
*adapter
)
1597 unsigned long flags
;
1599 spin_lock_irqsave(&adapter
->int_lock
, flags
);
1600 /* Clear out unused interrupts */
1601 adapter
->int_status
&= HOST_INTR_MASK
;
1602 spin_unlock_irqrestore(&adapter
->int_lock
, flags
);
1604 while (adapter
->int_status
& HOST_INTR_MASK
) {
1605 if (adapter
->int_status
& HOST_INTR_DNLD_DONE
) {
1606 adapter
->int_status
&= ~HOST_INTR_DNLD_DONE
;
1607 if (adapter
->data_sent
) {
1608 dev_dbg(adapter
->dev
, "info: DATA sent intr\n");
1609 adapter
->data_sent
= false;
1612 if (adapter
->int_status
& HOST_INTR_UPLD_RDY
) {
1613 adapter
->int_status
&= ~HOST_INTR_UPLD_RDY
;
1614 dev_dbg(adapter
->dev
, "info: Rx DATA\n");
1615 ret
= mwifiex_pcie_process_recv_data(adapter
);
1619 if (adapter
->int_status
& HOST_INTR_EVENT_RDY
) {
1620 adapter
->int_status
&= ~HOST_INTR_EVENT_RDY
;
1621 dev_dbg(adapter
->dev
, "info: Rx EVENT\n");
1622 ret
= mwifiex_pcie_process_event_ready(adapter
);
1627 if (adapter
->int_status
& HOST_INTR_CMD_DONE
) {
1628 adapter
->int_status
&= ~HOST_INTR_CMD_DONE
;
1629 if (adapter
->cmd_sent
) {
1630 dev_dbg(adapter
->dev
,
1631 "info: CMD sent Interrupt\n");
1632 adapter
->cmd_sent
= false;
1634 /* Handle command response */
1635 ret
= mwifiex_pcie_process_cmd_complete(adapter
);
1640 if (mwifiex_pcie_ok_to_access_hw(adapter
)) {
1641 if (mwifiex_read_reg(adapter
, PCIE_HOST_INT_STATUS
,
1643 dev_warn(adapter
->dev
,
1644 "Read register failed\n");
1648 if ((pcie_ireg
!= 0xFFFFFFFF) && (pcie_ireg
)) {
1649 if (mwifiex_write_reg(adapter
,
1650 PCIE_HOST_INT_STATUS
,
1652 dev_warn(adapter
->dev
,
1653 "Write register failed\n");
1656 adapter
->int_status
|= pcie_ireg
;
1657 adapter
->int_status
&= HOST_INTR_MASK
;
1662 dev_dbg(adapter
->dev
, "info: cmd_sent=%d data_sent=%d\n",
1663 adapter
->cmd_sent
, adapter
->data_sent
);
1664 mwifiex_pcie_enable_host_int(adapter
);
1670 * This function downloads data from driver to card.
1672 * Both commands and data packets are transferred to the card by this
1675 * This function adds the PCIE specific header to the front of the buffer
1676 * before transferring. The header contains the length of the packet and
1677 * the type. The firmware handles the packets based upon this set type.
1679 static int mwifiex_pcie_host_to_card(struct mwifiex_adapter
*adapter
, u8 type
,
1680 struct sk_buff
*skb
,
1681 struct mwifiex_tx_param
*tx_param
)
1684 dev_err(adapter
->dev
, "Passed NULL skb to %s\n", __func__
);
1688 if (type
== MWIFIEX_TYPE_DATA
)
1689 return mwifiex_pcie_send_data(adapter
, skb
);
1690 else if (type
== MWIFIEX_TYPE_CMD
)
1691 return mwifiex_pcie_send_cmd(adapter
, skb
);
1697 * This function initializes the PCI-E host memory space, WCB rings, etc.
1699 * The following initializations steps are followed -
1700 * - Allocate TXBD ring buffers
1701 * - Allocate RXBD ring buffers
1702 * - Allocate event BD ring buffers
1703 * - Allocate command response ring buffer
1704 * - Allocate sleep cookie buffer
1706 static int mwifiex_pcie_init(struct mwifiex_adapter
*adapter
)
1708 struct pcie_service_card
*card
= adapter
->card
;
1710 struct pci_dev
*pdev
= card
->dev
;
1712 pci_set_drvdata(pdev
, card
);
1714 ret
= pci_enable_device(pdev
);
1716 goto err_enable_dev
;
1718 pci_set_master(pdev
);
1720 dev_dbg(adapter
->dev
, "try set_consistent_dma_mask(32)\n");
1721 ret
= pci_set_dma_mask(pdev
, DMA_BIT_MASK(32));
1723 dev_err(adapter
->dev
, "set_dma_mask(32) failed\n");
1724 goto err_set_dma_mask
;
1727 ret
= pci_set_consistent_dma_mask(pdev
, DMA_BIT_MASK(32));
1729 dev_err(adapter
->dev
, "set_consistent_dma_mask(64) failed\n");
1730 goto err_set_dma_mask
;
1733 ret
= pci_request_region(pdev
, 0, DRV_NAME
);
1735 dev_err(adapter
->dev
, "req_reg(0) error\n");
1736 goto err_req_region0
;
1738 card
->pci_mmap
= pci_iomap(pdev
, 0, 0);
1739 if (!card
->pci_mmap
) {
1740 dev_err(adapter
->dev
, "iomap(0) error\n");
1743 ret
= pci_request_region(pdev
, 2, DRV_NAME
);
1745 dev_err(adapter
->dev
, "req_reg(2) error\n");
1746 goto err_req_region2
;
1748 card
->pci_mmap1
= pci_iomap(pdev
, 2, 0);
1749 if (!card
->pci_mmap1
) {
1750 dev_err(adapter
->dev
, "iomap(2) error\n");
1754 dev_dbg(adapter
->dev
,
1755 "PCI memory map Virt0: %p PCI memory map Virt2: %p\n",
1756 card
->pci_mmap
, card
->pci_mmap1
);
1758 card
->cmdrsp_buf
= NULL
;
1759 ret
= mwifiex_pcie_create_txbd_ring(adapter
);
1762 ret
= mwifiex_pcie_create_rxbd_ring(adapter
);
1765 ret
= mwifiex_pcie_create_evtbd_ring(adapter
);
1768 ret
= mwifiex_pcie_alloc_cmdrsp_buf(adapter
);
1770 goto err_alloc_cmdbuf
;
1771 ret
= mwifiex_pcie_alloc_sleep_cookie_buf(adapter
);
1773 goto err_alloc_cookie
;
1778 mwifiex_pcie_delete_cmdrsp_buf(adapter
);
1780 mwifiex_pcie_delete_evtbd_ring(adapter
);
1782 mwifiex_pcie_delete_rxbd_ring(adapter
);
1784 mwifiex_pcie_delete_txbd_ring(adapter
);
1786 pci_iounmap(pdev
, card
->pci_mmap1
);
1788 pci_release_region(pdev
, 2);
1790 pci_iounmap(pdev
, card
->pci_mmap
);
1792 pci_release_region(pdev
, 0);
1795 pci_disable_device(pdev
);
1797 pci_set_drvdata(pdev
, NULL
);
1802 * This function cleans up the allocated card buffers.
1804 * The following are freed by this function -
1805 * - TXBD ring buffers
1806 * - RXBD ring buffers
1807 * - Event BD ring buffers
1808 * - Command response ring buffer
1809 * - Sleep cookie buffer
1811 static void mwifiex_pcie_cleanup(struct mwifiex_adapter
*adapter
)
1813 struct pcie_service_card
*card
= adapter
->card
;
1814 struct pci_dev
*pdev
= card
->dev
;
1816 mwifiex_pcie_delete_sleep_cookie_buf(adapter
);
1817 mwifiex_pcie_delete_cmdrsp_buf(adapter
);
1818 mwifiex_pcie_delete_evtbd_ring(adapter
);
1819 mwifiex_pcie_delete_rxbd_ring(adapter
);
1820 mwifiex_pcie_delete_txbd_ring(adapter
);
1821 card
->cmdrsp_buf
= NULL
;
1823 dev_dbg(adapter
->dev
, "Clearing driver ready signature\n");
1825 if (mwifiex_write_reg(adapter
, REG_DRV_READY
, 0x00000000))
1826 dev_err(adapter
->dev
,
1827 "Failed to write driver not-ready signature\n");
1831 pci_iounmap(pdev
, card
->pci_mmap
);
1832 pci_iounmap(pdev
, card
->pci_mmap1
);
1834 pci_release_regions(pdev
);
1835 pci_disable_device(pdev
);
1836 pci_set_drvdata(pdev
, NULL
);
1841 * This function registers the PCIE device.
1843 * PCIE IRQ is claimed, block size is set and driver data is initialized.
1845 static int mwifiex_register_dev(struct mwifiex_adapter
*adapter
)
1848 struct pcie_service_card
*card
= adapter
->card
;
1849 struct pci_dev
*pdev
= card
->dev
;
1851 /* save adapter pointer in card */
1852 card
->adapter
= adapter
;
1854 ret
= request_irq(pdev
->irq
, mwifiex_pcie_interrupt
, IRQF_SHARED
,
1857 pr_err("request_irq failed: ret=%d\n", ret
);
1858 adapter
->card
= NULL
;
1862 adapter
->dev
= &pdev
->dev
;
1863 strcpy(adapter
->fw_name
, PCIE8766_DEFAULT_FW_NAME
);
1869 * This function unregisters the PCIE device.
1871 * The PCIE IRQ is released, the function is disabled and driver
1872 * data is set to null.
1874 static void mwifiex_unregister_dev(struct mwifiex_adapter
*adapter
)
1876 struct pcie_service_card
*card
= adapter
->card
;
1879 dev_dbg(adapter
->dev
, "%s(): calling free_irq()\n", __func__
);
1880 free_irq(card
->dev
->irq
, card
->dev
);
1884 static struct mwifiex_if_ops pcie_ops
= {
1885 .init_if
= mwifiex_pcie_init
,
1886 .cleanup_if
= mwifiex_pcie_cleanup
,
1887 .check_fw_status
= mwifiex_check_fw_status
,
1888 .prog_fw
= mwifiex_prog_fw_w_helper
,
1889 .register_dev
= mwifiex_register_dev
,
1890 .unregister_dev
= mwifiex_unregister_dev
,
1891 .enable_int
= mwifiex_pcie_enable_host_int
,
1892 .process_int_status
= mwifiex_process_int_status
,
1893 .host_to_card
= mwifiex_pcie_host_to_card
,
1894 .wakeup
= mwifiex_pm_wakeup_card
,
1895 .wakeup_complete
= mwifiex_pm_wakeup_card_complete
,
1898 .cmdrsp_complete
= mwifiex_pcie_cmdrsp_complete
,
1899 .event_complete
= mwifiex_pcie_event_complete
,
1900 .update_mp_end_port
= NULL
,
1901 .cleanup_mpa_buf
= NULL
,
1905 * This function initializes the PCIE driver module.
1907 * This initiates the semaphore and registers the device with
1910 static int mwifiex_pcie_init_module(void)
1914 pr_debug("Marvell 8766 PCIe Driver\n");
1916 sema_init(&add_remove_card_sem
, 1);
1918 /* Clear the flag in case user removes the card. */
1921 ret
= pci_register_driver(&mwifiex_pcie
);
1923 pr_err("Driver register failed!\n");
1925 pr_debug("info: Driver registered successfully!\n");
1931 * This function cleans up the PCIE driver.
1933 * The following major steps are followed for cleanup -
1934 * - Resume the device if its suspended
1935 * - Disconnect the device if connected
1936 * - Shutdown the firmware
1937 * - Unregister the device from PCIE bus.
1939 static void mwifiex_pcie_cleanup_module(void)
1941 if (!down_interruptible(&add_remove_card_sem
))
1942 up(&add_remove_card_sem
);
1944 /* Set the flag as user is removing this module. */
1947 pci_unregister_driver(&mwifiex_pcie
);
1950 module_init(mwifiex_pcie_init_module
);
1951 module_exit(mwifiex_pcie_cleanup_module
);
1953 MODULE_AUTHOR("Marvell International Ltd.");
1954 MODULE_DESCRIPTION("Marvell WiFi-Ex PCI-Express Driver version " PCIE_VERSION
);
1955 MODULE_VERSION(PCIE_VERSION
);
1956 MODULE_LICENSE("GPL v2");
1957 MODULE_FIRMWARE("mrvl/pcie8766_uapsta.bin");