| 560 | } |
| 561 | |
| 562 | int |
| 563 | rte_dma_close(int16_t dev_id) |
| 564 | { |
| 565 | struct rte_dma_dev *dev = &rte_dma_devices[dev_id]; |
| 566 | int ret; |
| 567 | |
| 568 | if (!rte_dma_is_valid(dev_id)) |
| 569 | return -EINVAL; |
| 570 | |
| 571 | /* Device must be stopped before it can be closed */ |
| 572 | if (dev->data->dev_started == 1) { |
| 573 | RTE_DMA_LOG(ERR, |
| 574 | "Device %d must be stopped before closing", dev_id); |
| 575 | return -EBUSY; |
| 576 | } |
| 577 | |
| 578 | if (*dev->dev_ops->dev_close == NULL) |
| 579 | return -ENOTSUP; |
| 580 | ret = (*dev->dev_ops->dev_close)(dev); |
| 581 | if (ret == 0) |
| 582 | dma_release(dev); |
| 583 | |
| 584 | rte_dma_trace_close(dev_id, ret); |
| 585 | |
| 586 | return ret; |
| 587 | } |
| 588 | |
| 589 | int |
| 590 | rte_dma_vchan_setup(int16_t dev_id, uint16_t vchan, |
no test coverage detected