ide: respect current DMA setting during resume
PATCH 1/11 ide: respect current DMA setting during resume
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: respect current DMA setting during resume
Respect current DMA setting during resume, otherwise PIO timings may get destroyed if host uses shared PIO/MWDMA timings.
--- drivers/ide/ide-io.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/ide/ide-io.c +2 -4
@@ -192,10 +192,8 @@ static ide_startstop_t ide_start_power_s*/ if (drive->hwif->dma_ops ==NULL )break ; -/* -* TODO: respect IDE_DFLAG_USING_DMA -*/ -ide_set_dma (drive); +if (drive->dev_flags &IDE_DFLAG_USING_DMA ) +ide_set_dma (drive);break ; }
PATCH 2/11 ide: fix build for DEBUG_PM
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: fix build for DEBUG_PM
Also while at it:
* Drop unused arguments from ide_complete_power_step().
* Move DEBUG_PM printk() from ide_end_drive_cmd() to ide_complete_power_step().
--- drivers/ide/ide-io.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)
drivers/ide/ide-io.c +10 -9
@@ -120,10 +120,14 @@ int ide_end_request (ide_drive_t *drive, }EXPORT_SYMBOL (ide_end_request); -static void ide_complete_power_step (ide_drive_t *drive,struct request *rq,u8 stat,u8 error) +static void ide_complete_power_step (ide_drive_t *drive,struct request *rq) {struct request_pm_state *pm = rq->data; +#ifdef DEBUG_PM +printk (KERN_INFO "%s: complete_power_step(step: %d)\n" , + drive->name, pm->pm_step); +#endif if (drive->media != ide_disk)return ;
@@ -160,7 +164,7 @@ static ide_startstop_t ide_start_power_s/* Not supported? Switch to next step now. */ if (ata_id_flush_enabled (drive->id) ==0 || (drive->dev_flags &IDE_DFLAG_WCACHE ) ==0 ) { -ide_complete_power_step (drive, rq,0 ,0 ); +ide_complete_power_step (drive, rq);return ide_stopped; }if (ata_id_flush_ext_enabled (drive->id))
@@ -179,7 +183,7 @@ static ide_startstop_t ide_start_power_sif (drive->media != ide_disk) pm->pm_step =IDE_PM_RESTORE_DMA ;else -ide_complete_power_step (drive, rq,0 ,0 ); +ide_complete_power_step (drive, rq);return ide_stopped;case IDE_PM_IDLE :/* Resume step 2 (idle) */ args->tf.command =ATA_CMD_IDLEIMMEDIATE ;
@@ -301,11 +305,8 @@ void ide_end_drive_cmd (ide_drive_t *dri } }else if (blk_pm_request (rq)) {struct request_pm_state *pm = rq->data; -#ifdef DEBUG_PM -printk ("%s: complete_power_step(step: %d, stat: %x, err: %x)\n" , - drive->name, rq->pm->pm_step, stat, err); -#endif -ide_complete_power_step (drive, rq, stat, err); + +ide_complete_power_step (drive, rq);if (pm->pm_step ==IDE_PM_COMPLETED )ide_complete_pm_request (drive, rq);return ;
@@ -782,7 +783,7 @@ static ide_startstop_t start_request (idstruct request_pm_state *pm = rq->data;#ifdef DEBUG_PM printk ("%s: start_power_step(step: %d)\n" , - drive->name, rq->pm->pm_step); + drive->name, pm->pm_step);#endif startstop =ide_start_power_step (drive, rq); if (startstop == ide_stopped &&
PATCH 3/11 ide: remove dead code from drive_is_ready()
In reply to Bartlomiej ZolnierkiewiczFrom: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: remove dead code from drive_is_ready()
We guarantee 400ns delay at the time of issuing the command.
--- drivers/ide/ide-iops.c | 5 ----- 1 file changed, 5 deletions(-)
drivers/ide/ide-iops.c +0 -5
@@ -457,11 +457,6 @@ int drive_is_ready (ide_drive_t *drive)if (drive->waiting_for_dma)return hwif->dma_ops->dma_test_irq (drive); -#if 0 -/* need to guarantee 400ns since last command was issued */ -udelay (1 ); -#endif -/* * We do a passive status test under shared PCI interrupts on * cards that truly share the ATA side interrupt, but may also share
Re: [PATCH 03/11] ide: remove dead code from drive_is_ready()
Quoted 3 lines · Bartlomiej Zolnierkiewicz
We guarantee 400ns delay at the time of issuing the command.
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
MBR, Sergei
PATCH 4/11 ide: remove redundant code from ide_end_drive_cmd()
In reply to Bartlomiej ZolnierkiewiczFrom: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: remove redundant code from ide_end_drive_cmd()
rq->errors is overwritten later in this function.
--- drivers/ide/ide-io.c | 3 --- 1 file changed, 3 deletions(-)
drivers/ide/ide-io.c +0 -3
@@ -289,9 +289,6 @@ void ide_end_drive_cmd (ide_drive_t *driif (rq->cmd_type ==REQ_TYPE_ATA_TASKFILE ) {ide_task_t *task = (ide_task_t *)rq->special; -if (rq->errors ==0 ) - rq->errors = !OK_STAT (stat,ATA_DRDY ,BAD_STAT ); -if (task) {struct ide_taskfile *tf = &task->tf;
PATCH 5/11 ide: remove inline tags from ide-probe.c
In reply to Bartlomiej ZolnierkiewiczFrom: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: remove inline tags from ide-probe.c
Let the compiler handle it.
--- drivers/ide/ide-probe.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/ide/ide-probe.c +4 -4
@@ -110,8 +110,8 @@ static void ide_disk_init_mult_count(ide* read and parse the results. This function is run with * interrupts disabled. */ - -static inline void do_identify (ide_drive_t *drive,u8 cmd) + +static void do_identify (ide_drive_t *drive,u8 cmd) {ide_hwif_t *hwif =HWIF (drive);u16 *id = drive->id;
@@ -553,8 +553,8 @@ static void enable_nest (ide_drive_t *dr* 1 device was found * (note: IDE_DFLAG_PRESENT might still be not set) */ - -static inline u8 probe_for_drive (ide_drive_t *drive) + +static u8 probe_for_drive (ide_drive_t *drive) {char *m;
PATCH 6/11 ide: checkpatch.pl fixes for ide-lib.c
In reply to Bartlomiej ZolnierkiewiczFrom: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: checkpatch.pl fixes for ide-lib.c
Fix following errors/warnings detected by checkpatch.pl:
- WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
- WARNING: space prohibited between function name and open parenthesis '('
- ERROR: trailing whitespace
- ERROR: trailing statements should be on next line
- WARNING: printk() should include KERN_ facility level
--- drivers/ide/ide-lib.c | 95 ++++++++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 41 deletions(-)
drivers/ide/ide-lib.c +54 -41
@@ -43,7 +43,6 @@ const char *ide_xfer_verbose(u8 mode)return s; } -EXPORT_SYMBOL (ide_xfer_verbose);/**
@@ -87,7 +86,7 @@ static u8 ide_rate_filter(ide_drive_t *d* This is used by most chipset support modules when "auto-tuning". */ -u8 ide_get_best_pio_mode (ide_drive_t *drive,u8 mode_wanted,u8 max_mode) +u8 ide_get_best_pio_mode (ide_drive_t *drive,u8 mode_wanted,u8 max_mode) {u16 *id = drive->id;int pio_mode =-1 , overridden =0 ;
@@ -131,7 +130,6 @@ u8 ide_get_best_pio_mode (ide_drive_t *dreturn pio_mode; } -EXPORT_SYMBOL_GPL (ide_get_best_pio_mode);/* req_pio == "255" for auto-tune */
@@ -162,7 +160,6 @@ void ide_set_pio(ide_drive_t *drive, u8 (void )ide_set_pio_mode (drive,XFER_PIO_0 + pio); } -EXPORT_SYMBOL_GPL (ide_set_pio);/**
@@ -173,7 +170,7 @@ EXPORT_SYMBOL_GPL(ide_set_pio);* Enable or disable bounce buffering for the device. Drives move * between PIO and DMA and that changes the rules we need. */ - +void ide_toggle_bounce (ide_drive_t *drive,int on) {u64 addr =BLK_BOUNCE_HIGH ;/* dma64_addr_t */
@@ -243,14 +240,13 @@ int ide_set_dma_mode(ide_drive_t *drive,return ide_config_drive_speed (drive, mode); } } -EXPORT_SYMBOL_GPL (ide_set_dma_mode);/** * ide_set_xfer_rate - set transfer rate * @drive: drive to set * @rate: speed to attempt to set -* +* * General helper for setting the speed of an IDE device. This * function knows about user enforced limits from the configuration * which ->set_pio_mode/->set_dma_mode does not.
@@ -286,7 +282,7 @@ static void ide_dump_opcode(ide_drive_tif (rq->cmd_type ==REQ_TYPE_ATA_TASKFILE ) task = rq->special; -printk ("ide: failed opcode was: " ); +printk (KERN_ERR "ide: failed opcode was: " );if (task ==NULL )printk (KERN_CONT "unknown\n" );else
@@ -324,44 +320,55 @@ static void ide_dump_sector(ide_drive_t drive->hwif->tp_ops->tf_read (drive, &task);if (lba48 || (tf->device &ATA_LBA )) -printk (", LBAsect=%llu" , +printk (KERN_CONT ", LBAsect=%llu" , (unsigned long long )ide_get_lba_addr (tf, lba48));else -printk (", CHS=%d/%d/%d" , (tf->lbah <<8 ) + tf->lbam, - tf->device &0xf , tf->lbal); +printk (KERN_CONT ", CHS=%d/%d/%d" , (tf->lbah <<8 ) + tf->lbam, + tf->device &0xf , tf->lbal); }static void ide_dump_ata_error (ide_drive_t *drive,u8 err) { -printk ("{ " ); -if (err &ATA_ABORTED )printk ("DriveStatusError " ); +printk (KERN_ERR "{ " ); +if (err &ATA_ABORTED ) +printk (KERN_CONT "DriveStatusError " );if (err &ATA_ICRC ) -printk ((err &ATA_ABORTED ) ?"BadCRC " :"BadSector " ); -if (err &ATA_UNC )printk ("UncorrectableError " ); -if (err &ATA_IDNF )printk ("SectorIdNotFound " ); -if (err &ATA_TRK0NF )printk ("TrackZeroNotFound " ); -if (err &ATA_AMNF )printk ("AddrMarkNotFound " ); -printk ("}" ); +printk (KERN_CONT "%s" , + (err &ATA_ABORTED ) ?"BadCRC " :"BadSector " ); +if (err &ATA_UNC ) +printk (KERN_CONT "UncorrectableError " ); +if (err &ATA_IDNF ) +printk (KERN_CONT "SectorIdNotFound " ); +if (err &ATA_TRK0NF ) +printk (KERN_CONT "TrackZeroNotFound " ); +if (err &ATA_AMNF ) +printk (KERN_CONT "AddrMarkNotFound " ); +printk (KERN_CONT "}" );if ((err & (ATA_BBK |ATA_ABORTED )) ==ATA_BBK || (err & (ATA_UNC |ATA_IDNF |ATA_AMNF ))) {ide_dump_sector (drive);if (HWGROUP (drive) &&HWGROUP (drive)->rq) -printk (", sector=%llu" , +printk (KERN_CONT ", sector=%llu" , (unsigned long long )HWGROUP (drive)->rq->sector); } -printk ("\n" ); +printk (KERN_CONT "\n" ); }static void ide_dump_atapi_error (ide_drive_t *drive,u8 err) { -printk ("{ " ); -if (err &ATAPI_ILI )printk ("IllegalLengthIndication " ); -if (err &ATAPI_EOM )printk ("EndOfMedia " ); -if (err &ATA_ABORTED )printk ("AbortedCommand " ); -if (err &ATA_MCR )printk ("MediaChangeRequested " ); -if (err &ATAPI_LFS )printk ("LastFailedSense=0x%02x " , - (err &ATAPI_LFS ) >>4 ); -printk ("}\n" ); +printk (KERN_ERR "{ " ); +if (err &ATAPI_ILI ) +printk (KERN_CONT "IllegalLengthIndication " ); +if (err &ATAPI_EOM ) +printk (KERN_CONT "EndOfMedia " ); +if (err &ATA_ABORTED ) +printk (KERN_CONT "AbortedCommand " ); +if (err &ATA_MCR ) +printk (KERN_CONT "MediaChangeRequested " ); +if (err &ATAPI_LFS ) +printk (KERN_CONT "LastFailedSense=0x%02x " , + (err &ATAPI_LFS ) >>4 ); +printk (KERN_CONT "}\n" ); }/**
@@ -381,22 +388,29 @@ u8 ide_dump_status(ide_drive_t *drive, cu8 err =0 ;local_irq_save (flags); -printk ("%s: %s: status=0x%02x { " , drive->name, msg, stat); +printk (KERN_ERR "%s: %s: status=0x%02x { " , drive->name, msg, stat);if (stat &ATA_BUSY ) -printk ("Busy " ); +printk (KERN_CONT "Busy " );else { -if (stat &ATA_DRDY )printk ("DriveReady " ); -if (stat &ATA_DF )printk ("DeviceFault " ); -if (stat &ATA_DSC )printk ("SeekComplete " ); -if (stat &ATA_DRQ )printk ("DataRequest " ); -if (stat &ATA_CORR )printk ("CorrectedError " ); -if (stat &ATA_IDX )printk ("Index " ); -if (stat &ATA_ERR )printk ("Error " ); +if (stat &ATA_DRDY ) +printk (KERN_CONT "DriveReady " ); +if (stat &ATA_DF ) +printk (KERN_CONT "DeviceFault " ); +if (stat &ATA_DSC ) +printk (KERN_CONT "SeekComplete " ); +if (stat &ATA_DRQ ) +printk (KERN_CONT "DataRequest " ); +if (stat &ATA_CORR ) +printk (KERN_CONT "CorrectedError " ); +if (stat &ATA_IDX ) +printk (KERN_CONT "Index " ); +if (stat &ATA_ERR ) +printk (KERN_CONT "Error " ); } -printk ("}\n" ); +printk (KERN_CONT "}\n" );if ((stat & (ATA_BUSY |ATA_ERR )) ==ATA_ERR ) { err =ide_read_error (drive); -printk ("%s: %s: error=0x%02x " , drive->name, msg, err); +printk (KERN_ERR "%s: %s: error=0x%02x " , drive->name, msg, err);if (drive->media == ide_disk)ide_dump_ata_error (drive, err);else
@@ -406,5 +420,4 @@ u8 ide_dump_status(ide_drive_t *drive, clocal_irq_restore (flags);return err; } -EXPORT_SYMBOL (ide_dump_status);
PATCH 7/11 ide: use ATA_DMA_* defines in ide-dma-sff.c
In reply to Bartlomiej ZolnierkiewiczFrom: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: use ATA_DMA_* defines in ide-dma-sff.c
In few places open-coded values were still being used. Fix it.
--- drivers/ide/ide-dma-sff.c | 52 ++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 29 deletions(-)
drivers/ide/ide-dma-sff.c +23 -29
@@ -176,15 +176,10 @@ int ide_dma_setup(ide_drive_t *drive) {ide_hwif_t *hwif = drive->hwif;struct request *rq = hwif->hwgroup->rq; -unsigned int reading; +unsigned int reading =rq_data_dir (rq) ?0 :ATA_DMA_WR ;u8 mmio = (hwif->host_flags &IDE_HFLAG_MMIO ) ?1 :0 ;u8 dma_stat; -if (rq_data_dir (rq)) - reading =0 ; -else - reading =1 <<3 ; -/* fall back to pio! */ if (!ide_build_dmatable (drive, rq)) {ide_map_sg (drive, rq);
@@ -209,10 +204,11 @@ int ide_dma_setup(ide_drive_t *drive)/* clear INTR & ERROR flags */ if (mmio) -writeb (dma_stat |6 , +writeb (dma_stat |ATA_DMA_ERR |ATA_DMA_INTR , (void __iomem *)(hwif->dma_base +ATA_DMA_STATUS ));else -outb (dma_stat |6 , hwif->dma_base +ATA_DMA_STATUS ); +outb (dma_stat |ATA_DMA_ERR |ATA_DMA_INTR , + hwif->dma_base +ATA_DMA_STATUS ); drive->waiting_for_dma =1 ;return 0 ;
@@ -246,14 +242,13 @@ static int dma_timer_expiry(ide_drive_t hwif->hwgroup->expiry =NULL ;/* one free ride for now */ -/* 1 dmaing, 2 error, 4 intr */ -if (dma_stat &2 )/* ERROR */ +if (dma_stat &ATA_DMA_ERR )/* ERROR */ return -1 ; -if (dma_stat &1 )/* DMAing */ +if (dma_stat &ATA_DMA_ACTIVE )/* DMAing */ return WAIT_CMD ; -if (dma_stat &4 )/* Got an Interrupt */ +if (dma_stat &ATA_DMA_INTR )/* Got an Interrupt */ return WAIT_CMD ;return 0 ;/* Status is unknown -- reset the bus */
@@ -279,12 +274,11 @@ void ide_dma_start(ide_drive_t *drive)*/ if (hwif->host_flags &IDE_HFLAG_MMIO ) { dma_cmd =readb ((void __iomem *)(hwif->dma_base +ATA_DMA_CMD )); -/* start DMA */ -writeb (dma_cmd |1 , +writeb (dma_cmd |ATA_DMA_START , (void __iomem *)(hwif->dma_base +ATA_DMA_CMD )); }else { dma_cmd =inb (hwif->dma_base +ATA_DMA_CMD ); -outb (dma_cmd |1 , hwif->dma_base +ATA_DMA_CMD ); +outb (dma_cmd |ATA_DMA_START , hwif->dma_base +ATA_DMA_CMD ); }wmb ();
@@ -296,19 +290,18 @@ int ide_dma_end(ide_drive_t *drive) {ide_hwif_t *hwif = drive->hwif;u8 mmio = (hwif->host_flags &IDE_HFLAG_MMIO ) ?1 :0 ; -u8 dma_stat =0 , dma_cmd =0 ; +u8 dma_stat =0 , dma_cmd =0 , mask; drive->waiting_for_dma =0 ; +/* stop DMA */ if (mmio) { -/* get DMA command mode */ dma_cmd =readb ((void __iomem *)(hwif->dma_base +ATA_DMA_CMD )); -/* stop DMA */ -writeb (dma_cmd & ~1 , +writeb (dma_cmd & ~ATA_DMA_START , (void __iomem *)(hwif->dma_base +ATA_DMA_CMD )); }else { dma_cmd =inb (hwif->dma_base +ATA_DMA_CMD ); -outb (dma_cmd & ~1 , hwif->dma_base +ATA_DMA_CMD ); +outb (dma_cmd & ~ATA_DMA_START , hwif->dma_base +ATA_DMA_CMD ); }/* get DMA status */
@@ -316,16 +309,21 @@ int ide_dma_end(ide_drive_t *drive)if (mmio)/* clear the INTR & ERROR bits */ -writeb (dma_stat |6 , +writeb (dma_stat |ATA_DMA_ERR |ATA_DMA_INTR , (void __iomem *)(hwif->dma_base +ATA_DMA_STATUS ));else -outb (dma_stat |6 , hwif->dma_base +ATA_DMA_STATUS ); +outb (dma_stat |ATA_DMA_ERR |ATA_DMA_INTR , + hwif->dma_base +ATA_DMA_STATUS );/* purge DMA mappings */ ide_destroy_dmatable (drive); -/* verify good DMA status */ wmb (); -return (dma_stat &7 ) !=4 ? (0x10 | dma_stat) :0 ; + +/* verify good DMA status */ + mask =ATA_DMA_ACTIVE |ATA_DMA_ERR |ATA_DMA_INTR ; +if ((dma_stat & mask) !=ATA_DMA_INTR ) +return 0x10 | dma_stat; +return 0 ; }EXPORT_SYMBOL_GPL (ide_dma_end);
@@ -335,11 +333,7 @@ int ide_dma_test_irq(ide_drive_t *drive)ide_hwif_t *hwif = drive->hwif;u8 dma_stat = hwif->tp_ops->read_sff_dma_status (hwif); -/* return 1 if INTR asserted */ -if ((dma_stat &4 ) ==4 ) -return 1 ; - -return 0 ; +return (dma_stat &ATA_DMA_INTR ) ?1 :0 ; }EXPORT_SYMBOL_GPL (ide_dma_test_irq);
Re: [PATCH 07/11] ide: use ATA_DMA_* defines in ide-dma-sff.c
Hello.
Quoted 1 line · Bartlomiej Zolnierkiewicz
In few places open-coded values were still being used. Fix it.
Oh, you've beaten me to it (and made one of my still pending patches
unapplcable :-).
Quoted 1 line
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
MBR, Sergei
PATCH 8/11 ide: move Power Management support to ide-pm.c
In reply to Bartlomiej ZolnierkiewiczFrom: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: move Power Management support to ide-pm.c
There should be no functional changes caused by this patch.
--- drivers/ide/Makefile | 2 drivers/ide/ide-io.c | 157 ---------------------------------- drivers/ide/ide-pm.c | 233 +++++++++++++++++++++++++++++++++++++++++++++++++++ drivers/ide/ide.c | 74 ---------------- include/linux/ide.h | 8 + 5 files changed, 242 insertions(+), 232 deletions(-)
drivers/ide/Makefile +1 -1
@@ -5,7 +5,7 @@ EXTRA_CFLAGS += -Idrivers/ide ide-core-y += ide.o ide-ioctls.o ide-io.o ide-iops.o ide-lib.o ide-probe.o \ - ide-taskfile.o ide-park.o ide-pio-blacklist.o + ide-taskfile.o ide-pm.o ide-park.o ide-pio-blacklist.o # core IDE code ide-core-$(CONFIG_IDE_TIMINGS) += ide-timings.o
drivers/ide/ide-io.c +0 -157
175 lines not on this page · raw message
drivers/ide/ide-pm.c new file +233 -0
233 lines not on this page · raw message
drivers/ide/ide.c +0 -74
80 lines not on this page · raw message
include/linux/ide.h +8 -0
@@ -1109,6 +1109,14 @@ enum { IDE_PM_COMPLETED, }; +int generic_ide_suspend (struct device *,pm_message_t ); +int generic_ide_resume (struct device *); + +void ide_complete_power_step (ide_drive_t *,struct request *); +ide_startstop_t ide_start_power_step (ide_drive_t *,struct request *); +void ide_complete_pm_request (ide_drive_t *,struct request *); +void ide_check_pm_state (ide_drive_t *,struct request *); +/* * Subdrivers support. *
PATCH 9/11 ide: move legacy ISA/VLB ports handling to ide-legacy.c
In reply to Bartlomiej ZolnierkiewiczFrom: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: move legacy ISA/VLB ports handling to ide-legacy.c
* Move legacy ISA/VLB ports handling from ide-probe.c to ide-legacy.c.
* Add CONFIG_IDE_LEGACY config option to be selected by host drivers needing ide-legacy.c.
There should be no functional changes caused by this patch.
--- drivers/ide/Kconfig | 5 ++++ drivers/ide/Makefile | 1 drivers/ide/ide-legacy.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/ide/ide-probe.c | 56 --------------------------------------------- 4 files changed, 64 insertions(+), 56 deletions(-)
drivers/ide/Kconfig +5 -0
@@ -864,6 +864,7 @@ config BLK_DEV_4DRIVES config BLK_DEV_ALI14XX tristate "ALI M14xx support" select IDE_TIMINGS + select IDE_LEGACY help This driver is enabled at runtime using the "ali14xx.probe" kernel boot parameter. It enables support for the secondary IDE interface
@@ -874,6 +875,7 @@ config BLK_DEV_ALI14XX config BLK_DEV_DTC2278 tristate "DTC-2278 support" + select IDE_LEGACY help This driver is enabled at runtime using the "dtc2278.probe" kernel boot parameter. It enables support for the secondary IDE interface
@@ -884,6 +886,7 @@ config BLK_DEV_DTC2278 config BLK_DEV_HT6560B tristate "Holtek HT6560B support" select IDE_TIMINGS + select IDE_LEGACY help This driver is enabled at runtime using the "ht6560b.probe" kernel boot parameter. It enables support for the secondary IDE interface
@@ -894,6 +897,7 @@ config BLK_DEV_HT6560B config BLK_DEV_QD65XX tristate "QDI QD65xx support" select IDE_TIMINGS + select IDE_LEGACY help This driver is enabled at runtime using the "qd65xx.probe" kernel boot parameter. It permits faster I/O speeds to be set. See the
@@ -902,6 +906,7 @@ config BLK_DEV_QD65XX config BLK_DEV_UMC8672 tristate "UMC-8672 support" + select IDE_LEGACY help This driver is enabled at runtime using the "umc8672.probe" kernel boot parameter. It enables support for the secondary IDE interface
drivers/ide/Makefile +1 -0
@@ -15,6 +15,7 @@ ide-core-$(CONFIG_BLK_DEV_IDEDMA) += ide ide-core-$(CONFIG_BLK_DEV_IDEDMA_SFF) += ide-dma-sff.o ide-core-$(CONFIG_IDE_PROC_FS) += ide-proc.o ide-core-$(CONFIG_BLK_DEV_IDEACPI) += ide-acpi.o +ide-core-$(CONFIG_IDE_LEGACY) += ide-legacy.o obj-$(CONFIG_IDE) += ide-core.o
drivers/ide/ide-legacy.c new file +58 -0
58 lines not on this page · raw message
drivers/ide/ide-probe.c +0 -56
59 lines not on this page · raw message
PATCH 10/11 ide: remove superfluous local_irq_{save,restore}() from ide_dump_status()
In reply to Bartlomiej ZolnierkiewiczFrom: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: remove superfluous local_irq_{save,restore}() from ide_dump_status()
No reason to run this function with local IRQs off.
--- drivers/ide/ide-lib.c | 3 --- 1 file changed, 3 deletions(-)
drivers/ide/ide-lib.c +0 -3
@@ -384,10 +384,8 @@ static void ide_dump_atapi_error(ide_driu8 ide_dump_status (ide_drive_t *drive,const char *msg,u8 stat) { -unsigned long flags;u8 err =0 ; -local_irq_save (flags);printk (KERN_ERR "%s: %s: status=0x%02x { " , drive->name, msg, stat);if (stat &ATA_BUSY )printk (KERN_CONT "Busy " );
@@ -417,7 +415,6 @@ u8 ide_dump_status(ide_drive_t *drive, cide_dump_atapi_error (drive, err); }ide_dump_opcode (drive); -local_irq_restore (flags);return err; }EXPORT_SYMBOL (ide_dump_status);
PATCH 11/11 ide: push local_irq_{save,restore}() to do_identify()
In reply to Bartlomiej ZolnierkiewiczFrom: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: push local_irq_{save,restore}() to do_identify()
Push local_irq_{save,restore}() from actual_try_to_identify() to do_identify() and remove no longer needed local_irq_enable().
--- drivers/ide/ide-probe.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-)
drivers/ide/ide-probe.c +4 -7
@@ -116,14 +116,16 @@ static inline void do_identify (ide_drivide_hwif_t *hwif =HWIF (drive);u16 *id = drive->id;char *m = (char *)&id[ATA_ID_PROD ]; +unsigned long flags;int bswap =1 , is_cfa; +/* local CPU only; some systems need this */ +local_irq_save (flags);/* read 512 bytes of id info */ hwif->tp_ops->input_data (drive,NULL , id,SECTOR_SIZE ); +local_irq_restore (flags); drive->dev_flags |=IDE_DFLAG_ID_READ ; - -local_irq_enable ();#ifdef DEBUG printk (KERN_INFO "%s: dumping identify data\n" , drive->name);ide_dump_identify ((u8 *)id);
@@ -305,17 +307,12 @@ static int actual_try_to_identify (ide_d s = tp_ops->read_status (hwif);if (OK_STAT (s,ATA_DRQ ,BAD_R_STAT )) { -unsigned long flags; - -/* local CPU only; some systems need this */ -local_irq_save (flags);/* drive returned ID */ do_identify (drive, cmd);/* drive responded with ID */ rc =0 ;/* clear drive IRQ */ (void )tp_ops->read_status (hwif); -local_irq_restore (flags); }else {/* drive refused ID */ rc =2 ;
Re: [PATCH 11/11] ide: push local_irq_{save,restore}() to do_identify()
Hello.
Quoted 4 lines · Bartlomiej Zolnierkiewicz
Push local_irq_{save,restore}() from
actual_try_to_identify()todo_identify()and remove no longer neededlocal_irq_enable().Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
MBR, Sergei