git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
scsi
/
fdomain.c
diff --git
a/drivers/scsi/fdomain.c
b/drivers/scsi/fdomain.c
index
7334244
..
5d4ea6f
100644
(file)
--- a/
drivers/scsi/fdomain.c
+++ b/
drivers/scsi/fdomain.c
@@
-266,7
+266,6
@@
**************************************************************************/
**************************************************************************/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
@@
-279,9
+278,9
@@
#include <linux/pci.h>
#include <linux/stat.h>
#include <linux/delay.h>
#include <linux/pci.h>
#include <linux/stat.h>
#include <linux/delay.h>
+#include <linux/io.h>
#include <scsi/scsicam.h>
#include <scsi/scsicam.h>
-#include <asm/io.h>
#include <asm/system.h>
#include <scsi/scsi.h>
#include <asm/system.h>
#include <scsi/scsi.h>
@@
-388,6
+387,7
@@
static void __iomem * bios_mem;
static int bios_major;
static int bios_minor;
static int PCI_bus;
static int bios_major;
static int bios_minor;
static int PCI_bus;
+static struct pci_dev *PCI_dev;
static int Quantum; /* Quantum board variant */
static int interrupt_level;
static volatile int in_command;
static int Quantum; /* Quantum board variant */
static int interrupt_level;
static volatile int in_command;
@@
-404,8
+404,7
@@
static volatile int in_interrupt_flag;
static int FIFO_Size = 0x2000; /* 8k FIFO for
pre-tmc18c30 chips */
static int FIFO_Size = 0x2000; /* 8k FIFO for
pre-tmc18c30 chips */
-static irqreturn_t do_fdomain_16x0_intr( int irq, void *dev_id,
- struct pt_regs * regs );
+static irqreturn_t do_fdomain_16x0_intr( int irq, void *dev_id );
/* Allow insmod parameters to be like LILO parameters. For example:
insmod fdomain fdomain=0x140,11 */
static char * fdomain = NULL;
/* Allow insmod parameters to be like LILO parameters. For example:
insmod fdomain fdomain=0x140,11 */
static char * fdomain = NULL;
@@
-420,10
+419,10
@@
static unsigned long addresses[] = {
0xd0000,
0xe0000,
};
0xd0000,
0xe0000,
};
-#define ADDRESS_COUNT
(sizeof( addresses ) / sizeof( unsigned )
)
-
+#define ADDRESS_COUNT
ARRAY_SIZE(addresses
)
+
static unsigned short ports[] = { 0x140, 0x150, 0x160, 0x170 };
static unsigned short ports[] = { 0x140, 0x150, 0x160, 0x170 };
-#define PORT_COUNT
(sizeof( ports ) / sizeof( unsigned short )
)
+#define PORT_COUNT
ARRAY_SIZE(ports
)
static unsigned short ints[] = { 3, 5, 10, 11, 12, 14, 15, 0 };
static unsigned short ints[] = { 3, 5, 10, 11, 12, 14, 15, 0 };
@@
-502,7
+501,7
@@
static struct signature {
geometry location are verified). */
};
geometry location are verified). */
};
-#define SIGNATURE_COUNT
(sizeof( signatures ) / sizeof( struct signature )
)
+#define SIGNATURE_COUNT
ARRAY_SIZE(signatures
)
static void print_banner( struct Scsi_Host *shpnt )
{
static void print_banner( struct Scsi_Host *shpnt )
{
@@
-519,7
+518,7
@@
static void print_banner( struct Scsi_Host *shpnt )
if (bios_minor >= 0) printk("%d", bios_minor);
else printk("?.");
if (bios_minor >= 0) printk("%d", bios_minor);
else printk("?.");
-
+
printk( " at 0x%lx using scsi id %d\n",
bios_base, shpnt->this_id );
}
printk( " at 0x%lx using scsi id %d\n",
bios_base, shpnt->this_id );
}
@@
-814,9
+813,10
@@
static int fdomain_pci_bios_detect( int *irq, int *iobase, struct pci_dev **ret_
PCI_DEVICE_ID_FD_36C70 );
#endif
PCI_DEVICE_ID_FD_36C70 );
#endif
- if ((pdev = pci_
find
_device(PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70, pdev)) == NULL)
+ if ((pdev = pci_
get
_device(PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70, pdev)) == NULL)
return 0;
return 0;
- if (pci_enable_device(pdev)) return 0;
+ if (pci_enable_device(pdev))
+ goto fail;
#if DEBUG_DETECT
printk( "scsi: <fdomain> TMC-3260 detect:"
#if DEBUG_DETECT
printk( "scsi: <fdomain> TMC-3260 detect:"
@@
-833,7
+833,7
@@
static int fdomain_pci_bios_detect( int *irq, int *iobase, struct pci_dev **ret_
pci_irq = pdev->irq;
if (!request_region( pci_base, 0x10, "fdomain" ))
pci_irq = pdev->irq;
if (!request_region( pci_base, 0x10, "fdomain" ))
-
return 0
;
+
goto fail
;
/* Now we have the I/O base address and interrupt from the PCI
configuration registers. */
/* Now we have the I/O base address and interrupt from the PCI
configuration registers. */
@@
-850,17
+850,22
@@
static int fdomain_pci_bios_detect( int *irq, int *iobase, struct pci_dev **ret_
if (!fdomain_is_valid_port(pci_base)) {
printk(KERN_ERR "scsi: <fdomain> PCI card detected, but driver not loaded (invalid port)\n" );
release_region(pci_base, 0x10);
if (!fdomain_is_valid_port(pci_base)) {
printk(KERN_ERR "scsi: <fdomain> PCI card detected, but driver not loaded (invalid port)\n" );
release_region(pci_base, 0x10);
-
return 0
;
+
goto fail
;
}
/* Fill in a few global variables. Ugh. */
bios_major = bios_minor = -1;
PCI_bus = 1;
}
/* Fill in a few global variables. Ugh. */
bios_major = bios_minor = -1;
PCI_bus = 1;
+ PCI_dev = pdev;
Quantum = 0;
bios_base = 0;
return 1;
Quantum = 0;
bios_base = 0;
return 1;
+fail:
+ pci_dev_put(pdev);
+ return 0;
}
}
+
#endif
struct Scsi_Host *__fdomain_16x0_detect(struct scsi_host_template *tpnt )
#endif
struct Scsi_Host *__fdomain_16x0_detect(struct scsi_host_template *tpnt )
@@
-911,8
+916,7
@@
struct Scsi_Host *__fdomain_16x0_detect(struct scsi_host_template *tpnt )
if (setup_called) {
printk(KERN_ERR "scsi: <fdomain> Bad LILO/INSMOD parameters?\n");
}
if (setup_called) {
printk(KERN_ERR "scsi: <fdomain> Bad LILO/INSMOD parameters?\n");
}
- release_region(port_base, 0x10);
- return NULL;
+ goto fail;
}
if (this_id) {
}
if (this_id) {
@@
-944,13
+948,12
@@
struct Scsi_Host *__fdomain_16x0_detect(struct scsi_host_template *tpnt )
/* Log IRQ with kernel */
if (!interrupt_level) {
printk(KERN_ERR "scsi: <fdomain> Card Detected, but driver not loaded (no IRQ)\n" );
/* Log IRQ with kernel */
if (!interrupt_level) {
printk(KERN_ERR "scsi: <fdomain> Card Detected, but driver not loaded (no IRQ)\n" );
- release_region(port_base, 0x10);
- return NULL;
+ goto fail;
} else {
/* Register the IRQ with the kernel */
retcode = request_irq( interrupt_level,
} else {
/* Register the IRQ with the kernel */
retcode = request_irq( interrupt_level,
- do_fdomain_16x0_intr, pdev?
SA_SHIRQ
:0, "fdomain", shpnt);
+ do_fdomain_16x0_intr, pdev?
IRQF_SHARED
:0, "fdomain", shpnt);
if (retcode < 0) {
if (retcode == -EINVAL) {
if (retcode < 0) {
if (retcode == -EINVAL) {
@@
-966,11
+969,14
@@
struct Scsi_Host *__fdomain_16x0_detect(struct scsi_host_template *tpnt )
printk(KERN_ERR " Send mail to faith@acm.org\n" );
}
printk(KERN_ERR "scsi: <fdomain> Detected, but driver not loaded (IRQ)\n" );
printk(KERN_ERR " Send mail to faith@acm.org\n" );
}
printk(KERN_ERR "scsi: <fdomain> Detected, but driver not loaded (IRQ)\n" );
- release_region(port_base, 0x10);
- return NULL;
+ goto fail;
}
}
return shpnt;
}
}
return shpnt;
+fail:
+ pci_dev_put(pdev);
+ release_region(port_base, 0x10);
+ return NULL;
}
static int fdomain_16x0_detect(struct scsi_host_template *tpnt)
}
static int fdomain_16x0_detect(struct scsi_host_template *tpnt)
@@
-1095,8
+1101,7
@@
static void my_done(int error)
#endif
}
#endif
}
-static irqreturn_t do_fdomain_16x0_intr(int irq, void *dev_id,
- struct pt_regs * regs )
+static irqreturn_t do_fdomain_16x0_intr(int irq, void *dev_id)
{
unsigned long flags;
int status;
{
unsigned long flags;
int status;
@@
-1717,6
+1722,8
@@
static int fdomain_16x0_release(struct Scsi_Host *shpnt)
free_irq(shpnt->irq, shpnt);
if (shpnt->io_port && shpnt->n_io_port)
release_region(shpnt->io_port, shpnt->n_io_port);
free_irq(shpnt->irq, shpnt);
if (shpnt->io_port && shpnt->n_io_port)
release_region(shpnt->io_port, shpnt->n_io_port);
+ if (PCI_bus)
+ pci_dev_put(PCI_dev);
return 0;
}
return 0;
}
@@
-1739,6
+1746,15
@@
struct scsi_host_template fdomain_driver_template = {
};
#ifndef PCMCIA
};
#ifndef PCMCIA
+
+static struct pci_device_id fdomain_pci_tbl[] __devinitdata = {
+ { PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
+ { }
+};
+MODULE_DEVICE_TABLE(pci, fdomain_pci_tbl);
+
#define driver_template fdomain_driver_template
#include "scsi_module.c"
#define driver_template fdomain_driver_template
#include "scsi_module.c"
+
#endif
#endif