vserver 1.9.5.x5
[linux-2.6.git] / drivers / scsi / zalon.c
index 10c7741..31ba6a9 100644 (file)
@@ -4,27 +4,13 @@
  */
 
 #include <linux/init.h>
-#include <linux/types.h>
-#include <linux/stat.h>
-#include <linux/mm.h>
-#include <linux/blkdev.h>
-#include <linux/sched.h>
-#include <linux/version.h>
-#include <linux/config.h>
+#include <linux/interrupt.h>
 #include <linux/module.h>
-
-#include <scsi/scsicam.h>
-
-#include <asm/page.h>
-#include <asm/pgtable.h>
-#include <asm/irq.h>
+#include <linux/types.h>
 #include <asm/hardware.h>
-#include <asm/delay.h>
 #include <asm/io.h>
 
 #include "../parisc/gsc.h"
-#include "scsi.h"
-#include "hosts.h"
 
 #include "ncr53c8xx.h"
 
@@ -40,20 +26,18 @@ MODULE_LICENSE("GPL");
 #define IO_MODULE_IO_COMMAND   (12*4)
 #define IO_MODULE_IO_STATUS    (13*4)
 
-#define IOSTATUS_RY             0x40
-#define IOSTATUS_FE             0x80
-#define IOIIDATA_SMINT5L        0x40000000
-#define IOIIDATA_MINT5EN        0x20000000
-#define IOIIDATA_PACKEN         0x10000000
-#define IOIIDATA_PREFETCHEN     0x08000000
-#define IOIIDATA_IOII           0x00000020
+#define IOSTATUS_RY            0x40
+#define IOSTATUS_FE            0x80
+#define IOIIDATA_SMINT5L       0x40000000
+#define IOIIDATA_MINT5EN       0x20000000
+#define IOIIDATA_PACKEN                0x10000000
+#define IOIIDATA_PREFETCHEN    0x08000000
+#define IOIIDATA_IOII          0x00000020
 
 #define CMD_RESET              5
 
-static ncr_chip zalon720_chip __initdata = {
-       .device_id =    PSEUDO_720_ID,
+static struct ncr_chip zalon720_chip __initdata = {
        .revision_id =  0x0f,
-       .name =         "720",
        .burst_max =    3,
        .offset_max =   8,
        .nr_divisor =   4,
@@ -93,7 +77,7 @@ lasi_scsi_clock(void * hpa, int defaultclock)
 }
 #endif
 
-static Scsi_Host_Template zalon7xx_template = {
+static struct scsi_host_template zalon7xx_template = {
        .module         = THIS_MODULE,
        .proc_name      = "zalon7xx",
 };
@@ -103,7 +87,7 @@ zalon_probe(struct parisc_device *dev)
 {
        struct gsc_irq gsc_irq;
        u32 zalon_vers;
-       int irq, error = -ENODEV;
+       int error = -ENODEV;
        unsigned long zalon = dev->hpa;
        unsigned long io_port = zalon + GSC_SCSI_ZALON_OFFSET;
        static int unit = 0;
@@ -123,10 +107,10 @@ zalon_probe(struct parisc_device *dev)
        /* Setup the interrupts first.
        ** Later on request_irq() will register the handler.
        */
-        irq = gsc_alloc_irq(&gsc_irq);
+       dev->irq = gsc_alloc_irq(&gsc_irq);
 
        printk("%s: Zalon vers field is 0x%x, IRQ %d\n", __FUNCTION__,
-               zalon_vers, irq);
+               zalon_vers, dev->irq);
 
        __raw_writel(gsc_irq.txn_addr | gsc_irq.txn_data, dev->hpa + IO_MODULE_EIM);
 
@@ -146,16 +130,16 @@ zalon_probe(struct parisc_device *dev)
        device.dev              = &dev->dev;
        device.slot.base        = (u_long)io_port;
        device.slot.base_c      = (u_long)io_port;
-       device.slot.irq         = irq;
+       device.slot.irq         = dev->irq;
        device.differential     = 2;
 
        host = ncr_attach(&zalon7xx_template, unit, &device);
        if (!host)
                goto fail;
 
-       if (request_irq(irq, ncr53c8xx_intr, SA_SHIRQ, dev->dev.bus_id, host)) {
+       if (request_irq(dev->irq, ncr53c8xx_intr, SA_SHIRQ, "zalon", host)) {
                printk(KERN_ERR "%s: irq problem with %d, detaching\n ",
-                      dev->dev.bus_id, irq);
+                       dev->dev.bus_id, dev->irq);
                goto fail;
        }
 
@@ -171,7 +155,7 @@ zalon_probe(struct parisc_device *dev)
        return 0;
 
  fail_free_irq:
-       free_irq(irq, host);
+       free_irq(dev->irq, host);
  fail:
        ncr53c8xx_release(host);
        return error;
@@ -187,18 +171,16 @@ MODULE_DEVICE_TABLE(parisc, zalon_tbl);
 static int __exit zalon_remove(struct parisc_device *dev)
 {
        struct Scsi_Host *host = dev_get_drvdata(&dev->dev);
-       int irq = host->irq;
 
        scsi_remove_host(host);
        ncr53c8xx_release(host);
-       free_irq(irq, host);
+       free_irq(dev->irq, host);
 
        return 0;
 }
-       
 
 static struct parisc_driver zalon_driver = {
-       .name =         "GSC SCSI (Zalon)",
+       .name =         "zalon",
        .id_table =     zalon_tbl,
        .probe =        zalon_probe,
        .remove =       __devexit_p(zalon_remove),
@@ -206,12 +188,18 @@ static struct parisc_driver zalon_driver = {
 
 static int __init zalon7xx_init(void)
 {
-       return register_parisc_driver(&zalon_driver);
+       int ret = ncr53c8xx_init();
+       if (!ret)
+               ret = register_parisc_driver(&zalon_driver);
+       if (ret)
+               ncr53c8xx_exit();
+       return ret;
 }
 
 static void __exit zalon7xx_exit(void)
 {
        unregister_parisc_driver(&zalon_driver);
+       ncr53c8xx_exit();
 }
 
 module_init(zalon7xx_init);