pci.c (6289ac2b7182d418ee68e5c0f3f83d383d7a72ed) pci.c (7dc67af063e3f0237c864504bb2188ada753b804)
1// SPDX-License-Identifier: BSD-3-Clause-Clear
2/*
3 * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
4 */
5
6#include <linux/module.h>
7#include <linux/msi.h>
8#include <linux/pci.h>

--- 578 unchanged lines hidden (view full) ---

587
588 ath11k_pci_ce_irq_enable(ce_pipe->ab, ce_pipe->pipe_num);
589}
590
591static irqreturn_t ath11k_pci_ce_interrupt_handler(int irq, void *arg)
592{
593 struct ath11k_ce_pipe *ce_pipe = arg;
594
1// SPDX-License-Identifier: BSD-3-Clause-Clear
2/*
3 * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
4 */
5
6#include <linux/module.h>
7#include <linux/msi.h>
8#include <linux/pci.h>

--- 578 unchanged lines hidden (view full) ---

587
588 ath11k_pci_ce_irq_enable(ce_pipe->ab, ce_pipe->pipe_num);
589}
590
591static irqreturn_t ath11k_pci_ce_interrupt_handler(int irq, void *arg)
592{
593 struct ath11k_ce_pipe *ce_pipe = arg;
594
595 /* last interrupt received for this CE */
596 ce_pipe->timestamp = jiffies;
597
595 ath11k_pci_ce_irq_disable(ce_pipe->ab, ce_pipe->pipe_num);
596 tasklet_schedule(&ce_pipe->intr_tq);
597
598 return IRQ_HANDLED;
599}
600
601static void ath11k_pci_ext_grp_disable(struct ath11k_ext_irq_grp *irq_grp)
602{

--- 78 unchanged lines hidden (view full) ---

681}
682
683static irqreturn_t ath11k_pci_ext_interrupt_handler(int irq, void *arg)
684{
685 struct ath11k_ext_irq_grp *irq_grp = arg;
686
687 ath11k_dbg(irq_grp->ab, ATH11K_DBG_PCI, "ext irq:%d\n", irq);
688
598 ath11k_pci_ce_irq_disable(ce_pipe->ab, ce_pipe->pipe_num);
599 tasklet_schedule(&ce_pipe->intr_tq);
600
601 return IRQ_HANDLED;
602}
603
604static void ath11k_pci_ext_grp_disable(struct ath11k_ext_irq_grp *irq_grp)
605{

--- 78 unchanged lines hidden (view full) ---

684}
685
686static irqreturn_t ath11k_pci_ext_interrupt_handler(int irq, void *arg)
687{
688 struct ath11k_ext_irq_grp *irq_grp = arg;
689
690 ath11k_dbg(irq_grp->ab, ATH11K_DBG_PCI, "ext irq:%d\n", irq);
691
692 /* last interrupt received for this group */
693 irq_grp->timestamp = jiffies;
694
689 ath11k_pci_ext_grp_disable(irq_grp);
690
691 napi_schedule(&irq_grp->napi);
692
693 return IRQ_HANDLED;
694}
695
696static int ath11k_pci_ext_irq_config(struct ath11k_base *ab)
697{
698 int i, j, ret, num_vectors = 0;
695 ath11k_pci_ext_grp_disable(irq_grp);
696
697 napi_schedule(&irq_grp->napi);
698
699 return IRQ_HANDLED;
700}
701
702static int ath11k_pci_ext_irq_config(struct ath11k_base *ab)
703{
704 int i, j, ret, num_vectors = 0;
699 u32 user_base_data = 0, base_vector = 0;
705 u32 user_base_data = 0, base_vector = 0, base_idx;
700
706
707 base_idx = ATH11K_PCI_IRQ_CE0_OFFSET + CE_COUNT_MAX;
701 ret = ath11k_pci_get_user_msi_assignment(ath11k_pci_priv(ab), "DP",
702 &num_vectors,
703 &user_base_data,
704 &base_vector);
705 if (ret < 0)
706 return ret;
707
708 for (i = 0; i < ATH11K_EXT_IRQ_GRP_NUM_MAX; i++) {

--- 13 unchanged lines hidden (view full) ---

722 ab->hw_params.ring_mask->reo_status[i] ||
723 ab->hw_params.ring_mask->rxdma2host[i] ||
724 ab->hw_params.ring_mask->host2rxdma[i] ||
725 ab->hw_params.ring_mask->rx_mon_status[i]) {
726 num_irq = 1;
727 }
728
729 irq_grp->num_irq = num_irq;
708 ret = ath11k_pci_get_user_msi_assignment(ath11k_pci_priv(ab), "DP",
709 &num_vectors,
710 &user_base_data,
711 &base_vector);
712 if (ret < 0)
713 return ret;
714
715 for (i = 0; i < ATH11K_EXT_IRQ_GRP_NUM_MAX; i++) {

--- 13 unchanged lines hidden (view full) ---

729 ab->hw_params.ring_mask->reo_status[i] ||
730 ab->hw_params.ring_mask->rxdma2host[i] ||
731 ab->hw_params.ring_mask->host2rxdma[i] ||
732 ab->hw_params.ring_mask->rx_mon_status[i]) {
733 num_irq = 1;
734 }
735
736 irq_grp->num_irq = num_irq;
730 irq_grp->irqs[0] = base_vector + i;
737 irq_grp->irqs[0] = base_idx + i;
731
732 for (j = 0; j < irq_grp->num_irq; j++) {
733 int irq_idx = irq_grp->irqs[j];
734 int vector = (i % num_vectors) + base_vector;
735 int irq = ath11k_pci_get_msi_irq(ab->dev, vector);
736
737 ab->irq_num[irq_idx] = irq;
738
739 ath11k_dbg(ab, ATH11K_DBG_PCI,
740 "irq:%d group:%d\n", irq, i);
738
739 for (j = 0; j < irq_grp->num_irq; j++) {
740 int irq_idx = irq_grp->irqs[j];
741 int vector = (i % num_vectors) + base_vector;
742 int irq = ath11k_pci_get_msi_irq(ab->dev, vector);
743
744 ab->irq_num[irq_idx] = irq;
745
746 ath11k_dbg(ab, ATH11K_DBG_PCI,
747 "irq:%d group:%d\n", irq, i);
748
749 irq_set_status_flags(irq, IRQ_DISABLE_UNLAZY);
741 ret = request_irq(irq, ath11k_pci_ext_interrupt_handler,
742 IRQF_SHARED,
743 "DP_EXT_IRQ", irq_grp);
744 if (ret) {
745 ath11k_err(ab, "failed request irq %d: %d\n",
746 vector, ret);
747 return ret;
748 }

--- 637 unchanged lines hidden ---
750 ret = request_irq(irq, ath11k_pci_ext_interrupt_handler,
751 IRQF_SHARED,
752 "DP_EXT_IRQ", irq_grp);
753 if (ret) {
754 ath11k_err(ab, "failed request irq %d: %d\n",
755 vector, ret);
756 return ret;
757 }

--- 637 unchanged lines hidden ---