Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ni52: switch to ioremap()

isa_bus_to_virt() is the wrong thing to do here; it happens
to work on i386, but only by accident. What we want is
normal ioremap/readb/etc. set - it's all in iomem.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by

Al Viro and committed by
Jeff Garzik
176f65f3 76af5699

+18 -5
+18 -5
drivers/net/ni52.c
··· 320 320 struct priv *p = dev->priv; 321 321 int i; 322 322 323 - p->mapped = (char __iomem *)isa_bus_to_virt(dev->mem_start); 323 + p->mapped = ioremap(dev->mem_start, size); 324 + if (!p->mapped) 325 + return 0; 326 + 324 327 p->base = p->mapped + size - 0x01000000; 325 328 p->memtop = p->mapped + size; 326 329 p->scp = (struct scp_struct __iomem *)(p->base + SCP_DEFAULT_ADDRESS); ··· 333 330 for (i = 0; i < sizeof(struct scp_struct); i++) 334 331 /* memory was writeable? */ 335 332 if (readb((char __iomem *)p->scp + i)) 336 - return 0; 333 + goto Enodev; 337 334 writeb(SYSBUSVAL, &p->scp->sysbus); /* 1 = 8Bit-Bus, 0 = 16 Bit */ 338 335 if (readb(&p->scp->sysbus) != SYSBUSVAL) 339 - return 0; 336 + goto Enodev; 340 337 341 338 if (!check_iscp(dev, p->mapped)) 342 - return 0; 339 + goto Enodev; 343 340 if (!check_iscp(dev, p->iscp)) 344 - return 0; 341 + goto Enodev; 345 342 return 1; 343 + Enodev: 344 + iounmap(p->mapped); 345 + return 0; 346 346 } 347 347 348 348 /****************************************************************** ··· 392 386 { 393 387 struct net_device *dev = alloc_etherdev(sizeof(struct priv)); 394 388 static int ports[] = {0x300, 0x280, 0x360 , 0x320 , 0x340, 0}; 389 + struct priv *p; 395 390 int *port; 396 391 int err = 0; 397 392 398 393 if (!dev) 399 394 return ERR_PTR(-ENOMEM); 395 + 396 + p = dev->priv; 400 397 401 398 if (unit >= 0) { 402 399 sprintf(dev->name, "eth%d", unit); ··· 435 426 goto out1; 436 427 return dev; 437 428 out1: 429 + iounmap(p->mapped); 438 430 release_region(dev->base_addr, NI52_TOTAL_SIZE); 439 431 out: 440 432 free_netdev(dev); ··· 552 542 if (!dev->irq) { 553 543 printk("?autoirq, Failed to detect IRQ line!\n"); 554 544 retval = -EAGAIN; 545 + iounmap(priv->mapped); 555 546 goto out; 556 547 } 557 548 printk("IRQ %d (autodetected).\n", dev->irq); ··· 1336 1325 1337 1326 void __exit cleanup_module(void) 1338 1327 { 1328 + struct priv *p = dev_ni52->priv; 1339 1329 unregister_netdev(dev_ni52); 1330 + iounmap(p->mapped); 1340 1331 release_region(dev_ni52->base_addr, NI52_TOTAL_SIZE); 1341 1332 free_netdev(dev_ni52); 1342 1333 }