patch-2.4.19 linux-2.4.19/drivers/ide/ide-cs.c
Next file: linux-2.4.19/drivers/ide/ide-disk.c
Previous file: linux-2.4.19/drivers/ide/ide-cd.h
Back to the patch index
Back to the overall index
- Lines: 41
- Date:
Fri Aug 2 17:39:44 2002
- Orig file:
linux-2.4.18/drivers/ide/ide-cs.c
- Orig date:
Sun Sep 30 12:26:05 2001
diff -urN linux-2.4.18/drivers/ide/ide-cs.c linux-2.4.19/drivers/ide/ide-cs.c
@@ -42,6 +42,7 @@
#include <linux/ioport.h>
#include <linux/hdreg.h>
#include <linux/major.h>
+#include <linux/ide.h>
#include <asm/io.h>
#include <asm/system.h>
@@ -226,6 +227,15 @@
#define CFG_CHECK(fn, args...) \
if (CardServices(fn, args) != 0) goto next_entry
+int idecs_register (int arg1, int arg2, int irq)
+{
+ hw_regs_t hw;
+ ide_init_hwif_ports(&hw, (ide_ioreg_t) arg1, (ide_ioreg_t) arg2, NULL);
+ hw.irq = irq;
+ hw.chipset = ide_pci; /* this enables IRQ sharing w/ PCI irqs */
+ return ide_register_hw(&hw, NULL);
+}
+
void ide_config(dev_link_t *link)
{
client_handle_t handle = link->handle;
@@ -329,10 +339,14 @@
/* retry registration in case device is still spinning up */
for (i = 0; i < 10; i++) {
- hd = ide_register(io_base, ctl_base, link->irq.AssignedIRQ);
+ if (ctl_base)
+ outb(0x02, ctl_base); /* Set nIEN = disable device interrupts */
+ hd = idecs_register(io_base, ctl_base, link->irq.AssignedIRQ);
if (hd >= 0) break;
if (link->io.NumPorts1 == 0x20) {
- hd = ide_register(io_base+0x10, ctl_base+0x10,
+ if (ctl_base)
+ outb(0x02, ctl_base+0x10);
+ hd = idecs_register(io_base+0x10, ctl_base+0x10,
link->irq.AssignedIRQ);
if (hd >= 0) {
io_base += 0x10; ctl_base += 0x10;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)