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:
Tetsuya Mukawa 2015-02-26 04:32:24 +09:00 committed by Thomas Monjalon
parent 6c6829475b
commit 9f1653e7b7
8 changed files with 24 additions and 9 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;