Lines Matching +full:need +full:- +full:phy +full:- +full:for +full:- +full:wake
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Davicom DM9000 Fast Ethernet driver for Linux.
6 * (C) Copyright 1997-1998 DAVICOM Semiconductor,Inc. All Rights Reserved.
40 /* Board/System/Debug information/definition ---------------- */
42 #define DM9000_PHY 0x40 /* PHY address 0x01 */
58 MODULE_PARM_DESC(debug, "dm9000 debug level (0-6)");
71 * For general accesses a lock is provided so that calls which are
73 * not need to be saved. This lock also serves to serialise access
74 * to the EEPROM and PHY access registers which are shared between
88 /* Structure/enum declaration ------------------------------- */
124 struct mutex addr_lock; /* phy and eeprom access lock */
142 dev_dbg(db->dev, msg); \
151 /* DM9000 network board routine ---------------------------- */
159 writeb(reg, db->io_addr); in ior()
160 return readb(db->io_data); in ior()
170 writeb(reg, db->io_addr); in iow()
171 writeb(value, db->io_data); in iow()
177 dev_dbg(db->dev, "resetting device\n"); in dm9000_reset()
186 dev_err(db->dev, "dm9000 did not respond to first reset\n"); in dm9000_reset()
192 dev_err(db->dev, "dm9000 did not respond to second reset\n"); in dm9000_reset()
195 /* routines for sending block to chip */
237 for (i = 0; i < count; i++) in dm9000_dumpblk_8bit()
248 for (i = 0; i < count; i++) in dm9000_dumpblk_16bit()
259 for (i = 0; i < count; i++) in dm9000_dumpblk_32bit()
269 if (db->in_suspend || db->in_timeout) in dm9000_msleep()
284 mutex_lock(&db->addr_lock); in dm9000_phy_read()
286 spin_lock_irqsave(&db->lock, flags); in dm9000_phy_read()
289 reg_save = readb(db->io_addr); in dm9000_phy_read()
297 writeb(reg_save, db->io_addr); in dm9000_phy_read()
298 spin_unlock_irqrestore(&db->lock, flags); in dm9000_phy_read()
302 spin_lock_irqsave(&db->lock, flags); in dm9000_phy_read()
303 reg_save = readb(db->io_addr); in dm9000_phy_read()
311 writeb(reg_save, db->io_addr); in dm9000_phy_read()
312 spin_unlock_irqrestore(&db->lock, flags); in dm9000_phy_read()
314 mutex_unlock(&db->addr_lock); in dm9000_phy_read()
316 dm9000_dbg(db, 5, "phy_read[%02x] -> %04x\n", reg, ret); in dm9000_phy_read()
330 if (!db->in_timeout) in dm9000_phy_write()
331 mutex_lock(&db->addr_lock); in dm9000_phy_write()
333 spin_lock_irqsave(&db->lock, flags); in dm9000_phy_write()
336 reg_save = readb(db->io_addr); in dm9000_phy_write()
348 writeb(reg_save, db->io_addr); in dm9000_phy_write()
349 spin_unlock_irqrestore(&db->lock, flags); in dm9000_phy_write()
353 spin_lock_irqsave(&db->lock, flags); in dm9000_phy_write()
354 reg_save = readb(db->io_addr); in dm9000_phy_write()
359 writeb(reg_save, db->io_addr); in dm9000_phy_write()
361 spin_unlock_irqrestore(&db->lock, flags); in dm9000_phy_write()
362 if (!db->in_timeout) in dm9000_phy_write()
363 mutex_unlock(&db->addr_lock); in dm9000_phy_write()
380 db->dumpblk = dm9000_dumpblk_8bit; in dm9000_set_io()
381 db->outblk = dm9000_outblk_8bit; in dm9000_set_io()
382 db->inblk = dm9000_inblk_8bit; in dm9000_set_io()
387 dev_dbg(db->dev, ": 3 byte IO, falling back to 16bit\n"); in dm9000_set_io()
390 db->dumpblk = dm9000_dumpblk_16bit; in dm9000_set_io()
391 db->outblk = dm9000_outblk_16bit; in dm9000_set_io()
392 db->inblk = dm9000_inblk_16bit; in dm9000_set_io()
397 db->dumpblk = dm9000_dumpblk_32bit; in dm9000_set_io()
398 db->outblk = dm9000_outblk_32bit; in dm9000_set_io()
399 db->inblk = dm9000_inblk_32bit; in dm9000_set_io()
406 if (db->type == TYPE_DM9000E) in dm9000_schedule_poll()
407 schedule_delayed_work(&db->phy_poll, HZ * 2); in dm9000_schedule_poll()
415 return -EINVAL; in dm9000_ioctl()
417 return generic_mii_ioctl(&dm->mii, if_mii(req), cmd, NULL); in dm9000_ioctl()
426 spin_lock_irqsave(&db->lock, flags); in dm9000_read_locked()
428 spin_unlock_irqrestore(&db->lock, flags); in dm9000_read_locked()
439 * poll the ERRE bit in EPCR to wait for the EEPROM in dm9000_wait_eeprom()
457 if (timeout-- < 0) { in dm9000_wait_eeprom()
458 dev_dbg(db->dev, "timeout waiting EEPROM\n"); in dm9000_wait_eeprom()
474 if (db->flags & DM9000_PLATF_NO_EEPROM) { in dm9000_read_eeprom()
480 mutex_lock(&db->addr_lock); in dm9000_read_eeprom()
482 spin_lock_irqsave(&db->lock, flags); in dm9000_read_eeprom()
487 spin_unlock_irqrestore(&db->lock, flags); in dm9000_read_eeprom()
491 /* delay for at-least 150uS */ in dm9000_read_eeprom()
494 spin_lock_irqsave(&db->lock, flags); in dm9000_read_eeprom()
501 spin_unlock_irqrestore(&db->lock, flags); in dm9000_read_eeprom()
503 mutex_unlock(&db->addr_lock); in dm9000_read_eeprom()
514 if (db->flags & DM9000_PLATF_NO_EEPROM) in dm9000_write_eeprom()
517 mutex_lock(&db->addr_lock); in dm9000_write_eeprom()
519 spin_lock_irqsave(&db->lock, flags); in dm9000_write_eeprom()
524 spin_unlock_irqrestore(&db->lock, flags); in dm9000_write_eeprom()
530 spin_lock_irqsave(&db->lock, flags); in dm9000_write_eeprom()
532 spin_unlock_irqrestore(&db->lock, flags); in dm9000_write_eeprom()
534 mutex_unlock(&db->addr_lock); in dm9000_write_eeprom()
544 strlcpy(info->driver, CARDNAME, sizeof(info->driver)); in dm9000_get_drvinfo()
545 strlcpy(info->bus_info, to_platform_device(dm->dev)->name, in dm9000_get_drvinfo()
546 sizeof(info->bus_info)); in dm9000_get_drvinfo()
553 return dm->msg_enable; in dm9000_get_msglevel()
560 dm->msg_enable = value; in dm9000_set_msglevel()
568 mii_ethtool_get_link_ksettings(&dm->mii, cmd); in dm9000_get_link_ksettings()
577 return mii_ethtool_set_link_ksettings(&dm->mii, cmd); in dm9000_set_link_ksettings()
583 return mii_nway_restart(&dm->mii); in dm9000_nway_reset()
590 netdev_features_t changed = dev->features ^ features; in dm9000_set_features()
596 spin_lock_irqsave(&dm->lock, flags); in dm9000_set_features()
598 spin_unlock_irqrestore(&dm->lock, flags); in dm9000_set_features()
608 if (dm->flags & DM9000_PLATF_EXT_PHY) in dm9000_get_link()
609 ret = mii_link_ok(&dm->mii); in dm9000_get_link()
627 int offset = ee->offset; in dm9000_get_eeprom()
628 int len = ee->len; in dm9000_get_eeprom()
634 return -EINVAL; in dm9000_get_eeprom()
636 if (dm->flags & DM9000_PLATF_NO_EEPROM) in dm9000_get_eeprom()
637 return -ENOENT; in dm9000_get_eeprom()
639 ee->magic = DM_EEPROM_MAGIC; in dm9000_get_eeprom()
641 for (i = 0; i < len; i += 2) in dm9000_get_eeprom()
651 int offset = ee->offset; in dm9000_set_eeprom()
652 int len = ee->len; in dm9000_set_eeprom()
657 if (dm->flags & DM9000_PLATF_NO_EEPROM) in dm9000_set_eeprom()
658 return -ENOENT; in dm9000_set_eeprom()
660 if (ee->magic != DM_EEPROM_MAGIC) in dm9000_set_eeprom()
661 return -EINVAL; in dm9000_set_eeprom()
680 len -= done; in dm9000_set_eeprom()
692 /* note, we could probably support wake-phy too */ in dm9000_get_wol()
693 w->supported = dm->wake_supported ? WAKE_MAGIC : 0; in dm9000_get_wol()
694 w->wolopts = dm->wake_state; in dm9000_get_wol()
701 u32 opts = w->wolopts; in dm9000_set_wol()
704 if (!dm->wake_supported) in dm9000_set_wol()
705 return -EOPNOTSUPP; in dm9000_set_wol()
708 return -EINVAL; in dm9000_set_wol()
713 mutex_lock(&dm->addr_lock); in dm9000_set_wol()
715 spin_lock_irqsave(&dm->lock, flags); in dm9000_set_wol()
717 spin_unlock_irqrestore(&dm->lock, flags); in dm9000_set_wol()
719 mutex_unlock(&dm->addr_lock); in dm9000_set_wol()
721 if (dm->wake_state != opts) { in dm9000_set_wol()
724 if (!dm->wake_state) in dm9000_set_wol()
725 irq_set_irq_wake(dm->irq_wake, 1); in dm9000_set_wol()
726 else if (dm->wake_state && !opts) in dm9000_set_wol()
727 irq_set_irq_wake(dm->irq_wake, 0); in dm9000_set_wol()
730 dm->wake_state = opts; in dm9000_set_wol()
753 struct net_device *ndev = db->ndev; in dm9000_show_carrier()
754 struct mii_if_info *mii = &db->mii; in dm9000_show_carrier()
758 lpa = mii->mdio_read(mii->dev, mii->phy_id, MII_LPA); in dm9000_show_carrier()
759 dev_info(db->dev, in dm9000_show_carrier()
760 "%s: link up, %dMbps, %s-duplex, lpa 0x%04X\n", in dm9000_show_carrier()
761 ndev->name, (nsr & NSR_SPEED) ? 10 : 100, in dm9000_show_carrier()
764 dev_info(db->dev, "%s: link down\n", ndev->name); in dm9000_show_carrier()
773 struct net_device *ndev = db->ndev; in dm9000_poll_work()
775 if (db->flags & DM9000_PLATF_SIMPLE_PHY && in dm9000_poll_work()
776 !(db->flags & DM9000_PLATF_EXT_PHY)) { in dm9000_poll_work()
793 mii_check_media(&db->mii, netif_msg_link(db), 0); in dm9000_poll_work()
809 iounmap(db->io_addr); in dm9000_release_board()
810 iounmap(db->io_data); in dm9000_release_board()
814 if (db->data_req) in dm9000_release_board()
815 release_resource(db->data_req); in dm9000_release_board()
816 kfree(db->data_req); in dm9000_release_board()
818 if (db->addr_req) in dm9000_release_board()
819 release_resource(db->addr_req); in dm9000_release_board()
820 kfree(db->addr_req); in dm9000_release_board()
849 for (i = 0, oft = DM9000_PAR; i < 6; i++, oft++) in dm9000_hash_table_unlocked()
850 iow(db, oft, dev->dev_addr[i]); in dm9000_hash_table_unlocked()
852 if (dev->flags & IFF_PROMISC) in dm9000_hash_table_unlocked()
855 if (dev->flags & IFF_ALLMULTI) in dm9000_hash_table_unlocked()
860 hash_val = ether_crc_le(6, ha->addr) & 0x3f; in dm9000_hash_table_unlocked()
865 for (i = 0, oft = DM9000_MAR; i < 4; i++) { in dm9000_hash_table_unlocked()
879 spin_lock_irqsave(&db->lock, flags); in dm9000_hash_table()
881 spin_unlock_irqrestore(&db->lock, flags); in dm9000_hash_table()
893 iow(db, DM9000_IMR, db->imr_all); in dm9000_unmask_interrupts()
912 db->io_mode = ior(db, DM9000_ISR) >> 6; /* ISR bit7:6 keeps I/O mode */ in dm9000_init_dm9000()
915 if (dev->hw_features & NETIF_F_RXCSUM) in dm9000_init_dm9000()
917 (dev->features & NETIF_F_RXCSUM) ? RCSR_CSUM : 0); in dm9000_init_dm9000()
923 * manual phy reset, and setting init params. in dm9000_init_dm9000()
925 if (db->type == TYPE_DM9000B) { in dm9000_init_dm9000()
930 ncr = (db->flags & DM9000_PLATF_EXT_PHY) ? NCR_EXT_PHY : 0; in dm9000_init_dm9000()
933 * up dumping the wake events if we disable this. There is already in dm9000_init_dm9000()
934 * a wake-mask in DM9000_WCR */ in dm9000_init_dm9000()
935 if (db->wake_supported) in dm9000_init_dm9000()
953 if (db->type != TYPE_DM9000E) in dm9000_init_dm9000()
956 db->imr_all = imr; in dm9000_init_dm9000()
959 db->tx_pkt_cnt = 0; in dm9000_init_dm9000()
960 db->queue_pkt_len = 0; in dm9000_init_dm9000()
972 spin_lock_irqsave(&db->lock, flags); in dm9000_timeout()
973 db->in_timeout = 1; in dm9000_timeout()
974 reg_save = readb(db->io_addr); in dm9000_timeout()
984 writeb(reg_save, db->io_addr); in dm9000_timeout()
985 db->in_timeout = 0; in dm9000_timeout()
986 spin_unlock_irqrestore(&db->lock, flags); in dm9000_timeout()
996 if (dm->ip_summed != ip_summed) { in dm9000_send_packet()
1001 dm->ip_summed = ip_summed; in dm9000_send_packet()
1024 if (db->tx_pkt_cnt > 1) in dm9000_start_xmit()
1027 spin_lock_irqsave(&db->lock, flags); in dm9000_start_xmit()
1030 writeb(DM9000_MWCMD, db->io_addr); in dm9000_start_xmit()
1032 (db->outblk)(db->io_data, skb->data, skb->len); in dm9000_start_xmit()
1033 dev->stats.tx_bytes += skb->len; in dm9000_start_xmit()
1035 db->tx_pkt_cnt++; in dm9000_start_xmit()
1037 if (db->tx_pkt_cnt == 1) { in dm9000_start_xmit()
1038 dm9000_send_packet(dev, skb->ip_summed, skb->len); in dm9000_start_xmit()
1041 db->queue_pkt_len = skb->len; in dm9000_start_xmit()
1042 db->queue_ip_summed = skb->ip_summed; in dm9000_start_xmit()
1046 spin_unlock_irqrestore(&db->lock, flags); in dm9000_start_xmit()
1065 db->tx_pkt_cnt--; in dm9000_tx_done()
1066 dev->stats.tx_packets++; in dm9000_tx_done()
1069 dev_dbg(db->dev, "tx done, NSR %02x\n", tx_status); in dm9000_tx_done()
1072 if (db->tx_pkt_cnt > 0) in dm9000_tx_done()
1073 dm9000_send_packet(dev, db->queue_ip_summed, in dm9000_tx_done()
1074 db->queue_pkt_len); in dm9000_tx_done()
1103 rxbyte = readb(db->io_data); in dm9000_rx()
1107 dev_warn(db->dev, "status check fail: %d\n", rxbyte); in dm9000_rx()
1117 writeb(DM9000_MRCMD, db->io_addr); in dm9000_rx()
1119 (db->inblk)(db->io_data, &rxhdr, sizeof(rxhdr)); in dm9000_rx()
1124 dev_dbg(db->dev, "RX: status %02x, length %04x\n", in dm9000_rx()
1131 dev_dbg(db->dev, "RX: Bad Packet (runt)\n"); in dm9000_rx()
1135 dev_dbg(db->dev, "RST: RX Len:%x\n", RxLen); in dm9000_rx()
1145 dev_dbg(db->dev, "fifo error\n"); in dm9000_rx()
1146 dev->stats.rx_fifo_errors++; in dm9000_rx()
1150 dev_dbg(db->dev, "crc error\n"); in dm9000_rx()
1151 dev->stats.rx_crc_errors++; in dm9000_rx()
1155 dev_dbg(db->dev, "length error\n"); in dm9000_rx()
1156 dev->stats.rx_length_errors++; in dm9000_rx()
1164 rdptr = skb_put(skb, RxLen - 4); in dm9000_rx()
1168 (db->inblk)(db->io_data, rdptr, RxLen); in dm9000_rx()
1169 dev->stats.rx_bytes += RxLen; in dm9000_rx()
1172 skb->protocol = eth_type_trans(skb, dev); in dm9000_rx()
1173 if (dev->features & NETIF_F_RXCSUM) { in dm9000_rx()
1175 skb->ip_summed = CHECKSUM_UNNECESSARY; in dm9000_rx()
1180 dev->stats.rx_packets++; in dm9000_rx()
1183 /* need to dump the packet's data */ in dm9000_rx()
1185 (db->dumpblk)(db->io_data, RxLen); in dm9000_rx()
1202 /* holders of db->lock must always block IRQs */ in dm9000_interrupt()
1203 spin_lock_irqsave(&db->lock, flags); in dm9000_interrupt()
1206 reg_save = readb(db->io_addr); in dm9000_interrupt()
1214 dev_dbg(db->dev, "interrupt status %02x\n", int_status); in dm9000_interrupt()
1224 if (db->type != TYPE_DM9000E) { in dm9000_interrupt()
1226 /* fire a link-change request */ in dm9000_interrupt()
1227 schedule_delayed_work(&db->phy_poll, 1); in dm9000_interrupt()
1233 writeb(reg_save, db->io_addr); in dm9000_interrupt()
1235 spin_unlock_irqrestore(&db->lock, flags); in dm9000_interrupt()
1247 spin_lock_irqsave(&db->lock, flags); in dm9000_wol_interrupt()
1252 dev_dbg(db->dev, "%s: NSR=0x%02x, WCR=0x%02x\n", __func__, nsr, wcr); in dm9000_wol_interrupt()
1259 dev_info(db->dev, "wake by link status change\n"); in dm9000_wol_interrupt()
1261 dev_info(db->dev, "wake by sample packet\n"); in dm9000_wol_interrupt()
1263 dev_info(db->dev, "wake by magic packet\n"); in dm9000_wol_interrupt()
1265 dev_err(db->dev, "wake signalled with no reason? " in dm9000_wol_interrupt()
1269 spin_unlock_irqrestore(&db->lock, flags); in dm9000_wol_interrupt()
1280 disable_irq(dev->irq); in dm9000_poll_controller()
1281 dm9000_interrupt(dev->irq, dev); in dm9000_poll_controller()
1282 enable_irq(dev->irq); in dm9000_poll_controller()
1294 unsigned int irq_flags = irq_get_trigger_type(dev->irq); in dm9000_open()
1297 dev_dbg(db->dev, "enabling %s\n", dev->name); in dm9000_open()
1303 dev_warn(db->dev, "WARNING: no IRQ resource flags set.\n"); in dm9000_open()
1307 /* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */ in dm9000_open()
1314 if (request_irq(dev->irq, dm9000_interrupt, irq_flags, dev->name, dev)) in dm9000_open()
1315 return -EAGAIN; in dm9000_open()
1322 db->dbug_cnt = 0; in dm9000_open()
1324 mii_check_media(&db->mii, netif_msg_link(db), 1); in dm9000_open()
1328 schedule_delayed_work(&db->phy_poll, 1); in dm9000_open()
1339 dm9000_phy_write(dev, 0, MII_BMCR, BMCR_RESET); /* PHY RESET */ in dm9000_shutdown()
1340 iow(db, DM9000_GPR, 0x01); /* Power-Down PHY */ in dm9000_shutdown()
1355 dev_dbg(db->dev, "shutting down %s\n", ndev->name); in dm9000_stop()
1357 cancel_delayed_work_sync(&db->phy_poll); in dm9000_stop()
1363 free_irq(ndev->irq, ndev); in dm9000_stop()
1388 struct device_node *np = dev->of_node; in dm9000_parse_dt()
1392 return ERR_PTR(-ENXIO); in dm9000_parse_dt()
1396 return ERR_PTR(-ENOMEM); in dm9000_parse_dt()
1398 if (of_find_property(np, "davicom,ext-phy", NULL)) in dm9000_parse_dt()
1399 pdata->flags |= DM9000_PLATF_EXT_PHY; in dm9000_parse_dt()
1400 if (of_find_property(np, "davicom,no-eeprom", NULL)) in dm9000_parse_dt()
1401 pdata->flags |= DM9000_PLATF_NO_EEPROM; in dm9000_parse_dt()
1405 ether_addr_copy(pdata->dev_addr, mac_addr); in dm9000_parse_dt()
1406 else if (PTR_ERR(mac_addr) == -EPROBE_DEFER) in dm9000_parse_dt()
1418 struct dm9000_plat_data *pdata = dev_get_platdata(&pdev->dev); in dm9000_probe()
1421 struct device *dev = &pdev->dev; in dm9000_probe()
1434 if (PTR_ERR(power) == -EPROBE_DEFER) in dm9000_probe()
1435 return -EPROBE_DEFER; in dm9000_probe()
1447 reset_gpios = of_get_named_gpio_flags(dev->of_node, "reset-gpios", 0, in dm9000_probe()
1455 return -ENODEV; in dm9000_probe()
1466 pdata = dm9000_parse_dt(&pdev->dev); in dm9000_probe()
1474 return -ENOMEM; in dm9000_probe()
1476 SET_NETDEV_DEV(ndev, &pdev->dev); in dm9000_probe()
1478 dev_dbg(&pdev->dev, "dm9000_probe()\n"); in dm9000_probe()
1483 db->dev = &pdev->dev; in dm9000_probe()
1484 db->ndev = ndev; in dm9000_probe()
1486 spin_lock_init(&db->lock); in dm9000_probe()
1487 mutex_init(&db->addr_lock); in dm9000_probe()
1489 INIT_DELAYED_WORK(&db->phy_poll, dm9000_poll_work); in dm9000_probe()
1491 db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); in dm9000_probe()
1492 db->data_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); in dm9000_probe()
1494 if (!db->addr_res || !db->data_res) { in dm9000_probe()
1495 dev_err(db->dev, "insufficient resources addr=%p data=%p\n", in dm9000_probe()
1496 db->addr_res, db->data_res); in dm9000_probe()
1497 ret = -ENOENT; in dm9000_probe()
1501 ndev->irq = platform_get_irq(pdev, 0); in dm9000_probe()
1502 if (ndev->irq < 0) { in dm9000_probe()
1503 ret = ndev->irq; in dm9000_probe()
1507 db->irq_wake = platform_get_irq(pdev, 1); in dm9000_probe()
1508 if (db->irq_wake >= 0) { in dm9000_probe()
1509 dev_dbg(db->dev, "wakeup irq %d\n", db->irq_wake); in dm9000_probe()
1511 ret = request_irq(db->irq_wake, dm9000_wol_interrupt, in dm9000_probe()
1512 IRQF_SHARED, dev_name(db->dev), ndev); in dm9000_probe()
1514 dev_err(db->dev, "cannot get wakeup irq (%d)\n", ret); in dm9000_probe()
1518 ret = irq_set_irq_wake(db->irq_wake, 1); in dm9000_probe()
1520 dev_err(db->dev, "irq %d cannot set wakeup (%d)\n", in dm9000_probe()
1521 db->irq_wake, ret); in dm9000_probe()
1524 irq_set_irq_wake(db->irq_wake, 0); in dm9000_probe()
1525 db->wake_supported = 1; in dm9000_probe()
1530 iosize = resource_size(db->addr_res); in dm9000_probe()
1531 db->addr_req = request_mem_region(db->addr_res->start, iosize, in dm9000_probe()
1532 pdev->name); in dm9000_probe()
1534 if (db->addr_req == NULL) { in dm9000_probe()
1535 dev_err(db->dev, "cannot claim address reg area\n"); in dm9000_probe()
1536 ret = -EIO; in dm9000_probe()
1540 db->io_addr = ioremap(db->addr_res->start, iosize); in dm9000_probe()
1542 if (db->io_addr == NULL) { in dm9000_probe()
1543 dev_err(db->dev, "failed to ioremap address reg\n"); in dm9000_probe()
1544 ret = -EINVAL; in dm9000_probe()
1548 iosize = resource_size(db->data_res); in dm9000_probe()
1549 db->data_req = request_mem_region(db->data_res->start, iosize, in dm9000_probe()
1550 pdev->name); in dm9000_probe()
1552 if (db->data_req == NULL) { in dm9000_probe()
1553 dev_err(db->dev, "cannot claim data reg area\n"); in dm9000_probe()
1554 ret = -EIO; in dm9000_probe()
1558 db->io_data = ioremap(db->data_res->start, iosize); in dm9000_probe()
1560 if (db->io_data == NULL) { in dm9000_probe()
1561 dev_err(db->dev, "failed to ioremap data reg\n"); in dm9000_probe()
1562 ret = -EINVAL; in dm9000_probe()
1566 /* fill in parameters for net-dev structure */ in dm9000_probe()
1567 ndev->base_addr = (unsigned long)db->io_addr; in dm9000_probe()
1572 /* check to see if anything is being over-ridden */ in dm9000_probe()
1574 /* check to see if the driver wants to over-ride the in dm9000_probe()
1577 if (pdata->flags & DM9000_PLATF_8BITONLY) in dm9000_probe()
1580 if (pdata->flags & DM9000_PLATF_16BITONLY) in dm9000_probe()
1583 if (pdata->flags & DM9000_PLATF_32BITONLY) in dm9000_probe()
1587 * over-rides */ in dm9000_probe()
1589 if (pdata->inblk != NULL) in dm9000_probe()
1590 db->inblk = pdata->inblk; in dm9000_probe()
1592 if (pdata->outblk != NULL) in dm9000_probe()
1593 db->outblk = pdata->outblk; in dm9000_probe()
1595 if (pdata->dumpblk != NULL) in dm9000_probe()
1596 db->dumpblk = pdata->dumpblk; in dm9000_probe()
1598 db->flags = pdata->flags; in dm9000_probe()
1602 db->flags |= DM9000_PLATF_SIMPLE_PHY; in dm9000_probe()
1608 for (i = 0; i < 8; i++) { in dm9000_probe()
1616 dev_err(db->dev, "read wrong id 0x%08x\n", id_val); in dm9000_probe()
1620 dev_err(db->dev, "wrong id: 0x%08x\n", id_val); in dm9000_probe()
1621 ret = -ENODEV; in dm9000_probe()
1628 dev_dbg(db->dev, "dm9000 revision 0x%02x\n", id_val); in dm9000_probe()
1632 db->type = TYPE_DM9000A; in dm9000_probe()
1635 db->type = TYPE_DM9000B; in dm9000_probe()
1638 dev_dbg(db->dev, "ID %02x => defaulting to DM9000E\n", id_val); in dm9000_probe()
1639 db->type = TYPE_DM9000E; in dm9000_probe()
1643 if (db->type == TYPE_DM9000A || db->type == TYPE_DM9000B) { in dm9000_probe()
1644 ndev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM; in dm9000_probe()
1645 ndev->features |= ndev->hw_features; in dm9000_probe()
1650 ndev->netdev_ops = &dm9000_netdev_ops; in dm9000_probe()
1651 ndev->watchdog_timeo = msecs_to_jiffies(watchdog); in dm9000_probe()
1652 ndev->ethtool_ops = &dm9000_ethtool_ops; in dm9000_probe()
1654 db->msg_enable = NETIF_MSG_LINK; in dm9000_probe()
1655 db->mii.phy_id_mask = 0x1f; in dm9000_probe()
1656 db->mii.reg_num_mask = 0x1f; in dm9000_probe()
1657 db->mii.force_media = 0; in dm9000_probe()
1658 db->mii.full_duplex = 0; in dm9000_probe()
1659 db->mii.dev = ndev; in dm9000_probe()
1660 db->mii.mdio_read = dm9000_phy_read; in dm9000_probe()
1661 db->mii.mdio_write = dm9000_phy_write; in dm9000_probe()
1666 for (i = 0; i < 6; i += 2) in dm9000_probe()
1667 dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i); in dm9000_probe()
1669 if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) { in dm9000_probe()
1671 memcpy(ndev->dev_addr, pdata->dev_addr, ETH_ALEN); in dm9000_probe()
1674 if (!is_valid_ether_addr(ndev->dev_addr)) { in dm9000_probe()
1678 for (i = 0; i < 6; i++) in dm9000_probe()
1679 ndev->dev_addr[i] = ior(db, i+DM9000_PAR); in dm9000_probe()
1682 if (!is_valid_ether_addr(ndev->dev_addr)) { in dm9000_probe()
1694 dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please set using ip\n", in dm9000_probe()
1695 ndev->name); in dm9000_probe()
1697 ndev->name, dm9000_type_to_char(db->type), in dm9000_probe()
1698 db->io_addr, db->io_data, ndev->irq, in dm9000_probe()
1699 ndev->dev_addr, mac_src); in dm9000_probe()
1704 dev_err(db->dev, "not found (%d).\n", ret); in dm9000_probe()
1720 db->in_suspend = 1; in dm9000_drv_suspend()
1728 if (!db->wake_state) in dm9000_drv_suspend()
1742 /* reset if we were not in wake mode to ensure if in dm9000_drv_resume()
1744 if (!db->wake_state) { in dm9000_drv_resume()
1752 db->in_suspend = 0; in dm9000_drv_resume()
1771 dev_dbg(&pdev->dev, "released and freed device\n"); in dm9000_drv_remove()