diff options
Diffstat (limited to 'drivers/ide')
-rw-r--r-- | drivers/ide/ide-lib.c | 10 | ||||
-rw-r--r-- | drivers/ide/ide-tape.c | 5 | ||||
-rw-r--r-- | drivers/ide/ide-taskfile.c | 36 | ||||
-rw-r--r-- | drivers/ide/ide.c | 20 |
4 files changed, 37 insertions, 34 deletions
diff --git a/drivers/ide/ide-lib.c b/drivers/ide/ide-lib.c index 29e2c9719c30..7031a8dcf692 100644 --- a/drivers/ide/ide-lib.c +++ b/drivers/ide/ide-lib.c | |||
@@ -122,7 +122,6 @@ static struct ide_pio_info { | |||
122 | const char *name; | 122 | const char *name; |
123 | int pio; | 123 | int pio; |
124 | } ide_pio_blacklist [] = { | 124 | } ide_pio_blacklist [] = { |
125 | /* { "Conner Peripherals 1275MB - CFS1275A", 4 }, */ | ||
126 | { "Conner Peripherals 540MB - CFS540A", 3 }, | 125 | { "Conner Peripherals 540MB - CFS540A", 3 }, |
127 | 126 | ||
128 | { "WDC AC2700", 3 }, | 127 | { "WDC AC2700", 3 }, |
@@ -138,10 +137,8 @@ static struct ide_pio_info { | |||
138 | { "WDC AC1170", 1 }, | 137 | { "WDC AC1170", 1 }, |
139 | { "WDC AC1210", 1 }, | 138 | { "WDC AC1210", 1 }, |
140 | { "WDC AC280", 0 }, | 139 | { "WDC AC280", 0 }, |
141 | /* { "WDC AC21000", 4 }, */ | ||
142 | { "WDC AC31000", 3 }, | 140 | { "WDC AC31000", 3 }, |
143 | { "WDC AC31200", 3 }, | 141 | { "WDC AC31200", 3 }, |
144 | /* { "WDC AC31600", 4 }, */ | ||
145 | 142 | ||
146 | { "Maxtor 7131 AT", 1 }, | 143 | { "Maxtor 7131 AT", 1 }, |
147 | { "Maxtor 7171 AT", 1 }, | 144 | { "Maxtor 7171 AT", 1 }, |
@@ -155,13 +152,6 @@ static struct ide_pio_info { | |||
155 | { "SAMSUNG SHD-3122A", 1 }, | 152 | { "SAMSUNG SHD-3122A", 1 }, |
156 | { "SAMSUNG SHD-3172A", 1 }, | 153 | { "SAMSUNG SHD-3172A", 1 }, |
157 | 154 | ||
158 | /* { "ST51080A", 4 }, | ||
159 | * { "ST51270A", 4 }, | ||
160 | * { "ST31220A", 4 }, | ||
161 | * { "ST31640A", 4 }, | ||
162 | * { "ST32140A", 4 }, | ||
163 | * { "ST3780A", 4 }, | ||
164 | */ | ||
165 | { "ST5660A", 3 }, | 155 | { "ST5660A", 3 }, |
166 | { "ST3660A", 3 }, | 156 | { "ST3660A", 3 }, |
167 | { "ST3630A", 3 }, | 157 | { "ST3630A", 3 }, |
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index 43e0e0557776..0598ecfd5f37 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c | |||
@@ -3765,11 +3765,6 @@ static int ide_tape_probe(ide_drive_t *drive) | |||
3765 | g->fops = &idetape_block_ops; | 3765 | g->fops = &idetape_block_ops; |
3766 | ide_register_region(g); | 3766 | ide_register_region(g); |
3767 | 3767 | ||
3768 | printk(KERN_WARNING "It is possible that this driver does not have any" | ||
3769 | " users anymore and, as a result, it will be REMOVED soon." | ||
3770 | " Please notify Bart <bzolnier@gmail.com> or Boris" | ||
3771 | " <petkovbb@gmail.com> in case you still need it.\n"); | ||
3772 | |||
3773 | return 0; | 3768 | return 0; |
3774 | 3769 | ||
3775 | out_free_tape: | 3770 | out_free_tape: |
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c index 0518a2e948cf..4c86a8d84b4c 100644 --- a/drivers/ide/ide-taskfile.c +++ b/drivers/ide/ide-taskfile.c | |||
@@ -423,6 +423,25 @@ void task_end_request(ide_drive_t *drive, struct request *rq, u8 stat) | |||
423 | } | 423 | } |
424 | 424 | ||
425 | /* | 425 | /* |
426 | * We got an interrupt on a task_in case, but no errors and no DRQ. | ||
427 | * | ||
428 | * It might be a spurious irq (shared irq), but it might be a | ||
429 | * command that had no output. | ||
430 | */ | ||
431 | static ide_startstop_t task_in_unexpected(ide_drive_t *drive, struct request *rq, u8 stat) | ||
432 | { | ||
433 | /* Command all done? */ | ||
434 | if (OK_STAT(stat, READY_STAT, BUSY_STAT)) { | ||
435 | task_end_request(drive, rq, stat); | ||
436 | return ide_stopped; | ||
437 | } | ||
438 | |||
439 | /* Assume it was a spurious irq */ | ||
440 | ide_set_handler(drive, &task_in_intr, WAIT_WORSTCASE, NULL); | ||
441 | return ide_started; | ||
442 | } | ||
443 | |||
444 | /* | ||
426 | * Handler for command with PIO data-in phase (Read/Read Multiple). | 445 | * Handler for command with PIO data-in phase (Read/Read Multiple). |
427 | */ | 446 | */ |
428 | static ide_startstop_t task_in_intr(ide_drive_t *drive) | 447 | static ide_startstop_t task_in_intr(ide_drive_t *drive) |
@@ -431,18 +450,17 @@ static ide_startstop_t task_in_intr(ide_drive_t *drive) | |||
431 | struct request *rq = HWGROUP(drive)->rq; | 450 | struct request *rq = HWGROUP(drive)->rq; |
432 | u8 stat = ide_read_status(drive); | 451 | u8 stat = ide_read_status(drive); |
433 | 452 | ||
434 | /* new way for dealing with premature shared PCI interrupts */ | 453 | /* Error? */ |
435 | if (!OK_STAT(stat, DRQ_STAT, BAD_R_STAT)) { | 454 | if (stat & ERR_STAT) |
436 | if (stat & (ERR_STAT | DRQ_STAT)) | 455 | return task_error(drive, rq, __FUNCTION__, stat); |
437 | return task_error(drive, rq, __FUNCTION__, stat); | 456 | |
438 | /* No data yet, so wait for another IRQ. */ | 457 | /* Didn't want any data? Odd. */ |
439 | ide_set_handler(drive, &task_in_intr, WAIT_WORSTCASE, NULL); | 458 | if (!(stat & DRQ_STAT)) |
440 | return ide_started; | 459 | return task_in_unexpected(drive, rq, stat); |
441 | } | ||
442 | 460 | ||
443 | ide_pio_datablock(drive, rq, 0); | 461 | ide_pio_datablock(drive, rq, 0); |
444 | 462 | ||
445 | /* If it was the last datablock check status and finish transfer. */ | 463 | /* Are we done? Check status and finish transfer. */ |
446 | if (!hwif->nleft) { | 464 | if (!hwif->nleft) { |
447 | stat = wait_drive_not_busy(drive); | 465 | stat = wait_drive_not_busy(drive); |
448 | if (!OK_STAT(stat, 0, BAD_STAT)) | 466 | if (!OK_STAT(stat, 0, BAD_STAT)) |
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 9976f9d627d4..fc69fe2e3ec0 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
@@ -1258,7 +1258,7 @@ static int __init ide_setup(char *s) | |||
1258 | drive = &hwif->drives[unit]; | 1258 | drive = &hwif->drives[unit]; |
1259 | if (strncmp(s + 4, "ide-", 4) == 0) { | 1259 | if (strncmp(s + 4, "ide-", 4) == 0) { |
1260 | strlcpy(drive->driver_req, s + 4, sizeof(drive->driver_req)); | 1260 | strlcpy(drive->driver_req, s + 4, sizeof(drive->driver_req)); |
1261 | goto done; | 1261 | goto obsolete_option; |
1262 | } | 1262 | } |
1263 | switch (match_parm(&s[3], hd_words, vals, 3)) { | 1263 | switch (match_parm(&s[3], hd_words, vals, 3)) { |
1264 | case -1: /* "none" */ | 1264 | case -1: /* "none" */ |
@@ -1290,13 +1290,13 @@ static int __init ide_setup(char *s) | |||
1290 | goto done; | 1290 | goto done; |
1291 | case -12: /* "remap" */ | 1291 | case -12: /* "remap" */ |
1292 | drive->remap_0_to_1 = 1; | 1292 | drive->remap_0_to_1 = 1; |
1293 | goto done; | 1293 | goto obsolete_option; |
1294 | case -13: /* "remap63" */ | 1294 | case -13: /* "remap63" */ |
1295 | drive->sect0 = 63; | 1295 | drive->sect0 = 63; |
1296 | goto done; | 1296 | goto obsolete_option; |
1297 | case -14: /* "scsi" */ | 1297 | case -14: /* "scsi" */ |
1298 | drive->scsi = 1; | 1298 | drive->scsi = 1; |
1299 | goto done; | 1299 | goto obsolete_option; |
1300 | case 3: /* cyl,head,sect */ | 1300 | case 3: /* cyl,head,sect */ |
1301 | drive->media = ide_disk; | 1301 | drive->media = ide_disk; |
1302 | drive->ready_stat = READY_STAT; | 1302 | drive->ready_stat = READY_STAT; |
@@ -1370,32 +1370,32 @@ static int __init ide_setup(char *s) | |||
1370 | #ifdef CONFIG_BLK_DEV_ALI14XX | 1370 | #ifdef CONFIG_BLK_DEV_ALI14XX |
1371 | case -17: /* "ali14xx" */ | 1371 | case -17: /* "ali14xx" */ |
1372 | probe_ali14xx = 1; | 1372 | probe_ali14xx = 1; |
1373 | goto done; | 1373 | goto obsolete_option; |
1374 | #endif | 1374 | #endif |
1375 | #ifdef CONFIG_BLK_DEV_UMC8672 | 1375 | #ifdef CONFIG_BLK_DEV_UMC8672 |
1376 | case -16: /* "umc8672" */ | 1376 | case -16: /* "umc8672" */ |
1377 | probe_umc8672 = 1; | 1377 | probe_umc8672 = 1; |
1378 | goto done; | 1378 | goto obsolete_option; |
1379 | #endif | 1379 | #endif |
1380 | #ifdef CONFIG_BLK_DEV_DTC2278 | 1380 | #ifdef CONFIG_BLK_DEV_DTC2278 |
1381 | case -15: /* "dtc2278" */ | 1381 | case -15: /* "dtc2278" */ |
1382 | probe_dtc2278 = 1; | 1382 | probe_dtc2278 = 1; |
1383 | goto done; | 1383 | goto obsolete_option; |
1384 | #endif | 1384 | #endif |
1385 | #ifdef CONFIG_BLK_DEV_CMD640 | 1385 | #ifdef CONFIG_BLK_DEV_CMD640 |
1386 | case -14: /* "cmd640_vlb" */ | 1386 | case -14: /* "cmd640_vlb" */ |
1387 | cmd640_vlb = 1; | 1387 | cmd640_vlb = 1; |
1388 | goto done; | 1388 | goto obsolete_option; |
1389 | #endif | 1389 | #endif |
1390 | #ifdef CONFIG_BLK_DEV_HT6560B | 1390 | #ifdef CONFIG_BLK_DEV_HT6560B |
1391 | case -13: /* "ht6560b" */ | 1391 | case -13: /* "ht6560b" */ |
1392 | probe_ht6560b = 1; | 1392 | probe_ht6560b = 1; |
1393 | goto done; | 1393 | goto obsolete_option; |
1394 | #endif | 1394 | #endif |
1395 | #ifdef CONFIG_BLK_DEV_QD65XX | 1395 | #ifdef CONFIG_BLK_DEV_QD65XX |
1396 | case -12: /* "qd65xx" */ | 1396 | case -12: /* "qd65xx" */ |
1397 | probe_qd65xx = 1; | 1397 | probe_qd65xx = 1; |
1398 | goto done; | 1398 | goto obsolete_option; |
1399 | #endif | 1399 | #endif |
1400 | #ifdef CONFIG_BLK_DEV_4DRIVES | 1400 | #ifdef CONFIG_BLK_DEV_4DRIVES |
1401 | case -11: /* "four" drives on one set of ports */ | 1401 | case -11: /* "four" drives on one set of ports */ |