提交 9a4c8546 编写于 作者: L Linus Torvalds

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
...@@ -1924,7 +1924,7 @@ S: Maintained ...@@ -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 [] = { ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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 = { ...@@ -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, ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 @@ ...@@ -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 { ...@@ -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 @@ ...@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册