diff options
| author | Lennert Buytenhek <buytenh@wantstofly.org> | 2008-03-18 14:38:05 -0400 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@redhat.com> | 2008-04-16 20:06:49 -0400 |
| commit | ec69d651ac4fe726c870a82a2a75c7da69ddf4b9 (patch) | |
| tree | d0ef81ef11e7c395f7738fd210990a07ac2d3ab7 | |
| parent | c1b35a28f20c2d6ff8c5a2a035002c06b9f498c9 (diff) | |
mv643xx_eth: pass port identifier to register accessors
Pass a struct mv643xx_private * to the register accessor functions,
as a preparation for having multiple mv643xx_eth silicon blocks.
(Since this causes some 80 column straddling, and the mv_ prefix
is useless anyway, rename mv_read to rdl and mv_write to wrl to
compensate.)
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Reviewed-by: Tzachi Perelstein <tzachi@marvell.com>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
| -rw-r--r-- | drivers/net/mv643xx_eth.c | 156 |
1 files changed, 78 insertions, 78 deletions
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c index 5a4ae86e145f..39314c99520a 100644 --- a/drivers/net/mv643xx_eth.c +++ b/drivers/net/mv643xx_eth.c | |||
| @@ -615,12 +615,12 @@ static void __iomem *mv643xx_eth_base; | |||
| 615 | /* used to protect SMI_REG, which is shared across ports */ | 615 | /* used to protect SMI_REG, which is shared across ports */ |
| 616 | static DEFINE_SPINLOCK(mv643xx_eth_phy_lock); | 616 | static DEFINE_SPINLOCK(mv643xx_eth_phy_lock); |
| 617 | 617 | ||
| 618 | static inline u32 mv_read(int offset) | 618 | static inline u32 rdl(struct mv643xx_private *mp, int offset) |
| 619 | { | 619 | { |
| 620 | return readl(mv643xx_eth_base + offset); | 620 | return readl(mv643xx_eth_base + offset); |
| 621 | } | 621 | } |
| 622 | 622 | ||
| 623 | static inline void mv_write(int offset, u32 data) | 623 | static inline void wrl(struct mv643xx_private *mp, int offset, u32 data) |
| 624 | { | 624 | { |
| 625 | writel(data, mv643xx_eth_base + offset); | 625 | writel(data, mv643xx_eth_base + offset); |
| 626 | } | 626 | } |
| @@ -746,12 +746,12 @@ static void mv643xx_eth_set_rx_mode(struct net_device *dev) | |||
| 746 | struct mv643xx_private *mp = netdev_priv(dev); | 746 | struct mv643xx_private *mp = netdev_priv(dev); |
| 747 | u32 config_reg; | 747 | u32 config_reg; |
| 748 | 748 | ||
| 749 | config_reg = mv_read(PORT_CONFIG_REG(mp->port_num)); | 749 | config_reg = rdl(mp, PORT_CONFIG_REG(mp->port_num)); |
| 750 | if (dev->flags & IFF_PROMISC) | 750 | if (dev->flags & IFF_PROMISC) |
| 751 | config_reg |= (u32) UNICAST_PROMISCUOUS_MODE; | 751 | config_reg |= (u32) UNICAST_PROMISCUOUS_MODE; |
| 752 | else | 752 | else |
| 753 | config_reg &= ~(u32) UNICAST_PROMISCUOUS_MODE; | 753 | config_reg &= ~(u32) UNICAST_PROMISCUOUS_MODE; |
| 754 | mv_write(PORT_CONFIG_REG(mp->port_num), config_reg); | 754 | wrl(mp, PORT_CONFIG_REG(mp->port_num), config_reg); |
| 755 | 755 | ||
| 756 | eth_port_set_multicast_list(dev); | 756 | eth_port_set_multicast_list(dev); |
| 757 | } | 757 | } |
| @@ -987,7 +987,7 @@ static void mv643xx_eth_update_pscr(struct net_device *dev, | |||
| 987 | u32 o_pscr, n_pscr; | 987 | u32 o_pscr, n_pscr; |
| 988 | unsigned int queues; | 988 | unsigned int queues; |
| 989 | 989 | ||
| 990 | o_pscr = mv_read(PORT_SERIAL_CONTROL_REG(port_num)); | 990 | o_pscr = rdl(mp, PORT_SERIAL_CONTROL_REG(port_num)); |
| 991 | n_pscr = o_pscr; | 991 | n_pscr = o_pscr; |
| 992 | 992 | ||
| 993 | /* clear speed, duplex and rx buffer size fields */ | 993 | /* clear speed, duplex and rx buffer size fields */ |
| @@ -1010,14 +1010,14 @@ static void mv643xx_eth_update_pscr(struct net_device *dev, | |||
| 1010 | 1010 | ||
| 1011 | if (n_pscr != o_pscr) { | 1011 | if (n_pscr != o_pscr) { |
| 1012 | if ((o_pscr & SERIAL_PORT_ENABLE) == 0) | 1012 | if ((o_pscr & SERIAL_PORT_ENABLE) == 0) |
| 1013 | mv_write(PORT_SERIAL_CONTROL_REG(port_num), n_pscr); | 1013 | wrl(mp, PORT_SERIAL_CONTROL_REG(port_num), n_pscr); |
| 1014 | else { | 1014 | else { |
| 1015 | queues = mv643xx_eth_port_disable_tx(mp); | 1015 | queues = mv643xx_eth_port_disable_tx(mp); |
| 1016 | 1016 | ||
| 1017 | o_pscr &= ~SERIAL_PORT_ENABLE; | 1017 | o_pscr &= ~SERIAL_PORT_ENABLE; |
| 1018 | mv_write(PORT_SERIAL_CONTROL_REG(port_num), o_pscr); | 1018 | wrl(mp, PORT_SERIAL_CONTROL_REG(port_num), o_pscr); |
| 1019 | mv_write(PORT_SERIAL_CONTROL_REG(port_num), n_pscr); | 1019 | wrl(mp, PORT_SERIAL_CONTROL_REG(port_num), n_pscr); |
| 1020 | mv_write(PORT_SERIAL_CONTROL_REG(port_num), n_pscr); | 1020 | wrl(mp, PORT_SERIAL_CONTROL_REG(port_num), n_pscr); |
| 1021 | if (queues) | 1021 | if (queues) |
| 1022 | mv643xx_eth_port_enable_tx(mp, queues); | 1022 | mv643xx_eth_port_enable_tx(mp, queues); |
| 1023 | } | 1023 | } |
| @@ -1043,13 +1043,13 @@ static irqreturn_t mv643xx_eth_int_handler(int irq, void *dev_id) | |||
| 1043 | unsigned int port_num = mp->port_num; | 1043 | unsigned int port_num = mp->port_num; |
| 1044 | 1044 | ||
| 1045 | /* Read interrupt cause registers */ | 1045 | /* Read interrupt cause registers */ |
| 1046 | eth_int_cause = mv_read(INTERRUPT_CAUSE_REG(port_num)) & | 1046 | eth_int_cause = rdl(mp, INTERRUPT_CAUSE_REG(port_num)) & |
| 1047 | ETH_INT_UNMASK_ALL; | 1047 | ETH_INT_UNMASK_ALL; |
| 1048 | if (eth_int_cause & ETH_INT_CAUSE_EXT) { | 1048 | if (eth_int_cause & ETH_INT_CAUSE_EXT) { |
| 1049 | eth_int_cause_ext = mv_read( | 1049 | eth_int_cause_ext = rdl(mp, |
| 1050 | INTERRUPT_CAUSE_EXTEND_REG(port_num)) & | 1050 | INTERRUPT_CAUSE_EXTEND_REG(port_num)) & |
| 1051 | ETH_INT_UNMASK_ALL_EXT; | 1051 | ETH_INT_UNMASK_ALL_EXT; |
| 1052 | mv_write(INTERRUPT_CAUSE_EXTEND_REG(port_num), | 1052 | wrl(mp, INTERRUPT_CAUSE_EXTEND_REG(port_num), |
| 1053 | ~eth_int_cause_ext); | 1053 | ~eth_int_cause_ext); |
| 1054 | } | 1054 | } |
| 1055 | 1055 | ||
| @@ -1076,10 +1076,10 @@ static irqreturn_t mv643xx_eth_int_handler(int irq, void *dev_id) | |||
| 1076 | #ifdef MV643XX_NAPI | 1076 | #ifdef MV643XX_NAPI |
| 1077 | if (eth_int_cause & ETH_INT_CAUSE_RX) { | 1077 | if (eth_int_cause & ETH_INT_CAUSE_RX) { |
| 1078 | /* schedule the NAPI poll routine to maintain port */ | 1078 | /* schedule the NAPI poll routine to maintain port */ |
| 1079 | mv_write(INTERRUPT_MASK_REG(port_num), ETH_INT_MASK_ALL); | 1079 | wrl(mp, INTERRUPT_MASK_REG(port_num), ETH_INT_MASK_ALL); |
| 1080 | 1080 | ||
| 1081 | /* wait for previous write to complete */ | 1081 | /* wait for previous write to complete */ |
| 1082 | mv_read(INTERRUPT_MASK_REG(port_num)); | 1082 | rdl(mp, INTERRUPT_MASK_REG(port_num)); |
| 1083 | 1083 | ||
| 1084 | netif_rx_schedule(dev, &mp->napi); | 1084 | netif_rx_schedule(dev, &mp->napi); |
| 1085 | } | 1085 | } |
| @@ -1132,9 +1132,9 @@ static unsigned int eth_port_set_rx_coal(struct mv643xx_private *mp, | |||
| 1132 | unsigned int coal = ((t_clk / 1000000) * delay) / 64; | 1132 | unsigned int coal = ((t_clk / 1000000) * delay) / 64; |
| 1133 | 1133 | ||
| 1134 | /* Set RX Coalescing mechanism */ | 1134 | /* Set RX Coalescing mechanism */ |
| 1135 | mv_write(SDMA_CONFIG_REG(port_num), | 1135 | wrl(mp, SDMA_CONFIG_REG(port_num), |
| 1136 | ((coal & 0x3fff) << 8) | | 1136 | ((coal & 0x3fff) << 8) | |
| 1137 | (mv_read(SDMA_CONFIG_REG(port_num)) | 1137 | (rdl(mp, SDMA_CONFIG_REG(port_num)) |
| 1138 | & 0xffc000ff)); | 1138 | & 0xffc000ff)); |
| 1139 | 1139 | ||
| 1140 | return coal; | 1140 | return coal; |
| @@ -1170,7 +1170,7 @@ static unsigned int eth_port_set_tx_coal(struct mv643xx_private *mp, | |||
| 1170 | unsigned int coal = ((t_clk / 1000000) * delay) / 64; | 1170 | unsigned int coal = ((t_clk / 1000000) * delay) / 64; |
| 1171 | 1171 | ||
| 1172 | /* Set TX Coalescing mechanism */ | 1172 | /* Set TX Coalescing mechanism */ |
| 1173 | mv_write(TX_FIFO_URGENT_THRESHOLD_REG(mp->port_num), coal << 4); | 1173 | wrl(mp, TX_FIFO_URGENT_THRESHOLD_REG(mp->port_num), coal << 4); |
| 1174 | 1174 | ||
| 1175 | return coal; | 1175 | return coal; |
| 1176 | } | 1176 | } |
| @@ -1307,10 +1307,10 @@ static int mv643xx_eth_open(struct net_device *dev) | |||
| 1307 | int err; | 1307 | int err; |
| 1308 | 1308 | ||
| 1309 | /* Clear any pending ethernet port interrupts */ | 1309 | /* Clear any pending ethernet port interrupts */ |
| 1310 | mv_write(INTERRUPT_CAUSE_REG(port_num), 0); | 1310 | wrl(mp, INTERRUPT_CAUSE_REG(port_num), 0); |
| 1311 | mv_write(INTERRUPT_CAUSE_EXTEND_REG(port_num), 0); | 1311 | wrl(mp, INTERRUPT_CAUSE_EXTEND_REG(port_num), 0); |
| 1312 | /* wait for previous write to complete */ | 1312 | /* wait for previous write to complete */ |
| 1313 | mv_read (INTERRUPT_CAUSE_EXTEND_REG(port_num)); | 1313 | rdl(mp, INTERRUPT_CAUSE_EXTEND_REG(port_num)); |
| 1314 | 1314 | ||
| 1315 | err = request_irq(dev->irq, mv643xx_eth_int_handler, | 1315 | err = request_irq(dev->irq, mv643xx_eth_int_handler, |
| 1316 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, dev); | 1316 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, dev); |
| @@ -1416,10 +1416,10 @@ static int mv643xx_eth_open(struct net_device *dev) | |||
| 1416 | eth_port_set_tx_coal(mp, 133000000, MV643XX_TX_COAL); | 1416 | eth_port_set_tx_coal(mp, 133000000, MV643XX_TX_COAL); |
| 1417 | 1417 | ||
| 1418 | /* Unmask phy and link status changes interrupts */ | 1418 | /* Unmask phy and link status changes interrupts */ |
| 1419 | mv_write(INTERRUPT_EXTEND_MASK_REG(port_num), ETH_INT_UNMASK_ALL_EXT); | 1419 | wrl(mp, INTERRUPT_EXTEND_MASK_REG(port_num), ETH_INT_UNMASK_ALL_EXT); |
| 1420 | 1420 | ||
| 1421 | /* Unmask RX buffer and TX end interrupt */ | 1421 | /* Unmask RX buffer and TX end interrupt */ |
| 1422 | mv_write(INTERRUPT_MASK_REG(port_num), ETH_INT_UNMASK_ALL); | 1422 | wrl(mp, INTERRUPT_MASK_REG(port_num), ETH_INT_UNMASK_ALL); |
| 1423 | 1423 | ||
| 1424 | return 0; | 1424 | return 0; |
| 1425 | 1425 | ||
| @@ -1498,9 +1498,9 @@ static int mv643xx_eth_stop(struct net_device *dev) | |||
| 1498 | unsigned int port_num = mp->port_num; | 1498 | unsigned int port_num = mp->port_num; |
| 1499 | 1499 | ||
| 1500 | /* Mask all interrupts on ethernet port */ | 1500 | /* Mask all interrupts on ethernet port */ |
| 1501 | mv_write(INTERRUPT_MASK_REG(port_num), ETH_INT_MASK_ALL); | 1501 | wrl(mp, INTERRUPT_MASK_REG(port_num), ETH_INT_MASK_ALL); |
| 1502 | /* wait for previous write to complete */ | 1502 | /* wait for previous write to complete */ |
| 1503 | mv_read(INTERRUPT_MASK_REG(port_num)); | 1503 | rdl(mp, INTERRUPT_MASK_REG(port_num)); |
| 1504 | 1504 | ||
| 1505 | #ifdef MV643XX_NAPI | 1505 | #ifdef MV643XX_NAPI |
| 1506 | napi_disable(&mp->napi); | 1506 | napi_disable(&mp->napi); |
| @@ -1539,15 +1539,15 @@ static int mv643xx_poll(struct napi_struct *napi, int budget) | |||
| 1539 | #endif | 1539 | #endif |
| 1540 | 1540 | ||
| 1541 | work_done = 0; | 1541 | work_done = 0; |
| 1542 | if ((mv_read(RX_CURRENT_QUEUE_DESC_PTR_0(port_num))) | 1542 | if ((rdl(mp, RX_CURRENT_QUEUE_DESC_PTR_0(port_num))) |
| 1543 | != (u32) mp->rx_used_desc_q) | 1543 | != (u32) mp->rx_used_desc_q) |
| 1544 | work_done = mv643xx_eth_receive_queue(dev, budget); | 1544 | work_done = mv643xx_eth_receive_queue(dev, budget); |
| 1545 | 1545 | ||
| 1546 | if (work_done < budget) { | 1546 | if (work_done < budget) { |
| 1547 | netif_rx_complete(dev, napi); | 1547 | netif_rx_complete(dev, napi); |
| 1548 | mv_write(INTERRUPT_CAUSE_REG(port_num), 0); | 1548 | wrl(mp, INTERRUPT_CAUSE_REG(port_num), 0); |
| 1549 | mv_write(INTERRUPT_CAUSE_EXTEND_REG(port_num), 0); | 1549 | wrl(mp, INTERRUPT_CAUSE_EXTEND_REG(port_num), 0); |
| 1550 | mv_write(INTERRUPT_MASK_REG(port_num), ETH_INT_UNMASK_ALL); | 1550 | wrl(mp, INTERRUPT_MASK_REG(port_num), ETH_INT_UNMASK_ALL); |
| 1551 | } | 1551 | } |
| 1552 | 1552 | ||
| 1553 | return work_done; | 1553 | return work_done; |
| @@ -1753,13 +1753,13 @@ static void mv643xx_netpoll(struct net_device *netdev) | |||
| 1753 | struct mv643xx_private *mp = netdev_priv(netdev); | 1753 | struct mv643xx_private *mp = netdev_priv(netdev); |
| 1754 | int port_num = mp->port_num; | 1754 | int port_num = mp->port_num; |
| 1755 | 1755 | ||
| 1756 | mv_write(INTERRUPT_MASK_REG(port_num), ETH_INT_MASK_ALL); | 1756 | wrl(mp, INTERRUPT_MASK_REG(port_num), ETH_INT_MASK_ALL); |
| 1757 | /* wait for previous write to complete */ | 1757 | /* wait for previous write to complete */ |
| 1758 | mv_read(INTERRUPT_MASK_REG(port_num)); | 1758 | rdl(mp, INTERRUPT_MASK_REG(port_num)); |
| 1759 | 1759 | ||
| 1760 | mv643xx_eth_int_handler(netdev->irq, netdev); | 1760 | mv643xx_eth_int_handler(netdev->irq, netdev); |
| 1761 | 1761 | ||
| 1762 | mv_write(INTERRUPT_MASK_REG(port_num), ETH_INT_UNMASK_ALL); | 1762 | wrl(mp, INTERRUPT_MASK_REG(port_num), ETH_INT_UNMASK_ALL); |
| 1763 | } | 1763 | } |
| 1764 | #endif | 1764 | #endif |
| 1765 | 1765 | ||
| @@ -2012,8 +2012,8 @@ static void mv643xx_eth_shutdown(struct platform_device *pdev) | |||
| 2012 | unsigned int port_num = mp->port_num; | 2012 | unsigned int port_num = mp->port_num; |
| 2013 | 2013 | ||
| 2014 | /* Mask all interrupts on ethernet port */ | 2014 | /* Mask all interrupts on ethernet port */ |
| 2015 | mv_write(INTERRUPT_MASK_REG(port_num), 0); | 2015 | wrl(mp, INTERRUPT_MASK_REG(port_num), 0); |
| 2016 | mv_read (INTERRUPT_MASK_REG(port_num)); | 2016 | rdl(mp, INTERRUPT_MASK_REG(port_num)); |
| 2017 | 2017 | ||
| 2018 | eth_port_reset(mp); | 2018 | eth_port_reset(mp); |
| 2019 | } | 2019 | } |
| @@ -2278,28 +2278,28 @@ static void eth_port_start(struct net_device *dev) | |||
| 2278 | 2278 | ||
| 2279 | /* Assignment of Tx CTRP of given queue */ | 2279 | /* Assignment of Tx CTRP of given queue */ |
| 2280 | tx_curr_desc = mp->tx_curr_desc_q; | 2280 | tx_curr_desc = mp->tx_curr_desc_q; |
| 2281 | mv_write(TX_CURRENT_QUEUE_DESC_PTR_0(port_num), | 2281 | wrl(mp, TX_CURRENT_QUEUE_DESC_PTR_0(port_num), |
| 2282 | (u32)((struct eth_tx_desc *)mp->tx_desc_dma + tx_curr_desc)); | 2282 | (u32)((struct eth_tx_desc *)mp->tx_desc_dma + tx_curr_desc)); |
| 2283 | 2283 | ||
| 2284 | /* Assignment of Rx CRDP of given queue */ | 2284 | /* Assignment of Rx CRDP of given queue */ |
| 2285 | rx_curr_desc = mp->rx_curr_desc_q; | 2285 | rx_curr_desc = mp->rx_curr_desc_q; |
| 2286 | mv_write(RX_CURRENT_QUEUE_DESC_PTR_0(port_num), | 2286 | wrl(mp, RX_CURRENT_QUEUE_DESC_PTR_0(port_num), |
| 2287 | (u32)((struct eth_rx_desc *)mp->rx_desc_dma + rx_curr_desc)); | 2287 | (u32)((struct eth_rx_desc *)mp->rx_desc_dma + rx_curr_desc)); |
| 2288 | 2288 | ||
| 2289 | /* Add the assigned Ethernet address to the port's address table */ | 2289 | /* Add the assigned Ethernet address to the port's address table */ |
| 2290 | eth_port_uc_addr_set(mp, dev->dev_addr); | 2290 | eth_port_uc_addr_set(mp, dev->dev_addr); |
| 2291 | 2291 | ||
| 2292 | /* Assign port configuration and command. */ | 2292 | /* Assign port configuration and command. */ |
| 2293 | mv_write(PORT_CONFIG_REG(port_num), | 2293 | wrl(mp, PORT_CONFIG_REG(port_num), |
| 2294 | PORT_CONFIG_DEFAULT_VALUE); | 2294 | PORT_CONFIG_DEFAULT_VALUE); |
| 2295 | 2295 | ||
| 2296 | mv_write(PORT_CONFIG_EXTEND_REG(port_num), | 2296 | wrl(mp, PORT_CONFIG_EXTEND_REG(port_num), |
| 2297 | PORT_CONFIG_EXTEND_DEFAULT_VALUE); | 2297 | PORT_CONFIG_EXTEND_DEFAULT_VALUE); |
| 2298 | 2298 | ||
| 2299 | pscr = mv_read(PORT_SERIAL_CONTROL_REG(port_num)); | 2299 | pscr = rdl(mp, PORT_SERIAL_CONTROL_REG(port_num)); |
| 2300 | 2300 | ||
| 2301 | pscr &= ~(SERIAL_PORT_ENABLE | FORCE_LINK_PASS); | 2301 | pscr &= ~(SERIAL_PORT_ENABLE | FORCE_LINK_PASS); |
| 2302 | mv_write(PORT_SERIAL_CONTROL_REG(port_num), pscr); | 2302 | wrl(mp, PORT_SERIAL_CONTROL_REG(port_num), pscr); |
| 2303 | 2303 | ||
| 2304 | pscr |= DISABLE_AUTO_NEG_FOR_FLOW_CTRL | | 2304 | pscr |= DISABLE_AUTO_NEG_FOR_FLOW_CTRL | |
| 2305 | DISABLE_AUTO_NEG_SPEED_GMII | | 2305 | DISABLE_AUTO_NEG_SPEED_GMII | |
| @@ -2307,20 +2307,20 @@ static void eth_port_start(struct net_device *dev) | |||
| 2307 | DO_NOT_FORCE_LINK_FAIL | | 2307 | DO_NOT_FORCE_LINK_FAIL | |
| 2308 | SERIAL_PORT_CONTROL_RESERVED; | 2308 | SERIAL_PORT_CONTROL_RESERVED; |
| 2309 | 2309 | ||
| 2310 | mv_write(PORT_SERIAL_CONTROL_REG(port_num), pscr); | 2310 | wrl(mp, PORT_SERIAL_CONTROL_REG(port_num), pscr); |
| 2311 | 2311 | ||
| 2312 | pscr |= SERIAL_PORT_ENABLE; | 2312 | pscr |= SERIAL_PORT_ENABLE; |
| 2313 | mv_write(PORT_SERIAL_CONTROL_REG(port_num), pscr); | 2313 | wrl(mp, PORT_SERIAL_CONTROL_REG(port_num), pscr); |
| 2314 | 2314 | ||
| 2315 | /* Assign port SDMA configuration */ | 2315 | /* Assign port SDMA configuration */ |
| 2316 | mv_write(SDMA_CONFIG_REG(port_num), | 2316 | wrl(mp, SDMA_CONFIG_REG(port_num), |
| 2317 | PORT_SDMA_CONFIG_DEFAULT_VALUE); | 2317 | PORT_SDMA_CONFIG_DEFAULT_VALUE); |
| 2318 | 2318 | ||
| 2319 | /* Enable port Rx. */ | 2319 | /* Enable port Rx. */ |
| 2320 | mv643xx_eth_port_enable_rx(mp, ETH_RX_QUEUES_ENABLED); | 2320 | mv643xx_eth_port_enable_rx(mp, ETH_RX_QUEUES_ENABLED); |
| 2321 | 2321 | ||
| 2322 | /* Disable port bandwidth limits by clearing MTU register */ | 2322 | /* Disable port bandwidth limits by clearing MTU register */ |
| 2323 | mv_write(MAXIMUM_TRANSMIT_UNIT(port_num), 0); | 2323 | wrl(mp, MAXIMUM_TRANSMIT_UNIT(port_num), 0); |
| 2324 | 2324 | ||
| 2325 | /* save phy settings across reset */ | 2325 | /* save phy settings across reset */ |
| 2326 | mv643xx_get_settings(dev, ðtool_cmd); | 2326 | mv643xx_get_settings(dev, ðtool_cmd); |
| @@ -2343,8 +2343,8 @@ static void eth_port_uc_addr_set(struct mv643xx_private *mp, | |||
| 2343 | mac_h = (p_addr[0] << 24) | (p_addr[1] << 16) | (p_addr[2] << 8) | | 2343 | mac_h = (p_addr[0] << 24) | (p_addr[1] << 16) | (p_addr[2] << 8) | |
| 2344 | (p_addr[3] << 0); | 2344 | (p_addr[3] << 0); |
| 2345 | 2345 | ||
| 2346 | mv_write(MAC_ADDR_LOW(port_num), mac_l); | 2346 | wrl(mp, MAC_ADDR_LOW(port_num), mac_l); |
| 2347 | mv_write(MAC_ADDR_HIGH(port_num), mac_h); | 2347 | wrl(mp, MAC_ADDR_HIGH(port_num), mac_h); |
| 2348 | 2348 | ||
| 2349 | /* Accept frames with this address */ | 2349 | /* Accept frames with this address */ |
| 2350 | table = DA_FILTER_UNICAST_TABLE_BASE(port_num); | 2350 | table = DA_FILTER_UNICAST_TABLE_BASE(port_num); |
| @@ -2361,8 +2361,8 @@ static void eth_port_uc_addr_get(struct mv643xx_private *mp, | |||
| 2361 | unsigned int mac_h; | 2361 | unsigned int mac_h; |
| 2362 | unsigned int mac_l; | 2362 | unsigned int mac_l; |
| 2363 | 2363 | ||
| 2364 | mac_h = mv_read(MAC_ADDR_HIGH(port_num)); | 2364 | mac_h = rdl(mp, MAC_ADDR_HIGH(port_num)); |
| 2365 | mac_l = mv_read(MAC_ADDR_LOW(port_num)); | 2365 | mac_l = rdl(mp, MAC_ADDR_LOW(port_num)); |
| 2366 | 2366 | ||
| 2367 | p_addr[0] = (mac_h >> 24) & 0xff; | 2367 | p_addr[0] = (mac_h >> 24) & 0xff; |
| 2368 | p_addr[1] = (mac_h >> 16) & 0xff; | 2368 | p_addr[1] = (mac_h >> 16) & 0xff; |
| @@ -2392,9 +2392,9 @@ static void eth_port_set_filter_table_entry(struct mv643xx_private *mp, | |||
| 2392 | reg_offset = entry % 4; /* Entry offset within the register */ | 2392 | reg_offset = entry % 4; /* Entry offset within the register */ |
| 2393 | 2393 | ||
| 2394 | /* Set "accepts frame bit" at specified table entry */ | 2394 | /* Set "accepts frame bit" at specified table entry */ |
| 2395 | table_reg = mv_read(table + tbl_offset); | 2395 | table_reg = rdl(mp, table + tbl_offset); |
| 2396 | table_reg |= 0x01 << (8 * reg_offset); | 2396 | table_reg |= 0x01 << (8 * reg_offset); |
| 2397 | mv_write(table + tbl_offset, table_reg); | 2397 | wrl(mp, table + tbl_offset, table_reg); |
| 2398 | } | 2398 | } |
| 2399 | 2399 | ||
| 2400 | /* | 2400 | /* |
| @@ -2527,7 +2527,7 @@ static void eth_port_set_multicast_list(struct net_device *dev) | |||
| 2527 | * 3-1 Queue ETH_Q0=0 | 2527 | * 3-1 Queue ETH_Q0=0 |
| 2528 | * 7-4 Reserved = 0; | 2528 | * 7-4 Reserved = 0; |
| 2529 | */ | 2529 | */ |
| 2530 | mv_write(DA_FILTER_SPECIAL_MULTICAST_TABLE_BASE(eth_port_num) + table_index, 0x01010101); | 2530 | wrl(mp, DA_FILTER_SPECIAL_MULTICAST_TABLE_BASE(eth_port_num) + table_index, 0x01010101); |
| 2531 | 2531 | ||
| 2532 | /* Set all entries in DA filter other multicast | 2532 | /* Set all entries in DA filter other multicast |
| 2533 | * table (Ex_dFOMT) | 2533 | * table (Ex_dFOMT) |
| @@ -2537,7 +2537,7 @@ static void eth_port_set_multicast_list(struct net_device *dev) | |||
| 2537 | * 3-1 Queue ETH_Q0=0 | 2537 | * 3-1 Queue ETH_Q0=0 |
| 2538 | * 7-4 Reserved = 0; | 2538 | * 7-4 Reserved = 0; |
| 2539 | */ | 2539 | */ |
| 2540 | mv_write(DA_FILTER_OTHER_MULTICAST_TABLE_BASE(eth_port_num) + table_index, 0x01010101); | 2540 | wrl(mp, DA_FILTER_OTHER_MULTICAST_TABLE_BASE(eth_port_num) + table_index, 0x01010101); |
| 2541 | } | 2541 | } |
| 2542 | return; | 2542 | return; |
| 2543 | } | 2543 | } |
| @@ -2547,11 +2547,11 @@ static void eth_port_set_multicast_list(struct net_device *dev) | |||
| 2547 | */ | 2547 | */ |
| 2548 | for (table_index = 0; table_index <= 0xFC; table_index += 4) { | 2548 | for (table_index = 0; table_index <= 0xFC; table_index += 4) { |
| 2549 | /* Clear DA filter special multicast table (Ex_dFSMT) */ | 2549 | /* Clear DA filter special multicast table (Ex_dFSMT) */ |
| 2550 | mv_write(DA_FILTER_SPECIAL_MULTICAST_TABLE_BASE | 2550 | wrl(mp, DA_FILTER_SPECIAL_MULTICAST_TABLE_BASE |
| 2551 | (eth_port_num) + table_index, 0); | 2551 | (eth_port_num) + table_index, 0); |
| 2552 | 2552 | ||
| 2553 | /* Clear DA filter other multicast table (Ex_dFOMT) */ | 2553 | /* Clear DA filter other multicast table (Ex_dFOMT) */ |
| 2554 | mv_write(DA_FILTER_OTHER_MULTICAST_TABLE_BASE | 2554 | wrl(mp, DA_FILTER_OTHER_MULTICAST_TABLE_BASE |
| 2555 | (eth_port_num) + table_index, 0); | 2555 | (eth_port_num) + table_index, 0); |
| 2556 | } | 2556 | } |
| 2557 | 2557 | ||
| @@ -2586,15 +2586,15 @@ static void eth_port_init_mac_tables(struct mv643xx_private *mp) | |||
| 2586 | 2586 | ||
| 2587 | /* Clear DA filter unicast table (Ex_dFUT) */ | 2587 | /* Clear DA filter unicast table (Ex_dFUT) */ |
| 2588 | for (table_index = 0; table_index <= 0xC; table_index += 4) | 2588 | for (table_index = 0; table_index <= 0xC; table_index += 4) |
| 2589 | mv_write(DA_FILTER_UNICAST_TABLE_BASE(port_num) + | 2589 | wrl(mp, DA_FILTER_UNICAST_TABLE_BASE(port_num) + |
| 2590 | table_index, 0); | 2590 | table_index, 0); |
| 2591 | 2591 | ||
| 2592 | for (table_index = 0; table_index <= 0xFC; table_index += 4) { | 2592 | for (table_index = 0; table_index <= 0xFC; table_index += 4) { |
| 2593 | /* Clear DA filter special multicast table (Ex_dFSMT) */ | 2593 | /* Clear DA filter special multicast table (Ex_dFSMT) */ |
| 2594 | mv_write(DA_FILTER_SPECIAL_MULTICAST_TABLE_BASE(port_num) + | 2594 | wrl(mp, DA_FILTER_SPECIAL_MULTICAST_TABLE_BASE(port_num) + |
| 2595 | table_index, 0); | 2595 | table_index, 0); |
| 2596 | /* Clear DA filter other multicast table (Ex_dFOMT) */ | 2596 | /* Clear DA filter other multicast table (Ex_dFOMT) */ |
| 2597 | mv_write(DA_FILTER_OTHER_MULTICAST_TABLE_BASE(port_num) + | 2597 | wrl(mp, DA_FILTER_OTHER_MULTICAST_TABLE_BASE(port_num) + |
| 2598 | table_index, 0); | 2598 | table_index, 0); |
| 2599 | } | 2599 | } |
| 2600 | } | 2600 | } |
| @@ -2624,12 +2624,12 @@ static void eth_clear_mib_counters(struct mv643xx_private *mp) | |||
| 2624 | /* Perform dummy reads from MIB counters */ | 2624 | /* Perform dummy reads from MIB counters */ |
| 2625 | for (i = ETH_MIB_GOOD_OCTETS_RECEIVED_LOW; i < ETH_MIB_LATE_COLLISION; | 2625 | for (i = ETH_MIB_GOOD_OCTETS_RECEIVED_LOW; i < ETH_MIB_LATE_COLLISION; |
| 2626 | i += 4) | 2626 | i += 4) |
| 2627 | mv_read(MIB_COUNTERS_BASE(port_num) + i); | 2627 | rdl(mp, MIB_COUNTERS_BASE(port_num) + i); |
| 2628 | } | 2628 | } |
| 2629 | 2629 | ||
| 2630 | static inline u32 read_mib(struct mv643xx_private *mp, int offset) | 2630 | static inline u32 read_mib(struct mv643xx_private *mp, int offset) |
| 2631 | { | 2631 | { |
| 2632 | return mv_read(MIB_COUNTERS_BASE(mp->port_num) + offset); | 2632 | return rdl(mp, MIB_COUNTERS_BASE(mp->port_num) + offset); |
| 2633 | } | 2633 | } |
| 2634 | 2634 | ||
| 2635 | static void eth_update_mib_counters(struct mv643xx_private *mp) | 2635 | static void eth_update_mib_counters(struct mv643xx_private *mp) |
| @@ -2714,7 +2714,7 @@ static int ethernet_phy_get(struct mv643xx_private *mp) | |||
| 2714 | { | 2714 | { |
| 2715 | unsigned int reg_data; | 2715 | unsigned int reg_data; |
| 2716 | 2716 | ||
| 2717 | reg_data = mv_read(PHY_ADDR_REG); | 2717 | reg_data = rdl(mp, PHY_ADDR_REG); |
| 2718 | 2718 | ||
| 2719 | return ((reg_data >> (5 * mp->port_num)) & 0x1f); | 2719 | return ((reg_data >> (5 * mp->port_num)) & 0x1f); |
| 2720 | } | 2720 | } |
| @@ -2741,10 +2741,10 @@ static void ethernet_phy_set(struct mv643xx_private *mp, int phy_addr) | |||
| 2741 | u32 reg_data; | 2741 | u32 reg_data; |
| 2742 | int addr_shift = 5 * mp->port_num; | 2742 | int addr_shift = 5 * mp->port_num; |
| 2743 | 2743 | ||
| 2744 | reg_data = mv_read(PHY_ADDR_REG); | 2744 | reg_data = rdl(mp, PHY_ADDR_REG); |
| 2745 | reg_data &= ~(0x1f << addr_shift); | 2745 | reg_data &= ~(0x1f << addr_shift); |
| 2746 | reg_data |= (phy_addr & 0x1f) << addr_shift; | 2746 | reg_data |= (phy_addr & 0x1f) << addr_shift; |
| 2747 | mv_write(PHY_ADDR_REG, reg_data); | 2747 | wrl(mp, PHY_ADDR_REG, reg_data); |
| 2748 | } | 2748 | } |
| 2749 | 2749 | ||
| 2750 | /* | 2750 | /* |
| @@ -2782,13 +2782,13 @@ static void ethernet_phy_reset(struct mv643xx_private *mp) | |||
| 2782 | static void mv643xx_eth_port_enable_tx(struct mv643xx_private *mp, | 2782 | static void mv643xx_eth_port_enable_tx(struct mv643xx_private *mp, |
| 2783 | unsigned int queues) | 2783 | unsigned int queues) |
| 2784 | { | 2784 | { |
| 2785 | mv_write(TRANSMIT_QUEUE_COMMAND_REG(mp->port_num), queues); | 2785 | wrl(mp, TRANSMIT_QUEUE_COMMAND_REG(mp->port_num), queues); |
| 2786 | } | 2786 | } |
| 2787 | 2787 | ||
| 2788 | static void mv643xx_eth_port_enable_rx(struct mv643xx_private *mp, | 2788 | static void mv643xx_eth_port_enable_rx(struct mv643xx_private *mp, |
| 2789 | unsigned int queues) | 2789 | unsigned int queues) |
| 2790 | { | 2790 | { |
| 2791 | mv_write(RECEIVE_QUEUE_COMMAND_REG(mp->port_num), queues); | 2791 | wrl(mp, RECEIVE_QUEUE_COMMAND_REG(mp->port_num), queues); |
| 2792 | } | 2792 | } |
| 2793 | 2793 | ||
| 2794 | static unsigned int mv643xx_eth_port_disable_tx(struct mv643xx_private *mp) | 2794 | static unsigned int mv643xx_eth_port_disable_tx(struct mv643xx_private *mp) |
| @@ -2797,18 +2797,18 @@ static unsigned int mv643xx_eth_port_disable_tx(struct mv643xx_private *mp) | |||
| 2797 | u32 queues; | 2797 | u32 queues; |
| 2798 | 2798 | ||
| 2799 | /* Stop Tx port activity. Check port Tx activity. */ | 2799 | /* Stop Tx port activity. Check port Tx activity. */ |
| 2800 | queues = mv_read(TRANSMIT_QUEUE_COMMAND_REG(port_num)) & 0xFF; | 2800 | queues = rdl(mp, TRANSMIT_QUEUE_COMMAND_REG(port_num)) & 0xFF; |
| 2801 | if (queues) { | 2801 | if (queues) { |
| 2802 | /* Issue stop command for active queues only */ | 2802 | /* Issue stop command for active queues only */ |
| 2803 | mv_write(TRANSMIT_QUEUE_COMMAND_REG(port_num), (queues << 8)); | 2803 | wrl(mp, TRANSMIT_QUEUE_COMMAND_REG(port_num), (queues << 8)); |
| 2804 | 2804 | ||
| 2805 | /* Wait for all Tx activity to terminate. */ | 2805 | /* Wait for all Tx activity to terminate. */ |
| 2806 | /* Check port cause register that all Tx queues are stopped */ | 2806 | /* Check port cause register that all Tx queues are stopped */ |
| 2807 | while (mv_read(TRANSMIT_QUEUE_COMMAND_REG(port_num)) & 0xFF) | 2807 | while (rdl(mp, TRANSMIT_QUEUE_COMMAND_REG(port_num)) & 0xFF) |
| 2808 | udelay(PHY_WAIT_MICRO_SECONDS); | 2808 | udelay(PHY_WAIT_MICRO_SECONDS); |
| 2809 | 2809 | ||
| 2810 | /* Wait for Tx FIFO to empty */ | 2810 | /* Wait for Tx FIFO to empty */ |
| 2811 | while (mv_read(PORT_STATUS_REG(port_num)) & | 2811 | while (rdl(mp, PORT_STATUS_REG(port_num)) & |
| 2812 | ETH_PORT_TX_FIFO_EMPTY) | 2812 | ETH_PORT_TX_FIFO_EMPTY) |
| 2813 | udelay(PHY_WAIT_MICRO_SECONDS); | 2813 | udelay(PHY_WAIT_MICRO_SECONDS); |
| 2814 | } | 2814 | } |
| @@ -2822,14 +2822,14 @@ static unsigned int mv643xx_eth_port_disable_rx(struct mv643xx_private *mp) | |||
| 2822 | u32 queues; | 2822 | u32 queues; |
| 2823 | 2823 | ||
| 2824 | /* Stop Rx port activity. Check port Rx activity. */ | 2824 | /* Stop Rx port activity. Check port Rx activity. */ |
| 2825 | queues = mv_read(RECEIVE_QUEUE_COMMAND_REG(port_num)) & 0xFF; | 2825 | queues = rdl(mp, RECEIVE_QUEUE_COMMAND_REG(port_num)) & 0xFF; |
| 2826 | if (queues) { | 2826 | if (queues) { |
| 2827 | /* Issue stop command for active queues only */ | 2827 | /* Issue stop command for active queues only */ |
| 2828 | mv_write(RECEIVE_QUEUE_COMMAND_REG(port_num), (queues << 8)); | 2828 | wrl(mp, RECEIVE_QUEUE_COMMAND_REG(port_num), (queues << 8)); |
| 2829 | 2829 | ||
| 2830 | /* Wait for all Rx activity to terminate. */ | 2830 | /* Wait for all Rx activity to terminate. */ |
| 2831 | /* Check port cause register that all Rx queues are stopped */ | 2831 | /* Check port cause register that all Rx queues are stopped */ |
| 2832 | while (mv_read(RECEIVE_QUEUE_COMMAND_REG(port_num)) & 0xFF) | 2832 | while (rdl(mp, RECEIVE_QUEUE_COMMAND_REG(port_num)) & 0xFF) |
| 2833 | udelay(PHY_WAIT_MICRO_SECONDS); | 2833 | udelay(PHY_WAIT_MICRO_SECONDS); |
| 2834 | } | 2834 | } |
| 2835 | 2835 | ||
| @@ -2866,11 +2866,11 @@ static void eth_port_reset(struct mv643xx_private *mp) | |||
| 2866 | eth_clear_mib_counters(mp); | 2866 | eth_clear_mib_counters(mp); |
| 2867 | 2867 | ||
| 2868 | /* Reset the Enable bit in the Configuration Register */ | 2868 | /* Reset the Enable bit in the Configuration Register */ |
| 2869 | reg_data = mv_read(PORT_SERIAL_CONTROL_REG(port_num)); | 2869 | reg_data = rdl(mp, PORT_SERIAL_CONTROL_REG(port_num)); |
| 2870 | reg_data &= ~(SERIAL_PORT_ENABLE | | 2870 | reg_data &= ~(SERIAL_PORT_ENABLE | |
| 2871 | DO_NOT_FORCE_LINK_FAIL | | 2871 | DO_NOT_FORCE_LINK_FAIL | |
| 2872 | FORCE_LINK_PASS); | 2872 | FORCE_LINK_PASS); |
| 2873 | mv_write(PORT_SERIAL_CONTROL_REG(port_num), reg_data); | 2873 | wrl(mp, PORT_SERIAL_CONTROL_REG(port_num), reg_data); |
| 2874 | } | 2874 | } |
| 2875 | 2875 | ||
| 2876 | 2876 | ||
| @@ -2905,7 +2905,7 @@ static void eth_port_read_smi_reg(struct mv643xx_private *mp, | |||
| 2905 | spin_lock_irqsave(&mv643xx_eth_phy_lock, flags); | 2905 | spin_lock_irqsave(&mv643xx_eth_phy_lock, flags); |
| 2906 | 2906 | ||
| 2907 | /* wait for the SMI register to become available */ | 2907 | /* wait for the SMI register to become available */ |
| 2908 | for (i = 0; mv_read(SMI_REG) & ETH_SMI_BUSY; i++) { | 2908 | for (i = 0; rdl(mp, SMI_REG) & ETH_SMI_BUSY; i++) { |
| 2909 | if (i == PHY_WAIT_ITERATIONS) { | 2909 | if (i == PHY_WAIT_ITERATIONS) { |
| 2910 | printk("%s: PHY busy timeout\n", mp->dev->name); | 2910 | printk("%s: PHY busy timeout\n", mp->dev->name); |
| 2911 | goto out; | 2911 | goto out; |
| @@ -2913,11 +2913,11 @@ static void eth_port_read_smi_reg(struct mv643xx_private *mp, | |||
| 2913 | udelay(PHY_WAIT_MICRO_SECONDS); | 2913 | udelay(PHY_WAIT_MICRO_SECONDS); |
| 2914 | } | 2914 | } |
| 2915 | 2915 | ||
| 2916 | mv_write(SMI_REG, | 2916 | wrl(mp, SMI_REG, |
| 2917 | (phy_addr << 16) | (phy_reg << 21) | ETH_SMI_OPCODE_READ); | 2917 | (phy_addr << 16) | (phy_reg << 21) | ETH_SMI_OPCODE_READ); |
| 2918 | 2918 | ||
| 2919 | /* now wait for the data to be valid */ | 2919 | /* now wait for the data to be valid */ |
| 2920 | for (i = 0; !(mv_read(SMI_REG) & ETH_SMI_READ_VALID); i++) { | 2920 | for (i = 0; !(rdl(mp, SMI_REG) & ETH_SMI_READ_VALID); i++) { |
| 2921 | if (i == PHY_WAIT_ITERATIONS) { | 2921 | if (i == PHY_WAIT_ITERATIONS) { |
| 2922 | printk("%s: PHY read timeout\n", mp->dev->name); | 2922 | printk("%s: PHY read timeout\n", mp->dev->name); |
| 2923 | goto out; | 2923 | goto out; |
| @@ -2925,7 +2925,7 @@ static void eth_port_read_smi_reg(struct mv643xx_private *mp, | |||
| 2925 | udelay(PHY_WAIT_MICRO_SECONDS); | 2925 | udelay(PHY_WAIT_MICRO_SECONDS); |
| 2926 | } | 2926 | } |
| 2927 | 2927 | ||
| 2928 | *value = mv_read(SMI_REG) & 0xffff; | 2928 | *value = rdl(mp, SMI_REG) & 0xffff; |
| 2929 | out: | 2929 | out: |
| 2930 | spin_unlock_irqrestore(&mv643xx_eth_phy_lock, flags); | 2930 | spin_unlock_irqrestore(&mv643xx_eth_phy_lock, flags); |
| 2931 | } | 2931 | } |
| @@ -2963,7 +2963,7 @@ static void eth_port_write_smi_reg(struct mv643xx_private *mp, | |||
| 2963 | spin_lock_irqsave(&mv643xx_eth_phy_lock, flags); | 2963 | spin_lock_irqsave(&mv643xx_eth_phy_lock, flags); |
| 2964 | 2964 | ||
| 2965 | /* wait for the SMI register to become available */ | 2965 | /* wait for the SMI register to become available */ |
| 2966 | for (i = 0; mv_read(SMI_REG) & ETH_SMI_BUSY; i++) { | 2966 | for (i = 0; rdl(mp, SMI_REG) & ETH_SMI_BUSY; i++) { |
| 2967 | if (i == PHY_WAIT_ITERATIONS) { | 2967 | if (i == PHY_WAIT_ITERATIONS) { |
| 2968 | printk("%s: PHY busy timeout\n", mp->dev->name); | 2968 | printk("%s: PHY busy timeout\n", mp->dev->name); |
| 2969 | goto out; | 2969 | goto out; |
| @@ -2971,7 +2971,7 @@ static void eth_port_write_smi_reg(struct mv643xx_private *mp, | |||
| 2971 | udelay(PHY_WAIT_MICRO_SECONDS); | 2971 | udelay(PHY_WAIT_MICRO_SECONDS); |
| 2972 | } | 2972 | } |
| 2973 | 2973 | ||
| 2974 | mv_write(SMI_REG, (phy_addr << 16) | (phy_reg << 21) | | 2974 | wrl(mp, SMI_REG, (phy_addr << 16) | (phy_reg << 21) | |
| 2975 | ETH_SMI_OPCODE_WRITE | (value & 0xffff)); | 2975 | ETH_SMI_OPCODE_WRITE | (value & 0xffff)); |
| 2976 | out: | 2976 | out: |
| 2977 | spin_unlock_irqrestore(&mv643xx_eth_phy_lock, flags); | 2977 | spin_unlock_irqrestore(&mv643xx_eth_phy_lock, flags); |
