Commit 4eb10382 authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] isa_check_signature() finally gone

last callers of isa_check_signature() switched to ioremap() +
check_signature()
Signed-off-by: default avatarAl Viro <viro@parcelfarce.linux.theplanet.co.uk>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 0936015f
...@@ -266,7 +266,7 @@ static int __init xd_init(void) ...@@ -266,7 +266,7 @@ static int __init xd_init(void)
/* xd_detect: scan the possible BIOS ROM locations for the signature strings */ /* xd_detect: scan the possible BIOS ROM locations for the signature strings */
static u_char __init xd_detect (u_char *controller, unsigned int *address) static u_char __init xd_detect (u_char *controller, unsigned int *address)
{ {
u_char i,j,found = 0; int i, j;
if (xd_override) if (xd_override)
{ {
...@@ -275,15 +275,23 @@ static u_char __init xd_detect (u_char *controller, unsigned int *address) ...@@ -275,15 +275,23 @@ static u_char __init xd_detect (u_char *controller, unsigned int *address)
return(1); return(1);
} }
for (i = 0; i < (sizeof(xd_bases) / sizeof(xd_bases[0])) && !found; i++) for (i = 0; i < (sizeof(xd_bases) / sizeof(xd_bases[0])); i++) {
for (j = 1; j < (sizeof(xd_sigs) / sizeof(xd_sigs[0])) && !found; j++) void __iomem *p = ioremap(xd_bases[i], 0x2000);
if (isa_check_signature(xd_bases[i] + xd_sigs[j].offset,xd_sigs[j].string,strlen(xd_sigs[j].string))) { if (!p)
continue;
for (j = 1; j < (sizeof(xd_sigs) / sizeof(xd_sigs[0])); j++) {
const char *s = xd_sigs[j].string;
if (check_signature(p + xd_sigs[j].offset, s, strlen(s))) {
*controller = j; *controller = j;
xd_type = j; xd_type = j;
*address = xd_bases[i]; *address = xd_bases[i];
found++; iounmap(p);
return 1;
} }
return (found); }
iounmap(p);
}
return 0;
} }
/* do_xd_request: handle an incoming request */ /* do_xd_request: handle an incoming request */
......
...@@ -3830,10 +3830,15 @@ static int __init aha152x_init(void) ...@@ -3830,10 +3830,15 @@ static int __init aha152x_init(void)
if (setup_count<ARRAY_SIZE(setup)) { if (setup_count<ARRAY_SIZE(setup)) {
#if !defined(SKIP_BIOSTEST) #if !defined(SKIP_BIOSTEST)
ok = 0; ok = 0;
for (i = 0; i < ARRAY_SIZE(addresses) && !ok; i++) for (i = 0; i < ARRAY_SIZE(addresses) && !ok; i++) {
void __iomem *p = ioremap(addresses[i], 0x4000);
if (!p)
continue;
for (j = 0; j<ARRAY_SIZE(signatures) && !ok; j++) for (j = 0; j<ARRAY_SIZE(signatures) && !ok; j++)
ok = isa_check_signature(addresses[i] + signatures[j].sig_offset, ok = check_signature(p + signatures[j].sig_offset,
signatures[j].signature, signatures[j].sig_length); signatures[j].signature, signatures[j].sig_length);
iounmap(p);
}
if (!ok && setup_count == 0) if (!ok && setup_count == 0)
return 0; return 0;
......
...@@ -232,17 +232,25 @@ static int __init dtc_detect(Scsi_Host_Template * tpnt) ...@@ -232,17 +232,25 @@ static int __init dtc_detect(Scsi_Host_Template * tpnt)
base = overrides[current_override].address; base = overrides[current_override].address;
else else
for (; !base && (current_base < NO_BASES); ++current_base) { for (; !base && (current_base < NO_BASES); ++current_base) {
void __iomem *p;
#if (DTCDEBUG & DTCDEBUG_INIT) #if (DTCDEBUG & DTCDEBUG_INIT)
printk("scsi-dtc : probing address %08x\n", bases[current_base].address); printk("scsi-dtc : probing address %08x\n", bases[current_base].address);
#endif #endif
for (sig = 0; sig < NO_SIGNATURES; ++sig) if (bases[current_base].noauto)
if (!bases[current_base].noauto && isa_check_signature(bases[current_base].address + signatures[sig].offset, signatures[sig].string, strlen(signatures[sig].string))) { continue;
p = ioremap(bases[current_base].address, 0x2000);
if (!p)
continue;
for (sig = 0; sig < NO_SIGNATURES; ++sig) {
if (check_signature(p + signatures[sig].offset, signatures[sig].string, strlen(signatures[sig].string))) {
base = bases[current_base].address; base = bases[current_base].address;
#if (DTCDEBUG & DTCDEBUG_INIT) #if (DTCDEBUG & DTCDEBUG_INIT)
printk("scsi-dtc : detected board.\n"); printk("scsi-dtc : detected board.\n");
#endif #endif
break; break;
} }
}
iounmap(p);
} }
#if defined(DTCDEBUG) && (DTCDEBUG & DTCDEBUG_INIT) #if defined(DTCDEBUG) && (DTCDEBUG & DTCDEBUG_INIT)
......
...@@ -384,6 +384,7 @@ enum out_port_type { ...@@ -384,6 +384,7 @@ enum out_port_type {
/* .bss will zero all the static variables below */ /* .bss will zero all the static variables below */
static int port_base; static int port_base;
static unsigned long bios_base; static unsigned long bios_base;
static void __iomem * bios_mem;
static int bios_major; static int bios_major;
static int bios_minor; static int bios_minor;
static int PCI_bus; static int PCI_bus;
...@@ -676,12 +677,15 @@ static int fdomain_isa_detect( int *irq, int *iobase ) ...@@ -676,12 +677,15 @@ static int fdomain_isa_detect( int *irq, int *iobase )
printk( "scsi: <fdomain> fdomain_isa_detect:" ); printk( "scsi: <fdomain> fdomain_isa_detect:" );
#endif #endif
for (i = 0; !bios_base && i < ADDRESS_COUNT; i++) { for (i = 0; i < ADDRESS_COUNT; i++) {
void __iomem *p = ioremap(addresses[i], 0x2000);
if (!p)
continue;
#if DEBUG_DETECT #if DEBUG_DETECT
printk( " %lx(%lx),", addresses[i], bios_base ); printk( " %lx(%lx),", addresses[i], bios_base );
#endif #endif
for (j = 0; !bios_base && j < SIGNATURE_COUNT; j++) { for (j = 0; j < SIGNATURE_COUNT; j++) {
if (isa_check_signature(addresses[i] + signatures[j].sig_offset, if (check_signature(p + signatures[j].sig_offset,
signatures[j].signature, signatures[j].signature,
signatures[j].sig_length )) { signatures[j].sig_length )) {
bios_major = signatures[j].major_bios_version; bios_major = signatures[j].major_bios_version;
...@@ -689,10 +693,14 @@ static int fdomain_isa_detect( int *irq, int *iobase ) ...@@ -689,10 +693,14 @@ static int fdomain_isa_detect( int *irq, int *iobase )
PCI_bus = (signatures[j].flag == 1); PCI_bus = (signatures[j].flag == 1);
Quantum = (signatures[j].flag > 1) ? signatures[j].flag : 0; Quantum = (signatures[j].flag > 1) ? signatures[j].flag : 0;
bios_base = addresses[i]; bios_base = addresses[i];
bios_mem = p;
goto found;
} }
} }
iounmap(p);
} }
found:
if (bios_major == 2) { if (bios_major == 2) {
/* The TMC-1660/TMC-1680 has a RAM area just after the BIOS ROM. /* The TMC-1660/TMC-1680 has a RAM area just after the BIOS ROM.
Assuming the ROM is enabled (otherwise we wouldn't have been Assuming the ROM is enabled (otherwise we wouldn't have been
...@@ -705,13 +713,13 @@ static int fdomain_isa_detect( int *irq, int *iobase ) ...@@ -705,13 +713,13 @@ static int fdomain_isa_detect( int *irq, int *iobase )
switch (Quantum) { switch (Quantum) {
case 2: /* ISA_200S */ case 2: /* ISA_200S */
case 3: /* ISA_250MG */ case 3: /* ISA_250MG */
base = isa_readb(bios_base + 0x1fa2) + (isa_readb(bios_base + 0x1fa3) << 8); base = readb(bios_mem + 0x1fa2) + (readb(bios_mem + 0x1fa3) << 8);
break; break;
case 4: /* ISA_200S (another one) */ case 4: /* ISA_200S (another one) */
base = isa_readb(bios_base + 0x1fa3) + (isa_readb(bios_base + 0x1fa4) << 8); base = readb(bios_mem + 0x1fa3) + (readb(bios_mem + 0x1fa4) << 8);
break; break;
default: default:
base = isa_readb(bios_base + 0x1fcc) + (isa_readb(bios_base + 0x1fcd) << 8); base = readb(bios_mem + 0x1fcc) + (readb(bios_mem + 0x1fcd) << 8);
break; break;
} }
...@@ -1611,26 +1619,26 @@ static int fdomain_16x0_biosparam(struct scsi_device *sdev, ...@@ -1611,26 +1619,26 @@ static int fdomain_16x0_biosparam(struct scsi_device *sdev,
case 2: /* ISA_200S */ case 2: /* ISA_200S */
/* The value of 25 has never been verified. /* The value of 25 has never been verified.
It should probably be 15. */ It should probably be 15. */
offset = bios_base + 0x1f33 + drive * 25; offset = 0x1f33 + drive * 25;
break; break;
case 3: /* ISA_250MG */ case 3: /* ISA_250MG */
offset = bios_base + 0x1f36 + drive * 15; offset = 0x1f36 + drive * 15;
break; break;
case 4: /* ISA_200S (another one) */ case 4: /* ISA_200S (another one) */
offset = bios_base + 0x1f34 + drive * 15; offset = 0x1f34 + drive * 15;
break; break;
default: default:
offset = bios_base + 0x1f31 + drive * 25; offset = 0x1f31 + drive * 25;
break; break;
} }
isa_memcpy_fromio( &i, offset, sizeof( struct drive_info ) ); memcpy_fromio( &i, bios_mem + offset, sizeof( struct drive_info ) );
info_array[0] = i.heads; info_array[0] = i.heads;
info_array[1] = i.sectors; info_array[1] = i.sectors;
info_array[2] = i.cylinders; info_array[2] = i.cylinders;
} else if (bios_major == 3 } else if (bios_major == 3
&& bios_minor >= 0 && bios_minor >= 0
&& bios_minor < 4) { /* 3.0 and 3.2 BIOS */ && bios_minor < 4) { /* 3.0 and 3.2 BIOS */
memcpy_fromio( &i, bios_base + 0x1f71 + drive * 10, memcpy_fromio( &i, bios_mem + 0x1f71 + drive * 10,
sizeof( struct drive_info ) ); sizeof( struct drive_info ) );
info_array[0] = i.heads + 1; info_array[0] = i.heads + 1;
info_array[1] = i.sectors; info_array[1] = i.sectors;
......
...@@ -454,12 +454,18 @@ int __init seagate_st0x_detect (Scsi_Host_Template * tpnt) ...@@ -454,12 +454,18 @@ int __init seagate_st0x_detect (Scsi_Host_Template * tpnt)
* space for the on-board RAM instead. * space for the on-board RAM instead.
*/ */
for (i = 0; i < (sizeof (seagate_bases) / sizeof (unsigned int)); ++i) for (i = 0; i < (sizeof (seagate_bases) / sizeof (unsigned int)); ++i) {
for (j = 0; !base_address && j < NUM_SIGNATURES; ++j) void __iomem *p = ioremap(seagate_base[i], 0x2000);
if (isa_check_signature(seagate_bases[i] + signatures[j].offset, signatures[j].signature, signatures[j].length)) { if (!p)
continue;
for (j = 0; j < NUM_SIGNATURES; ++j)
if (check_signature(p + signatures[j].offset, signatures[j].signature, signatures[j].length)) {
base_address = seagate_bases[i]; base_address = seagate_bases[i];
controller_type = signatures[j].type; controller_type = signatures[j].type;
break;
} }
iounmap(p);
}
#endif /* OVERRIDE */ #endif /* OVERRIDE */
} }
/* (! controller_type) */ /* (! controller_type) */
......
...@@ -211,13 +211,17 @@ int __init t128_detect(Scsi_Host_Template * tpnt){ ...@@ -211,13 +211,17 @@ int __init t128_detect(Scsi_Host_Template * tpnt){
base = overrides[current_override].address; base = overrides[current_override].address;
else else
for (; !base && (current_base < NO_BASES); ++current_base) { for (; !base && (current_base < NO_BASES); ++current_base) {
void __iomem *p;
#if (TDEBUG & TDEBUG_INIT) #if (TDEBUG & TDEBUG_INIT)
printk("scsi-t128 : probing address %08x\n", bases[current_base].address); printk("scsi-t128 : probing address %08x\n", bases[current_base].address);
#endif #endif
if (bases[current_base].noauto)
continue;
p = ioremap(bases[current_base].address, 0x2000);
if (!p)
continue;
for (sig = 0; sig < NO_SIGNATURES; ++sig) for (sig = 0; sig < NO_SIGNATURES; ++sig)
if (!bases[current_base].noauto && if (check_signature(p + signatures[sig].offset,
isa_check_signature(bases[current_base].address +
signatures[sig].offset,
signatures[sig].string, signatures[sig].string,
strlen(signatures[sig].string))) { strlen(signatures[sig].string))) {
base = bases[current_base].address; base = bases[current_base].address;
...@@ -226,6 +230,7 @@ int __init t128_detect(Scsi_Host_Template * tpnt){ ...@@ -226,6 +230,7 @@ int __init t128_detect(Scsi_Host_Template * tpnt){
#endif #endif
break; break;
} }
iounmap(p);
} }
#if defined(TDEBUG) && (TDEBUG & TDEBUG_INIT) #if defined(TDEBUG) && (TDEBUG & TDEBUG_INIT)
......
...@@ -631,16 +631,6 @@ isa_memcpy_toio(unsigned long offset, const void *src, long n) ...@@ -631,16 +631,6 @@ isa_memcpy_toio(unsigned long offset, const void *src, long n)
iounmap(addr); iounmap(addr);
} }
static inline int
isa_check_signature(unsigned long offset, const unsigned char *sig, long len)
{
void __iomem *addr = ioremap(offset, len);
int ret = check_signature(addr, sig, len);
iounmap(addr);
return ret;
}
/* /*
* The Alpha Jensen hardware for some rather strange reason puts * The Alpha Jensen hardware for some rather strange reason puts
* the RTC clock at 0x170 instead of 0x70. Probably due to some * the RTC clock at 0x170 instead of 0x70. Probably due to some
......
...@@ -176,7 +176,7 @@ extern void _memset_io(void __iomem *, int, size_t); ...@@ -176,7 +176,7 @@ extern void _memset_io(void __iomem *, int, size_t);
eth_copy_and_sum((s),__mem_pci(c),(l),(b)) eth_copy_and_sum((s),__mem_pci(c),(l),(b))
static inline int static inline int
check_signature(unsigned long io_addr, const unsigned char *signature, check_signature(void __iomem *io_addr, const unsigned char *signature,
int length) int length)
{ {
int retval = 0; int retval = 0;
...@@ -226,23 +226,6 @@ check_signature(unsigned long io_addr, const unsigned char *signature, ...@@ -226,23 +226,6 @@ check_signature(unsigned long io_addr, const unsigned char *signature,
#define isa_eth_io_copy_and_sum(a,b,c,d) \ #define isa_eth_io_copy_and_sum(a,b,c,d) \
eth_copy_and_sum((a),__mem_isa(b),(c),(d)) eth_copy_and_sum((a),__mem_isa(b),(c),(d))
static inline int
isa_check_signature(unsigned long io_addr, const unsigned char *signature,
int length)
{
int retval = 0;
do {
if (isa_readb(io_addr) != *signature)
goto out;
io_addr++;
signature++;
length--;
} while (length);
retval = 1;
out:
return retval;
}
#else /* __mem_isa */ #else /* __mem_isa */
#define isa_readb(addr) (__readwrite_bug("isa_readb"),0) #define isa_readb(addr) (__readwrite_bug("isa_readb"),0)
...@@ -258,8 +241,6 @@ isa_check_signature(unsigned long io_addr, const unsigned char *signature, ...@@ -258,8 +241,6 @@ isa_check_signature(unsigned long io_addr, const unsigned char *signature,
#define isa_eth_io_copy_and_sum(a,b,c,d) \ #define isa_eth_io_copy_and_sum(a,b,c,d) \
__readwrite_bug("isa_eth_io_copy_and_sum") __readwrite_bug("isa_eth_io_copy_and_sum")
#define isa_check_signature(io,sig,len) (0)
#endif /* __mem_isa */ #endif /* __mem_isa */
/* /*
......
...@@ -248,36 +248,6 @@ static inline int check_signature(volatile void __iomem * io_addr, ...@@ -248,36 +248,6 @@ static inline int check_signature(volatile void __iomem * io_addr,
return retval; return retval;
} }
/**
* isa_check_signature - find BIOS signatures
* @io_addr: mmio address to check
* @signature: signature block
* @length: length of signature
*
* Perform a signature comparison with the ISA mmio address io_addr.
* Returns 1 on a match.
*
* This function is deprecated. New drivers should use ioremap and
* check_signature.
*/
static inline int isa_check_signature(unsigned long io_addr,
const unsigned char *signature, int length)
{
int retval = 0;
do {
if (isa_readb(io_addr) != *signature)
goto out;
io_addr++;
signature++;
length--;
} while (length);
retval = 1;
out:
return retval;
}
/* /*
* Cache management * Cache management
* *
......
...@@ -167,7 +167,7 @@ static inline void _writel(unsigned long l, unsigned long addr) ...@@ -167,7 +167,7 @@ static inline void _writel(unsigned long l, unsigned long addr)
#define flush_write_buffers() do { } while (0) /* M32R_FIXME */ #define flush_write_buffers() do { } while (0) /* M32R_FIXME */
/** /**
* isa_check_signature - find BIOS signatures * check_signature - find BIOS signatures
* @io_addr: mmio address to check * @io_addr: mmio address to check
* @signature: signature block * @signature: signature block
* @length: length of signature * @length: length of signature
...@@ -179,14 +179,14 @@ static inline void _writel(unsigned long l, unsigned long addr) ...@@ -179,14 +179,14 @@ static inline void _writel(unsigned long l, unsigned long addr)
* check_signature. * check_signature.
*/ */
static inline int isa_check_signature(unsigned long io_addr, static inline int check_signature(void __iomem *io_addr,
const unsigned char *signature, int length) const unsigned char *signature, int length)
{ {
int retval = 0; int retval = 0;
#if 0 #if 0
printk("isa_check_signature\n"); printk("check_signature\n");
do { do {
if (isa_readb(io_addr) != *signature) if (readb(io_addr) != *signature)
goto out; goto out;
io_addr++; io_addr++;
signature++; signature++;
......
...@@ -388,20 +388,6 @@ static inline int check_signature(unsigned long io_addr, ...@@ -388,20 +388,6 @@ static inline int check_signature(unsigned long io_addr,
return retval; return retval;
} }
/*
* isa_check_signature - find BIOS signatures
* @io_addr: mmio address to check
* @signature: signature block
* @length: length of signature
*
* Perform a signature comparison with the ISA mmio address io_addr.
* Returns 1 on a match.
*
* This function is deprecated. New drivers should use ioremap and
* check_signature.
*/
#define isa_check_signature(io, s, l) check_signature(i,s,l)
static inline void __outb(unsigned char val, unsigned long port) static inline void __outb(unsigned char val, unsigned long port)
{ {
port = __swizzle_addr_b(port); port = __swizzle_addr_b(port);
......
...@@ -452,13 +452,6 @@ static inline int check_signature(volatile void __iomem * io_addr, ...@@ -452,13 +452,6 @@ static inline int check_signature(volatile void __iomem * io_addr,
return retval; return retval;
} }
/* Make some pcmcia drivers happy */
static inline int isa_check_signature(unsigned long io_addr,
const unsigned char *signature, int length)
{
return 0;
}
/* /*
* Here comes the ppc implementation of the IOMAP * Here comes the ppc implementation of the IOMAP
* interfaces. * interfaces.
......
...@@ -320,38 +320,6 @@ static inline int check_signature(void __iomem *io_addr, ...@@ -320,38 +320,6 @@ static inline int check_signature(void __iomem *io_addr,
return retval; return retval;
} }
#ifndef __i386__
/**
* isa_check_signature - find BIOS signatures
* @io_addr: mmio address to check
* @signature: signature block
* @length: length of signature
*
* Perform a signature comparison with the ISA mmio address io_addr.
* Returns 1 on a match.
*
* This function is deprecated. New drivers should use ioremap and
* check_signature.
*/
static inline int isa_check_signature(unsigned long io_addr,
const unsigned char *signature, int length)
{
int retval = 0;
do {
if (isa_readb(io_addr) != *signature)
goto out;
io_addr++;
signature++;
length--;
} while (length);
retval = 1;
out:
return retval;
}
#endif
/* Nothing to do */ /* Nothing to do */
#define dma_cache_inv(_start,_size) do { } while (0) #define dma_cache_inv(_start,_size) do { } while (0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment