Loading drivers/scsi/gvp11.c +83 −77 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ #include <linux/stat.h> #define CHECK_WD33C93 static irqreturn_t gvp11_intr(int irq, void *data) { struct Scsi_Host *instance = data; Loading Loading @@ -167,66 +169,12 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, } } #define CHECK_WD33C93 int __init gvp11_detect(struct scsi_host_template *tpnt) static int __init check_wd33c93(gvp11_scsiregs *regs) { static unsigned char called = 0; struct Scsi_Host *instance; unsigned long address; unsigned int epc; struct zorro_dev *z = NULL; unsigned int default_dma_xfer_mask; struct WD33C93_hostdata *hdata; gvp11_scsiregs *regs; wd33c93_regs wdregs; int num_gvp11 = 0; #ifdef CHECK_WD33C93 volatile unsigned char *sasr_3393, *scmd_3393; unsigned char save_sasr; unsigned char q, qq; #endif if (!MACH_IS_AMIGA || called) return 0; called = 1; tpnt->proc_name = "GVP11"; tpnt->proc_info = &wd33c93_proc_info; while ((z = zorro_find_device(ZORRO_WILDCARD, z))) { /* * This should (hopefully) be the correct way to identify * all the different GVP SCSI controllers (except for the * SERIES I though). */ if (z->id == ZORRO_PROD_GVP_COMBO_030_R3_SCSI || z->id == ZORRO_PROD_GVP_SERIES_II) default_dma_xfer_mask = ~0x00ffffff; else if (z->id == ZORRO_PROD_GVP_GFORCE_030_SCSI || z->id == ZORRO_PROD_GVP_A530_SCSI || z->id == ZORRO_PROD_GVP_COMBO_030_R4_SCSI) default_dma_xfer_mask = ~0x01ffffff; else if (z->id == ZORRO_PROD_GVP_A1291 || z->id == ZORRO_PROD_GVP_GFORCE_040_SCSI_1) default_dma_xfer_mask = ~0x07ffffff; else continue; /* * Rumors state that some GVP ram boards use the same product * code as the SCSI controllers. Therefore if the board-size * is not 64KB we asume it is a ram board and bail out. */ if (z->resource.end - z->resource.start != 0xffff) continue; address = z->resource.start; if (!request_mem_region(address, 256, "wd33c93")) continue; #ifdef CHECK_WD33C93 /* * These darn GVP boards are a problem - it can be tough to tell Loading @@ -239,26 +187,26 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) /* Get pointers to the presumed register locations and save contents */ sasr_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR(address)))->SASR); scmd_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR(address)))->SCMD); sasr_3393 = ®s->SASR; scmd_3393 = ®s->SCMD; save_sasr = *sasr_3393; /* First test the AuxStatus Reg */ q = *sasr_3393; /* read it */ if (q & 0x08) /* bit 3 should always be clear */ goto release; return -ENODEV; *sasr_3393 = WD_AUXILIARY_STATUS; /* setup indirect address */ if (*sasr_3393 == WD_AUXILIARY_STATUS) { /* shouldn't retain the write */ *sasr_3393 = save_sasr; /* Oops - restore this byte */ goto release; return -ENODEV; } if (*sasr_3393 != q) { /* should still read the same */ *sasr_3393 = save_sasr; /* Oops - restore this byte */ goto release; return -ENODEV; } if (*scmd_3393 != q) /* and so should the image at 0x1f */ goto release; return -ENODEV; /* * Ok, we probably have a wd33c93, but let's check a few other places Loading @@ -275,7 +223,7 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) *sasr_3393 = WD_SCSI_STATUS; *scmd_3393 = q; if (qq != q) /* should be read only */ goto release; return -ENODEV; *sasr_3393 = 0x1e; /* this register is unimplemented */ q = *scmd_3393; *sasr_3393 = 0x1e; Loading @@ -285,7 +233,7 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) *sasr_3393 = 0x1e; *scmd_3393 = q; if (qq != q || qq != 0xff) /* should be read only, all 1's */ goto release; return -ENODEV; *sasr_3393 = WD_TIMEOUT_PERIOD; q = *scmd_3393; *sasr_3393 = WD_TIMEOUT_PERIOD; Loading @@ -295,8 +243,67 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) *sasr_3393 = WD_TIMEOUT_PERIOD; *scmd_3393 = q; if (qq != (~q & 0xff)) /* should be read/write */ return -ENODEV; #endif /* CHECK_WD33C93 */ return 0; } int __init gvp11_detect(struct scsi_host_template *tpnt) { static unsigned char called = 0; struct Scsi_Host *instance; unsigned long address; unsigned int epc; struct zorro_dev *z = NULL; unsigned int default_dma_xfer_mask; struct WD33C93_hostdata *hdata; gvp11_scsiregs *regs; wd33c93_regs wdregs; int num_gvp11 = 0; if (!MACH_IS_AMIGA || called) return 0; called = 1; tpnt->proc_name = "GVP11"; tpnt->proc_info = &wd33c93_proc_info; while ((z = zorro_find_device(ZORRO_WILDCARD, z))) { /* * This should (hopefully) be the correct way to identify * all the different GVP SCSI controllers (except for the * SERIES I though). */ if (z->id == ZORRO_PROD_GVP_COMBO_030_R3_SCSI || z->id == ZORRO_PROD_GVP_SERIES_II) default_dma_xfer_mask = ~0x00ffffff; else if (z->id == ZORRO_PROD_GVP_GFORCE_030_SCSI || z->id == ZORRO_PROD_GVP_A530_SCSI || z->id == ZORRO_PROD_GVP_COMBO_030_R4_SCSI) default_dma_xfer_mask = ~0x01ffffff; else if (z->id == ZORRO_PROD_GVP_A1291 || z->id == ZORRO_PROD_GVP_GFORCE_040_SCSI_1) default_dma_xfer_mask = ~0x07ffffff; else continue; /* * Rumors state that some GVP ram boards use the same product * code as the SCSI controllers. Therefore if the board-size * is not 64KB we asume it is a ram board and bail out. */ if (z->resource.end - z->resource.start != 0xffff) continue; address = z->resource.start; if (!request_mem_region(address, 256, "wd33c93")) continue; regs = (gvp11_scsiregs *)(ZTWO_VADDR(address)); if (check_wd33c93(regs)) goto release; #endif instance = scsi_register(tpnt, sizeof(struct WD33C93_hostdata)); if (instance == NULL) Loading @@ -311,7 +318,6 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) else hdata->dma_xfer_mask = default_dma_xfer_mask; regs = (gvp11_scsiregs *)(instance->base); regs->secret2 = 1; regs->secret1 = 0; regs->secret3 = 15; Loading Loading
drivers/scsi/gvp11.c +83 −77 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ #include <linux/stat.h> #define CHECK_WD33C93 static irqreturn_t gvp11_intr(int irq, void *data) { struct Scsi_Host *instance = data; Loading Loading @@ -167,66 +169,12 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, } } #define CHECK_WD33C93 int __init gvp11_detect(struct scsi_host_template *tpnt) static int __init check_wd33c93(gvp11_scsiregs *regs) { static unsigned char called = 0; struct Scsi_Host *instance; unsigned long address; unsigned int epc; struct zorro_dev *z = NULL; unsigned int default_dma_xfer_mask; struct WD33C93_hostdata *hdata; gvp11_scsiregs *regs; wd33c93_regs wdregs; int num_gvp11 = 0; #ifdef CHECK_WD33C93 volatile unsigned char *sasr_3393, *scmd_3393; unsigned char save_sasr; unsigned char q, qq; #endif if (!MACH_IS_AMIGA || called) return 0; called = 1; tpnt->proc_name = "GVP11"; tpnt->proc_info = &wd33c93_proc_info; while ((z = zorro_find_device(ZORRO_WILDCARD, z))) { /* * This should (hopefully) be the correct way to identify * all the different GVP SCSI controllers (except for the * SERIES I though). */ if (z->id == ZORRO_PROD_GVP_COMBO_030_R3_SCSI || z->id == ZORRO_PROD_GVP_SERIES_II) default_dma_xfer_mask = ~0x00ffffff; else if (z->id == ZORRO_PROD_GVP_GFORCE_030_SCSI || z->id == ZORRO_PROD_GVP_A530_SCSI || z->id == ZORRO_PROD_GVP_COMBO_030_R4_SCSI) default_dma_xfer_mask = ~0x01ffffff; else if (z->id == ZORRO_PROD_GVP_A1291 || z->id == ZORRO_PROD_GVP_GFORCE_040_SCSI_1) default_dma_xfer_mask = ~0x07ffffff; else continue; /* * Rumors state that some GVP ram boards use the same product * code as the SCSI controllers. Therefore if the board-size * is not 64KB we asume it is a ram board and bail out. */ if (z->resource.end - z->resource.start != 0xffff) continue; address = z->resource.start; if (!request_mem_region(address, 256, "wd33c93")) continue; #ifdef CHECK_WD33C93 /* * These darn GVP boards are a problem - it can be tough to tell Loading @@ -239,26 +187,26 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) /* Get pointers to the presumed register locations and save contents */ sasr_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR(address)))->SASR); scmd_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR(address)))->SCMD); sasr_3393 = ®s->SASR; scmd_3393 = ®s->SCMD; save_sasr = *sasr_3393; /* First test the AuxStatus Reg */ q = *sasr_3393; /* read it */ if (q & 0x08) /* bit 3 should always be clear */ goto release; return -ENODEV; *sasr_3393 = WD_AUXILIARY_STATUS; /* setup indirect address */ if (*sasr_3393 == WD_AUXILIARY_STATUS) { /* shouldn't retain the write */ *sasr_3393 = save_sasr; /* Oops - restore this byte */ goto release; return -ENODEV; } if (*sasr_3393 != q) { /* should still read the same */ *sasr_3393 = save_sasr; /* Oops - restore this byte */ goto release; return -ENODEV; } if (*scmd_3393 != q) /* and so should the image at 0x1f */ goto release; return -ENODEV; /* * Ok, we probably have a wd33c93, but let's check a few other places Loading @@ -275,7 +223,7 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) *sasr_3393 = WD_SCSI_STATUS; *scmd_3393 = q; if (qq != q) /* should be read only */ goto release; return -ENODEV; *sasr_3393 = 0x1e; /* this register is unimplemented */ q = *scmd_3393; *sasr_3393 = 0x1e; Loading @@ -285,7 +233,7 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) *sasr_3393 = 0x1e; *scmd_3393 = q; if (qq != q || qq != 0xff) /* should be read only, all 1's */ goto release; return -ENODEV; *sasr_3393 = WD_TIMEOUT_PERIOD; q = *scmd_3393; *sasr_3393 = WD_TIMEOUT_PERIOD; Loading @@ -295,8 +243,67 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) *sasr_3393 = WD_TIMEOUT_PERIOD; *scmd_3393 = q; if (qq != (~q & 0xff)) /* should be read/write */ return -ENODEV; #endif /* CHECK_WD33C93 */ return 0; } int __init gvp11_detect(struct scsi_host_template *tpnt) { static unsigned char called = 0; struct Scsi_Host *instance; unsigned long address; unsigned int epc; struct zorro_dev *z = NULL; unsigned int default_dma_xfer_mask; struct WD33C93_hostdata *hdata; gvp11_scsiregs *regs; wd33c93_regs wdregs; int num_gvp11 = 0; if (!MACH_IS_AMIGA || called) return 0; called = 1; tpnt->proc_name = "GVP11"; tpnt->proc_info = &wd33c93_proc_info; while ((z = zorro_find_device(ZORRO_WILDCARD, z))) { /* * This should (hopefully) be the correct way to identify * all the different GVP SCSI controllers (except for the * SERIES I though). */ if (z->id == ZORRO_PROD_GVP_COMBO_030_R3_SCSI || z->id == ZORRO_PROD_GVP_SERIES_II) default_dma_xfer_mask = ~0x00ffffff; else if (z->id == ZORRO_PROD_GVP_GFORCE_030_SCSI || z->id == ZORRO_PROD_GVP_A530_SCSI || z->id == ZORRO_PROD_GVP_COMBO_030_R4_SCSI) default_dma_xfer_mask = ~0x01ffffff; else if (z->id == ZORRO_PROD_GVP_A1291 || z->id == ZORRO_PROD_GVP_GFORCE_040_SCSI_1) default_dma_xfer_mask = ~0x07ffffff; else continue; /* * Rumors state that some GVP ram boards use the same product * code as the SCSI controllers. Therefore if the board-size * is not 64KB we asume it is a ram board and bail out. */ if (z->resource.end - z->resource.start != 0xffff) continue; address = z->resource.start; if (!request_mem_region(address, 256, "wd33c93")) continue; regs = (gvp11_scsiregs *)(ZTWO_VADDR(address)); if (check_wd33c93(regs)) goto release; #endif instance = scsi_register(tpnt, sizeof(struct WD33C93_hostdata)); if (instance == NULL) Loading @@ -311,7 +318,6 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) else hdata->dma_xfer_mask = default_dma_xfer_mask; regs = (gvp11_scsiregs *)(instance->base); regs->secret2 = 1; regs->secret1 = 0; regs->secret3 = 15; Loading