• Home
  • Raw
  • Download

Lines Matching +full:rx +full:- +full:ctrl

19 #include <linux/dma-mapping.h>
38 #include <mach/regs-switch.h>
39 #include <mach/regs-misc.h>
41 #include <mach/regs-irq.h>
56 * struct rx_ring_desc - Receive descriptor ring element
70 * struct tx_ring_desc - Transmit descriptor ring element
84 * struct ks8695_skbuff - sk_buff wrapper for rx/tx rings.
102 /*napi_weight have better more than rx DMA buffers*/
112 * enum ks8695_dtype - Device type
124 * struct ks8695_priv - Private data for the KS8695 Ethernet
130 * @napi : Add support NAPI for Rx
131 * @rx_irq_name: The textual name of the RX IRQ from the platform data
135 * @rx_irq: The IRQ number for the RX IRQ
150 * @rx_ring: The pointer in ring_base of the RX ring
152 * @rx_buffers: The sk_buff mappings for the RX ring
153 * @next_rx_desc_read: The next RX descriptor to read from on IRQ
154 * @rx_lock: A lock to protect Rx irq function
194 * ks8695_readreg - Read from a KS8695 ethernet register
201 return readl(ksp->io_regs + reg); in ks8695_readreg()
205 * ks8695_writereg - Write to a KS8695 ethernet register
213 writel(value, ksp->io_regs + reg); in ks8695_writereg()
219 * ks8695_port_type - Retrieve port-type as user-friendly string
228 switch (ksp->dtype) { in ks8695_port_type()
241 * ks8695_update_mac - Update the MAC registers in the device
251 struct net_device *ndev = ksp->ndev; in ks8695_update_mac()
254 maclow = ((ndev->dev_addr[2] << 24) | (ndev->dev_addr[3] << 16) | in ks8695_update_mac()
255 (ndev->dev_addr[4] << 8) | (ndev->dev_addr[5] << 0)); in ks8695_update_mac()
256 machigh = ((ndev->dev_addr[0] << 8) | (ndev->dev_addr[1] << 0)); in ks8695_update_mac()
264 * ks8695_refill_rxbuffers - Re-fill the RX buffer ring
267 * Iterates the RX ring of the device looking for empty slots.
275 /* Run around the RX ring, filling in any missing sk_buff's */ in ks8695_refill_rxbuffers()
279 if (!ksp->rx_buffers[buff_n].skb) { in ks8695_refill_rxbuffers()
281 netdev_alloc_skb(ksp->ndev, MAX_RXBUF_SIZE); in ks8695_refill_rxbuffers()
284 ksp->rx_buffers[buff_n].skb = skb; in ks8695_refill_rxbuffers()
292 mapping = dma_map_single(ksp->dev, skb->data, in ks8695_refill_rxbuffers()
295 if (unlikely(dma_mapping_error(ksp->dev, mapping))) { in ks8695_refill_rxbuffers()
298 ksp->rx_buffers[buff_n].skb = NULL; in ks8695_refill_rxbuffers()
301 ksp->rx_buffers[buff_n].dma_ptr = mapping; in ks8695_refill_rxbuffers()
302 ksp->rx_buffers[buff_n].length = MAX_RXBUF_SIZE; in ks8695_refill_rxbuffers()
305 ksp->rx_ring[buff_n].data_ptr = cpu_to_le32(mapping); in ks8695_refill_rxbuffers()
306 ksp->rx_ring[buff_n].length = in ks8695_refill_rxbuffers()
312 ksp->rx_ring[buff_n].status = cpu_to_le32(RDES_OWN); in ks8695_refill_rxbuffers()
321 * ks8695_init_partial_multicast - Init the mcast addr registers
326 * This routine is a helper for ks8695_set_multicast - it writes
327 * the additional-address registers in the KS8695 ethernet device
343 low = (ha->addr[2] << 24) | (ha->addr[3] << 16) | in ks8695_init_partial_multicast()
344 (ha->addr[4] << 8) | (ha->addr[5]); in ks8695_init_partial_multicast()
345 high = (ha->addr[0] << 8) | (ha->addr[1]); in ks8695_init_partial_multicast()
362 * ks8695_tx_irq - Transmit IRQ handler
378 if (ksp->tx_buffers[buff_n].skb && in ks8695_tx_irq()
379 !(ksp->tx_ring[buff_n].owner & cpu_to_le32(TDES_OWN))) { in ks8695_tx_irq()
383 ndev->stats.tx_packets++; in ks8695_tx_irq()
384 ndev->stats.tx_bytes += ksp->tx_buffers[buff_n].length; in ks8695_tx_irq()
387 ksp->tx_ring[buff_n].data_ptr = 0; in ks8695_tx_irq()
390 dma_unmap_single(ksp->dev, in ks8695_tx_irq()
391 ksp->tx_buffers[buff_n].dma_ptr, in ks8695_tx_irq()
392 ksp->tx_buffers[buff_n].length, in ks8695_tx_irq()
394 dev_kfree_skb_irq(ksp->tx_buffers[buff_n].skb); in ks8695_tx_irq()
395 ksp->tx_buffers[buff_n].skb = NULL; in ks8695_tx_irq()
396 ksp->tx_ring_used--; in ks8695_tx_irq()
406 * ks8695_get_rx_enable_bit - Get rx interrupt enable/status bit
416 * So, this Rx interrupt enable/status bit number is equal
417 * as Rx IRQ number.
421 return ksp->rx_irq; in ks8695_get_rx_enable_bit()
425 * ks8695_rx_irq - Receive IRQ handler
438 spin_lock(&ksp->rx_lock); in ks8695_rx_irq()
440 if (napi_schedule_prep(&ksp->napi)) { in ks8695_rx_irq()
443 /*disable rx interrupt*/ in ks8695_rx_irq()
446 __napi_schedule(&ksp->napi); in ks8695_rx_irq()
449 spin_unlock(&ksp->rx_lock); in ks8695_rx_irq()
454 * ks8695_rx - Receive packets called by NAPI poll method
460 struct net_device *ndev = ksp->ndev; in ks8695_rx()
467 buff_n = ksp->next_rx_desc_read; in ks8695_rx()
469 && ksp->rx_buffers[buff_n].skb in ks8695_rx()
470 && (!(ksp->rx_ring[buff_n].status & in ks8695_rx()
473 flags = le32_to_cpu(ksp->rx_ring[buff_n].status); in ks8695_rx()
490 ndev->stats.rx_errors++; in ks8695_rx()
492 ndev->stats.rx_length_errors++; in ks8695_rx()
494 ndev->stats.rx_length_errors++; in ks8695_rx()
496 ndev->stats.rx_crc_errors++; in ks8695_rx()
498 ndev->stats.rx_missed_errors++; in ks8695_rx()
504 pktlen -= 4; /* Drop the CRC */ in ks8695_rx()
507 skb = ksp->rx_buffers[buff_n].skb; in ks8695_rx()
510 ksp->rx_buffers[buff_n].skb = NULL; in ks8695_rx()
511 ksp->rx_ring[buff_n].data_ptr = 0; in ks8695_rx()
514 dma_unmap_single(ksp->dev, in ks8695_rx()
515 ksp->rx_buffers[buff_n].dma_ptr, in ks8695_rx()
516 ksp->rx_buffers[buff_n].length, in ks8695_rx()
521 skb->protocol = eth_type_trans(skb, ndev); in ks8695_rx()
522 napi_gro_receive(&ksp->napi, skb); in ks8695_rx()
525 ndev->stats.rx_packets++; in ks8695_rx()
526 ndev->stats.rx_bytes += pktlen; in ks8695_rx()
531 * re-use the skb in ks8695_rx()
534 ksp->rx_ring[buff_n].status = cpu_to_le32(RDES_OWN); in ks8695_rx()
540 /* And note which RX descriptor we last did */ in ks8695_rx()
541 ksp->next_rx_desc_read = buff_n; in ks8695_rx()
546 /* Kick the RX DMA engine, in case it became suspended */ in ks8695_rx()
554 * ks8695_poll - Receive packet by NAPI poll method
573 spin_lock_irqsave(&ksp->rx_lock, flags); in ks8695_poll()
574 /* enable rx interrupt */ in ks8695_poll()
576 spin_unlock_irqrestore(&ksp->rx_lock, flags); in ks8695_poll()
582 * ks8695_link_irq - Link change IRQ handler
594 u32 ctrl; in ks8695_link_irq() local
596 ctrl = readl(ksp->phyiface_regs + KS8695_WMC); in ks8695_link_irq()
597 if (ctrl & WMC_WLS) { in ks8695_link_irq()
600 dev_info(ksp->dev, in ks8695_link_irq()
601 "%s: Link is now up (10%sMbps/%s-duplex)\n", in ks8695_link_irq()
602 ndev->name, in ks8695_link_irq()
603 (ctrl & WMC_WSS) ? "0" : "", in ks8695_link_irq()
604 (ctrl & WMC_WDS) ? "Full" : "Half"); in ks8695_link_irq()
608 dev_info(ksp->dev, "%s: Link is now down.\n", in ks8695_link_irq()
609 ndev->name); in ks8695_link_irq()
619 * ks8695_reset - Reset a KS8695 ethernet interface
622 * Perform an engine reset of the interface and re-program it
631 while (reset_timeout--) { in ks8695_reset()
638 dev_crit(ksp->dev, in ks8695_reset()
648 /* RX: unicast and broadcast */ in ks8695_reset()
655 * ks8695_shutdown - Shut down a KS8695 ethernet interface
658 * This disables packet RX/TX, cleans up IRQs, drains the rings,
665 u32 ctrl; in ks8695_shutdown() local
669 ctrl = ks8695_readreg(ksp, KS8695_DTXC); in ks8695_shutdown()
670 ks8695_writereg(ksp, KS8695_DTXC, ctrl & ~DTXC_TE); in ks8695_shutdown()
673 ctrl = ks8695_readreg(ksp, KS8695_DRXC); in ks8695_shutdown()
674 ks8695_writereg(ksp, KS8695_DRXC, ctrl & ~DRXC_RE); in ks8695_shutdown()
677 free_irq(ksp->rx_irq, ksp->ndev); in ks8695_shutdown()
678 free_irq(ksp->tx_irq, ksp->ndev); in ks8695_shutdown()
679 if (ksp->link_irq != -1) in ks8695_shutdown()
680 free_irq(ksp->link_irq, ksp->ndev); in ks8695_shutdown()
684 if (ksp->tx_buffers[buff_n].skb) { in ks8695_shutdown()
686 ksp->tx_ring[buff_n].owner = 0; in ks8695_shutdown()
687 ksp->tx_ring[buff_n].status = 0; in ks8695_shutdown()
688 ksp->tx_ring[buff_n].data_ptr = 0; in ks8695_shutdown()
691 dma_unmap_single(ksp->dev, in ks8695_shutdown()
692 ksp->tx_buffers[buff_n].dma_ptr, in ks8695_shutdown()
693 ksp->tx_buffers[buff_n].length, in ks8695_shutdown()
695 dev_kfree_skb_irq(ksp->tx_buffers[buff_n].skb); in ks8695_shutdown()
696 ksp->tx_buffers[buff_n].skb = NULL; in ks8695_shutdown()
700 /* Purge the RX buffers */ in ks8695_shutdown()
702 if (ksp->rx_buffers[buff_n].skb) { in ks8695_shutdown()
703 /* Remove the SKB from the RX ring */ in ks8695_shutdown()
704 ksp->rx_ring[buff_n].status = 0; in ks8695_shutdown()
705 ksp->rx_ring[buff_n].data_ptr = 0; in ks8695_shutdown()
708 dma_unmap_single(ksp->dev, in ks8695_shutdown()
709 ksp->rx_buffers[buff_n].dma_ptr, in ks8695_shutdown()
710 ksp->rx_buffers[buff_n].length, in ks8695_shutdown()
712 dev_kfree_skb_irq(ksp->rx_buffers[buff_n].skb); in ks8695_shutdown()
713 ksp->rx_buffers[buff_n].skb = NULL; in ks8695_shutdown()
720 * ks8695_setup_irq - IRQ setup helper function
737 dev_err(&ndev->dev, "failure to request IRQ %d\n", irq); in ks8695_setup_irq()
745 * ks8695_init_net - Initialise a KS8695 ethernet interface
748 * This routine fills the RX ring, initialises the DMA engines,
749 * allocates the IRQs and then starts the packet TX and RX
756 u32 ctrl; in ks8695_init_net() local
761 ks8695_writereg(ksp, KS8695_RDLB, (u32) ksp->rx_ring_dma); in ks8695_init_net()
762 ks8695_writereg(ksp, KS8695_TDLB, (u32) ksp->tx_ring_dma); in ks8695_init_net()
765 ret = ks8695_setup_irq(ksp->rx_irq, ksp->rx_irq_name, in ks8695_init_net()
766 ks8695_rx_irq, ksp->ndev); in ks8695_init_net()
769 ret = ks8695_setup_irq(ksp->tx_irq, ksp->tx_irq_name, in ks8695_init_net()
770 ks8695_tx_irq, ksp->ndev); in ks8695_init_net()
773 if (ksp->link_irq != -1) { in ks8695_init_net()
774 ret = ks8695_setup_irq(ksp->link_irq, ksp->link_irq_name, in ks8695_init_net()
775 ks8695_link_irq, ksp->ndev); in ks8695_init_net()
781 ksp->next_rx_desc_read = 0; in ks8695_init_net()
782 ksp->tx_ring_next_slot = 0; in ks8695_init_net()
783 ksp->tx_ring_used = 0; in ks8695_init_net()
786 ctrl = ks8695_readreg(ksp, KS8695_DTXC); in ks8695_init_net()
788 ks8695_writereg(ksp, KS8695_DTXC, ctrl | DTXC_TE); in ks8695_init_net()
791 ctrl = ks8695_readreg(ksp, KS8695_DRXC); in ks8695_init_net()
793 ks8695_writereg(ksp, KS8695_DRXC, ctrl | DRXC_RE); in ks8695_init_net()
802 * ks8695_release_device - HW resource release for KS8695 e-net
805 * This unallocates io memory regions, dma-coherent regions etc
812 iounmap(ksp->io_regs); in ks8695_release_device()
813 if (ksp->phyiface_regs) in ks8695_release_device()
814 iounmap(ksp->phyiface_regs); in ks8695_release_device()
817 release_resource(ksp->regs_req); in ks8695_release_device()
818 kfree(ksp->regs_req); in ks8695_release_device()
819 if (ksp->phyiface_req) { in ks8695_release_device()
820 release_resource(ksp->phyiface_req); in ks8695_release_device()
821 kfree(ksp->phyiface_req); in ks8695_release_device()
825 dma_free_coherent(ksp->dev, RING_DMA_SIZE, in ks8695_release_device()
826 ksp->ring_base, ksp->ring_base_dma); in ks8695_release_device()
832 * ks8695_get_msglevel - Get the messages enabled for emission
840 return ksp->msg_enable; in ks8695_get_msglevel()
844 * ks8695_set_msglevel - Set the messages enabled for emission
853 ksp->msg_enable = value; in ks8695_set_msglevel()
857 * ks8695_wan_get_link_ksettings - Get device-specific settings.
866 u32 ctrl; in ks8695_wan_get_link_ksettings() local
875 cmd->base.port = PORT_MII; in ks8695_wan_get_link_ksettings()
877 cmd->base.phy_address = 0; in ks8695_wan_get_link_ksettings()
879 ctrl = readl(ksp->phyiface_regs + KS8695_WMC); in ks8695_wan_get_link_ksettings()
880 if ((ctrl & WMC_WAND) == 0) { in ks8695_wan_get_link_ksettings()
881 /* auto-negotiation is enabled */ in ks8695_wan_get_link_ksettings()
883 if (ctrl & WMC_WANA100F) in ks8695_wan_get_link_ksettings()
885 if (ctrl & WMC_WANA100H) in ks8695_wan_get_link_ksettings()
887 if (ctrl & WMC_WANA10F) in ks8695_wan_get_link_ksettings()
889 if (ctrl & WMC_WANA10H) in ks8695_wan_get_link_ksettings()
891 if (ctrl & WMC_WANAP) in ks8695_wan_get_link_ksettings()
893 cmd->base.autoneg = AUTONEG_ENABLE; in ks8695_wan_get_link_ksettings()
895 cmd->base.speed = (ctrl & WMC_WSS) ? SPEED_100 : SPEED_10; in ks8695_wan_get_link_ksettings()
896 cmd->base.duplex = (ctrl & WMC_WDS) ? in ks8695_wan_get_link_ksettings()
899 /* auto-negotiation is disabled */ in ks8695_wan_get_link_ksettings()
900 cmd->base.autoneg = AUTONEG_DISABLE; in ks8695_wan_get_link_ksettings()
902 cmd->base.speed = (ctrl & WMC_WANF100) ? in ks8695_wan_get_link_ksettings()
904 cmd->base.duplex = (ctrl & WMC_WANFF) ? in ks8695_wan_get_link_ksettings()
908 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, in ks8695_wan_get_link_ksettings()
910 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, in ks8695_wan_get_link_ksettings()
917 * ks8695_wan_set_link_ksettings - Set device-specific settings.
926 u32 ctrl; in ks8695_wan_set_link_ksettings() local
930 cmd->link_modes.advertising); in ks8695_wan_set_link_ksettings()
932 if ((cmd->base.speed != SPEED_10) && (cmd->base.speed != SPEED_100)) in ks8695_wan_set_link_ksettings()
933 return -EINVAL; in ks8695_wan_set_link_ksettings()
934 if ((cmd->base.duplex != DUPLEX_HALF) && in ks8695_wan_set_link_ksettings()
935 (cmd->base.duplex != DUPLEX_FULL)) in ks8695_wan_set_link_ksettings()
936 return -EINVAL; in ks8695_wan_set_link_ksettings()
937 if (cmd->base.port != PORT_MII) in ks8695_wan_set_link_ksettings()
938 return -EINVAL; in ks8695_wan_set_link_ksettings()
939 if ((cmd->base.autoneg != AUTONEG_DISABLE) && in ks8695_wan_set_link_ksettings()
940 (cmd->base.autoneg != AUTONEG_ENABLE)) in ks8695_wan_set_link_ksettings()
941 return -EINVAL; in ks8695_wan_set_link_ksettings()
943 if (cmd->base.autoneg == AUTONEG_ENABLE) { in ks8695_wan_set_link_ksettings()
948 return -EINVAL; in ks8695_wan_set_link_ksettings()
950 ctrl = readl(ksp->phyiface_regs + KS8695_WMC); in ks8695_wan_set_link_ksettings()
952 ctrl &= ~(WMC_WAND | WMC_WANA100F | WMC_WANA100H | in ks8695_wan_set_link_ksettings()
955 ctrl |= WMC_WANA100F; in ks8695_wan_set_link_ksettings()
957 ctrl |= WMC_WANA100H; in ks8695_wan_set_link_ksettings()
959 ctrl |= WMC_WANA10F; in ks8695_wan_set_link_ksettings()
961 ctrl |= WMC_WANA10H; in ks8695_wan_set_link_ksettings()
963 /* force a re-negotiation */ in ks8695_wan_set_link_ksettings()
964 ctrl |= WMC_WANR; in ks8695_wan_set_link_ksettings()
965 writel(ctrl, ksp->phyiface_regs + KS8695_WMC); in ks8695_wan_set_link_ksettings()
967 ctrl = readl(ksp->phyiface_regs + KS8695_WMC); in ks8695_wan_set_link_ksettings()
969 /* disable auto-negotiation */ in ks8695_wan_set_link_ksettings()
970 ctrl |= WMC_WAND; in ks8695_wan_set_link_ksettings()
971 ctrl &= ~(WMC_WANF100 | WMC_WANFF); in ks8695_wan_set_link_ksettings()
973 if (cmd->base.speed == SPEED_100) in ks8695_wan_set_link_ksettings()
974 ctrl |= WMC_WANF100; in ks8695_wan_set_link_ksettings()
975 if (cmd->base.duplex == DUPLEX_FULL) in ks8695_wan_set_link_ksettings()
976 ctrl |= WMC_WANFF; in ks8695_wan_set_link_ksettings()
978 writel(ctrl, ksp->phyiface_regs + KS8695_WMC); in ks8695_wan_set_link_ksettings()
985 * ks8695_wan_nwayreset - Restart the autonegotiation on the port.
992 u32 ctrl; in ks8695_wan_nwayreset() local
994 ctrl = readl(ksp->phyiface_regs + KS8695_WMC); in ks8695_wan_nwayreset()
996 if ((ctrl & WMC_WAND) == 0) in ks8695_wan_nwayreset()
997 writel(ctrl | WMC_WANR, in ks8695_wan_nwayreset()
998 ksp->phyiface_regs + KS8695_WMC); in ks8695_wan_nwayreset()
1000 /* auto-negotiation not enabled */ in ks8695_wan_nwayreset()
1001 return -EINVAL; in ks8695_wan_nwayreset()
1007 * ks8695_wan_get_pause - Retrieve network pause/flow-control advertising
1015 u32 ctrl; in ks8695_wan_get_pause() local
1017 ctrl = readl(ksp->phyiface_regs + KS8695_WMC); in ks8695_wan_get_pause()
1020 param->autoneg = (ctrl & WMC_WANAP); in ks8695_wan_get_pause()
1022 /* current Rx Flow-control */ in ks8695_wan_get_pause()
1023 ctrl = ks8695_readreg(ksp, KS8695_DRXC); in ks8695_wan_get_pause()
1024 param->rx_pause = (ctrl & DRXC_RFCE); in ks8695_wan_get_pause()
1026 /* current Tx Flow-control */ in ks8695_wan_get_pause()
1027 ctrl = ks8695_readreg(ksp, KS8695_DTXC); in ks8695_wan_get_pause()
1028 param->tx_pause = (ctrl & DTXC_TFCE); in ks8695_wan_get_pause()
1032 * ks8695_get_drvinfo - Retrieve driver information
1039 strlcpy(info->driver, MODULENAME, sizeof(info->driver)); in ks8695_get_drvinfo()
1040 strlcpy(info->version, MODULEVERSION, sizeof(info->version)); in ks8695_get_drvinfo()
1041 strlcpy(info->bus_info, dev_name(ndev->dev.parent), in ks8695_get_drvinfo()
1042 sizeof(info->bus_info)); in ks8695_get_drvinfo()
1065 * ks8695_set_mac - Update MAC in net dev and HW
1075 if (!is_valid_ether_addr(address->sa_data)) in ks8695_set_mac()
1076 return -EADDRNOTAVAIL; in ks8695_set_mac()
1078 memcpy(ndev->dev_addr, address->sa_data, ndev->addr_len); in ks8695_set_mac()
1082 dev_dbg(ksp->dev, "%s: Updated MAC address to %pM\n", in ks8695_set_mac()
1083 ndev->name, ndev->dev_addr); in ks8695_set_mac()
1089 * ks8695_set_multicast - Set up the multicast behaviour of the interface
1099 u32 ctrl; in ks8695_set_multicast() local
1101 ctrl = ks8695_readreg(ksp, KS8695_DRXC); in ks8695_set_multicast()
1103 if (ndev->flags & IFF_PROMISC) { in ks8695_set_multicast()
1105 ctrl |= DRXC_RA; in ks8695_set_multicast()
1106 } else if (ndev->flags & ~IFF_PROMISC) { in ks8695_set_multicast()
1108 ctrl &= ~DRXC_RA; in ks8695_set_multicast()
1111 if (ndev->flags & IFF_ALLMULTI) { in ks8695_set_multicast()
1113 ctrl |= DRXC_RM; in ks8695_set_multicast()
1118 ctrl |= DRXC_RM; in ks8695_set_multicast()
1121 ctrl &= ~DRXC_RM; in ks8695_set_multicast()
1125 ks8695_writereg(ksp, KS8695_DRXC, ctrl); in ks8695_set_multicast()
1129 * ks8695_timeout - Handle a network tx/rx timeout.
1159 * ks8695_start_xmit - Start a packet transmission
1174 spin_lock_irq(&ksp->txq_lock); in ks8695_start_xmit()
1176 if (ksp->tx_ring_used == MAX_TX_DESC) { in ks8695_start_xmit()
1178 spin_unlock_irq(&ksp->txq_lock); in ks8695_start_xmit()
1182 buff_n = ksp->tx_ring_next_slot; in ks8695_start_xmit()
1184 BUG_ON(ksp->tx_buffers[buff_n].skb); in ks8695_start_xmit()
1186 dmap = dma_map_single(ksp->dev, skb->data, skb->len, DMA_TO_DEVICE); in ks8695_start_xmit()
1187 if (unlikely(dma_mapping_error(ksp->dev, dmap))) { in ks8695_start_xmit()
1189 spin_unlock_irq(&ksp->txq_lock); in ks8695_start_xmit()
1190 dev_dbg(ksp->dev, "%s: Could not map DMA memory for "\ in ks8695_start_xmit()
1191 "transmission, trying later\n", ndev->name); in ks8695_start_xmit()
1195 ksp->tx_buffers[buff_n].dma_ptr = dmap; in ks8695_start_xmit()
1197 ksp->tx_buffers[buff_n].skb = skb; in ks8695_start_xmit()
1198 ksp->tx_buffers[buff_n].length = skb->len; in ks8695_start_xmit()
1201 ksp->tx_ring[buff_n].data_ptr = in ks8695_start_xmit()
1202 cpu_to_le32(ksp->tx_buffers[buff_n].dma_ptr); in ks8695_start_xmit()
1203 ksp->tx_ring[buff_n].status = in ks8695_start_xmit()
1205 (skb->len & TDES_TBS)); in ks8695_start_xmit()
1210 ksp->tx_ring[buff_n].owner = cpu_to_le32(TDES_OWN); in ks8695_start_xmit()
1212 if (++ksp->tx_ring_used == MAX_TX_DESC) in ks8695_start_xmit()
1219 ksp->tx_ring_next_slot = (buff_n + 1) & MAX_TX_DESC_MASK; in ks8695_start_xmit()
1221 spin_unlock_irq(&ksp->txq_lock); in ks8695_start_xmit()
1226 * ks8695_stop - Stop (shutdown) a KS8695 ethernet interface
1238 napi_disable(&ksp->napi); in ks8695_stop()
1246 * ks8695_open - Open (bring up) a KS8695 ethernet interface
1249 * This resets, configures the MAC, initialises the RX ring and
1269 napi_enable(&ksp->napi); in ks8695_open()
1278 * ks8695_init_switch - Init LAN switch to known good defaults.
1281 * This initialises the LAN switch in the KS8695 to a known-good
1287 u32 ctrl; in ks8695_init_switch() local
1290 ctrl = 0x40819e00; in ks8695_init_switch()
1293 ctrl &= ~(SEC0_LLED1S | SEC0_LLED0S); in ks8695_init_switch()
1294 ctrl |= (LLED0S_LINK | LLED1S_LINK_ACTIVITY); in ks8695_init_switch()
1297 ctrl |= SEC0_ENABLE; in ks8695_init_switch()
1299 writel(ctrl, ksp->phyiface_regs + KS8695_SEC0); in ks8695_init_switch()
1302 writel(0x9400100, ksp->phyiface_regs + KS8695_SEC1); in ks8695_init_switch()
1306 * ks8695_init_wan_phy - Initialise the WAN PHY to sensible defaults
1315 u32 ctrl; in ks8695_init_wan_phy() local
1317 /* Support auto-negotiation */ in ks8695_init_wan_phy()
1318 ctrl = (WMC_WANAP | WMC_WANA100F | WMC_WANA100H | in ks8695_init_wan_phy()
1322 ctrl |= (WLED0S_ACTIVITY | WLED1S_LINK); in ks8695_init_wan_phy()
1324 /* Restart Auto-negotiation */ in ks8695_init_wan_phy()
1325 ctrl |= WMC_WANR; in ks8695_init_wan_phy()
1327 writel(ctrl, ksp->phyiface_regs + KS8695_WMC); in ks8695_init_wan_phy()
1329 writel(0, ksp->phyiface_regs + KS8695_WPPM); in ks8695_init_wan_phy()
1330 writel(0, ksp->phyiface_regs + KS8695_PPS); in ks8695_init_wan_phy()
1344 * ks8695_probe - Probe and initialise a KS8695 ethernet interface
1350 * registers and two IORESOURCE_IRQ for the RX and TX IRQs
1371 return -ENOMEM; in ks8695_probe()
1373 SET_NETDEV_DEV(ndev, &pdev->dev); in ks8695_probe()
1375 dev_dbg(&pdev->dev, "ks8695_probe() called\n"); in ks8695_probe()
1380 ksp->dev = &pdev->dev; in ks8695_probe()
1381 ksp->ndev = ndev; in ks8695_probe()
1382 ksp->msg_enable = NETIF_MSG_LINK; in ks8695_probe()
1393 dev_err(ksp->dev, "insufficient resources\n"); in ks8695_probe()
1394 ret = -ENOENT; in ks8695_probe()
1398 ksp->regs_req = request_mem_region(regs_res->start, in ks8695_probe()
1400 pdev->name); in ks8695_probe()
1402 if (!ksp->regs_req) { in ks8695_probe()
1403 dev_err(ksp->dev, "cannot claim register space\n"); in ks8695_probe()
1404 ret = -EIO; in ks8695_probe()
1408 ksp->io_regs = ioremap(regs_res->start, resource_size(regs_res)); in ks8695_probe()
1410 if (!ksp->io_regs) { in ks8695_probe()
1411 dev_err(ksp->dev, "failed to ioremap registers\n"); in ks8695_probe()
1412 ret = -EINVAL; in ks8695_probe()
1417 ksp->phyiface_req = in ks8695_probe()
1418 request_mem_region(phyiface_res->start, in ks8695_probe()
1420 phyiface_res->name); in ks8695_probe()
1422 if (!ksp->phyiface_req) { in ks8695_probe()
1423 dev_err(ksp->dev, in ks8695_probe()
1425 ret = -EIO; in ks8695_probe()
1429 ksp->phyiface_regs = ioremap(phyiface_res->start, in ks8695_probe()
1432 if (!ksp->phyiface_regs) { in ks8695_probe()
1433 dev_err(ksp->dev, in ks8695_probe()
1435 ret = -EINVAL; in ks8695_probe()
1440 ksp->rx_irq = rxirq_res->start; in ks8695_probe()
1441 ksp->rx_irq_name = rxirq_res->name ? rxirq_res->name : "Ethernet RX"; in ks8695_probe()
1442 ksp->tx_irq = txirq_res->start; in ks8695_probe()
1443 ksp->tx_irq_name = txirq_res->name ? txirq_res->name : "Ethernet TX"; in ks8695_probe()
1444 ksp->link_irq = (linkirq_res ? linkirq_res->start : -1); in ks8695_probe()
1445 ksp->link_irq_name = (linkirq_res && linkirq_res->name) ? in ks8695_probe()
1446 linkirq_res->name : "Ethernet Link"; in ks8695_probe()
1449 ndev->netdev_ops = &ks8695_netdev_ops; in ks8695_probe()
1450 ndev->watchdog_timeo = msecs_to_jiffies(watchdog); in ks8695_probe()
1452 netif_napi_add(ndev, &ksp->napi, ks8695_poll, NAPI_WEIGHT); in ks8695_probe()
1460 ndev->dev_addr[0] = (machigh >> 8) & 0xFF; in ks8695_probe()
1461 ndev->dev_addr[1] = machigh & 0xFF; in ks8695_probe()
1462 ndev->dev_addr[2] = (maclow >> 24) & 0xFF; in ks8695_probe()
1463 ndev->dev_addr[3] = (maclow >> 16) & 0xFF; in ks8695_probe()
1464 ndev->dev_addr[4] = (maclow >> 8) & 0xFF; in ks8695_probe()
1465 ndev->dev_addr[5] = maclow & 0xFF; in ks8695_probe()
1467 if (!is_valid_ether_addr(ndev->dev_addr)) in ks8695_probe()
1470 /* In order to be efficient memory-wise, we allocate both in ks8695_probe()
1473 ksp->ring_base = dma_alloc_coherent(&pdev->dev, RING_DMA_SIZE, in ks8695_probe()
1474 &ksp->ring_base_dma, GFP_KERNEL); in ks8695_probe()
1475 if (!ksp->ring_base) { in ks8695_probe()
1476 ret = -ENOMEM; in ks8695_probe()
1481 ksp->tx_ring = ksp->ring_base; in ks8695_probe()
1482 ksp->tx_ring_dma = ksp->ring_base_dma; in ks8695_probe()
1485 spin_lock_init(&ksp->txq_lock); in ks8695_probe()
1486 spin_lock_init(&ksp->rx_lock); in ks8695_probe()
1488 /* Specify the RX DMA ring buffer */ in ks8695_probe()
1489 ksp->rx_ring = ksp->ring_base + TX_RING_DMA_SIZE; in ks8695_probe()
1490 ksp->rx_ring_dma = ksp->ring_base_dma + TX_RING_DMA_SIZE; in ks8695_probe()
1493 memset(ksp->tx_ring, 0, TX_RING_DMA_SIZE); in ks8695_probe()
1494 memset(ksp->rx_ring, 0, RX_RING_DMA_SIZE); in ks8695_probe()
1498 ksp->tx_ring[buff_n].next_desc = in ks8695_probe()
1499 cpu_to_le32(ksp->tx_ring_dma + in ks8695_probe()
1505 ksp->rx_ring[buff_n].next_desc = in ks8695_probe()
1506 cpu_to_le32(ksp->rx_ring_dma + in ks8695_probe()
1512 if (ksp->phyiface_regs && ksp->link_irq == -1) { in ks8695_probe()
1514 ksp->dtype = KS8695_DTYPE_LAN; in ks8695_probe()
1515 ndev->ethtool_ops = &ks8695_ethtool_ops; in ks8695_probe()
1516 } else if (ksp->phyiface_regs && ksp->link_irq != -1) { in ks8695_probe()
1518 ksp->dtype = KS8695_DTYPE_WAN; in ks8695_probe()
1519 ndev->ethtool_ops = &ks8695_wan_ethtool_ops; in ks8695_probe()
1522 ksp->dtype = KS8695_DTYPE_HPNA; in ks8695_probe()
1523 ndev->ethtool_ops = &ks8695_ethtool_ops; in ks8695_probe()
1532 dev_warn(ksp->dev, "%s: Invalid ethernet MAC address. Please set using ip\n", in ks8695_probe()
1533 ndev->name); in ks8695_probe()
1534 dev_info(ksp->dev, "ks8695 ethernet (%s) MAC: %pM\n", in ks8695_probe()
1535 ks8695_port_type(ksp), ndev->dev_addr); in ks8695_probe()
1538 dev_err(ksp->dev, "ks8695net: failed to register netdev.\n"); in ks8695_probe()
1554 * ks8695_drv_suspend - Suspend a KS8695 ethernet platform device.
1566 ksp->in_suspend = 1; in ks8695_drv_suspend()
1577 * ks8695_drv_resume - Resume a KS8695 ethernet platform device.
1580 * This routine re-initialises and re-attaches a KS8695 ethernet
1596 ksp->in_suspend = 0; in ks8695_drv_resume()
1602 * ks8695_drv_remove - Remove a KS8695 net device on driver unload.
1613 netif_napi_del(&ksp->napi); in ks8695_drv_remove()
1619 dev_dbg(&pdev->dev, "released and freed device\n"); in ks8695_drv_remove()