Lines Matching defs:adapter

175 static int ena_reinit_netmap(struct ena_adapter *adapter);
209 struct ena_adapter *adapter = device_get_softc(dmadev);
210 device_t pdev = adapter->pdev;
217 dma_space_addr = ENA_DMA_BIT_MASK(adapter->dma_width);
279 ena_free_pci_resources(struct ena_adapter *adapter)
281 device_t pdev = adapter->pdev;
283 if (adapter->memory != NULL) {
285 PCIR_BAR(ENA_MEM_BAR), adapter->memory);
288 if (adapter->registers != NULL) {
290 PCIR_BAR(ENA_REG_BAR), adapter->registers);
293 if (adapter->msix != NULL) {
294 bus_release_resource(pdev, SYS_RES_MEMORY, adapter->msix_rid,
295 adapter->msix);
329 struct ena_adapter *adapter = if_getsoftc(ifp);
330 device_t pdev = adapter->pdev;
333 if ((new_mtu > adapter->max_mtu) || (new_mtu < ENA_MIN_MTU)) {
335 new_mtu, adapter->max_mtu, ENA_MIN_MTU);
339 rc = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu);
378 ena_init_io_rings_common(struct ena_adapter *adapter, struct ena_ring *ring,
382 ring->adapter = adapter;
383 ring->ena_dev = adapter->ena_dev;
389 ena_init_io_rings_basic(struct ena_adapter *adapter)
396 ena_dev = adapter->ena_dev;
398 for (i = 0; i < adapter->num_io_queues; i++) {
399 txr = &adapter->tx_ring[i];
400 rxr = &adapter->rx_ring[i];
403 ena_init_io_rings_common(adapter, txr, i);
404 ena_init_io_rings_common(adapter, rxr, i);
410 que = &adapter->que[i];
411 que->adapter = adapter;
425 ena_init_io_rings_advanced(struct ena_adapter *adapter)
430 for (i = 0; i < adapter->num_io_queues; i++) {
431 txr = &adapter->tx_ring[i];
432 rxr = &adapter->rx_ring[i];
435 txr->buf_ring_size = adapter->buf_ring_size;
450 device_get_nameunit(adapter->pdev), i);
452 device_get_nameunit(adapter->pdev), i);
459 ena_init_io_rings(struct ena_adapter *adapter)
464 * them from adapter/ena_dev (basic)
467 ena_init_io_rings_basic(adapter);
468 ena_init_io_rings_advanced(adapter);
472 ena_free_io_ring_resources(struct ena_adapter *adapter, unsigned int qid)
474 struct ena_ring *txr = &adapter->tx_ring[qid];
475 struct ena_ring *rxr = &adapter->rx_ring[qid];
490 ena_free_all_io_rings_resources(struct ena_adapter *adapter)
494 for (i = 0; i < adapter->num_io_queues; i++)
495 ena_free_io_ring_resources(adapter, i);
499 ena_setup_tx_dma_tag(struct ena_adapter *adapter)
504 ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev),
506 ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */
510 adapter->max_tx_sgl_size - 1, /* nsegments */
515 &adapter->tx_buf_tag);
521 ena_free_tx_dma_tag(struct ena_adapter *adapter)
525 ret = bus_dma_tag_destroy(adapter->tx_buf_tag);
528 adapter->tx_buf_tag = NULL;
534 ena_setup_rx_dma_tag(struct ena_adapter *adapter)
539 ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev), /* parent */
541 ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */
545 adapter->max_rx_sgl_size, /* nsegments */
550 &adapter->rx_buf_tag);
556 ena_free_rx_dma_tag(struct ena_adapter *adapter)
560 ret = bus_dma_tag_destroy(adapter->rx_buf_tag);
563 adapter->rx_buf_tag = NULL;
571 struct ena_adapter *adapter = tx_ring->adapter;
577 ena_log(adapter->pdev, ERR,
581 ena_log_nm(adapter->pdev, WARN,
587 ena_trigger_reset(adapter, reset_reason);
597 struct ena_adapter *adapter = tx_ring->adapter;
599 bus_dma_tag_t tx_tag = adapter->tx_buf_tag;
609 if (if_getcapenable(adapter->ifp) & IFCAP_NETMAP) {
629 * @adapter: network interface device structure
635 ena_setup_tx_resources(struct ena_adapter *adapter, int qid)
637 device_t pdev = adapter->pdev;
639 struct ena_que *que = &adapter->que[qid];
647 ena_netmap_reset_tx_ring(adapter, qid);
681 drbr_flush(adapter->ifp, tx_ring->br);
686 err = bus_dmamap_create(adapter->tx_buf_tag, 0,
695 if (if_getcapenable(adapter->ifp) & IFCAP_NETMAP) {
698 err = bus_dmamap_create(adapter->tx_buf_tag, 0,
727 device_get_nameunit(adapter->pdev), que->cpu);
730 device_get_nameunit(adapter->pdev), que->id);
751 * @adapter: network interface device structure
757 ena_free_tx_resources(struct ena_adapter *adapter, int qid)
759 struct ena_ring *tx_ring = &adapter->tx_ring[qid];
772 drbr_flush(adapter->ifp, tx_ring->br);
776 bus_dmamap_sync(adapter->tx_buf_tag,
778 bus_dmamap_unload(adapter->tx_buf_tag,
780 bus_dmamap_destroy(adapter->tx_buf_tag,
784 if (if_getcapenable(adapter->ifp) & IFCAP_NETMAP) {
788 bus_dmamap_sync(adapter->tx_buf_tag,
791 ena_netmap_unload(adapter,
794 bus_dmamap_destroy(adapter->tx_buf_tag,
819 * @adapter: network interface device structure
824 ena_setup_all_tx_resources(struct ena_adapter *adapter)
828 for (i = 0; i < adapter->num_io_queues; i++) {
829 rc = ena_setup_tx_resources(adapter, i);
831 ena_log(adapter->pdev, ERR,
842 ena_free_tx_resources(adapter, i);
848 * @adapter: network interface device structure
853 ena_free_all_tx_resources(struct ena_adapter *adapter)
857 for (i = 0; i < adapter->num_io_queues; i++)
858 ena_free_tx_resources(adapter, i);
863 * @adapter: network interface device structure
869 ena_setup_rx_resources(struct ena_adapter *adapter, unsigned int qid)
871 device_t pdev = adapter->pdev;
872 struct ena_que *que = &adapter->que[qid];
879 ena_netmap_reset_rx_ring(adapter, qid);
906 err = bus_dmamap_create(adapter->rx_buf_tag, 0,
916 if ((if_getcapenable(adapter->ifp) & IFCAP_LRO) != 0) {
924 rx_ring->lro.ifp = adapter->ifp;
932 bus_dmamap_destroy(adapter->rx_buf_tag,
945 * @adapter: network interface device structure
951 ena_free_rx_resources(struct ena_adapter *adapter, unsigned int qid)
953 struct ena_ring *rx_ring = &adapter->rx_ring[qid];
957 bus_dmamap_sync(adapter->rx_buf_tag,
961 bus_dmamap_unload(adapter->rx_buf_tag,
963 bus_dmamap_destroy(adapter->rx_buf_tag,
980 * @adapter: network interface device structure
985 ena_setup_all_rx_resources(struct ena_adapter *adapter)
989 for (i = 0; i < adapter->num_io_queues; i++) {
990 rc = ena_setup_rx_resources(adapter, i);
992 ena_log(adapter->pdev, ERR,
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_io_queues; i++)
1018 ena_free_rx_resources(adapter, i);
1022 ena_alloc_rx_mbuf(struct ena_adapter *adapter, struct ena_ring *rx_ring,
1025 device_t pdev = adapter->pdev;
1056 adapter->rx_buf_tag, rx_info->mbuf, rx_info->mbuf->m_len);
1057 error = bus_dmamap_load_mbuf_sg(adapter->rx_buf_tag, rx_info->map,
1066 bus_dmamap_sync(adapter->rx_buf_tag, rx_info->map, BUS_DMASYNC_PREREAD);
1085 ena_free_rx_mbuf(struct ena_adapter *adapter, struct ena_ring *rx_ring,
1089 ena_log(adapter->pdev, WARN,
1094 bus_dmamap_sync(adapter->rx_buf_tag, rx_info->map,
1096 bus_dmamap_unload(adapter->rx_buf_tag, rx_info->map);
1110 struct ena_adapter *adapter = rx_ring->adapter;
1111 device_t pdev = adapter->pdev;
1116 ena_log_io(adapter->pdev, DBG, "refill qid: %d\n", rx_ring->qid);
1129 if (ena_rx_ring_in_netmap(adapter, rx_ring->qid))
1130 rc = ena_netmap_alloc_rx_slot(adapter, rx_ring,
1134 rc = ena_alloc_rx_mbuf(adapter, rx_ring, rx_info);
1169 ena_reinit_netmap(struct ena_adapter *adapter)
1173 netmap_detach(adapter->ifp);
1174 rc = ena_netmap_attach(adapter);
1176 ena_log(adapter->pdev, ERR, "netmap attach failed: %d\n", rc);
1183 ena_update_buf_ring_size(struct ena_adapter *adapter,
1190 old_buf_ring_size = adapter->buf_ring_size;
1191 adapter->buf_ring_size = new_buf_ring_size;
1193 dev_was_up = ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter);
1194 ena_down(adapter);
1197 ena_free_all_io_rings_resources(adapter);
1198 ena_init_io_rings_advanced(adapter);
1200 rc = ena_reinit_netmap(adapter);
1212 rc = ena_up(adapter);
1214 ena_log(adapter->pdev, ERR,
1219 adapter->buf_ring_size = old_buf_ring_size;
1220 ena_free_all_io_rings_resources(adapter);
1221 ena_init_io_rings_advanced(adapter);
1223 rc = ena_reinit_netmap(adapter);
1229 adapter);
1230 ena_trigger_reset(adapter, ENA_REGS_RESET_OS_TRIGGER);
1238 ena_update_queue_size(struct ena_adapter *adapter, uint32_t new_tx_size,
1245 old_tx_size = adapter->requested_tx_ring_size;
1246 old_rx_size = adapter->requested_rx_ring_size;
1247 adapter->requested_tx_ring_size = new_tx_size;
1248 adapter->requested_rx_ring_size = new_rx_size;
1250 dev_was_up = ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter);
1251 ena_down(adapter);
1254 ena_init_io_rings_basic(adapter);
1256 rc = ena_reinit_netmap(adapter);
1262 rc = ena_up(adapter);
1264 ena_log(adapter->pdev, ERR,
1269 adapter->requested_tx_ring_size = old_tx_size;
1270 adapter->requested_rx_ring_size = old_rx_size;
1271 ena_init_io_rings_basic(adapter);
1273 rc = ena_reinit_netmap(adapter);
1279 rc = ena_up(adapter);
1281 ena_log(adapter->pdev, ERR,
1289 ENA_FLAG_DEV_UP_BEFORE_RESET, adapter);
1290 ena_trigger_reset(adapter,
1300 ena_update_io_rings(struct ena_adapter *adapter, uint32_t num)
1302 ena_free_all_io_rings_resources(adapter);
1304 ena_com_rss_destroy(adapter->ena_dev);
1306 adapter->num_io_queues = num;
1307 ena_init_io_rings(adapter);
1311 ena_update_base_cpu(struct ena_adapter *adapter, int new_num)
1317 dev_was_up = ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter);
1318 old_num = adapter->irq_cpu_base;
1320 ena_down(adapter);
1322 adapter->irq_cpu_base = new_num;
1325 rc = ena_up(adapter);
1327 ena_log(adapter->pdev, ERR,
1332 adapter->irq_cpu_base = old_num;
1334 rc = ena_up(adapter);
1336 ena_log(adapter->pdev, ERR,
1340 ENA_FLAG_DEV_UP_BEFORE_RESET, adapter);
1341 ena_trigger_reset(adapter,
1350 ena_update_cpu_stride(struct ena_adapter *adapter, uint32_t new_num)
1356 dev_was_up = ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter);
1357 old_num = adapter->irq_cpu_stride;
1359 ena_down(adapter);
1361 adapter->irq_cpu_stride = new_num;
1364 rc = ena_up(adapter);
1366 ena_log(adapter->pdev, ERR,
1371 adapter->irq_cpu_stride = old_num;
1373 rc = ena_up(adapter);
1375 ena_log(adapter->pdev, ERR,
1379 ENA_FLAG_DEV_UP_BEFORE_RESET, adapter);
1380 ena_trigger_reset(adapter,
1390 ena_update_io_queue_nb(struct ena_adapter *adapter, uint32_t new_num)
1396 dev_was_up = ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter);
1397 old_num = adapter->num_io_queues;
1398 ena_down(adapter);
1400 ena_update_io_rings(adapter, new_num);
1402 rc = ena_reinit_netmap(adapter);
1408 rc = ena_up(adapter);
1410 ena_log(adapter->pdev, ERR,
1415 ena_update_io_rings(adapter, old_num);
1417 rc = ena_reinit_netmap(adapter);
1422 rc = ena_up(adapter);
1424 ena_log(adapter->pdev, ERR,
1428 ENA_FLAG_DEV_UP_BEFORE_RESET, adapter);
1429 ena_trigger_reset(adapter,
1439 ena_free_rx_bufs(struct ena_adapter *adapter, unsigned int qid)
1441 struct ena_ring *rx_ring = &adapter->rx_ring[qid];
1448 ena_free_rx_mbuf(adapter, rx_ring, rx_info);
1450 if (((if_getflags(adapter->ifp) & IFF_DYING) == 0) &&
1451 (if_getcapenable(adapter->ifp) & IFCAP_NETMAP)) {
1453 ena_netmap_free_rx_slot(adapter, rx_ring,
1462 * @adapter: network interface device structure
1466 ena_refill_all_rx_bufs(struct ena_adapter *adapter)
1471 for (i = 0; i < adapter->num_io_queues; i++) {
1472 rx_ring = &adapter->rx_ring[i];
1476 ena_log_io(adapter->pdev, WARN,
1487 ena_free_all_rx_bufs(struct ena_adapter *adapter)
1491 for (i = 0; i < adapter->num_io_queues; i++)
1492 ena_free_rx_bufs(adapter, i);
1497 * @adapter: network interface device structure
1501 ena_free_tx_bufs(struct ena_adapter *adapter, unsigned int qid)
1504 struct ena_ring *tx_ring = &adapter->tx_ring[qid];
1514 ena_log(adapter->pdev, WARN,
1519 ena_log(adapter->pdev, DBG,
1524 bus_dmamap_sync(adapter->tx_buf_tag, tx_info->dmamap,
1526 bus_dmamap_unload(adapter->tx_buf_tag, tx_info->dmamap);
1535 ena_free_all_tx_bufs(struct ena_adapter *adapter)
1537 for (int i = 0; i < adapter->num_io_queues; i++)
1538 ena_free_tx_bufs(adapter, i);
1542 ena_destroy_all_tx_queues(struct ena_adapter *adapter)
1547 for (i = 0; i < adapter->num_io_queues; i++) {
1549 ena_com_destroy_io_queue(adapter->ena_dev, ena_qid);
1554 ena_destroy_all_rx_queues(struct ena_adapter *adapter)
1559 for (i = 0; i < adapter->num_io_queues; i++) {
1561 ena_com_destroy_io_queue(adapter->ena_dev, ena_qid);
1566 ena_destroy_all_io_queues(struct ena_adapter *adapter)
1571 for (i = 0; i < adapter->num_io_queues; i++) {
1572 queue = &adapter->que[i];
1578 ena_destroy_all_tx_queues(adapter);
1579 ena_destroy_all_rx_queues(adapter);
1583 ena_create_io_queues(struct ena_adapter *adapter)
1585 struct ena_com_dev *ena_dev = adapter->ena_dev;
1595 for (i = 0; i < adapter->num_io_queues; i++) {
1600 ctx.queue_size = adapter->requested_tx_ring_size;
1603 ctx.numa_node = adapter->que[i].domain;
1607 ena_log(adapter->pdev, ERR,
1611 ring = &adapter->tx_ring[i];
1615 ena_log(adapter->pdev, ERR,
1630 for (i = 0; i < adapter->num_io_queues; i++) {
1635 ctx.queue_size = adapter->requested_rx_ring_size;
1638 ctx.numa_node = adapter->que[i].domain;
1642 ena_log(adapter->pdev, ERR,
1647 ring = &adapter->rx_ring[i];
1651 ena_log(adapter->pdev, ERR,
1665 for (i = 0; i < adapter->num_io_queues; i++) {
1666 queue = &adapter->que[i];
1677 device_get_nameunit(adapter->pdev), i);
1685 i = adapter->num_io_queues;
1706 struct ena_adapter *adapter = (struct ena_adapter *)arg;
1708 ena_com_admin_q_comp_intr_handler(adapter->ena_dev);
1709 if (likely(ENA_FLAG_ISSET(ENA_FLAG_DEVICE_RUNNING, adapter)))
1710 ena_com_aenq_intr_handler(adapter->ena_dev, arg);
1721 struct ena_adapter *adapter = queue->adapter;
1722 if_t ifp = adapter->ifp;
1733 ena_enable_msix(struct ena_adapter *adapter)
1735 device_t dev = adapter->pdev;
1739 if (ENA_FLAG_ISSET(ENA_FLAG_MSIX_ENABLED, adapter)) {
1745 msix_vecs = ENA_MAX_MSIX_VEC(adapter->max_num_io_queues);
1747 adapter->msix_entries = malloc(msix_vecs * sizeof(struct msix_entry),
1753 adapter->msix_entries[i].entry = i;
1755 adapter->msix_entries[i].vector = i + 1;
1783 adapter->msix_vecs = msix_vecs;
1784 ENA_FLAG_SET_ATOMIC(ENA_FLAG_MSIX_ENABLED, adapter);
1789 free(adapter->msix_entries, M_DEVBUF);
1790 adapter->msix_entries = NULL;
1796 ena_setup_mgmnt_intr(struct ena_adapter *adapter)
1798 snprintf(adapter->irq_tbl[ENA_MGMNT_IRQ_IDX].name, ENA_IRQNAME_SIZE,
1799 "ena-mgmnt@pci:%s", device_get_nameunit(adapter->pdev));
1804 adapter->irq_tbl[ENA_MGMNT_IRQ_IDX].handler = NULL;
1805 adapter->irq_tbl[ENA_MGMNT_IRQ_IDX].data = adapter;
1806 adapter->irq_tbl[ENA_MGMNT_IRQ_IDX].vector =
1807 adapter->msix_entries[ENA_MGMNT_IRQ_IDX].vector;
1811 ena_setup_io_intr(struct ena_adapter *adapter)
1821 if (adapter->msix_entries == NULL)
1825 if (adapter->first_bind < 0) {
1826 adapter->first_bind = last_bind;
1827 last_bind = (last_bind + adapter->num_io_queues) % num_buckets;
1829 cur_bind = adapter->first_bind;
1832 for (int i = 0; i < adapter->num_io_queues; i++) {
1835 snprintf(adapter->irq_tbl[irq_idx].name, ENA_IRQNAME_SIZE,
1836 "%s-TxRx-%d", device_get_nameunit(adapter->pdev), i);
1837 adapter->irq_tbl[irq_idx].handler = ena_handle_msix;
1838 adapter->irq_tbl[irq_idx].data = &adapter->que[i];
1839 adapter->irq_tbl[irq_idx].vector =
1840 adapter->msix_entries[irq_idx].vector;
1841 ena_log(adapter->pdev, DBG, "ena_setup_io_intr vector: %d\n",
1842 adapter->msix_entries[irq_idx].vector);
1844 if (adapter->irq_cpu_base > ENA_BASE_CPU_UNSPECIFIED) {
1845 adapter->que[i].cpu = adapter->irq_tbl[irq_idx].cpu =
1846 (unsigned)(adapter->irq_cpu_base +
1847 i * adapter->irq_cpu_stride) % (unsigned)mp_ncpus;
1848 CPU_SETOF(adapter->que[i].cpu, &adapter->que[i].cpu_mask);
1852 adapter->que[i].cpu = adapter->irq_tbl[irq_idx].cpu =
1855 CPU_SETOF(adapter->que[i].cpu, &adapter->que[i].cpu_mask);
1858 if (CPU_ISSET(adapter->que[i].cpu, &cpuset_domain[idx]))
1861 adapter->que[i].domain = idx;
1863 adapter->que[i].domain = -1;
1871 ena_request_mgmnt_irq(struct ena_adapter *adapter)
1873 device_t pdev = adapter->pdev;
1880 irq = &adapter->irq_tbl[ENA_MGMNT_IRQ_IDX];
1881 irq->res = bus_alloc_resource_any(adapter->pdev, SYS_RES_IRQ,
1890 rc = bus_setup_intr(adapter->pdev, irq->res,
1905 rcc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, irq->vector,
1917 ena_request_io_irq(struct ena_adapter *adapter)
1919 device_t pdev = adapter->pdev;
1924 if (unlikely(!ENA_FLAG_ISSET(ENA_FLAG_MSIX_ENABLED, adapter))) {
1932 for (i = ENA_IO_IRQ_FIRST_IDX; i < adapter->msix_vecs; i++) {
1933 irq = &adapter->irq_tbl[i];
1938 irq->res = bus_alloc_resource_any(adapter->pdev, SYS_RES_IRQ,
1947 rc = bus_setup_intr(adapter->pdev, irq->res,
1958 if (adapter->rss_enabled || adapter->irq_cpu_base > ENA_BASE_CPU_UNSPECIFIED) {
1959 rc = bus_bind_intr(adapter->pdev, irq->res, irq->cpu);
1976 irq = &adapter->irq_tbl[i];
1982 rcc = bus_teardown_intr(adapter->pdev, irq->res,
1996 rcc = bus_release_resource(adapter->pdev, SYS_RES_IRQ,
2011 ena_free_mgmnt_irq(struct ena_adapter *adapter)
2013 device_t pdev = adapter->pdev;
2017 irq = &adapter->irq_tbl[ENA_MGMNT_IRQ_IDX];
2020 rc = bus_teardown_intr(adapter->pdev, irq->res, irq->cookie);
2029 rc = bus_release_resource(adapter->pdev, SYS_RES_IRQ,
2040 ena_free_io_irq(struct ena_adapter *adapter)
2042 device_t pdev = adapter->pdev;
2046 for (int i = ENA_IO_IRQ_FIRST_IDX; i < adapter->msix_vecs; i++) {
2047 irq = &adapter->irq_tbl[i];
2050 rc = bus_teardown_intr(adapter->pdev, irq->res,
2063 rc = bus_release_resource(adapter->pdev, SYS_RES_IRQ,
2076 ena_free_irqs(struct ena_adapter *adapter)
2078 ena_free_io_irq(adapter);
2079 ena_free_mgmnt_irq(adapter);
2080 ena_disable_msix(adapter);
2084 ena_disable_msix(struct ena_adapter *adapter)
2086 if (ENA_FLAG_ISSET(ENA_FLAG_MSIX_ENABLED, adapter)) {
2087 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_MSIX_ENABLED, adapter);
2088 pci_release_msi(adapter->pdev);
2091 adapter->msix_vecs = 0;
2092 free(adapter->msix_entries, M_DEVBUF);
2093 adapter->msix_entries = NULL;
2097 ena_unmask_all_io_irqs(struct ena_adapter *adapter)
2106 for (i = 0; i < adapter->num_io_queues; i++) {
2108 io_cq = &adapter->ena_dev->io_cq_queues[ena_qid];
2110 tx_ring = &adapter->tx_ring[i];
2117 ena_up_complete(struct ena_adapter *adapter)
2121 if (likely(ENA_FLAG_ISSET(ENA_FLAG_RSS_ACTIVE, adapter))) {
2122 rc = ena_rss_configure(adapter);
2124 ena_log(adapter->pdev, ERR,
2130 rc = ena_change_mtu(adapter->ifp, if_getmtu(adapter->ifp));
2134 ena_refill_all_rx_bufs(adapter);
2135 ena_reset_counters((counter_u64_t *)&adapter->hw_stats,
2136 sizeof(adapter->hw_stats));
2142 set_io_rings_size(struct ena_adapter *adapter, int new_tx_size, int new_rx_size)
2146 for (i = 0; i < adapter->num_io_queues; i++) {
2147 adapter->tx_ring[i].ring_size = new_tx_size;
2148 adapter->rx_ring[i].ring_size = new_rx_size;
2153 create_queues_with_size_backoff(struct ena_adapter *adapter)
2155 device_t pdev = adapter->pdev;
2164 set_io_rings_size(adapter, adapter->requested_tx_ring_size,
2165 adapter->requested_rx_ring_size);
2169 rc = ena_setup_all_tx_resources(adapter);
2176 rc = ena_setup_all_rx_resources(adapter);
2183 rc = ena_create_io_queues(adapter);
2192 ena_free_all_rx_resources(adapter);
2194 ena_free_all_tx_resources(adapter);
2206 cur_tx_ring_size = adapter->tx_ring[0].ring_size;
2207 cur_rx_ring_size = adapter->rx_ring[0].ring_size;
2238 set_io_rings_size(adapter, new_tx_ring_size, new_rx_ring_size);
2243 ena_up(struct ena_adapter *adapter)
2249 if (unlikely(device_is_attached(adapter->pdev) == 0)) {
2250 ena_log(adapter->pdev, ERR, "device is not attached!\n");
2254 if (ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter))
2257 ena_log(adapter->pdev, INFO, "device is going UP\n");
2260 rc = ena_setup_io_intr(adapter);
2262 ena_log(adapter->pdev, ERR, "error setting up IO interrupt\n");
2265 rc = ena_request_io_irq(adapter);
2267 ena_log(adapter->pdev, ERR, "err_req_irq\n");
2271 ena_log(adapter->pdev, INFO,
2273 adapter->num_io_queues,
2274 adapter->requested_rx_ring_size,
2275 adapter->requested_tx_ring_size,
2276 (adapter->ena_dev->tx_mem_queue_type ==
2279 rc = create_queues_with_size_backoff(adapter);
2281 ena_log(adapter->pdev, ERR,
2286 if (ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter))
2287 if_link_state_change(adapter->ifp, LINK_STATE_UP);
2289 rc = ena_up_complete(adapter);
2293 counter_u64_add(adapter->dev_stats.interface_up, 1);
2295 ena_update_hwassist(adapter);
2297 if_setdrvflagbits(adapter->ifp, IFF_DRV_RUNNING, IFF_DRV_OACTIVE);
2299 ENA_FLAG_SET_ATOMIC(ENA_FLAG_DEV_UP, adapter);
2301 ena_unmask_all_io_irqs(adapter);
2306 ena_destroy_all_io_queues(adapter);
2307 ena_free_all_rx_resources(adapter);
2308 ena_free_all_tx_resources(adapter);
2310 ena_free_io_irq(adapter);
2318 struct ena_adapter *adapter;
2321 adapter = if_getsoftc(ifp);
2322 stats = &adapter->hw_stats;
2352 struct ena_adapter *adapter = if_getsoftc(ifp);
2353 ena_log(adapter->pdev, DBG, "Media status update\n");
2360 if (!ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter)) {
2362 ena_log(adapter->pdev, INFO, "Link is down\n");
2375 struct ena_adapter *adapter = (struct ena_adapter *)arg;
2377 if (!ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter)) {
2379 ena_up(adapter);
2387 struct ena_adapter *adapter;
2391 adapter = if_getsoftc(ifp);
2403 ena_down(adapter);
2407 rc = ena_up(adapter);
2416 ena_log(adapter->pdev, INFO,
2421 rc = ena_up(adapter);
2427 ena_down(adapter);
2439 rc = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
2454 ena_down(adapter);
2455 rc = ena_up(adapter);
2512 ena_update_hwassist(struct ena_adapter *adapter)
2514 if_t ifp = adapter->ifp;
2515 uint32_t feat = adapter->tx_offload_cap;
2544 ena_setup_ifnet(device_t pdev, struct ena_adapter *adapter,
2550 ifp = adapter->ifp = if_gethandle(IFT_ETHER);
2553 if_setsoftc(ifp, adapter);
2562 if_setsendqlen(ifp, adapter->requested_tx_ring_size);
2577 if_sethwtsomaxsegcount(ifp, adapter->max_tx_sgl_size - 1);
2584 * Specify the media types supported by this adapter and register
2587 ifmedia_init(&adapter->media, IFM_IMASK, ena_media_change,
2589 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
2590 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
2592 ether_ifattach(ifp, adapter->mac_addr);
2596 ena_down(struct ena_adapter *adapter)
2602 if (!ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter))
2605 ena_log(adapter->pdev, INFO, "device is going DOWN\n");
2607 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_DEV_UP, adapter);
2608 if_setdrvflagbits(adapter->ifp, IFF_DRV_OACTIVE, IFF_DRV_RUNNING);
2610 ena_free_io_irq(adapter);
2612 if (ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter)) {
2613 rc = ena_com_dev_reset(adapter->ena_dev, adapter->reset_reason);
2615 ena_log(adapter->pdev, ERR, "Device reset failed\n");
2618 ena_destroy_all_io_queues(adapter);
2620 ena_free_all_tx_bufs(adapter);
2621 ena_free_all_rx_bufs(adapter);
2622 ena_free_all_tx_resources(adapter);
2623 ena_free_all_rx_resources(adapter);
2625 counter_u64_add(adapter->dev_stats.interface_down, 1);
2729 struct ena_adapter *adapter = device_get_softc(pdev);
2734 adapter->memory = bus_alloc_resource_any(pdev, SYS_RES_MEMORY, &rid,
2736 if (unlikely(adapter->memory == NULL)) {
2743 rc = ena_enable_wc(adapter->pdev, adapter->memory);
2753 ena_dev->mem_bar = rman_get_virtual(adapter->memory);
2760 struct ena_admin_feature_llq_desc *llq, struct ena_adapter *adapter)
2773 adapter->llq_policy = ENA_ADMIN_LIST_ENTRY_SIZE_256B;
2779 adapter->llq_policy = ENA_ADMIN_LIST_ENTRY_SIZE_128B;
2784 ena_calc_io_queue_size(struct ena_calc_queue_size_ctx *ctx, struct ena_adapter *adapter)
2834 if (adapter->llq_policy == ENA_ADMIN_LIST_ENTRY_SIZE_256B) {
2929 ena_device_init(struct ena_adapter *adapter, device_t pdev,
2933 struct ena_com_dev *ena_dev = adapter->ena_dev;
2970 adapter->dma_width = dma_width;
3014 ena_set_llq_configurations(&llq_config, &get_feat_ctx->llq, adapter);
3035 ena_enable_msix_and_set_admin_interrupts(struct ena_adapter *adapter)
3037 struct ena_com_dev *ena_dev = adapter->ena_dev;
3040 rc = ena_enable_msix(adapter);
3042 ena_log(adapter->pdev, ERR, "Error with MSI-X enablement\n");
3046 ena_setup_mgmnt_intr(adapter);
3048 rc = ena_request_mgmnt_irq(adapter);
3050 ena_log(adapter->pdev, ERR, "Cannot setup mgmnt queue intr\n");
3061 ena_disable_msix(adapter);
3070 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
3080 counter_u64_zero(adapter->hw_stats.rx_drops);
3081 counter_u64_add(adapter->hw_stats.rx_drops, rx_drops);
3082 counter_u64_zero(adapter->hw_stats.tx_drops);
3083 counter_u64_add(adapter->hw_stats.tx_drops, tx_drops);
3086 atomic_store_rel_64(&adapter->keep_alive_timestamp, stime);
3091 check_for_missing_keep_alive(struct ena_adapter *adapter)
3096 if (adapter->wd_active == 0)
3099 if (adapter->keep_alive_timeout == ENA_HW_HINTS_NO_TIMEOUT)
3102 timestamp = atomic_load_acq_64(&adapter->keep_alive_timestamp);
3104 if (unlikely(time > adapter->keep_alive_timeout)) {
3105 ena_log(adapter->pdev, ERR, "Keep alive watchdog timeout.\n");
3106 if (ena_com_aenq_has_keep_alive(adapter->ena_dev))
3109 ena_trigger_reset(adapter, reset_reason);
3115 check_for_admin_com_state(struct ena_adapter *adapter)
3118 if (unlikely(ena_com_get_admin_running_state(adapter->ena_dev) == false)) {
3119 ena_log(adapter->pdev, ERR,
3121 counter_u64_add(adapter->dev_stats.admin_q_pause, 1);
3122 if (ena_com_get_missing_admin_interrupt(adapter->ena_dev))
3125 ena_trigger_reset(adapter, reset_reason);
3130 check_for_rx_interrupt_queue(struct ena_adapter *adapter,
3143 ena_log(adapter->pdev, ERR,
3146 ena_trigger_reset(adapter, ENA_REGS_RESET_MISS_INTERRUPT);
3154 check_cdesc_in_tx_cq(struct ena_adapter *adapter,
3157 device_t pdev = adapter->pdev;
3179 check_missing_comp_in_tx_queue(struct ena_adapter *adapter,
3183 device_t pdev = adapter->pdev;
3206 time_offset > 2 * adapter->missing_tx_timeout)) {
3215 ena_trigger_reset(adapter,
3221 if (unlikely(time_offset > adapter->missing_tx_timeout)) {
3227 adapter->missing_tx_timeout);
3242 if (unlikely(missed_tx > adapter->missing_tx_threshold)) {
3246 missed_tx, adapter->missing_tx_threshold);
3248 ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
3257 reset_reason = check_cdesc_in_tx_cq(adapter, tx_ring);
3259 adapter->reset_reason = reset_reason;
3275 check_for_missing_completions(struct ena_adapter *adapter)
3284 if (!ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter))
3287 if (ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))
3290 if (adapter->missing_tx_timeout == ENA_HW_HINTS_NO_TIMEOUT)
3293 budget = adapter->missing_tx_max_queues;
3295 for (i = adapter->next_monitored_tx_qid; i < adapter->num_io_queues; i++) {
3296 tx_ring = &adapter->tx_ring[i];
3297 rx_ring = &adapter->rx_ring[i];
3299 rc = check_missing_comp_in_tx_queue(adapter, tx_ring);
3303 rc = check_for_rx_interrupt_queue(adapter, rx_ring);
3314 adapter->next_monitored_tx_qid = i % adapter->num_io_queues;
3330 check_for_empty_rx_ring(struct ena_adapter *adapter)
3335 if (!ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter))
3338 if (ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))
3341 for (i = 0; i < adapter->num_io_queues; i++) {
3342 rx_ring = &adapter->rx_ring[i];
3353 ena_log(adapter->pdev, WARN,
3368 ena_update_hints(struct ena_adapter *adapter,
3371 struct ena_com_dev *ena_dev = adapter->ena_dev;
3382 adapter->missing_tx_threshold =
3388 adapter->missing_tx_timeout = ENA_HW_HINTS_NO_TIMEOUT;
3390 adapter->missing_tx_timeout = SBT_1MS *
3396 adapter->keep_alive_timeout = ENA_HW_HINTS_NO_TIMEOUT;
3398 adapter->keep_alive_timeout = SBT_1MS *
3405 * @adapter: ENA device adapter
3415 ena_copy_eni_metrics(struct ena_adapter *adapter)
3420 rc = ena_com_get_eni_stats(adapter->ena_dev, &adapter->eni_metrics);
3425 ena_log(adapter->pdev, WARN,
3429 ena_log(adapter->pdev, DBG,
3433 ena_log(adapter->pdev, ERR,
3442 ena_copy_srd_metrics(struct ena_adapter *adapter)
3444 return ena_com_get_ena_srd_info(adapter->ena_dev, &adapter->ena_srd_info);
3448 ena_copy_customer_metrics(struct ena_adapter *adapter)
3454 dev = adapter->ena_dev;
3460 rc = ena_com_get_customer_metrics(adapter->ena_dev,
3461 (char *)(adapter->customer_metrics_array), len);
3469 struct ena_adapter *adapter = (struct ena_adapter *)data;
3471 adapter->ena_dev->host_attr.host_info;
3473 check_for_missing_keep_alive(adapter);
3475 check_for_admin_com_state(adapter);
3477 check_for_missing_completions(adapter);
3479 check_for_empty_rx_ring(adapter);
3490 if ((adapter->metrics_sample_interval != 0) &&
3491 (++adapter->metrics_sample_interval_cnt >=
3492 adapter->metrics_sample_interval)) {
3493 taskqueue_enqueue(adapter->metrics_tq, &adapter->metrics_task);
3494 adapter->metrics_sample_interval_cnt = 0;
3499 ena_update_host_info(host_info, adapter->ifp);
3501 if (unlikely(ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
3507 if (ena_com_validate_version(adapter->ena_dev) ==
3509 ena_log(adapter->pdev, WARN,
3511 ENA_TIMER_RESET(adapter);
3514 ena_log(adapter->pdev, WARN, "Trigger reset is on\n");
3515 taskqueue_enqueue(adapter->reset_tq, &adapter->reset_task);
3522 ENA_TIMER_RESET(adapter);
3526 ena_destroy_device(struct ena_adapter *adapter, bool graceful)
3528 if_t ifp = adapter->ifp;
3529 struct ena_com_dev *ena_dev = adapter->ena_dev;
3532 if (!ENA_FLAG_ISSET(ENA_FLAG_DEVICE_RUNNING, adapter))
3538 ENA_TIMER_DRAIN(adapter);
3540 dev_up = ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter);
3542 ENA_FLAG_SET_ATOMIC(ENA_FLAG_DEV_UP_BEFORE_RESET, adapter);
3547 if (ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter))
3548 ena_down(adapter);
3554 if (!(ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter) && dev_up))
3555 ena_com_dev_reset(adapter->ena_dev, adapter->reset_reason);
3557 ena_free_mgmnt_irq(adapter);
3559 ena_disable_msix(adapter);
3568 ena_free_all_io_rings_resources(adapter);
3578 adapter->reset_reason = ENA_REGS_RESET_NORMAL;
3580 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
3581 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_DEVICE_RUNNING, adapter);
3585 ena_device_validate_params(struct ena_adapter *adapter,
3588 if (memcmp(get_feat_ctx->dev_attr.mac_addr, adapter->mac_addr,
3590 ena_log(adapter->pdev, ERR, "Error, mac addresses differ\n");
3594 if (get_feat_ctx->dev_attr.max_mtu < if_getmtu(adapter->ifp)) {
3595 ena_log(adapter->pdev, ERR,
3604 ena_restore_device(struct ena_adapter *adapter)
3607 struct ena_com_dev *ena_dev = adapter->ena_dev;
3608 if_t ifp = adapter->ifp;
3609 device_t dev = adapter->pdev;
3613 ENA_FLAG_SET_ATOMIC(ENA_FLAG_ONGOING_RESET, adapter);
3615 rc = ena_device_init(adapter, dev, &get_feat_ctx, &wd_active);
3624 if (adapter->wd_active != 0)
3625 adapter->wd_active = wd_active;
3627 rc = ena_device_validate_params(adapter, &get_feat_ctx);
3633 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_ONGOING_RESET, adapter);
3635 if (ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter))
3638 rc = ena_enable_msix_and_set_admin_interrupts(adapter);
3649 if ((adapter->msix_vecs - ENA_ADMIN_MSIX_VEC) < adapter->num_io_queues)
3650 adapter->num_io_queues = adapter->msix_vecs - ENA_ADMIN_MSIX_VEC;
3653 ena_init_io_rings(adapter);
3656 if (ENA_FLAG_ISSET(ENA_FLAG_DEV_UP_BEFORE_RESET, adapter)) {
3657 rc = ena_up(adapter);
3665 ENA_FLAG_SET_ATOMIC(ENA_FLAG_DEVICE_RUNNING, adapter);
3673 adapter->keep_alive_timestamp = getsbinuptime();
3674 ENA_TIMER_RESET(adapter);
3676 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_DEV_UP_BEFORE_RESET, adapter);
3681 ena_free_mgmnt_irq(adapter);
3682 ena_disable_msix(adapter);
3690 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_DEVICE_RUNNING, adapter);
3691 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_ONGOING_RESET, adapter);
3700 struct ena_adapter *adapter = (struct ena_adapter *)arg;
3704 if (ena_com_get_cap(adapter->ena_dev, ENA_ADMIN_CUSTOMER_METRICS))
3705 (void)ena_copy_customer_metrics(adapter);
3706 else if (ena_com_get_cap(adapter->ena_dev, ENA_ADMIN_ENI_STATS))
3707 (void)ena_copy_eni_metrics(adapter);
3709 if (ena_com_get_cap(adapter->ena_dev, ENA_ADMIN_ENA_SRD_INFO))
3710 (void)ena_copy_srd_metrics(adapter);
3718 struct ena_adapter *adapter = (struct ena_adapter *)arg;
3721 if (likely(ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
3722 ena_increment_reset_counter(adapter);
3723 ena_destroy_device(adapter, false);
3724 ena_restore_device(adapter);
3726 ena_log(adapter->pdev, INFO,
3734 ena_free_stats(struct ena_adapter *adapter)
3736 ena_free_counters((counter_u64_t *)&adapter->hw_stats,
3738 ena_free_counters((counter_u64_t *)&adapter->dev_stats,
3748 * ena_attach initializes an adapter identified by a device structure.
3749 * The OS initialization, configuring of the adapter private structure,
3758 struct ena_adapter *adapter;
3764 adapter = device_get_softc(pdev);
3765 adapter->pdev = pdev;
3766 adapter->first_bind = -1;
3772 ENA_TIMER_INIT(adapter);
3773 adapter->keep_alive_timeout = ENA_DEFAULT_KEEP_ALIVE_TO;
3774 adapter->missing_tx_timeout = ENA_DEFAULT_TX_CMP_TO;
3775 adapter->missing_tx_max_queues = ENA_DEFAULT_TX_MONITORED_QUEUES;
3776 adapter->missing_tx_threshold = ENA_DEFAULT_TX_CMP_THRESHOLD;
3778 adapter->irq_cpu_base = ENA_BASE_CPU_UNSPECIFIED;
3779 adapter->irq_cpu_stride = 0;
3782 adapter->rss_enabled = 1;
3792 adapter->ena_dev = ena_dev;
3796 adapter->memory = NULL;
3797 adapter->registers = bus_alloc_resource_any(pdev, SYS_RES_MEMORY, &rid,
3799 if (unlikely(adapter->registers == NULL)) {
3809 adapter->msix = bus_alloc_resource_any(pdev, SYS_RES_MEMORY,
3811 if (unlikely(adapter->msix == NULL)) {
3817 adapter->msix_rid = msix_rid;
3825 adapter->registers);
3827 adapter->registers);
3844 ENA_FLAG_ZERO(adapter);
3847 rc = ena_device_init(adapter, pdev, &get_feat_ctx, &adapter->wd_active);
3855 adapter->disable_meta_caching = !!(
3859 adapter->keep_alive_timestamp = getsbinuptime();
3861 adapter->tx_offload_cap = get_feat_ctx.offload.tx;
3863 memcpy(adapter->mac_addr, get_feat_ctx.dev_attr.mac_addr,
3873 rc = ena_calc_io_queue_size(&calc_queue_ctx, adapter);
3879 adapter->requested_tx_ring_size = calc_queue_ctx.tx_queue_size;
3880 adapter->requested_rx_ring_size = calc_queue_ctx.rx_queue_size;
3881 adapter->max_tx_ring_size = calc_queue_ctx.max_tx_queue_size;
3882 adapter->max_rx_ring_size = calc_queue_ctx.max_rx_queue_size;
3883 adapter->max_tx_sgl_size = calc_queue_ctx.max_tx_sgl_size;
3884 adapter->max_rx_sgl_size = calc_queue_ctx.max_rx_sgl_size;
3886 adapter->max_num_io_queues = max_num_io_queues;
3888 adapter->buf_ring_size = ENA_DEFAULT_BUF_RING_SIZE;
3890 adapter->max_mtu = get_feat_ctx.dev_attr.max_mtu;
3892 adapter->reset_reason = ENA_REGS_RESET_NORMAL;
3895 rc = ena_setup_tx_dma_tag(adapter);
3901 rc = ena_setup_rx_dma_tag(adapter);
3909 * adapter::max_num_io_queues (see `ena_enable_msix()`), plus a constant
3916 rc = ena_enable_msix_and_set_admin_interrupts(adapter);
3923 adapter->num_io_queues = adapter->msix_vecs - ENA_ADMIN_MSIX_VEC;
3926 ena_init_io_rings(adapter);
3934 rc = ena_sysctl_allocate_customer_metrics_buffer(adapter);
3941 ena_alloc_counters((counter_u64_t *)&adapter->dev_stats,
3943 ena_alloc_counters((counter_u64_t *)&adapter->hw_stats,
3945 ena_sysctl_add_nodes(adapter);
3948 ena_setup_ifnet(pdev, adapter, &get_feat_ctx);
3951 TASK_INIT(&adapter->reset_task, 0, ena_reset_task, adapter);
3952 adapter->reset_tq = taskqueue_create("ena_reset_enqueue",
3953 M_WAITOK | M_ZERO, taskqueue_thread_enqueue, &adapter->reset_tq);
3954 taskqueue_start_threads(&adapter->reset_tq, 1, PI_NET, "%s rstq",
3955 device_get_nameunit(adapter->pdev));
3958 TASK_INIT(&adapter->metrics_task, 0, ena_metrics_task, adapter);
3959 adapter->metrics_tq = taskqueue_create("ena_metrics_enqueue",
3960 M_WAITOK | M_ZERO, taskqueue_thread_enqueue, &adapter->metrics_tq);
3961 taskqueue_start_threads(&adapter->metrics_tq, 1, PI_NET, "%s metricsq",
3962 device_get_nameunit(adapter->pdev));
3965 rc = ena_netmap_attach(adapter);
3973 if_setdrvflagbits(adapter->ifp, IFF_DRV_OACTIVE, IFF_DRV_RUNNING);
3974 ENA_FLAG_SET_ATOMIC(ENA_FLAG_DEVICE_RUNNING, adapter);
3977 ENA_TIMER_RESET(adapter);
3983 ether_ifdetach(adapter->ifp);
3984 ifmedia_removeall(&adapter->media);
3985 free(adapter->customer_metrics_array, M_DEVBUF);
3990 ena_free_stats(adapter);
3991 ena_com_dev_reset(adapter->ena_dev, ENA_REGS_RESET_INIT_ERR);
3992 ena_free_mgmnt_irq(adapter);
3993 ena_disable_msix(adapter);
3995 ena_free_all_io_rings_resources(adapter);
3996 ena_free_rx_dma_tag(adapter);
3998 ena_free_tx_dma_tag(adapter);
4006 ena_free_pci_resources(adapter);
4023 struct ena_adapter *adapter = device_get_softc(pdev);
4024 struct ena_com_dev *ena_dev = adapter->ena_dev;
4028 if (if_vlantrunkinuse(adapter->ifp)) {
4029 ena_log(adapter->pdev, ERR, "VLAN is in use, detach first\n");
4037 ether_ifdetach(adapter->ifp);
4039 ifmedia_removeall(&adapter->media);
4043 ENA_TIMER_DRAIN(adapter);
4047 while (taskqueue_cancel(adapter->metrics_tq, &adapter->metrics_task, NULL))
4048 taskqueue_drain(adapter->metrics_tq, &adapter->metrics_task);
4049 taskqueue_free(adapter->metrics_tq);
4052 while (taskqueue_cancel(adapter->reset_tq, &adapter->reset_task, NULL))
4053 taskqueue_drain(adapter->reset_tq, &adapter->reset_task);
4054 taskqueue_free(adapter->reset_tq);
4057 ena_down(adapter);
4058 ena_destroy_device(adapter, true);
4062 ena_sysctl_update_queue_node_nb(adapter, adapter->num_io_queues,
4063 adapter->max_num_io_queues);
4066 netmap_detach(adapter->ifp);
4069 ena_free_stats(adapter);
4071 rc = ena_free_rx_dma_tag(adapter);
4073 ena_log(adapter->pdev, WARN,
4076 rc = ena_free_tx_dma_tag(adapter);
4078 ena_log(adapter->pdev, WARN,
4081 ena_free_irqs(adapter);
4083 ena_free_pci_resources(adapter);
4085 if (adapter->rss_indir != NULL)
4086 free(adapter->rss_indir, M_DEVBUF);
4088 if (likely(ENA_FLAG_ISSET(ENA_FLAG_RSS_ACTIVE, adapter)))
4093 free(adapter->customer_metrics_array, M_DEVBUF);
4097 if_free(adapter->ifp);
4117 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
4123 ifp = adapter->ifp;
4128 ena_log(adapter->pdev, INFO, "link is UP\n");
4129 ENA_FLAG_SET_ATOMIC(ENA_FLAG_LINK_UP, adapter);
4130 if (!ENA_FLAG_ISSET(ENA_FLAG_ONGOING_RESET, adapter))
4133 ena_log(adapter->pdev, INFO, "link is DOWN\n");
4135 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_LINK_UP, adapter);
4142 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
4146 adapter->ena_dev, "Invalid group(%x) expected %x\n",
4153 ena_update_hints(adapter, hints);
4156 ena_log(adapter->pdev, ERR,
4183 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
4185 ena_log(adapter->pdev, ERR,
4192 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
4200 ena_log(adapter->pdev, INFO,
4207 ena_log(adapter->pdev, INFO,
4218 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
4219 ena_log(adapter->pdev, WARN,
4221 ena_trigger_reset(adapter, ENA_REGS_RESET_DEVICE_REQUEST);