ethdev: add device type
This new parameter is needed to keep device type like PCI or virtual. Port detaching processes are different between PCI device and virtual device. RTE_ETH_DEV_PCI indicates device type is PCI. RTE_ETH_DEV_VIRTUAL indicates device is virtual. Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
This commit is contained in:
parent
6c6829475b
commit
9f1653e7b7
@ -580,7 +580,7 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
|
||||
goto err;
|
||||
|
||||
/* reserve an ethdev entry */
|
||||
eth_dev = rte_eth_dev_allocate(name);
|
||||
eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_PCI);
|
||||
if (eth_dev == NULL)
|
||||
goto err;
|
||||
|
||||
|
@ -227,7 +227,7 @@ rte_eth_dev_find_free_port(void)
|
||||
}
|
||||
|
||||
struct rte_eth_dev *
|
||||
rte_eth_dev_allocate(const char *name)
|
||||
rte_eth_dev_allocate(const char *name, enum rte_eth_dev_type type)
|
||||
{
|
||||
uint8_t port_id;
|
||||
struct rte_eth_dev *eth_dev;
|
||||
@ -251,6 +251,7 @@ rte_eth_dev_allocate(const char *name)
|
||||
snprintf(eth_dev->data->name, sizeof(eth_dev->data->name), "%s", name);
|
||||
eth_dev->data->port_id = port_id;
|
||||
eth_dev->attached = DEV_ATTACHED;
|
||||
eth_dev->dev_type = type;
|
||||
nb_ports++;
|
||||
return eth_dev;
|
||||
}
|
||||
@ -300,7 +301,7 @@ rte_eth_dev_init(struct rte_pci_driver *pci_drv,
|
||||
rte_eth_dev_create_unique_device_name(ethdev_name,
|
||||
sizeof(ethdev_name), pci_dev);
|
||||
|
||||
eth_dev = rte_eth_dev_allocate(ethdev_name);
|
||||
eth_dev = rte_eth_dev_allocate(ethdev_name, RTE_ETH_DEV_PCI);
|
||||
if (eth_dev == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -1422,6 +1422,17 @@ struct rte_eth_rxtx_callback {
|
||||
void *param;
|
||||
};
|
||||
|
||||
/*
|
||||
* The eth device type
|
||||
*/
|
||||
enum rte_eth_dev_type {
|
||||
RTE_ETH_DEV_UNKNOWN, /**< unknown device type */
|
||||
RTE_ETH_DEV_PCI,
|
||||
/**< Physical function and Virtual function of PCI devices */
|
||||
RTE_ETH_DEV_VIRTUAL, /**< non hardware device */
|
||||
RTE_ETH_DEV_MAX /**< max value of this enum */
|
||||
};
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* The generic data structure associated with each ethernet device.
|
||||
@ -1452,6 +1463,7 @@ struct rte_eth_dev {
|
||||
*/
|
||||
struct rte_eth_rxtx_callback **pre_tx_burst_cbs;
|
||||
uint8_t attached; /**< Flag indicating the port is attached */
|
||||
enum rte_eth_dev_type dev_type; /**< Flag indicating the device type */
|
||||
};
|
||||
|
||||
struct rte_eth_dev_sriov {
|
||||
@ -1534,10 +1546,12 @@ extern uint8_t rte_eth_dev_count(void);
|
||||
* to that slot for the driver to use.
|
||||
*
|
||||
* @param name Unique identifier name for each Ethernet device
|
||||
* @param type Device type of this Ethernet device
|
||||
* @return
|
||||
* - Slot in the rte_dev_devices array for a new device;
|
||||
*/
|
||||
struct rte_eth_dev *rte_eth_dev_allocate(const char *name);
|
||||
struct rte_eth_dev *rte_eth_dev_allocate(const char *name,
|
||||
enum rte_eth_dev_type type);
|
||||
|
||||
/**
|
||||
* Function for internal use by dummy drivers primarily, e.g. ring-based
|
||||
|
@ -649,7 +649,7 @@ rte_pmd_init_internals(const char *name,
|
||||
}
|
||||
|
||||
/* reserve an ethdev entry */
|
||||
*eth_dev = rte_eth_dev_allocate(name);
|
||||
*eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL);
|
||||
if (*eth_dev == NULL)
|
||||
goto error;
|
||||
|
||||
|
@ -257,7 +257,7 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id)
|
||||
}
|
||||
|
||||
/* reserve an ethdev entry */
|
||||
eth_dev = rte_eth_dev_allocate(name);
|
||||
eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL);
|
||||
if (eth_dev == NULL) {
|
||||
RTE_BOND_LOG(ERR, "Unable to allocate rte_eth_dev");
|
||||
goto err;
|
||||
|
@ -709,7 +709,7 @@ rte_pmd_init_internals(const char *name, const unsigned nb_rx_queues,
|
||||
goto error;
|
||||
|
||||
/* reserve an ethdev entry */
|
||||
*eth_dev = rte_eth_dev_allocate(name);
|
||||
*eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL);
|
||||
if (*eth_dev == NULL)
|
||||
goto error;
|
||||
|
||||
|
@ -297,7 +297,7 @@ rte_eth_from_rings(const char *name, struct rte_ring *const rx_queues[],
|
||||
goto error;
|
||||
|
||||
/* reserve an ethdev entry */
|
||||
eth_dev = rte_eth_dev_allocate(name);
|
||||
eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL);
|
||||
if (eth_dev == NULL)
|
||||
goto error;
|
||||
|
||||
|
@ -648,7 +648,7 @@ eth_dev_xenvirt_create(const char *name, const char *params,
|
||||
goto err;
|
||||
|
||||
/* reserve an ethdev entry */
|
||||
eth_dev = rte_eth_dev_allocate(name);
|
||||
eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL);
|
||||
if (eth_dev == NULL)
|
||||
goto err;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user