功能检查
使用 DOCA 设备的应用程序依赖于一组特定的功能才能按设计运行。因此,建议检查所选 DOCA 设备是否具备这些功能。为了实现这一目标,DOCA SDK 公开了功能,这些功能是一组具有通用外观和感觉的 API,如本页所述。
应用程序应在使用任何 DOCA SDK API(核心、库)之前使用这些功能 API,以便尽早失败(在初始化任何资源之前),并且能够实现回退流程,而不是在应用程序流程中意外出错。
使用 DOCA Core API 的应用程序可能需要根据特定功能来识别要使用的特定 DOCA 设备。
为此,doca_devinfo
和 doca_devinfo_rep
公开了带有前缀 doca_devinfo_cap_*
/doca_devinfo_rep_cap_*
的 API。例如
doca_error_t doca_devinfo_cap_is_hotplug_manager_supported(const
struct
doca_devinfo *devinfo, uint8_t *is_hotplug_manager);
doca_error_t doca_devinfo_rep_cap_is_filter_emulated_supported(const
struct
doca_devinfo *devinfo, uint8_t *filter_emulated_supported);
每个 DOCA 库都公开了一组功能 API,用于以下目的
查询库上下文或库任务的配置属性的最大/最小值
验证特定 DOCA 设备是否支持库任务
所有库功能 API 都以 doca_<library_name>_cap_*
前缀开头。此外
配置限制功能 API 以
doca_<library_name>_cap_[task_<task_type>]_get_min/max_*
前缀开头任务支持功能 API 的命名模板为
doca_<library_name>_cap_task_<task_type>_is_supported
例如,DOCA DMA 公开了
doca_error_t doca_dma_cap_task_memcpy_is_supported(const
struct
doca_devinfo *devinfo);
doca_error_t doca_dma_cap_get_max_num_tasks(struct
doca_dma *dma, uint32_t *max_num_tasks);
doca_error_t doca_dma_cap_task_memcpy_get_max_buf_size(const
struct
doca_devinfo *devinfo, uint64_t *buf_size);
与任何其他 DOCA 库一样,每个 DOCA Core 模块也公开了功能 API。
例如
面向热插拔(模拟 PCIe 功能)的应用程序可以检查特定的 DOCA 设备信息结构是否启用热插拔模拟设备,通过调用
doca_error_t doca_devinfo_cap_is_hotplug_manager_supported(
const
struct
doca_devinfo *devinfo, uint8_t *is_hotplug_manager);使用 DOCA mmap 在主机和 BlueField 之间共享的应用程序必须从主机导出
doca_mmap
并从 BlueField 导入它。在开始工作流程之前,应用程序可以检查给定的doca_devinfo
是否支持这些操作,使用以下 APIdoca_error_t doca_mmap_cap_is_export_pci_supported(
const
struct
doca_devinfo *devinfo, uint8_t *mmap_export); doca_error_t doca_mmap_cap_is_create_from_export_pci_supported(const
struct
doca_devinfo *devinfo, uint8_t *from_export);