ide-2.6 update
PATCH 1/1 ide-2.6 update
Hi,
Please do a
bk pull bk://bart.bkbits.net/ide-2.6
This will update the following files:
drivers/ide/arm/icside.c | 31 +------------------------------ drivers/ide/cris/ide-v10.c | 19 +------------------ drivers/ide/ide-cd.c | 15 +-------------- drivers/ide/ide-default.c | 1 + drivers/ide/ide-dma.c | 2 +- drivers/ide/ide-io.c | 11 +---------- drivers/ide/ide-lib.c | 14 ++++++-------- drivers/ide/ide-probe.c | 2 +- drivers/ide/ide.c | 36 +++--------------------------------- drivers/ide/pci/atiixp.c | 5 +++-- drivers/ide/pci/piix.c | 3 +++ drivers/ide/pci/piix.h | 1 + drivers/pci/pci.ids | 1 + include/linux/ide.h | 5 +---- include/linux/pci_ids.h | 6 ++++-- 15 files changed, 29 insertions(+), 123 deletions(-)
through these ChangeSets:
<bzolnier@trik.(none)> (05/01/15 1.2339)
[ide] kill default_{attach,cleanup}()
Device drivers are supposed to provide their own ->attach and ->cleanup.
<bzolnier@trik.(none)> (05/01/15 1.2338)
[ide] ide-v10: use ide_dma_intr()
Use now available ide_dma_intr() in etrax_dma_intr().
<bzolnier@trik.(none)> (05/01/15 1.2337)
[ide] icside: use ide_dma_intr()
Make ide_dma_intr() always available if CONFIG_BLK_DEV_IDEDMA=y and use it instead of icside_dmaintr(). Acked by Russell.
<bzolnier@trik.(none)> (05/01/15 1.2336)
[ide] kill ide_drive_t->suspend_reset
This cruft pre-dates benh's PowerManagement code. Moreover ->suspend_reset is always equal to zero.
<bzolnier@trik.(none)> (05/01/15 1.2335)
[ide] atiixp: add IXP400 support
From: Enrico Scholz <[email protected]>
add IXP400 ID
From: Frederick Li <[email protected]>
update PCI IDs
<bzolnier@trik.(none)> (05/01/15 1.2334)
[ide] piix: add Intel 82801DBL IDE Controller support
From: Zhongjun, Wang <[email protected]>
<bzolnier@trik.(none)> (05/01/15 1.2333)
[ide] suppress output of error messages for non-existant interfaces
From: Prarit Bhargava <[email protected]>
Suppress output of "Wait for ready failed before probe !" messages for non-existant interfaces.
Please see
http://marc.theaimsgroup.com/?l=linux-ide&m=110553792013649&w=2 for further context on this patch.
<bzolnier@trik.(none)> (05/01/15 1.2332)
[ide] make try_to_flush_leftover_data() static
Hi,
now that you cleaned up the ide-io.c code to be all in the right file, try_to_flush_leftover_data can become static since all users are in this file now.
bart: also remove declaration from <linux/ide.h>
<bzolnier@trik.(none)> (05/01/15 1.2331)
[ide] ide_dump_atapi_status() printk readability fix
From: Gunther Mayer <[email protected]>
this improves logic and readability:
- remove blank from: AbortedCommand (as other flags)
- add blank and {} to error= line
- clean up: remove 2 lines and extra printk
before:
hdd: status error: status=0x7f { DriveReady DeviceFault SeekComplete
DataRequest CorrectedError Index Error }
hdd: status error: error=0x7fIllegalLengthIndication EndOfMedia Aborted Command MediaChangeRequested LastFailedSense 0x07
after:
hdd: status error: status=0x7f { DriveReady DeviceFault SeekComplete
DataRequest CorrectedError Index Error }
hdd: status error: error=0x7f { IllegalLengthIndication EndOfMedia AbortedCommand MediaChangeRequested LastFailedSense=0x07 }
<bzolnier@trik.(none)> (05/01/15 1.2330)
[ide] ide-cd: use ssleep() instead of schedule_timeout()
Description: Uses ssleep() in place of cdrom_sleep() to guarantee the task delays as expected. Remove cdrom_sleep() definition, as this is the
only place
where it is called.
drivers/ide/arm/icside.c +1 -30
@@ -397,35 +397,6 @@enable_dma (hwif->hw.dma); } -/* -* dma_intr() is the handler for disk read/write DMA interrupts -*/ -static ide_startstop_t icside_dmaintr (ide_drive_t *drive) -{ -unsigned int stat; -int dma_stat; - - dma_stat =icside_dma_end (drive); - stat =HWIF (drive)->INB (IDE_STATUS_REG ); -if (OK_STAT (stat,DRIVE_READY , drive->bad_wstat |DRQ_STAT )) { -if (!dma_stat) { -struct request *rq =HWGROUP (drive)->rq; -int i; - -for (i = rq->nr_sectors; i >0 ; ) { - i -= rq->current_nr_sectors; -DRIVER (drive)->end_request (drive,1 , rq->nr_sectors); - } - -return ide_stopped; - } -printk (KERN_ERR "%s: bad DMA status (dma_stat=%x)\n" , - drive->name, dma_stat); - } - -return ide_error (drive, __FUNCTION__, stat); -} -static int icside_dma_setup (ide_drive_t *drive) {ide_hwif_t *hwif =HWIF (drive);
@@ -474,7 +445,7 @@static void icside_dma_exec_cmd (ide_drive_t *drive,u8 cmd) {/* issue cmd to drive */ -ide_execute_command (drive, cmd, icside_dmaintr,2 *WAIT_CMD ,NULL ); +ide_execute_command (drive, cmd, ide_dma_intr,2 *WAIT_CMD ,NULL ); }static int icside_dma_test_irq (ide_drive_t *drive)
drivers/ide/cris/ide-v10.c +1 -18
@@ -753,27 +753,10 @@*/ static ide_startstop_t etrax_dma_intr (ide_drive_t *drive) { -int i, dma_stat; -byte stat; -LED_DISK_READ (0 );LED_DISK_WRITE (0 ); - dma_stat =HWIF (drive)->ide_dma_end (drive); - stat =HWIF (drive)->INB (IDE_STATUS_REG );/* get drive status */ -if (OK_STAT (stat,DRIVE_READY ,drive->bad_wstat|DRQ_STAT )) { -if (!dma_stat) { -struct request *rq; - rq =HWGROUP (drive)->rq; -for (i = rq->nr_sectors; i >0 ;) { - i -= rq->current_nr_sectors; -DRIVER (drive)->end_request (drive,1 , rq->nr_sectors); - } -return ide_stopped; - } -printk ("%s: bad DMA status\n" , drive->name); - } -return ide_error (drive,"dma_intr" , stat); +return ide_dma_intr (drive); }/*
drivers/ide/ide-cd.c +1 -14
@@ -1464,19 +1464,6 @@ } -/* Sleep for TIME jiffies. -Not to be called from an interrupt handler. */ -static -void cdrom_sleep (int time) -{ -int sleep = time; - -do { -set_current_state (TASK_INTERRUPTIBLE ); - sleep =schedule_timeout (sleep); - }while (sleep); -} -static int cdrom_queue_packet_command (ide_drive_t *drive,struct request *rq) {
@@ -1511,7 +1498,7 @@/* The drive is in the process of loading a disk. Retry, but wait a little to give the drive time to complete the load. */ -cdrom_sleep (2 *HZ ); +ssleep (2 ); }else {/* Otherwise, don't retry. */ retries =0 ;
drivers/ide/ide-default.c +1 -0
@@ -46,6 +46,7 @@ .name = "ide-default", .version = IDEDEFAULT_VERSION, .attach = idedefault_attach, + .cleanup = ide_unregister_subdriver, .drives = LIST_HEAD_INIT(idedefault_driver.drives) };
drivers/ide/ide-dma.c +1 -1
@@ -158,7 +158,6 @@return 0 ; } -#ifdef CONFIG_BLK_DEV_IDEDMA_PCI /** * ide_dma_intr - IDE DMA interrupt handler * @drive: the drive the interrupt is for
@@ -188,6 +187,7 @@EXPORT_SYMBOL_GPL (ide_dma_intr); +#ifdef CONFIG_BLK_DEV_IDEDMA_PCI /** * ide_build_sglist - map IDE scatter gather for DMA I/O * @drive: the drive to build the DMA table for
drivers/ide/ide-io.c +1 -3
@@ -437,7 +437,7 @@* by read a sector's worth of data from the drive. Of course, * this may not help if the drive is *waiting* for data from *us*. */ -void try_to_flush_leftover_data (ide_drive_t *drive) +static void try_to_flush_leftover_data (ide_drive_t *drive) {int i = (drive->mult_count ? drive->mult_count :1 ) *SECTOR_WORDS ;
@@ -452,8 +452,6 @@ } } -EXPORT_SYMBOL (try_to_flush_leftover_data); - static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct
request *rq, u8 stat, u8 err)
{
ide_hwif_t *hwif = drive->hwif;
@@ -853,13 +851,6 @@
if (drive->max_failures && (drive->failures > drive->max_failures)) {
goto kill_rq;
}
-
- /*
- * bail early if we've sent a device to sleep, however how to wake
- * this needs to be a masked flag. FIXME for proper operations.
- */
- if (drive->suspend_reset)
- goto kill_rq;
block = rq->sector;
if (blk_fs_request(rq) &&
drivers/ide/ide-lib.c +6 -8
@@ -571,8 +571,7 @@ status.all = stat;local_irq_set (flags); -printk ("%s: %s: status=0x%02x" , drive->name, msg, stat); -printk (" { " ); +printk ("%s: %s: status=0x%02x { " , drive->name, msg, stat);if (status.b.bsy)printk ("Busy " );else {
@@ -584,18 +583,17 @@if (status.b.idx)printk ("Index " );if (status.b.check)printk ("Error " ); } -printk ("}" ); -printk ("\n" ); +printk ("}\n" );if ((status.all & (status.b.bsy|status.b.check)) == status.b.check) { error.all =HWIF (drive)->INB (IDE_ERROR_REG ); -printk ("%s: %s: error=0x%02x" , drive->name, msg, error.all); +printk ("%s: %s: error=0x%02x { " , drive->name, msg, error.all);if (error.b.ili)printk ("IllegalLengthIndication " );if (error.b.eom)printk ("EndOfMedia " ); -if (error.b.abrt)printk ("Aborted Command " ); +if (error.b.abrt)printk ("AbortedCommand " );if (error.b.mcr)printk ("MediaChangeRequested " ); -if (error.b.sense_key)printk ("LastFailedSense 0x%02x " , +if (error.b.sense_key)printk ("LastFailedSense=0x%02x " , error.b.sense_key); -printk ("\n" ); +printk ("}\n" ); }ide_dump_opcode (drive);local_irq_restore (flags);
drivers/ide/ide-probe.c +1 -1
@@ -749,7 +749,7 @@* * BenH. */ -if (wait_hwif_ready (hwif)) +if (wait_hwif_ready (hwif) == -EBUSY )printk (KERN_DEBUG "%s: Wait for ready failed before probe !\n" , hwif->name);/*
drivers/ide/ide.c +1 -22
@@ -1554,18 +1554,7 @@HWGROUP (drive)->busy =1 ;spin_unlock_irqrestore (&ide_lock, flags); (void )ide_do_reset (drive); -if (drive->suspend_reset) { -/* -* APM WAKE UP todo !! -* int nogoodpower = 1; -* while(nogoodpower) { -* check_power1() or check_power2() -* nogoodpower = 0; -* } -* HWIF(drive)->multiproc(drive); -*/ -return ioctl_by_bdev (bdev,BLKRRPART ,0 ); - } +return 0 ; }
@@ -2029,16 +2018,6 @@#endif } -/* -* Actually unregister the subdriver. Called with the -* request lock dropped. -*/ - -static int default_cleanup (ide_drive_t *drive) -{ -return ide_unregister_subdriver (drive); -} - static ide_startstop_t default_do_request (ide_drive_t *drive, struct
request *rq, sector_t block)
{
ide_end_request(drive, 0, 0);
@@ -2074,14 +2053,6 @@
return ide_stopped;
}
-static int default_attach (ide_drive_t *drive)
-{
- printk(KERN_ERR "%s: does not support hotswap of device class !\n",
- drive->name);
-
- return 0;
-}
-
static ide_startstop_t default_abort(ide_drive_t *drive, struct request *rq) {
return __ide_abort(drive, rq);
@@ -2096,7 +2067,8 @@
static void setup_driver_defaults (ide_driver_t *d)
{
- if (d->cleanup == NULL) d->cleanup = default_cleanup;
+ BUG_ON(d->attach == NULL || d->cleanup == NULL);
+
if (d->do_request == NULL) d->do_request = default_do_request;
if (d->end_request == NULL) d->end_request = default_end_request;
if (d->error == NULL) d->error = default_error;
@@ -2104,7 +2076,6 @@
if (d->pre_reset == NULL) d->pre_reset = default_pre_reset;
if (d->capacity == NULL) d->capacity = default_capacity;
if (d->special == NULL) d->special = default_special;
- if (d->attach == NULL) d->attach = default_attach;
if (d->start_power_step == NULL)
d->start_power_step = default_start_power_step;
}
@@ -2133,7 +2104,6 @@
drive->dsc_overlap = (drive->next != drive && driver->supports_dsc_overlap); drive->nice1 = 1;
}
- drive->suspend_reset = 0;
#ifdef CONFIG_PROC_FS
if (drive->driver != &idedefault_driver) {
ide_add_proc_entries(drive->proc, generic_subdriver_entries, drive);
drivers/ide/pci/atiixp.c +0 -1
@@ -345,8 +345,9 @@ }static struct pci_device_id atiixp_pci_tbl[] = { - {PCI_VENDOR_ID_ATI ,PCI_DEVICE_ID_ATI_IXP_IDE ,PCI_ANY_ID ,
PCI_ANY_ID, 0, 0, 0},
- { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP2_IDE, PCI_ANY_ID,PCI_ANY_ID, 0, 0, 0},
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP200_IDE, PCI_ANY_ID,PCI_ANY_ID, 0, 0, 0},
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID,PCI_ANY_ID, 0, 0, 0},
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID,PCI_ANY_ID, 0, 0, 0},
{ 0, },
};
MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl);
drivers/ide/pci/piix.c +2 -0
@@ -129,6 +129,7 @@case PCI_DEVICE_ID_INTEL_82801CA_10 :case PCI_DEVICE_ID_INTEL_82801CA_11 :case PCI_DEVICE_ID_INTEL_82801E_11 : +case PCI_DEVICE_ID_INTEL_82801DB_1 :case PCI_DEVICE_ID_INTEL_82801DB_10 :case PCI_DEVICE_ID_INTEL_82801DB_11 :case PCI_DEVICE_ID_INTEL_82801EB_11 :
@@ -440,6 +441,7 @@case PCI_DEVICE_ID_INTEL_82801BA_9 :case PCI_DEVICE_ID_INTEL_82801CA_10 :case PCI_DEVICE_ID_INTEL_82801CA_11 : +case PCI_DEVICE_ID_INTEL_82801DB_1 :case PCI_DEVICE_ID_INTEL_82801DB_10 :case PCI_DEVICE_ID_INTEL_82801DB_11 :case PCI_DEVICE_ID_INTEL_82801EB_11 :
@@ -614,6 +616,7 @@ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_2, PCI_ANY_ID,
PCI_ANY_ID, 0, 0, 19},
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_19, PCI_ANY_ID,PCI_ANY_ID, 0, 0, 20},
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_21, PCI_ANY_ID,PCI_ANY_ID, 0, 0, 21},
+ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_1, PCI_ANY_ID,PCI_ANY_ID, 0, 0, 22},
{ 0, },
};
MODULE_DEVICE_TABLE(pci, piix_pci_tbl);
drivers/ide/pci/piix.h +1 -0
@@ -59,6 +59,7 @@/* 19 */ DECLARE_PIIX_DEV ("ICH5" ),/* 20 */ DECLARE_PIIX_DEV ("ICH6" ),/* 21 */ DECLARE_PIIX_DEV ("ICH7" ), + /* 22 */ DECLARE_PIIX_DEV("ICH4"), };#endif /* PIIX_H */
drivers/pci/pci.ids +1 -0
@@ -8088,6 +8088,7 @@ 24c0 82801DB/DBL (ICH4/ICH4-L) LPC Bridge 1014 0267 NetVista A30p 1462 5800 845PE Max (MS-6580) + 24c1 82801DBL (ICH4-L) IDE Controller 24c2 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 1014 0267 NetVista A30p 1071 8160 MIM2000
include/linux/ide.h +0 -1
@@ -723,7 +723,6 @@ unsigned scsi : 1; /* 0=default, 1=ide-scsi emulation */u8 quirk_list;/* considered quirky, set for a specific host */ -u8 suspend_reset;/* drive suspend mode flag, soft-reset recovers */ u8 init_speed;/* transfer rate set at boot */ u8 pio_speed;/* unused by core, used by some drivers
for fallback from DMA */
u8 current_speed; /* current transfer rate set */
@@ -1250,8 +1249,6 @@
*/
extern void ide_end_drive_cmd(ide_drive_t *, u8, u8);
-extern void try_to_flush_leftover_data(ide_drive_t *); -
/*
* Issue ATA command and wait for completion.
* Use for implementing commands in kernel
@@ -1444,12 +1441,12 @@
int ide_use_dma(ide_drive_t *);
int __ide_dma_off(ide_drive_t *);
void ide_dma_verbose(ide_drive_t *);
+ide_startstop_t ide_dma_intr(ide_drive_t *);
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
extern int ide_build_sglist(ide_drive_t *, struct request *); extern int ide_build_dmatable(ide_drive_t *, struct request *); extern void ide_destroy_dmatable(ide_drive_t *);
-extern ide_startstop_t ide_dma_intr(ide_drive_t *);
extern int ide_release_dma(ide_hwif_t *);
extern void ide_setup_dma(ide_hwif_t *, unsigned long, unsigned int);
include/linux/pci_ids.h +4 -2
@@ -353,8 +353,9 @@#define PCI_DEVICE_ID_ATI_RS300_166 0x5832#define PCI_DEVICE_ID_ATI_RS300_200 0x5833/* ATI IXP Chipset */ -#define PCI_DEVICE_ID_ATI_IXP_IDE 0x4349 -#define PCI_DEVICE_ID_ATI_IXP2_IDE 0x4369/* True name not yet sure */ +#define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349 +#define PCI_DEVICE_ID_ATI_IXP300_IDE 0x4369 +#define PCI_DEVICE_ID_ATI_IXP400_IDE 0x4376#define PCI_VENDOR_ID_VLSI 0x1004#define PCI_DEVICE_ID_VLSI_82C592 0x0005
@@ -2178,6 +2179,7 @@#define PCI_DEVICE_ID_INTEL_82801CA_11 0x248b#define PCI_DEVICE_ID_INTEL_82801CA_12 0x248c#define PCI_DEVICE_ID_INTEL_82801DB_0 0x24c0 +#define PCI_DEVICE_ID_INTEL_82801DB_1 0x24c1#define PCI_DEVICE_ID_INTEL_82801DB_2 0x24c2#define PCI_DEVICE_ID_INTEL_82801DB_3 0x24c3#define PCI_DEVICE_ID_INTEL_82801DB_4 0x24c4
drivers/ide/arm/icside.c +1 -30
@@ -397,35 +397,6 @@enable_dma (hwif->hw.dma); } -/* -* dma_intr() is the handler for disk read/write DMA interrupts -*/ -static ide_startstop_t icside_dmaintr (ide_drive_t *drive) -{ -unsigned int stat; -int dma_stat; - - dma_stat =icside_dma_end (drive); - stat =HWIF (drive)->INB (IDE_STATUS_REG ); -if (OK_STAT (stat,DRIVE_READY , drive->bad_wstat |DRQ_STAT )) { -if (!dma_stat) { -struct request *rq =HWGROUP (drive)->rq; -int i; - -for (i = rq->nr_sectors; i >0 ; ) { - i -= rq->current_nr_sectors; -DRIVER (drive)->end_request (drive,1 , rq->nr_sectors); - } - -return ide_stopped; - } -printk (KERN_ERR "%s: bad DMA status (dma_stat=%x)\n" , - drive->name, dma_stat); - } - -return ide_error (drive, __FUNCTION__, stat); -} -static int icside_dma_setup (ide_drive_t *drive) {ide_hwif_t *hwif =HWIF (drive);
@@ -474,7 +445,7 @@static void icside_dma_exec_cmd (ide_drive_t *drive,u8 cmd) {/* issue cmd to drive */ -ide_execute_command (drive, cmd, icside_dmaintr,2 *WAIT_CMD ,NULL ); +ide_execute_command (drive, cmd, ide_dma_intr,2 *WAIT_CMD ,NULL ); }static int icside_dma_test_irq (ide_drive_t *drive)
drivers/ide/cris/ide-v10.c +1 -18
@@ -753,27 +753,10 @@*/ static ide_startstop_t etrax_dma_intr (ide_drive_t *drive) { -int i, dma_stat; -byte stat; -LED_DISK_READ (0 );LED_DISK_WRITE (0 ); - dma_stat =HWIF (drive)->ide_dma_end (drive); - stat =HWIF (drive)->INB (IDE_STATUS_REG );/* get drive status */ -if (OK_STAT (stat,DRIVE_READY ,drive->bad_wstat|DRQ_STAT )) { -if (!dma_stat) { -struct request *rq; - rq =HWGROUP (drive)->rq; -for (i = rq->nr_sectors; i >0 ;) { - i -= rq->current_nr_sectors; -DRIVER (drive)->end_request (drive,1 , rq->nr_sectors); - } -return ide_stopped; - } -printk ("%s: bad DMA status\n" , drive->name); - } -return ide_error (drive,"dma_intr" , stat); +return ide_dma_intr (drive); }/*
drivers/ide/ide-cd.c +1 -14
@@ -1464,19 +1464,6 @@ } -/* Sleep for TIME jiffies. -Not to be called from an interrupt handler. */ -static -void cdrom_sleep (int time) -{ -int sleep = time; - -do { -set_current_state (TASK_INTERRUPTIBLE ); - sleep =schedule_timeout (sleep); - }while (sleep); -} -static int cdrom_queue_packet_command (ide_drive_t *drive,struct request *rq) {
@@ -1511,7 +1498,7 @@/* The drive is in the process of loading a disk. Retry, but wait a little to give the drive time to complete the load. */ -cdrom_sleep (2 *HZ ); +ssleep (2 ); }else {/* Otherwise, don't retry. */ retries =0 ;
drivers/ide/ide-default.c +1 -0
@@ -46,6 +46,7 @@ .name = "ide-default", .version = IDEDEFAULT_VERSION, .attach = idedefault_attach, + .cleanup = ide_unregister_subdriver, .drives = LIST_HEAD_INIT(idedefault_driver.drives) };
drivers/ide/ide-dma.c +1 -1
@@ -158,7 +158,6 @@return 0 ; } -#ifdef CONFIG_BLK_DEV_IDEDMA_PCI /** * ide_dma_intr - IDE DMA interrupt handler * @drive: the drive the interrupt is for
@@ -188,6 +187,7 @@EXPORT_SYMBOL_GPL (ide_dma_intr); +#ifdef CONFIG_BLK_DEV_IDEDMA_PCI /** * ide_build_sglist - map IDE scatter gather for DMA I/O * @drive: the drive to build the DMA table for
drivers/ide/ide-io.c +1 -10
@@ -437,7 +437,7 @@* by read a sector's worth of data from the drive. Of course, * this may not help if the drive is *waiting* for data from *us*. */ -void try_to_flush_leftover_data (ide_drive_t *drive) +static void try_to_flush_leftover_data (ide_drive_t *drive) {int i = (drive->mult_count ? drive->mult_count :1 ) *SECTOR_WORDS ;
@@ -452,8 +452,6 @@ } } -EXPORT_SYMBOL (try_to_flush_leftover_data); -static ide_startstop_t ide_ata_error (ide_drive_t *drive,struct request *rq,u8 stat,u8 err) {ide_hwif_t *hwif = drive->hwif;
@@ -853,13 +851,6 @@if (drive->max_failures && (drive->failures > drive->max_failures)) { goto kill_rq; } - -/* -* bail early if we've sent a device to sleep, however how to wake -* this needs to be a masked flag. FIXME for proper operations. -*/ -if (drive->suspend_reset) - goto kill_rq; block = rq->sector; if (blk_fs_request(rq) &&
drivers/ide/ide-lib.c +6 -8
@@ -571,8 +571,7 @@ status.all = stat;local_irq_set (flags); -printk ("%s: %s: status=0x%02x" , drive->name, msg, stat); -printk (" { " ); +printk ("%s: %s: status=0x%02x { " , drive->name, msg, stat);if (status.b.bsy)printk ("Busy " );else {
@@ -584,18 +583,17 @@if (status.b.idx)printk ("Index " );if (status.b.check)printk ("Error " ); } -printk ("}" ); -printk ("\n" ); +printk ("}\n" );if ((status.all & (status.b.bsy|status.b.check)) == status.b.check) { error.all =HWIF (drive)->INB (IDE_ERROR_REG ); -printk ("%s: %s: error=0x%02x" , drive->name, msg, error.all); +printk ("%s: %s: error=0x%02x { " , drive->name, msg, error.all);if (error.b.ili)printk ("IllegalLengthIndication " );if (error.b.eom)printk ("EndOfMedia " ); -if (error.b.abrt)printk ("Aborted Command " ); +if (error.b.abrt)printk ("AbortedCommand " );if (error.b.mcr)printk ("MediaChangeRequested " ); -if (error.b.sense_key)printk ("LastFailedSense 0x%02x " , +if (error.b.sense_key)printk ("LastFailedSense=0x%02x " , error.b.sense_key); -printk ("\n" ); +printk ("}\n" ); }ide_dump_opcode (drive);local_irq_restore (flags);
drivers/ide/ide-probe.c +1 -1
@@ -749,7 +749,7 @@* * BenH. */ -if (wait_hwif_ready (hwif)) +if (wait_hwif_ready (hwif) == -EBUSY )printk (KERN_DEBUG "%s: Wait for ready failed before probe !\n" , hwif->name);/*
drivers/ide/ide.c +3 -33
@@ -1554,18 +1554,7 @@HWGROUP (drive)->busy =1 ;spin_unlock_irqrestore (&ide_lock, flags); (void )ide_do_reset (drive); -if (drive->suspend_reset) { -/* -* APM WAKE UP todo !! -* int nogoodpower = 1; -* while(nogoodpower) { -* check_power1() or check_power2() -* nogoodpower = 0; -* } -* HWIF(drive)->multiproc(drive); -*/ -return ioctl_by_bdev (bdev,BLKRRPART ,0 ); - } +return 0 ; }
@@ -2029,16 +2018,6 @@#endif } -/* -* Actually unregister the subdriver. Called with the -* request lock dropped. -*/ - -static int default_cleanup (ide_drive_t *drive) -{ -return ide_unregister_subdriver (drive); -} -static ide_startstop_t default_do_request (ide_drive_t *drive,struct request *rq,sector_t block) {ide_end_request (drive,0 ,0 );
@@ -2074,14 +2053,6 @@return ide_stopped; } -static int default_attach (ide_drive_t *drive) -{ -printk (KERN_ERR "%s: does not support hotswap of device class !\n" , - drive->name); - -return 0 ; -} -static ide_startstop_t default_abort (ide_drive_t *drive,struct request *rq) {return __ide_abort (drive, rq);
@@ -2096,7 +2067,8 @@static void setup_driver_defaults (ide_driver_t *d) { -if (d->cleanup ==NULL ) d->cleanup = default_cleanup; +BUG_ON (d->attach ==NULL || d->cleanup ==NULL ); +if (d->do_request ==NULL ) d->do_request = default_do_request;if (d->end_request ==NULL ) d->end_request = default_end_request;if (d->error ==NULL ) d->error = default_error;
@@ -2104,7 +2076,6 @@if (d->pre_reset ==NULL ) d->pre_reset = default_pre_reset;if (d->capacity ==NULL ) d->capacity = default_capacity;if (d->special ==NULL ) d->special = default_special; -if (d->attach ==NULL ) d->attach = default_attach;if (d->start_power_step ==NULL ) d->start_power_step = default_start_power_step; }
@@ -2133,7 +2104,6 @@ drive->dsc_overlap = (drive->next != drive && driver->supports_dsc_overlap); drive->nice1 =1 ; } - drive->suspend_reset =0 ;#ifdef CONFIG_PROC_FS if (drive->driver != &idedefault_driver) {ide_add_proc_entries (drive->proc, generic_subdriver_entries, drive);
drivers/ide/pci/atiixp.c +3 -2
@@ -345,8 +345,9 @@ }static struct pci_device_id atiixp_pci_tbl[] = { - {PCI_VENDOR_ID_ATI ,PCI_DEVICE_ID_ATI_IXP_IDE ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, - {PCI_VENDOR_ID_ATI ,PCI_DEVICE_ID_ATI_IXP2_IDE ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, + {PCI_VENDOR_ID_ATI ,PCI_DEVICE_ID_ATI_IXP200_IDE ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, + {PCI_VENDOR_ID_ATI ,PCI_DEVICE_ID_ATI_IXP300_IDE ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, + {PCI_VENDOR_ID_ATI ,PCI_DEVICE_ID_ATI_IXP400_IDE ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, {0 , }, };MODULE_DEVICE_TABLE (pci, atiixp_pci_tbl);
drivers/ide/pci/piix.c +3 -0
@@ -129,6 +129,7 @@case PCI_DEVICE_ID_INTEL_82801CA_10 :case PCI_DEVICE_ID_INTEL_82801CA_11 :case PCI_DEVICE_ID_INTEL_82801E_11 : +case PCI_DEVICE_ID_INTEL_82801DB_1 :case PCI_DEVICE_ID_INTEL_82801DB_10 :case PCI_DEVICE_ID_INTEL_82801DB_11 :case PCI_DEVICE_ID_INTEL_82801EB_11 :
@@ -440,6 +441,7 @@case PCI_DEVICE_ID_INTEL_82801BA_9 :case PCI_DEVICE_ID_INTEL_82801CA_10 :case PCI_DEVICE_ID_INTEL_82801CA_11 : +case PCI_DEVICE_ID_INTEL_82801DB_1 :case PCI_DEVICE_ID_INTEL_82801DB_10 :case PCI_DEVICE_ID_INTEL_82801DB_11 :case PCI_DEVICE_ID_INTEL_82801EB_11 :
@@ -614,6 +616,7 @@ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 19}, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_19, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 20}, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 21}, + { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 22}, { 0, }, };MODULE_DEVICE_TABLE (pci, piix_pci_tbl);
drivers/ide/pci/piix.h +1 -0
@@ -59,6 +59,7 @@/* 19 */ DECLARE_PIIX_DEV ("ICH5" ),/* 20 */ DECLARE_PIIX_DEV ("ICH6" ),/* 21 */ DECLARE_PIIX_DEV ("ICH7" ), + /* 22 */ DECLARE_PIIX_DEV("ICH4"), };#endif /* PIIX_H */
drivers/pci/pci.ids +1 -0
@@ -8088,6 +8088,7 @@ 24c0 82801DB/DBL (ICH4/ICH4-L) LPC Bridge 1014 0267 NetVista A30p 1462 5800 845PE Max (MS-6580) + 24c1 82801DBL (ICH4-L) IDE Controller 24c2 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 1014 0267 NetVista A30p 1071 8160 MIM2000
include/linux/ide.h +1 -4
@@ -723,7 +723,6 @@ unsigned scsi : 1; /* 0=default, 1=ide-scsi emulation */u8 quirk_list;/* considered quirky, set for a specific host */ -u8 suspend_reset;/* drive suspend mode flag, soft-reset recovers */ u8 init_speed;/* transfer rate set at boot */ u8 pio_speed;/* unused by core, used by some drivers for fallback from DMA */ u8 current_speed;/* current transfer rate set */
@@ -1250,8 +1249,6 @@*/ extern void ide_end_drive_cmd (ide_drive_t *,u8 ,u8 ); -extern void try_to_flush_leftover_data (ide_drive_t *); -/* * Issue ATA command and wait for completion. * Use for implementing commands in kernel
@@ -1444,12 +1441,12 @@int ide_use_dma (ide_drive_t *);int __ide_dma_off (ide_drive_t *);void ide_dma_verbose (ide_drive_t *); +ide_startstop_t ide_dma_intr (ide_drive_t *);#ifdef CONFIG_BLK_DEV_IDEDMA_PCI extern int ide_build_sglist (ide_drive_t *,struct request *);extern int ide_build_dmatable (ide_drive_t *,struct request *);extern void ide_destroy_dmatable (ide_drive_t *); -extern ide_startstop_t ide_dma_intr (ide_drive_t *);extern int ide_release_dma (ide_hwif_t *);extern void ide_setup_dma (ide_hwif_t *,unsigned long ,unsigned int );
include/linux/pci_ids.h +4 -2
@@ -353,8 +353,9 @@#define PCI_DEVICE_ID_ATI_RS300_166 0x5832#define PCI_DEVICE_ID_ATI_RS300_200 0x5833/* ATI IXP Chipset */ -#define PCI_DEVICE_ID_ATI_IXP_IDE 0x4349 -#define PCI_DEVICE_ID_ATI_IXP2_IDE 0x4369/* True name not yet sure */ +#define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349 +#define PCI_DEVICE_ID_ATI_IXP300_IDE 0x4369 +#define PCI_DEVICE_ID_ATI_IXP400_IDE 0x4376#define PCI_VENDOR_ID_VLSI 0x1004#define PCI_DEVICE_ID_VLSI_82C592 0x0005
@@ -2178,6 +2179,7 @@#define PCI_DEVICE_ID_INTEL_82801CA_11 0x248b#define PCI_DEVICE_ID_INTEL_82801CA_12 0x248c#define PCI_DEVICE_ID_INTEL_82801DB_0 0x24c0 +#define PCI_DEVICE_ID_INTEL_82801DB_1 0x24c1#define PCI_DEVICE_ID_INTEL_82801DB_2 0x24c2#define PCI_DEVICE_ID_INTEL_82801DB_3 0x24c3#define PCI_DEVICE_ID_INTEL_82801DB_4 0x24c4