1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause 2d30ea906Sjfb8856606 * Copyright(c) 2017 Brocade Communications Systems, Inc. 3d30ea906Sjfb8856606 * Author: Jan Blunck <[email protected]> 4d30ea906Sjfb8856606 */ 5d30ea906Sjfb8856606 6d30ea906Sjfb8856606 #ifndef _RTE_ETHDEV_VDEV_H_ 7d30ea906Sjfb8856606 #define _RTE_ETHDEV_VDEV_H_ 8d30ea906Sjfb8856606 9d30ea906Sjfb8856606 #include <rte_config.h> 10d30ea906Sjfb8856606 #include <rte_malloc.h> 11d30ea906Sjfb8856606 #include <rte_bus_vdev.h> 12d30ea906Sjfb8856606 #include <rte_ethdev_driver.h> 13d30ea906Sjfb8856606 14d30ea906Sjfb8856606 /** 15d30ea906Sjfb8856606 * @internal 16d30ea906Sjfb8856606 * Allocates a new ethdev slot for an ethernet device and returns the pointer 17d30ea906Sjfb8856606 * to that slot for the driver to use. 18d30ea906Sjfb8856606 * 19d30ea906Sjfb8856606 * @param dev 20d30ea906Sjfb8856606 * Pointer to virtual device 21d30ea906Sjfb8856606 * 22d30ea906Sjfb8856606 * @param private_data_size 23d30ea906Sjfb8856606 * Size of private data structure 24d30ea906Sjfb8856606 * 25d30ea906Sjfb8856606 * @return 26d30ea906Sjfb8856606 * A pointer to a rte_eth_dev or NULL if allocation failed. 27d30ea906Sjfb8856606 */ 28d30ea906Sjfb8856606 static inline struct rte_eth_dev * rte_eth_vdev_allocate(struct rte_vdev_device * dev,size_t private_data_size)29d30ea906Sjfb8856606rte_eth_vdev_allocate(struct rte_vdev_device *dev, size_t private_data_size) 30d30ea906Sjfb8856606 { 31d30ea906Sjfb8856606 struct rte_eth_dev *eth_dev; 32d30ea906Sjfb8856606 const char *name = rte_vdev_device_name(dev); 33d30ea906Sjfb8856606 34d30ea906Sjfb8856606 eth_dev = rte_eth_dev_allocate(name); 35d30ea906Sjfb8856606 if (!eth_dev) 36d30ea906Sjfb8856606 return NULL; 37d30ea906Sjfb8856606 38d30ea906Sjfb8856606 if (private_data_size) { 39d30ea906Sjfb8856606 eth_dev->data->dev_private = rte_zmalloc_socket(name, 40d30ea906Sjfb8856606 private_data_size, RTE_CACHE_LINE_SIZE, 41d30ea906Sjfb8856606 dev->device.numa_node); 42d30ea906Sjfb8856606 if (!eth_dev->data->dev_private) { 43d30ea906Sjfb8856606 rte_eth_dev_release_port(eth_dev); 44d30ea906Sjfb8856606 return NULL; 45d30ea906Sjfb8856606 } 46d30ea906Sjfb8856606 } 47d30ea906Sjfb8856606 48d30ea906Sjfb8856606 eth_dev->device = &dev->device; 49d30ea906Sjfb8856606 eth_dev->intr_handle = NULL; 50d30ea906Sjfb8856606 51d30ea906Sjfb8856606 eth_dev->data->numa_node = dev->device.numa_node; 52d30ea906Sjfb8856606 return eth_dev; 53d30ea906Sjfb8856606 } 54d30ea906Sjfb8856606 55d30ea906Sjfb8856606 #endif /* _RTE_ETHDEV_VDEV_H_ */ 56