Commit eedcdefb authored by Linus Torvalds's avatar 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: remove stale comment from ide-lib.c
  ide: fix comment in init_irq()
  ide: ide_init_port() bugfix
  ide-disk: fix flush requests (take 2)
  ide: introduce CONFIG_BLK_DEV_IDEDMA_SFF option
  bast-ide: build fix
  ide-tape: remove never executed code
  ide: fix ide/legacy/gayle.c compilation
  ide-cd: replace ntohs with generic byteorder macro be16_to_cpu
  ide: remove stale version number
  pdc202xx_old: always enable burst mode
  palm_bk3710: use struct ide_port_info
  palm_bk3710: port initialization/probing bugfix
  palm_bk3710: fix ide_unregister() usage
  palm_bk3710: ide_register_hw() -> ide_device_add()
  ide: insert BUG_ON() into __ide_set_handler() (take 2)
  cs5520: remove stale comment
  ide: another possible ide panic fix for blk-end-request
parents 9585ca02 467390a2
...@@ -378,6 +378,9 @@ config BLK_DEV_IDEPNP ...@@ -378,6 +378,9 @@ config BLK_DEV_IDEPNP
would like the kernel to automatically detect and activate would like the kernel to automatically detect and activate
it, say Y here. it, say Y here.
config BLK_DEV_IDEDMA_SFF
bool
if PCI if PCI
comment "PCI IDE chipsets support" comment "PCI IDE chipsets support"
...@@ -459,6 +462,7 @@ config BLK_DEV_RZ1000 ...@@ -459,6 +462,7 @@ config BLK_DEV_RZ1000
config BLK_DEV_IDEDMA_PCI config BLK_DEV_IDEDMA_PCI
bool bool
select BLK_DEV_IDEPCI select BLK_DEV_IDEPCI
select BLK_DEV_IDEDMA_SFF
config BLK_DEV_AEC62XX config BLK_DEV_AEC62XX
tristate "AEC62XX chipset support" tristate "AEC62XX chipset support"
...@@ -688,23 +692,6 @@ config BLK_DEV_PDC202XX_OLD ...@@ -688,23 +692,6 @@ config BLK_DEV_PDC202XX_OLD
If unsure, say N. If unsure, say N.
config PDC202XX_BURST
bool "Special UDMA Feature"
depends on BLK_DEV_PDC202XX_OLD
help
This option causes the pdc202xx driver to enable UDMA modes on the
PDC202xx even when the PDC202xx BIOS has not done so.
It was originally designed for the PDC20246/Ultra33, whose BIOS will
only setup UDMA on the first two PDC20246 cards. It has also been
used successfully on a PDC20265/Ultra100, allowing use of UDMA modes
when the PDC20265 BIOS has been disabled (for faster boot up).
Please read the comments at the top of
<file:drivers/ide/pci/pdc202xx_old.c>.
If unsure, say N.
config BLK_DEV_PDC202XX_NEW config BLK_DEV_PDC202XX_NEW
tristate "PROMISE PDC202{68|69|70|71|75|76|77} support" tristate "PROMISE PDC202{68|69|70|71|75|76|77} support"
select BLK_DEV_IDEDMA_PCI select BLK_DEV_IDEDMA_PCI
...@@ -1016,7 +1003,7 @@ config BLK_DEV_Q40IDE ...@@ -1016,7 +1003,7 @@ config BLK_DEV_Q40IDE
config BLK_DEV_PALMCHIP_BK3710 config BLK_DEV_PALMCHIP_BK3710
tristate "Palmchip bk3710 IDE controller support" tristate "Palmchip bk3710 IDE controller support"
depends on ARCH_DAVINCI depends on ARCH_DAVINCI
select BLK_DEV_IDEDMA_PCI select BLK_DEV_IDEDMA_SFF
help help
Say Y here if you want to support the onchip IDE controller on the Say Y here if you want to support the onchip IDE controller on the
TI DaVinci SoC TI DaVinci SoC
...@@ -1124,7 +1111,8 @@ config BLK_DEV_UMC8672 ...@@ -1124,7 +1111,8 @@ config BLK_DEV_UMC8672
endif endif
config BLK_DEV_IDEDMA config BLK_DEV_IDEDMA
def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA def_bool BLK_DEV_IDEDMA_SFF || BLK_DEV_IDEDMA_PMAC || \
BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
config IDE_ARCH_OBSOLETE_INIT config IDE_ARCH_OBSOLETE_INIT
def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC
......
...@@ -21,12 +21,7 @@ ...@@ -21,12 +21,7 @@
#include <asm/arch/bast-map.h> #include <asm/arch/bast-map.h>
#include <asm/arch/bast-irq.h> #include <asm/arch/bast-irq.h>
/* list of registered interfaces */ static int __init bastide_register(unsigned int base, unsigned int aux, int irq)
static ide_hwif_t *ifs[2];
static int __init
bastide_register(unsigned int base, unsigned int aux, int irq,
ide_hwif_t **hwif)
{ {
ide_hwif_t *hwif; ide_hwif_t *hwif;
hw_regs_t hw; hw_regs_t hw;
...@@ -76,8 +71,9 @@ static int __init bastide_init(void) ...@@ -76,8 +71,9 @@ static int __init bastide_init(void)
printk("BAST: IDE driver, (c) 2003-2004 Simtec Electronics\n"); printk("BAST: IDE driver, (c) 2003-2004 Simtec Electronics\n");
bastide_register(BAST_VA_IDEPRI, BAST_VA_IDEPRIAUX, IRQ_IDE0, &ifs[0]); bastide_register(BAST_VA_IDEPRI, BAST_VA_IDEPRIAUX, IRQ_IDE0);
bastide_register(BAST_VA_IDESEC, BAST_VA_IDESECAUX, IRQ_IDE1, &ifs[1]); bastide_register(BAST_VA_IDESEC, BAST_VA_IDESECAUX, IRQ_IDE1);
return 0; return 0;
} }
......
...@@ -311,15 +311,37 @@ static void __devinit palm_bk3710_chipinit(void __iomem *base) ...@@ -311,15 +311,37 @@ static void __devinit palm_bk3710_chipinit(void __iomem *base)
palm_bk3710_setpiomode(base, NULL, 0, 600, 0); palm_bk3710_setpiomode(base, NULL, 0, 600, 0);
palm_bk3710_setpiomode(base, NULL, 1, 600, 0); palm_bk3710_setpiomode(base, NULL, 1, 600, 0);
} }
static u8 __devinit palm_bk3710_cable_detect(ide_hwif_t *hwif)
{
return ATA_CBL_PATA80;
}
static void __devinit palm_bk3710_init_hwif(ide_hwif_t *hwif)
{
hwif->set_pio_mode = palm_bk3710_set_pio_mode;
hwif->set_dma_mode = palm_bk3710_set_dma_mode;
hwif->cable_detect = palm_bk3710_cable_detect;
}
static const struct ide_port_info __devinitdata palm_bk3710_port_info = {
.init_hwif = palm_bk3710_init_hwif,
.host_flags = IDE_HFLAG_NO_DMA, /* hack (no PCI) */
.pio_mask = ATA_PIO4,
.udma_mask = ATA_UDMA4, /* (input clk 99MHz) */
.mwdma_mask = ATA_MWDMA2,
};
static int __devinit palm_bk3710_probe(struct platform_device *pdev) static int __devinit palm_bk3710_probe(struct platform_device *pdev)
{ {
hw_regs_t ide_ctlr_info;
int index = 0;
int pribase;
struct clk *clkp; struct clk *clkp;
struct resource *mem, *irq; struct resource *mem, *irq;
ide_hwif_t *hwif; ide_hwif_t *hwif;
void __iomem *base; void __iomem *base;
int pribase, i;
hw_regs_t hw;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
clkp = clk_get(NULL, "IDECLK"); clkp = clk_get(NULL, "IDECLK");
if (IS_ERR(clkp)) if (IS_ERR(clkp))
...@@ -330,7 +352,7 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev) ...@@ -330,7 +352,7 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev)
ide_palm_clk = clk_get_rate(ideclkp)/100000; ide_palm_clk = clk_get_rate(ideclkp)/100000;
ide_palm_clk = (10000/ide_palm_clk) + 1; ide_palm_clk = (10000/ide_palm_clk) + 1;
/* Register the IDE interface with Linux ATA Interface */ /* Register the IDE interface with Linux ATA Interface */
memset(&ide_ctlr_info, 0, sizeof(ide_ctlr_info)); memset(&hw, 0, sizeof(hw));
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (mem == NULL) { if (mem == NULL) {
...@@ -349,32 +371,42 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev) ...@@ -349,32 +371,42 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev)
palm_bk3710_chipinit(base); palm_bk3710_chipinit(base);
pribase = mem->start + IDE_PALM_ATA_PRI_REG_OFFSET; pribase = mem->start + IDE_PALM_ATA_PRI_REG_OFFSET;
for (index = 0; index < IDE_NR_PORTS - 2; index++) for (i = 0; i < IDE_NR_PORTS - 2; i++)
ide_ctlr_info.io_ports[index] = pribase + index; hw.io_ports[i] = pribase + i;
ide_ctlr_info.io_ports[IDE_CONTROL_OFFSET] = mem->start + hw.io_ports[IDE_CONTROL_OFFSET] = mem->start +
IDE_PALM_ATA_PRI_CTL_OFFSET; IDE_PALM_ATA_PRI_CTL_OFFSET;
ide_ctlr_info.irq = irq->start; hw.irq = irq->start;
ide_ctlr_info.chipset = ide_palm3710; hw.chipset = ide_palm3710;
if (ide_register_hw(&ide_ctlr_info, NULL, &hwif) < 0) { hwif = ide_deprecated_find_port(hw.io_ports[IDE_DATA_OFFSET]);
printk(KERN_WARNING "Palm Chip BK3710 IDE Register Fail\n"); if (hwif == NULL)
return -ENODEV; goto out;
}
i = hwif->index;
if (hwif->present)
ide_unregister(i, 0, 0);
else if (!hwif->hold)
ide_init_port_data(hwif, i);
ide_init_port_hw(hwif, &hw);
hwif->set_pio_mode = &palm_bk3710_set_pio_mode;
hwif->set_dma_mode = &palm_bk3710_set_dma_mode;
hwif->mmio = 1; hwif->mmio = 1;
default_hwif_mmiops(hwif); default_hwif_mmiops(hwif);
hwif->cbl = ATA_CBL_PATA80;
hwif->ultra_mask = 0x1f; /* Ultra DMA Mode 4 Max
(input clk 99MHz) */
hwif->mwdma_mask = 0x7;
hwif->drives[0].autotune = 1;
hwif->drives[1].autotune = 1;
ide_setup_dma(hwif, mem->start); ide_setup_dma(hwif, mem->start);
idx[0] = i;
ide_device_add(idx, &palm_bk3710_port_info);
if (!hwif->present)
goto out;
return 0; return 0;
out:
printk(KERN_WARNING "Palm Chip BK3710 IDE Register Fail\n");
return -ENODEV;
} }
static struct platform_driver platform_bk_driver = { static struct platform_driver platform_bk_driver = {
......
...@@ -1555,7 +1555,7 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense) ...@@ -1555,7 +1555,7 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense)
if (stat) if (stat)
return stat; return stat;
toc->hdr.toc_length = ntohs (toc->hdr.toc_length); toc->hdr.toc_length = be16_to_cpu(toc->hdr.toc_length);
if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) { if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
toc->hdr.first_track = BCD2BIN(toc->hdr.first_track); toc->hdr.first_track = BCD2BIN(toc->hdr.first_track);
......
...@@ -590,20 +590,24 @@ static ide_proc_entry_t idedisk_proc[] = { ...@@ -590,20 +590,24 @@ static ide_proc_entry_t idedisk_proc[] = {
static void idedisk_prepare_flush(struct request_queue *q, struct request *rq) static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
{ {
ide_drive_t *drive = q->queuedata; ide_drive_t *drive = q->queuedata;
ide_task_t task; ide_task_t *task = kmalloc(sizeof(*task), GFP_ATOMIC);
memset(&task, 0, sizeof(task)); /* FIXME: map struct ide_taskfile on rq->cmd[] */
BUG_ON(task == NULL);
memset(task, 0, sizeof(*task));
if (ide_id_has_flush_cache_ext(drive->id) && if (ide_id_has_flush_cache_ext(drive->id) &&
(drive->capacity64 >= (1UL << 28))) (drive->capacity64 >= (1UL << 28)))
task.tf.command = WIN_FLUSH_CACHE_EXT; task->tf.command = WIN_FLUSH_CACHE_EXT;
else else
task.tf.command = WIN_FLUSH_CACHE; task->tf.command = WIN_FLUSH_CACHE;
task.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE; task->tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE |
task.data_phase = TASKFILE_NO_DATA; IDE_TFLAG_DYN;
task->data_phase = TASKFILE_NO_DATA;
rq->cmd_type = REQ_TYPE_ATA_TASKFILE; rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
rq->cmd_flags |= REQ_SOFTBARRIER; rq->cmd_flags |= REQ_SOFTBARRIER;
rq->special = &task; rq->special = task;
} }
/* /*
......
...@@ -198,7 +198,7 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq) ...@@ -198,7 +198,7 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq)
EXPORT_SYMBOL_GPL(ide_build_sglist); EXPORT_SYMBOL_GPL(ide_build_sglist);
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
/** /**
* ide_build_dmatable - build IDE DMA table * ide_build_dmatable - build IDE DMA table
* *
...@@ -316,7 +316,7 @@ void ide_destroy_dmatable (ide_drive_t *drive) ...@@ -316,7 +316,7 @@ void ide_destroy_dmatable (ide_drive_t *drive)
EXPORT_SYMBOL_GPL(ide_destroy_dmatable); EXPORT_SYMBOL_GPL(ide_destroy_dmatable);
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
/** /**
* config_drive_for_dma - attempt to activate IDE DMA * config_drive_for_dma - attempt to activate IDE DMA
* @drive: the drive to place in DMA mode * @drive: the drive to place in DMA mode
...@@ -424,7 +424,7 @@ void ide_dma_host_set(ide_drive_t *drive, int on) ...@@ -424,7 +424,7 @@ void ide_dma_host_set(ide_drive_t *drive, int on)
} }
EXPORT_SYMBOL_GPL(ide_dma_host_set); EXPORT_SYMBOL_GPL(ide_dma_host_set);
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
/** /**
* ide_dma_off_quietly - Generic DMA kill * ide_dma_off_quietly - Generic DMA kill
...@@ -474,7 +474,7 @@ void ide_dma_on(ide_drive_t *drive) ...@@ -474,7 +474,7 @@ void ide_dma_on(ide_drive_t *drive)
drive->hwif->dma_host_set(drive, 1); drive->hwif->dma_host_set(drive, 1);
} }
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
/** /**
* ide_dma_setup - begin a DMA phase * ide_dma_setup - begin a DMA phase
* @drive: target device * @drive: target device
...@@ -591,7 +591,7 @@ static int __ide_dma_test_irq(ide_drive_t *drive) ...@@ -591,7 +591,7 @@ static int __ide_dma_test_irq(ide_drive_t *drive)
} }
#else #else
static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; } static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; }
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
int __ide_dma_bad_drive (ide_drive_t *drive) int __ide_dma_bad_drive (ide_drive_t *drive)
{ {
...@@ -840,7 +840,7 @@ void ide_check_dma_crc(ide_drive_t *drive) ...@@ -840,7 +840,7 @@ void ide_check_dma_crc(ide_drive_t *drive)
ide_dma_on(drive); ide_dma_on(drive);
} }
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
void ide_dma_lost_irq (ide_drive_t *drive) void ide_dma_lost_irq (ide_drive_t *drive)
{ {
printk("%s: DMA interrupt recovery\n", drive->name); printk("%s: DMA interrupt recovery\n", drive->name);
...@@ -1002,4 +1002,4 @@ void ide_setup_dma(ide_hwif_t *hwif, unsigned long base) ...@@ -1002,4 +1002,4 @@ void ide_setup_dma(ide_hwif_t *hwif, unsigned long base)
} }
EXPORT_SYMBOL_GPL(ide_setup_dma); EXPORT_SYMBOL_GPL(ide_setup_dma);
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
...@@ -361,17 +361,21 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err) ...@@ -361,17 +361,21 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err)
spin_unlock_irqrestore(&ide_lock, flags); spin_unlock_irqrestore(&ide_lock, flags);
if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) {
ide_task_t *args = (ide_task_t *) rq->special; ide_task_t *task = (ide_task_t *)rq->special;
if (rq->errors == 0) if (rq->errors == 0)
rq->errors = !OK_STAT(stat,READY_STAT,BAD_STAT); rq->errors = !OK_STAT(stat, READY_STAT, BAD_STAT);
if (args) { if (task) {
struct ide_taskfile *tf = &args->tf; struct ide_taskfile *tf = &task->tf;
tf->error = err; tf->error = err;
tf->status = stat; tf->status = stat;
ide_tf_read(drive, args); ide_tf_read(drive, task);
if (task->tf_flags & IDE_TFLAG_DYN)
kfree(task);
} }
} else if (blk_pm_request(rq)) { } else if (blk_pm_request(rq)) {
struct request_pm_state *pm = rq->data; struct request_pm_state *pm = rq->data;
...@@ -388,7 +392,8 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err) ...@@ -388,7 +392,8 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err)
spin_lock_irqsave(&ide_lock, flags); spin_lock_irqsave(&ide_lock, flags);
HWGROUP(drive)->rq = NULL; HWGROUP(drive)->rq = NULL;
rq->errors = err; rq->errors = err;
if (__blk_end_request(rq, (rq->errors ? -EIO : 0), 0)) if (unlikely(__blk_end_request(rq, (rq->errors ? -EIO : 0),
blk_rq_bytes(rq))))
BUG(); BUG();
spin_unlock_irqrestore(&ide_lock, flags); spin_unlock_irqrestore(&ide_lock, flags);
} }
......
...@@ -786,11 +786,7 @@ static void __ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, ...@@ -786,11 +786,7 @@ static void __ide_set_handler (ide_drive_t *drive, ide_handler_t *handler,
{ {
ide_hwgroup_t *hwgroup = HWGROUP(drive); ide_hwgroup_t *hwgroup = HWGROUP(drive);
if (hwgroup->handler != NULL) { BUG_ON(hwgroup->handler);
printk(KERN_CRIT "%s: ide_set_handler: handler not null; "
"old=%p, new=%p\n",
drive->name, hwgroup->handler, handler);
}
hwgroup->handler = handler; hwgroup->handler = handler;
hwgroup->expiry = expiry; hwgroup->expiry = expiry;
hwgroup->timer.expires = jiffies + timeout; hwgroup->timer.expires = jiffies + timeout;
...@@ -827,11 +823,9 @@ void ide_execute_command(ide_drive_t *drive, u8 cmd, ide_handler_t *handler, ...@@ -827,11 +823,9 @@ void ide_execute_command(ide_drive_t *drive, u8 cmd, ide_handler_t *handler,
unsigned timeout, ide_expiry_t *expiry) unsigned timeout, ide_expiry_t *expiry)
{ {
unsigned long flags; unsigned long flags;
ide_hwgroup_t *hwgroup = HWGROUP(drive);
ide_hwif_t *hwif = HWIF(drive); ide_hwif_t *hwif = HWIF(drive);
spin_lock_irqsave(&ide_lock, flags); spin_lock_irqsave(&ide_lock, flags);
BUG_ON(hwgroup->handler);
__ide_set_handler(drive, handler, timeout, expiry); __ide_set_handler(drive, handler, timeout, expiry);
hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG); hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG);
/* /*
......
...@@ -21,15 +21,6 @@ ...@@ -21,15 +21,6 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/io.h> #include <asm/io.h>
/*
* IDE library routines. These are plug in code that most
* drivers can use but occasionally may be weird enough
* to want to do their own thing with
*
* Add common non I/O op stuff here. Make sure it has proper
* kernel-doc function headers or your patch will be rejected
*/
static const char *udma_str[] = static const char *udma_str[] =
{ "UDMA/16", "UDMA/25", "UDMA/33", "UDMA/44", { "UDMA/16", "UDMA/25", "UDMA/33", "UDMA/44",
"UDMA/66", "UDMA/100", "UDMA/133", "UDMA7" }; "UDMA/66", "UDMA/100", "UDMA/133", "UDMA7" };
......
...@@ -1051,7 +1051,7 @@ static int init_irq (ide_hwif_t *hwif) ...@@ -1051,7 +1051,7 @@ static int init_irq (ide_hwif_t *hwif)
int sa = 0; int sa = 0;
#if defined(__mc68000__) #if defined(__mc68000__)
sa = IRQF_SHARED; sa = IRQF_SHARED;
#endif /* __mc68000__ || CONFIG_APUS */ #endif /* __mc68000__ */
if (IDE_CHIPSET_IS_PCI(hwif->chipset)) if (IDE_CHIPSET_IS_PCI(hwif->chipset))
sa = IRQF_SHARED; sa = IRQF_SHARED;
...@@ -1355,7 +1355,7 @@ static void ide_init_port(ide_hwif_t *hwif, unsigned int port, ...@@ -1355,7 +1355,7 @@ static void ide_init_port(ide_hwif_t *hwif, unsigned int port,
hwif->ultra_mask = d->udma_mask; hwif->ultra_mask = d->udma_mask;
/* reset DMA masks only for SFF-style DMA controllers */ /* reset DMA masks only for SFF-style DMA controllers */
if ((d->host_flags && IDE_HFLAG_NO_DMA) == 0 && hwif->dma_base == 0) if ((d->host_flags & IDE_HFLAG_NO_DMA) == 0 && hwif->dma_base == 0)
hwif->swdma_mask = hwif->mwdma_mask = hwif->ultra_mask = 0; hwif->swdma_mask = hwif->mwdma_mask = hwif->ultra_mask = 0;
if (d->host_flags & IDE_HFLAG_RQSIZE_256) if (d->host_flags & IDE_HFLAG_RQSIZE_256)
......
...@@ -466,9 +466,6 @@ static void ide_tape_put(struct ide_tape_obj *tape) ...@@ -466,9 +466,6 @@ static void ide_tape_put(struct ide_tape_obj *tape)
/* 0 = no tape is loaded, so we don't rewind after ejecting */ /* 0 = no tape is loaded, so we don't rewind after ejecting */
#define IDETAPE_MEDIUM_PRESENT 9 #define IDETAPE_MEDIUM_PRESENT 9
/* A define for the READ BUFFER command */
#define IDETAPE_RETRIEVE_FAULTY_BLOCK 6
/* Some defines for the SPACE command */ /* Some defines for the SPACE command */
#define IDETAPE_SPACE_OVER_FILEMARK 1 #define IDETAPE_SPACE_OVER_FILEMARK 1
#define IDETAPE_SPACE_TO_EOD 3 #define IDETAPE_SPACE_TO_EOD 3
...@@ -490,7 +487,6 @@ enum { ...@@ -490,7 +487,6 @@ enum {
REQ_IDETAPE_PC2 = (1 << 1), /* packet command (second stage) */ REQ_IDETAPE_PC2 = (1 << 1), /* packet command (second stage) */
REQ_IDETAPE_READ = (1 << 2), REQ_IDETAPE_READ = (1 << 2),
REQ_IDETAPE_WRITE = (1 << 3), REQ_IDETAPE_WRITE = (1 << 3),
REQ_IDETAPE_READ_BUFFER = (1 << 4),
}; };
/* Error codes returned in rq->errors to the higher part of the driver. */ /* Error codes returned in rq->errors to the higher part of the driver. */
...@@ -1523,29 +1519,6 @@ static void idetape_create_read_cmd(idetape_tape_t *tape, idetape_pc_t *pc, ...@@ -1523,29 +1519,6 @@ static void idetape_create_read_cmd(idetape_tape_t *tape, idetape_pc_t *pc,
set_bit(PC_DMA_RECOMMENDED, &pc->flags); set_bit(PC_DMA_RECOMMENDED, &pc->flags);
} }
static void idetape_create_read_buffer_cmd(idetape_tape_t *tape,
idetape_pc_t *pc, struct idetape_bh *bh)
{
int size = 32768;
struct idetape_bh *p = bh;
idetape_init_pc(pc);
pc->c[0] = READ_BUFFER;
pc->c[1] = IDETAPE_RETRIEVE_FAULTY_BLOCK;
pc->c[7] = size >> 8;
pc->c[8] = size & 0xff;
pc->callback = &idetape_pc_callback;
pc->bh = bh;
atomic_set(&bh->b_count, 0);
pc->buffer = NULL;
while (p) {
atomic_set(&p->b_count, 0);
p = p->b_reqnext;
}
pc->request_transfer = size;
pc->buffer_size = size;
}
static void idetape_create_write_cmd(idetape_tape_t *tape, idetape_pc_t *pc, static void idetape_create_write_cmd(idetape_tape_t *tape, idetape_pc_t *pc,
unsigned int length, struct idetape_bh *bh) unsigned int length, struct idetape_bh *bh)
{ {
...@@ -1655,13 +1628,6 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive, ...@@ -1655,13 +1628,6 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
(struct idetape_bh *)rq->special); (struct idetape_bh *)rq->special);
goto out; goto out;
} }
if (rq->cmd[0] & REQ_IDETAPE_READ_BUFFER) {
tape->postpone_cnt = 0;
pc = idetape_next_pc_storage(drive);
idetape_create_read_buffer_cmd(tape, pc,
(struct idetape_bh *)rq->special);
goto out;
}
if (rq->cmd[0] & REQ_IDETAPE_PC1) { if (rq->cmd[0] & REQ_IDETAPE_PC1) {
pc = (idetape_pc_t *) rq->buffer; pc = (idetape_pc_t *) rq->buffer;
rq->cmd[0] &= ~(REQ_IDETAPE_PC1); rq->cmd[0] &= ~(REQ_IDETAPE_PC1);
......
...@@ -44,8 +44,6 @@ ...@@ -44,8 +44,6 @@
* inspiration from lots of linux users, esp. hamish@zot.apana.org.au * inspiration from lots of linux users, esp. hamish@zot.apana.org.au
*/ */
#define REVISION "Revision: 7.00alpha2"
#define _IDE_C /* Tell ide.h it's really us */ #define _IDE_C /* Tell ide.h it's really us */
#include <linux/module.h> #include <linux/module.h>
...@@ -1618,7 +1616,7 @@ static int __init ide_init(void) ...@@ -1618,7 +1616,7 @@ static int __init ide_init(void)
{ {
int ret; int ret;
printk(KERN_INFO "Uniform Multi-Platform E-IDE driver " REVISION "\n"); printk(KERN_INFO "Uniform Multi-Platform E-IDE driver\n");
system_bus_speed = ide_system_bus_speed(); system_bus_speed = ide_system_bus_speed();
printk(KERN_INFO "ide: Assuming %dMHz system bus speed " printk(KERN_INFO "ide: Assuming %dMHz system bus speed "
......
...@@ -94,7 +94,7 @@ static int gayle_ack_intr_a1200(ide_hwif_t *hwif) ...@@ -94,7 +94,7 @@ static int gayle_ack_intr_a1200(ide_hwif_t *hwif)
static void __init gayle_setup_ports(hw_regs_t *hw, unsigned long base, static void __init gayle_setup_ports(hw_regs_t *hw, unsigned long base,
unsigned long ctl, unsigned long irq_port, unsigned long ctl, unsigned long irq_port,
ide_ack_intr_t *ack_intr); ide_ack_intr_t *ack_intr)
{ {
int i; int i;
......
...@@ -147,11 +147,6 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devic ...@@ -147,11 +147,6 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devic
/* We must not grab the entire device, it has 'ISA' space in its /* We must not grab the entire device, it has 'ISA' space in its
* BARS too and we will freak out other bits of the kernel * BARS too and we will freak out other bits of the kernel
*
* pci_enable_device_bars() is going away. I replaced it with
* IO only enable for now but I'll need confirmation this is
* allright for that device. If not, it will need some kind of
* quirk. --BenH.
*/ */
if (pci_enable_device_io(dev)) { if (pci_enable_device_io(dev)) {
printk(KERN_WARNING "%s: Unable to enable 55x0.\n", d->name); printk(KERN_WARNING "%s: Unable to enable 55x0.\n", d->name);
......
...@@ -3,26 +3,6 @@ ...@@ -3,26 +3,6 @@
* Copyright (C) 2006-2007 MontaVista Software, Inc. * Copyright (C) 2006-2007 MontaVista Software, Inc.
* Copyright (C) 2007 Bartlomiej Zolnierkiewicz * Copyright (C) 2007 Bartlomiej Zolnierkiewicz
* *
* Promise Ultra33 cards with BIOS v1.20 through 1.28 will need this
* compiled into the kernel if you have more than one card installed.
* Note that BIOS v1.29 is reported to fix the problem. Since this is
* safe chipset tuning, including this support is harmless
*
* Promise Ultra66 cards with BIOS v1.11 this
* compiled into the kernel if you have more than one card installed.
*
* Promise Ultra100 cards.
*
* The latest chipset code will support the following ::
* Three Ultra33 controllers and 12 drives.
* 8 are UDMA supported and 4 are limited to DMA mode 2 multi-word.
* The 8/4 ratio is a BIOS code limit by promise.
*
* UNLESS you enable "CONFIG_PDC202XX_BURST"
*
*/
/*
* Portions Copyright (C) 1999 Promise Technology, Inc. * Portions Copyright (C) 1999 Promise Technology, Inc.
* Author: Frank Tiernan (frankt@promise.com) * Author: Frank Tiernan (frankt@promise.com)
* Released under terms of General Public License * Released under terms of General Public License
...@@ -344,7 +324,6 @@ static void __devinit init_dma_pdc202xx(ide_hwif_t *hwif, unsigned long dmabase) ...@@ -344,7 +324,6 @@ static void __devinit init_dma_pdc202xx(ide_hwif_t *hwif, unsigned long dmabase)
(primary_mode & 1) ? "MASTER" : "PCI", (primary_mode & 1) ? "MASTER" : "PCI",
(secondary_mode & 1) ? "MASTER" : "PCI" ); (secondary_mode & 1) ? "MASTER" : "PCI" );
#ifdef CONFIG_PDC202XX_BURST
if (!(udma_speed_flag & 1)) { if (!(udma_speed_flag & 1)) {
printk(KERN_INFO "%s: FORCING BURST BIT 0x%02x->0x%02x ", printk(KERN_INFO "%s: FORCING BURST BIT 0x%02x->0x%02x ",
hwif->cds->name, udma_speed_flag, hwif->cds->name, udma_speed_flag,
...@@ -352,7 +331,6 @@ static void __devinit init_dma_pdc202xx(ide_hwif_t *hwif, unsigned long dmabase) ...@@ -352,7 +331,6 @@ static void __devinit init_dma_pdc202xx(ide_hwif_t *hwif, unsigned long dmabase)
outb(udma_speed_flag | 1, dmabase | 0x1f); outb(udma_speed_flag | 1, dmabase | 0x1f);
printk("%sACTIVE\n", (inb(dmabase | 0x1f) & 1) ? "" : "IN"); printk("%sACTIVE\n", (inb(dmabase | 0x1f) & 1) ? "" : "IN");
} }
#endif /* CONFIG_PDC202XX_BURST */
ide_setup_dma(hwif, dmabase); ide_setup_dma(hwif, dmabase);
} }
......
...@@ -906,6 +906,8 @@ enum { ...@@ -906,6 +906,8 @@ enum {
IDE_TFLAG_IN_DEVICE, IDE_TFLAG_IN_DEVICE,
/* force 16-bit I/O operations */ /* force 16-bit I/O operations */
IDE_TFLAG_IO_16BIT = (1 << 30), IDE_TFLAG_IO_16BIT = (1 << 30),
/* ide_task_t was allocated using kmalloc() */
IDE_TFLAG_DYN = (1 << 31),
}; };
struct ide_taskfile { struct ide_taskfile {
...@@ -998,8 +1000,7 @@ extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *o ...@@ -998,8 +1000,7 @@ extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *o
void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *); void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *);
void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *);
/* FIXME: palm_bk3710 uses BLK_DEV_IDEDMA_PCI without BLK_DEV_IDEPCI! */ #ifdef CONFIG_BLK_DEV_IDEDMA_PCI
#if defined(CONFIG_BLK_DEV_IDEPCI) && defined(CONFIG_BLK_DEV_IDEDMA_PCI)
void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *); void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *);
#else #else
static inline void ide_hwif_setup_dma(ide_hwif_t *hwif, static inline void ide_hwif_setup_dma(ide_hwif_t *hwif,
...@@ -1146,7 +1147,7 @@ ide_startstop_t ide_dma_intr(ide_drive_t *); ...@@ -1146,7 +1147,7 @@ ide_startstop_t ide_dma_intr(ide_drive_t *);
int ide_build_sglist(ide_drive_t *, struct request *); int ide_build_sglist(ide_drive_t *, struct request *);
void ide_destroy_dmatable(ide_drive_t *); void ide_destroy_dmatable(ide_drive_t *);
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
extern int ide_build_dmatable(ide_drive_t *, struct request *); extern int ide_build_dmatable(ide_drive_t *, struct request *);
extern int ide_release_dma(ide_hwif_t *); extern int ide_release_dma(ide_hwif_t *);
extern void ide_setup_dma(ide_hwif_t *, unsigned long); extern void ide_setup_dma(ide_hwif_t *, unsigned long);
...@@ -1157,7 +1158,7 @@ extern void ide_dma_start(ide_drive_t *); ...@@ -1157,7 +1158,7 @@ extern void ide_dma_start(ide_drive_t *);
extern int __ide_dma_end(ide_drive_t *); extern int __ide_dma_end(ide_drive_t *);
extern void ide_dma_lost_irq(ide_drive_t *); extern void ide_dma_lost_irq(ide_drive_t *);
extern void ide_dma_timeout(ide_drive_t *); extern void ide_dma_timeout(ide_drive_t *);
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
#else #else
static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; }
...@@ -1171,7 +1172,7 @@ static inline int ide_set_dma(ide_drive_t *drive) { return 1; } ...@@ -1171,7 +1172,7 @@ static inline int ide_set_dma(ide_drive_t *drive) { return 1; }
static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } static inline void ide_check_dma_crc(ide_drive_t *drive) { ; }
#endif /* CONFIG_BLK_DEV_IDEDMA */ #endif /* CONFIG_BLK_DEV_IDEDMA */
#ifndef CONFIG_BLK_DEV_IDEDMA_PCI #ifndef CONFIG_BLK_DEV_IDEDMA_SFF
static inline void ide_release_dma(ide_hwif_t *drive) {;} static inline void ide_release_dma(ide_hwif_t *drive) {;}
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment