Lines Matching refs:adapter
242 struct ena_adapter* adapter = device_get_softc(dmadev); in ena_dma_alloc() local
249 dma_space_addr = ENA_DMA_BIT_MASK(adapter->dma_width); in ena_dma_alloc()
299 ena_allocate_pci_resources(struct ena_adapter* adapter) in ena_allocate_pci_resources() argument
301 device_t pdev = adapter->pdev; in ena_allocate_pci_resources()
305 adapter->memory = NULL; in ena_allocate_pci_resources()
306 adapter->registers = bus_alloc_resource_any(pdev, SYS_RES_MEMORY, in ena_allocate_pci_resources()
308 if (unlikely(adapter->registers == NULL)) { in ena_allocate_pci_resources()
318 ena_free_pci_resources(struct ena_adapter *adapter) in ena_free_pci_resources() argument
320 device_t pdev = adapter->pdev; in ena_free_pci_resources()
322 if (adapter->memory != NULL) { in ena_free_pci_resources()
324 PCIR_BAR(ENA_MEM_BAR), adapter->memory); in ena_free_pci_resources()
327 if (adapter->registers != NULL) { in ena_free_pci_resources()
329 PCIR_BAR(ENA_REG_BAR), adapter->registers); in ena_free_pci_resources()
366 struct ena_adapter *adapter = if_getsoftc(ifp); in ena_change_mtu() local
369 if ((new_mtu > adapter->max_mtu) || (new_mtu < ENA_MIN_MTU)) { in ena_change_mtu()
370 device_printf(adapter->pdev, "Invalid MTU setting. " in ena_change_mtu()
372 new_mtu, adapter->max_mtu, ENA_MIN_MTU); in ena_change_mtu()
376 rc = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu); in ena_change_mtu()
381 device_printf(adapter->pdev, "Failed to set MTU to %d\n", in ena_change_mtu()
416 ena_init_io_rings_common(struct ena_adapter *adapter, struct ena_ring *ring, in ena_init_io_rings_common() argument
421 ring->adapter = adapter; in ena_init_io_rings_common()
422 ring->ena_dev = adapter->ena_dev; in ena_init_io_rings_common()
426 ena_init_io_rings(struct ena_adapter *adapter) in ena_init_io_rings() argument
433 ena_dev = adapter->ena_dev; in ena_init_io_rings()
435 for (i = 0; i < adapter->num_queues; i++) { in ena_init_io_rings()
436 txr = &adapter->tx_ring[i]; in ena_init_io_rings()
437 rxr = &adapter->rx_ring[i]; in ena_init_io_rings()
440 ena_init_io_rings_common(adapter, txr, i); in ena_init_io_rings()
441 ena_init_io_rings_common(adapter, rxr, i); in ena_init_io_rings()
444 txr->ring_size = adapter->tx_ring_size; in ena_init_io_rings()
459 rxr->ring_size = adapter->rx_ring_size; in ena_init_io_rings()
469 device_get_nameunit(adapter->pdev), i); in ena_init_io_rings()
471 device_get_nameunit(adapter->pdev), i); in ena_init_io_rings()
476 que = &adapter->que[i]; in ena_init_io_rings()
477 que->adapter = adapter; in ena_init_io_rings()
491 ena_free_io_ring_resources(struct ena_adapter *adapter, unsigned int qid) in ena_free_io_ring_resources() argument
493 struct ena_ring *txr = &adapter->tx_ring[qid]; in ena_free_io_ring_resources()
494 struct ena_ring *rxr = &adapter->rx_ring[qid]; in ena_free_io_ring_resources()
510 ena_free_all_io_rings_resources(struct ena_adapter *adapter) in ena_free_all_io_rings_resources() argument
514 for (i = 0; i < adapter->num_queues; i++) in ena_free_all_io_rings_resources()
515 ena_free_io_ring_resources(adapter, i); in ena_free_all_io_rings_resources()
520 ena_setup_tx_dma_tag(struct ena_adapter *adapter) in ena_setup_tx_dma_tag() argument
525 ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev), in ena_setup_tx_dma_tag()
527 ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */ in ena_setup_tx_dma_tag()
531 adapter->max_tx_sgl_size - 1, /* nsegments */ in ena_setup_tx_dma_tag()
536 &adapter->tx_buf_tag); in ena_setup_tx_dma_tag()
542 ena_free_tx_dma_tag(struct ena_adapter *adapter) in ena_free_tx_dma_tag() argument
546 ret = bus_dma_tag_destroy(adapter->tx_buf_tag); in ena_free_tx_dma_tag()
549 adapter->tx_buf_tag = NULL; in ena_free_tx_dma_tag()
555 ena_setup_rx_dma_tag(struct ena_adapter *adapter) in ena_setup_rx_dma_tag() argument
560 ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev), /* parent */ in ena_setup_rx_dma_tag()
562 ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */ in ena_setup_rx_dma_tag()
566 adapter->max_rx_sgl_size, /* nsegments */ in ena_setup_rx_dma_tag()
571 &adapter->rx_buf_tag); in ena_setup_rx_dma_tag()
577 ena_free_rx_dma_tag(struct ena_adapter *adapter) in ena_free_rx_dma_tag() argument
581 ret = bus_dma_tag_destroy(adapter->rx_buf_tag); in ena_free_rx_dma_tag()
584 adapter->rx_buf_tag = NULL; in ena_free_rx_dma_tag()
597 ena_setup_tx_resources(struct ena_adapter *adapter, int qid) in ena_setup_tx_resources() argument
599 struct ena_que *que = &adapter->que[qid]; in ena_setup_tx_resources()
630 drbr_flush(adapter->ifp, tx_ring->br); in ena_setup_tx_resources()
635 err = bus_dmamap_create(adapter->tx_buf_tag, 0, in ena_setup_tx_resources()
660 device_get_nameunit(adapter->pdev), que->cpu); in ena_setup_tx_resources()
663 "%s txeq %d", device_get_nameunit(adapter->pdev), que->cpu); in ena_setup_tx_resources()
670 bus_dmamap_destroy(adapter->tx_buf_tag, in ena_setup_tx_resources()
690 ena_free_tx_resources(struct ena_adapter *adapter, int qid) in ena_free_tx_resources() argument
692 struct ena_ring *tx_ring = &adapter->tx_ring[qid]; in ena_free_tx_resources()
702 drbr_flush(adapter->ifp, tx_ring->br); in ena_free_tx_resources()
708 bus_dmamap_unload(adapter->tx_buf_tag, in ena_free_tx_resources()
710 bus_dmamap_destroy(adapter->tx_buf_tag, in ena_free_tx_resources()
730 ena_setup_all_tx_resources(struct ena_adapter *adapter) in ena_setup_all_tx_resources() argument
734 for (i = 0; i < adapter->num_queues; i++) { in ena_setup_all_tx_resources()
735 rc = ena_setup_tx_resources(adapter, i); in ena_setup_all_tx_resources()
737 device_printf(adapter->pdev, in ena_setup_all_tx_resources()
748 ena_free_tx_resources(adapter, i); in ena_setup_all_tx_resources()
759 ena_free_all_tx_resources(struct ena_adapter *adapter) in ena_free_all_tx_resources() argument
763 for (i = 0; i < adapter->num_queues; i++) in ena_free_all_tx_resources()
764 ena_free_tx_resources(adapter, i); in ena_free_all_tx_resources()
773 device_printf(rx_ring->adapter->pdev, "Invalid rx req_id: %hu\n", in validate_rx_req_id()
778 rx_ring->adapter->reset_reason = ENA_REGS_RESET_INV_RX_REQ_ID; in validate_rx_req_id()
779 rx_ring->adapter->trigger_reset = true; in validate_rx_req_id()
792 ena_setup_rx_resources(struct ena_adapter *adapter, unsigned int qid) in ena_setup_rx_resources() argument
794 struct ena_que *que = &adapter->que[qid]; in ena_setup_rx_resources()
826 err = bus_dmamap_create(adapter->rx_buf_tag, 0, in ena_setup_rx_resources()
836 if ((adapter->ifp->if_capenable & IFCAP_LRO) != 0) { in ena_setup_rx_resources()
839 device_printf(adapter->pdev, in ena_setup_rx_resources()
844 rx_ring->lro.ifp = adapter->ifp; in ena_setup_rx_resources()
858 device_get_nameunit(adapter->pdev), que->cpu); in ena_setup_rx_resources()
861 "%s rx_ring cmpl %d", device_get_nameunit(adapter->pdev), que->cpu); in ena_setup_rx_resources()
868 bus_dmamap_destroy(adapter->rx_buf_tag, in ena_setup_rx_resources()
887 ena_free_rx_resources(struct ena_adapter *adapter, unsigned int qid) in ena_free_rx_resources() argument
889 struct ena_ring *rx_ring = &adapter->rx_ring[qid]; in ena_free_rx_resources()
900 bus_dmamap_unload(adapter->rx_buf_tag, in ena_free_rx_resources()
902 bus_dmamap_destroy(adapter->rx_buf_tag, in ena_free_rx_resources()
924 ena_setup_all_rx_resources(struct ena_adapter *adapter) in ena_setup_all_rx_resources() argument
928 for (i = 0; i < adapter->num_queues; i++) { in ena_setup_all_rx_resources()
929 rc = ena_setup_rx_resources(adapter, i); in ena_setup_all_rx_resources()
931 device_printf(adapter->pdev, in ena_setup_all_rx_resources()
941 ena_free_rx_resources(adapter, i); in ena_setup_all_rx_resources()
952 ena_free_all_rx_resources(struct ena_adapter *adapter) in ena_free_all_rx_resources() argument
956 for (i = 0; i < adapter->num_queues; i++) in ena_free_all_rx_resources()
957 ena_free_rx_resources(adapter, i); in ena_free_all_rx_resources()
961 ena_alloc_rx_mbuf(struct ena_adapter *adapter, in ena_alloc_rx_mbuf() argument
994 adapter->rx_buf_tag,rx_info->mbuf, rx_info->mbuf->m_len); in ena_alloc_rx_mbuf()
995 error = bus_dmamap_load_mbuf_sg(adapter->rx_buf_tag, rx_info->map, in ena_alloc_rx_mbuf()
1005 bus_dmamap_sync(adapter->rx_buf_tag, rx_info->map, BUS_DMASYNC_PREREAD); in ena_alloc_rx_mbuf()
1024 ena_free_rx_mbuf(struct ena_adapter *adapter, struct ena_ring *rx_ring, in ena_free_rx_mbuf() argument
1033 bus_dmamap_unload(adapter->rx_buf_tag, rx_info->map); in ena_free_rx_mbuf()
1047 struct ena_adapter *adapter = rx_ring->adapter; in ena_refill_rx_bufs() local
1066 rc = ena_alloc_rx_mbuf(adapter, rx_ring, rx_info); in ena_refill_rx_bufs()
1101 ena_free_rx_bufs(struct ena_adapter *adapter, unsigned int qid) in ena_free_rx_bufs() argument
1103 struct ena_ring *rx_ring = &adapter->rx_ring[qid]; in ena_free_rx_bufs()
1110 ena_free_rx_mbuf(adapter, rx_ring, rx_info); in ena_free_rx_bufs()
1120 ena_refill_all_rx_bufs(struct ena_adapter *adapter) in ena_refill_all_rx_bufs() argument
1125 for (i = 0; i < adapter->num_queues; i++) { in ena_refill_all_rx_bufs()
1126 rx_ring = &adapter->rx_ring[i]; in ena_refill_all_rx_bufs()
1137 ena_free_all_rx_bufs(struct ena_adapter *adapter) in ena_free_all_rx_bufs() argument
1141 for (i = 0; i < adapter->num_queues; i++) in ena_free_all_rx_bufs()
1142 ena_free_rx_bufs(adapter, i); in ena_free_all_rx_bufs()
1151 ena_free_tx_bufs(struct ena_adapter *adapter, unsigned int qid) in ena_free_tx_bufs() argument
1154 struct ena_ring *tx_ring = &adapter->tx_ring[qid]; in ena_free_tx_bufs()
1164 device_printf(adapter->pdev, in ena_free_tx_bufs()
1174 bus_dmamap_unload(adapter->tx_buf_tag, tx_info->map); in ena_free_tx_bufs()
1182 ena_free_all_tx_bufs(struct ena_adapter *adapter) in ena_free_all_tx_bufs() argument
1185 for (int i = 0; i < adapter->num_queues; i++) in ena_free_all_tx_bufs()
1186 ena_free_tx_bufs(adapter, i); in ena_free_all_tx_bufs()
1190 ena_destroy_all_tx_queues(struct ena_adapter *adapter) in ena_destroy_all_tx_queues() argument
1195 for (i = 0; i < adapter->num_queues; i++) { in ena_destroy_all_tx_queues()
1197 ena_com_destroy_io_queue(adapter->ena_dev, ena_qid); in ena_destroy_all_tx_queues()
1202 ena_destroy_all_rx_queues(struct ena_adapter *adapter) in ena_destroy_all_rx_queues() argument
1207 for (i = 0; i < adapter->num_queues; i++) { in ena_destroy_all_rx_queues()
1209 ena_com_destroy_io_queue(adapter->ena_dev, ena_qid); in ena_destroy_all_rx_queues()
1214 ena_destroy_all_io_queues(struct ena_adapter *adapter) in ena_destroy_all_io_queues() argument
1216 ena_destroy_all_tx_queues(adapter); in ena_destroy_all_io_queues()
1217 ena_destroy_all_rx_queues(adapter); in ena_destroy_all_io_queues()
1223 struct ena_adapter *adapter = tx_ring->adapter; in validate_tx_req_id() local
1233 device_printf(adapter->pdev, in validate_tx_req_id()
1236 device_printf(adapter->pdev, "Invalid req_id: %hu\n", req_id); in validate_tx_req_id()
1244 ena_create_io_queues(struct ena_adapter *adapter) in ena_create_io_queues() argument
1246 struct ena_com_dev *ena_dev = adapter->ena_dev; in ena_create_io_queues()
1254 for (i = 0; i < adapter->num_queues; i++) { in ena_create_io_queues()
1259 ctx.queue_size = adapter->tx_ring_size; in ena_create_io_queues()
1264 device_printf(adapter->pdev, in ena_create_io_queues()
1268 ring = &adapter->tx_ring[i]; in ena_create_io_queues()
1273 device_printf(adapter->pdev, in ena_create_io_queues()
1282 for (i = 0; i < adapter->num_queues; i++) { in ena_create_io_queues()
1287 ctx.queue_size = adapter->rx_ring_size; in ena_create_io_queues()
1292 device_printf(adapter->pdev, in ena_create_io_queues()
1297 ring = &adapter->rx_ring[i]; in ena_create_io_queues()
1302 device_printf(adapter->pdev, in ena_create_io_queues()
1315 i = adapter->num_queues; in ena_create_io_queues()
1337 struct ena_adapter *adapter; in ena_tx_cleanup() local
1348 adapter = tx_ring->que->adapter; in ena_tx_cleanup()
1350 io_cq = &adapter->ena_dev->io_cq_queues[ena_qid]; in ena_tx_cleanup()
1374 bus_dmamap_unload(adapter->tx_buf_tag, tx_info->map); in ena_tx_cleanup()
1393 &adapter->ena_dev->io_sq_queues[ena_qid], in ena_tx_cleanup()
1408 ena_com_comp_ack(&adapter->ena_dev->io_sq_queues[ena_qid], in ena_tx_cleanup()
1422 struct ena_adapter *adapter = rx_ring->adapter; in ena_rx_hash_mbuf() local
1424 if (likely(adapter->rss_support)) { in ena_rx_hash_mbuf()
1484 struct ena_adapter *adapter; in ena_rx_mbuf() local
1490 adapter = rx_ring->adapter; in ena_rx_mbuf()
1500 device_printf(adapter->pdev, "NULL mbuf in rx_info"); in ena_rx_mbuf()
1511 mbuf->m_pkthdr.rcvif = rx_ring->que->adapter->ifp; in ena_rx_mbuf()
1520 bus_dmamap_unload(rx_ring->adapter->rx_buf_tag, rx_info->map); in ena_rx_mbuf()
1547 device_printf(adapter->pdev, "NULL mbuf in rx_info"); in ena_rx_mbuf()
1572 bus_dmamap_unload(rx_ring->adapter->rx_buf_tag, rx_info->map); in ena_rx_mbuf()
1643 struct ena_adapter *adapter; in ena_rx_cleanup() local
1658 adapter = rx_ring->que->adapter; in ena_rx_cleanup()
1659 ifp = adapter->ifp; in ena_rx_cleanup()
1662 io_cq = &adapter->ena_dev->io_cq_queues[ena_qid]; in ena_rx_cleanup()
1663 io_sq = &adapter->ena_dev->io_sq_queues[ena_qid]; in ena_rx_cleanup()
1670 ena_rx_ctx.max_bufs = adapter->max_rx_sgl_size; in ena_rx_cleanup()
1710 counter_u64_add_protected(adapter->hw_stats.rx_bytes, in ena_rx_cleanup()
1739 counter_u64_add_protected(adapter->hw_stats.rx_packets, 1); in ena_rx_cleanup()
1775 struct ena_adapter *adapter = (struct ena_adapter *)arg; in ena_intr_msix_mgmnt() local
1777 ena_com_admin_q_comp_intr_handler(adapter->ena_dev); in ena_intr_msix_mgmnt()
1778 if (likely(adapter->running)) in ena_intr_msix_mgmnt()
1779 ena_com_aenq_intr_handler(adapter->ena_dev, arg); in ena_intr_msix_mgmnt()
1790 struct ena_adapter *adapter = que->adapter; in ena_handle_msix() local
1791 if_t ifp = adapter->ifp; in ena_handle_msix()
1808 io_cq = &adapter->ena_dev->io_cq_queues[ena_qid]; in ena_handle_msix()
1844 ena_enable_msix(struct ena_adapter *adapter) in ena_enable_msix() argument
1846 device_t dev = adapter->pdev; in ena_enable_msix()
1851 msix_vecs = ENA_MAX_MSIX_VEC(adapter->num_queues); in ena_enable_msix()
1853 adapter->msix_entries = malloc(msix_vecs * sizeof(struct msix_entry), in ena_enable_msix()
1859 adapter->msix_entries[i].entry = i; in ena_enable_msix()
1861 adapter->msix_entries[i].vector = i + 1; in ena_enable_msix()
1877 adapter->num_queues = msix_vecs - ENA_ADMIN_MSIX_VEC; in ena_enable_msix()
1880 adapter->msix_vecs = msix_vecs; in ena_enable_msix()
1881 adapter->msix_enabled = true; in ena_enable_msix()
1886 free(adapter->msix_entries, M_DEVBUF); in ena_enable_msix()
1887 adapter->msix_entries = NULL; in ena_enable_msix()
1893 ena_setup_mgmnt_intr(struct ena_adapter *adapter) in ena_setup_mgmnt_intr() argument
1896 snprintf(adapter->irq_tbl[ENA_MGMNT_IRQ_IDX].name, in ena_setup_mgmnt_intr()
1898 device_get_nameunit(adapter->pdev)); in ena_setup_mgmnt_intr()
1903 adapter->irq_tbl[ENA_MGMNT_IRQ_IDX].handler = NULL; in ena_setup_mgmnt_intr()
1904 adapter->irq_tbl[ENA_MGMNT_IRQ_IDX].data = adapter; in ena_setup_mgmnt_intr()
1905 adapter->irq_tbl[ENA_MGMNT_IRQ_IDX].vector = in ena_setup_mgmnt_intr()
1906 adapter->msix_entries[ENA_MGMNT_IRQ_IDX].vector; in ena_setup_mgmnt_intr()
1910 ena_setup_io_intr(struct ena_adapter *adapter) in ena_setup_io_intr() argument
1915 for (int i = 0; i < adapter->num_queues; i++) { in ena_setup_io_intr()
1918 snprintf(adapter->irq_tbl[irq_idx].name, ENA_IRQNAME_SIZE, in ena_setup_io_intr()
1919 "%s-TxRx-%d", device_get_nameunit(adapter->pdev), i); in ena_setup_io_intr()
1920 adapter->irq_tbl[irq_idx].handler = ena_handle_msix; in ena_setup_io_intr()
1921 adapter->irq_tbl[irq_idx].data = &adapter->que[i]; in ena_setup_io_intr()
1922 adapter->irq_tbl[irq_idx].vector = in ena_setup_io_intr()
1923 adapter->msix_entries[irq_idx].vector; in ena_setup_io_intr()
1925 adapter->msix_entries[irq_idx].vector); in ena_setup_io_intr()
1927 adapter->que[i].cpu = adapter->irq_tbl[irq_idx].cpu = in ena_setup_io_intr()
1936 adapter->que[i].cpu = adapter->irq_tbl[irq_idx].cpu = in ena_setup_io_intr()
1944 ena_request_mgmnt_irq(struct ena_adapter *adapter) in ena_request_mgmnt_irq() argument
1952 irq = &adapter->irq_tbl[ENA_MGMNT_IRQ_IDX]; in ena_request_mgmnt_irq()
1953 irq->res = bus_alloc_resource_any(adapter->pdev, SYS_RES_IRQ, in ena_request_mgmnt_irq()
1957 device_printf(adapter->pdev, "could not allocate " in ena_request_mgmnt_irq()
1962 rc = bus_setup_intr(adapter->pdev, irq->res, in ena_request_mgmnt_irq()
1966 device_printf(adapter->pdev, "failed to register " in ena_request_mgmnt_irq()
1978 rcc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, in ena_request_mgmnt_irq()
1981 device_printf(adapter->pdev, "dev has no parent while " in ena_request_mgmnt_irq()
1989 ena_request_io_irq(struct ena_adapter *adapter) in ena_request_io_irq() argument
1995 if (unlikely(adapter->msix_enabled == 0)) { in ena_request_io_irq()
1996 device_printf(adapter->pdev, in ena_request_io_irq()
2003 for (i = ENA_IO_IRQ_FIRST_IDX; i < adapter->msix_vecs; i++) { in ena_request_io_irq()
2004 irq = &adapter->irq_tbl[i]; in ena_request_io_irq()
2009 irq->res = bus_alloc_resource_any(adapter->pdev, SYS_RES_IRQ, in ena_request_io_irq()
2012 device_printf(adapter->pdev, "could not allocate " in ena_request_io_irq()
2017 rc = bus_setup_intr(adapter->pdev, irq->res, in ena_request_io_irq()
2021 device_printf(adapter->pdev, "failed to register " in ena_request_io_irq()
2042 irq = &adapter->irq_tbl[i]; in ena_request_io_irq()
2048 rcc = bus_teardown_intr(adapter->pdev, irq->res, irq->cookie); in ena_request_io_irq()
2050 device_printf(adapter->pdev, "could not release" in ena_request_io_irq()
2059 rcc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, in ena_request_io_irq()
2063 device_printf(adapter->pdev, "dev has no parent while " in ena_request_io_irq()
2073 ena_free_mgmnt_irq(struct ena_adapter *adapter) in ena_free_mgmnt_irq() argument
2078 irq = &adapter->irq_tbl[ENA_MGMNT_IRQ_IDX]; in ena_free_mgmnt_irq()
2082 rc = bus_teardown_intr(adapter->pdev, irq->res, irq->cookie); in ena_free_mgmnt_irq()
2084 device_printf(adapter->pdev, "failed to tear " in ena_free_mgmnt_irq()
2092 rc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, in ena_free_mgmnt_irq()
2096 device_printf(adapter->pdev, "dev has no parent while " in ena_free_mgmnt_irq()
2102 ena_free_io_irq(struct ena_adapter *adapter) in ena_free_io_irq() argument
2107 for (int i = ENA_IO_IRQ_FIRST_IDX; i < adapter->msix_vecs; i++) { in ena_free_io_irq()
2108 irq = &adapter->irq_tbl[i]; in ena_free_io_irq()
2112 rc = bus_teardown_intr(adapter->pdev, irq->res, in ena_free_io_irq()
2115 device_printf(adapter->pdev, "failed to tear " in ena_free_io_irq()
2124 rc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, in ena_free_io_irq()
2128 device_printf(adapter->pdev, "dev has no parent" in ena_free_io_irq()
2137 ena_free_irqs(struct ena_adapter* adapter) in ena_free_irqs() argument
2140 ena_free_io_irq(adapter); in ena_free_irqs()
2141 ena_free_mgmnt_irq(adapter); in ena_free_irqs()
2142 ena_disable_msix(adapter); in ena_free_irqs()
2146 ena_disable_msix(struct ena_adapter *adapter) in ena_disable_msix() argument
2149 pci_release_msi(adapter->pdev); in ena_disable_msix()
2151 adapter->msix_vecs = 0; in ena_disable_msix()
2152 free(adapter->msix_entries, M_DEVBUF); in ena_disable_msix()
2153 adapter->msix_entries = NULL; in ena_disable_msix()
2157 ena_unmask_all_io_irqs(struct ena_adapter *adapter) in ena_unmask_all_io_irqs() argument
2165 for (i = 0; i < adapter->num_queues; i++) { in ena_unmask_all_io_irqs()
2167 io_cq = &adapter->ena_dev->io_cq_queues[ena_qid]; in ena_unmask_all_io_irqs()
2175 ena_rss_configure(struct ena_adapter *adapter) in ena_rss_configure() argument
2177 struct ena_com_dev *ena_dev = adapter->ena_dev; in ena_rss_configure()
2199 ena_up_complete(struct ena_adapter *adapter) in ena_up_complete() argument
2203 if (likely(adapter->rss_support)) { in ena_up_complete()
2204 rc = ena_rss_configure(adapter); in ena_up_complete()
2209 rc = ena_change_mtu(adapter->ifp, adapter->ifp->if_mtu); in ena_up_complete()
2213 ena_refill_all_rx_bufs(adapter); in ena_up_complete()
2214 ena_reset_counters((counter_u64_t *)&adapter->hw_stats, in ena_up_complete()
2215 sizeof(adapter->hw_stats)); in ena_up_complete()
2221 ena_up(struct ena_adapter *adapter) in ena_up() argument
2225 if (unlikely(device_is_attached(adapter->pdev) == 0)) { in ena_up()
2226 device_printf(adapter->pdev, "device is not attached!\n"); in ena_up()
2230 if (unlikely(!adapter->running)) { in ena_up()
2231 device_printf(adapter->pdev, "device is not running!\n"); in ena_up()
2235 if (!adapter->up) { in ena_up()
2236 device_printf(adapter->pdev, "device is going UP\n"); in ena_up()
2239 ena_setup_io_intr(adapter); in ena_up()
2240 rc = ena_request_io_irq(adapter); in ena_up()
2247 rc = ena_setup_all_tx_resources(adapter); in ena_up()
2254 rc = ena_setup_all_rx_resources(adapter); in ena_up()
2261 rc = ena_create_io_queues(adapter); in ena_up()
2268 if (unlikely(adapter->link_status)) in ena_up()
2269 if_link_state_change(adapter->ifp, LINK_STATE_UP); in ena_up()
2271 rc = ena_up_complete(adapter); in ena_up()
2275 counter_u64_add(adapter->dev_stats.interface_up, 1); in ena_up()
2277 ena_update_hwassist(adapter); in ena_up()
2279 if_setdrvflagbits(adapter->ifp, IFF_DRV_RUNNING, in ena_up()
2282 callout_reset_sbt(&adapter->timer_service, SBT_1S, SBT_1S, in ena_up()
2283 ena_timer_service, (void *)adapter, 0); in ena_up()
2285 adapter->up = true; in ena_up()
2287 ena_unmask_all_io_irqs(adapter); in ena_up()
2293 ena_destroy_all_io_queues(adapter); in ena_up()
2295 ena_free_all_rx_resources(adapter); in ena_up()
2297 ena_free_all_tx_resources(adapter); in ena_up()
2299 ena_free_io_irq(adapter); in ena_up()
2307 struct ena_adapter *adapter; in ena_get_counter() local
2310 adapter = if_getsoftc(ifp); in ena_get_counter()
2311 stats = &adapter->hw_stats; in ena_get_counter()
2339 struct ena_adapter *adapter = if_getsoftc(ifp); in ena_media_status() local
2342 mtx_lock(&adapter->global_mtx); in ena_media_status()
2347 if (!adapter->link_status) { in ena_media_status()
2348 mtx_unlock(&adapter->global_mtx); in ena_media_status()
2356 mtx_unlock(&adapter->global_mtx); in ena_media_status()
2362 struct ena_adapter *adapter = (struct ena_adapter *)arg; in ena_init() local
2364 if (!adapter->up) { in ena_init()
2365 sx_xlock(&adapter->ioctl_sx); in ena_init()
2366 ena_up(adapter); in ena_init()
2367 sx_unlock(&adapter->ioctl_sx); in ena_init()
2374 struct ena_adapter *adapter; in ena_ioctl() local
2378 adapter = ifp->if_softc; in ena_ioctl()
2389 sx_xlock(&adapter->ioctl_sx); in ena_ioctl()
2390 ena_down(adapter); in ena_ioctl()
2394 rc = ena_up(adapter); in ena_ioctl()
2395 sx_unlock(&adapter->ioctl_sx); in ena_ioctl()
2403 device_printf(adapter->pdev, in ena_ioctl()
2407 sx_xlock(&adapter->ioctl_sx); in ena_ioctl()
2408 rc = ena_up(adapter); in ena_ioctl()
2409 sx_unlock(&adapter->ioctl_sx); in ena_ioctl()
2413 sx_xlock(&adapter->ioctl_sx); in ena_ioctl()
2414 ena_down(adapter); in ena_ioctl()
2415 sx_unlock(&adapter->ioctl_sx); in ena_ioctl()
2426 rc = ifmedia_ioctl(ifp, ifr, &adapter->media, command); in ena_ioctl()
2440 sx_xlock(&adapter->ioctl_sx); in ena_ioctl()
2441 ena_down(adapter); in ena_ioctl()
2442 rc = ena_up(adapter); in ena_ioctl()
2443 sx_unlock(&adapter->ioctl_sx); in ena_ioctl()
2503 ena_update_hwassist(struct ena_adapter *adapter) in ena_update_hwassist() argument
2505 if_t ifp = adapter->ifp; in ena_update_hwassist()
2506 uint32_t feat = adapter->tx_offload_cap; in ena_update_hwassist()
2535 ena_setup_ifnet(device_t pdev, struct ena_adapter *adapter, in ena_setup_ifnet() argument
2541 ifp = adapter->ifp = if_gethandle(IFT_ETHER); in ena_setup_ifnet()
2548 if_setsoftc(ifp, adapter); in ena_setup_ifnet()
2557 if_setsendqlen(ifp, adapter->tx_ring_size); in ena_setup_ifnet()
2572 ifp->if_hw_tsomaxsegcount = adapter->max_tx_sgl_size - 1; in ena_setup_ifnet()
2582 ifmedia_init(&adapter->media, IFM_IMASK, in ena_setup_ifnet()
2584 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL); in ena_setup_ifnet()
2585 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO); in ena_setup_ifnet()
2587 ether_ifattach(ifp, adapter->mac_addr); in ena_setup_ifnet()
2593 ena_down(struct ena_adapter *adapter) in ena_down() argument
2597 if (adapter->up) { in ena_down()
2598 device_printf(adapter->pdev, "device is going DOWN\n"); in ena_down()
2600 callout_drain(&adapter->timer_service); in ena_down()
2602 adapter->up = false; in ena_down()
2603 if_setdrvflagbits(adapter->ifp, IFF_DRV_OACTIVE, in ena_down()
2606 ena_free_io_irq(adapter); in ena_down()
2608 if (adapter->trigger_reset) { in ena_down()
2609 rc = ena_com_dev_reset(adapter->ena_dev, in ena_down()
2610 adapter->reset_reason); in ena_down()
2612 device_printf(adapter->pdev, in ena_down()
2616 ena_destroy_all_io_queues(adapter); in ena_down()
2618 ena_free_all_tx_bufs(adapter); in ena_down()
2619 ena_free_all_rx_bufs(adapter); in ena_down()
2620 ena_free_all_tx_resources(adapter); in ena_down()
2621 ena_free_all_rx_resources(adapter); in ena_down()
2623 counter_u64_add(adapter->dev_stats.interface_down, 1); in ena_down()
2721 struct ena_adapter *adapter; in ena_check_and_collapse_mbuf() local
2725 adapter = tx_ring->adapter; in ena_check_and_collapse_mbuf()
2729 if (num_frags < adapter->max_tx_sgl_size) in ena_check_and_collapse_mbuf()
2734 adapter->max_tx_sgl_size - 1); in ena_check_and_collapse_mbuf()
2749 struct ena_adapter *adapter; in ena_xmit_mbuf() local
2766 adapter = tx_ring->que->adapter; in ena_xmit_mbuf()
2767 ena_dev = adapter->ena_dev; in ena_xmit_mbuf()
2799 rc = bus_dmamap_load_mbuf_sg(adapter->tx_buf_tag, tx_info->map, in ena_xmit_mbuf()
2842 counter_u64_add_protected(adapter->hw_stats.tx_packets, 1); in ena_xmit_mbuf()
2843 counter_u64_add_protected(adapter->hw_stats.tx_bytes, in ena_xmit_mbuf()
2854 bus_dmamap_sync(adapter->tx_buf_tag, tx_info->map, in ena_xmit_mbuf()
2861 bus_dmamap_unload(adapter->tx_buf_tag, tx_info->map); in ena_xmit_mbuf()
2870 struct ena_adapter *adapter = tx_ring->adapter; in ena_start_xmit() local
2876 if (unlikely((if_getdrvflags(adapter->ifp) & IFF_DRV_RUNNING) == 0)) in ena_start_xmit()
2879 if (unlikely(!adapter->link_status)) in ena_start_xmit()
2883 io_sq = &adapter->ena_dev->io_sq_queues[ena_qid]; in ena_start_xmit()
2885 while ((mbuf = drbr_peek(adapter->ifp, tx_ring->br)) != NULL) { in ena_start_xmit()
2896 drbr_putback(adapter->ifp, tx_ring->br, mbuf); in ena_start_xmit()
2898 drbr_putback(adapter->ifp, tx_ring->br, mbuf); in ena_start_xmit()
2901 drbr_advance(adapter->ifp, tx_ring->br); in ena_start_xmit()
2907 drbr_advance(adapter->ifp, tx_ring->br); in ena_start_xmit()
2909 if (unlikely((if_getdrvflags(adapter->ifp) & in ena_start_xmit()
2915 BPF_MTAP(adapter->ifp, mbuf); in ena_start_xmit()
2942 struct ifnet *ifp = tx_ring->adapter->ifp; in ena_deferred_mq_start()
2955 struct ena_adapter *adapter = ifp->if_softc; in ena_mq_start() local
2960 if (unlikely((if_getdrvflags(adapter->ifp) & IFF_DRV_RUNNING) == 0)) in ena_mq_start()
2973 i = i % adapter->num_queues; in ena_mq_start()
2978 i = m->m_pkthdr.flowid % adapter->num_queues; in ena_mq_start()
2981 i = curcpu % adapter->num_queues; in ena_mq_start()
2983 tx_ring = &adapter->tx_ring[i]; in ena_mq_start()
3006 struct ena_adapter *adapter = ifp->if_softc; in ena_qflush() local
3007 struct ena_ring *tx_ring = adapter->tx_ring; in ena_qflush()
3010 for(i = 0; i < adapter->num_queues; ++i, ++tx_ring) in ena_qflush()
3021 ena_calc_io_queue_num(struct ena_adapter *adapter, in ena_calc_io_queue_num() argument
3034 pci_msix_count(adapter->pdev) - 1); in ena_calc_io_queue_num()
3043 ena_calc_queue_size(struct ena_adapter *adapter, uint16_t *max_tx_sgl_size, in ena_calc_queue_size() argument
3069 device_printf(adapter->pdev, "Invalid queue size\n"); in ena_calc_queue_size()
3082 ena_rss_init_default(struct ena_adapter *adapter) in ena_rss_init_default() argument
3084 struct ena_com_dev *ena_dev = adapter->ena_dev; in ena_rss_init_default()
3085 device_t dev = adapter->pdev; in ena_rss_init_default()
3097 qid = qid % adapter->num_queues; in ena_rss_init_default()
3099 qid = i % adapter->num_queues; in ena_rss_init_default()
3132 struct ena_adapter *adapter; in ena_rss_init_default_deferred() local
3145 adapter = devclass_get_softc(dc, max); in ena_rss_init_default_deferred()
3146 if (adapter != NULL) { in ena_rss_init_default_deferred()
3147 rc = ena_rss_init_default(adapter); in ena_rss_init_default_deferred()
3148 adapter->rss_support = true; in ena_rss_init_default_deferred()
3150 device_printf(adapter->pdev, in ena_rss_init_default_deferred()
3153 adapter->rss_support = false; in ena_rss_init_default_deferred()
3205 ena_device_init(struct ena_adapter *adapter, device_t pdev, in ena_device_init() argument
3208 struct ena_com_dev* ena_dev = adapter->ena_dev; in ena_device_init()
3245 adapter->dma_width = dma_width; in ena_device_init()
3294 static int ena_enable_msix_and_set_admin_interrupts(struct ena_adapter *adapter, in ena_enable_msix_and_set_admin_interrupts() argument
3297 struct ena_com_dev *ena_dev = adapter->ena_dev; in ena_enable_msix_and_set_admin_interrupts()
3300 rc = ena_enable_msix(adapter); in ena_enable_msix_and_set_admin_interrupts()
3302 device_printf(adapter->pdev, "Error with MSI-X enablement\n"); in ena_enable_msix_and_set_admin_interrupts()
3306 ena_setup_mgmnt_intr(adapter); in ena_enable_msix_and_set_admin_interrupts()
3308 rc = ena_request_mgmnt_irq(adapter); in ena_enable_msix_and_set_admin_interrupts()
3310 device_printf(adapter->pdev, "Cannot setup mgmnt queue intr\n"); in ena_enable_msix_and_set_admin_interrupts()
3321 ena_disable_msix(adapter); in ena_enable_msix_and_set_admin_interrupts()
3330 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data; in ena_keep_alive_wd() local
3338 counter_u64_zero(adapter->hw_stats.rx_drops); in ena_keep_alive_wd()
3339 counter_u64_add(adapter->hw_stats.rx_drops, rx_drops); in ena_keep_alive_wd()
3342 atomic_store_rel_64(&adapter->keep_alive_timestamp, stime); in ena_keep_alive_wd()
3346 static void check_for_missing_keep_alive(struct ena_adapter *adapter) in check_for_missing_keep_alive() argument
3350 if (adapter->wd_active == 0) in check_for_missing_keep_alive()
3353 if (likely(adapter->keep_alive_timeout == 0)) in check_for_missing_keep_alive()
3356 timestamp = atomic_load_acq_64(&adapter->keep_alive_timestamp); in check_for_missing_keep_alive()
3358 if (unlikely(time > adapter->keep_alive_timeout)) { in check_for_missing_keep_alive()
3359 device_printf(adapter->pdev, in check_for_missing_keep_alive()
3361 counter_u64_add(adapter->dev_stats.wd_expired, 1); in check_for_missing_keep_alive()
3362 adapter->reset_reason = ENA_REGS_RESET_KEEP_ALIVE_TO; in check_for_missing_keep_alive()
3363 adapter->trigger_reset = true; in check_for_missing_keep_alive()
3368 static void check_for_admin_com_state(struct ena_adapter *adapter) in check_for_admin_com_state() argument
3370 if (unlikely(ena_com_get_admin_running_state(adapter->ena_dev) == in check_for_admin_com_state()
3372 device_printf(adapter->pdev, in check_for_admin_com_state()
3374 counter_u64_add(adapter->dev_stats.admin_q_pause, 1); in check_for_admin_com_state()
3375 adapter->reset_reason = ENA_REGS_RESET_ADMIN_TO; in check_for_admin_com_state()
3376 adapter->trigger_reset = true; in check_for_admin_com_state()
3381 check_missing_comp_in_queue(struct ena_adapter *adapter, in check_missing_comp_in_queue() argument
3401 if (unlikely(bttosbt(time) > adapter->missing_tx_timeout)) { in check_missing_comp_in_queue()
3413 adapter->missing_tx_threshold)) { in check_missing_comp_in_queue()
3414 device_printf(adapter->pdev, in check_missing_comp_in_queue()
3418 missed_tx, adapter->missing_tx_threshold); in check_missing_comp_in_queue()
3419 adapter->reset_reason = in check_missing_comp_in_queue()
3421 adapter->trigger_reset = true; in check_missing_comp_in_queue()
3437 check_for_missing_tx_completions(struct ena_adapter *adapter) in check_for_missing_tx_completions() argument
3445 if (!adapter->up) in check_for_missing_tx_completions()
3448 if (adapter->trigger_reset) in check_for_missing_tx_completions()
3451 if (adapter->missing_tx_timeout == 0) in check_for_missing_tx_completions()
3454 budget = adapter->missing_tx_max_queues; in check_for_missing_tx_completions()
3456 for (i = adapter->next_monitored_tx_qid; i < adapter->num_queues; i++) { in check_for_missing_tx_completions()
3457 tx_ring = &adapter->tx_ring[i]; in check_for_missing_tx_completions()
3459 rc = check_missing_comp_in_queue(adapter, tx_ring); in check_for_missing_tx_completions()
3470 adapter->next_monitored_tx_qid = i % adapter->num_queues; in check_for_missing_tx_completions()
3486 check_for_empty_rx_ring(struct ena_adapter *adapter) in check_for_empty_rx_ring() argument
3491 if (!adapter->up) in check_for_empty_rx_ring()
3494 if (adapter->trigger_reset) in check_for_empty_rx_ring()
3497 for (i = 0; i < adapter->num_queues; i++) { in check_for_empty_rx_ring()
3498 rx_ring = &adapter->rx_ring[i]; in check_for_empty_rx_ring()
3508 device_printf(adapter->pdev, in check_for_empty_rx_ring()
3524 struct ena_adapter *adapter = (struct ena_adapter *)data; in ena_timer_service() local
3526 adapter->ena_dev->host_attr.host_info; in ena_timer_service()
3528 check_for_missing_keep_alive(adapter); in ena_timer_service()
3530 check_for_admin_com_state(adapter); in ena_timer_service()
3532 check_for_missing_tx_completions(adapter); in ena_timer_service()
3534 check_for_empty_rx_ring(adapter); in ena_timer_service()
3537 ena_update_host_info(host_info, adapter->ifp); in ena_timer_service()
3539 if (unlikely(adapter->trigger_reset)) { in ena_timer_service()
3540 device_printf(adapter->pdev, "Trigger reset is on\n"); in ena_timer_service()
3541 taskqueue_enqueue(adapter->reset_tq, &adapter->reset_task); in ena_timer_service()
3548 callout_schedule_sbt(&adapter->timer_service, SBT_1S, SBT_1S, 0); in ena_timer_service()
3555 struct ena_adapter *adapter = (struct ena_adapter *)arg; in ena_reset_task() local
3556 struct ena_com_dev *ena_dev = adapter->ena_dev; in ena_reset_task()
3560 if (unlikely(!adapter->trigger_reset)) { in ena_reset_task()
3561 device_printf(adapter->pdev, in ena_reset_task()
3566 sx_xlock(&adapter->ioctl_sx); in ena_reset_task()
3568 callout_drain(&adapter->timer_service); in ena_reset_task()
3570 dev_up = adapter->up; in ena_reset_task()
3573 ena_down(adapter); in ena_reset_task()
3574 ena_free_mgmnt_irq(adapter); in ena_reset_task()
3575 ena_disable_msix(adapter); in ena_reset_task()
3581 adapter->reset_reason = ENA_REGS_RESET_NORMAL; in ena_reset_task()
3582 adapter->trigger_reset = false; in ena_reset_task()
3585 rc = ena_device_init(adapter, adapter->pdev, &get_feat_ctx, in ena_reset_task()
3586 &adapter->wd_active); in ena_reset_task()
3588 device_printf(adapter->pdev, in ena_reset_task()
3593 rc = ena_enable_msix_and_set_admin_interrupts(adapter, in ena_reset_task()
3594 adapter->num_queues); in ena_reset_task()
3596 device_printf(adapter->pdev, "Enable MSI-X failed\n"); in ena_reset_task()
3602 rc = ena_up(adapter); in ena_reset_task()
3604 device_printf(adapter->pdev, in ena_reset_task()
3610 callout_reset_sbt(&adapter->timer_service, SBT_1S, SBT_1S, in ena_reset_task()
3611 ena_timer_service, (void *)adapter, 0); in ena_reset_task()
3613 sx_unlock(&adapter->ioctl_sx); in ena_reset_task()
3618 ena_free_mgmnt_irq(adapter); in ena_reset_task()
3619 ena_disable_msix(adapter); in ena_reset_task()
3623 device_printf(adapter->pdev, "ENA reset failed!\n"); in ena_reset_task()
3624 adapter->running = false; in ena_reset_task()
3625 sx_unlock(&adapter->ioctl_sx); in ena_reset_task()
3643 struct ena_adapter *adapter; in ena_attach() local
3650 adapter = device_get_softc(pdev); in ena_attach()
3651 adapter->pdev = pdev; in ena_attach()
3653 mtx_init(&adapter->global_mtx, "ENA global mtx", NULL, MTX_DEF); in ena_attach()
3654 sx_init(&adapter->ioctl_sx, "ENA ioctl sx"); in ena_attach()
3657 callout_init_mtx(&adapter->timer_service, &adapter->global_mtx, 0); in ena_attach()
3658 adapter->keep_alive_timeout = DEFAULT_KEEP_ALIVE_TO; in ena_attach()
3659 adapter->missing_tx_timeout = DEFAULT_TX_CMP_TO; in ena_attach()
3660 adapter->missing_tx_max_queues = DEFAULT_TX_MONITORED_QUEUES; in ena_attach()
3661 adapter->missing_tx_threshold = DEFAULT_TX_CMP_THRESHOLD; in ena_attach()
3666 rc = ena_allocate_pci_resources(adapter); in ena_attach()
3669 ena_free_pci_resources(adapter); in ena_attach()
3677 adapter->ena_dev = ena_dev; in ena_attach()
3684 rman_get_bustag(adapter->registers); in ena_attach()
3686 rman_get_bushandle(adapter->registers); in ena_attach()
3697 rc = ena_device_init(adapter, pdev, &get_feat_ctx, &adapter->wd_active); in ena_attach()
3704 adapter->keep_alive_timestamp = getsbinuptime(); in ena_attach()
3706 adapter->tx_offload_cap = get_feat_ctx.offload.tx; in ena_attach()
3709 adapter->up = false; in ena_attach()
3711 memcpy(adapter->mac_addr, get_feat_ctx.dev_attr.mac_addr, in ena_attach()
3715 io_queue_num = ena_calc_io_queue_num(adapter, &get_feat_ctx); in ena_attach()
3719 adapter->num_queues = io_queue_num; in ena_attach()
3721 adapter->max_mtu = get_feat_ctx.dev_attr.max_mtu; in ena_attach()
3724 queue_size = ena_calc_queue_size(adapter,&tx_sgl_size, in ena_attach()
3731 adapter->reset_reason = ENA_REGS_RESET_NORMAL; in ena_attach()
3733 adapter->tx_ring_size = queue_size; in ena_attach()
3734 adapter->rx_ring_size = queue_size; in ena_attach()
3736 adapter->max_tx_sgl_size = tx_sgl_size; in ena_attach()
3737 adapter->max_rx_sgl_size = rx_sgl_size; in ena_attach()
3740 rc = ena_setup_tx_dma_tag(adapter); in ena_attach()
3746 rc = ena_setup_rx_dma_tag(adapter); in ena_attach()
3754 ena_init_io_rings(adapter); in ena_attach()
3757 rc = ena_setup_ifnet(pdev, adapter, &get_feat_ctx); in ena_attach()
3763 rc = ena_enable_msix_and_set_admin_interrupts(adapter, io_queue_num); in ena_attach()
3771 TASK_INIT(&adapter->reset_task, 0, ena_reset_task, adapter); in ena_attach()
3772 adapter->reset_tq = taskqueue_create("ena_reset_enqueue", in ena_attach()
3773 M_WAITOK | M_ZERO, taskqueue_thread_enqueue, &adapter->reset_tq); in ena_attach()
3774 taskqueue_start_threads(&adapter->reset_tq, 1, PI_NET, in ena_attach()
3775 "%s rstq", device_get_nameunit(adapter->pdev)); in ena_attach()
3778 ena_alloc_counters((counter_u64_t *)&adapter->dev_stats, in ena_attach()
3780 ena_alloc_counters((counter_u64_t *)&adapter->hw_stats, in ena_attach()
3782 ena_sysctl_add_nodes(adapter); in ena_attach()
3785 if_setdrvflagbits(adapter->ifp, IFF_DRV_OACTIVE, IFF_DRV_RUNNING); in ena_attach()
3787 adapter->running = true; in ena_attach()
3791 if_detach(adapter->ifp); in ena_attach()
3792 if_free(adapter->ifp); in ena_attach()
3794 ena_free_all_io_rings_resources(adapter); in ena_attach()
3795 ena_free_rx_dma_tag(adapter); in ena_attach()
3797 ena_free_tx_dma_tag(adapter); in ena_attach()
3805 ena_free_pci_resources(adapter); in ena_attach()
3820 struct ena_adapter *adapter = device_get_softc(pdev); in ena_detach() local
3821 struct ena_com_dev *ena_dev = adapter->ena_dev; in ena_detach()
3825 if (adapter->ifp->if_vlantrunk != NULL) { in ena_detach()
3826 device_printf(adapter->pdev ,"VLAN is in use, detach first\n"); in ena_detach()
3831 callout_drain(&adapter->timer_service); in ena_detach()
3832 while (taskqueue_cancel(adapter->reset_tq, &adapter->reset_task, NULL)) in ena_detach()
3833 taskqueue_drain(adapter->reset_tq, &adapter->reset_task); in ena_detach()
3834 taskqueue_free(adapter->reset_tq); in ena_detach()
3836 sx_xlock(&adapter->ioctl_sx); in ena_detach()
3837 ena_down(adapter); in ena_detach()
3838 sx_unlock(&adapter->ioctl_sx); in ena_detach()
3840 if (adapter->ifp != NULL) { in ena_detach()
3841 ether_ifdetach(adapter->ifp); in ena_detach()
3842 if_free(adapter->ifp); in ena_detach()
3845 ena_free_all_io_rings_resources(adapter); in ena_detach()
3847 ena_free_counters((counter_u64_t *)&adapter->hw_stats, in ena_detach()
3849 ena_free_counters((counter_u64_t *)&adapter->dev_stats, in ena_detach()
3852 if (likely(adapter->rss_support)) in ena_detach()
3855 rc = ena_free_rx_dma_tag(adapter); in ena_detach()
3857 device_printf(adapter->pdev, in ena_detach()
3860 rc = ena_free_tx_dma_tag(adapter); in ena_detach()
3862 device_printf(adapter->pdev, in ena_detach()
3866 if (adapter->running) in ena_detach()
3867 ena_com_dev_reset(ena_dev, adapter->reset_reason); in ena_detach()
3871 ena_free_irqs(adapter); in ena_detach()
3881 ena_free_pci_resources(adapter); in ena_detach()
3883 mtx_destroy(&adapter->global_mtx); in ena_detach()
3884 sx_destroy(&adapter->ioctl_sx); in ena_detach()
3906 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data; in ena_update_on_link_change() local
3912 ifp = adapter->ifp; in ena_update_on_link_change()
3917 device_printf(adapter->pdev, "link is UP\n"); in ena_update_on_link_change()
3920 device_printf(adapter->pdev, "link is DOWN\n"); in ena_update_on_link_change()
3923 device_printf(adapter->pdev, "invalid value recvd\n"); in ena_update_on_link_change()
3927 adapter->link_status = status; in ena_update_on_link_change()