|
34 | 34 | #define DRV_DESC "vDPA Device Simulator"
|
35 | 35 | #define DRV_LICENSE "GPL v2"
|
36 | 36 |
|
| 37 | +static int batch_mapping = 1; |
| 38 | +module_param(batch_mapping, int, 0444); |
| 39 | +MODULE_PARM_DESC(batch_mapping, "Batched mapping 1 -Enable; 0 - Disable"); |
| 40 | + |
37 | 41 | struct vdpasim_virtqueue {
|
38 | 42 | struct vringh vring;
|
39 | 43 | struct vringh_kiov iov;
|
@@ -334,15 +338,21 @@ static const struct dma_map_ops vdpasim_dma_ops = {
|
334 | 338 | };
|
335 | 339 |
|
336 | 340 | static const struct vdpa_config_ops vdpasim_net_config_ops;
|
| 341 | +static const struct vdpa_config_ops vdpasim_net_batch_config_ops; |
337 | 342 |
|
338 | 343 | static struct vdpasim *vdpasim_create(void)
|
339 | 344 | {
|
| 345 | + const struct vdpa_config_ops *ops; |
340 | 346 | struct vdpasim *vdpasim;
|
341 | 347 | struct device *dev;
|
342 | 348 | int ret = -ENOMEM;
|
343 | 349 |
|
344 |
| - vdpasim = vdpa_alloc_device(struct vdpasim, vdpa, NULL, |
345 |
| - &vdpasim_net_config_ops); |
| 350 | + if (batch_mapping) |
| 351 | + ops = &vdpasim_net_batch_config_ops; |
| 352 | + else |
| 353 | + ops = &vdpasim_net_config_ops; |
| 354 | + |
| 355 | + vdpasim = vdpa_alloc_device(struct vdpasim, vdpa, NULL, ops); |
346 | 356 | if (!vdpasim)
|
347 | 357 | goto err_alloc;
|
348 | 358 |
|
@@ -643,12 +653,36 @@ static const struct vdpa_config_ops vdpasim_net_config_ops = {
|
643 | 653 | .get_config = vdpasim_get_config,
|
644 | 654 | .set_config = vdpasim_set_config,
|
645 | 655 | .get_generation = vdpasim_get_generation,
|
646 |
| - .set_map = vdpasim_set_map, |
647 | 656 | .dma_map = vdpasim_dma_map,
|
648 | 657 | .dma_unmap = vdpasim_dma_unmap,
|
649 | 658 | .free = vdpasim_free,
|
650 | 659 | };
|
651 | 660 |
|
| 661 | +static const struct vdpa_config_ops vdpasim_net_batch_config_ops = { |
| 662 | + .set_vq_address = vdpasim_set_vq_address, |
| 663 | + .set_vq_num = vdpasim_set_vq_num, |
| 664 | + .kick_vq = vdpasim_kick_vq, |
| 665 | + .set_vq_cb = vdpasim_set_vq_cb, |
| 666 | + .set_vq_ready = vdpasim_set_vq_ready, |
| 667 | + .get_vq_ready = vdpasim_get_vq_ready, |
| 668 | + .set_vq_state = vdpasim_set_vq_state, |
| 669 | + .get_vq_state = vdpasim_get_vq_state, |
| 670 | + .get_vq_align = vdpasim_get_vq_align, |
| 671 | + .get_features = vdpasim_get_features, |
| 672 | + .set_features = vdpasim_set_features, |
| 673 | + .set_config_cb = vdpasim_set_config_cb, |
| 674 | + .get_vq_num_max = vdpasim_get_vq_num_max, |
| 675 | + .get_device_id = vdpasim_get_device_id, |
| 676 | + .get_vendor_id = vdpasim_get_vendor_id, |
| 677 | + .get_status = vdpasim_get_status, |
| 678 | + .set_status = vdpasim_set_status, |
| 679 | + .get_config = vdpasim_get_config, |
| 680 | + .set_config = vdpasim_set_config, |
| 681 | + .get_generation = vdpasim_get_generation, |
| 682 | + .set_map = vdpasim_set_map, |
| 683 | + .free = vdpasim_free, |
| 684 | +}; |
| 685 | + |
652 | 686 | static int __init vdpasim_dev_init(void)
|
653 | 687 | {
|
654 | 688 | vdpasim_dev = vdpasim_create();
|
|
0 commit comments