From patchwork Wed Feb 25 19:32:24 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tetsuya Mukawa X-Patchwork-Id: 3724 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 0E22D9A8C; Wed, 25 Feb 2015 20:33:16 +0100 (CET) Received: from mail-pa0-f53.google.com (mail-pa0-f53.google.com [209.85.220.53]) by dpdk.org (Postfix) with ESMTP id 9CF395A9A for ; Wed, 25 Feb 2015 20:33:07 +0100 (CET) Received: by pablf10 with SMTP id lf10so7559997pab.6 for ; Wed, 25 Feb 2015 11:33:07 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=m7/3Lu4JXIIS3ubLJSHgTVuga1CxijzSgzFyCJhRl2Y=; b=co0ELxCCu5HT81OS7hcgTei1oZNXXuZuxbIAgJ5JW7jA8LDNYNy5FYFsofNHiaaWoT fXVWCyXx4n5oQj8i7K8hNoCVmC3fABknuwJ1dBCzlPD3GQtOlgoXMaQPm+XjvQ4Kpskc k7a1vwCWq7X7OaI3uxd1azeFTvcmDMm3iYERbhvIEi4B84zo/+nXfqxd3cu9ltyD2X8y BU4X2p0sfSDmNeftp60Yz7MqLurUJSicoAshFKp+86lKl59p3GqKMErcEqtVNuygpcnU CJibPyn2DkTywf3DW5SD8YpQgvD7cH1I2MwaOEFsL2EFcPNi5ZHT6+8GkOfTpyVpgE5X 4sJQ== X-Gm-Message-State: ALoCoQk+5rEjQHTy0aNkJCPGqchJ1c52yLq7qDn4SAmfaW4i+sX8e++nsTmMltg9NOhoHFEWn59c X-Received: by 10.70.89.200 with SMTP id bq8mr8268102pdb.57.1424892787072; Wed, 25 Feb 2015 11:33:07 -0800 (PST) Received: from localhost.localdomain (napt.igel.co.jp. [219.106.231.132]) by mx.google.com with ESMTPSA id ux7sm39997444pab.19.2015.02.25.11.33.04 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 25 Feb 2015 11:33:06 -0800 (PST) From: Tetsuya Mukawa To: dev@dpdk.org Date: Thu, 26 Feb 2015 04:32:24 +0900 Message-Id: <1424892749-31862-11-git-send-email-mukawa@igel.co.jp> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1424892749-31862-1-git-send-email-mukawa@igel.co.jp> References: <1424837093-5661-13-git-send-email-mukawa@igel.co.jp> <1424892749-31862-1-git-send-email-mukawa@igel.co.jp> Subject: [dpdk-dev] [PATCH v15 10/13] ethdev: Add one dev_type parameter to rte_eth_dev_allocate X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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. v15: - Remove needless symbols in version.map - Move rte_eth_dev_get_device_type() to later patch to compile correctly. v12: - Add missing symbol in version map. (Thanks to Iremonger, Bernard) v10: - Change order of version.map. (Thanks to Thomas Monjalon) - Fix comment of "rte_ethdev.h". (Thanks to Thomas Monjalon) v9: - Fix commit log. - RTE_ETH_DEV_PHYSICAL is replaced by RTE_ETH_DEV_PCI. (Thanks to Thomas Monjalon) v8: - NONE_TRACE is replaced by NO_TRACE. - Add missing symbol in version map. (Thanks to Qiu, Michael and Iremonger, Bernard) v4: - Fix comments of rte_eth_dev_type. Signed-off-by: Tetsuya Mukawa --- app/test/virtual_pmd.c | 2 +- lib/librte_ether/rte_ethdev.c | 5 +++-- lib/librte_ether/rte_ethdev.h | 16 +++++++++++++++- lib/librte_pmd_af_packet/rte_eth_af_packet.c | 2 +- lib/librte_pmd_bond/rte_eth_bond_api.c | 2 +- lib/librte_pmd_pcap/rte_eth_pcap.c | 2 +- lib/librte_pmd_ring/rte_eth_ring.c | 2 +- lib/librte_pmd_xenvirt/rte_eth_xenvirt.c | 2 +- 8 files changed, 24 insertions(+), 9 deletions(-) diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c index 785bccc..9b07ab1 100644 --- a/app/test/virtual_pmd.c +++ b/app/test/virtual_pmd.c @@ -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; diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index 0ca7147..b07f2df 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -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; diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 37c3765..50c2dce 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -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 diff --git a/lib/librte_pmd_af_packet/rte_eth_af_packet.c b/lib/librte_pmd_af_packet/rte_eth_af_packet.c index 1ffe1cd..80e9bdf 100644 --- a/lib/librte_pmd_af_packet/rte_eth_af_packet.c +++ b/lib/librte_pmd_af_packet/rte_eth_af_packet.c @@ -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; diff --git a/lib/librte_pmd_bond/rte_eth_bond_api.c b/lib/librte_pmd_bond/rte_eth_bond_api.c index 230d36c..903b7c3 100644 --- a/lib/librte_pmd_bond/rte_eth_bond_api.c +++ b/lib/librte_pmd_bond/rte_eth_bond_api.c @@ -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; diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte_eth_pcap.c index d299288..af7fae8 100644 --- a/lib/librte_pmd_pcap/rte_eth_pcap.c +++ b/lib/librte_pmd_pcap/rte_eth_pcap.c @@ -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; diff --git a/lib/librte_pmd_ring/rte_eth_ring.c b/lib/librte_pmd_ring/rte_eth_ring.c index a5dc71e..83ecfa8 100644 --- a/lib/librte_pmd_ring/rte_eth_ring.c +++ b/lib/librte_pmd_ring/rte_eth_ring.c @@ -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; diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c b/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c index 04e30c9..bc403d6 100644 --- a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c +++ b/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c @@ -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;