diff options
| author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-18 18:30:07 -0400 |
|---|---|---|
| committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-18 18:30:07 -0400 |
| commit | 238e4f142c33bb34440cc64029dde7b9fbc4e65f (patch) | |
| tree | 5fc96f650cf6d326a4bc1e0026cd8ddeb9b9aa94 | |
| parent | 9ffcf364f9d0aca3ea79e9987c368eb75925460e (diff) | |
ide: add IDE_HFLAG_NO_LBA48 and IDE_HFLAG_NO_LBA48_DMA host flags
Add IDE_HFLAG_NO_LBA48[_DMA] host flags, use it instead of hwif->no_lba48[_dma]
and then remove no longer needed hwif->no_lba48[_dma]. As a side-effect
this change fixes hwif->no_lba48_dma not being restored by ide_hwif_restore().
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
| -rw-r--r-- | drivers/ide/ide-disk.c | 8 | ||||
| -rw-r--r-- | drivers/ide/ide-probe.c | 3 | ||||
| -rw-r--r-- | drivers/ide/ide.c | 1 | ||||
| -rw-r--r-- | drivers/ide/pci/alim15x3.c | 3 | ||||
| -rw-r--r-- | drivers/ide/pci/trm290.c | 4 | ||||
| -rw-r--r-- | include/linux/ide.h | 6 |
6 files changed, 14 insertions, 11 deletions
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 92177ca48b4d..2722d9165b6b 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c | |||
| @@ -169,7 +169,7 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, | |||
| 169 | 169 | ||
| 170 | nsectors.all = (u16) rq->nr_sectors; | 170 | nsectors.all = (u16) rq->nr_sectors; |
| 171 | 171 | ||
| 172 | if (hwif->no_lba48_dma && lba48 && dma) { | 172 | if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && lba48 && dma) { |
| 173 | if (block + rq->nr_sectors > 1ULL << 28) | 173 | if (block + rq->nr_sectors > 1ULL << 28) |
| 174 | dma = 0; | 174 | dma = 0; |
| 175 | else | 175 | else |
| @@ -856,7 +856,7 @@ static int set_lba_addressing(ide_drive_t *drive, int arg) | |||
| 856 | 856 | ||
| 857 | drive->addressing = 0; | 857 | drive->addressing = 0; |
| 858 | 858 | ||
| 859 | if (HWIF(drive)->no_lba48) | 859 | if (drive->hwif->host_flags & IDE_HFLAG_NO_LBA48) |
| 860 | return 0; | 860 | return 0; |
| 861 | 861 | ||
| 862 | if (!idedisk_supports_lba48(drive->id)) | 862 | if (!idedisk_supports_lba48(drive->id)) |
| @@ -889,6 +889,7 @@ static inline void idedisk_add_settings(ide_drive_t *drive) { ; } | |||
| 889 | 889 | ||
| 890 | static void idedisk_setup (ide_drive_t *drive) | 890 | static void idedisk_setup (ide_drive_t *drive) |
| 891 | { | 891 | { |
| 892 | ide_hwif_t *hwif = drive->hwif; | ||
| 892 | struct hd_driveid *id = drive->id; | 893 | struct hd_driveid *id = drive->id; |
| 893 | unsigned long long capacity; | 894 | unsigned long long capacity; |
| 894 | 895 | ||
| @@ -909,7 +910,6 @@ static void idedisk_setup (ide_drive_t *drive) | |||
| 909 | (void)set_lba_addressing(drive, 1); | 910 | (void)set_lba_addressing(drive, 1); |
| 910 | 911 | ||
| 911 | if (drive->addressing == 1) { | 912 | if (drive->addressing == 1) { |
| 912 | ide_hwif_t *hwif = HWIF(drive); | ||
| 913 | int max_s = 2048; | 913 | int max_s = 2048; |
| 914 | 914 | ||
| 915 | if (max_s > hwif->rqsize) | 915 | if (max_s > hwif->rqsize) |
| @@ -932,7 +932,7 @@ static void idedisk_setup (ide_drive_t *drive) | |||
| 932 | drive->capacity64 = 1ULL << 28; | 932 | drive->capacity64 = 1ULL << 28; |
| 933 | } | 933 | } |
| 934 | 934 | ||
| 935 | if (drive->hwif->no_lba48_dma && drive->addressing) { | 935 | if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && drive->addressing) { |
| 936 | if (drive->capacity64 > 1ULL << 28) { | 936 | if (drive->capacity64 > 1ULL << 28) { |
| 937 | printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode will" | 937 | printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode will" |
| 938 | " be used for accessing sectors > %u\n", | 938 | " be used for accessing sectors > %u\n", |
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 3c945d64d845..e294c7415c27 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
| @@ -951,7 +951,8 @@ static int ide_init_queue(ide_drive_t *drive) | |||
| 951 | blk_queue_segment_boundary(q, 0xffff); | 951 | blk_queue_segment_boundary(q, 0xffff); |
| 952 | 952 | ||
| 953 | if (!hwif->rqsize) { | 953 | if (!hwif->rqsize) { |
| 954 | if (hwif->no_lba48 || hwif->no_lba48_dma) | 954 | if ((hwif->host_flags & IDE_HFLAG_NO_LBA48) || |
| 955 | (hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA)) | ||
| 955 | hwif->rqsize = 256; | 956 | hwif->rqsize = 256; |
| 956 | else | 957 | else |
| 957 | hwif->rqsize = 65536; | 958 | hwif->rqsize = 65536; |
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index f78943f86314..961e6c897286 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
| @@ -437,7 +437,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) | |||
| 437 | 437 | ||
| 438 | hwif->mmio = tmp_hwif->mmio; | 438 | hwif->mmio = tmp_hwif->mmio; |
| 439 | hwif->rqsize = tmp_hwif->rqsize; | 439 | hwif->rqsize = tmp_hwif->rqsize; |
| 440 | hwif->no_lba48 = tmp_hwif->no_lba48; | ||
| 441 | 440 | ||
| 442 | #ifndef CONFIG_BLK_DEV_IDECS | 441 | #ifndef CONFIG_BLK_DEV_IDECS |
| 443 | hwif->irq = tmp_hwif->irq; | 442 | hwif->irq = tmp_hwif->irq; |
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index 4e034acc61b3..79f572572ffb 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c | |||
| @@ -665,7 +665,8 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif) | |||
| 665 | hwif->udma_filter = &ali_udma_filter; | 665 | hwif->udma_filter = &ali_udma_filter; |
| 666 | 666 | ||
| 667 | /* don't use LBA48 DMA on ALi devices before rev 0xC5 */ | 667 | /* don't use LBA48 DMA on ALi devices before rev 0xC5 */ |
| 668 | hwif->no_lba48_dma = (m5229_revision <= 0xC4) ? 1 : 0; | 668 | if (m5229_revision <= 0xC4) |
| 669 | hwif->host_flags |= IDE_HFLAG_NO_LBA48_DMA; | ||
| 669 | 670 | ||
| 670 | if (!hwif->dma_base) { | 671 | if (!hwif->dma_base) { |
| 671 | hwif->drives[0].autotune = 1; | 672 | hwif->drives[0].autotune = 1; |
diff --git a/drivers/ide/pci/trm290.c b/drivers/ide/pci/trm290.c index 783ef457eb60..140d486f6237 100644 --- a/drivers/ide/pci/trm290.c +++ b/drivers/ide/pci/trm290.c | |||
| @@ -250,7 +250,6 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif) | |||
| 250 | u8 reg = 0; | 250 | u8 reg = 0; |
| 251 | struct pci_dev *dev = hwif->pci_dev; | 251 | struct pci_dev *dev = hwif->pci_dev; |
| 252 | 252 | ||
| 253 | hwif->no_lba48 = 1; | ||
| 254 | hwif->chipset = ide_trm290; | 253 | hwif->chipset = ide_trm290; |
| 255 | cfgbase = pci_resource_start(dev, 4); | 254 | cfgbase = pci_resource_start(dev, 4); |
| 256 | if ((dev->class & 5) && cfgbase) { | 255 | if ((dev->class & 5) && cfgbase) { |
| @@ -329,7 +328,8 @@ static ide_pci_device_t trm290_chipset __devinitdata = { | |||
| 329 | IDE_HFLAG_TRUST_BIOS_FOR_DMA | | 328 | IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
| 330 | #endif | 329 | #endif |
| 331 | IDE_HFLAG_NO_AUTODMA | | 330 | IDE_HFLAG_NO_AUTODMA | |
| 332 | IDE_HFLAG_BOOTABLE, | 331 | IDE_HFLAG_BOOTABLE | |
| 332 | IDE_HFLAG_NO_LBA48, | ||
| 333 | }; | 333 | }; |
| 334 | 334 | ||
| 335 | static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 335 | static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
diff --git a/include/linux/ide.h b/include/linux/ide.h index b721f0b379f6..dced2e176d9f 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -796,8 +796,6 @@ typedef struct hwif_s { | |||
| 796 | unsigned serialized : 1; /* serialized all channel operation */ | 796 | unsigned serialized : 1; /* serialized all channel operation */ |
| 797 | unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ | 797 | unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ |
| 798 | unsigned reset : 1; /* reset after probe */ | 798 | unsigned reset : 1; /* reset after probe */ |
| 799 | unsigned no_lba48 : 1; /* 1 = cannot do LBA48 */ | ||
| 800 | unsigned no_lba48_dma : 1; /* 1 = cannot do LBA48 DMA */ | ||
| 801 | unsigned auto_poll : 1; /* supports nop auto-poll */ | 799 | unsigned auto_poll : 1; /* supports nop auto-poll */ |
| 802 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ | 800 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ |
| 803 | unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */ | 801 | unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */ |
| @@ -1254,6 +1252,10 @@ enum { | |||
| 1254 | IDE_HFLAG_NO_AUTODMA = (1 << 15), | 1252 | IDE_HFLAG_NO_AUTODMA = (1 << 15), |
| 1255 | /* host is CS5510/CS5520 */ | 1253 | /* host is CS5510/CS5520 */ |
| 1256 | IDE_HFLAG_CS5520 = (1 << 16), | 1254 | IDE_HFLAG_CS5520 = (1 << 16), |
| 1255 | /* no LBA48 */ | ||
| 1256 | IDE_HFLAG_NO_LBA48 = (1 << 17), | ||
| 1257 | /* no LBA48 DMA */ | ||
| 1258 | IDE_HFLAG_NO_LBA48_DMA = (1 << 18), | ||
| 1257 | }; | 1259 | }; |
| 1258 | 1260 | ||
| 1259 | #ifdef CONFIG_BLK_DEV_OFFBOARD | 1261 | #ifdef CONFIG_BLK_DEV_OFFBOARD |
