IDE update
Subsystems (4)
PATCH 1/1 IDE update
[ I've sent it to Linus a moment ago, here is a copy for linux-{ide,kernel} ]
Highlights of this update:
* the code for selecting and programming the best DMA transfer mode has been reworked to be cleaner, more generic and more libata-like, (> 500 LOCs gone and this change allows the change described below)
* more cable detection fixes, also be more user-friendly [+ developer friendly when it comes to debugging problems :) ] and inform user about limiting DMA speed to UDMA/33 if the 40-wire cable was detected instead of 80-wire one
* make /proc/ide interface optional (but enabled by default) as all important functionality should be now available through sysfs (+ ioctls), while at it do some cleanup/fixes of IDE procfs code
Please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/
to receive the following updates:
drivers/ide/Kconfig | 14 ++ drivers/ide/Makefile | 2 +- drivers/ide/arm/bast-ide.c | 2 +- drivers/ide/arm/icside.c | 9 +- drivers/ide/arm/ide_arm.c | 2 +- drivers/ide/arm/rapide.c | 2 +- drivers/ide/cris/ide-cris.c | 4 +- drivers/ide/h8300/ide-h8300.c | 2 +- drivers/ide/ide-cd.c | 20 +- drivers/ide/ide-disk.c | 101 +++++++-- drivers/ide/ide-dma.c | 94 ++++++++ drivers/ide/ide-floppy.c | 30 ++-- drivers/ide/ide-generic.c | 2 - drivers/ide/ide-io.c | 17 +- drivers/ide/ide-iops.c | 55 +++--- drivers/ide/ide-lib.c | 132 ++--------- drivers/ide/ide-pnp.c | 2 +- drivers/ide/ide-probe.c | 3 + drivers/ide/ide-proc.c | 344 +++++++++++++++++++++++++++-- drivers/ide/ide-tape.c | 49 ++-- drivers/ide/ide.c | 470 ++++++++-------------------------------- drivers/ide/legacy/ali14xx.c | 3 +- drivers/ide/legacy/buddha.c | 2 +- drivers/ide/legacy/dtc2278.c | 3 +- drivers/ide/legacy/falconide.c | 2 +- drivers/ide/legacy/gayle.c | 2 +- drivers/ide/legacy/ht6560b.c | 3 +- drivers/ide/legacy/ide-cs.c | 2 +- drivers/ide/legacy/macide.c | 6 +- drivers/ide/legacy/q40ide.c | 2 +- drivers/ide/legacy/qd65xx.c | 7 +- drivers/ide/legacy/umc8672.c | 3 +- drivers/ide/mips/au1xxx-ide.c | 3 + drivers/ide/mips/swarm.c | 3 + drivers/ide/pci/aec62xx.c | 62 ++---- drivers/ide/pci/alim15x3.c | 97 +++------ drivers/ide/pci/amd74xx.c | 6 +- drivers/ide/pci/atiixp.c | 40 +---- drivers/ide/pci/cmd64x.c | 90 +++------ drivers/ide/pci/cs5520.c | 20 ++- drivers/ide/pci/cs5535.c | 33 +--- drivers/ide/pci/delkin_cb.c | 2 +- drivers/ide/pci/hpt34x.c | 27 +-- drivers/ide/pci/hpt366.c | 85 +++----- drivers/ide/pci/it8213.c | 39 +--- drivers/ide/pci/it821x.c | 20 +-- drivers/ide/pci/jmicron.c | 40 +---- drivers/ide/pci/pdc202xx_new.c | 40 +--- drivers/ide/pci/pdc202xx_old.c | 54 +---- drivers/ide/pci/piix.c | 163 +++----------- drivers/ide/pci/scc_pata.c | 21 +-- drivers/ide/pci/serverworks.c | 31 ++- drivers/ide/pci/sgiioc4.c | 2 +- drivers/ide/pci/siimage.c | 45 ++-- drivers/ide/pci/sis5513.c | 44 +--- drivers/ide/pci/slc90e66.c | 24 +-- drivers/ide/pci/tc86c001.c | 20 +-- drivers/ide/pci/triflex.c | 15 +- drivers/ide/ppc/pmac.c | 2 + drivers/ide/setup-pci.c | 27 ++- drivers/macintosh/mediabay.c | 2 +- drivers/scsi/ide-scsi.c | 30 ++- include/linux/ide.h | 93 +++++---- 63 files changed, 1107 insertions(+), 1464 deletions(-)
Bartlomiej Zolnierkiewicz (11):
ide: fix UDMA/MWDMA/SWDMA masks (v3)
ide: rework the code for selecting the best DMA transfer mode (v3)
ide: add ide_tune_dma() helper
ide: make /proc/ide/ optional
ide: split off ioctl handling from IDE settings (v2)
ide: move IDE settings handling to ide-proc.c
ide: cable detection fixes (take 2)
ide: add "initializing" argument to ide_register_hw()
ide: add ide_proc_register_port()
ide: legacy PCI bus order probing fixes
ide: fix PIO setup on resume for ATAPI devices
[ sorry but the patch is too big to be included ]
Quoted 14 lines · Bartlomiej Zolnierkiewicz
Bartlomiej Zolnierkiewicz (11):
ide: fix UDMA/MWDMA/SWDMA masks (v3)
ide: rework the code for selecting the best DMA transfer mode (v3)
ide: addide_tune_dma()helper
ide: make/proc/ide/optional
ide: split off ioctl handling from IDE settings (v2)
ide: move IDE settings handling toide-proc.c
ide: cable detection fixes (take 2)
ide: add "initializing" argument toide_register_hw()
ide: addide_proc_register_port()
ide: legacy PCI bus order probing fixes
ide: fix PIO setup on resume for ATAPI devices
Quoted 1 line
[ sorry but the patch is too big to be included ]
The limit was raised to 400K IIRC.
Jeff
Quoted 15 lines · Jeff Garzik
Quoted 14 lines · Bartlomiej Zolnierkiewicz
Bartlomiej Zolnierkiewicz (11):
ide: fix UDMA/MWDMA/SWDMA masks (v3)
ide: rework the code for selecting the best DMA transfer mode (v3)
ide: addide_tune_dma()helper
ide: make/proc/ide/optional
ide: split off ioctl handling from IDE settings (v2)
ide: move IDE settings handling toide-proc.c
ide: cable detection fixes (take 2)
ide: add "initializing" argument toide_register_hw()
ide: addide_proc_register_port()
ide: legacy PCI bus order probing fixes
ide: fix PIO setup on resume for ATAPI devices
Quoted 4 lines
Quoted 1 line
[ sorry but the patch is too big to be included ]
The limit was raised to 400K IIRC.
That's (good) news to me, here goes the actual 150K patch:
drivers/ide/Kconfig +14 -0
@@ -291,6 +291,17 @@ config IDE_TASK_IOCTL If you are unsure, say N here. +config IDE_PROC_FS + bool "legacy /proc/ide/ support" + depends on IDE && PROC_FS + default y + help + This option enables support for the various files in + /proc/ide. In Linux 2.6 this has been superseded by + files in sysfs but many legacy applications rely on this. + + If unsure say Y. + comment "IDE chipset support/bugfixes" config IDE_GENERIC
@@ -360,6 +371,9 @@ config IDEPCI_SHARE_IRQ It is safe to say Y to this question, in most cases. If unsure, say N. +config IDEPCI_PCIBUS_ORDER + def_bool PCI && BLK_DEV_IDE=y && BLK_DEV_IDEPCI + config BLK_DEV_OFFBOARD bool "Boot off-board chipsets first support" depends on PCI && BLK_DEV_IDEPCI
drivers/ide/Makefile +1 -1
@@ -20,7 +20,7 @@ ide-core-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.o # Core IDE code - must come before legacy ide-core-$(CONFIG_BLK_DEV_IDEPCI) += setup-pci.o ide-core-$(CONFIG_BLK_DEV_IDEDMA) += ide-dma.o -ide-core-$(CONFIG_PROC_FS) += ide-proc.o +ide-core-$(CONFIG_IDE_PROC_FS) += ide-proc.o ide-core-$(CONFIG_BLK_DEV_IDEPNP) += ide-pnp.o ide-core-$(CONFIG_BLK_DEV_IDEACPI) += ide-acpi.o
drivers/ide/arm/bast-ide.c +1 -1
@@ -45,7 +45,7 @@ bastide_register(unsigned int base, unsigned int aux, int irq, hw.io_ports[IDE_CONTROL_OFFSET ] = aux + (6 *0x20 ); hw.irq = irq; -ide_register_hw (&hw, hwif); +ide_register_hw (&hw,0 , hwif);return 0 ; }
drivers/ide/arm/icside.c +6 -3
@@ -342,7 +342,7 @@ static int icside_dma_check(ide_drive_t *drive)* Enable DMA on any drive that has multiword DMA */ if (id->field_valid &2 ) { - xfer_mode =ide_dma_speed (drive,0 ); + xfer_mode =ide_max_dma_mode (drive); goto out; }
@@ -591,7 +591,8 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec) state->hwif[0 ] = hwif;probe_hwif_init (hwif); -create_proc_ide_interfaces (); + +ide_proc_register_port (hwif);return 0 ; }
@@ -679,7 +680,9 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)probe_hwif_init (hwif);probe_hwif_init (mate); -create_proc_ide_interfaces (); + +ide_proc_register_port (hwif); +ide_proc_register_port (mate);return 0 ;
drivers/ide/arm/ide_arm.c +1 -1
@@ -38,6 +38,6 @@ void __init ide_arm_init(void)memset (&hw,0 ,sizeof (hw));ide_std_init_ports (&hw,IDE_ARM_IO ,IDE_ARM_IO +0x206 ); hw.irq =IDE_ARM_IRQ ; -ide_register_hw (&hw,NULL ); +ide_register_hw (&hw,1 ,NULL ); } }
drivers/ide/arm/rapide.c +1 -1
@@ -76,7 +76,7 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id) hwif->gendev.parent = &ec->dev; hwif->noprobe =0 ;probe_hwif_init (hwif); -create_proc_ide_interfaces (); +ide_proc_register_port (hwif);ecard_set_drvdata (ec, hwif); goto out; }
drivers/ide/cris/ide-cris.c +2 -2
@@ -796,7 +796,7 @@ init_e100_ide (void) ide_offsets,0 ,0 , cris_ide_ack_intr, ide_default_irq(0)); -ide_register_hw (&hw, &hwif); +ide_register_hw (&hw,1 , &hwif); hwif->mmio =1 ; hwif->chipset = ide_etrax100; hwif->tuneproc = &tune_cris_ide;
@@ -1004,7 +1004,7 @@ static int cris_ide_build_dmatable (ide_drive_t *drive)static int cris_config_drive_for_dma (ide_drive_t *drive) { -u8 speed =ide_dma_speed (drive,1 ); +u8 speed =ide_max_dma_mode (drive);if (!speed)return 0 ;
drivers/ide/h8300/ide-h8300.c +1 -1
@@ -101,7 +101,7 @@ void __init h8300_ide_init(void)hw_setup (&hw);/* register if */ - idx =ide_register_hw (&hw, &hwif); + idx =ide_register_hw (&hw,1 , &hwif);if (idx ==-1 ) {printk (KERN_ERR "ide-h8300: IDE I/F register failed\n" );return ;
drivers/ide/ide-cd.c +12 -8
@@ -3059,10 +3059,14 @@ int ide_cdrom_probe_capabilities (ide_drive_t *drive)return nslots; } +#ifdef CONFIG_IDE_PROC_FS static void ide_cdrom_add_settings (ide_drive_t *drive) { -ide_add_setting (drive,"dsc_overlap" ,SETTING_RW ,-1 ,-1 ,TYPE_BYTE ,0 ,1 ,1 ,1 , &drive->dsc_overlap,NULL ); +ide_add_setting (drive,"dsc_overlap" ,SETTING_RW ,TYPE_BYTE ,0 ,1 ,1 ,1 , &drive->dsc_overlap,NULL ); } +#else +static inline void ide_cdrom_add_settings (ide_drive_t *drive) { ; } +#endif /* * standard prep_rq_fn that builds 10 byte cmds
@@ -3274,7 +3278,7 @@ int ide_cdrom_setup (ide_drive_t *drive)return 0 ; } -#ifdef CONFIG_PROC_FS +#ifdef CONFIG_IDE_PROC_FS static sector_t ide_cdrom_capacity (ide_drive_t *drive) {
@@ -3291,7 +3295,7 @@ static void ide_cd_remove(ide_drive_t *drive) {struct cdrom_info *info = drive->driver_data; -ide_unregister_subdriver (drive, info->driver); +ide_proc_unregister_driver (drive, info->driver);del_gendisk (info->disk);
@@ -3321,7 +3325,7 @@ static void ide_cd_release(struct kref *kref)static int ide_cd_probe (ide_drive_t *); -#ifdef CONFIG_PROC_FS +#ifdef CONFIG_IDE_PROC_FS static int proc_idecd_read_capacity (char *page,char **start,off_t off,int count,int *eof,void *data) {
@@ -3336,8 +3340,6 @@ static ide_proc_entry_t idecd_proc[] = { { "capacity", S_IFREG|S_IRUGO, proc_idecd_read_capacity, NULL }, { NULL, 0, NULL, NULL } }; -#else -# define idecd_proc NULL #endif static ide_driver_t ide_cdrom_driver = {
@@ -3355,7 +3357,9 @@ static ide_driver_t ide_cdrom_driver = { .end_request = ide_end_request, .error = __ide_error, .abort = __ide_abort, +#ifdef CONFIG_IDE_PROC_FS .proc = idecd_proc, +#endif };static int idecd_open (struct inode * inode,struct file * file)
@@ -3517,7 +3521,7 @@ static int ide_cd_probe(ide_drive_t *drive)ide_init_disk (g, drive); -ide_register_subdriver (drive, &ide_cdrom_driver); +ide_proc_register_driver (drive, &ide_cdrom_driver);kref_init (&info->kref);
@@ -3534,7 +3538,7 @@ static int ide_cd_probe(ide_drive_t *drive) g->flags =GENHD_FL_CD |GENHD_FL_REMOVABLE ;if (ide_cdrom_setup (drive)) {struct cdrom_device_info *devinfo = &info->devinfo; -ide_unregister_subdriver (drive, &ide_cdrom_driver); +ide_proc_unregister_driver (drive, &ide_cdrom_driver);kfree (info->buffer);kfree (info->toc);kfree (info->changer_info);
drivers/ide/ide-disk.c +78 -23
181 lines not on this page · raw message
drivers/ide/ide-dma.c +94 -0
100 lines not on this page · raw message
drivers/ide/ide-floppy.c +15 -15
@@ -1811,18 +1811,22 @@ static int idefloppy_identify_device (ide_drive_t *drive,struct hd_driveid *id)return 0 ; } +#ifdef CONFIG_IDE_PROC_FS static void idefloppy_add_settings (ide_drive_t *drive) {idefloppy_floppy_t *floppy = drive->driver_data;/* -* drive setting name read/write ioctl ioctl data type min max mul_factor div_factor data pointer set function +* drive setting name read/write data type min max mul_factor div_factor data pointer set function */ -ide_add_setting (drive,"bios_cyl" ,SETTING_RW ,-1 ,-1 ,TYPE_INT ,0 ,1023 ,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,"ticks" ,SETTING_RW ,-1 ,-1 ,TYPE_BYTE ,0 ,255 ,1 ,1 , &floppy->ticks,NULL ); +ide_add_setting (drive,"bios_cyl" ,SETTING_RW ,TYPE_INT ,0 ,1023 ,1 ,1 , &drive->bios_cyl,NULL ); +ide_add_setting (drive,"bios_head" ,SETTING_RW ,TYPE_BYTE ,0 ,255 ,1 ,1 , &drive->bios_head,NULL ); +ide_add_setting (drive,"bios_sect" ,SETTING_RW ,TYPE_BYTE ,0 ,63 ,1 ,1 , &drive->bios_sect,NULL ); +ide_add_setting (drive,"ticks" ,SETTING_RW ,TYPE_BYTE ,0 ,255 ,1 ,1 , &floppy->ticks,NULL ); } +#else +static inline void idefloppy_add_settings (ide_drive_t *drive) { ; } +#endif /* * Driver initialization.
@@ -1873,7 +1877,7 @@ static void ide_floppy_remove(ide_drive_t *drive)idefloppy_floppy_t *floppy = drive->driver_data;struct gendisk *g = floppy->disk; -ide_unregister_subdriver (drive, floppy->driver); +ide_proc_unregister_driver (drive, floppy->driver);del_gendisk (g);
@@ -1892,8 +1896,7 @@ static void ide_floppy_release(struct kref *kref)kfree (floppy); } -#ifdef CONFIG_PROC_FS - +#ifdef CONFIG_IDE_PROC_FS static int proc_idefloppy_read_capacity (char *page,char **start,off_t off,int count,int *eof,void *data) {
@@ -1909,12 +1912,7 @@ static ide_proc_entry_t idefloppy_proc[] = { { "geometry", S_IFREG|S_IRUGO, proc_ide_read_geometry, NULL }, { NULL, 0, NULL, NULL } }; - -#else - -#define idefloppy_proc NULL - -#endif /* CONFIG_PROC_FS */ +#endif /* CONFIG_IDE_PROC_FS */ static int ide_floppy_probe(ide_drive_t *);
@@ -1933,7 +1931,9 @@ static ide_driver_t idefloppy_driver = { .end_request = idefloppy_do_end_request, .error = __ide_error, .abort = __ide_abort, +#ifdef CONFIG_IDE_PROC_FS .proc = idefloppy_proc, +#endif };static int idefloppy_open (struct inode *inode,struct file *filp)
@@ -2159,7 +2159,7 @@ static int ide_floppy_probe(ide_drive_t *drive)ide_init_disk (g, drive); -ide_register_subdriver (drive, &idefloppy_driver); +ide_proc_register_driver (drive, &idefloppy_driver);kref_init (&floppy->kref);
drivers/ide/ide-generic.c +0 -2
@@ -22,8 +22,6 @@ static int __init ide_generic_init(void)if (ide_hwifs[0 ].io_ports[IDE_DATA_OFFSET ])ide_release_lock ();/* for atari only */ -create_proc_ide_interfaces (); -return 0 ; }
drivers/ide/ide-io.c +7 -10
@@ -172,15 +172,6 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *memset (args,0 ,sizeof (*args)); -if (drive->media != ide_disk) { -/* -* skip idedisk_pm_restore_pio and idedisk_pm_idle for ATAPI -* devices -*/ -if (pm->pm_step == idedisk_pm_restore_pio) - pm->pm_step = ide_pm_restore_dma; - } -switch (pm->pm_step) {case ide_pm_flush_cache:/* Suspend step 1 (flush cache) */ if (drive->media != ide_disk)
@@ -207,7 +198,13 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *case idedisk_pm_restore_pio:/* Resume step 1 (restore PIO) */ if (drive->hwif->tuneproc !=NULL ) drive->hwif->tuneproc (drive,255 ); -ide_complete_power_step (drive, rq,0 ,0 ); +/* +* skip idedisk_pm_idle for ATAPI devices +*/ +if (drive->media != ide_disk) + pm->pm_step = ide_pm_restore_dma; +else +ide_complete_power_step (drive, rq,0 ,0 );return ide_stopped;case idedisk_pm_idle:/* Resume step 2 (idle) */
drivers/ide/ide-iops.c +29 -26
80 lines not on this page · raw message
drivers/ide/ide-lib.c +25 -107
148 lines not on this page · raw message
drivers/ide/ide-pnp.c +1 -1
@@ -42,7 +42,7 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id hw.irq =pnp_irq (dev,0 ); hw.dma =NO_DMA ; - index =ide_register_hw (&hw, &hwif); + index =ide_register_hw (&hw,1 , &hwif);if (index !=-1 ) {printk (KERN_INFO "ide%d: generic PnP IDE interface\n" , index);
drivers/ide/ide-probe.c +3 -0
@@ -1427,6 +1427,9 @@ int ideprobe_init (void) } } } +for (index =0 ; index <MAX_HWIFS ; ++index) +if (probe[index]) +ide_proc_register_port (&ide_hwifs[index]);return 0 ; }
drivers/ide/ide-proc.c +325 -19
407 lines not on this page · raw message
drivers/ide/ide-tape.c +25 -24
93 lines not on this page · raw message
drivers/ide/ide.c +90 -380
654 lines not on this page · raw message
drivers/ide/legacy/ali14xx.c +2 -1
@@ -223,7 +223,8 @@ static int __init ali14xx_probe(void)probe_hwif_init (hwif);probe_hwif_init (mate); -create_proc_ide_interfaces (); +ide_proc_register_port (hwif); +ide_proc_register_port (mate);return 0 ; }
drivers/ide/legacy/buddha.c +1 -1
@@ -213,7 +213,7 @@ fail_base2: IRQ_AMIGA_PORTS); } - index =ide_register_hw (&hw, &hwif); + index =ide_register_hw (&hw,1 , &hwif);if (index !=-1 ) { hwif->mmio =1 ;printk ("ide%d: " , index);
drivers/ide/legacy/dtc2278.c +2 -1
@@ -138,7 +138,8 @@ static int __init dtc2278_probe(void)probe_hwif_init (hwif);probe_hwif_init (mate); -create_proc_ide_interfaces (); +ide_proc_register_port (hwif); +ide_proc_register_port (mate);return 0 ; }
drivers/ide/legacy/falconide.c +1 -1
@@ -70,7 +70,7 @@ void __init falconide_init(void)0 ,0 ,NULL ,// falconide_iops, IRQ_MFP_IDE); - index =ide_register_hw (&hw,NULL ); + index =ide_register_hw (&hw,1 ,NULL );if (index !=-1 )printk ("ide%d: Falcon IDE interface\n" , index);
drivers/ide/legacy/gayle.c +1 -1
@@ -165,7 +165,7 @@ found:// &gayle_iops, IRQ_AMIGA_PORTS); - index =ide_register_hw (&hw, &hwif); + index =ide_register_hw (&hw,1 , &hwif);if (index !=-1 ) { hwif->mmio =1 ;switch (i) {
drivers/ide/legacy/ht6560b.c +2 -1
@@ -357,7 +357,8 @@ int __init ht6560b_init(void)probe_hwif_init (hwif);probe_hwif_init (mate); -create_proc_ide_interfaces (); +ide_proc_register_port (hwif); +ide_proc_register_port (mate);return 0 ;
drivers/ide/legacy/ide-cs.c +1 -1
@@ -153,7 +153,7 @@ static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq hw.irq = irq; hw.chipset = ide_pci; hw.dev = &handle->dev; -return ide_register_hw_with_fixup (&hw,NULL , ide_undecoded_slave); +return ide_register_hw_with_fixup (&hw,0 ,NULL , ide_undecoded_slave); }/*======================================================================
drivers/ide/legacy/macide.c +3 -3
@@ -102,21 +102,21 @@ void macide_init(void)0 ,0 , macide_ack_intr,// quadra_ide_iops, IRQ_NUBUS_F); - index =ide_register_hw (&hw, &hwif); + index =ide_register_hw (&hw,1 , &hwif);break ;case MAC_IDE_PB :ide_setup_ports (&hw,IDE_BASE , macide_offsets,0 ,0 , macide_ack_intr,// macide_pb_iops, IRQ_NUBUS_C ); - index =ide_register_hw (&hw, &hwif); + index =ide_register_hw (&hw,1 , &hwif);break ;case MAC_IDE_BABOON :ide_setup_ports (&hw,BABOON_BASE , macide_offsets,0 ,0 ,NULL ,// macide_baboon_iops, IRQ_BABOON_1 ); - index =ide_register_hw (&hw, &hwif); + index =ide_register_hw (&hw,1 , &hwif);if (index ==-1 )break ;if (macintosh_config->ident ==MAC_MODEL_PB190 ) {
drivers/ide/legacy/q40ide.c +1 -1
@@ -142,7 +142,7 @@ void q40ide_init(void)0 ,NULL ,// m68kide_iops, q40ide_default_irq(pcide_bases[i])); - index =ide_register_hw (&hw, &hwif); + index =ide_register_hw (&hw,1 , &hwif);// **FIXME** if (index !=-1 ) hwif->mmio =1 ;
drivers/ide/legacy/qd65xx.c +4 -3
@@ -427,7 +427,7 @@ static int __init qd_probe(int base)qd_setup (hwif, base, config,QD6500_DEF_DATA ,QD6500_DEF_DATA , &qd6500_tune_drive); -create_proc_ide_interfaces (); +ide_proc_register_port (hwif);return 1 ; }
@@ -459,7 +459,7 @@ static int __init qd_probe(int base) &qd6580_tune_drive);qd_write_reg (QD_DEF_CONTR ,QD_CONTROL_PORT ); -create_proc_ide_interfaces (); +ide_proc_register_port (hwif);return 1 ; }else {
@@ -479,7 +479,8 @@ static int __init qd_probe(int base) &qd6580_tune_drive);qd_write_reg (QD_DEF_CONTR ,QD_CONTROL_PORT ); -create_proc_ide_interfaces (); +ide_proc_register_port (hwif); +ide_proc_register_port (mate);return 0 ;/* no other qd65xx possible */ }
drivers/ide/legacy/umc8672.c +2 -1
@@ -160,7 +160,8 @@ static int __init umc8672_probe(void)probe_hwif_init (hwif);probe_hwif_init (mate); -create_proc_ide_interfaces (); +ide_proc_register_port (hwif); +ide_proc_register_port (mate);return 0 ; }
drivers/ide/mips/au1xxx-ide.c +3 -0
@@ -760,6 +760,9 @@ static int au_ide_probe(struct device *dev)#endif probe_hwif_init (hwif); + +ide_proc_register_port (hwif); +dev_set_drvdata (dev, hwif);printk (KERN_INFO "Au1xxx IDE(builtin) configured for %s\n" , mode );
drivers/ide/mips/swarm.c +3 -0
@@ -129,6 +129,9 @@ static int __devinit swarm_ide_probe(struct device *dev) hwif->irq = hwif->hw.irq;probe_hwif_init (hwif); + +ide_proc_register_port (hwif); +dev_set_drvdata (dev, hwif);return 0 ;
drivers/ide/pci/aec62xx.c +20 -42
137 lines not on this page · raw message
drivers/ide/pci/alim15x3.c +32 -65
161 lines not on this page · raw message
drivers/ide/pci/amd74xx.c +3 -3
@@ -92,7 +92,7 @@ static unsigned char amd_cyc2udma[] = { 6, 6, 5, 4, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3* AMD /proc entry. */ -#ifdef CONFIG_PROC_FS +#ifdef CONFIG_IDE_PROC_FS #include <linux/stat.h> #include <linux/proc_fs.h>
@@ -402,14 +402,14 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch* Register /proc/ide/amd74xx entry */ -#if defined(DISPLAY_AMD_TIMINGS ) && defined(CONFIG_PROC_FS ) +#if defined(DISPLAY_AMD_TIMINGS ) && defined(CONFIG_IDE_PROC_FS )if (!amd74xx_proc) { amd_base =pci_resource_start (dev,4 ); bmide_dev = dev;ide_pci_create_host_proc ("amd74xx" , amd74xx_get_info); amd74xx_proc =1 ; } -#endif /* DISPLAY_AMD_TIMINGS && CONFIG_PROC_FS */ +#endif /* DISPLAY_AMD_TIMINGS && CONFIG_IDE_PROC_FS */ return dev->irq; }
drivers/ide/pci/atiixp.c +2 -38
@@ -49,22 +49,6 @@ static int save_mdma_mode[4];static DEFINE_SPINLOCK (atiixp_lock);/** -* atiixp_ratemask - compute rate mask for ATIIXP IDE -* @drive: IDE drive to compute for -* -* Returns the available modes for the ATIIXP IDE controller. -*/ - -static u8 atiixp_ratemask (ide_drive_t *drive) -{ -u8 mode =3 ; - -if (!eighty_ninty_three (drive)) - mode =min (mode, (u8 )1 ); -return mode; -} - -/** * atiixp_dma_2_pio - return the PIO mode matching DMA * @xfer_rate: transfer speed *
@@ -189,7 +173,7 @@ static int atiixp_speedproc(ide_drive_t *drive, u8 xferspeed)u16 tmp16;u8 speed, pio; - speed =ide_rate_filter (atiixp_ratemask (drive), xferspeed); + speed =ide_rate_filter (drive, xferspeed);spin_lock_irqsave (&atiixp_lock, flags);
@@ -223,26 +207,6 @@ static int atiixp_speedproc(ide_drive_t *drive, u8 xferspeed) }/** -* atiixp_config_drive_for_dma - configure drive for DMA -* @drive: IDE drive to configure -* -* Set up a ATIIXP interface channel for the best available speed. -* We prefer UDMA if it is available and then MWDMA. If DMA is -* not available we switch to PIO and return 0. -*/ - -static int atiixp_config_drive_for_dma (ide_drive_t *drive) -{ -u8 speed =ide_dma_speed (drive,atiixp_ratemask (drive)); - -if (!speed) -return 0 ; - - (void )atiixp_speedproc (drive, speed); -return ide_dma_enable (drive); -} - -/** * atiixp_dma_check - set up an IDE device * @drive: IDE drive to configure *
@@ -256,7 +220,7 @@ static int atiixp_dma_check(ide_drive_t *drive) drive->init_speed =0 ; -if (ide_use_dma (drive) &&atiixp_config_drive_for_dma (drive)) +if (ide_tune_dma (drive))return 0 ;if (ide_use_fast_pio (drive)) {
drivers/ide/pci/cmd64x.c +27 -63
163 lines not on this page · raw message
drivers/ide/pci/cs5520.c +16 -4
@@ -213,6 +213,7 @@ static ide_pci_device_t cyrix_chipsets[] __devinitdata = {static int __devinit cs5520_init_one (struct pci_dev *dev,const struct pci_device_id *id) { +ide_hwif_t *hwif =NULL , *mate =NULL ;ata_index_t index;ide_pci_device_t *d = &cyrix_chipsets[id->driver_data];
@@ -239,10 +240,21 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devicide_pci_setup_ports (dev, d,14 , &index); -if ((index.b.low &0xf0 ) !=0xf0 ) -probe_hwif_init (&ide_hwifs[index.b.low]); -if ((index.b.high &0xf0 ) !=0xf0 ) -probe_hwif_init (&ide_hwifs[index.b.high]); +if ((index.b.low &0xf0 ) !=0xf0 ) + hwif = &ide_hwifs[index.b.low]; +if ((index.b.high &0xf0 ) !=0xf0 ) + mate = &ide_hwifs[index.b.high]; + +if (hwif) +probe_hwif_init (hwif); +if (mate) +probe_hwif_init (mate); + +if (hwif) +ide_proc_register_port (hwif); +if (mate) +ide_proc_register_port (mate); +return 0 ; }
drivers/ide/pci/cs5535.c +2 -31
@@ -127,20 +127,6 @@ static void cs5535_set_speed(ide_drive_t *drive, u8 speed) } } -static u8 cs5535_ratemask (ide_drive_t *drive) -{ -/* eighty93 will return 1 if it's 80core and capable of -exceeding udma2, 0 otherwise. we need ratemask to set -the max speed and if we can > udma2 then we return 2 -which selects speed_max as udma4 which is the 5535's max -speed, and 1 selects udma2 which is the max for 40c */ -if (!eighty_ninty_three (drive)) -return 1 ; - -return 2 ; -} - -/**** * cs5535_set_drive - Configure the drive to the new speed * @drive: Drive to set up
@@ -151,7 +137,7 @@ static u8 cs5535_ratemask(ide_drive_t *drive)*/ static int cs5535_set_drive (ide_drive_t *drive,u8 speed) { - speed =ide_rate_filter (cs5535_ratemask (drive), speed); + speed =ide_rate_filter (drive, speed);ide_config_drive_speed (drive, speed);cs5535_set_speed (drive, speed);
@@ -178,28 +164,13 @@ static void cs5535_tuneproc(ide_drive_t *drive, u8 xferspeed)cs5535_set_speed (drive, xferspeed); } -static int cs5535_config_drive_for_dma (ide_drive_t *drive) -{ -u8 speed; - - speed =ide_dma_speed (drive,cs5535_ratemask (drive)); - -/* If no DMA speed was available then let dma_check hit pio */ -if (!speed) { -return 0 ; - } - -cs5535_set_drive (drive, speed); -return ide_dma_enable (drive); -} -static int cs5535_dma_check (ide_drive_t *drive) {u8 speed; drive->init_speed =0 ; -if (ide_use_dma (drive) &&cs5535_config_drive_for_dma (drive)) +if (ide_tune_dma (drive))return 0 ;if (ide_use_fast_pio (drive)) {
drivers/ide/pci/delkin_cb.c +1 -1
@@ -80,7 +80,7 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id) hw.irq = dev->irq; hw.chipset = ide_pci;/* this enables IRQ sharing */ - rc =ide_register_hw_with_fixup (&hw, &hwif, ide_undecoded_slave); + rc =ide_register_hw_with_fixup (&hw,0 , &hwif, ide_undecoded_slave);if (rc <0 ) {printk (KERN_ERR "delkin_cb: ide_register_hw failed (%d)\n" , rc);pci_disable_device (dev);
drivers/ide/pci/hpt34x.c +2 -25
@@ -43,15 +43,10 @@#define HPT343_DEBUG_DRIVE_INFO 0 -static u8 hpt34x_ratemask (ide_drive_t *drive) -{ -return 1 ; -} -static int hpt34x_tune_chipset (ide_drive_t *drive,u8 xferspeed) {struct pci_dev *dev =HWIF (drive)->pci_dev; -u8 speed =ide_rate_filter (hpt34x_ratemask (drive), xferspeed); +u8 speed =ide_rate_filter (drive, xferspeed);u32 reg1=0 , tmp1 =0 , reg2 =0 , tmp2 =0 ;u8 hi_speed, lo_speed;
@@ -89,29 +84,11 @@ static void hpt34x_tune_drive (ide_drive_t *drive, u8 pio) (void )hpt34x_tune_chipset (drive, (XFER_PIO_0 + pio)); } -/* -* This allows the configuration of ide_pci chipset registers -* for cards that learn about the drive's UDMA, DMA, PIO capabilities -* after the drive is reported by the OS. Initially for designed for -* HPT343 UDMA chipset by HighPoint|Triones Technologies, Inc. -*/ - -static int config_chipset_for_dma (ide_drive_t *drive) -{ -u8 speed =ide_dma_speed (drive,hpt34x_ratemask (drive)); - -if (!(speed)) -return 0 ; - - (void )hpt34x_tune_chipset (drive, speed); -return ide_dma_enable (drive); -} -static int hpt34x_config_drive_xfer_rate (ide_drive_t *drive) { drive->init_speed =0 ; - if (ide_use_dma(drive) && config_chipset_for_dma(drive)) + if (ide_tune_dma(drive))#ifndef CONFIG_HPT34X_AUTODMA return -1 ;#else
drivers/ide/pci/hpt366.c +35 -50
162 lines not on this page · raw message
drivers/ide/pci/it8213.c +2 -37
@@ -17,22 +17,6 @@#include <asm/io.h> -/* -* it8213_ratemask - Compute available modes -* @drive: IDE drive -* -* Compute the available speeds for the devices on the interface. This -* is all modes to ATA133 clipped by drive cable setup. -*/ - -static u8 it8213_ratemask (ide_drive_t *drive) -{ -u8 mode =4 ; -if (!eighty_ninty_three (drive)) - mode =min_t (u8, mode,1 ); -return mode; -} -/** * it8213_dma_2_pio - return the PIO mode matching DMA * @xfer_rate: transfer speed
@@ -145,7 +129,7 @@ static int it8213_tune_chipset (ide_drive_t *drive, u8 xferspeed)ide_hwif_t *hwif =HWIF (drive);struct pci_dev *dev = hwif->pci_dev;u8 maslave =0x40 ; -u8 speed =ide_rate_filter (it8213_ratemask (drive), xferspeed); +u8 speed =ide_rate_filter (drive, xferspeed);int a_speed =3 << (drive->dn *4 );int u_flag =1 << drive->dn;int v_flag =0x01 << drive->dn;
@@ -213,25 +197,6 @@ static int it8213_tune_chipset (ide_drive_t *drive, u8 xferspeed)return ide_config_drive_speed (drive, speed); }
Lines of this file are not shown. View the raw message.
drivers/ide/pci/pdc202xx_old.c +9 -45
54 lines not on this page · raw message
drivers/ide/pci/piix.c +33 -130
163 lines not on this page · raw message
drivers/ide/pci/siimage.c +21 -24
45 lines not on this page · raw message
drivers/ide/pci/sis5513.c +9 -35
44 lines not on this page · raw message
include/linux/ide.h +50 -43
93 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.
Quoted 4 lines · Bartlomiej Zolnierkiewicz
Quoted 1 line · Jeff Garzik
The limit was raised to 400K IIRC.
That's (good) news to me, here goes the actual 150K patch:
Thanks. I did in fact receive copies from vger, so it went through.
Jeff
From: Jeff Garzik <[email protected]>
Date: Wed, 09 May 2007 18:46:16 -0400
Quoted 15 lines
Quoted 14 lines · Bartlomiej Zolnierkiewicz
Bartlomiej Zolnierkiewicz (11):
ide: fix UDMA/MWDMA/SWDMA masks (v3)
ide: rework the code for selecting the best DMA transfer mode (v3)
ide: addide_tune_dma()helper
ide: make/proc/ide/optional
ide: split off ioctl handling from IDE settings (v2)
ide: move IDE settings handling toide-proc.c
ide: cable detection fixes (take 2)
ide: add "initializing" argument toide_register_hw()
ide: addide_proc_register_port()
ide: legacy PCI bus order probing fixes
ide: fix PIO setup on resume for ATAPI devices
Quoted 4 lines
Quoted 1 line
[ sorry but the patch is too big to be included ]
The limit was raised to 400K IIRC.
On lkml but not linux-ide, I'll go and bump it up there too.
There, done...
Quoted 6 lines · Bartlomiej Zolnierkiewicz
* the code for selecting and programming the best DMA transfer mode has been reworked to be cleaner, more generic and more libata-like, (> 500 LOCs gone and this change allows the change described below)
Bartlomiej Zolnierkiewicz (11):
ide: rework the code for selecting the best DMA transfer mode (v3)
Has this seen testing/exposure in -mm tree?
Jeff
Quoted 11 lines · On Wed, 09 May 2007 18:47:23 -0400 Jeff Garzik <[email protected]> wrote:
Quoted 6 lines · Bartlomiej Zolnierkiewicz
* the code for selecting and programming the best DMA transfer mode has been reworked to be cleaner, more generic and more libata-like, (> 500 LOCs gone and this change allows the change described below)
Bartlomiej Zolnierkiewicz (11):
ide: rework the code for selecting the best DMA transfer mode (v3)Has this seen testing/exposure in -mm tree?
argh. If this was in a file called ide-rework-the-code-for-selecting-the-best-DMA-transfer-mode.patch then it would be so easy.
<logs into hera>
<greps>
ah, it's hidden in ide-max-dma-mode-v3.patch.
akpm:/usr/src/25> grep ide-max-dma-mode-v3 pc/*series pc/2.6.21-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-mm2-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc2-mm2-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc3-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc3-mm2-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc4-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc5-mm3-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc5-mm4-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc6-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc7-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc7-mm2-series:ide-ide-max-dma-mode-v3.patch
No probs.
Quoted 27 lines · Andrew Morton
Quoted 2 lines · Jeff Garzik
Has this seen testing/exposure in -mm tree?
argh. If this was in a file called ide-rework-the-code-for-selecting-the-best-DMA-transfer-mode.patch then it would be so easy.
<logs into hera>
<greps>
ah, it's hidden in ide-max-dma-mode-v3.patch.
akpm:/usr/src/25> grep ide-max-dma-mode-v3 pc/*series pc/2.6.21-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-mm2-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc2-mm2-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc3-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc3-mm2-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc4-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc5-mm3-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc5-mm4-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc6-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc7-mm1-series:ide-ide-max-dma-mode-v3.patch pc/2.6.21-rc7-mm2-series:ide-ide-max-dma-mode-v3.patch
Quoted 1 line
No probs.
Cool beans. I'm happy then.
Jeff