diff -urN linux-2.4.17/Makefile linux-2.4.17-ncr/Makefile --- linux-2.4.17/Makefile Sun Dec 23 16:23:35 2001 +++ linux-2.4.17-ncr/Makefile Sun Jan 6 23:29:25 2002 @@ -204,7 +204,7 @@ drivers/scsi/aic7xxx/aicasm/aicasm_scan.c \ drivers/scsi/aic7xxx/aicasm/y.tab.h \ drivers/scsi/aic7xxx/aicasm/aicasm \ - drivers/scsi/53c700-mem.c \ + drivers/scsi/53c700_d.h \ net/khttpd/make_times_h \ net/khttpd/times.h \ submenu* diff -urN linux-2.4.17/drivers/scsi/53c700.c linux-2.4.17-ncr/drivers/scsi/53c700.c --- linux-2.4.17/drivers/scsi/53c700.c Sat Dec 1 18:27:13 2001 +++ linux-2.4.17-ncr/drivers/scsi/53c700.c Sun Jan 6 23:29:25 2002 @@ -51,6 +51,14 @@ /* CHANGELOG * + * Version 2.7 + * + * Fixed scripts problem which caused certain devices (notably CDRWs) + * to hang on initial INQUIRY. Updated NCR_700_readl/writel to use + * __raw_readl/writel for parisc compatibility (Thomas + * Bogendoerfer). Added missing SCp->request_bufflen initialisation + * for sense requests (Ryan Bradetich). + * * Version 2.6 * * Following test of the 64 bit parisc kernel by Richard Hirst, @@ -96,7 +104,7 @@ * Initial modularisation from the D700. See NCR_D700.c for the rest of * the changelog. * */ -#define NCR_700_VERSION "2.6" +#define NCR_700_VERSION "2.7" #include #include @@ -1049,6 +1057,7 @@ slot->pCmd, SCp->cmd_len, PCI_DMA_TODEVICE); + SCp->request_bufflen = sizeof(SCp->sense_buffer); slot->dma_handle = pci_map_single(hostdata->pci_dev, SCp->sense_buffer, sizeof(SCp->sense_buffer), PCI_DMA_FROMDEVICE); slot->SG[0].ins = bS_to_host(SCRIPT_MOVE_DATA_IN | sizeof(SCp->sense_buffer)); slot->SG[0].pAddr = bS_to_host(slot->dma_handle); diff -urN linux-2.4.17/drivers/scsi/53c700.h linux-2.4.17-ncr/drivers/scsi/53c700.h --- linux-2.4.17/drivers/scsi/53c700.h Sat Dec 1 18:27:13 2001 +++ linux-2.4.17-ncr/drivers/scsi/53c700.h Sun Jan 6 23:29:25 2002 @@ -210,7 +210,7 @@ struct NCR_700_Host_Parameters { /* These must be filled in by the calling driver */ int clock; /* board clock speed in MHz */ - __u32 base; /* the base for the port (copied to host) */ + unsigned long base; /* the base for the port (copied to host) */ struct pci_dev *pci_dev; __u32 dmode_extra; /* adjustable bus settings */ __u32 differential:1; /* if we are differential */ @@ -503,7 +503,7 @@ static inline __u32 NCR_700_readl(struct Scsi_Host *host, __u32 reg) { - __u32 value = readl(host->base + reg); + __u32 value = __raw_readl(host->base + reg); const struct NCR_700_Host_Parameters *hostdata __attribute__((unused)) = (struct NCR_700_Host_Parameters *)host->hostdata[0]; #if 1 @@ -536,7 +536,7 @@ BUG(); #endif - writel(bS_to_host(value), host->base + reg); + __raw_writel(bS_to_host(value), host->base + reg); } #elif defined(CONFIG_53C700_IO_MAPPED) static inline __u8 diff -urN linux-2.4.17/drivers/scsi/53c700.scr linux-2.4.17-ncr/drivers/scsi/53c700.scr --- linux-2.4.17/drivers/scsi/53c700.scr Sat Dec 1 18:27:13 2001 +++ linux-2.4.17-ncr/drivers/scsi/53c700.scr Sun Jan 6 23:29:25 2002 @@ -242,7 +242,7 @@ SendIdentifyMsg: CALL SendMessage - JUMP SendCommand + CLEAR ATN IgnoreMsgBeforeCommand: CLEAR ACK diff -urN linux-2.4.17/drivers/scsi/NCR_D700.c linux-2.4.17-ncr/drivers/scsi/NCR_D700.c --- linux-2.4.17/drivers/scsi/NCR_D700.c Sat Dec 1 18:27:13 2001 +++ linux-2.4.17-ncr/drivers/scsi/NCR_D700.c Sun Jan 6 23:29:25 2002 @@ -36,6 +36,10 @@ /* CHANGELOG * + * Version 2.2 + * + * Added mca_set_adapter_name(). + * * Version 2.1 * * Modularise the driver into a Board piece (this file) and a chip @@ -86,7 +90,7 @@ * disconnections and reselections are being processed correctly. * */ -#define NCR_D700_VERSION "2.1" +#define NCR_D700_VERSION "2.2" #include #include @@ -299,6 +303,7 @@ continue; } found++; + mca_set_adapter_name(slot, "NCR D700 SCSI Adapter (version " NCR_D700_VERSION ")"); } } diff -urN linux-2.4.17/drivers/scsi/lasi700.c linux-2.4.17-ncr/drivers/scsi/lasi700.c --- linux-2.4.17/drivers/scsi/lasi700.c Sat Dec 1 18:27:13 2001 +++ linux-2.4.17-ncr/drivers/scsi/lasi700.c Sun Jan 6 23:29:25 2002 @@ -136,7 +136,6 @@ lasi700_driver_callback(struct parisc_device *dev) { unsigned long base = dev->hpa + LASI_SCSI_CORE_OFFSET; - int irq = busdevice_alloc_irq(dev); char *driver_name; struct Scsi_Host *host; struct NCR_700_Host_Parameters *hostdata = @@ -170,14 +169,15 @@ hostdata->chip710 = 1; hostdata->dmode_extra = DMODE_FC2; } + hostdata->pci_dev = ccio_get_fake(dev); if((host = NCR_700_detect(host_tpnt, hostdata)) == NULL) { kfree(hostdata); release_mem_region(host->base, 64); return 1; } - host->irq = irq; - if(request_irq(irq, NCR_700_intr, SA_SHIRQ, driver_name, host)) { - printk(KERN_ERR "%s: irq problem, detatching\n", + host->irq = dev->irq; + if(request_irq(dev->irq, NCR_700_intr, SA_SHIRQ, driver_name, host)) { + printk(KERN_ERR "%s: irq problem, detaching\n", driver_name); scsi_unregister(host); NCR_700_release(host); @@ -197,6 +197,7 @@ kfree(hostdata); free_irq(host->irq, host); release_mem_region(host->base, 64); + unregister_parisc_driver(&lasi700_driver); return 1; }