22 #include <linux/module.h>
24 #include <linux/netdevice.h>
31 #include <linux/mii.h>
32 #include <linux/ethtool.h>
37 #include <linux/slab.h>
39 #include <asm/delay.h>
47 #define DM9000_PHY 0x40
49 #define CARDNAME "dm9000"
50 #define DRV_VERSION "1.31"
146 #define dm9000_dbg(db, lev, msg...) do { \
147 if ((lev) < debug) { \
148 dev_dbg(db->dev, msg); \
154 return netdev_priv(dev);
201 writesw(reg, data, (count+1) >> 1);
204 static void dm9000_outblk_32bit(
void __iomem *reg,
void *data,
int count)
206 writesl(reg, data, (count+3) >> 2);
211 static void dm9000_inblk_8bit(
void __iomem *reg,
void *data,
int count)
217 static void dm9000_inblk_16bit(
void __iomem *reg,
void *data,
int count)
219 readsw(reg, data, (count+1) >> 1);
222 static void dm9000_inblk_32bit(
void __iomem *reg,
void *data,
int count)
224 readsl(reg, data, (count+3) >> 2);
229 static void dm9000_dumpblk_8bit(
void __iomem *reg,
int count)
234 for (i = 0; i <
count; i++)
238 static void dm9000_dumpblk_16bit(
void __iomem *reg,
int count)
243 count = (count + 1) >> 1;
245 for (i = 0; i <
count; i++)
249 static void dm9000_dumpblk_32bit(
void __iomem *reg,
int count)
254 count = (count + 3) >> 2;
256 for (i = 0; i <
count; i++)
266 static void dm9000_set_io(
struct board_info *db,
int byte_width)
272 switch (byte_width) {
274 db->
dumpblk = dm9000_dumpblk_8bit;
275 db->
outblk = dm9000_outblk_8bit;
276 db->
inblk = dm9000_inblk_8bit;
281 dev_dbg(db->
dev,
": 3 byte IO, falling back to 16bit\n");
283 db->
dumpblk = dm9000_dumpblk_16bit;
284 db->
outblk = dm9000_outblk_16bit;
285 db->
inblk = dm9000_inblk_16bit;
290 db->
dumpblk = dm9000_dumpblk_32bit;
291 db->
outblk = dm9000_outblk_32bit;
292 db->
inblk = dm9000_inblk_32bit;
307 if (!netif_running(dev))
321 spin_unlock_irqrestore(&db->
lock, flags);
380 spin_unlock_irqrestore(&db->
lock, flags);
382 dm9000_wait_eeprom(db);
394 spin_unlock_irqrestore(&db->
lock, flags);
417 spin_unlock_irqrestore(&db->
lock, flags);
419 dm9000_wait_eeprom(db);
425 spin_unlock_irqrestore(&db->
lock, flags);
432 static void dm9000_get_drvinfo(
struct net_device *dev,
471 static int dm9000_nway_reset(
struct net_device *dev)
477 static int dm9000_set_features(
struct net_device *dev,
489 spin_unlock_irqrestore(&dm->
lock, flags);
507 #define DM_EEPROM_MAGIC (0x444D394B)
509 static int dm9000_get_eeprom_len(
struct net_device *dev)
514 static int dm9000_get_eeprom(
struct net_device *dev,
524 if ((len & 1) != 0 || (offset & 1) != 0)
532 for (i = 0; i < len; i += 2)
533 dm9000_read_eeprom(dm, (offset + i) / 2, data + i);
538 static int dm9000_set_eeprom(
struct net_device *dev,
555 if (len & 1 || offset & 1) {
556 int which = offset & 1;
559 dm9000_read_eeprom(dm, offset / 2, tmp);
561 dm9000_write_eeprom(dm, offset / 2, tmp);
565 dm9000_write_eeprom(dm, offset / 2, data);
608 spin_unlock_irqrestore(&dm->
lock, flags);
625 static const struct ethtool_ops dm9000_ethtool_ops = {
626 .get_drvinfo = dm9000_get_drvinfo,
627 .get_settings = dm9000_get_settings,
628 .set_settings = dm9000_set_settings,
629 .get_msglevel = dm9000_get_msglevel,
630 .set_msglevel = dm9000_set_msglevel,
631 .nway_reset = dm9000_nway_reset,
632 .get_link = dm9000_get_link,
633 .get_wol = dm9000_get_wol,
634 .set_wol = dm9000_set_wol,
635 .get_eeprom_len = dm9000_get_eeprom_len,
636 .get_eeprom = dm9000_get_eeprom,
637 .set_eeprom = dm9000_set_eeprom,
641 unsigned carrier,
unsigned nsr)
644 unsigned ncr = dm9000_read_locked(db,
DM9000_NCR);
647 dev_info(db->
dev,
"%s: link up, %dMbps, %s-duplex, no LPA\n",
649 (ncr &
NCR_FDX) ?
"full" :
"half");
663 unsigned nsr = dm9000_read_locked(db,
DM9000_NSR);
664 unsigned old_carrier = netif_carrier_ok(ndev) ? 1 : 0;
665 unsigned new_carrier;
669 if (old_carrier != new_carrier) {
671 dm9000_show_carrier(db, new_carrier, nsr);
681 if (netif_running(ndev))
682 dm9000_schedule_poll(db);
722 dm9000_hash_table_unlocked(
struct net_device *dev)
733 for (i = 0, oft =
DM9000_PAR; i < 6; i++, oft++)
737 for (i = 0; i < 4; i++)
741 hash_table[3] = 0x8000;
752 hash_table[hash_val / 16] |= (
u16) 1 << (hash_val % 16);
757 iow(db, oft++, hash_table[i]);
758 iow(db, oft++, hash_table[i] >> 8);
771 dm9000_hash_table_unlocked(dev);
772 spin_unlock_irqrestore(&db->
lock, flags);
817 dm9000_hash_table_unlocked(dev);
835 static void dm9000_timeout(
struct net_device *dev)
845 netif_stop_queue(dev);
847 dm9000_init_dm9000(dev);
850 netif_wake_queue(dev);
854 spin_unlock_irqrestore(&db->
lock, flags);
857 static void dm9000_send_packet(
struct net_device *dev,
911 netif_stop_queue(dev);
914 spin_unlock_irqrestore(&db->
lock, flags);
934 dev->
stats.tx_packets++;
937 dev_dbg(db->
dev,
"tx done, NSR %02x\n", tx_status);
943 netif_wake_queue(dev);
975 dev_warn(db->
dev,
"status check fail: %d\n", rxbyte);
993 dev_dbg(db->
dev,
"RX: status %02x, length %04x\n",
1015 dev->
stats.rx_fifo_errors++;
1020 dev->
stats.rx_crc_errors++;
1025 dev->
stats.rx_length_errors++;
1031 ((skb = netdev_alloc_skb(dev, RxLen + 4)) !=
NULL)) {
1032 skb_reserve(skb, 2);
1038 dev->
stats.rx_bytes += RxLen;
1042 if (dev->
features & NETIF_F_RXCSUM) {
1043 if ((((rxbyte & 0x1c) << 3) & rxbyte) == 0)
1046 skb_checksum_none_assert(skb);
1049 dev->
stats.rx_packets++;
1064 unsigned long flags;
1067 dm9000_dbg(db, 3,
"entering %s\n", __func__);
1085 dev_dbg(db->
dev,
"interrupt status %02x\n", int_status);
1093 dm9000_tx_done(dev, db);
1108 spin_unlock_irqrestore(&db->
lock, flags);
1113 static irqreturn_t dm9000_wol_interrupt(
int irq,
void *dev_id)
1117 unsigned long flags;
1125 dev_dbg(db->
dev,
"%s: NSR=0x%02x, WCR=0x%02x\n", __func__, nsr, wcr);
1132 dev_info(db->
dev,
"wake by link status change\n");
1137 if (!(wcr & (WCR_LINKST | WCR_SAMPLEST | WCR_MAGICST)))
1138 dev_err(db->
dev,
"wake signalled with no reason? "
1139 "NSR=0x%02x, WSR=0x%02x\n", nsr, wcr);
1143 spin_unlock_irqrestore(&db->
lock, flags);
1148 #ifdef CONFIG_NET_POLL_CONTROLLER
1152 static void dm9000_poll_controller(
struct net_device *dev)
1155 dm9000_interrupt(dev->
irq, dev);
1177 dev_warn(db->
dev,
"WARNING: no IRQ resource flags set.\n");
1187 dm9000_init_dm9000(dev);
1196 netif_start_queue(dev);
1198 dm9000_schedule_poll(db);
1219 dm9000_phy_read(
struct net_device *dev,
int phy_reg_unused,
int reg)
1222 unsigned long flags;
1223 unsigned int reg_save;
1239 spin_unlock_irqrestore(&db->
lock,flags);
1241 dm9000_msleep(db, 1);
1253 spin_unlock_irqrestore(&db->
lock,flags);
1257 dm9000_dbg(db, 5,
"phy_read[%02x] -> %04x\n", reg, ret);
1266 int phyaddr_unused,
int reg,
int value)
1269 unsigned long flags;
1270 unsigned long reg_save;
1272 dm9000_dbg(db, 5,
"phy_write[%02x] = %04x\n", reg, value);
1290 spin_unlock_irqrestore(&db->
lock, flags);
1292 dm9000_msleep(db, 1);
1302 spin_unlock_irqrestore(&db->
lock, flags);
1332 netif_stop_queue(ndev);
1338 dm9000_shutdown(ndev);
1344 .ndo_open = dm9000_open,
1345 .ndo_stop = dm9000_stop,
1346 .ndo_start_xmit = dm9000_start_xmit,
1347 .ndo_tx_timeout = dm9000_timeout,
1348 .ndo_set_rx_mode = dm9000_hash_table,
1349 .ndo_do_ioctl = dm9000_ioctl,
1351 .ndo_set_features = dm9000_set_features,
1354 #ifdef CONFIG_NET_POLL_CONTROLLER
1355 .ndo_poll_controller = dm9000_poll_controller,
1368 const unsigned char *mac_src;
1375 ndev = alloc_etherdev(
sizeof(
struct board_info));
1384 db = netdev_priv(ndev);
1400 dev_err(db->
dev,
"insufficient resources\n");
1412 dev_err(db->
dev,
"cannot get wakeup irq (%d)\n", ret);
1418 dev_err(db->
dev,
"irq %d cannot set wakeup (%d)\n",
1428 iosize = resource_size(db->
addr_res);
1433 dev_err(db->
dev,
"cannot claim address reg area\n");
1441 dev_err(db->
dev,
"failed to ioremap address reg\n");
1446 iosize = resource_size(db->
data_res);
1451 dev_err(db->
dev,
"cannot claim data reg area\n");
1459 dev_err(db->
dev,
"failed to ioremap data reg\n");
1469 dm9000_set_io(db, iosize);
1472 if (pdata !=
NULL) {
1477 dm9000_set_io(db, 1);
1480 dm9000_set_io(db, 2);
1483 dm9000_set_io(db, 4);
1500 #ifdef CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL
1507 for (i = 0; i < 8; i++) {
1515 dev_err(db->
dev,
"read wrong id 0x%08x\n", id_val);
1519 dev_err(db->
dev,
"wrong id: 0x%08x\n", id_val);
1527 dev_dbg(db->
dev,
"dm9000 revision 0x%02x\n", id_val);
1537 dev_dbg(db->
dev,
"ID %02x => defaulting to DM9000E\n", id_val);
1557 db->
mii.phy_id_mask = 0x1f;
1558 db->
mii.reg_num_mask = 0x1f;
1559 db->
mii.force_media = 0;
1560 db->
mii.full_duplex = 0;
1562 db->
mii.mdio_read = dm9000_phy_read;
1563 db->
mii.mdio_write = dm9000_phy_write;
1568 for (i = 0; i < 6; i += 2)
1569 dm9000_read_eeprom(db, i / 2, ndev->
dev_addr+i);
1571 if (!is_valid_ether_addr(ndev->
dev_addr) && pdata !=
NULL) {
1572 mac_src =
"platform data";
1576 if (!is_valid_ether_addr(ndev->
dev_addr)) {
1580 for (i = 0; i < 6; i++)
1584 if (!is_valid_ether_addr(ndev->
dev_addr)) {
1585 dev_warn(db->
dev,
"%s: Invalid ethernet MAC address. Please "
1586 "set using ifconfig\n", ndev->
name);
1588 eth_hw_addr_random(ndev);
1593 platform_set_drvdata(pdev, ndev);
1598 ndev->
name, dm9000_type_to_char(db->
type),
1606 dm9000_release_board(pdev, db);
1613 dm9000_drv_suspend(
struct device *dev)
1616 struct net_device *ndev = platform_get_drvdata(pdev);
1620 db = netdev_priv(ndev);
1623 if (!netif_running(ndev))
1630 dm9000_shutdown(ndev);
1636 dm9000_drv_resume(
struct device *dev)
1639 struct net_device *ndev = platform_get_drvdata(pdev);
1643 if (netif_running(ndev)) {
1648 dm9000_init_dm9000(ndev);
1659 static const struct dev_pm_ops dm9000_drv_pm_ops = {
1660 .suspend = dm9000_drv_suspend,
1661 .resume = dm9000_drv_resume,
1667 struct net_device *ndev = platform_get_drvdata(pdev);
1669 platform_set_drvdata(pdev,
NULL);
1672 dm9000_release_board(pdev, netdev_priv(ndev));
1675 dev_dbg(&pdev->
dev,
"released and freed device\n");
1683 .pm = &dm9000_drv_pm_ops,
1685 .probe = dm9000_probe,
1698 dm9000_cleanup(
void)