Hi Ferruh, That's a good question. The answer is YES, we do need all these functions. We have complete the integrated test with Cyborg, there is no redundant function. Let me show you a use case in Cyborg. Cyborg will update FPGA flash and reboot it to make it effective, so they will call functions like below. 1. opae_enumerate() to find the target FPGA 2. opae_get_property() to check FPGA version 3. opae_get_image_info() to check the update image 4. opae_update_flash() to update FPGA flash 5. opae_reboot_device() to reboot FPGA 6. After reboot, FPGA kernel driver will not be vfio-pci by default, opae_bind_driver() is used to bind vfio-pci kernel driver. 7. opae_probe_device() to attach ifpga PMD to FPGA, then this FPGA can be managed by Cyborg again.
These functions will be wrapped in Python package. Cyborg require this Python package can be downloaded from PyPI and compiled without DPDK installed. So there is an independent project which will create a static library file from target DPDK. This library is part of Python package and will be used when compiling Python module. That's why I didn't export these function in map file. BTW, the header file ifpga_opae_api.h is also integrated into Python package from target DPDK. Thanks, Wei -----Original Message----- From: Ferruh Yigit <ferruh.yi...@intel.com> Sent: Friday, January 22, 2021 00:30 To: Huang, Wei <wei.hu...@intel.com>; dev@dpdk.org; Xu, Rosen <rosen...@intel.com>; Zhang, Qi Z <qi.z.zh...@intel.com> Cc: sta...@dpdk.org; Zhang, Tianfei <tianfei.zh...@intel.com>; Ray Kinsella <m...@ashroe.eu> Subject: Re: [dpdk-dev] [PATCH v11 3/4] raw/ifpga: add OPAE API for OpenStack Cyborg On 1/21/2021 6:03 AM, Wei Huang wrote: > Cyborg is an OpenStack project that aims to provide a general purpose > management framework for acceleration resources (i.e. various types of > accelerators such as GPU, FPGA, NP, ODP, DPDK/SPDK and so on). > It needs some OPAE type APIs to manage PACs (Programmable Acceleration > Card) with Intel FPGA. Below major functions are added to meets Cyborg > requirements. > 1. opae_init() set up OPAE environment. > 2. opae_cleanup() clean up OPAE environment. > 3. opae_enumerate() searches PAC with specific FPGA. > 4. opae_get_property() gets properties of FPGA. > 5. opae_partial_reconfigure() perform partial configuration on FPGA. > 6. opae_get_image_info() gets information of image file. > 7. opae_update_flash() updates FPGA flash with specific image file. > 8. opae_cancel_flash_update() cancel process of FPGA flash update. > 9. opae_probe_device() manually probe specific FPGA with ifpga driver. > 10. opae_remove_device() manually remove specific FPGA from ifpga driver. > 11. opae_bind_driver() binds specific FPGA with specified kernel driver. > 12. opae_unbind_driver() unbinds specific FPGA from kernel driver. > 13. opae_reboot_device() reboots specific FPGA (do reconfiguration). > Hi Wei, As far as I understand you are adding above public functions which are on top of raw/ifpga driver functions, so they are like PMD specific APIs, I think there are a few problems with it: 1) Do we really need/want this much PMD specific API? Can't we have them through the rawdev abstraction layer? 2) DPDK public APIs are part of API/ABI policy, so there are a few rules they have to follow, like: - They should start with 'rte_' prefix, and the PMD specific APIs should start with 'rte_pmd_' prefix - They should be in the .map file - They should be experimental at least one release - They should be fully documented in a doxygen format - Header file should be added to index file for API documentation Please don't update above before 1) is clearified and we are sure new APIs are required. <...> > @@ -13,8 +13,10 @@ objs = [base_objs] > deps += ['ethdev', 'rawdev', 'pci', 'bus_pci', 'kvargs', > 'bus_vdev', 'bus_ifpga', 'net', 'net_i40e', 'net_ipn3ke'] > > -sources = files('ifpga_rawdev.c') > +sources = files('ifpga_rawdev.c', 'ifpga_opae_api.c') > > includes += include_directories('base') > includes += include_directories('../../net/ipn3ke') > includes += include_directories('../../net/i40e') > + > +install_headers('ifpga_opae_api.h') > There is a 'headers' helper that you can use for meson. Also the header file name should start with 'rte_pmd_'. Even before this patch, isn't application has to include the rawdev PMD header? Why that header was not installed?