From 4c50e2f6bf412544ae02a1fe4e04622d12953fd9 Mon Sep 17 00:00:00 2001 From: Jianfeng Tan Date: Wed, 6 Apr 2016 11:51:13 +0800 Subject: [PATCH] ethdev: refine API to query supported packet types This change is to make user code simpler. For PMDs which do not fill any packet types, return 0 instead of -ENOTSUP as suggested by Bruce. Usually, users only care if the required (by ptype_mask) ptypes can be filled by the specified PMD. If the PMD implements dev_supported_ptypes_get func is not important. And the introduce of another return value (-ENOTSUP) would increase the complexity of user programs to check it. Besides, there are ways to know if a PMD implements the func: a. see doc/guides/nics/overview.rst. b. use (~1) as parameter ptype_mask, then check if return 0. Fixes: 78a38edf66de ("ethdev: query supported packet types") Suggested-by: Bruce Richardson Signed-off-by: Jianfeng Tan Acked-by: Konstantin Ananyev --- lib/librte_ether/rte_ethdev.c | 3 +-- lib/librte_ether/rte_ethdev.h | 9 ++++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index dcf9e6f55d..bd54e1f3fd 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -1670,8 +1670,7 @@ rte_eth_dev_get_supported_ptypes(uint8_t port_id, uint32_t ptype_mask, RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); dev = &rte_eth_devices[port_id]; - RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_supported_ptypes_get, - -ENOTSUP); + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_supported_ptypes_get, 0); all_ptypes = (*dev->dev_ops->dev_supported_ptypes_get)(dev); if (!all_ptypes) diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 37ddd511bc..022733ec0a 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -2379,6 +2379,9 @@ void rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info); * @note * Better to invoke this API after the device is already started or rx burst * function is decided, to obtain correct supported ptypes. + * @note + * if a given PMD does not report what ptypes it supports, then the supported + * ptype count is reported as 0. * @param port_id * The port identifier of the Ethernet device. * @param ptype_mask @@ -2388,9 +2391,9 @@ void rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info); * @param num * Size of the array pointed by param ptypes. * @return - * - (>0) Number of supported ptypes. If it exceeds param num, exceeding - * packet types will not be filled in the given array. - * - (0 or -ENOTSUP) if PMD does not fill the specified ptype. + * - (>=0) Number of supported ptypes. If the number of types exceeds num, + * only num entries will be filled into the ptypes array, but the full + * count of supported ptypes will be returned. * - (-ENODEV) if *port_id* invalid. */ int rte_eth_dev_get_supported_ptypes(uint8_t port_id, uint32_t ptype_mask, -- 2.20.1