This code looks like it was part of something bigger (and/or written by a object oriented programmer).
Lots of indirection tables and most never have multiple implementations. Function indirection is slower and risks SPECTRE type attacks. > +struct nbl_product_core_ops { > + int (*hw_init)(void *p); > + void (*hw_remove)(void *p); > + int (*res_init)(void *p, struct rte_eth_dev *eth_dev); > + void (*res_remove)(void *p); > + int (*chan_init)(void *p); > + void (*chan_remove)(void *p); > +}; > +struct nbl_product_dev_ops { > + int (*dev_init)(void *adapter); > + void (*dev_uninit)(void *adapter); > + int (*dev_start)(void *adapter); > + void (*dev_stop)(void *adapter); > +}; > + > +struct nbl_product_dispatch_ops { > + int (*dispatch_init)(void *mgt); > + int (*dispatch_uninit)(void *mgt); > +}; > +struct nbl_product_dev_external_ops { > + int (*external_pf_ops_get)(struct rte_eth_dev *dev, void *arg); > + int (*external_rep_ops_get)(struct rte_eth_dev *dev, void *arg); > + int (*external_bond_ops_get)(struct rte_eth_dev *dev, void *arg); > +}; These are defined but never used. > +#endif