forked from Minki/linux
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
@ -1924,7 +1924,7 @@ S: Maintained
|
||||
|
||||
IDE/ATAPI CDROM DRIVER
|
||||
P: Borislav Petkov
|
||||
M: bbpetkov@yahoo.de
|
||||
M: petkovbb@gmail.com
|
||||
L: linux-ide@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
|
@ -4190,6 +4190,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||
/* Devices which report 1 sector over size HPA */
|
||||
{ "ST340823A", NULL, ATA_HORKAGE_HPA_SIZE, },
|
||||
{ "ST320413A", NULL, ATA_HORKAGE_HPA_SIZE, },
|
||||
{ "ST310211A", NULL, ATA_HORKAGE_HPA_SIZE, },
|
||||
|
||||
/* Devices which get the IVB wrong */
|
||||
{ "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:
|
||||
if (blk_pc_request(rq)) {
|
||||
unsigned long flags;
|
||||
unsigned int dlen = rq->data_len;
|
||||
|
||||
if (dma)
|
||||
rq->data_len = 0;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
if (__blk_end_request(rq, 0, rq->data_len))
|
||||
if (__blk_end_request(rq, 0, dlen))
|
||||
BUG();
|
||||
HWGROUP(drive)->rq = NULL;
|
||||
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[] = {
|
||||
{ "ST340823A", NULL },
|
||||
{ "ST320413A", NULL },
|
||||
{ "ST310211A", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
@ -17,9 +17,6 @@ static int __init ide_generic_init(void)
|
||||
u8 idx[MAX_HWIFS];
|
||||
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++) {
|
||||
ide_hwif_t *hwif = &ide_hwifs[i];
|
||||
|
||||
@ -31,9 +28,6 @@ static int __init ide_generic_init(void)
|
||||
|
||||
ide_device_add_all(idx, NULL);
|
||||
|
||||
if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
|
||||
ide_release_lock(); /* for atari only */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -54,7 +54,7 @@ static void __init falconide_setup_ports(hw_regs_t *hw)
|
||||
for (i = 1; i < 8; i++)
|
||||
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->ack_intr = NULL;
|
||||
@ -84,7 +84,9 @@ static int __init falconide_init(void)
|
||||
ide_init_port_data(hwif, index);
|
||||
ide_init_port_hw(hwif, &hw);
|
||||
|
||||
ide_get_lock(NULL, NULL);
|
||||
ide_device_add(idx, NULL);
|
||||
ide_release_lock();
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -21,18 +21,21 @@
|
||||
* "Prefetch" mode bit OFF for ide disks and
|
||||
* 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
|
||||
* To activate controller support use kernel parameter "ide0=ht6560b".
|
||||
* Use hdparm utility to enable PIO mode support.
|
||||
*
|
||||
* 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/
|
||||
*/
|
||||
|
||||
#define HT6560B_VERSION "v0.07"
|
||||
#define HT6560B_VERSION "v0.08"
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
@ -130,15 +133,20 @@ static void ht6560b_selectproc (ide_drive_t *drive)
|
||||
u8 select, timing;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
|
||||
select = HT_CONFIG(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) {
|
||||
current_select = select;
|
||||
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);
|
||||
@ -188,11 +196,12 @@ static int __init try_to_init_ht6560b(void)
|
||||
outb(HT_TIMING_DEFAULT, 0x1f6); /* IDE_SELECT_REG */
|
||||
(void) inb(0x1f7); /* IDE_STATUS_REG */
|
||||
|
||||
printk("\nht6560b " HT6560B_VERSION
|
||||
printk("ht6560b " HT6560B_VERSION
|
||||
": chipset detected and initialized"
|
||||
#ifdef DEBUG
|
||||
" with debug enabled"
|
||||
#endif
|
||||
"\n"
|
||||
);
|
||||
return 1;
|
||||
}
|
||||
@ -323,7 +332,7 @@ static const struct ide_port_info ht6560b_port_info __initdata = {
|
||||
IDE_HFLAG_NO_DMA |
|
||||
IDE_HFLAG_NO_AUTOTUNE |
|
||||
IDE_HFLAG_ABUSE_PREFETCH,
|
||||
.pio_mask = ATA_PIO5,
|
||||
.pio_mask = ATA_PIO4,
|
||||
};
|
||||
|
||||
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++)
|
||||
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->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[] = {
|
||||
{ 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_CX700_IDE), 0 },
|
||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_6410), 1 },
|
||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_SATA_EIDE), 1 },
|
||||
{ 0, },
|
||||
|
@ -70,7 +70,6 @@ header-y += fuse.h
|
||||
header-y += genetlink.h
|
||||
header-y += gen_stats.h
|
||||
header-y += gigaset_dev.h
|
||||
header-y += hdsmart.h
|
||||
header-y += hysdn_if.h
|
||||
header-y += i2o-dev.h
|
||||
header-y += i8k.h
|
||||
@ -211,6 +210,7 @@ unifdef-y += hayesesp.h
|
||||
unifdef-y += hdlcdrv.h
|
||||
unifdef-y += hdlc.h
|
||||
unifdef-y += hdreg.h
|
||||
unifdef-y += hdsmart.h
|
||||
unifdef-y += hiddev.h
|
||||
unifdef-y += hpet.h
|
||||
unifdef-y += i2c.h
|
||||
|
@ -17,7 +17,7 @@
|
||||
#ifndef _LINUX_HDSMART_H
|
||||
#define _LINUX_HDSMART_H
|
||||
|
||||
#ifndef __KERNEL
|
||||
#ifndef __KERNEL__
|
||||
#define OFFLINE_FULL_SCAN 0
|
||||
#define SHORT_SELF_TEST 1
|
||||
#define EXTEND_SELF_TEST 2
|
||||
@ -121,6 +121,6 @@ typedef struct ata_smart_selftestlog_s {
|
||||
unsigned char resevered[2];
|
||||
unsigned char chksum;
|
||||
} __attribute__ ((packed)) ata_smart_selftestlog_t;
|
||||
#endif /* __KERNEL__ *
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _LINUX_HDSMART_H */
|
||||
|
@ -1351,6 +1351,7 @@
|
||||
#define PCI_DEVICE_ID_VIA_8231_4 0x8235
|
||||
#define PCI_DEVICE_ID_VIA_8365_1 0x8305
|
||||
#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_8371_1 0x8391
|
||||
#define PCI_DEVICE_ID_VIA_82C598_1 0x8598
|
||||
|
Loading…
Reference in New Issue
Block a user