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

via-rhine: RHINE_WAIT_FOR macro removal.

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>

+50 -24
+50 -24
drivers/net/ethernet/via/via-rhine.c
··· 501 501 static int rhine_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid); 502 502 static void rhine_restart_tx(struct net_device *dev); 503 503 504 - #define RHINE_WAIT_FOR(condition) \ 505 - do { \ 506 - int i = 1024; \ 507 - while (!(condition) && --i) \ 508 - ; \ 509 - if (debug > 1 && i < 512) \ 510 - pr_info("%4d cycles used @ %s:%d\n", \ 511 - 1024 - i, __func__, __LINE__); \ 512 - } while (0) 504 + static void rhine_wait_bit(struct rhine_private *rp, u8 reg, u8 mask, bool high) 505 + { 506 + void __iomem *ioaddr = rp->base; 507 + int i; 508 + 509 + for (i = 0; i < 1024; i++) { 510 + if (high ^ !!(ioread8(ioaddr + reg) & mask)) 511 + break; 512 + udelay(10); 513 + } 514 + if (i > 64) { 515 + netdev_dbg(rp->dev, "%s bit wait (%02x/%02x) cycle " 516 + "count: %04d\n", high ? "high" : "low", reg, mask, i); 517 + } 518 + } 519 + 520 + static void rhine_wait_bit_high(struct rhine_private *rp, u8 reg, u8 mask) 521 + { 522 + rhine_wait_bit(rp, reg, mask, true); 523 + } 524 + 525 + static void rhine_wait_bit_low(struct rhine_private *rp, u8 reg, u8 mask) 526 + { 527 + rhine_wait_bit(rp, reg, mask, false); 528 + } 513 529 514 530 static u32 rhine_get_events(struct rhine_private *rp) 515 531 { ··· 625 609 iowrite8(0x40, ioaddr + MiscCmd); 626 610 627 611 /* Reset can take somewhat longer (rare) */ 628 - RHINE_WAIT_FOR(!(ioread8(ioaddr + ChipCmd1) & Cmd1Reset)); 612 + rhine_wait_bit_low(rp, ChipCmd1, Cmd1Reset); 629 613 } 630 614 631 615 if (debug > 1) ··· 657 641 { 658 642 struct rhine_private *rp = netdev_priv(dev); 659 643 void __iomem *ioaddr = rp->base; 644 + int i; 660 645 661 646 outb(0x20, pioaddr + MACRegEEcsr); 662 - RHINE_WAIT_FOR(!(inb(pioaddr + MACRegEEcsr) & 0x20)); 647 + for (i = 0; i < 1024; i++) { 648 + if (!(inb(pioaddr + MACRegEEcsr) & 0x20)) 649 + break; 650 + } 651 + if (i > 512) 652 + pr_info("%4d cycles used @ %s:%d\n", i, __func__, __LINE__); 663 653 664 654 #ifdef USE_MMIO 665 655 /* ··· 792 770 u8 cmd; 793 771 794 772 /* Avoid scavenging before Tx engine turned off */ 795 - RHINE_WAIT_FOR(!(ioread8(ioaddr + ChipCmd) & CmdTxOn)); 773 + rhine_wait_bit_low(rp, ChipCmd, CmdTxOn); 796 774 cmd = ioread8(ioaddr + ChipCmd); 797 775 if ((cmd & CmdTxOn) && (debug > 2)) { 798 776 netdev_warn(dev, "%s: Tx engine still on\n", ··· 1466 1444 } 1467 1445 1468 1446 /* Enable MII link status auto-polling (required for IntrLinkChange) */ 1469 - static void rhine_enable_linkmon(void __iomem *ioaddr) 1447 + static void rhine_enable_linkmon(struct rhine_private *rp) 1470 1448 { 1449 + void __iomem *ioaddr = rp->base; 1450 + 1471 1451 iowrite8(0, ioaddr + MIICmd); 1472 1452 iowrite8(MII_BMSR, ioaddr + MIIRegAddr); 1473 1453 iowrite8(0x80, ioaddr + MIICmd); 1474 1454 1475 - RHINE_WAIT_FOR((ioread8(ioaddr + MIIRegAddr) & 0x20)); 1455 + rhine_wait_bit_high(rp, MIIRegAddr, 0x20); 1476 1456 1477 1457 iowrite8(MII_BMSR | 0x40, ioaddr + MIIRegAddr); 1478 1458 } 1479 1459 1480 1460 /* Disable MII link status auto-polling (required for MDIO access) */ 1481 - static void rhine_disable_linkmon(void __iomem *ioaddr, u32 quirks) 1461 + static void rhine_disable_linkmon(struct rhine_private *rp) 1482 1462 { 1463 + void __iomem *ioaddr = rp->base; 1464 + 1483 1465 iowrite8(0, ioaddr + MIICmd); 1484 1466 1485 - if (quirks & rqRhineI) { 1467 + if (rp->quirks & rqRhineI) { 1486 1468 iowrite8(0x01, ioaddr + MIIRegAddr); // MII_BMSR 1487 1469 1488 1470 /* Can be called from ISR. Evil. */ ··· 1495 1469 /* 0x80 must be set immediately before turning it off */ 1496 1470 iowrite8(0x80, ioaddr + MIICmd); 1497 1471 1498 - RHINE_WAIT_FOR(ioread8(ioaddr + MIIRegAddr) & 0x20); 1472 + rhine_wait_bit_high(rp, MIIRegAddr, 0x20); 1499 1473 1500 1474 /* Heh. Now clear 0x80 again. */ 1501 1475 iowrite8(0, ioaddr + MIICmd); 1502 1476 } 1503 1477 else 1504 - RHINE_WAIT_FOR(ioread8(ioaddr + MIIRegAddr) & 0x80); 1478 + rhine_wait_bit_high(rp, MIIRegAddr, 0x80); 1505 1479 } 1506 1480 1507 1481 /* Read and write over the MII Management Data I/O (MDIO) interface. */ ··· 1512 1486 void __iomem *ioaddr = rp->base; 1513 1487 int result; 1514 1488 1515 - rhine_disable_linkmon(ioaddr, rp->quirks); 1489 + rhine_disable_linkmon(rp); 1516 1490 1517 1491 /* rhine_disable_linkmon already cleared MIICmd */ 1518 1492 iowrite8(phy_id, ioaddr + MIIPhyAddr); 1519 1493 iowrite8(regnum, ioaddr + MIIRegAddr); 1520 1494 iowrite8(0x40, ioaddr + MIICmd); /* Trigger read */ 1521 - RHINE_WAIT_FOR(!(ioread8(ioaddr + MIICmd) & 0x40)); 1495 + rhine_wait_bit_low(rp, MIICmd, 0x40); 1522 1496 result = ioread16(ioaddr + MIIData); 1523 1497 1524 - rhine_enable_linkmon(ioaddr); 1498 + rhine_enable_linkmon(rp); 1525 1499 return result; 1526 1500 } 1527 1501 ··· 1530 1504 struct rhine_private *rp = netdev_priv(dev); 1531 1505 void __iomem *ioaddr = rp->base; 1532 1506 1533 - rhine_disable_linkmon(ioaddr, rp->quirks); 1507 + rhine_disable_linkmon(rp); 1534 1508 1535 1509 /* rhine_disable_linkmon already cleared MIICmd */ 1536 1510 iowrite8(phy_id, ioaddr + MIIPhyAddr); 1537 1511 iowrite8(regnum, ioaddr + MIIRegAddr); 1538 1512 iowrite16(value, ioaddr + MIIData); 1539 1513 iowrite8(0x20, ioaddr + MIICmd); /* Trigger write */ 1540 - RHINE_WAIT_FOR(!(ioread8(ioaddr + MIICmd) & 0x20)); 1514 + rhine_wait_bit_low(rp, MIICmd, 0x20); 1541 1515 1542 - rhine_enable_linkmon(ioaddr); 1516 + rhine_enable_linkmon(rp); 1543 1517 } 1544 1518 1545 1519 static void rhine_task_disable(struct rhine_private *rp)