diff options
Diffstat (limited to 'drivers/scsi/aic7xxx')
-rw-r--r-- | drivers/scsi/aic7xxx/aic7xxx.h | 1 | ||||
-rw-r--r-- | drivers/scsi/aic7xxx/aic7xxx_osm.c | 17 | ||||
-rw-r--r-- | drivers/scsi/aic7xxx/aic7xxx_pci.c | 81 |
3 files changed, 92 insertions, 7 deletions
diff --git a/drivers/scsi/aic7xxx/aic7xxx.h b/drivers/scsi/aic7xxx/aic7xxx.h index e24e6067401b..62ff8c3dc2bb 100644 --- a/drivers/scsi/aic7xxx/aic7xxx.h +++ b/drivers/scsi/aic7xxx/aic7xxx.h | |||
@@ -231,6 +231,7 @@ typedef enum { | |||
231 | AHC_TARGETMODE = 0x20000, /* Has tested target mode support */ | 231 | AHC_TARGETMODE = 0x20000, /* Has tested target mode support */ |
232 | AHC_MULTIROLE = 0x40000, /* Space for two roles at a time */ | 232 | AHC_MULTIROLE = 0x40000, /* Space for two roles at a time */ |
233 | AHC_REMOVABLE = 0x80000, /* Hot-Swap supported */ | 233 | AHC_REMOVABLE = 0x80000, /* Hot-Swap supported */ |
234 | AHC_HVD = 0x100000, /* HVD rather than SE */ | ||
234 | AHC_AIC7770_FE = AHC_FENONE, | 235 | AHC_AIC7770_FE = AHC_FENONE, |
235 | /* | 236 | /* |
236 | * The real 7850 does not support Ultra modes, but there are | 237 | * The real 7850 does not support Ultra modes, but there are |
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c index eadfefdd8d7a..debf3e2a0798 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_osm.c +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c | |||
@@ -2537,6 +2537,22 @@ static void ahc_linux_set_iu(struct scsi_target *starget, int iu) | |||
2537 | } | 2537 | } |
2538 | #endif | 2538 | #endif |
2539 | 2539 | ||
2540 | static void ahc_linux_get_signalling(struct Scsi_Host *shost) | ||
2541 | { | ||
2542 | struct ahc_softc *ahc = *(struct ahc_softc **)shost->hostdata; | ||
2543 | u8 mode = ahc_inb(ahc, SBLKCTL); | ||
2544 | |||
2545 | if (mode & ENAB40) | ||
2546 | spi_signalling(shost) = SPI_SIGNAL_LVD; | ||
2547 | else if (mode & ENAB20) | ||
2548 | spi_signalling(shost) = | ||
2549 | ahc->features & AHC_HVD ? | ||
2550 | SPI_SIGNAL_HVD : | ||
2551 | SPI_SIGNAL_SE; | ||
2552 | else | ||
2553 | spi_signalling(shost) = SPI_SIGNAL_UNKNOWN; | ||
2554 | } | ||
2555 | |||
2540 | static struct spi_function_template ahc_linux_transport_functions = { | 2556 | static struct spi_function_template ahc_linux_transport_functions = { |
2541 | .set_offset = ahc_linux_set_offset, | 2557 | .set_offset = ahc_linux_set_offset, |
2542 | .show_offset = 1, | 2558 | .show_offset = 1, |
@@ -2552,6 +2568,7 @@ static struct spi_function_template ahc_linux_transport_functions = { | |||
2552 | .set_qas = ahc_linux_set_qas, | 2568 | .set_qas = ahc_linux_set_qas, |
2553 | .show_qas = 1, | 2569 | .show_qas = 1, |
2554 | #endif | 2570 | #endif |
2571 | .get_signalling = ahc_linux_get_signalling, | ||
2555 | }; | 2572 | }; |
2556 | 2573 | ||
2557 | 2574 | ||
diff --git a/drivers/scsi/aic7xxx/aic7xxx_pci.c b/drivers/scsi/aic7xxx/aic7xxx_pci.c index b1156fbd4a1a..02fed4a02eb3 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_pci.c +++ b/drivers/scsi/aic7xxx/aic7xxx_pci.c | |||
@@ -144,16 +144,22 @@ static ahc_device_setup_t ahc_aic785X_setup; | |||
144 | static ahc_device_setup_t ahc_aic7860_setup; | 144 | static ahc_device_setup_t ahc_aic7860_setup; |
145 | static ahc_device_setup_t ahc_apa1480_setup; | 145 | static ahc_device_setup_t ahc_apa1480_setup; |
146 | static ahc_device_setup_t ahc_aic7870_setup; | 146 | static ahc_device_setup_t ahc_aic7870_setup; |
147 | static ahc_device_setup_t ahc_aic7870h_setup; | ||
147 | static ahc_device_setup_t ahc_aha394X_setup; | 148 | static ahc_device_setup_t ahc_aha394X_setup; |
149 | static ahc_device_setup_t ahc_aha394Xh_setup; | ||
148 | static ahc_device_setup_t ahc_aha494X_setup; | 150 | static ahc_device_setup_t ahc_aha494X_setup; |
151 | static ahc_device_setup_t ahc_aha494Xh_setup; | ||
149 | static ahc_device_setup_t ahc_aha398X_setup; | 152 | static ahc_device_setup_t ahc_aha398X_setup; |
150 | static ahc_device_setup_t ahc_aic7880_setup; | 153 | static ahc_device_setup_t ahc_aic7880_setup; |
154 | static ahc_device_setup_t ahc_aic7880h_setup; | ||
151 | static ahc_device_setup_t ahc_aha2940Pro_setup; | 155 | static ahc_device_setup_t ahc_aha2940Pro_setup; |
152 | static ahc_device_setup_t ahc_aha394XU_setup; | 156 | static ahc_device_setup_t ahc_aha394XU_setup; |
157 | static ahc_device_setup_t ahc_aha394XUh_setup; | ||
153 | static ahc_device_setup_t ahc_aha398XU_setup; | 158 | static ahc_device_setup_t ahc_aha398XU_setup; |
154 | static ahc_device_setup_t ahc_aic7890_setup; | 159 | static ahc_device_setup_t ahc_aic7890_setup; |
155 | static ahc_device_setup_t ahc_aic7892_setup; | 160 | static ahc_device_setup_t ahc_aic7892_setup; |
156 | static ahc_device_setup_t ahc_aic7895_setup; | 161 | static ahc_device_setup_t ahc_aic7895_setup; |
162 | static ahc_device_setup_t ahc_aic7895h_setup; | ||
157 | static ahc_device_setup_t ahc_aic7896_setup; | 163 | static ahc_device_setup_t ahc_aic7896_setup; |
158 | static ahc_device_setup_t ahc_aic7899_setup; | 164 | static ahc_device_setup_t ahc_aic7899_setup; |
159 | static ahc_device_setup_t ahc_aha29160C_setup; | 165 | static ahc_device_setup_t ahc_aha29160C_setup; |
@@ -225,19 +231,19 @@ struct ahc_pci_identity ahc_pci_ident_table [] = | |||
225 | ID_AHA_2944, | 231 | ID_AHA_2944, |
226 | ID_ALL_MASK, | 232 | ID_ALL_MASK, |
227 | "Adaptec 2944 SCSI adapter", | 233 | "Adaptec 2944 SCSI adapter", |
228 | ahc_aic7870_setup | 234 | ahc_aic7870h_setup |
229 | }, | 235 | }, |
230 | { | 236 | { |
231 | ID_AHA_3944, | 237 | ID_AHA_3944, |
232 | ID_ALL_MASK, | 238 | ID_ALL_MASK, |
233 | "Adaptec 3944 SCSI adapter", | 239 | "Adaptec 3944 SCSI adapter", |
234 | ahc_aha394X_setup | 240 | ahc_aha394Xh_setup |
235 | }, | 241 | }, |
236 | { | 242 | { |
237 | ID_AHA_4944, | 243 | ID_AHA_4944, |
238 | ID_ALL_MASK, | 244 | ID_ALL_MASK, |
239 | "Adaptec 4944 SCSI adapter", | 245 | "Adaptec 4944 SCSI adapter", |
240 | ahc_aha494X_setup | 246 | ahc_aha494Xh_setup |
241 | }, | 247 | }, |
242 | /* aic7880 based controllers */ | 248 | /* aic7880 based controllers */ |
243 | { | 249 | { |
@@ -256,13 +262,13 @@ struct ahc_pci_identity ahc_pci_ident_table [] = | |||
256 | ID_AHA_2944U & ID_DEV_VENDOR_MASK, | 262 | ID_AHA_2944U & ID_DEV_VENDOR_MASK, |
257 | ID_DEV_VENDOR_MASK, | 263 | ID_DEV_VENDOR_MASK, |
258 | "Adaptec 2944 Ultra SCSI adapter", | 264 | "Adaptec 2944 Ultra SCSI adapter", |
259 | ahc_aic7880_setup | 265 | ahc_aic7880h_setup |
260 | }, | 266 | }, |
261 | { | 267 | { |
262 | ID_AHA_3944U & ID_DEV_VENDOR_MASK, | 268 | ID_AHA_3944U & ID_DEV_VENDOR_MASK, |
263 | ID_DEV_VENDOR_MASK, | 269 | ID_DEV_VENDOR_MASK, |
264 | "Adaptec 3944 Ultra SCSI adapter", | 270 | "Adaptec 3944 Ultra SCSI adapter", |
265 | ahc_aha394XU_setup | 271 | ahc_aha394XUh_setup |
266 | }, | 272 | }, |
267 | { | 273 | { |
268 | ID_AHA_398XU & ID_DEV_VENDOR_MASK, | 274 | ID_AHA_398XU & ID_DEV_VENDOR_MASK, |
@@ -278,7 +284,7 @@ struct ahc_pci_identity ahc_pci_ident_table [] = | |||
278 | ID_AHA_4944U & ID_DEV_VENDOR_MASK, | 284 | ID_AHA_4944U & ID_DEV_VENDOR_MASK, |
279 | ID_DEV_VENDOR_MASK, | 285 | ID_DEV_VENDOR_MASK, |
280 | "Adaptec 4944 Ultra SCSI adapter", | 286 | "Adaptec 4944 Ultra SCSI adapter", |
281 | ahc_aic7880_setup | 287 | ahc_aic7880h_setup |
282 | }, | 288 | }, |
283 | { | 289 | { |
284 | ID_AHA_2930U & ID_DEV_VENDOR_MASK, | 290 | ID_AHA_2930U & ID_DEV_VENDOR_MASK, |
@@ -414,7 +420,7 @@ struct ahc_pci_identity ahc_pci_ident_table [] = | |||
414 | ID_AHA_3944AU, | 420 | ID_AHA_3944AU, |
415 | ID_ALL_MASK, | 421 | ID_ALL_MASK, |
416 | "Adaptec 3944A Ultra SCSI adapter", | 422 | "Adaptec 3944A Ultra SCSI adapter", |
417 | ahc_aic7895_setup | 423 | ahc_aic7895h_setup |
418 | }, | 424 | }, |
419 | { | 425 | { |
420 | ID_AIC7895_ARO, | 426 | ID_AIC7895_ARO, |
@@ -2121,6 +2127,16 @@ ahc_aic7870_setup(struct ahc_softc *ahc) | |||
2121 | } | 2127 | } |
2122 | 2128 | ||
2123 | static int | 2129 | static int |
2130 | ahc_aic7870h_setup(struct ahc_softc *ahc) | ||
2131 | { | ||
2132 | int error = ahc_aic7870_setup(ahc); | ||
2133 | |||
2134 | ahc->features |= AHC_HVD; | ||
2135 | |||
2136 | return error; | ||
2137 | } | ||
2138 | |||
2139 | static int | ||
2124 | ahc_aha394X_setup(struct ahc_softc *ahc) | 2140 | ahc_aha394X_setup(struct ahc_softc *ahc) |
2125 | { | 2141 | { |
2126 | int error; | 2142 | int error; |
@@ -2132,6 +2148,16 @@ ahc_aha394X_setup(struct ahc_softc *ahc) | |||
2132 | } | 2148 | } |
2133 | 2149 | ||
2134 | static int | 2150 | static int |
2151 | ahc_aha394Xh_setup(struct ahc_softc *ahc) | ||
2152 | { | ||
2153 | int error = ahc_aha394X_setup(ahc); | ||
2154 | |||
2155 | ahc->features |= AHC_HVD; | ||
2156 | |||
2157 | return error; | ||
2158 | } | ||
2159 | |||
2160 | static int | ||
2135 | ahc_aha398X_setup(struct ahc_softc *ahc) | 2161 | ahc_aha398X_setup(struct ahc_softc *ahc) |
2136 | { | 2162 | { |
2137 | int error; | 2163 | int error; |
@@ -2154,6 +2180,16 @@ ahc_aha494X_setup(struct ahc_softc *ahc) | |||
2154 | } | 2180 | } |
2155 | 2181 | ||
2156 | static int | 2182 | static int |
2183 | ahc_aha494Xh_setup(struct ahc_softc *ahc) | ||
2184 | { | ||
2185 | int error = ahc_aha494X_setup(ahc); | ||
2186 | |||
2187 | ahc->features |= AHC_HVD; | ||
2188 | |||
2189 | return error; | ||
2190 | } | ||
2191 | |||
2192 | static int | ||
2157 | ahc_aic7880_setup(struct ahc_softc *ahc) | 2193 | ahc_aic7880_setup(struct ahc_softc *ahc) |
2158 | { | 2194 | { |
2159 | ahc_dev_softc_t pci; | 2195 | ahc_dev_softc_t pci; |
@@ -2175,6 +2211,17 @@ ahc_aic7880_setup(struct ahc_softc *ahc) | |||
2175 | } | 2211 | } |
2176 | 2212 | ||
2177 | static int | 2213 | static int |
2214 | ahc_aic7880h_setup(struct ahc_softc *ahc) | ||
2215 | { | ||
2216 | int error = ahc_aic7880_setup(ahc); | ||
2217 | |||
2218 | ahc->features |= AHC_HVD; | ||
2219 | |||
2220 | return error; | ||
2221 | } | ||
2222 | |||
2223 | |||
2224 | static int | ||
2178 | ahc_aha2940Pro_setup(struct ahc_softc *ahc) | 2225 | ahc_aha2940Pro_setup(struct ahc_softc *ahc) |
2179 | { | 2226 | { |
2180 | 2227 | ||
@@ -2194,6 +2241,16 @@ ahc_aha394XU_setup(struct ahc_softc *ahc) | |||
2194 | } | 2241 | } |
2195 | 2242 | ||
2196 | static int | 2243 | static int |
2244 | ahc_aha394XUh_setup(struct ahc_softc *ahc) | ||
2245 | { | ||
2246 | int error = ahc_aha394XU_setup(ahc); | ||
2247 | |||
2248 | ahc->features |= AHC_HVD; | ||
2249 | |||
2250 | return error; | ||
2251 | } | ||
2252 | |||
2253 | static int | ||
2197 | ahc_aha398XU_setup(struct ahc_softc *ahc) | 2254 | ahc_aha398XU_setup(struct ahc_softc *ahc) |
2198 | { | 2255 | { |
2199 | int error; | 2256 | int error; |
@@ -2292,6 +2349,16 @@ ahc_aic7895_setup(struct ahc_softc *ahc) | |||
2292 | } | 2349 | } |
2293 | 2350 | ||
2294 | static int | 2351 | static int |
2352 | ahc_aic7895h_setup(struct ahc_softc *ahc) | ||
2353 | { | ||
2354 | int error = ahc_aic7895_setup(ahc); | ||
2355 | |||
2356 | ahc->features |= AHC_HVD; | ||
2357 | |||
2358 | return error; | ||
2359 | } | ||
2360 | |||
2361 | static int | ||
2295 | ahc_aic7896_setup(struct ahc_softc *ahc) | 2362 | ahc_aic7896_setup(struct ahc_softc *ahc) |
2296 | { | 2363 | { |
2297 | ahc_dev_softc_t pci; | 2364 | ahc_dev_softc_t pci; |