| 601 | } |
| 602 | |
| 603 | int |
| 604 | rte_bbdev_close(uint16_t dev_id) |
| 605 | { |
| 606 | int ret; |
| 607 | uint16_t i; |
| 608 | struct rte_bbdev *dev = get_dev(dev_id); |
| 609 | VALID_DEV_OR_RET_ERR(dev, dev_id); |
| 610 | |
| 611 | VALID_DEV_OPS_OR_RET_ERR(dev, dev_id); |
| 612 | |
| 613 | if (dev->data->started) { |
| 614 | ret = rte_bbdev_stop(dev_id); |
| 615 | if (ret < 0) { |
| 616 | rte_bbdev_log(ERR, "Device %u stop failed", dev_id); |
| 617 | return ret; |
| 618 | } |
| 619 | } |
| 620 | |
| 621 | /* Free memory used by queues */ |
| 622 | for (i = 0; i < dev->data->num_queues; i++) { |
| 623 | ret = dev->dev_ops->queue_release(dev, i); |
| 624 | if (ret < 0) { |
| 625 | rte_bbdev_log(ERR, "Device %u queue %u release failed", |
| 626 | dev_id, i); |
| 627 | return ret; |
| 628 | } |
| 629 | } |
| 630 | rte_free(dev->data->queues); |
| 631 | |
| 632 | if (dev->dev_ops->close) { |
| 633 | ret = dev->dev_ops->close(dev); |
| 634 | if (ret < 0) { |
| 635 | rte_bbdev_log(ERR, "Device %u close failed", dev_id); |
| 636 | return ret; |
| 637 | } |
| 638 | } |
| 639 | |
| 640 | /* Clear configuration */ |
| 641 | dev->data->queues = NULL; |
| 642 | dev->data->num_queues = 0; |
| 643 | |
| 644 | rte_bbdev_log_debug("Closed device %u", dev_id); |
| 645 | return 0; |
| 646 | } |
| 647 | |
| 648 | int |
| 649 | rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id) |