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 --- |