bk://bart.bkbits.net/ide-dev-2.6 bzolnier@trik.(none)[bzolnier]|ChangeSet|20050121192556|03008 bzolnier # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2005/01/21 23:17:40-08:00 akpm@bix.(none) # Merge bk://bart.bkbits.net/ide-dev-2.6 # into bix.(none):/usr/src/bk-ide-dev # # include/linux/ide.h # 2005/01/21 23:17:36-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/setup-pci.c # 2005/01/21 23:17:36-08:00 akpm@bix.(none) +0 -1 # Auto merged # # drivers/ide/pci/pdc202xx_old.h # 2005/01/21 23:17:36-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/pci/pdc202xx_new.h # 2005/01/21 23:17:36-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide.c # 2005/01/21 23:17:36-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide-taskfile.c # 2005/01/21 23:17:36-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide-probe.c # 2005/01/21 23:17:36-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide-disk.c # 2005/01/21 23:17:36-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/Kconfig # 2005/01/21 23:17:36-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/21 23:15:34-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-ide-dev # # drivers/ide/ide.c # 2005/01/21 23:15:29-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/21 20:25:56+01:00 bzolnier@trik.(none) # [ide] kill ide_driver_t->pre_reset # # Add ide_drive_t->post_reset flag and use it to signal post reset # condition to the ide-tape driver (the only user of ->pre_reset). # # include/linux/ide.h # 2005/01/21 20:13:35+01:00 bzolnier@trik.(none) +1 -1 # [ide] kill ide_driver_t->pre_reset # # drivers/ide/ide.c # 2005/01/21 20:13:35+01:00 bzolnier@trik.(none) +0 -5 # [ide] kill ide_driver_t->pre_reset # # drivers/ide/ide-tape.c # 2005/01/21 20:13:35+01:00 bzolnier@trik.(none) +5 -11 # [ide] kill ide_driver_t->pre_reset # # drivers/ide/ide-iops.c # 2005/01/21 20:13:35+01:00 bzolnier@trik.(none) +1 -1 # [ide] kill ide_driver_t->pre_reset # # ChangeSet # 2005/01/21 20:24:38+01:00 bzolnier@trik.(none) # [ide] fix some rare ide-default vs ide-disk races # # Some rare races between ide-default and ide-disk are possible, i.e.: # * ide-default is used, I/O request is triggered (ie. /proc/ide/hd?/identify), # drive->special is cleared silently (so CHS is not initialized properly), # ide-disk is loaded and fails if drive uses CHS # * ide-disk is used, drive is resetted, ide-disk is unloaded, ide-default # takes control over drive and on the first I/O request silently clears # drive->special without restoring settings # # Fix them by moving idedisk_{special,pre_reset}() and company to IDE core. # # include/linux/ide.h # 2005/01/21 20:13:47+01:00 bzolnier@trik.(none) +0 -1 # [ide] fix some rare ide-default vs ide-disk races # # drivers/ide/ide.c # 2005/01/21 20:13:47+01:00 bzolnier@trik.(none) +0 -10 # [ide] fix some rare ide-default vs ide-disk races # # drivers/ide/ide-taskfile.c # 2005/01/21 20:13:47+01:00 bzolnier@trik.(none) +0 -6 # [ide] fix some rare ide-default vs ide-disk races # # drivers/ide/ide-probe.c # 2005/01/21 20:13:47+01:00 bzolnier@trik.(none) +58 -2 # [ide] fix some rare ide-default vs ide-disk races # # drivers/ide/ide-iops.c # 2005/01/21 20:13:47+01:00 bzolnier@trik.(none) +19 -1 # [ide] fix some rare ide-default vs ide-disk races # # drivers/ide/ide-io.c # 2005/01/21 20:13:47+01:00 bzolnier@trik.(none) +66 -2 # [ide] fix some rare ide-default vs ide-disk races # # drivers/ide/ide-disk.c # 2005/01/21 20:13:47+01:00 bzolnier@trik.(none) +0 -108 # [ide] fix some rare ide-default vs ide-disk races # # drivers/ide/Kconfig # 2005/01/21 20:13:47+01:00 bzolnier@trik.(none) +0 -1 # [ide] fix some rare ide-default vs ide-disk races # # ChangeSet # 2005/01/21 20:23:26+01:00 bzolnier@trik.(none) # [ide] generic Power Management for IDE devices # # Move PM code from ide-cd.c and ide-disk.c to IDE core so: # * PM is supported for other ATAPI devices (floppy, tape) # * PM is supported even if specific driver is not loaded # # include/linux/ide.h # 2005/01/21 20:14:00+01:00 bzolnier@trik.(none) +0 -2 # [ide] generic Power Management for IDE devices # # drivers/ide/ide.c # 2005/01/21 20:14:00+01:00 bzolnier@trik.(none) +0 -9 # [ide] generic Power Management for IDE devices # # drivers/ide/ide-io.c # 2005/01/21 20:14:00+01:00 bzolnier@trik.(none) +89 -2 # [ide] generic Power Management for IDE devices # # drivers/ide/ide-disk.c # 2005/01/21 20:14:00+01:00 bzolnier@trik.(none) +0 -86 # [ide] generic Power Management for IDE devices # # drivers/ide/ide-cd.c # 2005/01/21 20:14:00+01:00 bzolnier@trik.(none) +0 -41 # [ide] generic Power Management for IDE devices # # ChangeSet # 2005/01/21 20:21:54+01:00 bzolnier@trik.(none) # [ide] fix drive->ready_stat for ATAPI # # ATAPI devices ignore DRDY bit so drive->ready_stat must be set to zero. # It is currently done by device drivers (including ide-default fake driver) # but for PMAC driver it is too late as wait_for_ready() may be called during # probe: probe_hwif()->pmac_ide_dma_check()->pmac_ide_{mdma,udma}_enable()-> # ->pmac_ide_do_setfeature()->wait_for_ready(). # # Fixup drive->ready_stat just after detecting ATAPI device. # # drivers/scsi/ide-scsi.c # 2005/01/21 20:14:18+01:00 bzolnier@trik.(none) +0 -1 # [ide] fix drive->ready_stat for ATAPI # # drivers/ide/ide.c # 2005/01/21 20:14:18+01:00 bzolnier@trik.(none) +2 -0 # [ide] fix drive->ready_stat for ATAPI # # drivers/ide/ide-tape.c # 2005/01/21 20:14:18+01:00 bzolnier@trik.(none) +0 -2 # [ide] fix drive->ready_stat for ATAPI # # drivers/ide/ide-probe.c # 2005/01/21 20:14:18+01:00 bzolnier@trik.(none) +2 -0 # [ide] fix drive->ready_stat for ATAPI # # drivers/ide/ide-floppy.c # 2005/01/21 20:14:18+01:00 bzolnier@trik.(none) +0 -1 # [ide] fix drive->ready_stat for ATAPI # # drivers/ide/ide-default.c # 2005/01/21 20:14:18+01:00 bzolnier@trik.(none) +0 -7 # [ide] fix drive->ready_stat for ATAPI # # drivers/ide/ide-cd.c # 2005/01/21 20:14:18+01:00 bzolnier@trik.(none) +0 -1 # [ide] fix drive->ready_stat for ATAPI # # ChangeSet # 2005/01/21 20:20:25+01:00 bzolnier@trik.(none) # [ide] ignore BIOS enable bits for Promise controllers # # Since there are no Promise binary drivers for 2.6.x kernels: # * ignore BIOS enable bits completely # * remove CONFIG_PDC202XX_FORCE # * kill IDEPCI_FLAG_FORCE_PDC hack # # include/linux/ide.h # 2005/01/21 20:14:29+01:00 bzolnier@trik.(none) +0 -1 # [ide] ignore BIOS enable bits for Promise controllers # # drivers/ide/setup-pci.c # 2005/01/21 20:14:29+01:00 bzolnier@trik.(none) +1 -14 # [ide] ignore BIOS enable bits for Promise controllers # # drivers/ide/pci/pdc202xx_old.h # 2005/01/21 20:14:29+01:00 bzolnier@trik.(none) +0 -17 # [ide] ignore BIOS enable bits for Promise controllers # # drivers/ide/pci/pdc202xx_new.h # 2005/01/21 20:14:29+01:00 bzolnier@trik.(none) +0 -6 # [ide] ignore BIOS enable bits for Promise controllers # # drivers/ide/Kconfig # 2005/01/21 20:14:29+01:00 bzolnier@trik.(none) +0 -7 # [ide] ignore BIOS enable bits for Promise controllers # # ChangeSet # 2005/01/15 20:51:12-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-ide-dev # # include/linux/ide.h # 2005/01/15 20:51:07-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/pci/atiixp.c # 2005/01/15 20:51:07-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide.c # 2005/01/15 20:51:07-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide-probe.c # 2005/01/15 20:51:07-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/arm/icside.c # 2005/01/15 20:51:07-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/11 12:10:05-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-ide-dev # # drivers/ide/ide.c # 2005/01/11 12:10:00-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/07 14:56:14-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-ide-dev # # include/linux/ide.h # 2005/01/07 14:56:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/setup-pci.c # 2005/01/07 14:56:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide.c # 2005/01/07 14:56:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide-taskfile.c # 2005/01/07 14:56:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide-disk.c # 2005/01/07 14:56:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/arm/icside.c # 2005/01/07 14:56:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/04 00:19:41-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-ide-dev # # drivers/ide/setup-pci.c # 2005/01/04 00:19:36-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/02 16:19:51-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-ide-dev # # drivers/ide/setup-pci.c # 2005/01/02 16:19:47-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/12/30 23:23:50-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-ide-dev # # include/linux/ide.h # 2004/12/30 23:23:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/setup-pci.c # 2004/12/30 23:23:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/pci/triflex.c # 2004/12/30 23:23:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/pci/pdc202xx_old.h # 2004/12/30 23:23:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/pci/pdc202xx_new.h # 2004/12/30 23:23:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/pci/atiixp.c # 2004/12/30 23:23:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide.c # 2004/12/30 23:23:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide-proc.c # 2004/12/30 23:23:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/12/21 11:38:04-08:00 akpm@bix.(none) # ss # # drivers/ide/ide-proc.c # 2004/12/21 11:37:57-08:00 akpm@bix.(none) +3 -3 # ss # # include/linux/ide.h # 2004/12/21 11:34:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/linux/hdreg.h # 2004/12/21 11:34:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/setup-pci.c # 2004/12/21 11:34:44-08:00 akpm@bix.(none) +0 -5 # Auto merged # # drivers/ide/pci/atiixp.c # 2004/12/21 11:34:44-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/arm/icside.c # 2004/12/21 11:34:44-08:00 akpm@bix.(none) +0 -5 # Auto merged # # drivers/ide/ide.c # 2004/12/21 11:34:43-08:00 akpm@bix.(none) +0 -9 # Auto merged # # drivers/ide/ide-taskfile.c # 2004/12/21 11:34:43-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide-probe.c # 2004/12/21 11:34:43-08:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/ide/ide-disk.c # 2004/12/21 11:34:43-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/11/02 14:18:55+01:00 bzolnier@trik.(none) # hch noticed that some "/ SECTOR_SIZE" are missing # # Cset exclude: bzolnier@trik.(none)|ChangeSet|20041029193506|44339 # # include/linux/ide.h # 2004/11/02 14:18:45+01:00 bzolnier@trik.(none) +0 -0 # Exclude # # drivers/ide/ide-taskfile.c # 2004/11/02 14:18:44+01:00 bzolnier@trik.(none) +0 -0 # Exclude # # drivers/ide/ide-disk.c # 2004/11/02 14:18:44+01:00 bzolnier@trik.(none) +0 -0 # Exclude # # ChangeSet # 2004/10/29 21:24:49+02:00 bzolnier@trik.(none) # [ide] obsolete "enable DMA by default" config options # # CONFIG_IDEDMA_PCI_AUTO and CONFIG_IDEDMA_ICS_AUTO # # Host drivers should deal with broken hardware themselves. # Warn if DMA support is enabled but "enable DMA by default" is not. # # drivers/ide/setup-pci.c # 2004/10/29 21:24:27+02:00 bzolnier@trik.(none) +5 -0 # [ide] obsolete "enable DMA by default" config options # # drivers/ide/arm/icside.c # 2004/10/29 21:24:27+02:00 bzolnier@trik.(none) +5 -0 # [ide] obsolete "enable DMA by default" config options # # ChangeSet # 2004/10/29 21:14:36+02:00 bzolnier@trik.(none) # [ide] obsolete some command line parameters # # "hdx=autotune", "hdx=noautotune": # * should be handled by host drivers needing them # # "idex=autotune", "idex=noautotune": # * should die # # "idex=ata66": # * should be handled by host drivers needing it # # "idex=dma": # * works only for: cs5220.c, generic.c, hpt366.c, triflex.c # * DMA should be used by default # # "idex=reset", "idex=serialize": # * host drivers should set these settings when needed # # "idex=base[,ctl[,irq]]": # * host drivers should auto-detect correct settings # * ordering should be controlled by user-space # # "ide0=four": # * should be handled by ide-generic driver # # drivers/ide/ide.c # 2004/10/29 21:14:15+02:00 bzolnier@trik.(none) +12 -9 # [ide] obsolete some command line parameters # # ChangeSet # 2004/10/29 20:59:23+02:00 bzolnier@trik.(none) # [ide] ignore BIOS enable bits for Promise controllers # # There are no Promise binary drivers for 2.6.x kernels so: # * ignore BIOS enable bits completely # * remove CONFIG_PDC202XX_FORCE # * kill IDEPCI_FLAG_FORCE_PDC hack # # include/linux/ide.h # 2004/10/29 20:15:33+02:00 bzolnier@trik.(none) +0 -1 # [ide] ignore BIOS enable bits for Promise controllers # # drivers/ide/setup-pci.c # 2004/10/29 20:15:33+02:00 bzolnier@trik.(none) +1 -14 # [ide] ignore BIOS enable bits for Promise controllers # # drivers/ide/pci/pdc202xx_old.h # 2004/10/29 20:15:33+02:00 bzolnier@trik.(none) +0 -17 # [ide] ignore BIOS enable bits for Promise controllers # # drivers/ide/pci/pdc202xx_new.h # 2004/10/29 20:15:33+02:00 bzolnier@trik.(none) +0 -6 # [ide] ignore BIOS enable bits for Promise controllers # # drivers/ide/Kconfig # 2004/10/29 20:15:33+02:00 bzolnier@trik.(none) +0 -7 # [ide] ignore BIOS enable bits for Promise controllers # # ChangeSet # 2004/10/29 20:58:09+02:00 bzolnier@trik.(none) # [ide] obsolete /proc/ide/hd?/settings # # Majority of these settings is also available through ioctls. # We will deal with the rest during deprecation period. # # drivers/ide/ide-proc.c # 2004/10/29 20:57:48+02:00 bzolnier@trik.(none) +6 -0 # [ide] obsolete /proc/ide/hd?/settings # # ChangeSet # 2004/10/29 20:54:32+02:00 bzolnier@trik.(none) # [ide] kill /proc/ide/hd?/settings:number # # drive->dn is used mainly for programming timings and shouldn't be touched. # # drivers/ide/ide.c # 2004/10/29 20:54:13+02:00 bzolnier@trik.(none) +0 -1 # [ide] kill /proc/ide/hd?/settings:number # # ChangeSet # 2004/10/29 20:52:26+02:00 bzolnier@trik.(none) # [ide] kill /proc/ide/hd?/settings:lun # # drive->lun is always zero in init_gendisk(). # # include/linux/ide.h # 2004/10/29 20:52:03+02:00 bzolnier@trik.(none) +0 -1 # [ide] kill /proc/ide/hd?/settings:lun # # drivers/ide/ide-probe.c # 2004/10/29 20:52:03+02:00 bzolnier@trik.(none) +2 -2 # [ide] kill /proc/ide/hd?/settings:lun # # drivers/ide/ide-disk.c # 2004/10/29 20:52:03+02:00 bzolnier@trik.(none) +0 -1 # [ide] kill /proc/ide/hd?/settings:lun # # ChangeSet # 2004/10/29 20:47:43+02:00 bzolnier@trik.(none) # [ide] kill /proc/ide/hd?/settings:address & HDIO_[GET,SET]_ADDRESS ioctls # # ide-disk driver always uses LBA48 when available so # messing with drive->addressing should be prohibited. # # include/linux/hdreg.h # 2004/10/29 20:47:24+02:00 bzolnier@trik.(none) +4 -2 # [ide] kill /proc/ide/hd?/settings:address & HDIO_[GET,SET]_ADDRESS ioctls # # drivers/ide/ide-disk.c # 2004/10/29 20:47:24+02:00 bzolnier@trik.(none) +0 -1 # [ide] kill /proc/ide/hd?/settings:address & HDIO_[GET,SET]_ADDRESS ioctls # # ChangeSet # 2004/10/29 20:43:49+02:00 bzolnier@trik.(none) # [ide] triflex: simplify triflex_config_drive_for_dma() # # drivers/ide/pci/triflex.c # 2004/10/29 20:43:28+02:00 bzolnier@trik.(none) +3 -5 # [ide] triflex: simplify triflex_config_drive_for_dma() # # ChangeSet # 2004/10/29 20:41:24+02:00 bzolnier@trik.(none) # [ide] atiixp: simplify atiixp_config_drive_for_dma() # # drivers/ide/pci/atiixp.c # 2004/10/29 20:40:59+02:00 bzolnier@trik.(none) +2 -4 # [ide] atiixp: simplify atiixp_config_drive_for_dma() # diff -Nru a/drivers/ide/Kconfig b/drivers/ide/Kconfig --- a/drivers/ide/Kconfig 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/Kconfig 2005-01-28 15:24:13 -08:00 @@ -150,7 +150,6 @@ config IDEDISK_MULTI_MODE bool "Use multi-mode by default" - depends on BLK_DEV_IDEDISK help If you get this error, try to say Y here: @@ -658,13 +657,6 @@ config BLK_DEV_PDC202XX_NEW tristate "PROMISE PDC202{68|69|70|71|75|76|77} support" - -# FIXME - probably wants to be one for old and for new -config PDC202XX_FORCE - bool "Enable controller even if disabled by BIOS" - depends on BLK_DEV_PDC202XX_NEW - help - Enable the PDC202xx controller even if it has been disabled in the BIOS setup. config BLK_DEV_SVWKS tristate "ServerWorks OSB4/CSB5/CSB6 chipsets support" diff -Nru a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c --- a/drivers/ide/ide-cd.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-cd.c 2005-01-28 15:24:13 -08:00 @@ -3088,7 +3088,6 @@ drive->queue->unplug_delay = 1; drive->special.all = 0; - drive->ready_stat = 0; CDROM_STATE_FLAGS(drive)->media_changed = 1; CDROM_STATE_FLAGS(drive)->toc_valid = 0; @@ -3252,45 +3251,6 @@ static int ide_cdrom_attach (ide_drive_t *drive); -/* - * Power Management state machine. - * - * We don't do much for CDs right now. - */ - -static void ide_cdrom_complete_power_step (ide_drive_t *drive, struct request *rq, u8 stat, u8 error) -{ -} - -static ide_startstop_t ide_cdrom_start_power_step (ide_drive_t *drive, struct request *rq) -{ - ide_task_t *args = rq->special; - - memset(args, 0, sizeof(*args)); - - switch (rq->pm->pm_step) { - case ide_pm_state_start_suspend: - break; - - case ide_pm_state_start_resume: /* Resume step 1 (restore DMA) */ - /* - * Right now, all we do is call hwif->ide_dma_check(drive), - * we could be smarter and check for current xfer_speed - * in struct drive etc... - * Also, this step could be implemented as a generic helper - * as most subdrivers will use it. - */ - if ((drive->id->capability & 1) == 0) - break; - if (HWIF(drive)->ide_dma_check == NULL) - break; - HWIF(drive)->ide_dma_check(drive); - break; - } - rq->pm->pm_step = ide_pm_state_completed; - return ide_stopped; -} - static ide_driver_t ide_cdrom_driver = { .owner = THIS_MODULE, .name = "ide-cdrom", @@ -3303,8 +3263,6 @@ .capacity = ide_cdrom_capacity, .attach = ide_cdrom_attach, .drives = LIST_HEAD_INIT(ide_cdrom_driver.drives), - .start_power_step = ide_cdrom_start_power_step, - .complete_power_step = ide_cdrom_complete_power_step, }; static int idecd_open(struct inode * inode, struct file * file) diff -Nru a/drivers/ide/ide-default.c b/drivers/ide/ide-default.c --- a/drivers/ide/ide-default.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-default.c 2005-01-28 15:24:13 -08:00 @@ -57,13 +57,6 @@ "driver with ide.c\n", drive->name); return 1; } - - /* For the sake of the request layer, we must make sure we have a - * correct ready_stat value, that is 0 for ATAPI devices or we will - * fail any request like Power Management - */ - if (drive->media != ide_disk) - drive->ready_stat = 0; return 0; } diff -Nru a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c --- a/drivers/ide/ide-disk.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-disk.c 2005-01-28 15:24:13 -08:00 @@ -517,75 +517,6 @@ return drive->capacity64 - drive->sect0; } -#define IS_PDC4030_DRIVE 0 - -static ide_startstop_t idedisk_special (ide_drive_t *drive) -{ - special_t *s = &drive->special; - - if (s->b.set_geometry) { - s->b.set_geometry = 0; - if (!IS_PDC4030_DRIVE) { - ide_task_t args; - memset(&args, 0, sizeof(ide_task_t)); - args.tfRegister[IDE_NSECTOR_OFFSET] = drive->sect; - args.tfRegister[IDE_SECTOR_OFFSET] = drive->sect; - args.tfRegister[IDE_LCYL_OFFSET] = drive->cyl; - args.tfRegister[IDE_HCYL_OFFSET] = drive->cyl>>8; - args.tfRegister[IDE_SELECT_OFFSET] = ((drive->head-1)|drive->select.all)&0xBF; - args.tfRegister[IDE_COMMAND_OFFSET] = WIN_SPECIFY; - args.command_type = IDE_DRIVE_TASK_NO_DATA; - args.handler = &set_geometry_intr; - do_rw_taskfile(drive, &args); - } - } else if (s->b.recalibrate) { - s->b.recalibrate = 0; - if (!IS_PDC4030_DRIVE) { - ide_task_t args; - memset(&args, 0, sizeof(ide_task_t)); - args.tfRegister[IDE_NSECTOR_OFFSET] = drive->sect; - args.tfRegister[IDE_COMMAND_OFFSET] = WIN_RESTORE; - args.command_type = IDE_DRIVE_TASK_NO_DATA; - args.handler = &recal_intr; - do_rw_taskfile(drive, &args); - } - } else if (s->b.set_multmode) { - s->b.set_multmode = 0; - if (drive->mult_req > drive->id->max_multsect) - drive->mult_req = drive->id->max_multsect; - if (!IS_PDC4030_DRIVE) { - ide_task_t args; - memset(&args, 0, sizeof(ide_task_t)); - args.tfRegister[IDE_NSECTOR_OFFSET] = drive->mult_req; - args.tfRegister[IDE_COMMAND_OFFSET] = WIN_SETMULT; - args.command_type = IDE_DRIVE_TASK_NO_DATA; - args.handler = &set_multmode_intr; - do_rw_taskfile(drive, &args); - } - } else if (s->all) { - int special = s->all; - s->all = 0; - printk(KERN_ERR "%s: bad special flag: 0x%02x\n", drive->name, special); - return ide_stopped; - } - return IS_PDC4030_DRIVE ? ide_stopped : ide_started; -} - -static void idedisk_pre_reset (ide_drive_t *drive) -{ - int legacy = (drive->id->cfs_enable_2 & 0x0400) ? 0 : 1; - - drive->special.all = 0; - drive->special.b.set_geometry = legacy; - drive->special.b.recalibrate = legacy; - if (OK_TO_RESET_CONTROLLER) - drive->mult_count = 0; - if (!drive->keep_settings && !drive->using_dma) - drive->mult_req = 0; - if (drive->mult_req != drive->mult_count) - drive->special.b.set_multmode = 1; -} - #ifdef CONFIG_PROC_FS static int smart_enable(ide_drive_t *drive) @@ -844,101 +775,15 @@ ide_add_setting(drive, "bios_cyl", SETTING_RW, -1, -1, TYPE_INT, 0, 65535, 1, 1, &drive->bios_cyl, NULL); ide_add_setting(drive, "bios_head", SETTING_RW, -1, -1, TYPE_BYTE, 0, 255, 1, 1, &drive->bios_head, NULL); ide_add_setting(drive, "bios_sect", SETTING_RW, -1, -1, TYPE_BYTE, 0, 63, 1, 1, &drive->bios_sect, NULL); - ide_add_setting(drive, "address", SETTING_RW, HDIO_GET_ADDRESS, HDIO_SET_ADDRESS, TYPE_INTA, 0, 2, 1, 1, &drive->addressing, set_lba_addressing); ide_add_setting(drive, "bswap", SETTING_READ, -1, -1, TYPE_BYTE, 0, 1, 1, 1, &drive->bswap, NULL); ide_add_setting(drive, "multcount", id ? SETTING_RW : SETTING_READ, HDIO_GET_MULTCOUNT, HDIO_SET_MULTCOUNT, TYPE_BYTE, 0, id ? id->max_multsect : 0, 1, 1, &drive->mult_count, set_multcount); ide_add_setting(drive, "nowerr", SETTING_RW, HDIO_GET_NOWERR, HDIO_SET_NOWERR, TYPE_BYTE, 0, 1, 1, 1, &drive->nowerr, set_nowerr); - ide_add_setting(drive, "lun", SETTING_RW, -1, -1, TYPE_INT, 0, 7, 1, 1, &drive->lun, NULL); ide_add_setting(drive, "wcache", SETTING_RW, HDIO_GET_WCACHE, HDIO_SET_WCACHE, TYPE_BYTE, 0, 1, 1, 1, &drive->wcache, write_cache); ide_add_setting(drive, "acoustic", SETTING_RW, HDIO_GET_ACOUSTIC, HDIO_SET_ACOUSTIC, TYPE_BYTE, 0, 254, 1, 1, &drive->acoustic, set_acoustic); ide_add_setting(drive, "failures", SETTING_RW, -1, -1, TYPE_INT, 0, 65535, 1, 1, &drive->failures, NULL); ide_add_setting(drive, "max_failures", SETTING_RW, -1, -1, TYPE_INT, 0, 65535, 1, 1, &drive->max_failures, NULL); } -/* - * Power Management state machine. This one is rather trivial for now, - * we should probably add more, like switching back to PIO on suspend - * to help some BIOSes, re-do the door locking on resume, etc... - */ - -enum { - idedisk_pm_flush_cache = ide_pm_state_start_suspend, - idedisk_pm_standby, - - idedisk_pm_idle = ide_pm_state_start_resume, - idedisk_pm_restore_dma, -}; - -static void idedisk_complete_power_step (ide_drive_t *drive, struct request *rq, u8 stat, u8 error) -{ - switch (rq->pm->pm_step) { - case idedisk_pm_flush_cache: /* Suspend step 1 (flush cache) complete */ - if (rq->pm->pm_state == 4) - rq->pm->pm_step = ide_pm_state_completed; - else - rq->pm->pm_step = idedisk_pm_standby; - break; - case idedisk_pm_standby: /* Suspend step 2 (standby) complete */ - rq->pm->pm_step = ide_pm_state_completed; - break; - case idedisk_pm_idle: /* Resume step 1 (idle) complete */ - rq->pm->pm_step = idedisk_pm_restore_dma; - break; - } -} - -static ide_startstop_t idedisk_start_power_step (ide_drive_t *drive, struct request *rq) -{ - ide_task_t *args = rq->special; - - memset(args, 0, sizeof(*args)); - - switch (rq->pm->pm_step) { - case idedisk_pm_flush_cache: /* Suspend step 1 (flush cache) */ - /* Not supported? Switch to next step now. */ - if (!drive->wcache || !ide_id_has_flush_cache(drive->id)) { - idedisk_complete_power_step(drive, rq, 0, 0); - return ide_stopped; - } - if (ide_id_has_flush_cache_ext(drive->id)) - args->tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE_EXT; - else - args->tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE; - args->command_type = IDE_DRIVE_TASK_NO_DATA; - args->handler = &task_no_data_intr; - return do_rw_taskfile(drive, args); - - case idedisk_pm_standby: /* Suspend step 2 (standby) */ - args->tfRegister[IDE_COMMAND_OFFSET] = WIN_STANDBYNOW1; - args->command_type = IDE_DRIVE_TASK_NO_DATA; - args->handler = &task_no_data_intr; - return do_rw_taskfile(drive, args); - - case idedisk_pm_idle: /* Resume step 1 (idle) */ - args->tfRegister[IDE_COMMAND_OFFSET] = WIN_IDLEIMMEDIATE; - args->command_type = IDE_DRIVE_TASK_NO_DATA; - args->handler = task_no_data_intr; - return do_rw_taskfile(drive, args); - - case idedisk_pm_restore_dma: /* Resume step 2 (restore DMA) */ - /* - * Right now, all we do is call hwif->ide_dma_check(drive), - * we could be smarter and check for current xfer_speed - * in struct drive etc... - * Also, this step could be implemented as a generic helper - * as most subdrivers will use it - */ - if ((drive->id->capability & 1) == 0) - break; - if (HWIF(drive)->ide_dma_check == NULL) - break; - HWIF(drive)->ide_dma_check(drive); - break; - } - rq->pm->pm_step = ide_pm_state_completed; - return ide_stopped; -} - static void idedisk_setup (ide_drive_t *drive) { struct hd_driveid *id = drive->id; @@ -977,28 +822,6 @@ printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name, drive->queue->max_sectors / 2); - /* Extract geometry if we did not already have one for the drive */ - if (!drive->cyl || !drive->head || !drive->sect) { - drive->cyl = drive->bios_cyl = id->cyls; - drive->head = drive->bios_head = id->heads; - drive->sect = drive->bios_sect = id->sectors; - } - - /* Handle logical geometry translation by the drive */ - if ((id->field_valid & 1) && id->cur_cyls && - id->cur_heads && (id->cur_heads <= 16) && id->cur_sectors) { - drive->cyl = id->cur_cyls; - drive->head = id->cur_heads; - drive->sect = id->cur_sectors; - } - - /* Use physical geometry if what we have still makes no sense */ - if (drive->head > 16 && id->heads && id->heads <= 16) { - drive->cyl = id->cyls; - drive->head = id->heads; - drive->sect = id->sectors; - } - /* calculate drive capacity, and select LBA if possible */ init_idedisk_capacity (drive); @@ -1062,21 +885,6 @@ ide_dma_verbose(drive); printk("\n"); - drive->mult_count = 0; - if (id->max_multsect) { -#ifdef CONFIG_IDEDISK_MULTI_MODE - id->multsect = ((id->max_multsect/2) > 1) ? id->max_multsect : 0; - id->multsect_valid = id->multsect ? 1 : 0; - drive->mult_req = id->multsect_valid ? id->max_multsect : INITIAL_MULT_COUNT; - drive->special.b.set_multmode = drive->mult_req ? 1 : 0; -#else /* original, pre IDE-NFG, per request of AC */ - drive->mult_req = INITIAL_MULT_COUNT; - if (drive->mult_req > id->max_multsect) - drive->mult_req = id->max_multsect; - if (drive->mult_req || ((id->multsect_valid & 1) && id->multsect)) - drive->special.b.set_multmode = 1; -#endif /* CONFIG_IDEDISK_MULTI_MODE */ - } drive->no_io_32bit = id->dword_io ? 1 : 0; /* write cache enabled? */ @@ -1175,14 +983,10 @@ .supports_dsc_overlap = 0, .cleanup = idedisk_cleanup, .do_request = ide_do_rw_disk, - .pre_reset = idedisk_pre_reset, .capacity = idedisk_capacity, - .special = idedisk_special, .proc = idedisk_proc, .attach = idedisk_attach, .drives = LIST_HEAD_INIT(idedisk_driver.drives), - .start_power_step = idedisk_start_power_step, - .complete_power_step = idedisk_complete_power_step, }; static int idedisk_open(struct inode *inode, struct file *filp) diff -Nru a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c --- a/drivers/ide/ide-floppy.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-floppy.c 2005-01-28 15:24:13 -08:00 @@ -1793,7 +1793,6 @@ *((u16 *) &gcw) = drive->id->config; drive->driver_data = floppy; - drive->ready_stat = 0; memset(floppy, 0, sizeof(idefloppy_floppy_t)); floppy->drive = drive; floppy->pc = floppy->pc_stack; diff -Nru a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c --- a/drivers/ide/ide-io.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-io.c 2005-01-28 15:24:13 -08:00 @@ -189,6 +189,93 @@ } EXPORT_SYMBOL(ide_end_request); +/* + * Power Management state machine. This one is rather trivial for now, + * we should probably add more, like switching back to PIO on suspend + * to help some BIOSes, re-do the door locking on resume, etc... + */ + +enum { + ide_pm_flush_cache = ide_pm_state_start_suspend, + idedisk_pm_standby, + + idedisk_pm_idle = ide_pm_state_start_resume, + ide_pm_restore_dma, +}; + +static void ide_complete_power_step(ide_drive_t *drive, struct request *rq, u8 stat, u8 error) +{ + if (drive->media != ide_disk) + return; + + switch (rq->pm->pm_step) { + case ide_pm_flush_cache: /* Suspend step 1 (flush cache) complete */ + if (rq->pm->pm_state == 4) + rq->pm->pm_step = ide_pm_state_completed; + else + rq->pm->pm_step = idedisk_pm_standby; + break; + case idedisk_pm_standby: /* Suspend step 2 (standby) complete */ + rq->pm->pm_step = ide_pm_state_completed; + break; + case idedisk_pm_idle: /* Resume step 1 (idle) complete */ + rq->pm->pm_step = ide_pm_restore_dma; + break; + } +} + +static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *rq) +{ + ide_task_t *args = rq->special; + + memset(args, 0, sizeof(*args)); + + switch (rq->pm->pm_step) { + case ide_pm_flush_cache: /* Suspend step 1 (flush cache) */ + if (drive->media != ide_disk) + break; + /* Not supported? Switch to next step now. */ + if (!drive->wcache || !ide_id_has_flush_cache(drive->id)) { + ide_complete_power_step(drive, rq, 0, 0); + return ide_stopped; + } + if (ide_id_has_flush_cache_ext(drive->id)) + args->tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE_EXT; + else + args->tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE; + args->command_type = IDE_DRIVE_TASK_NO_DATA; + args->handler = &task_no_data_intr; + return do_rw_taskfile(drive, args); + + case idedisk_pm_standby: /* Suspend step 2 (standby) */ + args->tfRegister[IDE_COMMAND_OFFSET] = WIN_STANDBYNOW1; + args->command_type = IDE_DRIVE_TASK_NO_DATA; + args->handler = &task_no_data_intr; + return do_rw_taskfile(drive, args); + + case idedisk_pm_idle: /* Resume step 1 (idle) */ + args->tfRegister[IDE_COMMAND_OFFSET] = WIN_IDLEIMMEDIATE; + args->command_type = IDE_DRIVE_TASK_NO_DATA; + args->handler = task_no_data_intr; + return do_rw_taskfile(drive, args); + + case ide_pm_restore_dma: /* Resume step 2 (restore DMA) */ + /* + * Right now, all we do is call hwif->ide_dma_check(drive), + * we could be smarter and check for current xfer_speed + * in struct drive etc... + */ + if ((drive->id->capability & 1) == 0) + break; + if (drive->hwif->ide_dma_check == NULL) + break; + drive->hwif->ide_dma_check(drive); + break; + } + rq->pm->pm_step = ide_pm_state_completed; + return ide_stopped; +} + /** * ide_complete_pm_request - end the current Power Management request * @drive: target drive @@ -408,7 +495,7 @@ printk("%s: complete_power_step(step: %d, stat: %x, err: %x)\n", drive->name, rq->pm->pm_step, stat, err); #endif - DRIVER(drive)->complete_power_step(drive, rq, stat, err); + ide_complete_power_step(drive, rq, stat, err); if (rq->pm->pm_step == ide_pm_state_completed) ide_complete_pm_request(drive, rq); return; @@ -667,6 +754,65 @@ return ide_stopped; } +static void ide_init_specify_cmd(ide_drive_t *drive, ide_task_t *task) +{ + task->tfRegister[IDE_NSECTOR_OFFSET] = drive->sect; + task->tfRegister[IDE_SECTOR_OFFSET] = drive->sect; + task->tfRegister[IDE_LCYL_OFFSET] = drive->cyl; + task->tfRegister[IDE_HCYL_OFFSET] = drive->cyl>>8; + task->tfRegister[IDE_SELECT_OFFSET] = ((drive->head-1)|drive->select.all)&0xBF; + task->tfRegister[IDE_COMMAND_OFFSET] = WIN_SPECIFY; + + task->handler = &set_geometry_intr; +} + +static void ide_init_restore_cmd(ide_drive_t *drive, ide_task_t *task) +{ + task->tfRegister[IDE_NSECTOR_OFFSET] = drive->sect; + task->tfRegister[IDE_COMMAND_OFFSET] = WIN_RESTORE; + + task->handler = &recal_intr; +} + +static void ide_init_setmult_cmd(ide_drive_t *drive, ide_task_t *task) +{ + task->tfRegister[IDE_NSECTOR_OFFSET] = drive->mult_req; + task->tfRegister[IDE_COMMAND_OFFSET] = WIN_SETMULT; + + task->handler = &set_multmode_intr; +} + +static ide_startstop_t ide_disk_special(ide_drive_t *drive) +{ + special_t *s = &drive->special; + ide_task_t args; + + memset(&args, 0, sizeof(ide_task_t)); + args.command_type = IDE_DRIVE_TASK_NO_DATA; + + if (s->b.set_geometry) { + s->b.set_geometry = 0; + ide_init_specify_cmd(drive, &args); + } else if (s->b.recalibrate) { + s->b.recalibrate = 0; + ide_init_restore_cmd(drive, &args); + } else if (s->b.set_multmode) { + s->b.set_multmode = 0; + if (drive->mult_req > drive->id->max_multsect) + drive->mult_req = drive->id->max_multsect; + ide_init_setmult_cmd(drive, &args); + } else if (s->all) { + int special = s->all; + s->all = 0; + printk(KERN_ERR "%s: bad special flag: 0x%02x\n", drive->name, special); + return ide_stopped; + } + + do_rw_taskfile(drive, &args); + + return ide_started; +} + /** * do_special - issue some special commands * @drive: drive the command is for @@ -688,9 +834,14 @@ if (HWIF(drive)->tuneproc != NULL) HWIF(drive)->tuneproc(drive, drive->tune_req); return ide_stopped; + } else { + if (drive->media == ide_disk) + return ide_disk_special(drive); + + s->all = 0; + drive->mult_req = 0; + return ide_stopped; } - else - return DRIVER(drive)->special(drive); } void ide_map_sg(ide_drive_t *drive, struct request *rq) @@ -905,7 +1056,7 @@ printk("%s: start_power_step(step: %d)\n", drive->name, rq->pm->pm_step); #endif - startstop = DRIVER(drive)->start_power_step(drive, rq); + startstop = ide_start_power_step(drive, rq); if (startstop == ide_stopped && rq->pm->pm_step == ide_pm_state_completed) ide_complete_pm_request(drive, rq); diff -Nru a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c --- a/drivers/ide/ide-iops.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-iops.c 2005-01-28 15:24:13 -08:00 @@ -1112,9 +1112,27 @@ #endif } +static void ide_disk_pre_reset(ide_drive_t *drive) +{ + int legacy = (drive->id->cfs_enable_2 & 0x0400) ? 0 : 1; + + drive->special.all = 0; + drive->special.b.set_geometry = legacy; + drive->special.b.recalibrate = legacy; + if (OK_TO_RESET_CONTROLLER) + drive->mult_count = 0; + if (!drive->keep_settings && !drive->using_dma) + drive->mult_req = 0; + if (drive->mult_req != drive->mult_count) + drive->special.b.set_multmode = 1; +} + void pre_reset (ide_drive_t *drive) { - DRIVER(drive)->pre_reset(drive); + if (drive->media == ide_disk) + ide_disk_pre_reset(drive); + else + drive->post_reset = 1; if (!drive->keep_settings) { if (drive->using_dma) { diff -Nru a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c --- a/drivers/ide/ide-probe.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-probe.c 2005-01-28 15:24:13 -08:00 @@ -74,7 +74,55 @@ drive->id->cur_heads = drive->head; drive->id->cur_sectors = drive->sect; } - + +static void ide_disk_init_chs(ide_drive_t *drive) +{ + struct hd_driveid *id = drive->id; + + /* Extract geometry if we did not already have one for the drive */ + if (!drive->cyl || !drive->head || !drive->sect) { + drive->cyl = drive->bios_cyl = id->cyls; + drive->head = drive->bios_head = id->heads; + drive->sect = drive->bios_sect = id->sectors; + } + + /* Handle logical geometry translation by the drive */ + if ((id->field_valid & 1) && id->cur_cyls && + id->cur_heads && (id->cur_heads <= 16) && id->cur_sectors) { + drive->cyl = id->cur_cyls; + drive->head = id->cur_heads; + drive->sect = id->cur_sectors; + } + + /* Use physical geometry if what we have still makes no sense */ + if (drive->head > 16 && id->heads && id->heads <= 16) { + drive->cyl = id->cyls; + drive->head = id->heads; + drive->sect = id->sectors; + } +} + +static void ide_disk_init_mult_count(ide_drive_t *drive) +{ + struct hd_driveid *id = drive->id; + + drive->mult_count = 0; + if (id->max_multsect) { +#ifdef CONFIG_IDEDISK_MULTI_MODE + id->multsect = ((id->max_multsect/2) > 1) ? id->max_multsect : 0; + id->multsect_valid = id->multsect ? 1 : 0; + drive->mult_req = id->multsect_valid ? id->max_multsect : INITIAL_MULT_COUNT; + drive->special.b.set_multmode = drive->mult_req ? 1 : 0; +#else /* original, pre IDE-NFG, per request of AC */ + drive->mult_req = INITIAL_MULT_COUNT; + if (drive->mult_req > id->max_multsect) + drive->mult_req = id->max_multsect; + if (drive->mult_req || ((id->multsect_valid & 1) && id->multsect)) + drive->special.b.set_multmode = 1; +#endif + } +} + /** * drive_is_flashcard - check for compact flash * @drive: drive to check @@ -221,6 +269,8 @@ } printk (" drive\n"); drive->media = type; + /* an ATAPI device ignores DRDY */ + drive->ready_stat = 0; return; } @@ -588,8 +638,16 @@ if(!drive->present) return 0; /* The drive wasn't being helpful. Add generic info only */ - if(!drive->id_read) + if (drive->id_read == 0) { generic_id(drive); + return 1; + } + + if (drive->media == ide_disk) { + ide_disk_init_chs(drive); + ide_disk_init_mult_count(drive); + } + return drive->present; } @@ -1230,10 +1288,10 @@ drive->gendev.release = drive_release_dev; if (drive->present) { device_register(&drive->gendev); - sprintf(drive->devfs_name, "ide/host%d/bus%d/target%d/lun%d", + sprintf(drive->devfs_name, "ide/host%d/bus%d/target%d/lun0", (hwif->channel && hwif->mate) ? hwif->mate->index : hwif->index, - hwif->channel, unit, drive->lun); + hwif->channel, unit); } } blk_register_region(MKDEV(hwif->major, 0), MAX_DRIVES << PARTN_BITS, diff -Nru a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c --- a/drivers/ide/ide-proc.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-proc.c 2005-01-28 15:24:13 -08:00 @@ -182,6 +182,9 @@ ide_settings_t *setting; char *buf, *s; + printk(KERN_WARNING "Warning: /proc/ide/hd?/settings interface is " + "obsolete, and will be removed soon!\n"); + if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff -Nru a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c --- a/drivers/ide/ide-tape.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-tape.c 2005-01-28 15:24:13 -08:00 @@ -2428,6 +2428,11 @@ if (!drive->dsc_overlap && !(rq->cmd[0] & REQ_IDETAPE_PC2)) set_bit(IDETAPE_IGNORE_DSC, &tape->flags); + if (drive->post_reset == 1) { + set_bit(IDETAPE_IGNORE_DSC, &tape->flags); + drive->post_reset = 0; + } + if (tape->tape_still_time > 100 && tape->tape_still_time < 200) tape->measure_insert_time = 1; if (time_after(jiffies, tape->insert_time)) @@ -3558,16 +3563,6 @@ } /* - * idetape_pre_reset is called before an ATAPI/ATA software reset. - */ -static void idetape_pre_reset (ide_drive_t *drive) -{ - idetape_tape_t *tape = drive->driver_data; - if (tape != NULL) - set_bit(IDETAPE_IGNORE_DSC, &tape->flags); -} - -/* * idetape_space_over_filemarks is now a bit more complicated than just * passing the command to the tape since we may have crossed some * filemarks during our pipelined read-ahead mode. @@ -4530,8 +4525,6 @@ memset(tape, 0, sizeof (idetape_tape_t)); spin_lock_init(&tape->spinlock); drive->driver_data = tape; - /* An ATAPI device ignores DRDY */ - drive->ready_stat = 0; drive->dsc_overlap = 1; #ifdef CONFIG_BLK_DEV_IDEPCI if (HWIF(drive)->pci_dev != NULL) { @@ -4692,7 +4685,6 @@ .cleanup = idetape_cleanup, .do_request = idetape_do_request, .end_request = idetape_end_request, - .pre_reset = idetape_pre_reset, .proc = idetape_proc, .attach = idetape_attach, .drives = LIST_HEAD_INIT(idetape_driver.drives), diff -Nru a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c --- a/drivers/ide/ide-taskfile.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide-taskfile.c 2005-01-28 15:24:13 -08:00 @@ -181,8 +181,6 @@ return ide_stopped; } -EXPORT_SYMBOL(set_multmode_intr); - /* * set_geometry_intr() is invoked on completion of a WIN_SPECIFY cmd. */ @@ -207,8 +205,6 @@ return ide_started; } -EXPORT_SYMBOL(set_geometry_intr); - /* * recal_intr() is invoked on completion of a WIN_RESTORE (recalibrate) cmd. */ @@ -221,8 +217,6 @@ return ide_error(drive, "recal_intr", stat); return ide_stopped; } - -EXPORT_SYMBOL(recal_intr); /* * Handler for commands without a data phase diff -Nru a/drivers/ide/ide.c b/drivers/ide/ide.c --- a/drivers/ide/ide.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/ide.c 2005-01-28 15:24:13 -08:00 @@ -1296,7 +1296,6 @@ ide_add_setting(drive, "using_dma", SETTING_RW, HDIO_GET_DMA, HDIO_SET_DMA, TYPE_BYTE, 0, 1, 1, 1, &drive->using_dma, set_using_dma); ide_add_setting(drive, "init_speed", SETTING_RW, -1, -1, TYPE_BYTE, 0, 70, 1, 1, &drive->init_speed, NULL); ide_add_setting(drive, "current_speed", SETTING_RW, -1, -1, TYPE_BYTE, 0, 70, 1, 1, &drive->current_speed, set_xfer_rate); - ide_add_setting(drive, "number", SETTING_RW, -1, -1, TYPE_BYTE, 0, 3, 1, 1, &drive->dn, NULL); } /** @@ -1747,6 +1746,8 @@ case -4: /* "cdrom" */ drive->present = 1; drive->media = ide_cdrom; + /* an ATAPI device ignores DRDY */ + drive->ready_stat = 0; hwif->noprobe = 0; goto done; case -5: /* "serialize" */ @@ -1943,6 +1944,9 @@ obsolete_option: printk(" -- OBSOLETE OPTION, WILL BE REMOVED SOON!\n"); return 1; +obsolete_option: + printk(" -- OBSOLETE OPTION, WILL BE REMOVED SOON!\n"); + return 1; bad_hwif: printk("-- NOT SUPPORTED ON ide%d", hw); done: @@ -2035,36 +2039,16 @@ return __ide_error(drive, rq, stat, err); } -static void default_pre_reset (ide_drive_t *drive) -{ -} - static sector_t default_capacity (ide_drive_t *drive) { return 0x7fffffff; } -static ide_startstop_t default_special (ide_drive_t *drive) -{ - special_t *s = &drive->special; - - s->all = 0; - drive->mult_req = 0; - return ide_stopped; -} - static ide_startstop_t default_abort(ide_drive_t *drive, struct request *rq) { return __ide_abort(drive, rq); } -static ide_startstop_t default_start_power_step(ide_drive_t *drive, - struct request *rq) -{ - rq->pm->pm_step = ide_pm_state_completed; - return ide_stopped; -} - static void setup_driver_defaults (ide_driver_t *d) { BUG_ON(d->attach == NULL || d->cleanup == NULL); @@ -2073,11 +2057,7 @@ if (d->end_request == NULL) d->end_request = default_end_request; if (d->error == NULL) d->error = default_error; if (d->abort == NULL) d->abort = default_abort; - 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->start_power_step == NULL) - d->start_power_step = default_start_power_step; } int ide_register_subdriver(ide_drive_t *drive, ide_driver_t *driver) diff -Nru a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c --- a/drivers/ide/pci/atiixp.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/pci/atiixp.c 2005-01-28 15:24:13 -08:00 @@ -235,10 +235,8 @@ u8 speed = ide_dma_speed(drive, atiixp_ratemask(drive)); /* If no DMA speed was available then disable DMA and use PIO. */ - if (!speed) { - u8 tspeed = ide_get_best_pio_mode(drive, 255, 5, NULL); - speed = atiixp_dma_2_pio(XFER_PIO_0 + tspeed) + XFER_PIO_0; - } + if (!speed) + return 0; (void) atiixp_speedproc(drive, speed); return ide_dma_enable(drive); diff -Nru a/drivers/ide/pci/pdc202xx_new.h b/drivers/ide/pci/pdc202xx_new.h --- a/drivers/ide/pci/pdc202xx_new.h 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/pci/pdc202xx_new.h 2005-01-28 15:24:13 -08:00 @@ -73,9 +73,6 @@ .init_hwif = init_hwif_pdc202new, .channels = 2, .autodma = AUTODMA, -#ifndef CONFIG_PDC202XX_FORCE - .enablebits = {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, -#endif .bootable = OFF_BOARD, },{ /* 3 */ .name = "PDC20271", @@ -100,9 +97,6 @@ .init_hwif = init_hwif_pdc202new, .channels = 2, .autodma = AUTODMA, -#ifndef CONFIG_PDC202XX_FORCE - .enablebits = {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, -#endif .bootable = OFF_BOARD, },{ /* 6 */ .name = "PDC20277", diff -Nru a/drivers/ide/pci/pdc202xx_old.h b/drivers/ide/pci/pdc202xx_old.h --- a/drivers/ide/pci/pdc202xx_old.h 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/pci/pdc202xx_old.h 2005-01-28 15:24:13 -08:00 @@ -79,9 +79,6 @@ .init_dma = init_dma_pdc202xx, .channels = 2, .autodma = AUTODMA, -#ifndef CONFIG_PDC202XX_FORCE - .enablebits = {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, -#endif .bootable = OFF_BOARD, .extra = 16, },{ /* 1 */ @@ -92,12 +89,8 @@ .init_dma = init_dma_pdc202xx, .channels = 2, .autodma = AUTODMA, -#ifndef CONFIG_PDC202XX_FORCE - .enablebits = {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, -#endif .bootable = OFF_BOARD, .extra = 48, - .flags = IDEPCI_FLAG_FORCE_PDC, },{ /* 2 */ .name = "PDC20263", .init_setup = init_setup_pdc202ata4, @@ -106,9 +99,6 @@ .init_dma = init_dma_pdc202xx, .channels = 2, .autodma = AUTODMA, -#ifndef CONFIG_PDC202XX_FORCE - .enablebits = {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, -#endif .bootable = OFF_BOARD, .extra = 48, },{ /* 3 */ @@ -119,12 +109,8 @@ .init_dma = init_dma_pdc202xx, .channels = 2, .autodma = AUTODMA, -#ifndef CONFIG_PDC202XX_FORCE - .enablebits = {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, -#endif .bootable = OFF_BOARD, .extra = 48, - .flags = IDEPCI_FLAG_FORCE_PDC, },{ /* 4 */ .name = "PDC20267", .init_setup = init_setup_pdc202xx, @@ -133,9 +119,6 @@ .init_dma = init_dma_pdc202xx, .channels = 2, .autodma = AUTODMA, -#ifndef CONFIG_PDC202XX_FORCE - .enablebits = {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, -#endif .bootable = OFF_BOARD, .extra = 48, } diff -Nru a/drivers/ide/pci/triflex.c b/drivers/ide/pci/triflex.c --- a/drivers/ide/pci/triflex.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/pci/triflex.c 2005-01-28 15:24:13 -08:00 @@ -105,11 +105,9 @@ { int speed = ide_dma_speed(drive, 0); /* No ultra speeds */ - if (!speed) { - u8 pspeed = ide_get_best_pio_mode(drive, 255, 4, NULL); - speed = XFER_PIO_0 + pspeed; - } - + if (!speed) + return 0; + (void) triflex_tune_chipset(drive, speed); return ide_dma_enable(drive); } diff -Nru a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c --- a/drivers/ide/setup-pci.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/ide/setup-pci.c 2005-01-28 15:24:13 -08:00 @@ -579,7 +579,6 @@ int port; int at_least_one_hwif_enabled = 0; ide_hwif_t *hwif, *mate = NULL; - static int secondpdc = 0; u8 tmp; index->all = 0xf0f0; @@ -590,22 +589,10 @@ for (port = 0; port <= 1; ++port) { ide_pci_enablebit_t *e = &(d->enablebits[port]); - - /* - * If this is a Promise FakeRaid controller, - * the 2nd controller will be marked as - * disabled while it is actually there and enabled - * by the bios for raid purposes. - * Skip the normal "is it enabled" test for those. - */ - if ((d->flags & IDEPCI_FLAG_FORCE_PDC) && - (secondpdc++==1) && (port==1)) - goto controller_ok; - + if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) || (tmp & e->mask) != e->val)) continue; /* port not enabled */ -controller_ok: if (d->channels <= port) break; diff -Nru a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c --- a/drivers/scsi/ide-scsi.c 2005-01-28 15:24:13 -08:00 +++ b/drivers/scsi/ide-scsi.c 2005-01-28 15:24:13 -08:00 @@ -679,7 +679,6 @@ static void idescsi_setup (ide_drive_t *drive, idescsi_scsi_t *scsi) { DRIVER(drive)->busy++; - drive->ready_stat = 0; if (drive->id && (drive->id->config & 0x0060) == 0x20) set_bit (IDESCSI_DRQ_INTERRUPT, &scsi->flags); set_bit(IDESCSI_TRANSFORM, &scsi->transform); diff -Nru a/include/linux/hdreg.h b/include/linux/hdreg.h --- a/include/linux/hdreg.h 2005-01-28 15:24:13 -08:00 +++ b/include/linux/hdreg.h 2005-01-28 15:24:13 -08:00 @@ -394,7 +394,8 @@ #define HDIO_GET_IDENTITY 0x030d /* get IDE identification info */ #define HDIO_GET_WCACHE 0x030e /* get write cache mode on|off */ #define HDIO_GET_ACOUSTIC 0x030f /* get acoustic value */ -#define HDIO_GET_ADDRESS 0x0310 /* */ + +/* 0x310 is reserved - used to be HDIO_GET_ADDRESS */ #define HDIO_GET_BUSSTATE 0x031a /* get the bus state of the hwif */ #define HDIO_TRISTATE_HWIF 0x031b /* execute a channel tristate */ @@ -419,7 +420,8 @@ #define HDIO_SET_ACOUSTIC 0x032c /* change acoustic behavior */ #define HDIO_SET_BUSSTATE 0x032d /* set the bus state of the hwif */ #define HDIO_SET_QDMA 0x032e /* change use-qdma flag */ -#define HDIO_SET_ADDRESS 0x032f /* change lba addressing modes */ + +/* 0x32f is reserved - used to be HDIO_SET_ADDRESS */ /* bus states */ enum { diff -Nru a/include/linux/ide.h b/include/linux/ide.h --- a/include/linux/ide.h 2005-01-28 15:24:13 -08:00 +++ b/include/linux/ide.h 2005-01-28 15:24:13 -08:00 @@ -721,6 +721,7 @@ * 3=64-bit */ unsigned scsi : 1; /* 0=default, 1=ide-scsi emulation */ + unsigned post_reset : 1; u8 quirk_list; /* considered quirky, set for a specific host */ u8 init_speed; /* transfer rate set at boot */ @@ -754,7 +755,6 @@ u64 capacity64; /* total number of sectors */ - int lun; /* logical unit */ int crc_count; /* crc counter to reduce drive speed */ struct list_head list; struct device gendev; @@ -1099,15 +1099,11 @@ ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8); ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); int (*ioctl)(ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long); - void (*pre_reset)(ide_drive_t *); sector_t (*capacity)(ide_drive_t *); - ide_startstop_t (*special)(ide_drive_t *); ide_proc_entry_t *proc; int (*attach)(ide_drive_t *); void (*ata_prebuilder)(ide_drive_t *); void (*atapi_prebuilder)(ide_drive_t *); - ide_startstop_t (*start_power_step)(ide_drive_t *, struct request *); - void (*complete_power_step)(ide_drive_t *, struct request *, u8, u8); struct device_driver gen_driver; struct list_head drives; struct list_head drivers; @@ -1405,7 +1401,6 @@ enum { /* Uses ISA control ports not PCI ones. */ IDEPCI_FLAG_ISA_PORTS = (1 << 0), - IDEPCI_FLAG_FORCE_PDC = (1 << 1), }; typedef struct ide_pci_device_s {