.. | .. |
---|
1637 | 1637 | { |
---|
1638 | 1638 | switch (sdma_mapping_type(descp)) { |
---|
1639 | 1639 | case SDMA_MAP_SINGLE: |
---|
1640 | | - dma_unmap_single( |
---|
1641 | | - &dd->pcidev->dev, |
---|
1642 | | - sdma_mapping_addr(descp), |
---|
1643 | | - sdma_mapping_len(descp), |
---|
1644 | | - DMA_TO_DEVICE); |
---|
| 1640 | + dma_unmap_single(&dd->pcidev->dev, sdma_mapping_addr(descp), |
---|
| 1641 | + sdma_mapping_len(descp), DMA_TO_DEVICE); |
---|
1645 | 1642 | break; |
---|
1646 | 1643 | case SDMA_MAP_PAGE: |
---|
1647 | | - dma_unmap_page( |
---|
1648 | | - &dd->pcidev->dev, |
---|
1649 | | - sdma_mapping_addr(descp), |
---|
1650 | | - sdma_mapping_len(descp), |
---|
1651 | | - DMA_TO_DEVICE); |
---|
| 1644 | + dma_unmap_page(&dd->pcidev->dev, sdma_mapping_addr(descp), |
---|
| 1645 | + sdma_mapping_len(descp), DMA_TO_DEVICE); |
---|
1652 | 1646 | break; |
---|
1653 | 1647 | } |
---|
| 1648 | + |
---|
| 1649 | + if (descp->pinning_ctx && descp->ctx_put) |
---|
| 1650 | + descp->ctx_put(descp->pinning_ctx); |
---|
| 1651 | + descp->pinning_ctx = NULL; |
---|
1654 | 1652 | } |
---|
1655 | 1653 | |
---|
1656 | 1654 | /* |
---|
.. | .. |
---|
3171 | 3169 | /* Add descriptor for coalesce buffer */ |
---|
3172 | 3170 | tx->desc_limit = MAX_DESC; |
---|
3173 | 3171 | return _sdma_txadd_daddr(dd, SDMA_MAP_SINGLE, tx, |
---|
3174 | | - addr, tx->tlen); |
---|
| 3172 | + addr, tx->tlen, NULL, NULL, NULL); |
---|
3175 | 3173 | } |
---|
3176 | 3174 | |
---|
3177 | 3175 | return 1; |
---|
.. | .. |
---|
3202 | 3200 | { |
---|
3203 | 3201 | int rval = 0; |
---|
3204 | 3202 | |
---|
3205 | | - tx->num_desc++; |
---|
3206 | | - if ((unlikely(tx->num_desc == tx->desc_limit))) { |
---|
| 3203 | + if ((unlikely(tx->num_desc + 1 == tx->desc_limit))) { |
---|
3207 | 3204 | rval = _extend_sdma_tx_descs(dd, tx); |
---|
3208 | 3205 | if (rval) { |
---|
3209 | 3206 | __sdma_txclean(dd, tx); |
---|
3210 | 3207 | return rval; |
---|
3211 | 3208 | } |
---|
3212 | 3209 | } |
---|
| 3210 | + |
---|
3213 | 3211 | /* finish the one just added */ |
---|
3214 | 3212 | make_tx_sdma_desc( |
---|
3215 | 3213 | tx, |
---|
3216 | 3214 | SDMA_MAP_NONE, |
---|
3217 | 3215 | dd->sdma_pad_phys, |
---|
3218 | | - sizeof(u32) - (tx->packet_len & (sizeof(u32) - 1))); |
---|
| 3216 | + sizeof(u32) - (tx->packet_len & (sizeof(u32) - 1)), |
---|
| 3217 | + NULL, NULL, NULL); |
---|
| 3218 | + tx->num_desc++; |
---|
3219 | 3219 | _sdma_close_tx(dd, tx); |
---|
3220 | 3220 | return rval; |
---|
3221 | 3221 | } |
---|