X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fscsi%2Flasi700.c;h=f0871c3ac3d98d279a7d465c487b3b7bd70da65d;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=27f5664f926a9c92e358815b596e35dd7ee23ab4;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/scsi/lasi700.c b/drivers/scsi/lasi700.c index 27f5664f9..f0871c3ac 100644 --- a/drivers/scsi/lasi700.c +++ b/drivers/scsi/lasi700.c @@ -49,23 +49,45 @@ #include #include -#include "scsi.h" -#include "hosts.h" +#include +#include +#include +#include -#include "lasi700.h" #include "53c700.h" MODULE_AUTHOR("James Bottomley"); MODULE_DESCRIPTION("lasi700 SCSI Driver"); MODULE_LICENSE("GPL"); +#define LASI_700_SVERSION 0x00071 +#define LASI_710_SVERSION 0x00082 + +#define LASI700_ID_TABLE { \ + .hw_type = HPHW_FIO, \ + .sversion = LASI_700_SVERSION, \ + .hversion = HVERSION_ANY_ID, \ + .hversion_rev = HVERSION_REV_ANY_ID, \ +} + +#define LASI710_ID_TABLE { \ + .hw_type = HPHW_FIO, \ + .sversion = LASI_710_SVERSION, \ + .hversion = HVERSION_ANY_ID, \ + .hversion_rev = HVERSION_REV_ANY_ID, \ +} + +#define LASI700_CLOCK 25 +#define LASI710_CLOCK 40 +#define LASI_SCSI_CORE_OFFSET 0x100 + static struct parisc_device_id lasi700_ids[] = { LASI700_ID_TABLE, LASI710_ID_TABLE, { 0 } }; -static Scsi_Host_Template lasi700_template = { +static struct scsi_host_template lasi700_template = { .name = "LASI SCSI 53c700", .proc_name = "lasi700", .this_id = 7, @@ -76,7 +98,7 @@ MODULE_DEVICE_TABLE(parisc, lasi700_ids); static int __init lasi700_probe(struct parisc_device *dev) { - unsigned long base = dev->hpa + LASI_SCSI_CORE_OFFSET; + unsigned long base = dev->hpa.start + LASI_SCSI_CORE_OFFSET; struct NCR_700_Host_Parameters *hostdata; struct Scsi_Host *host; @@ -89,8 +111,8 @@ lasi700_probe(struct parisc_device *dev) memset(hostdata, 0, sizeof(struct NCR_700_Host_Parameters)); hostdata->dev = &dev->dev; - dma_set_mask(&dev->dev, 0xffffffffUL); - hostdata->base = base; + dma_set_mask(&dev->dev, DMA_32BIT_MASK); + hostdata->base = ioremap_nocache(base, 0x100); hostdata->differential = 0; if (dev->id.sversion == LASI_700_SVERSION) { @@ -103,32 +125,26 @@ lasi700_probe(struct parisc_device *dev) hostdata->dmode_extra = DMODE_FC2; } - NCR_700_set_mem_mapped(hostdata); - - host = NCR_700_detect(&lasi700_template, hostdata); + host = NCR_700_detect(&lasi700_template, hostdata, &dev->dev); if (!host) goto out_kfree; - + host->this_id = 7; + host->base = base; host->irq = dev->irq; - if (request_irq(dev->irq, NCR_700_intr, SA_SHIRQ, - dev->dev.bus_id, host)) { - printk(KERN_ERR "%s: irq problem, detaching\n", - dev->dev.bus_id); + if(request_irq(dev->irq, NCR_700_intr, IRQF_SHARED, "lasi700", host)) { + printk(KERN_ERR "lasi700: request_irq failed!\n"); goto out_put_host; } - if (scsi_add_host(host, &dev->dev)) - goto out_free_irq; dev_set_drvdata(&dev->dev, host); scsi_scan_host(host); return 0; - out_free_irq: - free_irq(host->irq, host); out_put_host: scsi_host_put(host); out_kfree: + iounmap(hostdata->base); kfree(hostdata); return -ENODEV; } @@ -143,13 +159,14 @@ lasi700_driver_remove(struct parisc_device *dev) scsi_remove_host(host); NCR_700_release(host); free_irq(host->irq, host); + iounmap(hostdata->base); kfree(hostdata); return 0; } static struct parisc_driver lasi700_driver = { - .name = "Lasi SCSI", + .name = "lasi_scsi", .id_table = lasi700_ids, .probe = lasi700_probe, .remove = __devexit_p(lasi700_driver_remove),