Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=238e4f142c33bb34440cc64029dde7b9fbc4e65f
Commit:     238e4f142c33bb34440cc64029dde7b9fbc4e65f
Parent:     9ffcf364f9d0aca3ea79e9987c368eb75925460e
Author:     Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
AuthorDate: Fri Oct 19 00:30:07 2007 +0200
Committer:  Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
CommitDate: Fri Oct 19 00:30:07 2007 +0200

    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 <[EMAIL PROTECTED]>
    Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
---
 drivers/ide/ide-disk.c     |    8 ++++----
 drivers/ide/ide-probe.c    |    3 ++-
 drivers/ide/ide.c          |    1 -
 drivers/ide/pci/alim15x3.c |    3 ++-
 drivers/ide/pci/trm290.c   |    4 ++--
 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 92177ca..2722d91 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,
 
        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",
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 3c945d6..e294c74 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)
        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;
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index f78943f..961e6c8 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)
 
        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;
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c
index 4e034ac..79f5725 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)
        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;
diff --git a/drivers/ide/pci/trm290.c b/drivers/ide/pci/trm290.c
index 783ef45..140d486 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)
        u8 reg = 0;
        struct pci_dev *dev = hwif->pci_dev;
 
-       hwif->no_lba48 = 1;
        hwif->chipset = ide_trm290;
        cfgbase = pci_resource_start(dev, 4);
        if ((dev->class & 5) && cfgbase) {
@@ -329,7 +328,8 @@ static ide_pci_device_t trm290_chipset __devinitdata = {
                          IDE_HFLAG_TRUST_BIOS_FOR_DMA |
 #endif
                          IDE_HFLAG_NO_AUTODMA |
-                         IDE_HFLAG_BOOTABLE,
+                         IDE_HFLAG_BOOTABLE |
+                         IDE_HFLAG_NO_LBA48,
 };
 
 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 b721f0b..dced2e1 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -796,8 +796,6 @@ typedef struct hwif_s {
        unsigned        serialized : 1; /* serialized all channel operation */
        unsigned        sharing_irq: 1; /* 1 = sharing irq with another hwif */
        unsigned        reset      : 1; /* reset after probe */
-       unsigned        no_lba48   : 1; /* 1 = cannot do LBA48 */
-       unsigned        no_lba48_dma : 1; /* 1 = cannot do LBA48 DMA */
        unsigned        auto_poll  : 1; /* supports nop auto-poll */
        unsigned        sg_mapped  : 1; /* sg_table and sg_nents are ready */
        unsigned        no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */
@@ -1254,6 +1252,10 @@ enum {
        IDE_HFLAG_NO_AUTODMA            = (1 << 15),
        /* host is CS5510/CS5520 */
        IDE_HFLAG_CS5520                = (1 << 16),
+       /* no LBA48 */
+       IDE_HFLAG_NO_LBA48              = (1 << 17),
+       /* no LBA48 DMA */
+       IDE_HFLAG_NO_LBA48_DMA          = (1 << 18),
 };
 
 #ifdef CONFIG_BLK_DEV_OFFBOARD
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to