hwif->chipset should be set if the hwif is claimed by host driver.
Cc: Maciej W. Rozycki <macro@linux-mips.org>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
After hwif_register_devices() IDE devices are ready to be used so
the way in which ide_device_add() works currently is racy for hosts
with serialized / IRQ sharing interfaces.
Fix ide_device_add() by looping over interfaces for probe_hwif(),
hwif_init() and hwif_register_devices() operations.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
There should be no functionality changes caused by this patch.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Host drivers using ide_register_hw() and 'initializing == 1':
* ide-pnp
- depends on ISA
* ide_arm
- ARM arch specific
- initialized before all other host drivers
* ide-cris
- CRIS arch specific => IDE_ARCH_OBSOLETE_INIT is not defined
- broken
* ide-h8300
- H8300 arch specific => IDE_ARCH_OBSOLETE_INIT is not defined, no PCI
* buddha/q40/gayle/macide/falconide
- M68K arch specific => IDE_ARCH_OBSOLETE_INIT is not defined, no PCI
Since the only host drivers which probe interfaces before the above ones are:
* ali14xx/dtc2278/ht6560b/qd65xx/umc8672
- depend on ISA
- require IDE_ARCH_OBSOLETE_INIT=y to work
* PCI ones
- depend on PCI
don't try to unregister interfaces if 'initializing == 1' in ide_register_hw()
(it is possible that built-in host drivers will claim all IDE interfaces but
later ide-pnp host driver will try to unregister them - this change fixes it).
Also skip hwif->hold check if 'initializing == 1' since it is set only by:
* pmac
- PPC && PMAC specific => no ISA
* au1xxx-ide
- MIPS && SOC_AU1200 specific => no ISA
and use ide_find_port() helper to find free ide_hwifs[] slot.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* Assign drive->quirk_list in ->quirkproc implementations:
- hpt366.c::hpt3xx_quirkproc()
- pdc202xx_new.c::pdcnew_quirkproc()
- pdc202xx_old.c::pdc202xx_quirkproc()
* Make ->quirkproc void.
* Move calling ->quirkproc from do_identify() to probe_hwif().
* Convert it821x_fixups() to it821x_quirkproc() in it821x.c.
* Convert siimage_fixup() to sil_quirkproc() in siimage.c, also remove
no longer needed drive->present check from is_dev_seagate_sata().
* Convert ide_undecoded_slave() to accept 'drive' instead of 'hwif'
as an argument. Then convert ide_register_hw() to accept 'quirkproc'
argument instead of 'fixup' one.
* Remove no longer needed ->fixup method.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Merge ->dma_host_{on,off} methods into ->dma_host_set method
which takes 'int on' argument.
There should be no functionality changes caused by this patch.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* Rename cris_dma_{on,off}() to cris_dma_host_{on,off}().
* Remove no longer needed ->dma_off_quietly
(IDE core has the needed code now).
* Make cris_dma_host_on() void.
I left fixing ide-cris after "kill dma_on/dma_off_quietly() methods"
patch because:
* Currently this driver is broken: cris_dma_on() (returns 'int')
is assigned to hwif->dma_host_on (returns 'void') so the driver
won't build.
* ->ide_dma_on method was missing so the driver OOPS-es on attempt
to enable DMA.
* drive->using_dma was never set/cleared so DMA wouldn't be used anyway.
Unfortunately it seems that ide-cris stays broken even after this patch:
* V10: <asm/arch-v10/ide.h> needs fixing
- ide_init_default_hwifs() should be removed
(IDE core no longer uses it)
- same for ide_init_hwif_ports() and ide_default_{irq,io_base}()
(they shouldn't be needed for ide-cris host driver)
* V32: I'm unable to find a place which defines ETRAX_ARCH_V32
but I'm leaving fixing this to CRIS gurus. :)
Cc: Mikael Starvik <starvik@axis.com>
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* Make ide_dma_off_quietly() and __ide_dma_on() always available.
* Drop "__" prefix from __ide_dma_on().
* Check for presence of ->dma_host_on instead of ->ide_dma_on.
* Convert all users of ->ide_dma_on and ->dma_off_quietly methods
to use ide_dma_on() and ide_dma_off_quietly() instead.
* Remove no longer needed ->ide_dma_on and ->dma_off_quietly methods
from ide_hwif_t.
* Make ide_dma_on() void.
There should be no functionality changes caused by this patch.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Add ide_toggle_bounce() call to ->ide_dma_on/->dma_off_quietly
methods so they match generic __ide_dma_on()/ide_dma_off_quietly().
Since there is no PCI device there should be no functionality
changes caused by this patch.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Add ide_toggle_bounce() call to ->ide_dma_on/->dma_off_quietly
methods so they match generic __ide_dma_on()/ide_dma_off_quietly().
Since there is no PCI device there should be no functionality
changes caused by this patch.
Cc: Russell King <rmk@arm.linux.org.uk>
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Add ide_toggle_bounce() call to ->ide_dma_on/->dma_off_quietly
methods so they match generic __ide_dma_on()/ide_dma_off_quietly().
Tested on Altix by Jeremy.
Acked-by: Jeremy Higdon <jeremy@sgi.com>
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* Fix SWDMA/MWDMA masks in cy82c693_chipset.
* Add IDE_HFLAG_CY82C693 host flag and use it in ide_tune_dma() to
check whether the DMA should be enabled even if ide_max_dma_mode()
fails.
* Convert cy82c693_dma_enable() to become cy82c693_set_dma_mode()
and remove no longer needed cy82c693_ide_dma_on(). Then set
IDE_HFLAG_CY82C693 instead of IDE_HFLAG_TRUST_BIOS_FOR_DMA in
cy82c693_chipset.
* Bump driver version.
As a result of this patch cy82c693 driver will configure and use DMA on
all SWDMA0-2 and MWDMA0-2 capable ATA devices instead of relying on BIOS.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* Mask device DMA masks by ATA_{S,M}WDMA2 in cy82c693_ide_dma_on().
* Remove clipping of DMA modes by id->tDMA in cy82c693_dma_enable():
- id->tDMA may not be defined on newer devices
- id->vendor6/id->tDMA word is in LE endianness
(cy82c693 seems to be Alpha specific though)
* Bump driver version.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* Set the correct hwif->dma_base for the second channel in
ide_get_or_set_dma_base().
* Remove DMA enable code from cs5520_set_pio_mode(), this can
be handled by the generic ->dma_host_on method now.
* Add VDMA check to ide_config_drive_speed().
* drive->using_dma was never enabled since cs5520 host driver's
->ide_dma_on method overrided the generic ->ide_dma_on (so
__ide_dma_on() was never called, drive->using_dma was never set
and VDMA was never used since it depends on drive->using_dma).
Fix it by using ->dma_host_on method instead of ->ide_dma_on
(also add matching ->dma_host_off method).
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
There should be no functionality changes caused by this patch.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
IDE core guarantees that ->set_dma_mode will be called only
for DMA modes set in SWDMA/MWDMA/UDMA masks.
There should be no functionality changes caused by this patch.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* Program register 0x40 in sl82c105_resetproc().
* Remove no longer needed sl82c105_selectproc() and pci_set_drvdata() calls.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* Program DMA timings in sl82c105_dma_start() (->dma_start method)
before starting DMA transfer.
* Add sl82c105_dma_end() (->ide_dma_end method) to switch back to
PIO timings when DMA transfer is complete.
* In sl82c105_set_pio_mode() program timings regardless of ->using_dma
setting and in sl82c105_set_dma_mode() only cache the new timings.
* Remove no longer needed sl82c105_{ide_dma_on,off_quietly}().
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (200 commits)
[SCSI] usbstorage: use last_sector_bug flag universally
[SCSI] libsas: abstract STP task status into a function
[SCSI] ultrastor: clean up inline asm warnings
[SCSI] aic7xxx: fix firmware build
[SCSI] aacraid: fib context lock for management ioctls
[SCSI] ch: remove forward declarations
[SCSI] ch: fix device minor number management bug
[SCSI] ch: handle class_device_create failure properly
[SCSI] NCR5380: fix section mismatch
[SCSI] sg: fix /proc/scsi/sg/devices when no SCSI devices
[SCSI] IB/iSER: add logical unit reset support
[SCSI] don't use __GFP_DMA for sense buffers if not required
[SCSI] use dynamically allocated sense buffer
[SCSI] scsi.h: add macro for enclosure bit of inquiry data
[SCSI] sd: add fix for devices with last sector access problems
[SCSI] fix pcmcia compile problem
[SCSI] aacraid: add Voodoo Lite class of cards.
[SCSI] aacraid: add new driver features flags
[SCSI] qla2xxx: Update version number to 8.02.00-k7.
[SCSI] qla2xxx: Issue correct MBC_INITIALIZE_FIRMWARE command.
...