diff options
Diffstat (limited to 'drivers/scsi/sym53c8xx_2/sym_hipd.c')
-rw-r--r-- | drivers/scsi/sym53c8xx_2/sym_hipd.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c index 13fd5b2c56fc..5d2079f9e596 100644 --- a/drivers/scsi/sym53c8xx_2/sym_hipd.c +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c | |||
@@ -2760,8 +2760,9 @@ reset_all: | |||
2760 | * Use at your own decision and risk. | 2760 | * Use at your own decision and risk. |
2761 | */ | 2761 | */ |
2762 | 2762 | ||
2763 | void sym_interrupt (struct sym_hcb *np) | 2763 | irqreturn_t sym_interrupt(struct Scsi_Host *shost) |
2764 | { | 2764 | { |
2765 | struct sym_hcb *np = sym_get_hcb(shost); | ||
2765 | u_char istat, istatc; | 2766 | u_char istat, istatc; |
2766 | u_char dstat; | 2767 | u_char dstat; |
2767 | u_short sist; | 2768 | u_short sist; |
@@ -2786,7 +2787,7 @@ void sym_interrupt (struct sym_hcb *np) | |||
2786 | } | 2787 | } |
2787 | 2788 | ||
2788 | if (!(istat & (SIP|DIP))) | 2789 | if (!(istat & (SIP|DIP))) |
2789 | return; | 2790 | return (istat & INTF) ? IRQ_HANDLED : IRQ_NONE; |
2790 | 2791 | ||
2791 | #if 0 /* We should never get this one */ | 2792 | #if 0 /* We should never get this one */ |
2792 | if (istat & CABRT) | 2793 | if (istat & CABRT) |
@@ -2818,7 +2819,7 @@ void sym_interrupt (struct sym_hcb *np) | |||
2818 | * never clear. */ | 2819 | * never clear. */ |
2819 | if (unlikely(sist == 0xffff && dstat == 0xff)) { | 2820 | if (unlikely(sist == 0xffff && dstat == 0xff)) { |
2820 | if (pci_channel_offline(np->s.device)) | 2821 | if (pci_channel_offline(np->s.device)) |
2821 | return; | 2822 | return IRQ_NONE; |
2822 | } | 2823 | } |
2823 | } while (istatc & (SIP|DIP)); | 2824 | } while (istatc & (SIP|DIP)); |
2824 | 2825 | ||
@@ -2856,7 +2857,7 @@ void sym_interrupt (struct sym_hcb *np) | |||
2856 | else if (dstat & SIR) sym_int_sir(np); | 2857 | else if (dstat & SIR) sym_int_sir(np); |
2857 | else if (dstat & SSI) OUTONB_STD(); | 2858 | else if (dstat & SSI) OUTONB_STD(); |
2858 | else goto unknown_int; | 2859 | else goto unknown_int; |
2859 | return; | 2860 | return IRQ_HANDLED; |
2860 | } | 2861 | } |
2861 | 2862 | ||
2862 | /* | 2863 | /* |
@@ -2873,7 +2874,7 @@ void sym_interrupt (struct sym_hcb *np) | |||
2873 | if (sist & RST) { | 2874 | if (sist & RST) { |
2874 | printf("%s: SCSI BUS reset detected.\n", sym_name(np)); | 2875 | printf("%s: SCSI BUS reset detected.\n", sym_name(np)); |
2875 | sym_start_up (np, 1); | 2876 | sym_start_up (np, 1); |
2876 | return; | 2877 | return IRQ_HANDLED; |
2877 | } | 2878 | } |
2878 | 2879 | ||
2879 | OUTB(np, nc_ctest3, np->rv_ctest3 | CLF); /* clear dma fifo */ | 2880 | OUTB(np, nc_ctest3, np->rv_ctest3 | CLF); /* clear dma fifo */ |
@@ -2885,7 +2886,7 @@ void sym_interrupt (struct sym_hcb *np) | |||
2885 | else if (sist & STO) sym_int_sto (np); | 2886 | else if (sist & STO) sym_int_sto (np); |
2886 | else if (sist & UDC) sym_int_udc (np); | 2887 | else if (sist & UDC) sym_int_udc (np); |
2887 | else goto unknown_int; | 2888 | else goto unknown_int; |
2888 | return; | 2889 | return IRQ_HANDLED; |
2889 | } | 2890 | } |
2890 | 2891 | ||
2891 | /* | 2892 | /* |
@@ -2900,7 +2901,7 @@ void sym_interrupt (struct sym_hcb *np) | |||
2900 | if ((sist & (GEN|HTH|SGE)) || | 2901 | if ((sist & (GEN|HTH|SGE)) || |
2901 | (dstat & (MDPE|BF|ABRT|IID))) { | 2902 | (dstat & (MDPE|BF|ABRT|IID))) { |
2902 | sym_start_reset(np); | 2903 | sym_start_reset(np); |
2903 | return; | 2904 | return IRQ_HANDLED; |
2904 | } | 2905 | } |
2905 | 2906 | ||
2906 | unknown_int: | 2907 | unknown_int: |
@@ -2911,6 +2912,7 @@ unknown_int: | |||
2911 | printf( "%s: unknown interrupt(s) ignored, " | 2912 | printf( "%s: unknown interrupt(s) ignored, " |
2912 | "ISTAT=0x%x DSTAT=0x%x SIST=0x%x\n", | 2913 | "ISTAT=0x%x DSTAT=0x%x SIST=0x%x\n", |
2913 | sym_name(np), istat, dstat, sist); | 2914 | sym_name(np), istat, dstat, sist); |
2915 | return IRQ_NONE; | ||
2914 | } | 2916 | } |
2915 | 2917 | ||
2916 | /* | 2918 | /* |