• Home
  • Raw
  • Download

Lines Matching full:ks

30  * @ks: The chip state
35 static void ks8851_lock(struct ks8851_net *ks, unsigned long *flags) in ks8851_lock() argument
37 ks->lock(ks, flags); in ks8851_lock()
42 * @ks: The chip state
47 static void ks8851_unlock(struct ks8851_net *ks, unsigned long *flags) in ks8851_unlock() argument
49 ks->unlock(ks, flags); in ks8851_unlock()
54 * @ks: The chip state
60 static void ks8851_wrreg16(struct ks8851_net *ks, unsigned int reg, in ks8851_wrreg16() argument
63 ks->wrreg16(ks, reg, val); in ks8851_wrreg16()
68 * @ks: The chip information
73 static unsigned int ks8851_rdreg16(struct ks8851_net *ks, in ks8851_rdreg16() argument
76 return ks->rdreg16(ks, reg); in ks8851_rdreg16()
81 * @ks: The device state.
92 static void ks8851_soft_reset(struct ks8851_net *ks, unsigned op) in ks8851_soft_reset() argument
94 ks8851_wrreg16(ks, KS_GRR, op); in ks8851_soft_reset()
96 ks8851_wrreg16(ks, KS_GRR, 0); in ks8851_soft_reset()
102 * @ks: The device state
107 static void ks8851_set_powermode(struct ks8851_net *ks, unsigned pwrmode) in ks8851_set_powermode() argument
111 netif_dbg(ks, hw, ks->netdev, "setting power mode %d\n", pwrmode); in ks8851_set_powermode()
113 pmecr = ks8851_rdreg16(ks, KS_PMECR); in ks8851_set_powermode()
117 ks8851_wrreg16(ks, KS_PMECR, pmecr); in ks8851_set_powermode()
131 struct ks8851_net *ks = netdev_priv(dev); in ks8851_write_mac_addr() local
136 ks8851_lock(ks, &flags); in ks8851_write_mac_addr()
142 ks8851_set_powermode(ks, PMECR_PM_NORMAL); in ks8851_write_mac_addr()
146 ks8851_wrreg16(ks, KS_MAR(i), val); in ks8851_write_mac_addr()
150 ks8851_set_powermode(ks, PMECR_PM_SOFTDOWN); in ks8851_write_mac_addr()
152 ks8851_unlock(ks, &flags); in ks8851_write_mac_addr()
165 struct ks8851_net *ks = netdev_priv(dev); in ks8851_read_mac_addr() local
171 ks8851_lock(ks, &flags); in ks8851_read_mac_addr()
174 reg = ks8851_rdreg16(ks, KS_MAR(i)); in ks8851_read_mac_addr()
180 ks8851_unlock(ks, &flags); in ks8851_read_mac_addr()
185 * @ks: The device structure
194 static void ks8851_init_mac(struct ks8851_net *ks, struct device_node *np) in ks8851_init_mac() argument
196 struct net_device *dev = ks->netdev; in ks8851_init_mac()
205 if (ks->rc_ccr & CCR_EEPROM) { in ks8851_init_mac()
210 netdev_err(ks->netdev, "invalid mac address read %pM\n", in ks8851_init_mac()
220 * @ks: The device state
225 static void ks8851_dbg_dumpkkt(struct ks8851_net *ks, u8 *rxpkt) in ks8851_dbg_dumpkkt() argument
227 netdev_dbg(ks->netdev, in ks8851_dbg_dumpkkt()
236 * @ks: The device state.
239 static void ks8851_rx_skb(struct ks8851_net *ks, struct sk_buff *skb) in ks8851_rx_skb() argument
241 ks->rx_skb(ks, skb); in ks8851_rx_skb()
246 * @ks: The device information.
252 static void ks8851_rx_pkts(struct ks8851_net *ks) in ks8851_rx_pkts() argument
260 rxfc = (ks8851_rdreg16(ks, KS_RXFCTR) >> 8) & 0xff; in ks8851_rx_pkts()
262 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
276 rxstat = ks8851_rdreg16(ks, KS_RXFHSR); in ks8851_rx_pkts()
277 rxlen = ks8851_rdreg16(ks, KS_RXFHBCR) & RXFHBCR_CNT_MASK; in ks8851_rx_pkts()
279 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
285 ks8851_wrreg16(ks, KS_RXFDPR, RXFDPR_RXFPAI | 0x00); in ks8851_rx_pkts()
288 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA); in ks8851_rx_pkts()
295 skb = netdev_alloc_skb_ip_align(ks->netdev, rxalign); in ks8851_rx_pkts()
306 ks->rdfifo(ks, rxpkt, rxalign + 8); in ks8851_rx_pkts()
308 if (netif_msg_pktdata(ks)) in ks8851_rx_pkts()
309 ks8851_dbg_dumpkkt(ks, rxpkt); in ks8851_rx_pkts()
311 skb->protocol = eth_type_trans(skb, ks->netdev); in ks8851_rx_pkts()
312 ks8851_rx_skb(ks, skb); 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()
338 struct ks8851_net *ks = _ks; in ks8851_irq() local
343 ks8851_lock(ks, &flags); in ks8851_irq()
345 status = ks8851_rdreg16(ks, KS_ISR); in ks8851_irq()
347 netif_dbg(ks, intr, ks->netdev, in ks8851_irq()
354 u16 pmecr = ks8851_rdreg16(ks, KS_PMECR); in ks8851_irq()
356 ks8851_wrreg16(ks, KS_PMECR, pmecr | PMECR_WKEVT_LINK); in ks8851_irq()
365 unsigned short tx_space = ks8851_rdreg16(ks, KS_TXMIR); 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()
387 ks8851_wrreg16(ks, KS_ISR, handled); in ks8851_irq()
395 ks8851_rx_pkts(ks); 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()
414 ks8851_unlock(ks, &flags); in ks8851_irq()
417 mii_check_link(&ks->mii); in ks8851_irq()
424 * @ks: The device state
426 static void ks8851_flush_tx_work(struct ks8851_net *ks) in ks8851_flush_tx_work() argument
428 if (ks->flush_tx_work) in ks8851_flush_tx_work()
429 ks->flush_tx_work(ks); in ks8851_flush_tx_work()
441 struct ks8851_net *ks = netdev_priv(dev); in ks8851_net_open() local
447 dev->name, ks); in ks8851_net_open()
455 ks8851_lock(ks, &flags); in ks8851_net_open()
457 netif_dbg(ks, ifup, ks->netdev, "opening\n"); in ks8851_net_open()
460 ks8851_set_powermode(ks, PMECR_PM_NORMAL); in ks8851_net_open()
464 ks8851_soft_reset(ks, GRR_QMU); in ks8851_net_open()
468 ks8851_wrreg16(ks, KS_TXCR, (TXCR_TXE | /* enable transmit process */ in ks8851_net_open()
474 ks8851_wrreg16(ks, KS_TXFDPR, TXFDPR_TXFPAI); in ks8851_net_open()
478 ks8851_wrreg16(ks, KS_RXCR1, (RXCR1_RXPAFMA | /* from mac filter */ in ks8851_net_open()
485 ks8851_wrreg16(ks, KS_RXCR2, RXCR2_SRDBL_FRAME); in ks8851_net_open()
488 ks8851_wrreg16(ks, KS_RXDTTR, 1000); /* 1ms after first frame to IRQ */ in ks8851_net_open()
489 ks8851_wrreg16(ks, KS_RXDBCTR, 4096); /* >4Kbytes in buffer to IRQ */ in ks8851_net_open()
490 ks8851_wrreg16(ks, KS_RXFCTR, 10); /* 10 frames to IRQ */ in ks8851_net_open()
492 ks->rc_rxqcr = (RXQCR_RXFCTE | /* IRQ on frame count 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()
507 ks8851_unlock(ks, &flags); in ks8851_net_open()
508 mii_check_link(&ks->mii); in ks8851_net_open()
522 struct ks8851_net *ks = netdev_priv(dev); in ks8851_net_stop() local
525 netif_info(ks, ifdown, dev, "shutting down\n"); in ks8851_net_stop()
529 ks8851_lock(ks, &flags); in ks8851_net_stop()
531 ks8851_wrreg16(ks, KS_IER, 0x0000); in ks8851_net_stop()
532 ks8851_wrreg16(ks, KS_ISR, 0xffff); in ks8851_net_stop()
533 ks8851_unlock(ks, &flags); in ks8851_net_stop()
536 ks8851_flush_tx_work(ks); in ks8851_net_stop()
537 flush_work(&ks->rxctrl_work); in ks8851_net_stop()
539 ks8851_lock(ks, &flags); in ks8851_net_stop()
541 ks8851_wrreg16(ks, KS_RXCR1, 0x0000); in ks8851_net_stop()
544 ks8851_wrreg16(ks, KS_TXCR, 0x0000); in ks8851_net_stop()
547 ks8851_set_powermode(ks, PMECR_PM_SOFTDOWN); in ks8851_net_stop()
548 ks8851_unlock(ks, &flags); 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()
581 struct ks8851_net *ks = netdev_priv(dev); in ks8851_start_xmit() local
583 return ks->start_xmit(skb, dev); in ks8851_start_xmit()
601 struct ks8851_net *ks = container_of(work, struct ks8851_net, rxctrl_work); in ks8851_rxctrl_work() local
604 ks8851_lock(ks, &flags); in ks8851_rxctrl_work()
607 ks8851_wrreg16(ks, KS_RXCR1, 0x00); in ks8851_rxctrl_work()
609 ks8851_unlock(ks, &flags); in ks8851_rxctrl_work()
614 struct ks8851_net *ks = netdev_priv(dev); in ks8851_set_rx_mode() local
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()
682 struct ks8851_net *ks = netdev_priv(dev); in ks8851_net_ioctl() local
687 return generic_mii_ioctl(&ks->mii, if_mii(req), cmd, NULL); in ks8851_net_ioctl()
712 struct ks8851_net *ks = netdev_priv(dev); in ks8851_get_msglevel() local
713 return ks->msg_enable; in ks8851_get_msglevel()
718 struct ks8851_net *ks = netdev_priv(dev); in ks8851_set_msglevel() local
719 ks->msg_enable = to; in ks8851_set_msglevel()
725 struct ks8851_net *ks = netdev_priv(dev); in ks8851_get_link_ksettings() local
727 mii_ethtool_get_link_ksettings(&ks->mii, cmd); in ks8851_get_link_ksettings()
735 struct ks8851_net *ks = netdev_priv(dev); in ks8851_set_link_ksettings() local
736 return mii_ethtool_set_link_ksettings(&ks->mii, cmd); in ks8851_set_link_ksettings()
741 struct ks8851_net *ks = netdev_priv(dev); in ks8851_get_link() local
742 return mii_link_ok(&ks->mii); in ks8851_get_link()
747 struct ks8851_net *ks = netdev_priv(dev); in ks8851_nway_reset() local
748 return mii_nway_restart(&ks->mii); in ks8851_nway_reset()
755 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regread() local
758 val = ks8851_rdreg16(ks, KS_EEPCR); in ks8851_eeprom_regread()
767 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regwrite() local
779 ks8851_wrreg16(ks, KS_EEPCR, val); in ks8851_eeprom_regwrite()
784 * @ks: The network device state.
789 static int ks8851_eeprom_claim(struct ks8851_net *ks) in ks8851_eeprom_claim() argument
792 ks8851_wrreg16(ks, KS_EEPCR, EEPCR_EESA | EEPCR_EECS); in ks8851_eeprom_claim()
798 * @ks: The device state
802 static void ks8851_eeprom_release(struct ks8851_net *ks) in ks8851_eeprom_release() argument
804 unsigned val = ks8851_rdreg16(ks, KS_EEPCR); in ks8851_eeprom_release()
806 ks8851_wrreg16(ks, KS_EEPCR, val & ~EEPCR_EESA); in ks8851_eeprom_release()
814 struct ks8851_net *ks = netdev_priv(dev); in ks8851_set_eeprom() local
827 if (!(ks->rc_ccr & CCR_EEPROM)) in ks8851_set_eeprom()
830 ks8851_lock(ks, &flags); in ks8851_set_eeprom()
832 ks8851_eeprom_claim(ks); 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()
852 ks8851_eeprom_release(ks); in ks8851_set_eeprom()
853 ks8851_unlock(ks, &flags); in ks8851_set_eeprom()
861 struct ks8851_net *ks = netdev_priv(dev); in ks8851_get_eeprom() local
870 if (!(ks->rc_ccr & CCR_EEPROM)) in ks8851_get_eeprom()
873 ks8851_lock(ks, &flags); in ks8851_get_eeprom()
875 ks8851_eeprom_claim(ks); in ks8851_get_eeprom()
879 eeprom_93cx6_multiread(&ks->eeprom, offset/2, (__le16 *)data, len/2); in ks8851_get_eeprom()
880 ks8851_eeprom_release(ks); in ks8851_get_eeprom()
881 ks8851_unlock(ks, &flags); in ks8851_get_eeprom()
888 struct ks8851_net *ks = netdev_priv(dev); in ks8851_get_eeprom_len() local
891 return ks->rc_ccr & CCR_EEPROM ? 128 : 0; in ks8851_get_eeprom_len()
939 struct ks8851_net *ks = netdev_priv(dev); in ks8851_phy_read_common() local
948 ks8851_lock(ks, &flags); in ks8851_phy_read_common()
949 result = ks8851_rdreg16(ks, ksreg); in ks8851_phy_read_common()
950 ks8851_unlock(ks, &flags); in ks8851_phy_read_common()
984 struct ks8851_net *ks = netdev_priv(dev); in ks8851_phy_write() local
990 ks8851_lock(ks, &flags); in ks8851_phy_write()
991 ks8851_wrreg16(ks, ksreg, value); in ks8851_phy_write()
992 ks8851_unlock(ks, &flags); in ks8851_phy_write()
998 struct ks8851_net *ks = bus->priv; in ks8851_mdio_read() local
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() local
1016 ks8851_phy_write(ks->netdev, phy_id, reg, val); in ks8851_mdio_write()
1022 * @ks: The device state
1026 static void ks8851_read_selftest(struct ks8851_net *ks) in ks8851_read_selftest() argument
1031 rd = ks8851_rdreg16(ks, KS_MBIR); in ks8851_read_selftest()
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()
1051 struct ks8851_net *ks = dev_get_drvdata(dev); in ks8851_suspend() local
1052 struct net_device *netdev = ks->netdev; in ks8851_suspend()
1065 struct ks8851_net *ks = dev_get_drvdata(dev); in ks8851_resume() local
1066 struct net_device *netdev = ks->netdev; in ks8851_resume()
1078 static int ks8851_register_mdiobus(struct ks8851_net *ks, struct device *dev) in ks8851_register_mdiobus() argument
1090 mii_bus->priv = ks; in ks8851_register_mdiobus()
1099 ks->mii_bus = mii_bus; in ks8851_register_mdiobus()
1108 static void ks8851_unregister_mdiobus(struct ks8851_net *ks) in ks8851_unregister_mdiobus() argument
1110 mdiobus_unregister(ks->mii_bus); in ks8851_unregister_mdiobus()
1111 mdiobus_free(ks->mii_bus); in ks8851_unregister_mdiobus()
1117 struct ks8851_net *ks = netdev_priv(netdev); in ks8851_probe_common() local
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()
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()
1189 ret = ks8851_register_mdiobus(ks, dev); 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()
1202 dev_set_drvdata(dev, ks); in ks8851_probe_common()
1204 netif_carrier_off(ks->netdev); in ks8851_probe_common()
1209 ks8851_soft_reset(ks, GRR_GSR); in ks8851_probe_common()
1212 cider = ks8851_rdreg16(ks, KS_CIDER); in ks8851_probe_common()
1220 ks->rc_ccr = ks8851_rdreg16(ks, KS_CCR); in ks8851_probe_common()
1222 ks8851_read_selftest(ks); in ks8851_probe_common()
1223 ks8851_init_mac(ks, dev->of_node); in ks8851_probe_common()
1233 ks->rc_ccr & CCR_EEPROM ? "has" : "no"); in ks8851_probe_common()
1238 ks8851_unregister_mdiobus(ks); 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()