Lines Matching +full:network +full:- +full:on +full:- +full:chip
1 // SPDX-License-Identifier: GPL-2.0-only
29 * ks8851_lock - register access lock
30 * @ks: The chip state
33 * Claim chip register access lock
37 ks->lock(ks, flags); in ks8851_lock()
41 * ks8851_unlock - register access unlock
42 * @ks: The chip state
45 * Release chip register access lock
49 ks->unlock(ks, flags); in ks8851_unlock()
53 * ks8851_wrreg16 - write 16bit register value to chip
54 * @ks: The chip state
63 ks->wrreg16(ks, reg, val); in ks8851_wrreg16()
67 * ks8851_rdreg16 - read 16 bit register from device
68 * @ks: The chip information
71 * Read a 16bit register from the chip, returning the result
76 return ks->rdreg16(ks, reg); in ks8851_rdreg16()
80 * ks8851_soft_reset - issue one of the soft reset to the device
84 * Issue the relevant soft-reset command to the device's GRR register
101 * ks8851_set_powermode - set power mode of the device
105 * Change the power mode of the chip.
111 netif_dbg(ks, hw, ks->netdev, "setting power mode %d\n", pwrmode); in ks8851_set_powermode()
121 * ks8851_write_mac_addr - write mac address to device registers
122 * @dev: The network device
126 * This call assumes that the chip is not running, so there is no need to
139 * Wake up chip in case it was powered off when stopped; otherwise, in ks8851_write_mac_addr()
145 val = (dev->dev_addr[i] << 8) | dev->dev_addr[i + 1]; in ks8851_write_mac_addr()
158 * ks8851_read_mac_addr - read mac address from device registers
159 * @dev: The network device
184 * ks8851_init_mac - initialise the mac address
196 struct net_device *dev = ks->netdev; in ks8851_init_mac()
205 if (ks->rc_ccr & CCR_EEPROM) { in ks8851_init_mac()
207 if (is_valid_ether_addr(dev->dev_addr)) in ks8851_init_mac()
210 netdev_err(ks->netdev, "invalid mac address read %pM\n", in ks8851_init_mac()
211 dev->dev_addr); in ks8851_init_mac()
219 * ks8851_dbg_dumpkkt - dump initial packet contents to debug
227 netdev_dbg(ks->netdev, in ks8851_dbg_dumpkkt()
235 * ks8851_rx_skb - receive skbuff
241 ks->rx_skb(ks, skb); in ks8851_rx_skb()
245 * ks8851_rx_pkts - receive packets from the host
262 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
272 * reset to the data stream coming from the chip. in ks8851_rx_pkts()
275 for (; rxfc != 0; rxfc--) { in ks8851_rx_pkts()
279 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
288 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA); in ks8851_rx_pkts()
293 rxlen -= 4; in ks8851_rx_pkts()
295 skb = netdev_alloc_skb_ip_align(ks->netdev, rxalign); in ks8851_rx_pkts()
304 rxpkt = skb_put(skb, rxlen) - 8; in ks8851_rx_pkts()
306 ks->rdfifo(ks, rxpkt, rxalign + 8); in ks8851_rx_pkts()
311 skb->protocol = eth_type_trans(skb, ks->netdev); in ks8851_rx_pkts()
314 ks->netdev->stats.rx_packets++; in ks8851_rx_pkts()
315 ks->netdev->stats.rx_bytes += rxlen; in ks8851_rx_pkts()
320 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_RRXEF); in ks8851_rx_pkts()
325 * ks8851_irq - IRQ handler for dealing with interrupt requests
347 netif_dbg(ks, intr, ks->netdev, in ks8851_irq()
367 netif_dbg(ks, intr, ks->netdev, in ks8851_irq()
370 spin_lock(&ks->statelock); in ks8851_irq()
371 ks->tx_space = tx_space; in ks8851_irq()
372 if (netif_queue_stopped(ks->netdev)) in ks8851_irq()
373 netif_wake_queue(ks->netdev); in ks8851_irq()
374 spin_unlock(&ks->statelock); in ks8851_irq()
383 netdev_err(ks->netdev, "%s: spi bus error\n", __func__); in ks8851_irq()
391 * packet read-out, however we're masking the interrupt in ks8851_irq()
402 struct ks8851_rxctrl *rxc = &ks->rxctrl; in ks8851_irq()
405 ks8851_wrreg16(ks, KS_MAHTR0, rxc->mchash[0]); in ks8851_irq()
406 ks8851_wrreg16(ks, KS_MAHTR1, rxc->mchash[1]); in ks8851_irq()
407 ks8851_wrreg16(ks, KS_MAHTR2, rxc->mchash[2]); in ks8851_irq()
408 ks8851_wrreg16(ks, KS_MAHTR3, rxc->mchash[3]); in ks8851_irq()
410 ks8851_wrreg16(ks, KS_RXCR2, rxc->rxcr2); in ks8851_irq()
411 ks8851_wrreg16(ks, KS_RXCR1, rxc->rxcr1); in ks8851_irq()
417 mii_check_link(&ks->mii); in ks8851_irq()
423 * ks8851_flush_tx_work - flush outstanding TX work
428 if (ks->flush_tx_work) in ks8851_flush_tx_work()
429 ks->flush_tx_work(ks); in ks8851_flush_tx_work()
433 * ks8851_net_open - open network device
434 * @dev: The network device being opened.
436 * Called when the network device is marked active, such as a user executing
437 * 'ifconfig up' on the device.
445 ret = request_threaded_irq(dev->irq, NULL, ks8851_irq, in ks8851_net_open()
447 dev->name, ks); in ks8851_net_open()
457 netif_dbg(ks, ifup, ks->netdev, "opening\n"); in ks8851_net_open()
459 /* bring chip out of any power saving mode it was in */ in ks8851_net_open()
473 /* auto-increment tx data, reset tx pointer */ in ks8851_net_open()
492 ks->rc_rxqcr = (RXQCR_RXFCTE | /* IRQ on frame count exceeded */ in ks8851_net_open()
493 RXQCR_RXDBCTE | /* IRQ on byte count exceeded */ in ks8851_net_open()
494 RXQCR_RXDTTE); /* IRQ on time exceeded */ in ks8851_net_open()
496 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr); in ks8851_net_open()
499 ks8851_wrreg16(ks, KS_ISR, ks->rc_ier); in ks8851_net_open()
500 ks8851_wrreg16(ks, KS_IER, ks->rc_ier); in ks8851_net_open()
502 ks->queued_len = 0; in ks8851_net_open()
503 netif_start_queue(ks->netdev); in ks8851_net_open()
505 netif_dbg(ks, ifup, ks->netdev, "network device up\n"); in ks8851_net_open()
508 mii_check_link(&ks->mii); in ks8851_net_open()
513 * ks8851_net_stop - close network device
516 * Called to close down a network device which has been active. Cancell any
517 * work, shutdown the RX and TX process and then place the chip into a low
537 flush_work(&ks->rxctrl_work); in ks8851_net_stop()
551 while (!skb_queue_empty(&ks->txq)) { in ks8851_net_stop()
552 struct sk_buff *txb = skb_dequeue(&ks->txq); in ks8851_net_stop()
554 netif_dbg(ks, ifdown, ks->netdev, in ks8851_net_stop()
560 free_irq(dev->irq, ks); in ks8851_net_stop()
566 * ks8851_start_xmit - transmit packet
570 * Called by the network layer to transmit the @skb. Queue the packet for
574 * We do this to firstly avoid sleeping with the network device locked,
583 return ks->start_xmit(skb, dev); in ks8851_start_xmit()
587 * ks8851_rxctrl_work - work handler to change rx mode
591 * the network device layer. This is done so that we can do this without
592 * having to sleep whilst holding the network device lock.
597 * complete. The interrupt handler then writes the new values into the chip.
619 if (dev->flags & IFF_PROMISC) { in ks8851_set_rx_mode()
623 } else if (dev->flags & IFF_ALLMULTI) { in ks8851_set_rx_mode()
628 } else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) { in ks8851_set_rx_mode()
635 crc = ether_crc(ETH_ALEN, ha->addr); in ks8851_set_rx_mode()
636 crc >>= (32 - 6); /* get top six bits */ in ks8851_set_rx_mode()
656 spin_lock(&ks->statelock); in ks8851_set_rx_mode()
658 if (memcmp(&rxctrl, &ks->rxctrl, sizeof(rxctrl)) != 0) { in ks8851_set_rx_mode()
659 memcpy(&ks->rxctrl, &rxctrl, sizeof(ks->rxctrl)); in ks8851_set_rx_mode()
660 schedule_work(&ks->rxctrl_work); in ks8851_set_rx_mode()
663 spin_unlock(&ks->statelock); in ks8851_set_rx_mode()
671 return -EBUSY; in ks8851_set_mac_address()
673 if (!is_valid_ether_addr(sa->sa_data)) in ks8851_set_mac_address()
674 return -EADDRNOTAVAIL; in ks8851_set_mac_address()
676 eth_hw_addr_set(dev, sa->sa_data); in ks8851_set_mac_address()
685 return -EINVAL; in ks8851_net_ioctl()
687 return generic_mii_ioctl(&ks->mii, if_mii(req), cmd, NULL); in ks8851_net_ioctl()
705 strscpy(di->driver, "KS8851", sizeof(di->driver)); in ks8851_get_drvinfo()
706 strscpy(di->version, "1.00", sizeof(di->version)); in ks8851_get_drvinfo()
707 strscpy(di->bus_info, dev_name(dev->dev.parent), sizeof(di->bus_info)); in ks8851_get_drvinfo()
713 return ks->msg_enable; in ks8851_get_msglevel()
719 ks->msg_enable = to; in ks8851_set_msglevel()
727 mii_ethtool_get_link_ksettings(&ks->mii, cmd); in ks8851_get_link_ksettings()
736 return mii_ethtool_set_link_ksettings(&ks->mii, cmd); in ks8851_set_link_ksettings()
742 return mii_link_ok(&ks->mii); in ks8851_get_link()
748 return mii_nway_restart(&ks->mii); in ks8851_nway_reset()
755 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regread()
760 ee->reg_data_out = (val & EEPCR_EESB) ? 1 : 0; in ks8851_eeprom_regread()
761 ee->reg_data_clock = (val & EEPCR_EESCK) ? 1 : 0; in ks8851_eeprom_regread()
762 ee->reg_chip_select = (val & EEPCR_EECS) ? 1 : 0; in ks8851_eeprom_regread()
767 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regwrite()
768 unsigned val = EEPCR_EESA; /* default - eeprom access on */ in ks8851_eeprom_regwrite()
770 if (ee->drive_data) in ks8851_eeprom_regwrite()
772 if (ee->reg_data_in) in ks8851_eeprom_regwrite()
774 if (ee->reg_data_clock) in ks8851_eeprom_regwrite()
776 if (ee->reg_chip_select) in ks8851_eeprom_regwrite()
783 * ks8851_eeprom_claim - claim device EEPROM and activate the interface
784 * @ks: The network device state.
797 * ks8851_eeprom_release - release the EEPROM interface
815 int offset = ee->offset; in ks8851_set_eeprom()
817 int len = ee->len; in ks8851_set_eeprom()
822 return -EINVAL; in ks8851_set_eeprom()
824 if (ee->magic != KS_EEPROM_MAGIC) in ks8851_set_eeprom()
825 return -EINVAL; in ks8851_set_eeprom()
827 if (!(ks->rc_ccr & CCR_EEPROM)) in ks8851_set_eeprom()
828 return -ENOENT; in ks8851_set_eeprom()
834 eeprom_93cx6_wren(&ks->eeprom, true); in ks8851_set_eeprom()
839 eeprom_93cx6_read(&ks->eeprom, offset/2, &tmp); in ks8851_set_eeprom()
849 eeprom_93cx6_write(&ks->eeprom, offset/2, tmp); in ks8851_set_eeprom()
850 eeprom_93cx6_wren(&ks->eeprom, false); in ks8851_set_eeprom()
862 int offset = ee->offset; in ks8851_get_eeprom()
864 int len = ee->len; in ks8851_get_eeprom()
868 return -EINVAL; in ks8851_get_eeprom()
870 if (!(ks->rc_ccr & CCR_EEPROM)) in ks8851_get_eeprom()
871 return -ENOENT; in ks8851_get_eeprom()
877 ee->magic = KS_EEPROM_MAGIC; in ks8851_get_eeprom()
879 eeprom_93cx6_multiread(&ks->eeprom, offset/2, (__le16 *)data, len/2); in ks8851_get_eeprom()
891 return ks->rc_ccr & CCR_EEPROM ? 128 : 0; in ks8851_get_eeprom_len()
910 * ks8851_phy_reg - convert MII register into a KS8851 register
934 return -EOPNOTSUPP; in ks8851_phy_reg()
956 * ks8851_phy_read - MII interface PHY register read.
957 * @dev: The network device the PHY is on.
962 * device does not support all the MII registers, the non-existent values
967 * caller. The mii-tool that the driver was tested with takes any -ve error
998 struct ks8851_net *ks = bus->priv; in ks8851_mdio_read()
1001 return -EOPNOTSUPP; in ks8851_mdio_read()
1009 return ks8851_phy_read_common(ks->netdev, phy_id, reg); in ks8851_mdio_read()
1014 struct ks8851_net *ks = bus->priv; in ks8851_mdio_write()
1016 ks8851_phy_write(ks->netdev, phy_id, reg, val); in ks8851_mdio_write()
1021 * ks8851_read_selftest - read the selftest memory info.
1034 netdev_warn(ks->netdev, "Memory selftest not finished\n"); in ks8851_read_selftest()
1039 netdev_err(ks->netdev, "TX memory selftest fail\n"); in ks8851_read_selftest()
1042 netdev_err(ks->netdev, "RX memory selftest fail\n"); in ks8851_read_selftest()
1052 struct net_device *netdev = ks->netdev; in ks8851_suspend()
1066 struct net_device *netdev = ks->netdev; in ks8851_resume()
1085 return -ENOMEM; in ks8851_register_mdiobus()
1087 mii_bus->name = "ks8851_eth_mii"; in ks8851_register_mdiobus()
1088 mii_bus->read = ks8851_mdio_read; in ks8851_register_mdiobus()
1089 mii_bus->write = ks8851_mdio_write; in ks8851_register_mdiobus()
1090 mii_bus->priv = ks; in ks8851_register_mdiobus()
1091 mii_bus->parent = dev; in ks8851_register_mdiobus()
1092 mii_bus->phy_mask = ~((u32)BIT(0)); in ks8851_register_mdiobus()
1093 snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%s", dev_name(dev)); in ks8851_register_mdiobus()
1099 ks->mii_bus = mii_bus; in ks8851_register_mdiobus()
1110 mdiobus_unregister(ks->mii_bus); in ks8851_unregister_mdiobus()
1111 mdiobus_free(ks->mii_bus); in ks8851_unregister_mdiobus()
1121 ks->netdev = netdev; in ks8851_probe_common()
1122 ks->tx_space = 6144; in ks8851_probe_common()
1124 ks->gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); in ks8851_probe_common()
1125 ret = PTR_ERR_OR_ZERO(ks->gpio); in ks8851_probe_common()
1127 if (ret != -EPROBE_DEFER) in ks8851_probe_common()
1132 ret = gpiod_set_consumer_name(ks->gpio, "ks8851_rst_n"); in ks8851_probe_common()
1138 ks->vdd_io = devm_regulator_get(dev, "vdd-io"); in ks8851_probe_common()
1139 if (IS_ERR(ks->vdd_io)) { in ks8851_probe_common()
1140 ret = PTR_ERR(ks->vdd_io); in ks8851_probe_common()
1144 ret = regulator_enable(ks->vdd_io); in ks8851_probe_common()
1150 ks->vdd_reg = devm_regulator_get(dev, "vdd"); in ks8851_probe_common()
1151 if (IS_ERR(ks->vdd_reg)) { in ks8851_probe_common()
1152 ret = PTR_ERR(ks->vdd_reg); in ks8851_probe_common()
1156 ret = regulator_enable(ks->vdd_reg); in ks8851_probe_common()
1162 if (ks->gpio) { in ks8851_probe_common()
1164 gpiod_set_value_cansleep(ks->gpio, 0); in ks8851_probe_common()
1167 spin_lock_init(&ks->statelock); in ks8851_probe_common()
1169 INIT_WORK(&ks->rxctrl_work, ks8851_rxctrl_work); in ks8851_probe_common()
1174 ks->eeprom.data = ks; in ks8851_probe_common()
1175 ks->eeprom.width = PCI_EEPROM_WIDTH_93C46; in ks8851_probe_common()
1176 ks->eeprom.register_read = ks8851_eeprom_regread; in ks8851_probe_common()
1177 ks->eeprom.register_write = ks8851_eeprom_regwrite; in ks8851_probe_common()
1180 ks->mii.dev = netdev; in ks8851_probe_common()
1181 ks->mii.phy_id = 1; in ks8851_probe_common()
1182 ks->mii.phy_id_mask = 1; in ks8851_probe_common()
1183 ks->mii.reg_num_mask = 0xf; in ks8851_probe_common()
1184 ks->mii.mdio_read = ks8851_phy_read; in ks8851_probe_common()
1185 ks->mii.mdio_write = ks8851_phy_write; in ks8851_probe_common()
1194 ks->msg_enable = netif_msg_init(msg_en, NETIF_MSG_DRV | in ks8851_probe_common()
1198 skb_queue_head_init(&ks->txq); in ks8851_probe_common()
1200 netdev->ethtool_ops = &ks8851_ethtool_ops; in ks8851_probe_common()
1204 netif_carrier_off(ks->netdev); in ks8851_probe_common()
1205 netdev->if_port = IF_PORT_100BASET; in ks8851_probe_common()
1206 netdev->netdev_ops = &ks8851_netdev_ops; in ks8851_probe_common()
1211 /* simple check for a valid chip being connected to the bus */ in ks8851_probe_common()
1215 ret = -ENODEV; in ks8851_probe_common()
1220 ks->rc_ccr = ks8851_rdreg16(ks, KS_CCR); in ks8851_probe_common()
1223 ks8851_init_mac(ks, dev->of_node); in ks8851_probe_common()
1227 dev_err(dev, "failed to register network device\n"); in ks8851_probe_common()
1232 CIDER_REV_GET(cider), netdev->dev_addr, netdev->irq, in ks8851_probe_common()
1233 ks->rc_ccr & CCR_EEPROM ? "has" : "no"); in ks8851_probe_common()
1240 if (ks->gpio) in ks8851_probe_common()
1241 gpiod_set_value_cansleep(ks->gpio, 1); in ks8851_probe_common()
1242 regulator_disable(ks->vdd_reg); in ks8851_probe_common()
1244 regulator_disable(ks->vdd_io); in ks8851_probe_common()
1259 unregister_netdev(priv->netdev); in ks8851_remove_common()
1260 if (priv->gpio) in ks8851_remove_common()
1261 gpiod_set_value_cansleep(priv->gpio, 1); in ks8851_remove_common()
1262 regulator_disable(priv->vdd_reg); in ks8851_remove_common()
1263 regulator_disable(priv->vdd_io); in ks8851_remove_common()
1267 MODULE_DESCRIPTION("KS8851 Network driver");