diff options
| author | Maxime Henrion <mux@FreeBSD.org> | 2004-10-19 23:31:44 +0000 |
|---|---|---|
| committer | Maxime Henrion <mux@FreeBSD.org> | 2004-10-19 23:31:44 +0000 |
| commit | 2534c4f99c848793b306d08b05a9014df3949683 (patch) | |
| tree | 1adacd3e76610203cc080bc6673e2fefae582960 /sys/dev/em | |
| parent | 57bbe2e1ab7af5a00c143168370fece2084da355 (diff) | |
Notes
Diffstat (limited to 'sys/dev/em')
| -rw-r--r-- | sys/dev/em/if_em.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/dev/em/if_em.c b/sys/dev/em/if_em.c index a90eb7a3e4173..4c896bffe3cc0 100644 --- a/sys/dev/em/if_em.c +++ b/sys/dev/em/if_em.c @@ -1339,6 +1339,8 @@ em_encap(struct adapter *adapter, struct mbuf *m_head) * Advance the Transmit Descriptor Tail (Tdt), this tells the E1000 * that this frame is available to transmit. */ + bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); if (adapter->hw.mac_type == em_82547 && adapter->link_duplex == HALF_DUPLEX) { em_82547_move_tail_locked(adapter); @@ -2390,6 +2392,8 @@ em_clean_transmit_interrupts(struct adapter * adapter) tx_buffer = &adapter->tx_buffer_area[i]; tx_desc = &adapter->tx_desc_base[i]; + bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, + BUS_DMASYNC_POSTREAD); while (tx_desc->upper.fields.status & E1000_TXD_STAT_DD) { tx_desc->upper.data = 0; @@ -2397,8 +2401,6 @@ em_clean_transmit_interrupts(struct adapter * adapter) if (tx_buffer->m_head) { ifp->if_opackets++; - bus_dmamap_sync(adapter->txtag, tx_buffer->map, - BUS_DMASYNC_POSTWRITE); bus_dmamap_unload(adapter->txtag, tx_buffer->map); bus_dmamap_destroy(adapter->txtag, tx_buffer->map); @@ -2412,6 +2414,8 @@ em_clean_transmit_interrupts(struct adapter * adapter) tx_buffer = &adapter->tx_buffer_area[i]; tx_desc = &adapter->tx_desc_base[i]; } + bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); adapter->oldest_used_tx_desc = i; @@ -2551,6 +2555,8 @@ em_allocate_receive_structures(struct adapter * adapter) return(error); } } + bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); return(0); @@ -2736,6 +2742,8 @@ em_process_receive_interrupts(struct adapter * adapter, int count) ifp = &adapter->interface_data.ac_if; i = adapter->next_rx_desc_to_check; current_desc = &adapter->rx_desc_base[i]; + bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map, + BUS_DMASYNC_POSTREAD); if (!((current_desc->status) & E1000_RXD_STAT_DD)) { #ifdef DBG_STATS @@ -2883,6 +2891,8 @@ em_process_receive_interrupts(struct adapter * adapter, int count) } else current_desc++; } + bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); adapter->next_rx_desc_to_check = i; return; } |
