Lines Matching refs:adapter
275 struct al_eth_adapter *adapter; in al_attach() local
298 adapter = device_get_softc(dev); in al_attach()
299 adapter->dev = dev; in al_attach()
300 adapter->board_type = ALPINE_INTEGRATED; in al_attach()
301 snprintf(adapter->name, AL_ETH_NAME_MAX_LEN, "%s", in al_attach()
303 AL_RX_LOCK_INIT(adapter); in al_attach()
305 g_adapters[g_adapters_count] = adapter; in al_attach()
308 adapter->udma_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, in al_attach()
310 if (adapter->udma_res == NULL) { in al_attach()
311 device_printf(adapter->dev, in al_attach()
316 adapter->udma_base = al_bus_dma_to_va(rman_get_bustag(adapter->udma_res), in al_attach()
317 rman_get_bushandle(adapter->udma_res)); in al_attach()
319 adapter->mac_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, in al_attach()
321 if (adapter->mac_res == NULL) { in al_attach()
322 device_printf(adapter->dev, in al_attach()
327 adapter->mac_base = al_bus_dma_to_va(rman_get_bustag(adapter->mac_res), in al_attach()
328 rman_get_bushandle(adapter->mac_res)); in al_attach()
331 adapter->ec_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &bar_ec, in al_attach()
333 if (adapter->ec_res == NULL) { in al_attach()
334 device_printf(adapter->dev, in al_attach()
339 adapter->ec_base = al_bus_dma_to_va(rman_get_bustag(adapter->ec_res), in al_attach()
340 rman_get_bushandle(adapter->ec_res)); in al_attach()
342 adapter->netdev = ifp = if_alloc(IFT_ETHER); in al_attach()
344 adapter->netdev->if_link_state = LINK_STATE_DOWN; in al_attach()
346 ifp->if_softc = adapter; in al_attach()
358 adapter->if_flags = ifp->if_flags; in al_attach()
368 adapter->id_number = g_adapters_count; in al_attach()
370 if (adapter->board_type == ALPINE_INTEGRATED) { in al_attach()
371 dev_id = pci_get_device(adapter->dev); in al_attach()
372 rev_id = pci_get_revid(adapter->dev); in al_attach()
374 al_eth_fpga_read_pci_config(adapter->internal_pcie_base, in al_attach()
376 al_eth_fpga_read_pci_config(adapter->internal_pcie_base, in al_attach()
380 adapter->dev_id = dev_id; in al_attach()
381 adapter->rev_id = rev_id; in al_attach()
384 adapter->tx_ring_count = AL_ETH_DEFAULT_TX_SW_DESCS; in al_attach()
385 adapter->tx_descs_count = AL_ETH_DEFAULT_TX_HW_DESCS; in al_attach()
386 adapter->rx_ring_count = AL_ETH_DEFAULT_RX_DESCS; in al_attach()
387 adapter->rx_descs_count = AL_ETH_DEFAULT_RX_DESCS; in al_attach()
389 adapter->num_tx_queues = AL_ETH_NUM_QUEUES; in al_attach()
390 adapter->num_rx_queues = AL_ETH_NUM_QUEUES; in al_attach()
392 adapter->small_copy_len = AL_ETH_DEFAULT_SMALL_PACKET_LEN; in al_attach()
393 adapter->link_poll_interval = AL_ETH_DEFAULT_LINK_POLL_INTERVAL; in al_attach()
394 adapter->max_rx_buff_alloc_size = AL_ETH_DEFAULT_MAX_RX_BUFF_ALLOC_SIZE; in al_attach()
396 al_eth_req_rx_buff_size(adapter, adapter->netdev->if_mtu); in al_attach()
398 adapter->link_config.force_1000_base_x = AL_ETH_DEFAULT_FORCE_1000_BASEX; in al_attach()
400 err = al_eth_board_params_init(adapter); in al_attach()
404 if (adapter->mac_mode == AL_ETH_MAC_MODE_10GbE_Serial) { in al_attach()
405 ifmedia_init(&adapter->media, IFM_IMASK, in al_attach()
407 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_LX, 0, NULL); in al_attach()
408 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10G_LR, 0, NULL); in al_attach()
409 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL); in al_attach()
410 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO); in al_attach()
413 al_eth_function_reset(adapter); in al_attach()
415 err = al_eth_hw_init_adapter(adapter); in al_attach()
419 al_eth_init_rings(adapter); in al_attach()
422 al_eth_lm_config(adapter); in al_attach()
423 mtx_init(&adapter->stats_mtx, "AlStatsMtx", NULL, MTX_DEF); in al_attach()
424 mtx_init(&adapter->wd_mtx, "AlWdMtx", NULL, MTX_DEF); in al_attach()
425 callout_init_mtx(&adapter->stats_callout, &adapter->stats_mtx, 0); in al_attach()
426 callout_init_mtx(&adapter->wd_callout, &adapter->wd_mtx, 0); in al_attach()
428 ether_ifattach(ifp, adapter->mac_addr); in al_attach()
431 if (adapter->mac_mode == AL_ETH_MAC_MODE_RGMII) { in al_attach()
432 al_eth_hw_init(adapter); in al_attach()
435 err = mii_attach(adapter->dev, &adapter->miibus, adapter->netdev, in al_attach()
439 device_printf(adapter->dev, "attaching PHYs failed\n"); in al_attach()
443 adapter->mii = device_get_softc(adapter->miibus); in al_attach()
449 bus_release_resource(dev, SYS_RES_MEMORY, bar_ec, adapter->ec_res); in al_attach()
451 bus_release_resource(dev, SYS_RES_MEMORY, bar_mac, adapter->mac_res); in al_attach()
453 bus_release_resource(dev, SYS_RES_MEMORY, bar_udma, adapter->udma_res); in al_attach()
461 struct al_eth_adapter *adapter; in al_detach() local
463 adapter = device_get_softc(dev); in al_detach()
464 ether_ifdetach(adapter->netdev); in al_detach()
466 mtx_destroy(&adapter->stats_mtx); in al_detach()
467 mtx_destroy(&adapter->wd_mtx); in al_detach()
469 al_eth_down(adapter); in al_detach()
471 bus_release_resource(dev, SYS_RES_IRQ, 0, adapter->irq_res); in al_detach()
472 bus_release_resource(dev, SYS_RES_MEMORY, 0, adapter->ec_res); in al_detach()
473 bus_release_resource(dev, SYS_RES_MEMORY, 0, adapter->mac_res); in al_detach()
474 bus_release_resource(dev, SYS_RES_MEMORY, 0, adapter->udma_res); in al_detach()
531 al_eth_serdes_init(struct al_eth_adapter *adapter) in al_eth_serdes_init() argument
535 adapter->serdes_init = false; in al_eth_serdes_init()
537 serdes_base = alpine_serdes_resource_get(adapter->serdes_grp); in al_eth_serdes_init()
539 device_printf(adapter->dev, "serdes_base get failed!\n"); in al_eth_serdes_init()
545 al_serdes_handle_grp_init(serdes_base, adapter->serdes_grp, in al_eth_serdes_init()
546 &adapter->serdes_obj); in al_eth_serdes_init()
548 adapter->serdes_init = true; in al_eth_serdes_init()
605 al_eth_mac_table_unicast_add(struct al_eth_adapter *adapter, in al_eth_mac_table_unicast_add() argument
610 memcpy(entry.addr, adapter->mac_addr, sizeof(adapter->mac_addr)); in al_eth_mac_table_unicast_add()
618 device_printf_dbg(adapter->dev, in al_eth_mac_table_unicast_add()
622 al_eth_fwd_mac_table_set(&adapter->hal_adapter, idx, &entry); in al_eth_mac_table_unicast_add()
626 al_eth_mac_table_all_multicast_add(struct al_eth_adapter *adapter, uint8_t idx, in al_eth_mac_table_all_multicast_add() argument
641 device_printf_dbg(adapter->dev, in al_eth_mac_table_all_multicast_add()
645 al_eth_fwd_mac_table_set(&adapter->hal_adapter, idx, &entry); in al_eth_mac_table_all_multicast_add()
649 al_eth_mac_table_broadcast_add(struct al_eth_adapter *adapter, in al_eth_mac_table_broadcast_add() argument
662 device_printf_dbg(adapter->dev, in al_eth_mac_table_broadcast_add()
666 al_eth_fwd_mac_table_set(&adapter->hal_adapter, idx, &entry); in al_eth_mac_table_broadcast_add()
670 al_eth_mac_table_promiscuous_set(struct al_eth_adapter *adapter, in al_eth_mac_table_promiscuous_set() argument
683 device_printf_dbg(adapter->dev, "%s: %s promiscuous mode\n", in al_eth_mac_table_promiscuous_set()
686 al_eth_fwd_mac_table_set(&adapter->hal_adapter, in al_eth_mac_table_promiscuous_set()
691 al_eth_set_thash_table_entry(struct al_eth_adapter *adapter, uint8_t idx, in al_eth_set_thash_table_entry() argument
701 al_eth_thash_table_set(&adapter->hal_adapter, idx, udma, queue); in al_eth_set_thash_table_entry()
706 al_eth_fsm_table_init(struct al_eth_adapter *adapter) in al_eth_fsm_table_init() argument
730 al_eth_fsm_table_set(&adapter->hal_adapter, i, val); in al_eth_fsm_table_init()
735 al_eth_mac_table_entry_clear(struct al_eth_adapter *adapter, in al_eth_mac_table_entry_clear() argument
740 device_printf_dbg(adapter->dev, "%s: clear entry %d\n", __func__, idx); in al_eth_mac_table_entry_clear()
742 al_eth_fwd_mac_table_set(&adapter->hal_adapter, idx, &entry); in al_eth_mac_table_entry_clear()
746 al_eth_hw_init_adapter(struct al_eth_adapter *adapter) in al_eth_hw_init_adapter() argument
748 struct al_eth_adapter_params *params = &adapter->eth_hal_params; in al_eth_hw_init_adapter()
752 params->rev_id = adapter->rev_id; in al_eth_hw_init_adapter()
755 params->udma_regs_base = adapter->udma_base; /* UDMA register base address */ in al_eth_hw_init_adapter()
756 params->ec_regs_base = adapter->ec_base; /* Ethernet controller registers base address */ in al_eth_hw_init_adapter()
757 params->mac_regs_base = adapter->mac_base; /* Ethernet MAC registers base address */ in al_eth_hw_init_adapter()
758 params->name = adapter->name; in al_eth_hw_init_adapter()
759 params->serdes_lane = adapter->serdes_lane; in al_eth_hw_init_adapter()
761 rc = al_eth_adapter_init(&adapter->hal_adapter, params); in al_eth_hw_init_adapter()
763 device_printf(adapter->dev, "%s failed at hal init!\n", in al_eth_hw_init_adapter()
766 if ((adapter->board_type == ALPINE_NIC) || in al_eth_hw_init_adapter()
767 (adapter->board_type == ALPINE_FPGA_NIC)) { in al_eth_hw_init_adapter()
779 al_udma_gen_tgtid_conf_set(adapter->udma_base, &conf); in al_eth_hw_init_adapter()
786 al_eth_lm_config(struct al_eth_adapter *adapter) in al_eth_lm_config() argument
790 params.adapter = &adapter->hal_adapter; in al_eth_lm_config()
791 params.serdes_obj = &adapter->serdes_obj; in al_eth_lm_config()
792 params.lane = adapter->serdes_lane; in al_eth_lm_config()
793 params.sfp_detection = adapter->sfp_detection_needed; in al_eth_lm_config()
794 if (adapter->sfp_detection_needed == true) { in al_eth_lm_config()
795 params.sfp_bus_id = adapter->i2c_adapter_id; in al_eth_lm_config()
799 if (adapter->sfp_detection_needed == false) { in al_eth_lm_config()
800 switch (adapter->mac_mode) { in al_eth_lm_config()
802 if ((adapter->lt_en != 0) && (adapter->an_en != 0)) in al_eth_lm_config()
816 params.link_training = adapter->lt_en; in al_eth_lm_config()
818 params.static_values = !adapter->dont_override_serdes; in al_eth_lm_config()
819 params.i2c_context = adapter; in al_eth_lm_config()
822 params.retimer_exist = adapter->retimer.exist; in al_eth_lm_config()
823 params.retimer_bus_id = adapter->retimer.bus_id; in al_eth_lm_config()
824 params.retimer_i2c_addr = adapter->retimer.i2c_addr; in al_eth_lm_config()
825 params.retimer_channel = adapter->retimer.channel; in al_eth_lm_config()
827 al_eth_lm_init(&adapter->lm_context, ¶ms); in al_eth_lm_config()
831 al_eth_board_params_init(struct al_eth_adapter *adapter) in al_eth_board_params_init() argument
834 if (adapter->board_type == ALPINE_NIC) { in al_eth_board_params_init()
835 adapter->mac_mode = AL_ETH_MAC_MODE_10GbE_Serial; in al_eth_board_params_init()
836 adapter->sfp_detection_needed = false; in al_eth_board_params_init()
837 adapter->phy_exist = false; in al_eth_board_params_init()
838 adapter->an_en = false; in al_eth_board_params_init()
839 adapter->lt_en = false; in al_eth_board_params_init()
840 adapter->ref_clk_freq = AL_ETH_REF_FREQ_375_MHZ; in al_eth_board_params_init()
841 adapter->mdio_freq = AL_ETH_DEFAULT_MDIO_FREQ_KHZ; in al_eth_board_params_init()
842 } else if (adapter->board_type == ALPINE_FPGA_NIC) { in al_eth_board_params_init()
843 adapter->mac_mode = AL_ETH_MAC_MODE_SGMII; in al_eth_board_params_init()
844 adapter->sfp_detection_needed = false; in al_eth_board_params_init()
845 adapter->phy_exist = false; in al_eth_board_params_init()
846 adapter->an_en = false; in al_eth_board_params_init()
847 adapter->lt_en = false; in al_eth_board_params_init()
848 adapter->ref_clk_freq = AL_ETH_REF_FREQ_375_MHZ; in al_eth_board_params_init()
849 adapter->mdio_freq = AL_ETH_DEFAULT_MDIO_FREQ_KHZ; in al_eth_board_params_init()
854 adapter->auto_speed = false; in al_eth_board_params_init()
856 rc = al_eth_board_params_get(adapter->mac_base, ¶ms); in al_eth_board_params_init()
858 device_printf(adapter->dev, in al_eth_board_params_init()
863 adapter->phy_exist = params.phy_exist == TRUE; in al_eth_board_params_init()
864 adapter->phy_addr = params.phy_mdio_addr; in al_eth_board_params_init()
865 adapter->an_en = params.autoneg_enable; in al_eth_board_params_init()
866 adapter->lt_en = params.kr_lt_enable; in al_eth_board_params_init()
867 adapter->serdes_grp = params.serdes_grp; in al_eth_board_params_init()
868 adapter->serdes_lane = params.serdes_lane; in al_eth_board_params_init()
869 adapter->sfp_detection_needed = params.sfp_plus_module_exist; in al_eth_board_params_init()
870 adapter->i2c_adapter_id = params.i2c_adapter_id; in al_eth_board_params_init()
871 adapter->ref_clk_freq = params.ref_clk_freq; in al_eth_board_params_init()
872 adapter->dont_override_serdes = params.dont_override_serdes; in al_eth_board_params_init()
873 adapter->link_config.active_duplex = !params.half_duplex; in al_eth_board_params_init()
874 adapter->link_config.autoneg = !params.an_disable; in al_eth_board_params_init()
875 adapter->link_config.force_1000_base_x = params.force_1000_base_x; in al_eth_board_params_init()
876 adapter->retimer.exist = params.retimer_exist; in al_eth_board_params_init()
877 adapter->retimer.bus_id = params.retimer_bus_id; in al_eth_board_params_init()
878 adapter->retimer.i2c_addr = params.retimer_i2c_addr; in al_eth_board_params_init()
879 adapter->retimer.channel = params.retimer_channel; in al_eth_board_params_init()
883 device_printf(adapter->dev, in al_eth_board_params_init()
886 adapter->link_config.active_speed = 1000; in al_eth_board_params_init()
889 adapter->link_config.active_speed = 100; in al_eth_board_params_init()
892 adapter->link_config.active_speed = 10; in al_eth_board_params_init()
898 device_printf(adapter->dev, in al_eth_board_params_init()
902 adapter->mdio_freq = AL_ETH_DEFAULT_MDIO_FREQ_KHZ; in al_eth_board_params_init()
905 adapter->mdio_freq = AL_ETH_MDIO_FREQ_1000_KHZ; in al_eth_board_params_init()
913 adapter->mac_mode = AL_ETH_MAC_MODE_SGMII; in al_eth_board_params_init()
915 adapter->mac_mode = AL_ETH_MAC_MODE_RGMII; in al_eth_board_params_init()
917 adapter->use_lm = false; in al_eth_board_params_init()
920 adapter->mac_mode = AL_ETH_MAC_MODE_SGMII; in al_eth_board_params_init()
921 adapter->use_lm = true; in al_eth_board_params_init()
924 adapter->mac_mode = AL_ETH_MAC_MODE_10GbE_Serial; in al_eth_board_params_init()
925 adapter->use_lm = true; in al_eth_board_params_init()
928 adapter->sfp_detection_needed = TRUE; in al_eth_board_params_init()
929 adapter->auto_speed = false; in al_eth_board_params_init()
930 adapter->use_lm = true; in al_eth_board_params_init()
933 adapter->sfp_detection_needed = TRUE; in al_eth_board_params_init()
934 adapter->auto_speed = true; in al_eth_board_params_init()
935 adapter->mac_mode_set = false; in al_eth_board_params_init()
936 adapter->use_lm = true; in al_eth_board_params_init()
938 adapter->mac_mode = AL_ETH_MAC_MODE_10GbE_Serial; in al_eth_board_params_init()
941 device_printf(adapter->dev, in al_eth_board_params_init()
947 device_printf(adapter->dev, in al_eth_board_params_init()
951 params.phy_mdio_addr, adapter->mdio_freq, in al_eth_board_params_init()
956 al_eth_mac_addr_read(adapter->ec_base, 0, adapter->mac_addr); in al_eth_board_params_init()
962 al_eth_function_reset(struct al_eth_adapter *adapter) in al_eth_function_reset() argument
968 al_eth_board_params_get(adapter->mac_base, ¶ms); in al_eth_function_reset()
969 al_eth_mac_addr_read(adapter->ec_base, 0, adapter->mac_addr); in al_eth_function_reset()
970 if (adapter->board_type == ALPINE_INTEGRATED) in al_eth_function_reset()
973 adapter->dev, adapter->mac_base); in al_eth_function_reset()
977 adapter->internal_pcie_base, adapter->mac_base); in al_eth_function_reset()
980 al_eth_board_params_set(adapter->mac_base, ¶ms); in al_eth_function_reset()
981 al_eth_mac_addr_store(adapter->ec_base, 0, adapter->mac_addr); in al_eth_function_reset()
987 al_eth_init_rings(struct al_eth_adapter *adapter) in al_eth_init_rings() argument
991 for (i = 0; i < adapter->num_tx_queues; i++) { in al_eth_init_rings()
992 struct al_eth_ring *ring = &adapter->tx_ring[i]; in al_eth_init_rings()
995 ring->dev = adapter->dev; in al_eth_init_rings()
996 ring->adapter = adapter; in al_eth_init_rings()
997 ring->netdev = adapter->netdev; in al_eth_init_rings()
998 al_udma_q_handle_get(&adapter->hal_adapter.tx_udma, i, in al_eth_init_rings()
1000 ring->sw_count = adapter->tx_ring_count; in al_eth_init_rings()
1001 ring->hw_count = adapter->tx_descs_count; in al_eth_init_rings()
1002 …ring->unmask_reg_offset = al_udma_iofic_unmask_offset_get((struct unit_regs *)adapter->udma_base, … in al_eth_init_rings()
1006 for (i = 0; i < adapter->num_rx_queues; i++) { in al_eth_init_rings()
1007 struct al_eth_ring *ring = &adapter->rx_ring[i]; in al_eth_init_rings()
1010 ring->dev = adapter->dev; in al_eth_init_rings()
1011 ring->adapter = adapter; in al_eth_init_rings()
1012 ring->netdev = adapter->netdev; in al_eth_init_rings()
1013 al_udma_q_handle_get(&adapter->hal_adapter.rx_udma, i, &ring->dma_q); in al_eth_init_rings()
1014 ring->sw_count = adapter->rx_ring_count; in al_eth_init_rings()
1015 ring->hw_count = adapter->rx_descs_count; in al_eth_init_rings()
1017 (struct unit_regs *)adapter->udma_base, in al_eth_init_rings()
1026 struct al_eth_adapter *adapter = arg; in al_init_locked() local
1027 if_t ifp = adapter->netdev; in al_init_locked()
1030 al_eth_down(adapter); in al_init_locked()
1031 rc = al_eth_up(adapter); in al_init_locked()
1041 struct al_eth_adapter *adapter = arg; in al_init() local
1043 al_init_locked(adapter); in al_init()
1047 al_eth_alloc_rx_buf(struct al_eth_adapter *adapter, in al_eth_alloc_rx_buf() argument
1059 rx_info->data_size = adapter->rx_mbuf_sz; in al_eth_alloc_rx_buf()
1061 AL_RX_LOCK(adapter); in al_eth_alloc_rx_buf()
1066 AL_RX_UNLOCK(adapter); in al_eth_alloc_rx_buf()
1071 rx_info->m->m_pkthdr.len = rx_info->m->m_len = adapter->rx_mbuf_sz; in al_eth_alloc_rx_buf()
1092 al_eth_refill_rx_bufs(struct al_eth_adapter *adapter, unsigned int qid, in al_eth_refill_rx_bufs() argument
1095 struct al_eth_ring *rx_ring = &adapter->rx_ring[qid]; in al_eth_refill_rx_bufs()
1106 if (__predict_false(al_eth_alloc_rx_buf(adapter, in al_eth_refill_rx_bufs()
1108 device_printf(adapter->dev, in al_eth_refill_rx_bufs()
1116 device_printf(adapter->dev, in al_eth_refill_rx_bufs()
1125 device_printf(adapter->dev, in al_eth_refill_rx_bufs()
1142 al_eth_refill_all_rx_bufs(struct al_eth_adapter *adapter) in al_eth_refill_all_rx_bufs() argument
1146 for (i = 0; i < adapter->num_rx_queues; i++) in al_eth_refill_all_rx_bufs()
1147 al_eth_refill_rx_bufs(adapter, i, AL_ETH_DEFAULT_RX_DESCS - 1); in al_eth_refill_all_rx_bufs()
1483 al_eth_rx_checksum(struct al_eth_adapter *adapter, in al_eth_rx_checksum() argument
1488 if (unlikely((adapter->netdev->if_capenable & IFCAP_RXCSUM) && in al_eth_rx_checksum()
1491 device_printf(adapter->dev,"rx ipv4 header checksum error\n"); in al_eth_rx_checksum()
1496 if (unlikely((adapter->netdev->if_capenable & IFCAP_RXCSUM_IPV6) && in al_eth_rx_checksum()
1499 device_printf(adapter->dev,"rx ipv6 header checksum error\n"); in al_eth_rx_checksum()
1507 device_printf_dbg(adapter->dev, "rx L4 checksum error\n"); in al_eth_rx_checksum()
1512 device_printf_dbg(adapter->dev, "rx checksum correct\n"); in al_eth_rx_checksum()
1522 al_eth_rx_mbuf(struct al_eth_adapter *adapter, in al_eth_rx_mbuf() argument
1532 device_printf_dbg(adapter->dev, "rx_info %p data %p\n", rx_info, in al_eth_rx_mbuf()
1547 if (len <= adapter->small_copy_len) { in al_eth_rx_mbuf()
1549 device_printf_dbg(adapter->dev, "rx small packet. len %d\n", len); in al_eth_rx_mbuf()
1551 AL_RX_LOCK(adapter); in al_eth_rx_mbuf()
1553 AL_RX_UNLOCK(adapter); in al_eth_rx_mbuf()
1555 device_printf(adapter->dev, "smbuf is NULL\n"); in al_eth_rx_mbuf()
1627 mbuf = al_eth_rx_mbuf(rx_ring->adapter, rx_ring, hal_pkt, descs, in al_eth_rx_recv_work()
1639 al_eth_rx_checksum(rx_ring->adapter, hal_pkt, mbuf); in al_eth_rx_recv_work()
1673 refill_actual = al_eth_refill_rx_bufs(rx_ring->adapter, qid, in al_eth_rx_recv_work()
1733 struct al_eth_adapter *adapter = ifp->if_softc; in al_mq_start() local
1740 i = m->m_pkthdr.flowid % adapter->num_tx_queues; in al_mq_start()
1742 i = curcpu % adapter->num_tx_queues; in al_mq_start()
1749 tx_ring = &adapter->tx_ring[i]; in al_mq_start()
1751 device_printf_dbg(adapter->dev, "dgb start() - assuming link is active, " in al_mq_start()
1774 al_eth_flow_ctrl_init(struct al_eth_adapter *adapter) in al_eth_flow_ctrl_init() argument
1781 adapter->link_config.flow_ctrl_supported = default_flow_ctrl; in al_eth_flow_ctrl_init()
1785 al_eth_flow_ctrl_config(struct al_eth_adapter *adapter) in al_eth_flow_ctrl_config() argument
1788 uint8_t active = adapter->link_config.flow_ctrl_active; in al_eth_flow_ctrl_config()
1791 flow_ctrl_params = &adapter->flow_ctrl_params; in al_eth_flow_ctrl_config()
1808 al_eth_flow_control_config(&adapter->hal_adapter, flow_ctrl_params); in al_eth_flow_ctrl_config()
1814 al_eth_flow_ctrl_enable(struct al_eth_adapter *adapter) in al_eth_flow_ctrl_enable() argument
1821 adapter->link_config.flow_ctrl_active = in al_eth_flow_ctrl_enable()
1822 adapter->link_config.flow_ctrl_supported; in al_eth_flow_ctrl_enable()
1824 al_eth_flow_ctrl_config(adapter); in al_eth_flow_ctrl_enable()
1828 al_eth_flow_ctrl_disable(struct al_eth_adapter *adapter) in al_eth_flow_ctrl_disable() argument
1831 adapter->link_config.flow_ctrl_active = 0; in al_eth_flow_ctrl_disable()
1832 al_eth_flow_ctrl_config(adapter); in al_eth_flow_ctrl_disable()
1836 al_eth_hw_init(struct al_eth_adapter *adapter) in al_eth_hw_init() argument
1840 rc = al_eth_hw_init_adapter(adapter); in al_eth_hw_init()
1844 rc = al_eth_mac_config(&adapter->hal_adapter, adapter->mac_mode); in al_eth_hw_init()
1846 device_printf(adapter->dev, "%s failed to configure mac!\n", in al_eth_hw_init()
1851 if ((adapter->mac_mode == AL_ETH_MAC_MODE_SGMII) || in al_eth_hw_init()
1852 (adapter->mac_mode == AL_ETH_MAC_MODE_RGMII && in al_eth_hw_init()
1853 adapter->phy_exist == FALSE)) { in al_eth_hw_init()
1854 rc = al_eth_mac_link_config(&adapter->hal_adapter, in al_eth_hw_init()
1855 adapter->link_config.force_1000_base_x, in al_eth_hw_init()
1856 adapter->link_config.autoneg, in al_eth_hw_init()
1857 adapter->link_config.active_speed, in al_eth_hw_init()
1858 adapter->link_config.active_duplex); in al_eth_hw_init()
1860 device_printf(adapter->dev, in al_eth_hw_init()
1867 rc = al_eth_mdio_config(&adapter->hal_adapter, in al_eth_hw_init()
1869 adapter->ref_clk_freq, adapter->mdio_freq); in al_eth_hw_init()
1871 device_printf(adapter->dev, "%s failed at mdio config!\n", in al_eth_hw_init()
1876 al_eth_flow_ctrl_init(adapter); in al_eth_hw_init()
1882 al_eth_hw_stop(struct al_eth_adapter *adapter) in al_eth_hw_stop() argument
1885 al_eth_mac_stop(&adapter->hal_adapter); in al_eth_hw_stop()
1894 al_eth_adapter_stop(&adapter->hal_adapter); in al_eth_hw_stop()
1896 adapter->flags |= AL_ETH_FLAG_RESET_REQUESTED; in al_eth_hw_stop()
1899 al_eth_flow_ctrl_disable(adapter); in al_eth_hw_stop()
1912 struct al_eth_adapter *adapter = data; in al_eth_intr_intx_all() local
1915 (struct unit_regs __iomem *)adapter->udma_base; in al_eth_intr_intx_all()
1921 device_printf_dbg(adapter->dev, "%s group A cause %x\n", in al_eth_intr_intx_all()
1932 device_printf_dbg(adapter->dev, in al_eth_intr_intx_all()
1937 device_printf(adapter->dev, in al_eth_intr_intx_all()
1943 device_printf_dbg(adapter->dev, in al_eth_intr_intx_all()
1951 device_printf_dbg(adapter->dev, "secondary B cause %x\n", in al_eth_intr_intx_all()
1953 for (qid = 0; qid < adapter->num_rx_queues; qid++) { in al_eth_intr_intx_all()
1957 (struct unit_regs __iomem *)adapter->udma_base, in al_eth_intr_intx_all()
1967 device_printf_dbg(adapter->dev, "secondary C cause %x\n", cause_c); in al_eth_intr_intx_all()
1968 for (qid = 0; qid < adapter->num_tx_queues; qid++) { in al_eth_intr_intx_all()
1971 (struct unit_regs __iomem *)adapter->udma_base, in al_eth_intr_intx_all()
1978 al_eth_tx_cmlp_irq_filter(adapter->tx_ring); in al_eth_intr_intx_all()
1986 struct al_eth_adapter *adapter = data; in al_eth_intr_msix_all() local
1988 device_printf_dbg(adapter->dev, "%s\n", __func__); in al_eth_intr_msix_all()
1995 struct al_eth_adapter *adapter = data; in al_eth_intr_msix_mgmt() local
1997 device_printf_dbg(adapter->dev, "%s\n", __func__); in al_eth_intr_msix_mgmt()
2002 al_eth_enable_msix(struct al_eth_adapter *adapter) in al_eth_enable_msix() argument
2006 device_printf_dbg(adapter->dev, "%s\n", __func__); in al_eth_enable_msix()
2007 msix_vecs = 1 + adapter->num_rx_queues + adapter->num_tx_queues; in al_eth_enable_msix()
2009 device_printf_dbg(adapter->dev, in al_eth_enable_msix()
2012 adapter->msix_entries = malloc(msix_vecs*sizeof(*adapter->msix_entries), in al_eth_enable_msix()
2015 if (adapter->msix_entries == NULL) { in al_eth_enable_msix()
2016 device_printf_dbg(adapter->dev, "failed to allocate" in al_eth_enable_msix()
2023 adapter->msix_entries[AL_ETH_MGMT_IRQ_IDX].entry = 2; in al_eth_enable_msix()
2024 adapter->msix_entries[AL_ETH_MGMT_IRQ_IDX].vector = 0; in al_eth_enable_msix()
2027 for (i = 0; i < adapter->num_rx_queues; i++) { in al_eth_enable_msix()
2028 int irq_idx = AL_ETH_RXQ_IRQ_IDX(adapter, i); in al_eth_enable_msix()
2030 adapter->msix_entries[irq_idx].entry = 3 + i; in al_eth_enable_msix()
2031 adapter->msix_entries[irq_idx].vector = 0; in al_eth_enable_msix()
2034 for (i = 0; i < adapter->num_tx_queues; i++) { in al_eth_enable_msix()
2035 int irq_idx = AL_ETH_TXQ_IRQ_IDX(adapter, i); in al_eth_enable_msix()
2037 adapter->msix_entries[irq_idx].entry = 3 + in al_eth_enable_msix()
2039 adapter->msix_entries[irq_idx].vector = 0; in al_eth_enable_msix()
2043 rc = pci_alloc_msix(adapter->dev, &count); in al_eth_enable_msix()
2046 device_printf_dbg(adapter->dev, "failed to allocate MSIX " in al_eth_enable_msix()
2048 device_printf_dbg(adapter->dev, "ret = %d\n", rc); in al_eth_enable_msix()
2053 device_printf_dbg(adapter->dev, "failed to allocate all MSIX " in al_eth_enable_msix()
2060 adapter->msix_entries[i].vector = 2 + 1 + i; in al_eth_enable_msix()
2062 device_printf_dbg(adapter->dev, "successfully enabled MSIX," in al_eth_enable_msix()
2065 adapter->msix_vecs = msix_vecs; in al_eth_enable_msix()
2066 adapter->flags |= AL_ETH_FLAG_MSIX_ENABLED; in al_eth_enable_msix()
2070 adapter->msix_vecs = 0; in al_eth_enable_msix()
2071 free(adapter->msix_entries, M_IFAL); in al_eth_enable_msix()
2072 adapter->msix_entries = NULL; in al_eth_enable_msix()
2079 al_eth_setup_int_mode(struct al_eth_adapter *adapter) in al_eth_setup_int_mode() argument
2083 rc = al_eth_enable_msix(adapter); in al_eth_setup_int_mode()
2085 device_printf(adapter->dev, "Failed to enable MSIX mode.\n"); in al_eth_setup_int_mode()
2089 adapter->irq_vecs = max(1, adapter->msix_vecs); in al_eth_setup_int_mode()
2091 if (adapter->msix_vecs == 0) { in al_eth_setup_int_mode()
2092 snprintf(adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].name, in al_eth_setup_int_mode()
2094 device_get_name(adapter->dev)); in al_eth_setup_int_mode()
2095 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].handler = in al_eth_setup_int_mode()
2098 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].vector = 0; in al_eth_setup_int_mode()
2099 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].data = adapter; in al_eth_setup_int_mode()
2101 device_printf(adapter->dev, "%s and vector %d \n", __func__, in al_eth_setup_int_mode()
2102 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].vector); in al_eth_setup_int_mode()
2107 if (adapter->msix_vecs == 1) { in al_eth_setup_int_mode()
2108 snprintf(adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].name, in al_eth_setup_int_mode()
2110 device_get_name(adapter->dev)); in al_eth_setup_int_mode()
2111 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].handler = in al_eth_setup_int_mode()
2113 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].vector = in al_eth_setup_int_mode()
2114 adapter->msix_entries[AL_ETH_MGMT_IRQ_IDX].vector; in al_eth_setup_int_mode()
2115 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].data = adapter; in al_eth_setup_int_mode()
2120 snprintf(adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].name, AL_ETH_IRQNAME_SIZE, in al_eth_setup_int_mode()
2121 "al-eth-msix-mgmt@pci:%s", device_get_name(adapter->dev)); in al_eth_setup_int_mode()
2122 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].handler = al_eth_intr_msix_mgmt; in al_eth_setup_int_mode()
2124 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].data = adapter; in al_eth_setup_int_mode()
2125 adapter->irq_tbl[AL_ETH_MGMT_IRQ_IDX].vector = in al_eth_setup_int_mode()
2126 adapter->msix_entries[AL_ETH_MGMT_IRQ_IDX].vector; in al_eth_setup_int_mode()
2128 for (i = 0; i < adapter->num_rx_queues; i++) { in al_eth_setup_int_mode()
2129 int irq_idx = AL_ETH_RXQ_IRQ_IDX(adapter, i); in al_eth_setup_int_mode()
2131 snprintf(adapter->irq_tbl[irq_idx].name, AL_ETH_IRQNAME_SIZE, in al_eth_setup_int_mode()
2133 device_get_name(adapter->dev)); in al_eth_setup_int_mode()
2134 adapter->irq_tbl[irq_idx].handler = al_eth_rx_recv_irq_filter; in al_eth_setup_int_mode()
2135 adapter->irq_tbl[irq_idx].data = &adapter->rx_ring[i]; in al_eth_setup_int_mode()
2136 adapter->irq_tbl[irq_idx].vector = in al_eth_setup_int_mode()
2137 adapter->msix_entries[irq_idx].vector; in al_eth_setup_int_mode()
2140 for (i = 0; i < adapter->num_tx_queues; i++) { in al_eth_setup_int_mode()
2141 int irq_idx = AL_ETH_TXQ_IRQ_IDX(adapter, i); in al_eth_setup_int_mode()
2143 snprintf(adapter->irq_tbl[irq_idx].name, in al_eth_setup_int_mode()
2145 device_get_name(adapter->dev)); in al_eth_setup_int_mode()
2146 adapter->irq_tbl[irq_idx].handler = al_eth_tx_cmlp_irq_filter; in al_eth_setup_int_mode()
2147 adapter->irq_tbl[irq_idx].data = &adapter->tx_ring[i]; in al_eth_setup_int_mode()
2148 adapter->irq_tbl[irq_idx].vector = in al_eth_setup_int_mode()
2149 adapter->msix_entries[irq_idx].vector; in al_eth_setup_int_mode()
2156 __al_eth_free_irq(struct al_eth_adapter *adapter) in __al_eth_free_irq() argument
2161 for (i = 0; i < adapter->irq_vecs; i++) { in __al_eth_free_irq()
2162 irq = &adapter->irq_tbl[i]; in __al_eth_free_irq()
2164 device_printf_dbg(adapter->dev, "tear down irq: %d\n", in __al_eth_free_irq()
2166 rc = bus_teardown_intr(adapter->dev, irq->res, in __al_eth_free_irq()
2169 device_printf(adapter->dev, "failed to tear " in __al_eth_free_irq()
2177 al_eth_free_irq(struct al_eth_adapter *adapter) in al_eth_free_irq() argument
2182 if (adapter->msix_vecs >= 1) { in al_eth_free_irq()
2183 free_irq_cpu_rmap(adapter->netdev->rx_cpu_rmap); in al_eth_free_irq()
2184 adapter->netdev->rx_cpu_rmap = NULL; in al_eth_free_irq()
2188 __al_eth_free_irq(adapter); in al_eth_free_irq()
2190 for (i = 0; i < adapter->irq_vecs; i++) { in al_eth_free_irq()
2191 irq = &adapter->irq_tbl[i]; in al_eth_free_irq()
2194 device_printf_dbg(adapter->dev, "release resource irq: %d\n", in al_eth_free_irq()
2196 rc = bus_release_resource(adapter->dev, SYS_RES_IRQ, irq->vector, in al_eth_free_irq()
2200 device_printf(adapter->dev, "dev has no parent while " in al_eth_free_irq()
2204 pci_release_msi(adapter->dev); in al_eth_free_irq()
2206 adapter->flags &= ~AL_ETH_FLAG_MSIX_ENABLED; in al_eth_free_irq()
2208 adapter->msix_vecs = 0; in al_eth_free_irq()
2209 free(adapter->msix_entries, M_IFAL); in al_eth_free_irq()
2210 adapter->msix_entries = NULL; in al_eth_free_irq()
2214 al_eth_request_irq(struct al_eth_adapter *adapter) in al_eth_request_irq() argument
2220 if ((adapter->flags & AL_ETH_FLAG_MSIX_ENABLED) != 0) in al_eth_request_irq()
2225 for (i = 0; i < adapter->irq_vecs; i++) { in al_eth_request_irq()
2226 irq = &adapter->irq_tbl[i]; in al_eth_request_irq()
2231 irq->res = bus_alloc_resource_any(adapter->dev, SYS_RES_IRQ, in al_eth_request_irq()
2234 device_printf(adapter->dev, "could not allocate " in al_eth_request_irq()
2240 if ((rc = bus_setup_intr(adapter->dev, irq->res, in al_eth_request_irq()
2243 device_printf(adapter->dev, "failed to register " in al_eth_request_irq()
2256 irq = &adapter->irq_tbl[v]; in al_eth_request_irq()
2257 bti = bus_teardown_intr(adapter->dev, irq->res, irq->cookie); in al_eth_request_irq()
2259 device_printf(adapter->dev, "failed to tear " in al_eth_request_irq()
2264 device_printf_dbg(adapter->dev, "exit_intr: releasing irq %d\n", in al_eth_request_irq()
2272 irq = &adapter->irq_tbl[v]; in al_eth_request_irq()
2273 device_printf_dbg(adapter->dev, "exit_res: releasing resource" in al_eth_request_irq()
2275 brr = bus_release_resource(adapter->dev, SYS_RES_IRQ, in al_eth_request_irq()
2278 device_printf(adapter->dev, "dev has no parent while " in al_eth_request_irq()
2295 al_eth_setup_tx_resources(struct al_eth_adapter *adapter, int qid) in al_eth_setup_tx_resources() argument
2297 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_setup_tx_resources()
2303 if (adapter->up) in al_eth_setup_tx_resources()
2344 device_get_nameunit(adapter->dev)); in al_eth_setup_tx_resources()
2349 device_get_nameunit(adapter->dev)); in al_eth_setup_tx_resources()
2399 al_eth_free_tx_resources(struct al_eth_adapter *adapter, int qid) in al_eth_free_tx_resources() argument
2401 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_free_tx_resources()
2418 drbr_flush(adapter->netdev, tx_ring->br); in al_eth_free_tx_resources()
2455 al_eth_free_all_tx_resources(struct al_eth_adapter *adapter) in al_eth_free_all_tx_resources() argument
2459 for (i = 0; i < adapter->num_tx_queues; i++) in al_eth_free_all_tx_resources()
2460 if (adapter->tx_ring[i].q_params.desc_base) in al_eth_free_all_tx_resources()
2461 al_eth_free_tx_resources(adapter, i); in al_eth_free_all_tx_resources()
2472 al_eth_setup_rx_resources(struct al_eth_adapter *adapter, unsigned int qid) in al_eth_setup_rx_resources() argument
2474 struct al_eth_ring *rx_ring = &adapter->rx_ring[qid]; in al_eth_setup_rx_resources()
2516 device_get_nameunit(adapter->dev)); in al_eth_setup_rx_resources()
2550 if ((adapter->netdev->if_capenable & IFCAP_LRO) != 0) { in al_eth_setup_rx_resources()
2553 device_printf(adapter->dev, in al_eth_setup_rx_resources()
2556 device_printf_dbg(adapter->dev, in al_eth_setup_rx_resources()
2559 rx_ring->lro.ifp = adapter->netdev; in al_eth_setup_rx_resources()
2577 al_eth_free_rx_resources(struct al_eth_adapter *adapter, unsigned int qid) in al_eth_free_rx_resources() argument
2579 struct al_eth_ring *rx_ring = &adapter->rx_ring[qid]; in al_eth_free_rx_resources()
2633 al_eth_free_all_rx_resources(struct al_eth_adapter *adapter) in al_eth_free_all_rx_resources() argument
2637 for (i = 0; i < adapter->num_rx_queues; i++) in al_eth_free_all_rx_resources()
2638 if (adapter->rx_ring[i].q_params.desc_base != 0) in al_eth_free_all_rx_resources()
2639 al_eth_free_rx_resources(adapter, i); in al_eth_free_all_rx_resources()
2649 al_eth_setup_all_rx_resources(struct al_eth_adapter *adapter) in al_eth_setup_all_rx_resources() argument
2653 for (i = 0; i < adapter->num_rx_queues; i++) { in al_eth_setup_all_rx_resources()
2654 rc = al_eth_setup_rx_resources(adapter, i); in al_eth_setup_all_rx_resources()
2658 device_printf(adapter->dev, "Allocation for Rx Queue %u failed\n", i); in al_eth_setup_all_rx_resources()
2666 al_eth_free_rx_resources(adapter, i); in al_eth_setup_all_rx_resources()
2677 al_eth_setup_all_tx_resources(struct al_eth_adapter *adapter) in al_eth_setup_all_tx_resources() argument
2681 for (i = 0; i < adapter->num_tx_queues; i++) { in al_eth_setup_all_tx_resources()
2682 rc = al_eth_setup_tx_resources(adapter, i); in al_eth_setup_all_tx_resources()
2686 device_printf(adapter->dev, in al_eth_setup_all_tx_resources()
2696 al_eth_free_tx_resources(adapter, i); in al_eth_setup_all_tx_resources()
2702 al_eth_disable_int_sync(struct al_eth_adapter *adapter) in al_eth_disable_int_sync() argument
2706 if ((adapter->board_type == ALPINE_FPGA_NIC) || in al_eth_disable_int_sync()
2707 (adapter->board_type == ALPINE_NIC)) { in al_eth_disable_int_sync()
2708 al_eth_forward_int_config((uint32_t*)adapter->internal_pcie_base + in al_eth_disable_int_sync()
2713 al_eth_interrupts_mask(adapter); in al_eth_disable_int_sync()
2717 al_eth_interrupts_unmask(struct al_eth_adapter *adapter) in al_eth_interrupts_unmask() argument
2720 uint32_t group_b_mask = (1 << adapter->num_rx_queues) - 1;/* bit per Rx q*/ in al_eth_interrupts_unmask()
2721 uint32_t group_c_mask = (1 << adapter->num_tx_queues) - 1;/* bit per Tx q*/ in al_eth_interrupts_unmask()
2724 (struct unit_regs __iomem *)adapter->udma_base; in al_eth_interrupts_unmask()
2726 if (adapter->int_mode == AL_IOFIC_MODE_LEGACY) in al_eth_interrupts_unmask()
2742 al_eth_interrupts_mask(struct al_eth_adapter *adapter) in al_eth_interrupts_mask() argument
2745 (struct unit_regs __iomem *)adapter->udma_base; in al_eth_interrupts_mask()
2759 al_eth_configure_int_mode(struct al_eth_adapter *adapter) in al_eth_configure_int_mode() argument
2768 if (adapter->msix_vecs == 0) in al_eth_configure_int_mode()
2770 else if (adapter->msix_vecs > 1) in al_eth_configure_int_mode()
2773 device_printf(adapter->dev, in al_eth_configure_int_mode()
2778 if (adapter->board_type != ALPINE_INTEGRATED) { in al_eth_configure_int_mode()
2785 if (al_udma_iofic_config((struct unit_regs __iomem *)adapter->udma_base, in al_eth_configure_int_mode()
2788 device_printf(adapter->dev, in al_eth_configure_int_mode()
2792 adapter->int_mode = int_mode; in al_eth_configure_int_mode()
2793 device_printf_dbg(adapter->dev, "using %s interrupt mode\n", in al_eth_configure_int_mode()
2797 …al_iofic_moder_res_config(&((struct unit_regs *)(adapter->udma_base))->gen.interrupt_regs.main_iof… in al_eth_configure_int_mode()
2798 …al_iofic_moder_res_config(&((struct unit_regs *)(adapter->udma_base))->gen.interrupt_regs.main_iof… in al_eth_configure_int_mode()
2800 adapter->tx_usecs = 0; in al_eth_configure_int_mode()
2801 adapter->rx_usecs = 0; in al_eth_configure_int_mode()
2821 al_eth_update_stats(struct al_eth_adapter *adapter) in al_eth_update_stats() argument
2823 struct al_eth_mac_stats *mac_stats = &adapter->mac_stats; in al_eth_update_stats()
2825 if (adapter->up == 0) in al_eth_update_stats()
2828 al_eth_mac_stats_get(&adapter->hal_adapter, mac_stats); in al_eth_update_stats()
2836 struct al_eth_adapter *adapter; in al_get_counter() local
2840 adapter = if_getsoftc(ifp); in al_get_counter()
2841 mac_stats = &adapter->mac_stats; in al_get_counter()
2892 struct al_eth_adapter *adapter = arg; in al_program_addr() local
2894 al_eth_mac_table_unicast_add(adapter, in al_program_addr()
2909 al_eth_set_rx_mode(struct al_eth_adapter *adapter) in al_eth_set_rx_mode() argument
2911 struct ifnet *ifp = adapter->netdev; in al_eth_set_rx_mode()
2920 al_eth_mac_table_promiscuous_set(adapter, true); in al_eth_set_rx_mode()
2924 al_eth_mac_table_all_multicast_add(adapter, in al_eth_set_rx_mode()
2928 al_eth_mac_table_entry_clear(adapter, in al_eth_set_rx_mode()
2931 al_eth_mac_table_all_multicast_add(adapter, in al_eth_set_rx_mode()
2942 al_eth_mac_table_promiscuous_set(adapter, true); in al_eth_set_rx_mode()
2949 al_eth_mac_table_entry_clear(adapter, i); in al_eth_set_rx_mode()
2954 if_foreach_lladdr(ifp, al_program_addr, adapter); in al_eth_set_rx_mode()
2956 al_eth_mac_table_promiscuous_set(adapter, false); in al_eth_set_rx_mode()
2961 al_eth_config_rx_fwd(struct al_eth_adapter *adapter) in al_eth_config_rx_fwd() argument
2968 al_eth_fwd_pbits_table_set(&adapter->hal_adapter, i, i); in al_eth_config_rx_fwd()
2972 al_eth_fwd_priority_table_set(&adapter->hal_adapter, i, i >> 1); in al_eth_config_rx_fwd()
2980 al_eth_ctrl_table_def_set(&adapter->hal_adapter, FALSE, &entry); in al_eth_config_rx_fwd()
2986 al_eth_mac_table_unicast_add(adapter, AL_ETH_MAC_TABLE_UNICAST_IDX_BASE, in al_eth_config_rx_fwd()
2988 al_eth_mac_table_broadcast_add(adapter, AL_ETH_MAC_TABLE_BROADCAST_IDX, 1); in al_eth_config_rx_fwd()
2989 al_eth_mac_table_promiscuous_set(adapter, false); in al_eth_config_rx_fwd()
2992 for (i = 0; i < sizeof(adapter->toeplitz_hash_key); i++) in al_eth_config_rx_fwd()
2993 *((uint8_t*)adapter->toeplitz_hash_key + i) = (uint8_t)random(); in al_eth_config_rx_fwd()
2996 al_eth_hash_key_set(&adapter->hal_adapter, i, in al_eth_config_rx_fwd()
2997 htonl(adapter->toeplitz_hash_key[i])); in al_eth_config_rx_fwd()
3000 adapter->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, in al_eth_config_rx_fwd()
3002 al_eth_set_thash_table_entry(adapter, i, 0, in al_eth_config_rx_fwd()
3003 adapter->rss_ind_tbl[i]); in al_eth_config_rx_fwd()
3006 al_eth_fsm_table_init(adapter); in al_eth_config_rx_fwd()
3010 al_eth_req_rx_buff_size(struct al_eth_adapter *adapter, int size) in al_eth_req_rx_buff_size() argument
3018 adapter->rx_mbuf_sz = MCLBYTES; in al_eth_req_rx_buff_size()
3020 if (adapter->max_rx_buff_alloc_size > 2048) in al_eth_req_rx_buff_size()
3021 adapter->rx_mbuf_sz = MJUMPAGESIZE; in al_eth_req_rx_buff_size()
3026 if (adapter->max_rx_buff_alloc_size > 4096) in al_eth_req_rx_buff_size()
3027 adapter->rx_mbuf_sz = MJUM9BYTES; in al_eth_req_rx_buff_size()
3032 if (adapter->max_rx_buff_alloc_size > 9216) in al_eth_req_rx_buff_size()
3033 adapter->rx_mbuf_sz = MJUM16BYTES; in al_eth_req_rx_buff_size()
3040 al_eth_change_mtu(struct al_eth_adapter *adapter, int new_mtu) in al_eth_change_mtu() argument
3045 al_eth_req_rx_buff_size(adapter, new_mtu); in al_eth_change_mtu()
3047 device_printf_dbg(adapter->dev, "set MTU to %d\n", new_mtu); in al_eth_change_mtu()
3048 al_eth_rx_pkt_limit_config(&adapter->hal_adapter, in al_eth_change_mtu()
3051 al_eth_tso_mss_config(&adapter->hal_adapter, 0, new_mtu - 100); in al_eth_change_mtu()
3057 al_eth_check_mtu(struct al_eth_adapter *adapter, int new_mtu) in al_eth_check_mtu() argument
3070 al_eth_udma_queue_enable(struct al_eth_adapter *adapter, enum al_udma_type type, in al_eth_udma_queue_enable() argument
3078 q_params = &adapter->tx_ring[qid].q_params; in al_eth_udma_queue_enable()
3080 q_params = &adapter->rx_ring[qid].q_params; in al_eth_udma_queue_enable()
3082 rc = al_eth_queue_config(&adapter->hal_adapter, type, qid, q_params); in al_eth_udma_queue_enable()
3084 device_printf(adapter->dev, "config %s queue %u failed\n", name, in al_eth_udma_queue_enable()
3092 al_eth_udma_queues_enable_all(struct al_eth_adapter *adapter) in al_eth_udma_queues_enable_all() argument
3096 for (i = 0; i < adapter->num_tx_queues; i++) in al_eth_udma_queues_enable_all()
3097 al_eth_udma_queue_enable(adapter, UDMA_TX, i); in al_eth_udma_queues_enable_all()
3099 for (i = 0; i < adapter->num_rx_queues; i++) in al_eth_udma_queues_enable_all()
3100 al_eth_udma_queue_enable(adapter, UDMA_RX, i); in al_eth_udma_queues_enable_all()
3106 al_eth_up_complete(struct al_eth_adapter *adapter) in al_eth_up_complete() argument
3109 al_eth_configure_int_mode(adapter); in al_eth_up_complete()
3110 al_eth_config_rx_fwd(adapter); in al_eth_up_complete()
3111 al_eth_change_mtu(adapter, adapter->netdev->if_mtu); in al_eth_up_complete()
3112 al_eth_udma_queues_enable_all(adapter); in al_eth_up_complete()
3113 al_eth_refill_all_rx_bufs(adapter); in al_eth_up_complete()
3114 al_eth_interrupts_unmask(adapter); in al_eth_up_complete()
3117 if ((adapter->board_type == ALPINE_FPGA_NIC) || in al_eth_up_complete()
3118 (adapter->board_type == ALPINE_NIC)) { in al_eth_up_complete()
3119 al_eth_forward_int_config((uint32_t*)adapter->internal_pcie_base + in al_eth_up_complete()
3123 al_eth_flow_ctrl_enable(adapter); in al_eth_up_complete()
3125 mtx_lock(&adapter->stats_mtx); in al_eth_up_complete()
3126 callout_reset(&adapter->stats_callout, hz, al_tick_stats, (void*)adapter); in al_eth_up_complete()
3127 mtx_unlock(&adapter->stats_mtx); in al_eth_up_complete()
3129 al_eth_mac_start(&adapter->hal_adapter); in al_eth_up_complete()
3135 struct al_eth_adapter *adapter = ifp->if_softc; in al_media_update() local
3138 mii_mediachg(adapter->mii); in al_media_update()
3166 struct al_eth_adapter *adapter = arg; in al_tick() local
3168 mii_tick(adapter->mii); in al_tick()
3171 callout_schedule(&adapter->wd_callout, hz); in al_tick()
3177 struct al_eth_adapter *adapter = arg; in al_tick_stats() local
3179 al_eth_update_stats(adapter); in al_tick_stats()
3181 callout_schedule(&adapter->stats_callout, hz); in al_tick_stats()
3185 al_eth_up(struct al_eth_adapter *adapter) in al_eth_up() argument
3187 struct ifnet *ifp = adapter->netdev; in al_eth_up()
3190 if (adapter->up) in al_eth_up()
3193 if ((adapter->flags & AL_ETH_FLAG_RESET_REQUESTED) != 0) { in al_eth_up()
3194 al_eth_function_reset(adapter); in al_eth_up()
3195 adapter->flags &= ~AL_ETH_FLAG_RESET_REQUESTED; in al_eth_up()
3206 al_eth_serdes_init(adapter); in al_eth_up()
3208 rc = al_eth_hw_init(adapter); in al_eth_up()
3212 rc = al_eth_setup_int_mode(adapter); in al_eth_up()
3214 device_printf(adapter->dev, in al_eth_up()
3220 rc = al_eth_setup_all_tx_resources(adapter); in al_eth_up()
3225 rc = al_eth_setup_all_rx_resources(adapter); in al_eth_up()
3229 rc = al_eth_request_irq(adapter); in al_eth_up()
3233 al_eth_up_complete(adapter); in al_eth_up()
3235 adapter->up = true; in al_eth_up()
3237 if (adapter->mac_mode == AL_ETH_MAC_MODE_10GbE_Serial) in al_eth_up()
3238 adapter->netdev->if_link_state = LINK_STATE_UP; in al_eth_up()
3240 if (adapter->mac_mode == AL_ETH_MAC_MODE_RGMII) { in al_eth_up()
3241 mii_mediachg(adapter->mii); in al_eth_up()
3244 mtx_lock(&adapter->wd_mtx); in al_eth_up()
3245 callout_reset(&adapter->wd_callout, hz, al_tick, adapter); in al_eth_up()
3246 mtx_unlock(&adapter->wd_mtx); in al_eth_up()
3248 mii_pollstat(adapter->mii); in al_eth_up()
3254 al_eth_free_all_rx_resources(adapter); in al_eth_up()
3256 al_eth_free_all_tx_resources(adapter); in al_eth_up()
3258 al_eth_free_irq(adapter); in al_eth_up()
3260 al_eth_hw_stop(adapter); in al_eth_up()
3262 al_eth_function_reset(adapter); in al_eth_up()
3270 struct al_eth_adapter *adapter = device_get_softc(dev); in al_shutdown() local
3272 al_eth_down(adapter); in al_shutdown()
3278 al_eth_down(struct al_eth_adapter *adapter) in al_eth_down() argument
3281 device_printf_dbg(adapter->dev, "al_eth_down: begin\n"); in al_eth_down()
3283 adapter->up = false; in al_eth_down()
3285 mtx_lock(&adapter->wd_mtx); in al_eth_down()
3286 callout_stop(&adapter->wd_callout); in al_eth_down()
3287 mtx_unlock(&adapter->wd_mtx); in al_eth_down()
3289 al_eth_disable_int_sync(adapter); in al_eth_down()
3291 mtx_lock(&adapter->stats_mtx); in al_eth_down()
3292 callout_stop(&adapter->stats_callout); in al_eth_down()
3293 mtx_unlock(&adapter->stats_mtx); in al_eth_down()
3295 al_eth_free_irq(adapter); in al_eth_down()
3296 al_eth_hw_stop(adapter); in al_eth_down()
3298 al_eth_free_all_tx_resources(adapter); in al_eth_down()
3299 al_eth_free_all_rx_resources(adapter); in al_eth_down()
3305 struct al_eth_adapter *adapter = ifp->if_softc; in al_ioctl() local
3312 error = al_eth_check_mtu(adapter, ifr->ifr_mtu); in al_ioctl()
3314 device_printf(adapter->dev, "ioctl wrong mtu %u\n", in al_ioctl()
3315 adapter->netdev->if_mtu); in al_ioctl()
3320 adapter->netdev->if_mtu = ifr->ifr_mtu; in al_ioctl()
3321 al_init(adapter); in al_ioctl()
3327 if (((ifp->if_flags ^ adapter->if_flags) & in al_ioctl()
3329 device_printf_dbg(adapter->dev, in al_ioctl()
3331 al_eth_set_rx_mode(adapter); in al_ioctl()
3334 error = al_eth_up(adapter); in al_ioctl()
3340 al_eth_down(adapter); in al_ioctl()
3345 adapter->if_flags = ifp->if_flags; in al_ioctl()
3351 device_printf_dbg(adapter->dev, in al_ioctl()
3353 al_eth_set_rx_mode(adapter); in al_ioctl()
3361 if (adapter->mii != NULL) in al_ioctl()
3363 &adapter->mii->mii_media, command); in al_ioctl()
3366 &adapter->media, command); in al_ioctl()
3418 al_init(adapter); in al_ioctl()
3451 struct al_eth_adapter *adapter = device_get_softc(dev); in al_miibus_readreg() local
3457 rc = al_eth_mdio_read(&adapter->hal_adapter, adapter->phy_addr, in al_miibus_readreg()
3463 device_printf_dbg(adapter->dev, in al_miibus_readreg()
3471 device_printf(adapter->dev, "MDIO read failed on timeout\n"); in al_miibus_readreg()
3479 struct al_eth_adapter *adapter = device_get_softc(dev); in al_miibus_writereg() local
3484 rc = al_eth_mdio_write(&adapter->hal_adapter, adapter->phy_addr, in al_miibus_writereg()
3490 device_printf(adapter->dev, in al_miibus_writereg()
3498 device_printf(adapter->dev, "MDIO write failed on timeout\n"); in al_miibus_writereg()
3506 struct al_eth_adapter *adapter = device_get_softc(dev); in al_miibus_statchg() local
3508 device_printf_dbg(adapter->dev, in al_miibus_statchg()
3510 device_printf_dbg(adapter->dev, in al_miibus_statchg()
3512 adapter->mii->mii_media_active, adapter->mii->mii_media_status); in al_miibus_statchg()
3514 if (adapter->up == 0) in al_miibus_statchg()
3517 if ((adapter->mii->mii_media_status & IFM_AVALID) != 0) { in al_miibus_statchg()
3518 if (adapter->mii->mii_media_status & IFM_ACTIVE) { in al_miibus_statchg()
3519 device_printf(adapter->dev, "link is UP\n"); in al_miibus_statchg()
3520 adapter->netdev->if_link_state = LINK_STATE_UP; in al_miibus_statchg()
3522 device_printf(adapter->dev, "link is DOWN\n"); in al_miibus_statchg()
3523 adapter->netdev->if_link_state = LINK_STATE_DOWN; in al_miibus_statchg()
3531 struct al_eth_adapter *adapter = device_get_softc(dev); in al_miibus_linkchg() local
3535 if (adapter->mii == NULL) in al_miibus_linkchg()
3538 if ((adapter->netdev->if_flags & IFF_UP) == 0) in al_miibus_linkchg()
3542 if ((adapter->mii->mii_media_status & (IFM_AVALID | IFM_ACTIVE)) != in al_miibus_linkchg()
3547 if ((adapter->mii->mii_media_active & IFM_FDX) != 0) in al_miibus_linkchg()
3550 speed = IFM_SUBTYPE(adapter->mii->mii_media_active); in al_miibus_linkchg()
3553 al_eth_mac_link_config(&adapter->hal_adapter, 0, 1, in al_miibus_linkchg()
3559 al_eth_mac_link_config(&adapter->hal_adapter, 0, 1, in al_miibus_linkchg()
3565 al_eth_mac_link_config(&adapter->hal_adapter, 0, 1, in al_miibus_linkchg()
3570 device_printf(adapter->dev, "ERROR: unknown MII media active 0x%08x\n", in al_miibus_linkchg()
3571 adapter->mii->mii_media_active); in al_miibus_linkchg()