c87d435a4d
Copy public function pointers (rx_pkt_burst(), etc.) and related pointers to internal data from rte_eth_dev structure into a separate flat array. That array will remain in a public header. The intention here is to make rte_eth_dev and related structures internal. That should allow future possible changes to core eth_dev structures to be transparent to the user and help to avoid ABI/API breakages. The plan is to keep minimal part of data from rte_eth_dev public, so we still can use inline functions for fast-path calls (like rte_eth_rx_burst(), etc.) to avoid/minimize slowdown. The whole idea beyond this new schema: 1. PMDs keep to setup fast-path function pointers and related data inside rte_eth_dev struct in the same way they did it before. 2. Inside rte_eth_dev_start() and inside rte_eth_dev_probing_finish() (for secondary process) we call eth_dev_fp_ops_setup, which copies these function and data pointers into rte_eth_fp_ops[port_id]. 3. Inside rte_eth_dev_stop() and inside rte_eth_dev_release_port() we call eth_dev_fp_ops_reset(), which resets rte_eth_fp_ops[port_id] into some dummy values. 4. fast-path ethdev API (rte_eth_rx_burst(), etc.) will use that new flat array to call PMD specific functions. That approach should allow us to make rte_eth_devices[] private without introducing regression and help to avoid changes in drivers code. Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com> Tested-by: Feifei Wang <feifei.wang2@arm.com>
37 lines
992 B
C
37 lines
992 B
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(c) 2018 Gaëtan Rivet
|
|
*/
|
|
|
|
#ifndef _ETH_PRIVATE_H_
|
|
#define _ETH_PRIVATE_H_
|
|
|
|
#include <rte_os_shim.h>
|
|
|
|
#include "rte_ethdev.h"
|
|
|
|
/*
|
|
* Convert rte_eth_dev pointer to port id.
|
|
* NULL will be translated to RTE_MAX_ETHPORTS.
|
|
*/
|
|
uint16_t eth_dev_to_id(const struct rte_eth_dev *dev);
|
|
|
|
/* Generic rte_eth_dev comparison function. */
|
|
typedef int (*rte_eth_cmp_t)(const struct rte_eth_dev *, const void *);
|
|
|
|
/* Generic rte_eth_dev iterator. */
|
|
struct rte_eth_dev *
|
|
eth_find_device(const struct rte_eth_dev *_start, rte_eth_cmp_t cmp,
|
|
const void *data);
|
|
|
|
/* Parse devargs value for representor parameter. */
|
|
int rte_eth_devargs_parse_representor_ports(char *str, void *data);
|
|
|
|
/* reset eth fast-path API to dummy values */
|
|
void eth_dev_fp_ops_reset(struct rte_eth_fp_ops *fpo);
|
|
|
|
/* setup eth fast-path API to ethdev values */
|
|
void eth_dev_fp_ops_setup(struct rte_eth_fp_ops *fpo,
|
|
const struct rte_eth_dev *dev);
|
|
|
|
#endif /* _ETH_PRIVATE_H_ */
|