ena.c (44e86fbdcf5a3e625095652a3d0ab99532e54eea) ena.c (888810f0fb0c8993c4f3f841db7ff88ebc41396c)
1/*-
2 * BSD LICENSE
3 *
4 * Copyright (c) 2015-2019 Amazon.com, Inc. or its affiliates.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 544 unchanged lines hidden (view full) ---

553 if (nm_info->map_seg[j] != NULL) {
554 bus_dmamap_destroy(tx_tag,
555 nm_info->map_seg[j]);
556 nm_info->map_seg[j] = NULL;
557 }
558 }
559 }
560#endif /* DEV_NETMAP */
1/*-
2 * BSD LICENSE
3 *
4 * Copyright (c) 2015-2019 Amazon.com, Inc. or its affiliates.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 544 unchanged lines hidden (view full) ---

553 if (nm_info->map_seg[j] != NULL) {
554 bus_dmamap_destroy(tx_tag,
555 nm_info->map_seg[j]);
556 nm_info->map_seg[j] = NULL;
557 }
558 }
559 }
560#endif /* DEV_NETMAP */
561 if (tx_info->map_head != NULL) {
562 bus_dmamap_destroy(tx_tag, tx_info->map_head);
563 tx_info->map_head = NULL;
561 if (tx_info->dmamap != NULL) {
562 bus_dmamap_destroy(tx_tag, tx_info->dmamap);
563 tx_info->dmamap = NULL;
564 }
564 }
565
566 if (tx_info->map_seg != NULL) {
567 bus_dmamap_destroy(tx_tag, tx_info->map_seg);
568 tx_info->map_seg = NULL;
569 }
570 }
571}
572
573/**
574 * ena_setup_tx_resources - allocate Tx resources (Descriptors)
575 * @adapter: network interface device structure
576 * @qid: queue index
577 *

--- 44 unchanged lines hidden (view full) ---

622 /* Make sure that drbr is empty */
623 ENA_RING_MTX_LOCK(tx_ring);
624 drbr_flush(adapter->ifp, tx_ring->br);
625 ENA_RING_MTX_UNLOCK(tx_ring);
626
627 /* ... and create the buffer DMA maps */
628 for (i = 0; i < tx_ring->ring_size; i++) {
629 err = bus_dmamap_create(adapter->tx_buf_tag, 0,
565 }
566}
567
568/**
569 * ena_setup_tx_resources - allocate Tx resources (Descriptors)
570 * @adapter: network interface device structure
571 * @qid: queue index
572 *

--- 44 unchanged lines hidden (view full) ---

617 /* Make sure that drbr is empty */
618 ENA_RING_MTX_LOCK(tx_ring);
619 drbr_flush(adapter->ifp, tx_ring->br);
620 ENA_RING_MTX_UNLOCK(tx_ring);
621
622 /* ... and create the buffer DMA maps */
623 for (i = 0; i < tx_ring->ring_size; i++) {
624 err = bus_dmamap_create(adapter->tx_buf_tag, 0,
630 &tx_ring->tx_buffer_info[i].map_head);
625 &tx_ring->tx_buffer_info[i].dmamap);
631 if (unlikely(err != 0)) {
632 ena_trace(ENA_ALERT,
626 if (unlikely(err != 0)) {
627 ena_trace(ENA_ALERT,
633 "Unable to create Tx DMA map_head for buffer %d\n",
628 "Unable to create Tx DMA map for buffer %d\n",
634 i);
635 goto err_map_release;
636 }
629 i);
630 goto err_map_release;
631 }
637 tx_ring->tx_buffer_info[i].seg_mapped = false;
638
632
639 err = bus_dmamap_create(adapter->tx_buf_tag, 0,
640 &tx_ring->tx_buffer_info[i].map_seg);
641 if (unlikely(err != 0)) {
642 ena_trace(ENA_ALERT,
643 "Unable to create Tx DMA map_seg for buffer %d\n",
644 i);
645 goto err_map_release;
646 }
647 tx_ring->tx_buffer_info[i].head_mapped = false;
648
649#ifdef DEV_NETMAP
650 if (adapter->ifp->if_capenable & IFCAP_NETMAP) {
651 map = tx_ring->tx_buffer_info[i].nm_info.map_seg;
652 for (j = 0; j < ENA_PKT_MAX_BUFS; j++) {
653 err = bus_dmamap_create(adapter->tx_buf_tag, 0,
654 &map[j]);
655 if (unlikely(err != 0)) {
656 ena_trace(ENA_ALERT, "Unable to create "

--- 58 unchanged lines hidden (view full) ---

715 taskqueue_free(tx_ring->enqueue_tq);
716
717 ENA_RING_MTX_LOCK(tx_ring);
718 /* Flush buffer ring, */
719 drbr_flush(adapter->ifp, tx_ring->br);
720
721 /* Free buffer DMA maps, */
722 for (int i = 0; i < tx_ring->ring_size; i++) {
633#ifdef DEV_NETMAP
634 if (adapter->ifp->if_capenable & IFCAP_NETMAP) {
635 map = tx_ring->tx_buffer_info[i].nm_info.map_seg;
636 for (j = 0; j < ENA_PKT_MAX_BUFS; j++) {
637 err = bus_dmamap_create(adapter->tx_buf_tag, 0,
638 &map[j]);
639 if (unlikely(err != 0)) {
640 ena_trace(ENA_ALERT, "Unable to create "

--- 58 unchanged lines hidden (view full) ---

699 taskqueue_free(tx_ring->enqueue_tq);
700
701 ENA_RING_MTX_LOCK(tx_ring);
702 /* Flush buffer ring, */
703 drbr_flush(adapter->ifp, tx_ring->br);
704
705 /* Free buffer DMA maps, */
706 for (int i = 0; i < tx_ring->ring_size; i++) {
723 if (tx_ring->tx_buffer_info[i].head_mapped == true) {
724 bus_dmamap_sync(adapter->tx_buf_tag,
725 tx_ring->tx_buffer_info[i].map_head,
726 BUS_DMASYNC_POSTWRITE);
727 bus_dmamap_unload(adapter->tx_buf_tag,
728 tx_ring->tx_buffer_info[i].map_head);
729 tx_ring->tx_buffer_info[i].head_mapped = false;
730 }
707 bus_dmamap_sync(adapter->tx_buf_tag,
708 tx_ring->tx_buffer_info[i].dmamap, BUS_DMASYNC_POSTWRITE);
709 bus_dmamap_unload(adapter->tx_buf_tag,
710 tx_ring->tx_buffer_info[i].dmamap);
731 bus_dmamap_destroy(adapter->tx_buf_tag,
711 bus_dmamap_destroy(adapter->tx_buf_tag,
732 tx_ring->tx_buffer_info[i].map_head);
712 tx_ring->tx_buffer_info[i].dmamap);
733
713
734 if (tx_ring->tx_buffer_info[i].seg_mapped == true) {
735 bus_dmamap_sync(adapter->tx_buf_tag,
736 tx_ring->tx_buffer_info[i].map_seg,
737 BUS_DMASYNC_POSTWRITE);
738 bus_dmamap_unload(adapter->tx_buf_tag,
739 tx_ring->tx_buffer_info[i].map_seg);
740 tx_ring->tx_buffer_info[i].seg_mapped = false;
741 }
742 bus_dmamap_destroy(adapter->tx_buf_tag,
743 tx_ring->tx_buffer_info[i].map_seg);
744
745#ifdef DEV_NETMAP
746 if (adapter->ifp->if_capenable & IFCAP_NETMAP) {
747 nm_info = &tx_ring->tx_buffer_info[i].nm_info;
748 for (j = 0; j < ENA_PKT_MAX_BUFS; j++) {
749 if (nm_info->socket_buf_idx[j] != 0) {
750 bus_dmamap_sync(adapter->tx_buf_tag,
751 nm_info->map_seg[j],
752 BUS_DMASYNC_POSTWRITE);

--- 451 unchanged lines hidden (view full) ---

1204 qid, i);
1205 print_once = false;
1206 } else {
1207 ena_trace(ENA_DBG,
1208 "free uncompleted tx mbuf qid %d idx 0x%x\n",
1209 qid, i);
1210 }
1211
714#ifdef DEV_NETMAP
715 if (adapter->ifp->if_capenable & IFCAP_NETMAP) {
716 nm_info = &tx_ring->tx_buffer_info[i].nm_info;
717 for (j = 0; j < ENA_PKT_MAX_BUFS; j++) {
718 if (nm_info->socket_buf_idx[j] != 0) {
719 bus_dmamap_sync(adapter->tx_buf_tag,
720 nm_info->map_seg[j],
721 BUS_DMASYNC_POSTWRITE);

--- 451 unchanged lines hidden (view full) ---

1173 qid, i);
1174 print_once = false;
1175 } else {
1176 ena_trace(ENA_DBG,
1177 "free uncompleted tx mbuf qid %d idx 0x%x\n",
1178 qid, i);
1179 }
1180
1212 if (tx_info->head_mapped == true) {
1213 bus_dmamap_sync(adapter->tx_buf_tag, tx_info->map_head,
1214 BUS_DMASYNC_POSTWRITE);
1215 bus_dmamap_unload(adapter->tx_buf_tag,
1216 tx_info->map_head);
1217 tx_info->head_mapped = false;
1218 }
1181 bus_dmamap_sync(adapter->tx_buf_tag, tx_info->dmamap,
1182 BUS_DMASYNC_POSTWRITE);
1183 bus_dmamap_unload(adapter->tx_buf_tag, tx_info->dmamap);
1219
1184
1220 if (tx_info->seg_mapped == true) {
1221 bus_dmamap_sync(adapter->tx_buf_tag, tx_info->map_seg,
1222 BUS_DMASYNC_POSTWRITE);
1223 bus_dmamap_unload(adapter->tx_buf_tag,
1224 tx_info->map_seg);
1225 tx_info->seg_mapped = false;
1226 }
1227
1228 m_free(tx_info->mbuf);
1229 tx_info->mbuf = NULL;
1230 }
1231 ENA_RING_MTX_UNLOCK(tx_ring);
1232}
1233
1234static void
1235ena_free_all_tx_bufs(struct ena_adapter *adapter)

--- 2402 unchanged lines hidden ---
1185 m_free(tx_info->mbuf);
1186 tx_info->mbuf = NULL;
1187 }
1188 ENA_RING_MTX_UNLOCK(tx_ring);
1189}
1190
1191static void
1192ena_free_all_tx_bufs(struct ena_adapter *adapter)

--- 2402 unchanged lines hidden ---