ni52: clean up check586()
take iscp-based testing into helper, kill the loop, stop wanking with reassignments of priv->iscp Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
7f8cfd5608
commit
76af5699a3
|
@ -294,21 +294,38 @@ static int ni52_open(struct net_device *dev)
|
||||||
return 0; /* most done by init */
|
return 0; /* most done by init */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int check_iscp(struct net_device *dev, void __iomem *addr)
|
||||||
|
{
|
||||||
|
struct iscp_struct __iomem *iscp = addr;
|
||||||
|
struct priv *p = dev->priv;
|
||||||
|
memset_io(iscp, 0, sizeof(struct iscp_struct));
|
||||||
|
|
||||||
|
writel(make24(iscp), &p->scp->iscp);
|
||||||
|
writeb(1, &iscp->busy);
|
||||||
|
|
||||||
|
ni_reset586();
|
||||||
|
ni_attn586();
|
||||||
|
mdelay(32); /* wait a while... */
|
||||||
|
/* i82586 clears 'busy' after successful init */
|
||||||
|
if (readb(&iscp->busy))
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**********************************************
|
/**********************************************
|
||||||
* Check to see if there's an 82586 out there.
|
* Check to see if there's an 82586 out there.
|
||||||
*/
|
*/
|
||||||
static int check586(struct net_device *dev, unsigned size)
|
static int check586(struct net_device *dev, unsigned size)
|
||||||
{
|
{
|
||||||
unsigned long where = dev->mem_start;
|
|
||||||
struct priv *p = dev->priv;
|
struct priv *p = dev->priv;
|
||||||
char __iomem *iscp_addrs[2];
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
p->mapped = (char __iomem *)isa_bus_to_virt(where);
|
p->mapped = (char __iomem *)isa_bus_to_virt(dev->mem_start);
|
||||||
p->base = p->mapped + size - 0x01000000;
|
p->base = p->mapped + size - 0x01000000;
|
||||||
p->memtop = p->mapped + size;
|
p->memtop = p->mapped + size;
|
||||||
p->scp = (struct scp_struct __iomem *)(p->base + SCP_DEFAULT_ADDRESS);
|
p->scp = (struct scp_struct __iomem *)(p->base + SCP_DEFAULT_ADDRESS);
|
||||||
p->scb = (struct scb_struct __iomem *) p->mapped;
|
p->scb = (struct scb_struct __iomem *) p->mapped;
|
||||||
|
p->iscp = (struct iscp_struct __iomem *)p->scp - 1;
|
||||||
memset_io(p->scp, 0, sizeof(struct scp_struct));
|
memset_io(p->scp, 0, sizeof(struct scp_struct));
|
||||||
for (i = 0; i < sizeof(struct scp_struct); i++)
|
for (i = 0; i < sizeof(struct scp_struct); i++)
|
||||||
/* memory was writeable? */
|
/* memory was writeable? */
|
||||||
|
@ -318,26 +335,10 @@ static int check586(struct net_device *dev, unsigned size)
|
||||||
if (readb(&p->scp->sysbus) != SYSBUSVAL)
|
if (readb(&p->scp->sysbus) != SYSBUSVAL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
iscp_addrs[0] = p->mapped;
|
if (!check_iscp(dev, p->mapped))
|
||||||
iscp_addrs[1] = (char __iomem *)p->scp - sizeof(struct iscp_struct);
|
return 0;
|
||||||
|
if (!check_iscp(dev, p->iscp))
|
||||||
for (i = 0; i < 2; i++) {
|
return 0;
|
||||||
p->iscp = (struct iscp_struct __iomem *) iscp_addrs[i];
|
|
||||||
memset_io(p->iscp, 0, sizeof(struct iscp_struct));
|
|
||||||
|
|
||||||
writel(make24(p->iscp), &p->scp->iscp);
|
|
||||||
writeb(1, &p->iscp->busy);
|
|
||||||
|
|
||||||
ni_reset586();
|
|
||||||
ni_attn586();
|
|
||||||
mdelay(32); /* wait a while... */
|
|
||||||
/* i82586 clears 'busy' after successful init */
|
|
||||||
if (readb(&p->iscp->busy))
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
p->iscp = (struct iscp_struct __iomem *)
|
|
||||||
((char __iomem *)p->scp - sizeof(struct iscp_struct));
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue