Lines Matching defs:adapter
254 struct ena_adapter *adapter = device_private(dmadev);
262 dma_space_addr = ENA_DMA_BIT_MASK(adapter->dma_width);
267 dma->tag = adapter->sc_dmat;
308 bus_dmamap_destroy(adapter->sc_dmat, dma->map);
315 struct ena_adapter *adapter)
323 aprint_error_dev(adapter->pdev, "invalid type (type=0x%x)\n",
339 adapter->sc_btag = pa->pa_memt;
341 memtype, &adapter->sc_memaddr, &adapter->sc_mapsize, &flags);
343 aprint_error_dev(adapter->pdev, "can't get map info\n");
358 adapter->sc_mapsize = table_offset;
361 error = bus_space_map(adapter->sc_btag, adapter->sc_memaddr,
362 adapter->sc_mapsize, flags, &adapter->sc_bhandle);
364 aprint_error_dev(adapter->pdev,
373 ena_free_pci_resources(struct ena_adapter *adapter)
375 if (adapter->sc_mapsize != 0) {
376 bus_space_unmap(adapter->sc_btag, adapter->sc_bhandle,
377 adapter->sc_mapsize);
402 struct ena_adapter *adapter = if_getsoftc(ifp);
405 if ((new_mtu > adapter->max_mtu) || (new_mtu < ENA_MIN_MTU)) {
406 device_printf(adapter->pdev, "Invalid MTU setting. "
408 new_mtu, adapter->max_mtu, ENA_MIN_MTU);
412 rc = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu);
417 device_printf(adapter->pdev, "Failed to set MTU to %d\n",
431 ena_alloc_counters_rx(struct ena_adapter *adapter, struct ena_stats_rx *st, int queue)
434 device_xname(adapter->pdev), queue);
452 ena_alloc_counters_tx(struct ena_adapter *adapter, struct ena_stats_tx *st, int queue)
455 device_xname(adapter->pdev), queue);
474 ena_alloc_counters_dev(struct ena_adapter *adapter, struct ena_stats_dev *st, int queue)
477 device_xname(adapter->pdev), queue);
490 ena_alloc_counters_hwstats(struct ena_adapter *adapter, struct ena_hw_stats *st, int queue)
493 device_xname(adapter->pdev), queue);
526 ena_init_io_rings_common(struct ena_adapter *adapter, struct ena_ring *ring,
531 ring->adapter = adapter;
532 ring->ena_dev = adapter->ena_dev;
536 ena_init_io_rings(struct ena_adapter *adapter)
543 ena_dev = adapter->ena_dev;
545 for (i = 0; i < adapter->num_queues; i++) {
546 txr = &adapter->tx_ring[i];
547 rxr = &adapter->rx_ring[i];
550 ena_init_io_rings_common(adapter, txr, i);
551 ena_init_io_rings_common(adapter, rxr, i);
554 txr->ring_size = adapter->tx_ring_size;
565 ena_alloc_counters_tx(adapter, &txr->tx_stats, i);
568 rxr->ring_size = adapter->rx_ring_size;
573 ena_alloc_counters_rx(adapter, &rxr->rx_stats, i);
577 device_xname(adapter->pdev), i);
579 device_xname(adapter->pdev), i);
584 que = &adapter->que[i];
585 que->adapter = adapter;
598 ena_free_io_ring_resources(struct ena_adapter *adapter, unsigned int qid)
600 struct ena_ring *txr = &adapter->tx_ring[qid];
601 struct ena_ring *rxr = &adapter->rx_ring[qid];
613 ena_free_all_io_rings_resources(struct ena_adapter *adapter)
617 for (i = 0; i < adapter->num_queues; i++)
618 ena_free_io_ring_resources(adapter, i);
624 ena_setup_tx_dma_tag(struct ena_adapter *adapter)
629 ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev),
631 ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */
635 adapter->max_tx_sgl_size - 1, /* nsegments */
640 &adapter->tx_buf_tag);
648 ena_setup_rx_dma_tag(struct ena_adapter *adapter)
653 ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev), /* parent */
655 ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */
659 adapter->max_rx_sgl_size, /* nsegments */
664 &adapter->rx_buf_tag);
672 * @adapter: network interface device structure
678 ena_setup_tx_resources(struct ena_adapter *adapter, int qid)
680 struct ena_que *que = &adapter->que[qid];
706 err = bus_dmamap_create(adapter->sc_dmat,
707 ENA_TSO_MAXSIZE, adapter->max_tx_sgl_size - 1,
730 bus_dmamap_destroy(adapter->sc_dmat,
745 * @adapter: network interface device structure
751 ena_free_tx_resources(struct ena_adapter *adapter, int qid)
753 struct ena_ring *tx_ring = &adapter->tx_ring[qid];
768 bus_dmamap_unload(adapter->sc_dmat,
770 bus_dmamap_destroy(adapter->sc_dmat,
787 * @adapter: network interface device structure
792 ena_setup_all_tx_resources(struct ena_adapter *adapter)
796 for (i = 0; i < adapter->num_queues; i++) {
797 rc = ena_setup_tx_resources(adapter, i);
799 device_printf(adapter->pdev,
810 ena_free_tx_resources(adapter, i);
816 * @adapter: network interface device structure
821 ena_free_all_tx_resources(struct ena_adapter *adapter)
825 for (i = 0; i < adapter->num_queues; i++)
826 ena_free_tx_resources(adapter, i);
835 device_printf(rx_ring->adapter->pdev, "Invalid rx req_id: %hu\n",
840 rx_ring->adapter->reset_reason = ENA_REGS_RESET_INV_RX_REQ_ID;
841 ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, rx_ring->adapter);
848 * @adapter: network interface device structure
854 ena_setup_rx_resources(struct ena_adapter *adapter, unsigned int qid)
856 struct ena_que *que = &adapter->que[qid];
886 err = bus_dmamap_create(adapter->sc_dmat,
887 MJUM16BYTES, adapter->max_rx_sgl_size, MJUM16BYTES,
899 if ((adapter->ifp->if_capenable & IFCAP_LRO) != 0) {
902 device_printf(adapter->pdev,
907 rx_ring->lro.ifp = adapter->ifp;
925 bus_dmamap_destroy(adapter->sc_dmat,
940 * @adapter: network interface device structure
946 ena_free_rx_resources(struct ena_adapter *adapter, unsigned int qid)
948 struct ena_ring *rx_ring = &adapter->rx_ring[qid];
956 bus_dmamap_unload(adapter->sc_dmat,
958 bus_dmamap_destroy(adapter->sc_dmat,
980 * @adapter: network interface device structure
985 ena_setup_all_rx_resources(struct ena_adapter *adapter)
989 for (i = 0; i < adapter->num_queues; i++) {
990 rc = ena_setup_rx_resources(adapter, i);
992 device_printf(adapter->pdev,
1002 ena_free_rx_resources(adapter, i);
1008 * @adapter: network interface device structure
1013 ena_free_all_rx_resources(struct ena_adapter *adapter)
1017 for (i = 0; i < adapter->num_queues; i++)
1018 ena_free_rx_resources(adapter, i);
1022 ena_alloc_rx_mbuf(struct ena_adapter *adapter,
1046 adapter->sc_dmat,rx_info->mbuf, rx_info->mbuf->m_len);
1047 error = bus_dmamap_load_mbuf(adapter->sc_dmat, rx_info->map,
1057 bus_dmamap_sync(adapter->sc_dmat, rx_info->map, 0,
1077 ena_free_rx_mbuf(struct ena_adapter *adapter, struct ena_ring *rx_ring,
1086 bus_dmamap_unload(adapter->sc_dmat, rx_info->map);
1100 struct ena_adapter *adapter = rx_ring->adapter;
1123 rc = ena_alloc_rx_mbuf(adapter, rx_ring, rx_info);
1158 ena_free_rx_bufs(struct ena_adapter *adapter, unsigned int qid)
1160 struct ena_ring *rx_ring = &adapter->rx_ring[qid];
1167 ena_free_rx_mbuf(adapter, rx_ring, rx_info);
1173 * @adapter: network interface device structure
1177 ena_refill_all_rx_bufs(struct ena_adapter *adapter)
1182 for (i = 0; i < adapter->num_queues; i++) {
1183 rx_ring = &adapter->rx_ring[i];
1194 ena_free_all_rx_bufs(struct ena_adapter *adapter)
1198 for (i = 0; i < adapter->num_queues; i++)
1199 ena_free_rx_bufs(adapter, i);
1204 * @adapter: network interface device structure
1208 ena_free_tx_bufs(struct ena_adapter *adapter, unsigned int qid)
1211 struct ena_ring *tx_ring = &adapter->tx_ring[qid];
1220 device_printf(adapter->pdev,
1230 bus_dmamap_unload(adapter->sc_dmat, tx_info->map);
1237 ena_free_all_tx_bufs(struct ena_adapter *adapter)
1240 for (int i = 0; i < adapter->num_queues; i++)
1241 ena_free_tx_bufs(adapter, i);
1245 ena_destroy_all_tx_queues(struct ena_adapter *adapter)
1250 for (i = 0; i < adapter->num_queues; i++) {
1252 ena_com_destroy_io_queue(adapter->ena_dev, ena_qid);
1257 ena_destroy_all_rx_queues(struct ena_adapter *adapter)
1262 for (i = 0; i < adapter->num_queues; i++) {
1264 ena_com_destroy_io_queue(adapter->ena_dev, ena_qid);
1269 ena_destroy_all_io_queues(struct ena_adapter *adapter)
1271 ena_destroy_all_tx_queues(adapter);
1272 ena_destroy_all_rx_queues(adapter);
1278 struct ena_adapter *adapter = tx_ring->adapter;
1289 device_printf(adapter->pdev,
1292 device_printf(adapter->pdev, "Invalid req_id: %hu\n", req_id);
1300 ena_create_io_queues(struct ena_adapter *adapter)
1302 struct ena_com_dev *ena_dev = adapter->ena_dev;
1310 for (i = 0; i < adapter->num_queues; i++) {
1315 ctx.queue_size = adapter->tx_ring_size;
1320 device_printf(adapter->pdev,
1324 ring = &adapter->tx_ring[i];
1329 device_printf(adapter->pdev,
1338 for (i = 0; i < adapter->num_queues; i++) {
1343 ctx.queue_size = adapter->rx_ring_size;
1348 device_printf(adapter->pdev,
1353 ring = &adapter->rx_ring[i];
1358 device_printf(adapter->pdev,
1371 i = adapter->num_queues;
1393 struct ena_adapter *adapter;
1406 adapter = tx_ring->que->adapter;
1408 io_cq = &adapter->ena_dev->io_cq_queues[ena_qid];
1432 bus_dmamap_unload(adapter->sc_dmat, tx_info->map);
1451 &adapter->ena_dev->io_sq_queues[ena_qid],
1466 ena_com_comp_ack(&adapter->ena_dev->io_sq_queues[ena_qid],
1482 struct ena_adapter *adapter = rx_ring->adapter;
1484 if (likely(adapter->rss_support)) {
1545 struct ena_adapter *adapter;
1550 adapter = rx_ring->adapter;
1556 device_printf(adapter->pdev, "NULL mbuf in rx_info");
1567 m_set_rcvif(mbuf, rx_ring->que->adapter->ifp);
1578 bus_dmamap_unload(rx_ring->adapter->sc_dmat, rx_info->map);
1595 device_printf(adapter->pdev, "NULL mbuf in rx_info");
1620 bus_dmamap_unload(rx_ring->adapter->sc_dmat, rx_info->map);
1687 struct ena_adapter *adapter;
1702 adapter = rx_ring->que->adapter;
1703 ifp = adapter->ifp;
1706 io_cq = &adapter->ena_dev->io_cq_queues[ena_qid];
1707 io_sq = &adapter->ena_dev->io_sq_queues[ena_qid];
1714 ena_rx_ctx.max_bufs = adapter->max_rx_sgl_size;
1758 counter_u64_add_protected(adapter->hw_stats.rx_bytes,
1789 counter_u64_add_protected(adapter->hw_stats.rx_packets, 1);
1827 struct ena_adapter *adapter = (struct ena_adapter *)arg;
1829 ena_com_admin_q_comp_intr_handler(adapter->ena_dev);
1830 if (likely(ENA_FLAG_ISSET(ENA_FLAG_DEVICE_RUNNING, adapter)))
1831 ena_com_aenq_intr_handler(adapter->ena_dev, arg);
1864 struct ena_adapter *adapter = que->adapter;
1865 struct ifnet *ifp = adapter->ifp;
1882 io_cq = &adapter->ena_dev->io_cq_queues[ena_qid];
1923 ena_enable_msix(struct ena_adapter *adapter)
1930 msix_req = ENA_MAX_MSIX_VEC(adapter->num_queues);
1937 if (pci_intr_alloc(&adapter->sc_pa, &adapter->sc_intrs, counts,
1939 aprint_error_dev(adapter->pdev,
1944 adapter->sc_nintrs = counts[PCI_INTR_TYPE_MSIX];
1947 device_printf(adapter->pdev,
1949 "the number of queues\n", adapter->sc_nintrs, msix_req);
1950 adapter->num_queues = adapter->sc_nintrs - ENA_ADMIN_MSIX_VEC;
1958 ena_setup_io_intr(struct ena_adapter *adapter)
1963 for (int i = 0; i < adapter->num_queues; i++) {
1966 snprintf(adapter->irq_tbl[irq_idx].name, ENA_IRQNAME_SIZE,
1967 "%s-TxRx-%d", device_xname(adapter->pdev), i);
1968 adapter->irq_tbl[irq_idx].handler = ena_handle_msix;
1969 adapter->irq_tbl[irq_idx].data = &adapter->que[i];
1970 adapter->irq_tbl[irq_idx].vector =
1971 adapter->msix_entries[irq_idx].vector;
1973 adapter->msix_entries[irq_idx].vector);
1975 adapter->que[i].cpu = adapter->irq_tbl[irq_idx].cpu =
1984 adapter->que[i].cpu = adapter->irq_tbl[irq_idx].cpu =
1993 ena_request_mgmnt_irq(struct ena_adapter *adapter)
1998 pci_chipset_tag_t pc = adapter->sc_pa.pa_pc;
2001 KASSERT(adapter->sc_intrs != NULL);
2002 KASSERT(adapter->sc_ihs[irq_slot] == NULL);
2004 pci_intr_setattr(pc, &adapter->sc_intrs[irq_slot],
2008 device_xname(adapter->pdev));
2009 intrstr = pci_intr_string(pc, adapter->sc_intrs[irq_slot],
2012 adapter->sc_ihs[irq_slot] = pci_intr_establish_xname(
2013 pc, adapter->sc_intrs[irq_slot],
2014 IPL_NET, ena_intr_msix_mgmnt, adapter, intr_xname);
2016 if (adapter->sc_ihs[irq_slot] == NULL) {
2017 device_printf(adapter->pdev, "failed to register "
2023 aprint_normal_dev(adapter->pdev,
2030 ena_request_io_irq(struct ena_adapter *adapter)
2035 pci_chipset_tag_t pc = adapter->sc_pa.pa_pc;
2041 KASSERT(adapter->sc_intrs != NULL);
2045 for (i = 0; i < adapter->num_queues; i++) {
2049 KASSERT((void *)adapter->sc_intrs[irq_slot] != NULL);
2050 KASSERT(adapter->sc_ihs[irq_slot] == NULL);
2052 pci_intr_setattr(pc, &adapter->sc_intrs[irq_slot],
2056 device_xname(adapter->pdev), i);
2057 intrstr = pci_intr_string(pc, adapter->sc_intrs[irq_slot],
2060 vih = pci_intr_establish_xname(adapter->sc_pa.pa_pc,
2061 adapter->sc_intrs[irq_slot], IPL_NET,
2062 ena_handle_msix, &adapter->que[i], intr_xname);
2065 device_printf(adapter->pdev, "failed to register "
2076 aprint_normal_dev(adapter->pdev,
2080 aprint_normal_dev(adapter->pdev,
2084 adapter->sc_ihs[irq_slot] = vih;
2103 KASSERT(adapter->sc_ihs[irq_slot] != NULL);
2104 pci_intr_disestablish(adapter->sc_pa.pa_pc, adapter->sc_ihs[irq_slot]);
2105 adapter->sc_ihs[irq_slot] = NULL;
2112 ena_free_mgmnt_irq(struct ena_adapter *adapter)
2116 if (adapter->sc_ihs[irq_slot]) {
2117 pci_intr_disestablish(adapter->sc_pa.pa_pc,
2118 adapter->sc_ihs[irq_slot]);
2119 adapter->sc_ihs[irq_slot] = NULL;
2124 ena_free_io_irq(struct ena_adapter *adapter)
2128 for (int i = 0; i < adapter->num_queues; i++) {
2131 if (adapter->sc_ihs[irq_slot]) {
2132 pci_intr_disestablish(adapter->sc_pa.pa_pc,
2133 adapter->sc_ihs[irq_slot]);
2134 adapter->sc_ihs[irq_slot] = NULL;
2140 ena_free_irqs(struct ena_adapter* adapter)
2143 ena_free_io_irq(adapter);
2144 ena_free_mgmnt_irq(adapter);
2145 ena_disable_msix(adapter);
2149 ena_disable_msix(struct ena_adapter *adapter)
2151 pci_intr_release(adapter->sc_pa.pa_pc, adapter->sc_intrs,
2152 adapter->sc_nintrs);
2156 ena_unmask_all_io_irqs(struct ena_adapter *adapter)
2164 for (i = 0; i < adapter->num_queues; i++) {
2166 io_cq = &adapter->ena_dev->io_cq_queues[ena_qid];
2174 ena_rss_configure(struct ena_adapter *adapter)
2176 struct ena_com_dev *ena_dev = adapter->ena_dev;
2198 ena_up_complete(struct ena_adapter *adapter)
2202 if (likely(adapter->rss_support)) {
2203 rc = ena_rss_configure(adapter);
2208 rc = ena_change_mtu(adapter->ifp, adapter->ifp->if_mtu);
2212 ena_refill_all_rx_bufs(adapter);
2213 ena_reset_counters((struct evcnt *)&adapter->hw_stats,
2214 sizeof(adapter->hw_stats),
2221 ena_up(struct ena_adapter *adapter)
2225 KASSERT(ENA_CORE_MTX_OWNED(adapter));
2228 if (unlikely(device_is_attached(adapter->pdev) == 0)) {
2229 device_printf(adapter->pdev, "device is not attached!\n");
2234 if (unlikely(!ENA_FLAG_ISSET(ENA_FLAG_DEVICE_RUNNING, adapter))) {
2235 device_printf(adapter->pdev, "device is not running!\n");
2239 if (!ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter)) {
2240 device_printf(adapter->pdev, "device is going UP\n");
2243 rc = ena_setup_all_tx_resources(adapter);
2250 rc = ena_setup_all_rx_resources(adapter);
2257 rc = ena_create_io_queues(adapter);
2265 rc = ena_request_io_irq(adapter);
2271 if (unlikely(ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter)))
2272 if_link_state_change(adapter->ifp, LINK_STATE_UP);
2274 rc = ena_up_complete(adapter);
2278 counter_u64_add(adapter->dev_stats.interface_up, 1);
2280 ena_update_hwassist(adapter);
2282 if_setdrvflagbits(adapter->ifp, IFF_RUNNING,
2284 ena_set_stopping_flag(adapter, false);
2286 callout_schedule(&adapter->timer_service, hz);
2288 ENA_FLAG_SET_ATOMIC(ENA_FLAG_DEV_UP, adapter);
2290 ena_unmask_all_io_irqs(adapter);
2296 ena_destroy_all_io_queues(adapter);
2298 ena_free_all_rx_resources(adapter);
2300 ena_free_all_tx_resources(adapter);
2302 ena_free_io_irq(adapter);
2311 struct ena_adapter *adapter;
2314 adapter = if_getsoftc(ifp);
2315 stats = &adapter->hw_stats;
2344 struct ena_adapter *adapter = if_getsoftc(ifp);
2347 KASSERT(ENA_CORE_MTX_OWNED(adapter));
2352 if (!ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter)) {
2363 struct ena_adapter *adapter = if_getsoftc(ifp);
2365 if (!ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter)) {
2366 ENA_CORE_MTX_LOCK(adapter);
2367 ena_up(adapter);
2368 ENA_CORE_MTX_UNLOCK(adapter);
2376 struct ena_adapter *adapter;
2378 adapter = ifp->if_softc;
2380 adapter)) {
2381 ENA_CORE_MTX_LOCK(adapter);
2382 ena_down(adapter);
2383 ENA_CORE_MTX_UNLOCK(adapter);
2391 struct ena_adapter *adapter;
2395 adapter = ifp->if_softc;
2406 ENA_CORE_MTX_LOCK(adapter);
2407 ena_down(adapter);
2411 rc = ena_up(adapter);
2412 ENA_CORE_MTX_UNLOCK(adapter);
2431 ENA_CORE_MTX_LOCK(adapter);
2432 ena_down(adapter);
2433 rc = ena_up(adapter);
2434 ENA_CORE_MTX_UNLOCK(adapter);
2496 ena_update_hwassist(struct ena_adapter *adapter)
2498 struct ifnet *ifp = adapter->ifp;
2499 uint32_t feat = adapter->tx_offload_cap;
2532 ena_setup_ifnet(device_t pdev, struct ena_adapter *adapter,
2538 ifp = adapter->ifp = &adapter->sc_ec.ec_if;
2546 if_setsoftc(ifp, adapter);
2561 if_setsendqlen(ifp, adapter->tx_ring_size);
2572 adapter->sc_ec.ec_capabilities |= ETHERCAP_JUMBO_MTU;
2579 ifp->if_hw_tsomaxsegcount = adapter->max_tx_sgl_size - 1;
2587 * Specify the media types supported by this adapter and register
2590 adapter->sc_ec.ec_ifmedia = &adapter->media;
2591 ifmedia_init_with_lock(&adapter->media, IFM_IMASK,
2592 ena_media_change, ena_media_status, &adapter->global_mtx);
2593 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
2594 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
2598 ether_ifattach(ifp, adapter->mac_addr);
2605 ena_set_stopping_flag(struct ena_adapter *adapter, bool value)
2610 for (i = 0; i < adapter->num_queues; i++) {
2612 ring = adapter->que[i].tx_ring;
2618 ring = adapter->que[i].rx_ring;
2626 ena_down(struct ena_adapter *adapter)
2630 KASSERT(ENA_CORE_MTX_OWNED(adapter));
2632 if (ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter)) {
2633 device_printf(adapter->pdev, "device is going DOWN\n");
2634 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_DEV_UP, adapter);
2635 if_setdrvflagbits(adapter->ifp, IFF_OACTIVE,
2638 ena_set_stopping_flag(adapter, true);
2640 callout_halt(&adapter->timer_service, NULL);
2641 for (i = 0; i < adapter->num_queues; i++) {
2642 struct ena_ring *rx_ring = adapter->que[i].rx_ring;
2647 if (ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter)) {
2648 rc = ena_com_dev_reset(adapter->ena_dev,
2649 adapter->reset_reason);
2651 device_printf(adapter->pdev,
2655 ena_destroy_all_io_queues(adapter);
2657 ena_free_all_tx_bufs(adapter);
2658 ena_free_all_rx_bufs(adapter);
2659 ena_free_all_tx_resources(adapter);
2660 ena_free_all_rx_resources(adapter);
2662 ena_free_io_irq(adapter);
2664 counter_u64_add(adapter->dev_stats.interface_down, 1);
2767 struct ena_adapter *adapter;
2771 adapter = tx_ring->adapter;
2775 if (num_frags < adapter->max_tx_sgl_size)
2780 adapter->max_tx_sgl_size - 1);
2795 struct ena_adapter *adapter;
2812 adapter = tx_ring->que->adapter;
2813 ena_dev = adapter->ena_dev;
2844 rc = bus_dmamap_load_mbuf(adapter->sc_dmat, tx_info->map,
2878 device_printf(adapter->pdev, "failed to prepare tx bufs\n");
2888 counter_u64_add_protected(adapter->hw_stats.tx_packets, 1);
2889 counter_u64_add_protected(adapter->hw_stats.tx_bytes,
2900 bus_dmamap_sync(adapter->sc_dmat, tx_info->map, 0,
2907 bus_dmamap_unload(adapter->sc_dmat, tx_info->map);
2916 struct ena_adapter *adapter = tx_ring->adapter;
2926 if (unlikely((if_getdrvflags(adapter->ifp) & IFF_RUNNING) == 0))
2929 if (unlikely(!ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter)))
2933 io_sq = &adapter->ena_dev->io_sq_queues[ena_qid];
2935 nsr = IF_STAT_GETREF(adapter->ifp);
2938 if (unlikely(!ena_com_sq_have_enough_space(io_sq, adapter->max_tx_sgl_size)))
2949 if_statinc_ref(adapter->ifp, nsr, if_opackets);
2950 if_statadd_ref(adapter->ifp, nsr, if_obytes,
2953 if_statinc_ref(adapter->ifp, nsr, if_omcasts);
2955 if_statinc_ref(adapter->ifp, nsr, if_oerrors);
2961 if (unlikely((if_getdrvflags(adapter->ifp) &
2963 IF_STAT_PUTREF(adapter->ifp);
2973 bpf_mtap(adapter->ifp, mbuf, BPF_D_OUT);
2985 IF_STAT_PUTREF(adapter->ifp);
3002 struct ifnet *ifp = tx_ring->adapter->ifp;
3021 struct ena_adapter *adapter = ifp->if_softc;
3027 if (unlikely((if_getdrvflags(adapter->ifp) & IFF_RUNNING) == 0))
3036 i = cpu_index(curcpu()) % adapter->num_queues;
3038 tx_ring = &adapter->tx_ring[i];
3069 struct ena_adapter *adapter = ifp->if_softc;
3070 struct ena_ring *tx_ring = adapter->tx_ring;
3073 for(i = 0; i < adapter->num_queues; ++i, ++tx_ring)
3086 struct ena_adapter *adapter,
3105 ena_calc_queue_size(struct ena_adapter *adapter, uint16_t *max_tx_sgl_size,
3131 device_printf(adapter->pdev, "Invalid queue size\n");
3146 struct ena_adapter *adapter = device_private(self);
3147 struct ena_com_dev *ena_dev = adapter->ena_dev;
3148 device_t dev = adapter->pdev;
3158 qid = i % adapter->num_queues;
3180 adapter->rss_support = true;
3185 adapter->rss_support = false;
3235 ena_device_init(struct ena_adapter *adapter, device_t pdev,
3238 struct ena_com_dev* ena_dev = adapter->ena_dev;
3254 const int rev = PCI_REVISION(adapter->sc_pa.pa_class);
3276 adapter->dma_width = dma_width;
3325 static int ena_enable_msix_and_set_admin_interrupts(struct ena_adapter *adapter,
3328 struct ena_com_dev *ena_dev = adapter->ena_dev;
3331 rc = ena_enable_msix(adapter);
3333 device_printf(adapter->pdev, "Error with MSI-X enablement\n");
3337 rc = ena_request_mgmnt_irq(adapter);
3339 device_printf(adapter->pdev, "Cannot setup mgmnt queue intr\n");
3350 ena_disable_msix(adapter);
3359 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
3366 old = adapter->hw_stats.rx_drops.ev_count;
3368 counter_u64_add(adapter->hw_stats.rx_drops, rx_drops - old);
3369 if_statadd(adapter->ifp, if_iqdrops, rx_drops - old);
3372 atomic_store_release(&adapter->keep_alive_timestamp, getsbinuptime());
3376 static void check_for_missing_keep_alive(struct ena_adapter *adapter)
3380 if (adapter->wd_active == 0)
3383 if (likely(adapter->keep_alive_timeout == 0))
3386 timestamp = atomic_load_acquire(&adapter->keep_alive_timestamp);
3389 if (unlikely(time > adapter->keep_alive_timeout)) {
3390 device_printf(adapter->pdev,
3392 counter_u64_add(adapter->dev_stats.wd_expired, 1);
3393 adapter->reset_reason = ENA_REGS_RESET_KEEP_ALIVE_TO;
3394 ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
3399 static void check_for_admin_com_state(struct ena_adapter *adapter)
3401 if (unlikely(ena_com_get_admin_running_state(adapter->ena_dev) ==
3403 device_printf(adapter->pdev,
3405 counter_u64_add(adapter->dev_stats.admin_q_pause, 1);
3406 adapter->reset_reason = ENA_REGS_RESET_ADMIN_TO;
3407 ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
3412 check_missing_comp_in_queue(struct ena_adapter *adapter,
3432 if (unlikely(bttosbt(time) > adapter->missing_tx_timeout)) {
3444 adapter->missing_tx_threshold)) {
3445 device_printf(adapter->pdev,
3449 missed_tx, adapter->missing_tx_threshold);
3450 adapter->reset_reason =
3453 adapter);
3469 check_for_missing_tx_completions(struct ena_adapter *adapter)
3477 if (!ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter))
3480 if (ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))
3483 if (adapter->missing_tx_timeout == 0)
3486 budget = adapter->missing_tx_max_queues;
3488 for (i = adapter->next_monitored_tx_qid; i < adapter->num_queues; i++) {
3489 tx_ring = &adapter->tx_ring[i];
3491 rc = check_missing_comp_in_queue(adapter, tx_ring);
3502 adapter->next_monitored_tx_qid = i % adapter->num_queues;
3518 check_for_empty_rx_ring(struct ena_adapter *adapter)
3523 if (!ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter))
3526 if (ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))
3529 for (i = 0; i < adapter->num_queues; i++) {
3530 rx_ring = &adapter->rx_ring[i];
3540 device_printf(adapter->pdev,
3563 struct ena_adapter *adapter = (struct ena_adapter *)data;
3565 adapter->ena_dev->host_attr.host_info;
3567 check_for_missing_keep_alive(adapter);
3569 check_for_admin_com_state(adapter);
3571 check_for_missing_tx_completions(adapter);
3573 check_for_empty_rx_ring(adapter);
3576 ena_update_host_info(host_info, adapter->ifp);
3578 if (unlikely(ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
3579 device_printf(adapter->pdev, "Trigger reset is on\n");
3580 workqueue_enqueue(adapter->reset_tq, &adapter->reset_task,
3588 if (likely(ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter)))
3589 callout_schedule(&adapter->timer_service, hz);
3596 struct ena_adapter *adapter = (struct ena_adapter *)arg;
3597 struct ena_com_dev *ena_dev = adapter->ena_dev;
3601 if (unlikely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
3602 device_printf(adapter->pdev,
3607 ENA_CORE_MTX_LOCK(adapter);
3609 callout_halt(&adapter->timer_service, NULL);
3611 dev_up = ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter);
3614 ena_down(adapter);
3615 ena_free_mgmnt_irq(adapter);
3616 ena_disable_msix(adapter);
3622 adapter->reset_reason = ENA_REGS_RESET_NORMAL;
3623 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
3626 rc = ena_device_init(adapter, adapter->pdev, &get_feat_ctx,
3627 &adapter->wd_active);
3629 device_printf(adapter->pdev,
3635 rc = ena_enable_msix_and_set_admin_interrupts(adapter,
3636 adapter->num_queues);
3638 device_printf(adapter->pdev, "Enable MSI-X failed\n");
3644 rc = ena_up(adapter);
3646 device_printf(adapter->pdev,
3652 ENA_CORE_MTX_UNLOCK(adapter);
3657 ena_free_mgmnt_irq(adapter);
3658 ena_disable_msix(adapter);
3662 device_printf(adapter->pdev, "ENA reset failed!\n");
3663 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_DEVICE_RUNNING, adapter);
3664 ENA_CORE_MTX_UNLOCK(adapter);
3673 * ena_attach initializes an adapter identified by a device structure.
3674 * The OS initialization, configuring of the adapter private structure,
3683 struct ena_adapter *adapter = device_private(self);
3692 adapter->pdev = self;
3693 adapter->ifp = &adapter->sc_ec.ec_if;
3694 adapter->sc_pa = *pa; /* used after attach for adapter reset too */
3697 adapter->sc_dmat = pa->pa_dmat64;
3699 adapter->sc_dmat = pa->pa_dmat;
3709 mutex_init(&adapter->global_mtx, MUTEX_DEFAULT, IPL_SOFTNET);
3712 adapter->keep_alive_timeout = DEFAULT_KEEP_ALIVE_TO;
3713 adapter->missing_tx_timeout = DEFAULT_TX_CMP_TO;
3714 adapter->missing_tx_max_queues = DEFAULT_TX_MONITORED_QUEUES;
3715 adapter->missing_tx_threshold = DEFAULT_TX_CMP_THRESHOLD;
3720 rc = ena_allocate_pci_resources(pa, adapter);
3723 ena_free_pci_resources(adapter);
3730 adapter->ena_dev = ena_dev;
3735 ((struct ena_bus*)(ena_dev->bus))->reg_bar_t = adapter->sc_btag;
3736 ((struct ena_bus*)(ena_dev->bus))->reg_bar_h = adapter->sc_bhandle;
3741 rc = ena_device_init(adapter, self, &get_feat_ctx, &adapter->wd_active);
3748 adapter->keep_alive_timestamp = getsbinuptime();
3750 adapter->tx_offload_cap = get_feat_ctx.offload.tx;
3753 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_DEV_UP, adapter);
3755 memcpy(adapter->mac_addr, get_feat_ctx.dev_attr.mac_addr,
3759 io_queue_num = ena_calc_io_queue_num(pa, adapter, &get_feat_ctx);
3763 adapter->num_queues = io_queue_num;
3765 adapter->max_mtu = get_feat_ctx.dev_attr.max_mtu;
3768 queue_size = ena_calc_queue_size(adapter,&tx_sgl_size,
3775 adapter->reset_reason = ENA_REGS_RESET_NORMAL;
3777 adapter->tx_ring_size = queue_size;
3778 adapter->rx_ring_size = queue_size;
3780 adapter->max_tx_sgl_size = tx_sgl_size;
3781 adapter->max_rx_sgl_size = rx_sgl_size;
3785 rc = ena_setup_tx_dma_tag(adapter);
3791 rc = ena_setup_rx_dma_tag(adapter);
3800 ena_init_io_rings(adapter);
3803 rc = ena_setup_ifnet(self, adapter, &get_feat_ctx);
3809 rc = ena_enable_msix_and_set_admin_interrupts(adapter, io_queue_num);
3816 callout_init(&adapter->timer_service, CALLOUT_MPSAFE);
3817 callout_setfunc(&adapter->timer_service, ena_timer_service, adapter);
3820 rc = workqueue_create(&adapter->reset_tq, "ena_reset_enq",
3821 ena_reset_task, adapter, 0, IPL_NET, WQ_PERCPU | WQ_MPSAFE);
3829 ena_alloc_counters_dev(adapter, &adapter->dev_stats, io_queue_num);
3830 ena_alloc_counters_hwstats(adapter, &adapter->hw_stats, io_queue_num);
3832 ena_sysctl_add_nodes(adapter);
3838 if_setdrvflagbits(adapter->ifp, IFF_OACTIVE, IFF_RUNNING);
3839 ena_set_stopping_flag(adapter, false);
3841 ENA_FLAG_SET_ATOMIC(ENA_FLAG_DEVICE_RUNNING, adapter);
3845 if_detach(adapter->ifp);
3847 ena_free_all_io_rings_resources(adapter);
3849 ena_free_rx_dma_tag(adapter);
3851 ena_free_tx_dma_tag(adapter);
3860 ena_free_pci_resources(adapter);
3873 struct ena_adapter *adapter = device_private(pdev);
3874 struct ena_com_dev *ena_dev = adapter->ena_dev;
3880 if (VLAN_ATTACHED(&adapter->sc_ec)) {
3881 device_printf(adapter->pdev ,"VLAN is in use, detach first\n");
3886 ENA_CORE_MTX_LOCK(adapter);
3887 ena_down(adapter);
3888 ENA_CORE_MTX_UNLOCK(adapter);
3891 callout_halt(&adapter->timer_service, NULL);
3892 callout_destroy(&adapter->timer_service);
3893 workqueue_wait(adapter->reset_tq, &adapter->reset_task);
3894 workqueue_destroy(adapter->reset_tq);
3895 adapter->reset_tq = NULL;
3897 ena_free_all_io_rings_resources(adapter);
3899 if (likely(adapter->rss_support))
3903 rc = ena_free_rx_dma_tag(adapter);
3905 device_printf(adapter->pdev,
3908 rc = ena_free_tx_dma_tag(adapter);
3910 device_printf(adapter->pdev,
3915 if (ENA_FLAG_ISSET(ENA_FLAG_DEVICE_RUNNING, adapter))
3916 ena_com_dev_reset(ena_dev, adapter->reset_reason);
3920 ena_free_irqs(adapter);
3930 ena_free_pci_resources(adapter);
3932 ena_free_counters((struct evcnt *)&adapter->hw_stats,
3935 ena_free_counters((struct evcnt *)&adapter->dev_stats,
3939 if (adapter->ifp != NULL) {
3940 ether_ifdetach(adapter->ifp);
3941 if_detach(adapter->ifp);
3943 ifmedia_fini(&adapter->media);
3945 mutex_destroy(&adapter->global_mtx);
3967 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
3973 ifp = adapter->ifp;
3978 device_printf(adapter->pdev, "link is UP\n");
3979 ENA_FLAG_SET_ATOMIC(ENA_FLAG_LINK_UP, adapter);
3982 device_printf(adapter->pdev, "link is DOWN\n");
3983 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_LINK_UP, adapter);