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>
This commit is contained in:
parent
9ffcf364f9
commit
238e4f142c
|
@ -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;
|
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)
|
if (block + rq->nr_sectors > 1ULL << 28)
|
||||||
dma = 0;
|
dma = 0;
|
||||||
else
|
else
|
||||||
|
@ -856,7 +856,7 @@ static int set_lba_addressing(ide_drive_t *drive, int arg)
|
||||||
|
|
||||||
drive->addressing = 0;
|
drive->addressing = 0;
|
||||||
|
|
||||||
if (HWIF(drive)->no_lba48)
|
if (drive->hwif->host_flags & IDE_HFLAG_NO_LBA48)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!idedisk_supports_lba48(drive->id))
|
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)
|
static void idedisk_setup (ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
struct hd_driveid *id = drive->id;
|
struct hd_driveid *id = drive->id;
|
||||||
unsigned long long capacity;
|
unsigned long long capacity;
|
||||||
|
|
||||||
|
@ -909,7 +910,6 @@ static void idedisk_setup (ide_drive_t *drive)
|
||||||
(void)set_lba_addressing(drive, 1);
|
(void)set_lba_addressing(drive, 1);
|
||||||
|
|
||||||
if (drive->addressing == 1) {
|
if (drive->addressing == 1) {
|
||||||
ide_hwif_t *hwif = HWIF(drive);
|
|
||||||
int max_s = 2048;
|
int max_s = 2048;
|
||||||
|
|
||||||
if (max_s > hwif->rqsize)
|
if (max_s > hwif->rqsize)
|
||||||
|
@ -932,7 +932,7 @@ static void idedisk_setup (ide_drive_t *drive)
|
||||||
drive->capacity64 = 1ULL << 28;
|
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) {
|
if (drive->capacity64 > 1ULL << 28) {
|
||||||
printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode will"
|
printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode will"
|
||||||
" be used for accessing sectors > %u\n",
|
" be used for accessing sectors > %u\n",
|
||||||
|
|
|
@ -951,7 +951,8 @@ static int ide_init_queue(ide_drive_t *drive)
|
||||||
blk_queue_segment_boundary(q, 0xffff);
|
blk_queue_segment_boundary(q, 0xffff);
|
||||||
|
|
||||||
if (!hwif->rqsize) {
|
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;
|
hwif->rqsize = 256;
|
||||||
else
|
else
|
||||||
hwif->rqsize = 65536;
|
hwif->rqsize = 65536;
|
||||||
|
|
|
@ -437,7 +437,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif)
|
||||||
|
|
||||||
hwif->mmio = tmp_hwif->mmio;
|
hwif->mmio = tmp_hwif->mmio;
|
||||||
hwif->rqsize = tmp_hwif->rqsize;
|
hwif->rqsize = tmp_hwif->rqsize;
|
||||||
hwif->no_lba48 = tmp_hwif->no_lba48;
|
|
||||||
|
|
||||||
#ifndef CONFIG_BLK_DEV_IDECS
|
#ifndef CONFIG_BLK_DEV_IDECS
|
||||||
hwif->irq = tmp_hwif->irq;
|
hwif->irq = tmp_hwif->irq;
|
||||||
|
|
|
@ -665,7 +665,8 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif)
|
||||||
hwif->udma_filter = &ali_udma_filter;
|
hwif->udma_filter = &ali_udma_filter;
|
||||||
|
|
||||||
/* don't use LBA48 DMA on ALi devices before rev 0xC5 */
|
/* 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) {
|
if (!hwif->dma_base) {
|
||||||
hwif->drives[0].autotune = 1;
|
hwif->drives[0].autotune = 1;
|
||||||
|
|
|
@ -250,7 +250,6 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif)
|
||||||
u8 reg = 0;
|
u8 reg = 0;
|
||||||
struct pci_dev *dev = hwif->pci_dev;
|
struct pci_dev *dev = hwif->pci_dev;
|
||||||
|
|
||||||
hwif->no_lba48 = 1;
|
|
||||||
hwif->chipset = ide_trm290;
|
hwif->chipset = ide_trm290;
|
||||||
cfgbase = pci_resource_start(dev, 4);
|
cfgbase = pci_resource_start(dev, 4);
|
||||||
if ((dev->class & 5) && cfgbase) {
|
if ((dev->class & 5) && cfgbase) {
|
||||||
|
@ -329,7 +328,8 @@ static ide_pci_device_t trm290_chipset __devinitdata = {
|
||||||
IDE_HFLAG_TRUST_BIOS_FOR_DMA |
|
IDE_HFLAG_TRUST_BIOS_FOR_DMA |
|
||||||
#endif
|
#endif
|
||||||
IDE_HFLAG_NO_AUTODMA |
|
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)
|
static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
|
|
|
@ -796,8 +796,6 @@ typedef struct hwif_s {
|
||||||
unsigned serialized : 1; /* serialized all channel operation */
|
unsigned serialized : 1; /* serialized all channel operation */
|
||||||
unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */
|
unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */
|
||||||
unsigned reset : 1; /* reset after probe */
|
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 auto_poll : 1; /* supports nop auto-poll */
|
||||||
unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
|
unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
|
||||||
unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */
|
unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */
|
||||||
|
@ -1254,6 +1252,10 @@ enum {
|
||||||
IDE_HFLAG_NO_AUTODMA = (1 << 15),
|
IDE_HFLAG_NO_AUTODMA = (1 << 15),
|
||||||
/* host is CS5510/CS5520 */
|
/* host is CS5510/CS5520 */
|
||||||
IDE_HFLAG_CS5520 = (1 << 16),
|
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
|
#ifdef CONFIG_BLK_DEV_OFFBOARD
|
||||||
|
|
Loading…
Reference in New Issue