Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: ide-cd: fix missing residual count setting in DMA mode ht6560b: force prefetch for some devices ht6560b can only do up to PIO mode 4 linux/hdsmart.h: fix goofups (take 2) via82cxxx: add new PCI id for cx700 falconide: locking bugfix MAINTAINERS: update ide-cd maintainer's email address ide/libata: ST310211A has buggy HPA too ide: Add missing base addresses for falconide and macide
This commit is contained in:
commit
9a4c8546f3
12 changed files with 34 additions and 21 deletions
|
@ -1924,7 +1924,7 @@ S: Maintained
|
||||||
|
|
||||||
IDE/ATAPI CDROM DRIVER
|
IDE/ATAPI CDROM DRIVER
|
||||||
P: Borislav Petkov
|
P: Borislav Petkov
|
||||||
M: bbpetkov@yahoo.de
|
M: petkovbb@gmail.com
|
||||||
L: linux-ide@vger.kernel.org
|
L: linux-ide@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
|
|
@ -4190,6 +4190,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||||
/* Devices which report 1 sector over size HPA */
|
/* Devices which report 1 sector over size HPA */
|
||||||
{ "ST340823A", NULL, ATA_HORKAGE_HPA_SIZE, },
|
{ "ST340823A", NULL, ATA_HORKAGE_HPA_SIZE, },
|
||||||
{ "ST320413A", NULL, ATA_HORKAGE_HPA_SIZE, },
|
{ "ST320413A", NULL, ATA_HORKAGE_HPA_SIZE, },
|
||||||
|
{ "ST310211A", NULL, ATA_HORKAGE_HPA_SIZE, },
|
||||||
|
|
||||||
/* Devices which get the IVB wrong */
|
/* Devices which get the IVB wrong */
|
||||||
{ "QUANTUM FIREBALLlct10 05", "A03.0900", ATA_HORKAGE_IVB, },
|
{ "QUANTUM FIREBALLlct10 05", "A03.0900", ATA_HORKAGE_IVB, },
|
||||||
|
|
|
@ -1207,9 +1207,13 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
|
||||||
end_request:
|
end_request:
|
||||||
if (blk_pc_request(rq)) {
|
if (blk_pc_request(rq)) {
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
unsigned int dlen = rq->data_len;
|
||||||
|
|
||||||
|
if (dma)
|
||||||
|
rq->data_len = 0;
|
||||||
|
|
||||||
spin_lock_irqsave(&ide_lock, flags);
|
spin_lock_irqsave(&ide_lock, flags);
|
||||||
if (__blk_end_request(rq, 0, rq->data_len))
|
if (__blk_end_request(rq, 0, dlen))
|
||||||
BUG();
|
BUG();
|
||||||
HWGROUP(drive)->rq = NULL;
|
HWGROUP(drive)->rq = NULL;
|
||||||
spin_unlock_irqrestore(&ide_lock, flags);
|
spin_unlock_irqrestore(&ide_lock, flags);
|
||||||
|
|
|
@ -397,6 +397,7 @@ static inline int idedisk_supports_lba48(const struct hd_driveid *id)
|
||||||
static const struct drive_list_entry hpa_list[] = {
|
static const struct drive_list_entry hpa_list[] = {
|
||||||
{ "ST340823A", NULL },
|
{ "ST340823A", NULL },
|
||||||
{ "ST320413A", NULL },
|
{ "ST320413A", NULL },
|
||||||
|
{ "ST310211A", NULL },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,6 @@ static int __init ide_generic_init(void)
|
||||||
u8 idx[MAX_HWIFS];
|
u8 idx[MAX_HWIFS];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
|
|
||||||
ide_get_lock(NULL, NULL); /* for atari only */
|
|
||||||
|
|
||||||
for (i = 0; i < MAX_HWIFS; i++) {
|
for (i = 0; i < MAX_HWIFS; i++) {
|
||||||
ide_hwif_t *hwif = &ide_hwifs[i];
|
ide_hwif_t *hwif = &ide_hwifs[i];
|
||||||
|
|
||||||
|
@ -31,9 +28,6 @@ static int __init ide_generic_init(void)
|
||||||
|
|
||||||
ide_device_add_all(idx, NULL);
|
ide_device_add_all(idx, NULL);
|
||||||
|
|
||||||
if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
|
|
||||||
ide_release_lock(); /* for atari only */
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ static void __init falconide_setup_ports(hw_regs_t *hw)
|
||||||
for (i = 1; i < 8; i++)
|
for (i = 1; i < 8; i++)
|
||||||
hw->io_ports[i] = ATA_HD_BASE + 1 + i * 4;
|
hw->io_ports[i] = ATA_HD_BASE + 1 + i * 4;
|
||||||
|
|
||||||
hw->io_ports[IDE_CONTROL_OFFSET] = ATA_HD_CONTROL;
|
hw->io_ports[IDE_CONTROL_OFFSET] = ATA_HD_BASE + ATA_HD_CONTROL;
|
||||||
|
|
||||||
hw->irq = IRQ_MFP_IDE;
|
hw->irq = IRQ_MFP_IDE;
|
||||||
hw->ack_intr = NULL;
|
hw->ack_intr = NULL;
|
||||||
|
@ -84,7 +84,9 @@ static int __init falconide_init(void)
|
||||||
ide_init_port_data(hwif, index);
|
ide_init_port_data(hwif, index);
|
||||||
ide_init_port_hw(hwif, &hw);
|
ide_init_port_hw(hwif, &hw);
|
||||||
|
|
||||||
|
ide_get_lock(NULL, NULL);
|
||||||
ide_device_add(idx, NULL);
|
ide_device_add(idx, NULL);
|
||||||
|
ide_release_lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -21,18 +21,21 @@
|
||||||
* "Prefetch" mode bit OFF for ide disks and
|
* "Prefetch" mode bit OFF for ide disks and
|
||||||
* ON for anything else.
|
* ON for anything else.
|
||||||
*
|
*
|
||||||
|
* Version 0.08 Need to force prefetch for CDs and other non-disk
|
||||||
|
* devices. (not sure which devices exactly need
|
||||||
|
* prefetch)
|
||||||
*
|
*
|
||||||
* HT-6560B EIDE-controller support
|
* HT-6560B EIDE-controller support
|
||||||
* To activate controller support use kernel parameter "ide0=ht6560b".
|
* To activate controller support use kernel parameter "ide0=ht6560b".
|
||||||
* Use hdparm utility to enable PIO mode support.
|
* Use hdparm utility to enable PIO mode support.
|
||||||
*
|
*
|
||||||
* Author: Mikko Ala-Fossi <maf@iki.fi>
|
* Author: Mikko Ala-Fossi <maf@iki.fi>
|
||||||
* Jan Evert van Grootheest <janevert@iae.nl>
|
* Jan Evert van Grootheest <janevert@caiway.nl>
|
||||||
*
|
*
|
||||||
* Try: http://www.maf.iki.fi/~maf/ht6560b/
|
* Try: http://www.maf.iki.fi/~maf/ht6560b/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define HT6560B_VERSION "v0.07"
|
#define HT6560B_VERSION "v0.08"
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
@ -130,15 +133,20 @@ static void ht6560b_selectproc (ide_drive_t *drive)
|
||||||
u8 select, timing;
|
u8 select, timing;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
|
|
||||||
select = HT_CONFIG(drive);
|
select = HT_CONFIG(drive);
|
||||||
timing = HT_TIMING(drive);
|
timing = HT_TIMING(drive);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Need to enforce prefetch sometimes because otherwise
|
||||||
|
* it'll hang (hard).
|
||||||
|
*/
|
||||||
|
if (drive->media != ide_disk || !drive->present)
|
||||||
|
select |= HT_PREFETCH_MODE;
|
||||||
|
|
||||||
if (select != current_select || timing != current_timing) {
|
if (select != current_select || timing != current_timing) {
|
||||||
current_select = select;
|
current_select = select;
|
||||||
current_timing = timing;
|
current_timing = timing;
|
||||||
if (drive->media != ide_disk || !drive->present)
|
|
||||||
select |= HT_PREFETCH_MODE;
|
|
||||||
(void)inb(HT_CONFIG_PORT);
|
(void)inb(HT_CONFIG_PORT);
|
||||||
(void)inb(HT_CONFIG_PORT);
|
(void)inb(HT_CONFIG_PORT);
|
||||||
(void)inb(HT_CONFIG_PORT);
|
(void)inb(HT_CONFIG_PORT);
|
||||||
|
@ -188,11 +196,12 @@ static int __init try_to_init_ht6560b(void)
|
||||||
outb(HT_TIMING_DEFAULT, 0x1f6); /* IDE_SELECT_REG */
|
outb(HT_TIMING_DEFAULT, 0x1f6); /* IDE_SELECT_REG */
|
||||||
(void) inb(0x1f7); /* IDE_STATUS_REG */
|
(void) inb(0x1f7); /* IDE_STATUS_REG */
|
||||||
|
|
||||||
printk("\nht6560b " HT6560B_VERSION
|
printk("ht6560b " HT6560B_VERSION
|
||||||
": chipset detected and initialized"
|
": chipset detected and initialized"
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
" with debug enabled"
|
" with debug enabled"
|
||||||
#endif
|
#endif
|
||||||
|
"\n"
|
||||||
);
|
);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -323,7 +332,7 @@ static const struct ide_port_info ht6560b_port_info __initdata = {
|
||||||
IDE_HFLAG_NO_DMA |
|
IDE_HFLAG_NO_DMA |
|
||||||
IDE_HFLAG_NO_AUTOTUNE |
|
IDE_HFLAG_NO_AUTOTUNE |
|
||||||
IDE_HFLAG_ABUSE_PREFETCH,
|
IDE_HFLAG_ABUSE_PREFETCH,
|
||||||
.pio_mask = ATA_PIO5,
|
.pio_mask = ATA_PIO4,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init ht6560b_init(void)
|
static int __init ht6560b_init(void)
|
||||||
|
|
|
@ -74,7 +74,7 @@ static void __init macide_setup_ports(hw_regs_t *hw, unsigned long base,
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
hw->io_ports[i] = base + i * 4;
|
hw->io_ports[i] = base + i * 4;
|
||||||
|
|
||||||
hw->io_ports[IDE_CONTROL_OFFSET] = IDE_CONTROL;
|
hw->io_ports[IDE_CONTROL_OFFSET] = base + IDE_CONTROL;
|
||||||
|
|
||||||
hw->irq = irq;
|
hw->irq = irq;
|
||||||
hw->ack_intr = ack_intr;
|
hw->ack_intr = ack_intr;
|
||||||
|
|
|
@ -479,6 +479,7 @@ static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_i
|
||||||
static const struct pci_device_id via_pci_tbl[] = {
|
static const struct pci_device_id via_pci_tbl[] = {
|
||||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), 0 },
|
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), 0 },
|
||||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C586_1), 0 },
|
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C586_1), 0 },
|
||||||
|
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_CX700_IDE), 0 },
|
||||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_6410), 1 },
|
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_6410), 1 },
|
||||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_SATA_EIDE), 1 },
|
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_SATA_EIDE), 1 },
|
||||||
{ 0, },
|
{ 0, },
|
||||||
|
|
|
@ -70,7 +70,6 @@ header-y += fuse.h
|
||||||
header-y += genetlink.h
|
header-y += genetlink.h
|
||||||
header-y += gen_stats.h
|
header-y += gen_stats.h
|
||||||
header-y += gigaset_dev.h
|
header-y += gigaset_dev.h
|
||||||
header-y += hdsmart.h
|
|
||||||
header-y += hysdn_if.h
|
header-y += hysdn_if.h
|
||||||
header-y += i2o-dev.h
|
header-y += i2o-dev.h
|
||||||
header-y += i8k.h
|
header-y += i8k.h
|
||||||
|
@ -211,6 +210,7 @@ unifdef-y += hayesesp.h
|
||||||
unifdef-y += hdlcdrv.h
|
unifdef-y += hdlcdrv.h
|
||||||
unifdef-y += hdlc.h
|
unifdef-y += hdlc.h
|
||||||
unifdef-y += hdreg.h
|
unifdef-y += hdreg.h
|
||||||
|
unifdef-y += hdsmart.h
|
||||||
unifdef-y += hiddev.h
|
unifdef-y += hiddev.h
|
||||||
unifdef-y += hpet.h
|
unifdef-y += hpet.h
|
||||||
unifdef-y += i2c.h
|
unifdef-y += i2c.h
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#ifndef _LINUX_HDSMART_H
|
#ifndef _LINUX_HDSMART_H
|
||||||
#define _LINUX_HDSMART_H
|
#define _LINUX_HDSMART_H
|
||||||
|
|
||||||
#ifndef __KERNEL
|
#ifndef __KERNEL__
|
||||||
#define OFFLINE_FULL_SCAN 0
|
#define OFFLINE_FULL_SCAN 0
|
||||||
#define SHORT_SELF_TEST 1
|
#define SHORT_SELF_TEST 1
|
||||||
#define EXTEND_SELF_TEST 2
|
#define EXTEND_SELF_TEST 2
|
||||||
|
@ -121,6 +121,6 @@ typedef struct ata_smart_selftestlog_s {
|
||||||
unsigned char resevered[2];
|
unsigned char resevered[2];
|
||||||
unsigned char chksum;
|
unsigned char chksum;
|
||||||
} __attribute__ ((packed)) ata_smart_selftestlog_t;
|
} __attribute__ ((packed)) ata_smart_selftestlog_t;
|
||||||
#endif /* __KERNEL__ *
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#endif /* _LINUX_HDSMART_H */
|
#endif /* _LINUX_HDSMART_H */
|
||||||
|
|
|
@ -1351,6 +1351,7 @@
|
||||||
#define PCI_DEVICE_ID_VIA_8231_4 0x8235
|
#define PCI_DEVICE_ID_VIA_8231_4 0x8235
|
||||||
#define PCI_DEVICE_ID_VIA_8365_1 0x8305
|
#define PCI_DEVICE_ID_VIA_8365_1 0x8305
|
||||||
#define PCI_DEVICE_ID_VIA_CX700 0x8324
|
#define PCI_DEVICE_ID_VIA_CX700 0x8324
|
||||||
|
#define PCI_DEVICE_ID_VIA_CX700_IDE 0x0581
|
||||||
#define PCI_DEVICE_ID_VIA_VX800 0x8353
|
#define PCI_DEVICE_ID_VIA_VX800 0x8353
|
||||||
#define PCI_DEVICE_ID_VIA_8371_1 0x8391
|
#define PCI_DEVICE_ID_VIA_8371_1 0x8391
|
||||||
#define PCI_DEVICE_ID_VIA_82C598_1 0x8598
|
#define PCI_DEVICE_ID_VIA_82C598_1 0x8598
|
||||||
|
|
Loading…
Add table
Reference in a new issue