.. | .. |
---|
170 | 170 | t1_link_negotiated(adapter, port_id, link_ok, speed, duplex, fc); |
---|
171 | 171 | } |
---|
172 | 172 | |
---|
173 | | -static bool t1_pci_intr_handler(adapter_t *adapter) |
---|
| 173 | +static int t1_pci_intr_handler(adapter_t *adapter) |
---|
174 | 174 | { |
---|
175 | 175 | u32 pcix_cause; |
---|
176 | 176 | |
---|
.. | .. |
---|
179 | 179 | if (pcix_cause) { |
---|
180 | 180 | pci_write_config_dword(adapter->pdev, A_PCICFG_INTR_CAUSE, |
---|
181 | 181 | pcix_cause); |
---|
182 | | - /* PCI errors are fatal */ |
---|
183 | | - t1_interrupts_disable(adapter); |
---|
184 | | - adapter->pending_thread_intr |= F_PL_INTR_SGE_ERR; |
---|
185 | | - pr_alert("%s: PCI error encountered.\n", adapter->name); |
---|
186 | | - return true; |
---|
| 182 | + t1_fatal_err(adapter); /* PCI errors are fatal */ |
---|
187 | 183 | } |
---|
188 | | - return false; |
---|
| 184 | + return 0; |
---|
189 | 185 | } |
---|
190 | 186 | |
---|
191 | 187 | #ifdef CONFIG_CHELSIO_T1_1G |
---|
.. | .. |
---|
214 | 210 | /* |
---|
215 | 211 | * Slow path interrupt handler for FPGAs. |
---|
216 | 212 | */ |
---|
217 | | -static irqreturn_t fpga_slow_intr(adapter_t *adapter) |
---|
| 213 | +static int fpga_slow_intr(adapter_t *adapter) |
---|
218 | 214 | { |
---|
219 | 215 | u32 cause = readl(adapter->regs + A_PL_CAUSE); |
---|
220 | | - irqreturn_t ret = IRQ_NONE; |
---|
221 | 216 | |
---|
222 | 217 | cause &= ~F_PL_INTR_SGE_DATA; |
---|
223 | | - if (cause & F_PL_INTR_SGE_ERR) { |
---|
224 | | - if (t1_sge_intr_error_handler(adapter->sge)) |
---|
225 | | - ret = IRQ_WAKE_THREAD; |
---|
226 | | - } |
---|
| 218 | + if (cause & F_PL_INTR_SGE_ERR) |
---|
| 219 | + t1_sge_intr_error_handler(adapter->sge); |
---|
227 | 220 | |
---|
228 | 221 | if (cause & FPGA_PCIX_INTERRUPT_GMAC) |
---|
229 | 222 | fpga_phy_intr_handler(adapter); |
---|
.. | .. |
---|
238 | 231 | /* Clear TP interrupt */ |
---|
239 | 232 | writel(tp_cause, adapter->regs + FPGA_TP_ADDR_INTERRUPT_CAUSE); |
---|
240 | 233 | } |
---|
241 | | - if (cause & FPGA_PCIX_INTERRUPT_PCIX) { |
---|
242 | | - if (t1_pci_intr_handler(adapter)) |
---|
243 | | - ret = IRQ_WAKE_THREAD; |
---|
244 | | - } |
---|
| 234 | + if (cause & FPGA_PCIX_INTERRUPT_PCIX) |
---|
| 235 | + t1_pci_intr_handler(adapter); |
---|
245 | 236 | |
---|
246 | 237 | /* Clear the interrupts just processed. */ |
---|
247 | 238 | if (cause) |
---|
248 | 239 | writel(cause, adapter->regs + A_PL_CAUSE); |
---|
249 | 240 | |
---|
250 | | - if (ret != IRQ_NONE) |
---|
251 | | - return ret; |
---|
252 | | - |
---|
253 | | - return cause == 0 ? IRQ_NONE : IRQ_HANDLED; |
---|
| 241 | + return cause != 0; |
---|
254 | 242 | } |
---|
255 | 243 | #endif |
---|
256 | 244 | |
---|
.. | .. |
---|
854 | 842 | /* |
---|
855 | 843 | * Slow path interrupt handler for ASICs. |
---|
856 | 844 | */ |
---|
857 | | -static irqreturn_t asic_slow_intr(adapter_t *adapter) |
---|
| 845 | +static int asic_slow_intr(adapter_t *adapter) |
---|
858 | 846 | { |
---|
859 | 847 | u32 cause = readl(adapter->regs + A_PL_CAUSE); |
---|
860 | | - irqreturn_t ret = IRQ_HANDLED; |
---|
861 | 848 | |
---|
862 | 849 | cause &= adapter->slow_intr_mask; |
---|
863 | 850 | if (!cause) |
---|
864 | | - return IRQ_NONE; |
---|
865 | | - if (cause & F_PL_INTR_SGE_ERR) { |
---|
866 | | - if (t1_sge_intr_error_handler(adapter->sge)) |
---|
867 | | - ret = IRQ_WAKE_THREAD; |
---|
868 | | - } |
---|
| 851 | + return 0; |
---|
| 852 | + if (cause & F_PL_INTR_SGE_ERR) |
---|
| 853 | + t1_sge_intr_error_handler(adapter->sge); |
---|
869 | 854 | if (cause & F_PL_INTR_TP) |
---|
870 | 855 | t1_tp_intr_handler(adapter->tp); |
---|
871 | 856 | if (cause & F_PL_INTR_ESPI) |
---|
872 | 857 | t1_espi_intr_handler(adapter->espi); |
---|
873 | | - if (cause & F_PL_INTR_PCIX) { |
---|
874 | | - if (t1_pci_intr_handler(adapter)) |
---|
875 | | - ret = IRQ_WAKE_THREAD; |
---|
876 | | - } |
---|
877 | | - if (cause & F_PL_INTR_EXT) { |
---|
878 | | - /* Wake the threaded interrupt to handle external interrupts as |
---|
879 | | - * we require a process context. We disable EXT interrupts in |
---|
880 | | - * the interim and let the thread reenable them when it's done. |
---|
881 | | - */ |
---|
882 | | - adapter->pending_thread_intr |= F_PL_INTR_EXT; |
---|
883 | | - adapter->slow_intr_mask &= ~F_PL_INTR_EXT; |
---|
884 | | - writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, |
---|
885 | | - adapter->regs + A_PL_ENABLE); |
---|
886 | | - ret = IRQ_WAKE_THREAD; |
---|
887 | | - } |
---|
| 858 | + if (cause & F_PL_INTR_PCIX) |
---|
| 859 | + t1_pci_intr_handler(adapter); |
---|
| 860 | + if (cause & F_PL_INTR_EXT) |
---|
| 861 | + t1_elmer0_ext_intr(adapter); |
---|
888 | 862 | |
---|
889 | 863 | /* Clear the interrupts just processed. */ |
---|
890 | 864 | writel(cause, adapter->regs + A_PL_CAUSE); |
---|
891 | 865 | readl(adapter->regs + A_PL_CAUSE); /* flush writes */ |
---|
892 | | - return ret; |
---|
| 866 | + return 1; |
---|
893 | 867 | } |
---|
894 | 868 | |
---|
895 | | -irqreturn_t t1_slow_intr_handler(adapter_t *adapter) |
---|
| 869 | +int t1_slow_intr_handler(adapter_t *adapter) |
---|
896 | 870 | { |
---|
897 | 871 | #ifdef CONFIG_CHELSIO_T1_1G |
---|
898 | 872 | if (!t1_is_asic(adapter)) |
---|