IDE updates (part 4)
PATCH 1/1 IDE updates (part 4)
Hi,
* fix cs5535 and siimage 2.6.23 regression resulting in out-of-bound array access if there are drives on the secondary interface (Benjamin Herrenschmidt <[email protected]>)
* more host drivers are switched to always tune PIO: alim15x3, cs5520, cy82c693, opti621 and triflex
* a lot of small cleanups/improvements (which accumulated result in ~450 LOC less in the IDE land)
PS There is still one more update to go.
Please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/
to receive the following updates:
drivers/ide/arm/icside.c | 1 - drivers/ide/cris/ide-cris.c | 1 + drivers/ide/ide-disk.c | 8 +- drivers/ide/ide-dma.c | 12 +- drivers/ide/ide-io.c | 3 +- drivers/ide/ide-probe.c | 3 +- drivers/ide/ide.c | 4 - drivers/ide/mips/au1xxx-ide.c | 3 - drivers/ide/pci/aec62xx.c | 97 ++++------ drivers/ide/pci/alim15x3.c | 30 ++-- drivers/ide/pci/amd74xx.c | 31 ++-- drivers/ide/pci/atiixp.c | 21 +-- drivers/ide/pci/cmd64x.c | 85 +++------ drivers/ide/pci/cs5520.c | 31 +--- drivers/ide/pci/cs5530.c | 18 +-- drivers/ide/pci/cs5535.c | 15 +- drivers/ide/pci/cy82c693.c | 18 +-- drivers/ide/pci/generic.c | 148 +++++----------- drivers/ide/pci/hpt34x.c | 56 +++---- drivers/ide/pci/hpt366.c | 376 +++++++++++++++++----------------------- drivers/ide/pci/it8213.c | 16 +-- drivers/ide/pci/it821x.c | 22 +-- drivers/ide/pci/jmicron.c | 12 +- drivers/ide/pci/ns87415.c | 6 +- drivers/ide/pci/opti621.c | 26 +-- drivers/ide/pci/pdc202xx_new.c | 201 +++++++-------------- drivers/ide/pci/pdc202xx_old.c | 135 +++++--------- drivers/ide/pci/piix.c | 167 ++++++++----------- drivers/ide/pci/rz1000.c | 3 +- drivers/ide/pci/sc1200.c | 19 +-- drivers/ide/pci/scc_pata.c | 26 +-- drivers/ide/pci/serverworks.c | 86 ++++------ drivers/ide/pci/sgiioc4.c | 11 +- drivers/ide/pci/siimage.c | 35 ++--- drivers/ide/pci/sis5513.c | 14 +-- drivers/ide/pci/sl82c105.c | 12 +- drivers/ide/pci/slc90e66.c | 17 +-- drivers/ide/pci/tc86c001.c | 26 +-- drivers/ide/pci/triflex.c | 12 +- drivers/ide/pci/trm290.c | 9 +- drivers/ide/pci/via82cxxx.c | 28 ++-- drivers/ide/ppc/pmac.c | 1 - drivers/ide/setup-pci.c | 68 +++++--- include/linux/ide.h | 58 ++++--- 44 files changed, 760 insertions(+), 1211 deletions(-)
Auke Kok (2):
amd74xx: Omit PCI_REVISION_ID read
cmd64x: Use dev->revision
Bartlomiej Zolnierkiewicz (32):
siimage: bump driver version
ide: add DECLARE_GENERIC_PCI_DEV() macro to generic IDE PCI host driver
ide: add IDE_HFLAG_NO_ATAPI_DMA host flag
ide: add IDE_HFLAG_BOOTABLE host flag
ide: add IDE_HFLAG_NO_{DMA,AUTODMA} host flags
ide: remove ->init_setup_dma from ide_pci_device_t (take 2)
ide: add IDE_HFLAG_NO_LBA48 and IDE_HFLAG_NO_LBA48_DMA host flags
pdc202xx_old: remove broken SWDMA support
ide: add ->mwdma_mask and ->swdma_mask to ide_pci_device_t (take 2)
ide: use pci_dev->revision
ide: use I/O ops directly part #2 (take 2)
aec62xx: remove ->init_setup
cmd64x: remove ->init_setup
hpt366: remove ->init_setup
pdc202xx_new: remove ->init_setup
pdc202xx_old: remove ->init_setup
scc_pata: remove ->init_setup
serverworks: remove ->init_setup
ide: remove .init_setup from ide_pci_device_t
aec62xx: no need to disable UDMA in ->init_hwif method for ATP850UF
pdc202xx_new: add DECLARE_PDCNEW_DEV() macro
pdc202xx_old: add DECLARE_PDC2026X_DEV() macro
piix: add DECLARE_ICH_DEV() macro
ide: add IDE_HFLAG_ERROR_STOPS_FIFO host flag
ide: add IDE_HFLAG_SERIALIZE host flag
ide: add IDE_HFLAG_LEGACY_IRQS host flag
alim15x3: always tune PIO
cs5520: always tune PIO
cy82c693: always tune PIO
opti621: always tune PIO
triflex: always tune PIO
ide: set drive->autotune in ide_pci_setup_ports()
Benjamin Herrenschmidt (3):
ide: Add ide_get_paired_drive() helper
ide: Fix siimage driver accessing beyond array boundary
ide: Fix cs5535 driver accessing beyond array boundary
drivers/ide/arm/icside.c +0 -1
@@ -415,7 +415,6 @@ static void icside_dma_lost_irq(ide_drive_t *drive)static void icside_dma_init (ide_hwif_t *hwif) { - hwif->atapi_dma =1 ; hwif->mwdma_mask =7 ;/* MW0..2 */ hwif->swdma_mask =7 ;/* SW0..2 */
drivers/ide/cris/ide-cris.c +1 -0
@@ -805,6 +805,7 @@ init_e100_ide (void) hwif->dma_host_on = &cris_dma_on; hwif->dma_off_quietly = &cris_dma_off; hwif->cbl =ATA_CBL_PATA40 ; + hwif->host_flags |=IDE_HFLAG_NO_ATAPI_DMA ; hwif->pio_mask =ATA_PIO4 , hwif->drives[0 ].autotune =1 ; hwif->drives[1 ].autotune =1 ;
drivers/ide/ide-disk.c +4 -4
@@ -169,7 +169,7 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, nsectors.all = (u16 ) rq->nr_sectors; -if (hwif->no_lba48_dma && lba48 && dma) { +if ((hwif->host_flags &IDE_HFLAG_NO_LBA48_DMA ) && lba48 && dma) {if (block + rq->nr_sectors >1ULL <<28 ) dma =0 ;else
@@ -856,7 +856,7 @@ static int set_lba_addressing(ide_drive_t *drive, int arg) drive->addressing =0 ; -if (HWIF (drive)->no_lba48) +if (drive->hwif->host_flags &IDE_HFLAG_NO_LBA48 )return 0 ;if (!idedisk_supports_lba48 (drive->id))
@@ -889,6 +889,7 @@ static inline void idedisk_add_settings(ide_drive_t *drive) { ; }static void idedisk_setup (ide_drive_t *drive) { +ide_hwif_t *hwif = drive->hwif;struct hd_driveid *id = drive->id;unsigned long long capacity;
@@ -909,7 +910,6 @@ static void idedisk_setup (ide_drive_t *drive) (void )set_lba_addressing (drive,1 );if (drive->addressing ==1 ) { -ide_hwif_t *hwif =HWIF (drive);int max_s =2048 ;if (max_s > hwif->rqsize)
@@ -932,7 +932,7 @@ static void idedisk_setup (ide_drive_t *drive) drive->capacity64 =1ULL <<28 ; } -if (drive->hwif->no_lba48_dma && drive->addressing) { +if ((hwif->host_flags &IDE_HFLAG_NO_LBA48_DMA ) && drive->addressing) {if (drive->capacity64 >1ULL <<28 ) { printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode will" " be used for accessing sectors > %u\n",
drivers/ide/ide-dma.c +8 -4
@@ -338,8 +338,10 @@ static int config_drive_for_dma (ide_drive_t *drive)ide_hwif_t *hwif = drive->hwif;struct hd_driveid *id = drive->id; -if (drive->media != ide_disk && hwif->atapi_dma ==0 ) -return 0 ; +if (drive->media != ide_disk) { +if (hwif->host_flags &IDE_HFLAG_NO_ATAPI_DMA ) +return -1 ; + }/* * Enable DMA on any drive that has
@@ -726,8 +728,10 @@ u8 ide_find_dma_mode(ide_drive_t *drive, u8 req_mode)int x, i;u8 mode =0 ; -if (drive->media != ide_disk && hwif->atapi_dma ==0 ) -return 0 ; +if (drive->media != ide_disk) { +if (hwif->host_flags &IDE_HFLAG_NO_ATAPI_DMA ) +return 0 ; + }for (i =0 ; i <ARRAY_SIZE (xfer_mode_bases); i++) {if (req_mode < xfer_mode_bases[i])
drivers/ide/ide-io.c +2 -1
@@ -484,7 +484,8 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8 } } -if ((stat &DRQ_STAT ) &&rq_data_dir (rq) ==READ && hwif->err_stops_fifo ==0 ) +if ((stat &DRQ_STAT ) &&rq_data_dir (rq) ==READ && + (hwif->host_flags &IDE_HFLAG_ERROR_STOPS_FIFO ) ==0 )try_to_flush_leftover_data (drive);if (rq->errors >=ERROR_MAX ||blk_noretry_request (rq)) {
drivers/ide/ide-probe.c +2 -1
@@ -951,7 +951,8 @@ static int ide_init_queue(ide_drive_t *drive)blk_queue_segment_boundary (q,0xffff );if (!hwif->rqsize) { -if (hwif->no_lba48 || hwif->no_lba48_dma) +if ((hwif->host_flags &IDE_HFLAG_NO_LBA48 ) || + (hwif->host_flags &IDE_HFLAG_NO_LBA48_DMA )) hwif->rqsize =256 ;else hwif->rqsize =65536 ;
drivers/ide/ide.c +0 -4
@@ -134,8 +134,6 @@ static void init_hwif_data(ide_hwif_t *hwif, unsigned int index) hwif->bus_state =BUSSTATE_ON ; - hwif->atapi_dma =0 ;/* disable all atapi dma */ -init_completion (&hwif->gendev_rel_comp);default_hwif_iops (hwif);
@@ -379,7 +377,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) hwif->pio_mask = tmp_hwif->pio_mask; - hwif->atapi_dma = tmp_hwif->atapi_dma; hwif->ultra_mask = tmp_hwif->ultra_mask; hwif->mwdma_mask = tmp_hwif->mwdma_mask; hwif->swdma_mask = tmp_hwif->swdma_mask;
@@ -440,7 +437,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) hwif->mmio = tmp_hwif->mmio; hwif->rqsize = tmp_hwif->rqsize; - hwif->no_lba48 = tmp_hwif->no_lba48;#ifndef CONFIG_BLK_DEV_IDECS hwif->irq = tmp_hwif->irq;
drivers/ide/mips/au1xxx-ide.c +0 -3
@@ -699,9 +699,6 @@ static int au_ide_probe(struct device *dev) hwif->dma_host_on = &auide_dma_host_on; hwif->dma_lost_irq = &auide_dma_lost_irq; hwif->ide_dma_on = &auide_dma_on; - - hwif->atapi_dma =1 ; -#else /* !CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA */ hwif->channel =0 ; hwif->hold =1 ;
drivers/ide/pci/aec62xx.c +39 -58
160 lines not on this page · raw message
drivers/ide/pci/alim15x3.c +13 -17
@@ -1,5 +1,5 @@/* -* linux/drivers/ide/pci/alim15x3.c Version 0.26 Jul 14 2007 +* linux/drivers/ide/pci/alim15x3.c Version 0.27 Aug 27 2007 * * Copyright (C) 1998-2000 Michel Aubry, Maintainer * Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer
@@ -665,34 +665,29 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif) hwif->udma_filter = &ali_udma_filter;/* don't use LBA48 DMA on ALi devices before rev 0xC5 */ - hwif->no_lba48_dma = (m5229_revision <=0xC4 ) ?1 :0 ; +if (m5229_revision <=0xC4 ) + hwif->host_flags |=IDE_HFLAG_NO_LBA48_DMA ; -if (!hwif->dma_base) { - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ; +if (hwif->dma_base ==0 )return ; - }/* * check in ->init_dma guarantees m5229_revision >= 0x20 here */ -if (m5229_revision >0x20 ) - hwif->atapi_dma =1 ; +if (m5229_revision ==0x20 ) + hwif->host_flags |=IDE_HFLAG_NO_ATAPI_DMA ;if (m5229_revision <=0x20 ) hwif->ultra_mask =0x00 ;/* no udma */ else if (m5229_revision <0xC2 ) - hwif->ultra_mask =0x07 ;/* udma0-2 */ + hwif->ultra_mask =ATA_UDMA2 ;else if (m5229_revision ==0xC2 || m5229_revision ==0xC3 ) - hwif->ultra_mask =0x1f ;/* udma0-4 */ + hwif->ultra_mask =ATA_UDMA4 ;else if (m5229_revision ==0xC4 ) - hwif->ultra_mask =0x3f ;/* udma0-5 */ + hwif->ultra_mask =ATA_UDMA5 ;else - hwif->ultra_mask =0x7f ;/* udma0-6 */ - - hwif->mwdma_mask =0x07 ; - hwif->swdma_mask =0x07 ; + hwif->ultra_mask =ATA_UDMA6 ; hwif->dma_setup = &ali15x3_dma_setup;
@@ -776,9 +771,10 @@ static ide_pci_device_t ali15x3_chipset __devinitdata = { .init_chipset = init_chipset_ali15x3, .init_hwif = init_hwif_ali15x3, .init_dma = init_dma_ali15x3, - .autodma = AUTODMA, - .bootable = ON_BOARD, + .host_flags = IDE_HFLAG_BOOTABLE, .pio_mask = ATA_PIO5, + .swdma_mask = ATA_SWDMA2, + .mwdma_mask = ATA_MWDMA2, };/**
drivers/ide/pci/amd74xx.c +14 -17
@@ -233,7 +233,6 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch* Print the boot message. */ -pci_read_config_byte (dev,PCI_REVISION_ID , &t);printk (KERN_INFO "%s: %s (rev %02x) UDMA%s controller\n" , amd_chipset->name,pci_name (dev), dev->revision, amd_dma[fls (amd_config->udma_mask) -1 ]);
@@ -254,18 +253,14 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)for (i =0 ; i <2 ; i++) { hwif->drives[i].io_32bit =1 ; hwif->drives[i].unmask =1 ; - hwif->drives[i].autotune =1 ; }if (!hwif->dma_base)return ; - hwif->atapi_dma =1 ; - hwif->ultra_mask = amd_config->udma_mask; - hwif->mwdma_mask =0x07 ; -if ((amd_config->flags &AMD_BAD_SWDMA ) ==0 ) - hwif->swdma_mask =0x07 ; +if (amd_config->flags &AMD_BAD_SWDMA ) + hwif->swdma_mask =0x00 ;if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) {if ((amd_80w >> hwif->channel) &1 )
@@ -280,13 +275,14 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) .name = name_str, \ .init_chipset = init_chipset_amd74xx, \ .init_hwif = init_hwif_amd74xx, \ - .autodma = AUTODMA, \ .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \ - .bootable = ON_BOARD, \ - .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST \ - | IDE_HFLAG_PIO_NO_DOWNGRADE \ - | IDE_HFLAG_POST_SET_MODE, \ + .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | \ + IDE_HFLAG_PIO_NO_DOWNGRADE | \ + IDE_HFLAG_POST_SET_MODE | \ + IDE_HFLAG_BOOTABLE, \ .pio_mask = ATA_PIO5, \ + .swdma_mask = ATA_SWDMA2, \ + .mwdma_mask = ATA_MWDMA2, \ }#define DECLARE_NV_DEV (name_str) \
@@ -294,13 +290,14 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) .name = name_str, \ .init_chipset = init_chipset_amd74xx, \ .init_hwif = init_hwif_amd74xx, \ - .autodma = AUTODMA, \ .enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \ - .bootable = ON_BOARD, \ - .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST \ - | IDE_HFLAG_PIO_NO_DOWNGRADE \ - | IDE_HFLAG_POST_SET_MODE, \ + .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | \ + IDE_HFLAG_PIO_NO_DOWNGRADE | \ + IDE_HFLAG_POST_SET_MODE | \ + IDE_HFLAG_BOOTABLE, \ .pio_mask = ATA_PIO5, \ + .swdma_mask = ATA_SWDMA2, \ + .mwdma_mask = ATA_MWDMA2, \ }static ide_pci_device_t amd74xx_chipsets[]__devinitdata = {
drivers/ide/pci/atiixp.c +7 -14
@@ -172,21 +172,12 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)u8 ch = hwif->channel;struct pci_dev *pdev = hwif->pci_dev; -if (!hwif->irq) - hwif->irq = ch ?15 :14 ; - hwif->set_pio_mode = &atiixp_set_pio_mode; hwif->set_dma_mode = &atiixp_set_dma_mode; - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ;if (!hwif->dma_base)return ; - hwif->atapi_dma =1 ; - hwif->ultra_mask =0x3f ; - hwif->mwdma_mask =0x07 ; -pci_read_config_byte (pdev,ATIIXP_IDE_UDMA_MODE + ch, &udma_mode);if ((udma_mode &0x07 ) >=0x04 || (udma_mode &0x70 ) >=0x40 )
@@ -203,18 +194,20 @@ static ide_pci_device_t atiixp_pci_info[] __devinitdata = { {/* 0 */ .name = "ATIIXP", .init_hwif = init_hwif_atiixp, - .autodma = AUTODMA, .enablebits = {{0x48,0x01,0x00}, {0x48,0x08,0x00}}, - .bootable = ON_BOARD, + .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_BOOTABLE, .pio_mask = ATA_PIO4, + .mwdma_mask = ATA_MWDMA2, + .udma_mask = ATA_UDMA5, },{ /* 1 */ .name = "SB600_PATA", .init_hwif = init_hwif_atiixp, - .autodma = AUTODMA, .enablebits = {{0x48,0x01,0x00}, {0x00,0x00,0x00}}, - .bootable = ON_BOARD, - .host_flags = IDE_HFLAG_SINGLE, + .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_LEGACY_IRQS | + IDE_HFLAG_BOOTABLE, .pio_mask = ATA_PIO4, + .mwdma_mask = ATA_MWDMA2, + .udma_mask = ATA_UDMA5, }, };
drivers/ide/pci/cmd64x.c +27 -58
157 lines not on this page · raw message
drivers/ide/pci/cs5520.c +6 -25
@@ -106,18 +106,6 @@ static void cs5520_set_dma_mode(ide_drive_t *drive, const u8 speed) }/* -* We provide a callback for our nonstandard DMA location -*/ - -static void __devinit cs5520_init_setup_dma (struct pci_dev *dev,ide_pci_device_t *d,ide_hwif_t *hwif) -{ -unsigned long bmide =pci_resource_start (dev,2 );/* Not the usual 4 */ -if (hwif->mate && hwif->mate->dma_base)/* Second channel at primary + 8 */ - bmide +=8 ; -ide_setup_dma (hwif, bmide,8 ); -} - -/* * We wrap the DMA activate to set the vdma flag. This is needed * so that the IDE DMA layer issues PIO not DMA commands over the * DMA channel
@@ -125,6 +113,7 @@ static void __devinit cs5520_init_setup_dma(struct pci_dev *dev, ide_pci_device_static int cs5520_dma_on (ide_drive_t *drive) { +/* ATAPI is harder so leave it for now */ drive->vdma =1 ;return 0 ; }
@@ -134,29 +123,21 @@ static void __devinit init_hwif_cs5520(ide_hwif_t *hwif) hwif->set_pio_mode = &cs5520_set_pio_mode; hwif->set_dma_mode = &cs5520_set_dma_mode; -if (hwif->dma_base ==0 ) { - hwif->drives[1 ].autotune = hwif->drives[0 ].autotune =1 ; +if (hwif->dma_base ==0 )return ; - } hwif->ide_dma_on = &cs5520_dma_on; - -/* ATAPI is harder so leave it for now */ - hwif->atapi_dma =0 ; - hwif->ultra_mask =0 ; - hwif->swdma_mask =0 ; - hwif->mwdma_mask =0 ; }#define DECLARE_CS_DEV (name_str) \ { \ .name = name_str, \ - .init_setup_dma = cs5520_init_setup_dma, \ .init_hwif = init_hwif_cs5520, \ - .autodma = AUTODMA, \ - .bootable = ON_BOARD, \ .host_flags = IDE_HFLAG_ISA_PORTS | \ - IDE_HFLAG_VDMA, \ + IDE_HFLAG_CS5520 | \ + IDE_HFLAG_VDMA | \ + IDE_HFLAG_NO_ATAPI_DMA | \ + IDE_HFLAG_BOOTABLE, \ .pio_mask = ATA_PIO4, \ }
drivers/ide/pci/cs5530.c +5 -13
@@ -245,9 +245,6 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif)unsigned long basereg;u32 d0_timings; -if (hwif->mate) - hwif->serialized = hwif->mate->serialized =1 ; - hwif->set_pio_mode = &cs5530_set_pio_mode; hwif->set_dma_mode = &cs5530_set_dma_mode;
@@ -258,16 +255,9 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif)if (CS5530_BAD_PIO (inl (basereg +8 )))outl (cs5530_pio_timings[(d0_timings >>31 ) &1 ][0 ], basereg +8 ); - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ; -if (hwif->dma_base ==0 )return ; - hwif->atapi_dma =1 ; - hwif->ultra_mask =0x07 ; - hwif->mwdma_mask =0x07 ; - hwif->udma_filter = cs5530_udma_filter; }
@@ -275,10 +265,12 @@ static ide_pci_device_t cs5530_chipset __devinitdata = { .name = "CS5530", .init_chipset = init_chipset_cs5530, .init_hwif = init_hwif_cs5530, - .autodma = AUTODMA, - .bootable = ON_BOARD, + .host_flags =IDE_HFLAG_SERIALIZE | +IDE_HFLAG_POST_SET_MODE | + IDE_HFLAG_BOOTABLE, .pio_mask = ATA_PIO4, - .host_flags = IDE_HFLAG_POST_SET_MODE, + .mwdma_mask = ATA_MWDMA2, + .udma_mask = ATA_UDMA2, };static int __devinit cs5530_init_one (struct pci_dev *dev,const struct pci_device_id *id)
drivers/ide/pci/cs5535.c +5 -10
@@ -84,7 +84,7 @@ static void cs5535_set_speed(ide_drive_t *drive, const u8 speed)/* Set the PIO timings */ if ((speed &XFER_MODE ) ==XFER_PIO ) { -ide_drive_t *pair = &drive->hwif->drives[drive->dn ^1 ]; +ide_drive_t *pair =ide_get_paired_drive (drive);u8 cmd, pioa; cmd = pioa = speed -XFER_PIO_0 ;
@@ -180,25 +180,20 @@ static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) hwif->set_pio_mode = &cs5535_set_pio_mode; hwif->set_dma_mode = &cs5535_set_dma_mode; - hwif->drives[1 ].autotune = hwif->drives[0 ].autotune =1 ; -if (hwif->dma_base ==0 )return ; - hwif->atapi_dma =1 ; - hwif->ultra_mask =0x1F ; - hwif->mwdma_mask =0x07 ; - hwif->cbl =cs5535_cable_detect (hwif->pci_dev); }static ide_pci_device_t cs5535_chipset__devinitdata = { .name ="CS5535" , .init_hwif = init_hwif_cs5535, - .autodma =AUTODMA , - .bootable =ON_BOARD , - .host_flags =IDE_HFLAG_SINGLE |IDE_HFLAG_POST_SET_MODE , + .host_flags =IDE_HFLAG_SINGLE |IDE_HFLAG_POST_SET_MODE | +IDE_HFLAG_BOOTABLE , .pio_mask =ATA_PIO4 , + .mwdma_mask =ATA_MWDMA2 , + .udma_mask =ATA_UDMA4 , }; static int __devinit cs5535_init_one(struct pci_dev *dev,
drivers/ide/pci/cy82c693.c +6 -12
@@ -1,5 +1,5 @@/* -* linux/drivers/ide/pci/cy82c693.c Version 0.40 Sep. 10, 2002 +* linux/drivers/ide/pci/cy82c693.c Version 0.41 Aug 27, 2007 * * Copyright (C) 1998-2000 Andreas S. Krebs ([email protected]), Maintainer * Copyright (C) 1998-2002 Andre Hedrick <[email protected]>, Integrator
@@ -431,15 +431,8 @@ static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif) hwif->chipset = ide_cy82c693; hwif->set_pio_mode = &cy82c693_set_pio_mode; -if (!hwif->dma_base) { - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ; +if (hwif->dma_base ==0 )return ; - } - - hwif->atapi_dma =1 ; - hwif->mwdma_mask =0x04 ; - hwif->swdma_mask =0x04 ; hwif->ide_dma_on = &cy82c693_ide_dma_on; }
@@ -461,10 +454,11 @@ static ide_pci_device_t cy82c693_chipset __devinitdata = { .init_chipset = init_chipset_cy82c693, .init_iops = init_iops_cy82c693, .init_hwif = init_hwif_cy82c693, - .autodma = AUTODMA, - .bootable = ON_BOARD, - .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_TRUST_BIOS_FOR_DMA, + .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_TRUST_BIOS_FOR_DMA | + IDE_HFLAG_BOOTABLE, .pio_mask = ATA_PIO4, + .swdma_mask = ATA_SWDMA2_ONLY, + .mwdma_mask = ATA_MWDMA2_ONLY, };static int __devinit cy82c693_init_one (struct pci_dev *dev,const struct pci_device_id *id)
drivers/ide/pci/generic.c +47 -101
166 lines not on this page · raw message
drivers/ide/pci/hpt34x.c +26 -30
75 lines not on this page · raw message
drivers/ide/pci/hpt366.c +158 -218
626 lines not on this page · raw message
drivers/ide/pci/it8213.c +5 -11
@@ -170,17 +170,9 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif) hwif->set_dma_mode = &it8213_set_dma_mode; hwif->set_pio_mode = &it8213_set_pio_mode; - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ; -if (!hwif->dma_base)return ; - hwif->atapi_dma =1 ; - hwif->ultra_mask =0x7f ; - hwif->mwdma_mask =0x06 ; - hwif->swdma_mask =0x04 ; -pci_read_config_byte (hwif->pci_dev,0x42 , ®42h);if (hwif->cbl !=ATA_CBL_PATA40_SHORT )
@@ -192,11 +184,13 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif) { \ .name = name_str, \ .init_hwif = init_hwif_it8213, \ - .autodma = AUTODMA, \ .enablebits = {{0x41,0x80,0x80}}, \ - .bootable = ON_BOARD, \ - .host_flags = IDE_HFLAG_SINGLE, \ + .host_flags = IDE_HFLAG_SINGLE | \ + IDE_HFLAG_BOOTABLE, \ .pio_mask = ATA_PIO4, \ + .swdma_mask = ATA_SWDMA2_ONLY, \ + .mwdma_mask = ATA_MWDMA12_ONLY, \ + .udma_mask = ATA_UDMA6, \ }static ide_pci_device_t it8213_chipsets[]__devinitdata = {
drivers/ide/pci/it821x.c +8 -14
@@ -544,12 +544,10 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)ide_set_hwifdata (hwif, idev); - hwif->atapi_dma =1 ; -pci_read_config_byte (hwif->pci_dev,0x50 , &conf); -if (conf &1 ) { +if (conf &1 ) { idev->smart =1 ; - hwif->atapi_dma =0 ; + hwif->host_flags |=IDE_HFLAG_NO_ATAPI_DMA ;/* Long I/O's although allowed in LBA48 space cause the onboard firmware to enter the twighlight zone */ hwif->rqsize =256 ;
@@ -570,10 +568,10 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)*/ pci_read_config_byte (hwif->pci_dev,0x08 , &conf); -if (conf ==0x10 ) { +if (conf ==0x10 ) { idev->timing10 =1 ; - hwif->atapi_dma =0 ; -if (!idev->smart) + hwif->host_flags |=IDE_HFLAG_NO_ATAPI_DMA ; +if (idev->smart ==0 )printk (KERN_WARNING "it821x: Revision 0x10, workarounds activated.\n" ); }
@@ -587,14 +585,11 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif) }else hwif->host_flags |=IDE_HFLAG_NO_SET_MODE ; - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ; -if (hwif->dma_base ==0 )return ; - hwif->ultra_mask =0x7f ; - hwif->mwdma_mask =0x07 ; + hwif->ultra_mask =ATA_UDMA6 ; + hwif->mwdma_mask =ATA_MWDMA2 ;if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) hwif->cbl =ata66_it821x (hwif);
@@ -638,9 +633,8 @@ static unsigned int __devinit init_chipset_it821x(struct pci_dev *dev, const cha .name = name_str, \ .init_chipset = init_chipset_it821x, \ .init_hwif = init_hwif_it821x, \ - .autodma = AUTODMA, \ - .bootable = ON_BOARD, \ .fixup = it821x_fixups, \ + .host_flags = IDE_HFLAG_BOOTABLE, \ .pio_mask = ATA_PIO4, \ }
drivers/ide/pci/jmicron.c +3 -9
@@ -111,16 +111,9 @@ static void __devinit init_hwif_jmicron(ide_hwif_t *hwif) hwif->set_pio_mode = &jmicron_set_pio_mode; hwif->set_dma_mode = &jmicron_set_dma_mode; - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ; -if (hwif->dma_base ==0 )return ; - hwif->atapi_dma =1 ; - hwif->ultra_mask =0x7f ; - hwif->mwdma_mask =0x07 ; -if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) hwif->cbl =ata66_jmicron (hwif); }
@@ -128,10 +121,11 @@ static void __devinit init_hwif_jmicron(ide_hwif_t *hwif)static ide_pci_device_t jmicron_chipset__devinitdata = { .name ="JMB" , .init_hwif = init_hwif_jmicron, - .autodma =AUTODMA , - .bootable =ON_BOARD , + .host_flags =IDE_HFLAG_BOOTABLE , .enablebits = { {0x40 ,0x01 ,0x01 }, {0x40 ,0x10 ,0x10 } }, .pio_mask =ATA_PIO5 , + .mwdma_mask =ATA_MWDMA2 , + .udma_mask =ATA_UDMA6 , };/**
drivers/ide/pci/ns87415.c +3 -3
@@ -266,9 +266,9 @@ static ide_pci_device_t ns87415_chipset __devinitdata = { .init_iops = init_iops_ns87415, #endif .init_hwif = init_hwif_ns87415, - .autodma = AUTODMA, - .bootable = ON_BOARD, - .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, + .host_flags =IDE_HFLAG_TRUST_BIOS_FOR_DMA | +IDE_HFLAG_NO_ATAPI_DMA | + IDE_HFLAG_BOOTABLE, };static int __devinit ns87415_init_one (struct pci_dev *dev,const struct pci_device_id *id)
drivers/ide/pci/opti621.c +9 -17
@@ -1,5 +1,5 @@/* -* linux/drivers/ide/pci/opti621.c Version 0.7 Sept 10, 2002 +* linux/drivers/ide/pci/opti621.c Version 0.8 Aug 27, 2007 * * Copyright (C) 1996-1998 Linus Torvalds & authors (see below) */
@@ -57,9 +57,6 @@* There is a 25/33MHz switch in configuration * register, but driver is written for use at any frequency which get * (use idebus=xx to select PCI bus speed). -* Use hda=autotune and hdb=autotune for automatical tune of the PIO modes. -* If you get strange results, do not use this and set PIO manually -* by hdparm. * * Version 0.1, Nov 8, 1996 * by Jaromir Koutek, for 2.1.8.
@@ -332,32 +329,27 @@ static void __devinit init_hwif_opti621 (ide_hwif_t *hwif) hwif->drives[1 ].drive_data =PIO_DONT_KNOW ; hwif->set_pio_mode = &opti621_set_pio_mode; - -if (!(hwif->dma_base)) -return ; - - hwif->atapi_dma =1 ; - hwif->mwdma_mask =0x07 ; - hwif->swdma_mask =0x07 ; }static ide_pci_device_t opti621_chipsets[]__devinitdata = { {/* 0 */ .name ="OPTI621" , .init_hwif = init_hwif_opti621, - .autodma =AUTODMA , .enablebits = {{0x45 ,0x80 ,0x00 }, {0x40 ,0x08 ,0x00 }}, - .bootable =ON_BOARD , + .host_flags =IDE_HFLAG_TRUST_BIOS_FOR_DMA | +IDE_HFLAG_BOOTABLE , .pio_mask =ATA_PIO3 , - .host_flags =IDE_HFLAG_TRUST_BIOS_FOR_DMA , + .swdma_mask =ATA_SWDMA2 , + .mwdma_mask =ATA_MWDMA2 , },{/* 1 */ .name ="OPTI621X" , .init_hwif = init_hwif_opti621, - .autodma =AUTODMA , .enablebits = {{0x45 ,0x80 ,0x00 }, {0x40 ,0x08 ,0x00 }}, - .bootable =ON_BOARD , + .host_flags =IDE_HFLAG_TRUST_BIOS_FOR_DMA | +IDE_HFLAG_BOOTABLE , .pio_mask =ATA_PIO3 , - .host_flags =IDE_HFLAG_TRUST_BIOS_FOR_DMA , + .swdma_mask =ATA_SWDMA2 , + .mwdma_mask =ATA_MWDMA2 , } };
drivers/ide/pci/pdc202xx_new.c +67 -134
248 lines not on this page · raw message
drivers/ide/pci/pdc202xx_old.c +48 -87
187 lines not on this page · raw message
drivers/ide/pci/piix.c +69 -98
228 lines not on this page · raw message
drivers/ide/pci/rz1000.c +1 -2
@@ -52,8 +52,7 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif)static ide_pci_device_t rz1000_chipset__devinitdata = { .name ="RZ100x" , .init_hwif = init_hwif_rz1000, - .autodma =NODMA , - .bootable =ON_BOARD , + .host_flags =IDE_HFLAG_NO_DMA |IDE_HFLAG_BOOTABLE , };static int __devinit rz1000_init_one (struct pci_dev *dev,const struct pci_device_id *id)
drivers/ide/pci/sc1200.c +6 -13
@@ -362,33 +362,26 @@ static int sc1200_resume (struct pci_dev *dev)*/ static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif) { -if (hwif->mate) - hwif->serialized = hwif->mate->serialized =1 ; - hwif->set_pio_mode = &sc1200_set_pio_mode; hwif->set_dma_mode = &sc1200_set_dma_mode; - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ; -if (hwif->dma_base ==0 )return ; hwif->udma_filter = sc1200_udma_filter; hwif->ide_dma_end = &sc1200_ide_dma_end; - - hwif->atapi_dma =1 ; - hwif->ultra_mask =0x07 ; - hwif->mwdma_mask =0x07 ; }static ide_pci_device_t sc1200_chipset__devinitdata = { .name ="SC1200" , .init_hwif = init_hwif_sc1200, - .autodma =AUTODMA , - .bootable =ON_BOARD , - .host_flags =IDE_HFLAG_ABUSE_DMA_MODES |IDE_HFLAG_POST_SET_MODE , + .host_flags =IDE_HFLAG_SERIALIZE | +IDE_HFLAG_POST_SET_MODE | +IDE_HFLAG_ABUSE_DMA_MODES | +IDE_HFLAG_BOOTABLE , .pio_mask =ATA_PIO4 , + .mwdma_mask =ATA_MWDMA2 , + .udma_mask =ATA_UDMA2 , };static int __devinit sc1200_init_one (struct pci_dev *dev,const struct pci_device_id *id)
drivers/ide/pci/scc_pata.c +9 -17
@@ -472,7 +472,7 @@ static u8 scc_udma_filter(ide_drive_t *drive)if ((drive->media != ide_disk) && (mask &0xE0 )) {printk (KERN_INFO "%s: limit %s to UDMA4\n" ,SCC_PATA_NAME , drive->name); - mask =0x1F ; + mask =ATA_UDMA4 ; }return mask;
@@ -683,17 +683,10 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif) hwif->ide_dma_test_irq = scc_dma_test_irq; hwif->udma_filter = scc_udma_filter; - hwif->drives[0 ].autotune =IDE_TUNE_AUTO ; - hwif->drives[1 ].autotune =IDE_TUNE_AUTO ; - -if (in_be32 ((void __iomem *)(hwif->config_data +0xff0 )) &CCKCTRL_ATACLKOEN ) { - hwif->ultra_mask =0x7f ;/* 133MHz */ - }else { - hwif->ultra_mask =0x3f ;/* 100MHz */ - } - hwif->mwdma_mask =0x00 ; - hwif->swdma_mask =0x00 ; - hwif->atapi_dma =1 ; +if (in_be32 ((void __iomem *)(hwif->config_data +0xff0 )) &CCKCTRL_ATACLKOEN ) + hwif->ultra_mask =ATA_UDMA6 ;/* 133MHz */ +else + hwif->ultra_mask =ATA_UDMA5 ;/* 100MHz */ /* we support 80c cable only. */ hwif->cbl =ATA_CBL_PATA80 ;
@@ -702,12 +695,10 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif)#define DECLARE_SCC_DEV (name_str) \ { \ .name = name_str, \ - .init_setup = init_setup_scc, \ .init_iops = init_iops_scc, \ .init_hwif = init_hwif_scc, \ - .autodma = AUTODMA, \ - .bootable = ON_BOARD, \ - .host_flags = IDE_HFLAG_SINGLE, \ + .host_flags = IDE_HFLAG_SINGLE | \ + IDE_HFLAG_BOOTABLE, \ .pio_mask = ATA_PIO4, \ }
@@ -727,7 +718,8 @@ static ide_pci_device_t scc_chipsets[] __devinitdata = {static int __devinit scc_init_one (struct pci_dev *dev,const struct pci_device_id *id) {ide_pci_device_t *d = &scc_chipsets[id->driver_data]; -return d->init_setup (dev, d); + +return init_setup_scc (dev, d); }/**
drivers/ide/pci/serverworks.c +31 -55
135 lines not on this page · raw message
drivers/ide/pci/sgiioc4.c +4 -7
@@ -592,8 +592,7 @@ ide_init_sgiioc4(ide_hwif_t * hwif)if (hwif->dma_base ==0 )return ; - hwif->atapi_dma =1 ; - hwif->mwdma_mask =0x04 ; + hwif->mwdma_mask =ATA_MWDMA2_ONLY ; hwif->dma_setup = &sgiioc4_ide_dma_setup; hwif->dma_start = &sgiioc4_ide_dma_start;
@@ -692,14 +691,12 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)static unsigned int __devinit pci_init_sgiioc4 (struct pci_dev *dev) { -unsigned int class_rev;int ret; -pci_read_config_dword (dev,PCI_CLASS_REVISION , &class_rev); - class_rev &=0xff ;printk (KERN_INFO "%s: IDE controller at PCI slot %s, revision %d\n" , -DRV_NAME ,pci_name (dev), class_rev); -if (class_rev <IOC4_SUPPORTED_FIRMWARE_REV ) { +DRV_NAME ,pci_name (dev), dev->revision); + +if (dev->revision <IOC4_SUPPORTED_FIRMWARE_REV ) { printk(KERN_ERR "Skipping %s IDE controller in slot %s: " "firmware is obsolete - please upgrade to " "revision46 or higher\n",
drivers/ide/pci/siimage.c +11 -24
@@ -1,5 +1,5 @@/* -* linux/drivers/ide/pci/siimage.c Version 1.16 Jul 13 2007 +* linux/drivers/ide/pci/siimage.c Version 1.17 Oct 18 2007 * * Copyright (C) 2001-2002 Andre Hedrick <[email protected]> * Copyright (C) 2003 Red Hat <[email protected]>
@@ -180,7 +180,7 @@ static void sil_set_pio_mode(ide_drive_t *drive, u8 pio)const u16 data_speed[] = {0x328a ,0x2283 ,0x1104 ,0x10c3 ,0x10c1 };ide_hwif_t *hwif =HWIF (drive); -ide_drive_t *pair = &hwif->drives[drive->dn ^1 ]; +ide_drive_t *pair =ide_get_paired_drive (drive);u32 speedt =0 ;u16 speedp =0 ;unsigned long addr =siimage_seldev (drive,0x04 );
@@ -640,13 +640,9 @@ static unsigned int setup_mmio_siimage (struct pci_dev *dev, const char *name)static unsigned int __devinit init_chipset_siimage (struct pci_dev *dev,const char *name) { -u32 class_rev =0 ; -u8 tmpbyte =0 ; -u8 BA5_EN =0 ; +u8 rev = dev->revision, tmpbyte =0 ,BA5_EN =0 ; -pci_read_config_dword (dev,PCI_CLASS_REVISION , &class_rev); - class_rev &=0xff ; -pci_write_config_byte (dev,PCI_CACHE_LINE_SIZE , (class_rev) ?1 :255 ); +pci_write_config_byte (dev,PCI_CACHE_LINE_SIZE , rev ?1 :255 );pci_read_config_byte (dev,0x8A , &BA5_EN );if ((BA5_EN &0x01 ) || (pci_resource_start (dev,5 ))) {
@@ -825,19 +821,14 @@ static void __devinit siimage_fixup(ide_hwif_t *hwif)static void __devinit init_iops_siimage (ide_hwif_t *hwif) { -struct pci_dev *dev = hwif->pci_dev; -u32 class_rev =0 ; - -pci_read_config_dword (dev,PCI_CLASS_REVISION , &class_rev); - class_rev &=0xff ; - hwif->hwif_data =NULL ;/* Pessimal until we finish probing */ hwif->rqsize =15 ; -if (pci_get_drvdata (dev) ==NULL ) +if (pci_get_drvdata (hwif->pci_dev) ==NULL )return ; +init_mmio_iops_siimage (hwif); }
@@ -891,16 +882,11 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif) } } - hwif->drives[0 ].autotune = hwif->drives[1 ].autotune =1 ; -if (hwif->dma_base ==0 )return ; - hwif->ultra_mask =0x7f ; - hwif->mwdma_mask =0x07 ; - -if (!is_sata (hwif)) - hwif->atapi_dma =1 ; +if (is_sata (hwif)) + hwif->host_flags |=IDE_HFLAG_NO_ATAPI_DMA ;if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) hwif->cbl =ata66_siimage (hwif);
@@ -919,9 +905,10 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif) .init_iops = init_iops_siimage, \ .init_hwif = init_hwif_siimage, \ .fixup = siimage_fixup, \ - .autodma = AUTODMA, \ - .bootable = ON_BOARD, \ + .host_flags = IDE_HFLAG_BOOTABLE, \ .pio_mask = ATA_PIO4, \ + .mwdma_mask = ATA_MWDMA2, \ + .udma_mask = ATA_UDMA6, \ }static ide_pci_device_t siimage_chipsets[]__devinitdata = {
drivers/ide/pci/sis5513.c +3 -11
@@ -564,25 +564,16 @@ static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif) {u8 udma_rates[] = {0x00 ,0x00 ,0x07 ,0x1f ,0x3f ,0x3f ,0x7f ,0x7f }; -if (!hwif->irq) - hwif->irq = hwif->channel ?15 :14 ; - hwif->set_pio_mode = &sis_set_pio_mode; hwif->set_dma_mode = &sis_set_dma_mode;if (chipset_family >=ATA_133 ) hwif->udma_filter = sis5513_ata133_udma_filter; - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ; -if (hwif->dma_base ==0 )return ; - hwif->atapi_dma =1 ; - hwif->ultra_mask = udma_rates[chipset_family]; - hwif->mwdma_mask =0x07 ;if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) hwif->cbl =ata66_sis5513 (hwif);
@@ -592,10 +583,11 @@ static ide_pci_device_t sis5513_chipset __devinitdata = { .name = "SIS5513", .init_chipset = init_chipset_sis5513, .init_hwif = init_hwif_sis5513, - .autodma = NOAUTODMA, .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, - .bootable = ON_BOARD, + .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_NO_AUTODMA | + IDE_HFLAG_BOOTABLE, .pio_mask = ATA_PIO4, + .mwdma_mask = ATA_MWDMA2, };static int __devinit sis5513_init_one (struct pci_dev *dev,const struct pci_device_id *id)
drivers/ide/pci/sl82c105.c +2 -10
@@ -368,12 +368,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) hwif->drives[0 ].io_32bit = hwif->drives[1 ].io_32bit =1 ; hwif->drives[0 ].unmask = hwif->drives[1 ].unmask =1 ; -/* -* We always autotune PIO, this is done before DMA is checked, -* so there's no risk of accidentally disabling DMA -*/ - hwif->drives[0 ].autotune = hwif->drives[1 ].autotune =1 ; -if (!hwif->dma_base)return ;
@@ -388,8 +382,7 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)return ; } - hwif->atapi_dma =1 ; - hwif->mwdma_mask =0x07 ; + hwif->mwdma_mask =ATA_MWDMA2 ; hwif->ide_dma_on = &sl82c105_ide_dma_on; hwif->dma_off_quietly = &sl82c105_dma_off_quietly;
@@ -405,9 +398,8 @@ static ide_pci_device_t sl82c105_chipset __devinitdata = { .name = "W82C105", .init_chipset = init_chipset_sl82c105, .init_hwif = init_hwif_sl82c105, - .autodma = NOAUTODMA, .enablebits = {{0x40,0x01,0x01}, {0x40,0x10,0x10}}, - .bootable = ON_BOARD, + .host_flags = IDE_HFLAG_NO_AUTODMA | IDE_HFLAG_BOOTABLE, .pio_mask = ATA_PIO5, };
drivers/ide/pci/slc90e66.c +4 -13
@@ -133,25 +133,14 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif)u8 reg47 =0 ;u8 mask = hwif->channel ?0x01 :0x02 ;/* bit0:Primary */ -if (!hwif->irq) - hwif->irq = hwif->channel ?15 :14 ; - hwif->set_pio_mode = &slc90e66_set_pio_mode; hwif->set_dma_mode = &slc90e66_set_dma_mode;pci_read_config_byte (hwif->pci_dev,0x47 , ®47); - hwif->drives[0 ].autotune =1 ; - hwif->drives[1 ].autotune =1 ; -if (hwif->dma_base ==0 )return ; - hwif->atapi_dma =1 ; - hwif->ultra_mask =0x1f ; - hwif->mwdma_mask =0x06 ; - hwif->swdma_mask =0x04 ; -if (hwif->cbl !=ATA_CBL_PATA40_SHORT )/* bit[0(1)]: 0:80, 1:40 */ hwif->cbl = (reg47 & mask) ?ATA_CBL_PATA40 :ATA_CBL_PATA80 ;
@@ -160,10 +149,12 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif)static ide_pci_device_t slc90e66_chipset__devinitdata = { .name ="SLC90E66" , .init_hwif = init_hwif_slc90e66, - .autodma =AUTODMA , .enablebits = {{0x41 ,0x80 ,0x80 }, {0x43 ,0x80 ,0x80 }}, - .bootable =ON_BOARD , + .host_flags =IDE_HFLAG_LEGACY_IRQS |IDE_HFLAG_BOOTABLE , .pio_mask =ATA_PIO4 , + .swdma_mask =ATA_SWDMA2_ONLY , + .mwdma_mask =ATA_MWDMA12_ONLY , + .udma_mask =ATA_UDMA4 , };static int __devinit slc90e66_init_one (struct pci_dev *dev,const struct pci_device_id *id)
drivers/ide/pci/tc86c001.c +10 -16
@@ -1,5 +1,5 @@/* -* drivers/ide/pci/tc86c001.c Version 1.00 Dec 12, 2006 +* drivers/ide/pci/tc86c001.c Version 1.01 Sep 5, 2007 * * Copyright (C) 2002 Toshiba Corporation * Copyright (C) 2005-2006 MontaVista Software, Inc. <[email protected]>
@@ -17,7 +17,7 @@ static void tc86c001_set_mode(ide_drive_t *drive, const u8 speed) {ide_hwif_t *hwif =HWIF (drive);unsigned long scr_port = hwif->config_data + (drive->dn ?0x02 :0x00 ); -u16 mode, scr = hwif->INW (scr_port); +u16 mode, scr =inw (scr_port);switch (speed) {case XFER_UDMA_4 : mode =0x00c0 ;break ;
@@ -65,7 +65,7 @@ static int tc86c001_timer_expiry(ide_drive_t *drive)ide_hwif_t *hwif =HWIF (drive);ide_expiry_t *expiry =ide_get_hwifdata (hwif);ide_hwgroup_t *hwgroup =HWGROUP (drive); -u8 dma_stat = hwif->INB (hwif->dma_status); +u8 dma_stat =inb (hwif->dma_status);/* Restore a higher level driver's expiry handler first. */ hwgroup->expiry = expiry;
@@ -73,7 +73,7 @@ static int tc86c001_timer_expiry(ide_drive_t *drive)if ((dma_stat &5 ) ==1 ) {/* DMA active and no interrupt */ unsigned long sc_base = hwif->config_data;unsigned long twcr_port = sc_base + (drive->dn ?0x06 :0x04 ); -u8 dma_cmd = hwif->INB (hwif->dma_command); +u8 dma_cmd =inb (hwif->dma_command);printk (KERN_WARNING "%s: DMA interrupt possibly stuck, " "attempting recovery...\n" , drive->name);
@@ -135,7 +135,7 @@ static int tc86c001_busproc(ide_drive_t *drive, int state)u16 scr1;/* System Control 1 Register bit 11 (ATA Hard Reset) read */ - scr1 = hwif->INW (sc_base +0x00 ); + scr1 =inw (sc_base +0x00 );switch (state) {case BUSSTATE_ON :
@@ -165,7 +165,7 @@ static int tc86c001_busproc(ide_drive_t *drive, int state)static void __devinit init_hwif_tc86c001 (ide_hwif_t *hwif) {unsigned long sc_base =pci_resource_start (hwif->pci_dev,5 ); -u16 scr1 = hwif->INW (sc_base +0x00 );; +u16 scr1 =inw (sc_base +0x00 );/* System Control 1 Register bit 15 (Soft Reset) set */ outw (scr1 |0x8000 , sc_base +0x00 );
@@ -184,8 +184,6 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) hwif->busproc = &tc86c001_busproc; - hwif->drives[0 ].autotune = hwif->drives[1 ].autotune =1 ; -if (!hwif->dma_base)return ;
Lines of this file are not shown. View the raw message.
drivers/ide/setup-pci.c +40 -28
68 lines not on this page · raw message
include/linux/ide.h +36 -22
58 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.