patch-2.3.14 linux/drivers/scsi/blz1230.c
Next file: linux/drivers/scsi/blz1230.h
Previous file: linux/drivers/scsi/atari_scsi.c
Back to the patch index
Back to the overall index
- Lines: 108
- Date:
Wed Aug 18 10:00:52 1999
- Orig file:
v2.3.13/linux/drivers/scsi/blz1230.c
- Orig date:
Wed Nov 11 11:50:00 1998
diff -u --recursive --new-file v2.3.13/linux/drivers/scsi/blz1230.c linux/drivers/scsi/blz1230.c
@@ -14,6 +14,8 @@
* routines in this file used to be inline!
*/
+#include <linux/module.h>
+
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/types.h>
@@ -55,7 +57,7 @@
*/
/***************************************************************** Detection */
-int blz1230_esp_detect(Scsi_Host_Template *tpnt)
+int __init blz1230_esp_detect(Scsi_Host_Template *tpnt)
{
struct NCR_ESP *esp;
const struct ConfigDev *esp_dev;
@@ -80,12 +82,15 @@
eregs = (struct ESP_regs *)(address + BLZ1230II_ESP_ADDR);
#endif
- eregs->esp_cfg1 = (ESP_CONFIG1_PENABLE | 7);
+ esp = esp_allocate(tpnt, (void *) esp_dev);
+
+ esp_write(eregs->esp_cfg1, (ESP_CONFIG1_PENABLE | 7));
udelay(5);
- if(eregs->esp_cfg1 != (ESP_CONFIG1_PENABLE | 7))
+ if(esp_read(eregs->esp_cfg1) != (ESP_CONFIG1_PENABLE | 7)){
+ esp_deallocate(esp);
+ scsi_unregister(esp->ehost);
return 0; /* Bail out if address did not hold data */
-
- esp = esp_allocate(tpnt, (void *) esp_dev);
+ }
/* Do command transfer with programmed I/O */
esp->do_pio_cmds = 1;
@@ -131,24 +136,24 @@
/* Set the command buffer */
esp->esp_command = (volatile unsigned char*) cmd_buffer;
- esp->esp_command_dvma = virt_to_bus((unsigned long) cmd_buffer);
+ esp->esp_command_dvma = virt_to_bus(cmd_buffer);
esp->irq = IRQ_AMIGA_PORTS;
- request_irq(IRQ_AMIGA_PORTS, esp_intr, 0,
+ esp->slot = key;
+ request_irq(IRQ_AMIGA_PORTS, esp_intr, SA_SHIRQ,
"Blizzard 1230 SCSI IV", esp_intr);
/* Figure out our scsi ID on the bus */
esp->scsi_id = 7;
- /* Check for differential SCSI-bus */
- /* What is this stuff? */
+ /* We don't have a differential SCSI-bus. */
esp->diff = 0;
esp_initialize(esp);
zorro_config_board(key, 0);
- printk("\nESP: Total of %d ESP hosts found, %d actually in use.\n", nesps,esps_in_use);
+ printk("ESP: Total of %d ESP hosts found, %d actually in use.\n", nesps, esps_in_use);
esps_running = esps_in_use;
return esps_in_use;
}
@@ -249,7 +254,7 @@
static int dma_irq_p(struct NCR_ESP *esp)
{
- return (esp->eregs->esp_status & ESP_STAT_INTR);
+ return (esp_read(esp->eregs->esp_status) & ESP_STAT_INTR);
}
static int dma_ports_p(struct NCR_ESP *esp)
@@ -267,4 +272,30 @@
} else {
dma_init_write(esp, addr, count);
}
+}
+
+#ifdef MODULE
+
+#define HOSTS_C
+
+#include "blz1230.h"
+
+Scsi_Host_Template driver_template = SCSI_BLZ1230;
+
+#include "scsi_module.c"
+
+#endif
+
+int blz1230_esp_release(struct Scsi_Host *instance)
+{
+#ifdef MODULE
+ unsigned int key;
+
+ key = ((struct NCR_ESP *)instance->hostdata)->slot;
+ esp_deallocate((struct NCR_ESP *)instance->hostdata);
+ esp_release();
+ zorro_unconfig_board(key, 0);
+ free_irq(IRQ_AMIGA_PORTS, esp_intr);
+#endif
+ return 1;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)