2009-12-20 19:41:41

by Ondrej Zary

[permalink] [raw]
Subject: [PATCH 2/3] g_NCR5380: fix broken MMIO compilation

The ifdefs are broken so the MMIO code is never compiled and so it's broken
too. Fix them all.
Untested as I don't have the hardware.

Signed-off-by: Ondrej Zary <[email protected]>

--- linux-source-2.6.32-orig/drivers/scsi/g_NCR5380.h 2009-12-03 04:51:21.000000000 +0100
+++ linux-source-2.6.32/drivers/scsi/g_NCR5380.h 2009-12-20 20:10:02.000000000 +0100
@@ -63,7 +63,7 @@ static const char* generic_NCR5380_info(
#define __STRVAL(x) #x
#define STRVAL(x) __STRVAL(x)

-#ifndef CONFIG_SCSI_G_NCR5380_MEM
+#ifndef SCSI_G_NCR5380_MEM

#define NCR5380_map_config port
#define NCR5380_map_type int
@@ -91,7 +91,7 @@ static const char* generic_NCR5380_info(
NCR5380_map_name = (NCR5380_map_type)((instance)->NCR5380_instance_name)

#else
-/* therefore CONFIG_SCSI_G_NCR5380_MEM */
+/* therefore SCSI_G_NCR5380_MEM */

#define NCR5380_map_config memory
#define NCR5380_map_type unsigned long
@@ -114,7 +114,7 @@ static const char* generic_NCR5380_info(
register void __iomem *iomem

#define NCR5380_setup(instance) \
- iomem = (((struct NCR5380_hostdata *)(instance)->hostdata).iomem)
+ iomem = (((struct NCR5380_hostdata *)(instance)->hostdata)->iomem)

#endif

--- linux-source-2.6.32-orig/drivers/scsi/g_NCR5380.c 2009-12-20 20:11:05.000000000 +0100
+++ linux-source-2.6.32/drivers/scsi/g_NCR5380.c 2009-12-20 20:14:56.000000000 +0100
@@ -285,9 +285,12 @@ static int __init do_DTC3181E_setup(char
int __init generic_NCR5380_detect(struct scsi_host_template * tpnt)
{
static int current_override = 0;
- int count, i;
+ int count;
unsigned int *ports;
+#ifndef SCSI_G_NCR5380_MEM
+ int i;
unsigned long region_size = 16;
+#endif
static unsigned int __initdata ncr_53c400a_ports[] = {
0x280, 0x290, 0x300, 0x310, 0x330, 0x340, 0x348, 0x350, 0
};
@@ -296,7 +299,7 @@ int __init generic_NCR5380_detect(struct
};
int flags = 0;
struct Scsi_Host *instance;
-#ifdef CONFIG_SCSI_G_NCR5380_MEM
+#ifdef SCSI_G_NCR5380_MEM
unsigned long base;
void __iomem *iomem;
#endif
@@ -315,7 +318,7 @@ int __init generic_NCR5380_detect(struct
overrides[0].board = BOARD_NCR53C400A;
else if (dtc_3181e != NCR_NOT_SET)
overrides[0].board = BOARD_DTC3181E;
-
+#ifndef SCSI_G_NCR5380_MEM
if (!current_override && isapnp_present()) {
struct pnp_dev *dev = NULL;
count = 0;
@@ -347,7 +350,7 @@ int __init generic_NCR5380_detect(struct
count++;
}
}
-
+#endif
tpnt->proc_name = "g_NCR5380";

for (count = 0; current_override < NO_OVERRIDES; ++current_override) {
@@ -372,7 +375,7 @@ int __init generic_NCR5380_detect(struct
break;
}

-#ifndef CONFIG_SCSI_G_NCR5380_MEM
+#ifndef SCSI_G_NCR5380_MEM
if (ports) {
/* wakeup sequence for the NCR53C400A and DTC3181E */

@@ -434,7 +437,7 @@ int __init generic_NCR5380_detect(struct
#endif
instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata));
if (instance == NULL) {
-#ifndef CONFIG_SCSI_G_NCR5380_MEM
+#ifndef SCSI_G_NCR5380_MEM
release_region(overrides[current_override].NCR5380_map_name, region_size);
#else
iounmap(iomem);
@@ -444,10 +447,10 @@ int __init generic_NCR5380_detect(struct
}

instance->NCR5380_instance_name = overrides[current_override].NCR5380_map_name;
-#ifndef CONFIG_SCSI_G_NCR5380_MEM
+#ifndef SCSI_G_NCR5380_MEM
instance->n_io_port = region_size;
#else
- ((struct NCR5380_hostdata *)instance->hostdata).iomem = iomem;
+ ((struct NCR5380_hostdata *)instance->hostdata)->iomem = iomem;
#endif

NCR5380_init(instance, flags);
@@ -515,10 +518,10 @@ int generic_NCR5380_release_resources(st
free_irq(instance->irq, instance);
NCR5380_exit(instance);

-#ifndef CONFIG_SCSI_G_NCR5380_MEM
+#ifndef SCSI_G_NCR5380_MEM
release_region(instance->NCR5380_instance_name, instance->n_io_port);
#else
- iounmap(((struct NCR5380_hostdata *)instance->hostdata).iomem);
+ iounmap(((struct NCR5380_hostdata *)instance->hostdata)->iomem);
release_mem_region(instance->NCR5380_instance_name, NCR5380_region_size);
#endif

@@ -588,14 +591,14 @@ static inline int NCR5380_pread(struct S
}
while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY);

-#ifndef CONFIG_SCSI_G_NCR5380_MEM
+#ifndef SCSI_G_NCR5380_MEM
{
int i;
for (i = 0; i < 128; i++)
dst[start + i] = NCR5380_read(C400_HOST_BUFFER);
}
#else
- /* implies CONFIG_SCSI_G_NCR5380_MEM */
+ /* implies SCSI_G_NCR5380_MEM */
memcpy_fromio(dst + start, iomem + NCR53C400_host_buffer, 128);
#endif
start += 128;
@@ -608,14 +611,14 @@ static inline int NCR5380_pread(struct S
// FIXME - no timeout
}

-#ifndef CONFIG_SCSI_G_NCR5380_MEM
+#ifndef SCSI_G_NCR5380_MEM
{
int i;
for (i = 0; i < 128; i++)
dst[start + i] = NCR5380_read(C400_HOST_BUFFER);
}
#else
- /* implies CONFIG_SCSI_G_NCR5380_MEM */
+ /* implies SCSI_G_NCR5380_MEM */
memcpy_fromio(dst + start, iomem + NCR53C400_host_buffer, 128);
#endif
start += 128;
@@ -674,13 +677,13 @@ static inline int NCR5380_pwrite(struct
}
while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY)
; // FIXME - timeout
-#ifndef CONFIG_SCSI_G_NCR5380_MEM
+#ifndef SCSI_G_NCR5380_MEM
{
for (i = 0; i < 128; i++)
NCR5380_write(C400_HOST_BUFFER, src[start + i]);
}
#else
- /* implies CONFIG_SCSI_G_NCR5380_MEM */
+ /* implies SCSI_G_NCR5380_MEM */
memcpy_toio(iomem + NCR53C400_host_buffer, src + start, 128);
#endif
start += 128;
@@ -690,13 +693,13 @@ static inline int NCR5380_pwrite(struct
while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY)
; // FIXME - no timeout

-#ifndef CONFIG_SCSI_G_NCR5380_MEM
+#ifndef SCSI_G_NCR5380_MEM
{
for (i = 0; i < 128; i++)
NCR5380_write(C400_HOST_BUFFER, src[start + i]);
}
#else
- /* implies CONFIG_SCSI_G_NCR5380_MEM */
+ /* implies SCSI_G_NCR5380_MEM */
memcpy_toio(iomem + NCR53C400_host_buffer, src + start, 128);
#endif
start += 128;
@@ -936,7 +939,7 @@ module_param(ncr_53c400a, int, 0);
module_param(dtc_3181e, int, 0);
MODULE_LICENSE("GPL");

-
+#ifndef SCSI_G_NCR5380_MEM
static struct isapnp_device_id id_table[] __devinitdata = {
{
ISAPNP_ANY_ID, ISAPNP_ANY_ID,
@@ -946,7 +949,7 @@ static struct isapnp_device_id id_table[
};

MODULE_DEVICE_TABLE(isapnp, id_table);
-
+#endif

__setup("ncr5380=", do_NCR5380_setup);
__setup("ncr53c400=", do_NCR53C400_setup);


--
Ondrej Zary


2009-12-20 20:16:33

by Andy Walls

[permalink] [raw]
Subject: Re: [PATCH 2/3] g_NCR5380: fix broken MMIO compilation

On Sun, 2009-12-20 at 20:41 +0100, Ondrej Zary wrote:
> The ifdefs are broken so the MMIO code is never compiled and so it's broken
> too. Fix them all.
> Untested as I don't have the hardware.

I still have a DTC-xxxx card in use (under Windows95) and a SUMO SCSI AT
(usable with g_NCR5380 with a minor hack to toggle a flip flop that
gates interrupts to the ISA bus). :)

I think both cards are wired to use I/O space and not memory space, so
they are of no help for testing MMIO. :(

But, ah memories....

Regards,
Andy

2009-12-20 21:06:29

by Ondrej Zary

[permalink] [raw]
Subject: Re: [PATCH 2/3] g_NCR5380: fix broken MMIO compilation

On Sunday 20 December 2009 21:15:44 Andy Walls wrote:
> On Sun, 2009-12-20 at 20:41 +0100, Ondrej Zary wrote:
> > The ifdefs are broken so the MMIO code is never compiled and so it's
> > broken too. Fix them all.
> > Untested as I don't have the hardware.
>
> I still have a DTC-xxxx card in use (under Windows95) and a SUMO SCSI AT
> (usable with g_NCR5380 with a minor hack to toggle a flip flop that
> gates interrupts to the ISA bus). :)
>
> I think both cards are wired to use I/O space and not memory space, so
> they are of no help for testing MMIO. :(

I have some cards but probably none of them is memory mapped:
DTCT-436P (PnP) - this seems to work (but don't have proper SCSI cable to test
it really)
HP C2505 (53C400A) - does not work (wrote about this card to LKML in 2004)
Canon FG2-5202 (53C400) - does not work

> But, ah memories....
>
> Regards,
> Andy
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html



--
Ondrej Zary