DOCA 2.9.0 的 API 参考

2. 模块

DPA 性能工具 SDK 主机 API,主要用于 DPA 读取进程、线程和统计信息。

结构体 dpa_stats_capabilities
结构体 dpa_stats_perf_cumul_list
结构体 dpa_stats_perf_event_list
结构体 dpa_stats_perf_event_sample
结构体 dpa_stats_process_info
结构体 dpa_stats_process_list
结构体 dpa_stats_thread_cumul_info
结构体 dpa_stats_thread_info
结构体 dpa_stats_thread_list

宏定义

#define DPA_STATS_EXPERIMENTAL
将符号(或特定函数)设置为实验性。

枚举

枚举 dpa_stats_counter_state
枚举 dpa_stats_event_sample_type
枚举 dpa_stats_sample_type
枚举 dpa_stats_status

函数

DPA_STATS_EXPERIMENTAL void dpa_stats_close ( dpa_stats_handler_t* dpa_handler )
关闭先前打开的 DPA 设备以读取统计信息。
int  dpa_stats_compare_4_perf_cumul ( const void* elem1, const void* elem2 )
比较两个累积信息元素。
int  dpa_stats_compare_4_processes ( const void* elem1, const void* elem2 )
比较两个进程元素。
int  dpa_stats_compare_4_threads ( const void* elem1, const void* elem2 )
比较两个线程元素。
DPA_STATS_EXPERIMENTAL void dpa_stats_free_cumul_info_list ( dpa_stats_perf_cumul_list* cumul_info_list )
释放先前分配的累积信息计数器列表。
DPA_STATS_EXPERIMENTAL void dpa_stats_free_perf_event_list ( dpa_stats_perf_event_list* perf_event_list )
释放先前分配的事件计数器列表。
DPA_STATS_EXPERIMENTAL void dpa_stats_free_process_list ( dpa_stats_process_list* process_list )
释放先前分配的进程列表。
DPA_STATS_EXPERIMENTAL void dpa_stats_free_thread_list ( dpa_stats_thread_list* thread_list )
释放先前分配的线程列表。
dpa_stats_status dpa_stats_get_counter_state ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, dpa_stats_counter_state ** state, dpa_stats_sample_type ** type )
获取计数器状态和类型。
dpa_stats_status dpa_stats_get_error_code ( dpa_stats_handler_t* dpa_handler )
报告错误代码。
DPA_STATS_EXPERIMENTAL char* dpa_stats_get_error_location ( dpa_stats_handler_t* dpa_handler )
报告错误位置。
DPA_STATS_EXPERIMENTAL char* dpa_stats_get_error_message ( dpa_stats_handler_t* dpa_handler )
报告错误消息。
DPA_STATS_EXPERIMENTAL dpa_stats_handler_t* dpa_stats_open ( const char* dpa_device )
打开 DPA 设备以读取统计信息。
dpa_stats_status dpa_stats_read_caps ( dpa_stats_handler_t* dpa_handler, dpa_stats_capabilities* caps )
读取 DPA 设备功能。
dpa_stats_status dpa_stats_read_cumul_info_list ( dpa_stats_handler_t* dpa_handler, dpa_stats_process_list* process_list, dpa_stats_perf_cumul_list** cumul_info_list )
读取给定进程列表的累积信息计数器列表。
dpa_stats_status dpa_stats_read_perf_event_list ( dpa_stats_handler_t* dpa_handler, dpa_stats_process_list* process_list, dpa_stats_perf_event_list** perf_event_list )
读取给定进程列表的性能事件跟踪器计数器列表。
dpa_stats_status dpa_stats_read_process_cumul_info_list ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, uint32_t thread_id, dpa_stats_perf_cumul_list** cumul_info_list )
读取累积信息计数器列表。
dpa_stats_status dpa_stats_read_process_perf_event_list ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, uint32_t thread_id, dpa_stats_perf_event_list** perf_event_list )
读取性能事件跟踪器计数器列表。
dpa_stats_status dpa_stats_read_process_thread_list ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, uint32_t thread_id, dpa_stats_thread_list** thread_list )
读取线程信息。
dpa_stats_status dpa_stats_read_processes_list ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, dpa_stats_process_list** process_list )
读取进程信息。
dpa_stats_status dpa_stats_read_thread_list ( dpa_stats_handler_t* dpa_handler, dpa_stats_process_list* process_list, dpa_stats_thread_list** thread_list )
读取给定进程列表的线程信息。
dpa_stats_status dpa_stats_set_counter_state ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, dpa_stats_counter_state state, dpa_stats_sample_type type )
此函数为特定进程或所有进程设置具有适当状态和类型的事件计数器。
void dpa_stats_sort_perf_cumul_list ( dpa_stats_perf_cumul_list* cumul_list ) [inline]
排序累积信息列表。
void dpa_stats_sort_process_list ( dpa_stats_process_list* process_list ) [inline]
排序进程列表。
void dpa_stats_sort_thread_list ( dpa_stats_thread_list* thread_list ) [inline]
排序线程列表。

宏定义

#define DPA_STATS_EXPERIMENTAL

__attribute__((deprecated("Symbol is defined as experimental"), \ section(".text.experimental"))) \ DPA_STATS_STABLE

枚举

enum dpa_stats_counter_state

性能计数器状态列表。

DPA_STATS_COUNTER_STATE_ACTIVE = 1
DPA_STATS_COUNTER_STATE_INACTIVE = 2
DPA_STATS_COUNTER_STATE_RESET = 3

enum dpa_stats_event_sample_type

性能事件样本类型列表。

DPA_STATS_EVENT_SAMPLE_TYPE_EMPTY_SAMPLE = 0x0
DPA_STATS_EVENT_SAMPLE_TYPE_SCHEDULE_IN = 0x1
DPA_STATS_EVENT_SAMPLE_TYPE_SCHEDULE_OUT = 0x2
DPA_STATS_EVENT_SAMPLE_TYPE_BUFFER_FULL = 0xff

enum dpa_stats_sample_type

性能计数器样本类型列表。

DPA_STATS_SAMPLE_TYPE_CUMULATIVE_EVENT = 0
DPA_STATS_SAMPLE_TYPE_EVENT_TRACER = 1

enum dpa_stats_status

DPA 统计 API 返回代码。

DPA_STATS_STATUS_OK = 0
DPA_STATS_STATUS_ERROR_IN_MFT = 1
DPA_STATS_STATUS_NO_SUCH_PROCESS = 2
DPA_STATS_STATUS_NO_SUCH_THREADS = 3
DPA_STATS_STATUS_NO_SUCH_EVENTS = 4
DPA_STATS_STATUS_ERROR_IN_ALLOC = 10
DPA_STATS_STATUS_INVALID_PARAMS = 20
DPA_STATS_STATUS_NULL_POINTER = 21
DPA_STATS_STATUS_VALUE_OUT_OF_ENUM = 22

函数

DPA_STATS_EXPERIMENTAL void dpa_stats_close ( dpa_stats_handler_t* dpa_handler )
关闭先前打开的 DPA 设备以读取统计信息。
参数
dpa_handler
- 已打开设备的指针。

描述

此函数关闭 DPA 设备以读取统计信息。

int dpa_stats_compare_4_perf_cumul ( const void* elem1, const void* elem2 )
比较两个累积信息元素。
参数
elem1
- 指向第一个元素的指针。
elem2
- 指向第二个元素的指针。

返回值

比较结果。

描述

此函数按进程和线程 ID 比较两个累积信息元素。

int dpa_stats_compare_4_processes ( const void* elem1, const void* elem2 )
比较两个进程元素。
参数
elem1
- 指向第一个元素的指针。
elem2
- 指向第二个元素的指针。

返回值

比较结果。

描述

此函数按进程 ID 比较两个进程元素。

int dpa_stats_compare_4_threads ( const void* elem1, const void* elem2 )
比较两个线程元素。
参数
elem1
- 指向第一个元素的指针。
elem2
- 指向第二个元素的指针。

返回值

比较结果。

描述

此函数按进程和线程 ID 比较两个线程元素。

DPA_STATS_EXPERIMENTAL void dpa_stats_free_cumul_info_list ( dpa_stats_perf_cumul_list* cumul_info_list )
释放先前分配的累积信息计数器列表。
参数
cumul_info_list
- 累积信息计数器列表。

描述

此函数释放先前分配的累积信息计数器列表。

DPA_STATS_EXPERIMENTAL void dpa_stats_free_perf_event_list ( dpa_stats_perf_event_list* perf_event_list )
释放先前分配的事件计数器列表。
参数
perf_event_list
- 事件计数器列表。

描述

此函数释放先前分配的事件计数器列表。

DPA_STATS_EXPERIMENTAL void dpa_stats_free_process_list ( dpa_stats_process_list* process_list )
释放先前分配的进程列表。
参数
process_list
- 进程列表。

描述

此函数释放先前分配的进程列表。

DPA_STATS_EXPERIMENTAL void dpa_stats_free_thread_list ( dpa_stats_thread_list* thread_list )
释放先前分配的线程列表。
参数
thread_list
- 线程列表。

描述

此函数释放先前分配的线程列表。

dpa_stats_status dpa_stats_get_counter_state ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, dpa_stats_counter_state ** state, dpa_stats_sample_type ** type )
获取计数器状态和类型。
参数
dpa_handler
- 已打开设备的指针。
process_id
- DPA 进程 ID。
state
- 计数器状态。
type
- 计数器类型。

返回值

dpa 状态值。

描述

此函数获取特定进程的事件计数器状态和类型。

dpa_stats_status dpa_stats_get_error_code ( dpa_stats_handler_t* dpa_handler )
报告错误代码。
参数
dpa_handler
- 已打开设备的指针。

返回值

上次错误代码。

描述

此函数返回已打开设备报告的上次错误代码。如果没有错误 - 返回 DPA_STATS_STATUS_OK。

DPA_STATS_EXPERIMENTAL char* dpa_stats_get_error_location ( dpa_stats_handler_t* dpa_handler )
报告错误位置。
参数
dpa_handler
- 已打开设备的指针。

返回值

上次错误位置。

描述

此函数返回已打开设备报告的上次错误位置信息。如果没有错误 - 返回空字符串。

DPA_STATS_EXPERIMENTAL char* dpa_stats_get_error_message ( dpa_stats_handler_t* dpa_handler )
报告错误消息。
参数
dpa_handler
- 已打开设备的指针。

返回值

上次错误消息。

描述

此函数返回已打开设备报告的上次错误消息。如果没有错误 - 返回空字符串。

DPA_STATS_EXPERIMENTAL dpa_stats_handler_t* dpa_stats_open ( const char* dpa_device )
打开 DPA 设备以读取统计信息。
参数
dpa_device
- dpa_device 的名称。

返回值

返回已打开设备的指针或 NULL。

描述

此函数打开 DPA 设备以读取统计信息。成功时 - 返回已打开设备的指针。失败时 - 返回 NULL。

dpa_stats_status dpa_stats_read_caps ( dpa_stats_handler_t* dpa_handler, dpa_stats_capabilities* caps )
读取 DPA 设备功能。
参数
dpa_handler
- 已打开设备的指针
caps
- 指向将填充设备功能的结构的指针。

返回值

dpa 状态值。

描述

此函数读取 DPA 设备的功能和计数器到结构中。

dpa_stats_status dpa_stats_read_cumul_info_list ( dpa_stats_handler_t* dpa_handler, dpa_stats_process_list* process_list, dpa_stats_perf_cumul_list** cumul_info_list )
读取给定进程列表的累积信息计数器列表。
参数
dpa_handler
- 已打开设备的指针。
process_list
- 先前读取的进程列表。
cumul_info_list
- 指向累积信息计数器结构指针列表的指针。

返回值

dpa 状态值。

描述

此函数读取给定进程列表的累积信息计数器列表。

dpa_stats_status dpa_stats_read_perf_event_list ( dpa_stats_handler_t* dpa_handler, dpa_stats_process_list* process_list, dpa_stats_perf_event_list** perf_event_list )
读取给定进程列表的性能事件跟踪器计数器列表。
参数
dpa_handler
- 已打开设备的指针。
process_list
- 先前读取的进程列表。
perf_event_list
- 指向性能事件跟踪器计数器结构指针列表的指针。

返回值

dpa 状态值。

描述

此函数读取给定进程列表的性能事件跟踪器计数器列表。

dpa_stats_status dpa_stats_read_process_cumul_info_list ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, uint32_t thread_id, dpa_stats_perf_cumul_list** cumul_info_list )
读取累积信息计数器列表。
参数
dpa_handler
- 已打开设备的指针。
process_id
- DPA 进程 ID 或 DPA_STATS_ALL_PROCESSES。
thread_id
- DPA 线程 ID 或 DPA_STATS_ALL_THREADS。如果 process_id 是 DPA_STATS_ALL_PROCESSES,则 thread_id 必须是 DPA_STATS_ALL_THREADS。
cumul_info_list
- 指向累积信息计数器结构指针列表的指针。

返回值

dpa 状态值。

描述

此函数读取特定进程或所有进程以及特定线程或所有线程的累积信息计数器列表。

dpa_stats_status dpa_stats_read_process_perf_event_list ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, uint32_t thread_id, dpa_stats_perf_event_list** perf_event_list )
读取性能事件跟踪器计数器列表。
参数
dpa_handler
- 已打开设备的指针。
process_id
- DPA 进程 ID 或 DPA_STATS_ALL_PROCESSES。
thread_id
- DPA 线程 ID 或 DPA_STATS_ALL_THREADS。如果 process_id 是 DPA_STATS_ALL_PROCESSES,则 thread_id 必须是 DPA_STATS_ALL_THREADS。
perf_event_list
- 指向性能事件跟踪器计数器结构指针列表的指针。

返回值

dpa 状态值。

描述

此函数读取特定进程或所有进程以及特定线程或所有线程的性能事件跟踪器计数器列表。

dpa_stats_status dpa_stats_read_process_thread_list ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, uint32_t thread_id, dpa_stats_thread_list** thread_list )
读取线程信息。
参数
dpa_handler
- 已打开设备的指针。
process_id
- DPA 进程 ID 或 DPA_STATS_ALL_PROCESSES。
thread_id
- DPA 线程 ID 或 DPA_STATS_ALL_THREADS。如果 process_id 是 DPA_STATS_ALL_PROCESSES,则 thread_id 必须是 DPA_STATS_ALL_THREADS。
thread_list
- 指向线程列表结构指针的指针。

返回值

dpa 状态值。

描述

此函数读取特定进程或所有进程以及特定线程或所有线程的线程信息。

dpa_stats_status dpa_stats_read_processes_list ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, dpa_stats_process_list** process_list )
读取进程信息。
参数
dpa_handler
- 已打开设备的指针。
process_id
- DPA 进程 ID 或 DPA_STATS_ALL_PROCESSES。
process_list
- 指向进程列表结构指针的指针。

返回值

dpa 状态值。

描述

此函数读取特定进程或所有进程的进程信息。

dpa_stats_status dpa_stats_read_thread_list ( dpa_stats_handler_t* dpa_handler, dpa_stats_process_list* process_list, dpa_stats_thread_list** thread_list )
读取给定进程列表的线程信息。
参数
dpa_handler
- 已打开设备的指针。
process_list
- 先前读取的进程列表。
thread_list
- 指向线程列表结构指针的指针。

返回值

dpa 状态值。

描述

此函数读取给定进程列表的线程信息。

dpa_stats_status dpa_stats_set_counter_state ( dpa_stats_handler_t* dpa_handler, uint32_t process_id, dpa_stats_counter_state state, dpa_stats_sample_type type )
此函数为特定进程或所有进程设置具有适当状态和类型的事件计数器。
参数
dpa_handler
- 已打开设备的指针。
process_id
- DPA 进程 ID 或 DPA_STATS_ALL_PROCESSES。
state
- 计数器状态。
type
- 计数器类型。

返回值

dpa 状态值。

描述

此函数为特定进程或所有进程设置具有适当状态和类型的事件计数器。

void dpa_stats_sort_perf_cumul_list ( dpa_stats_perf_cumul_list* cumul_list ) [inline]
排序累积信息列表。
参数
cumul_list
- 累积信息列表。

描述

void dpa_stats_sort_process_list ( dpa_stats_process_list* process_list ) [inline]
排序进程列表。
参数
process_list
- 进程列表。

描述

void dpa_stats_sort_thread_list ( dpa_stats_thread_list* thread_list ) [inline]
排序线程列表。
参数
thread_list
- 线程列表。

描述

用于 DPA 程序的 Flex IO SDK 主机 API。主要用于 DPA 资源管理和 DPA 程序的调用。

结构体 flexio_affinity
结构体 flexio_app_attr
结构体 flexio_cmdq_attr
结构体 flexio_cq_attr
结构体 flexio_event_handler_attr
结构体 flexio_heap_mem_info
结构体 flexio_mkey_attr
结构体 flexio_msg_stream_attr_t
结构体 flexio_outbox_attr
结构体 flexio_process_attr
结构体 flexio_qmem
结构体 flexio_qp_attr
结构体 flexio_qp_attr_opt_param_mask
结构体 flexio_wq_attr
结构体 flexio_wq_rq_attr
结构体 flexio_wq_sq_attr

宏定义

#define FLEXIO_EXPERIMENTAL
将符号(或特定函数)设置为实验性。
#define FLEXIO_MAX_NAME_LEN (256)

类型定义

typedef void(  flexio_func_arg_pack_fn_t
用于打包函数参数的回调函数。
typedef void(  flexio_func_t
typedef uint32_t  flexio_uar_device_id
typedef uint64_t  flexio_uintptr_t

枚举

enum flexio_affinity_type
enum flexio_cmdq_state
enum flexio_cq_period_mode
enum flexio_cqe_comp_type
enum flexio_log_lvl_t
enum flexio_memtype
enum flexio_msg_dev_sync_mode
enum flexio_qp_op_types
enum flexio_qp_qpc_mtu
enum flexio_qp_state
enum flexio_qp_transport_type
enum flexio_status
enum flexio_tracer_transport
enum flexio_wq_end_pad_mode
enum flexio_wq_type

函数

flexio_status flexio_app_create ( flexio_app_attr* fattr, flexio_app** app )
为 FlexIO 应用程序创建容器。
flexio_status flexio_app_destroy ( flexio_app* app )
销毁 flexio 应用程序。
flexio_status flexio_app_get_elf ( flexio_app* app, uint64_t* bin_buff, size_t bin_size )
检索与应用程序关联的 ELF 二进制文件。
FLEXIO_EXPERIMENTAL size_t flexio_app_get_elf_size ( flexio_app* app )
获取 Flex IO 应用程序大小。
flexio_status flexio_app_get_list ( flexio_app*** app_list, uint32_t* num_apps )
获取可用的 FlexIO 应用程序列表。
const FLEXIO_EXPERIMENTAL char* flexio_app_get_name ( flexio_app* app )
获取 Flex IO 应用程序名称。
flexio_status flexio_app_list_free ( flexio_app** apps_list )
释放 flexio 应用程序列表。
flexio_status flexio_buf_dev_alloc ( flexio_process* process, size_t buff_bsize, flexio_uintptr_t* dest_daddr_p )
在 Flex IO 堆内存上分配缓冲区。
flexio_status flexio_buf_dev_free ( flexio_process* process, flexio_uintptr_t daddr )
释放 Flex IO 堆内存缓冲区。
flexio_status flexio_buf_dev_memset ( flexio_process* process, int  value, size_t buff_bsize, flexio_uintptr_t dest_daddr )
设置 DPA 堆内存缓冲区为给定值。
flexio_status flexio_cmdq_create ( flexio_process* process, flexio_cmdq_attr* fattr, flexio_cmdq** cmdq )
创建异步 rpc 命令队列。
flexio_status flexio_cmdq_destroy ( flexio_cmdq* cmdq )
销毁命令队列基础设施。
FLEXIO_EXPERIMENTAL int flexio_cmdq_is_empty ( flexio_cmdq* cmdq )
检查命令队列是否为空。
flexio_status flexio_cmdq_state_running ( flexio_cmdq* cmdq )
将命令队列移动到运行状态。
flexio_status flexio_cmdq_task_add ( flexio_cmdq* cmdq, flexio_func_t* host_func, uint64_t arg )
向异步 rpc 命令队列添加任务。
flexio_status flexio_copy_from_host ( flexio_process* process, void* src_haddr, size_t buff_bsize, flexio_uintptr_t* dest_daddr_p )
从主机内存复制到 Flex IO 堆内存缓冲区。
flexio_status flexio_coredump_create ( flexio_process* process, const char* outfile )
创建进程的 DPA 核心转储。
flexio_status flexio_cq_create ( flexio_process* process, ibv_context* ibv_ctx, const flexio_cq_attr* fattr, flexio_cq** cq )
创建 Flex IO CQ。
flexio_status flexio_cq_destroy ( flexio_cq* cq )
销毁 Flex IO CQ。
FLEXIO_EXPERIMENTAL uint32_t flexio_cq_get_cq_num ( flexio_cq* cq )
获取 Flex IO CQ 编号。
mlx5dv_devx_obj* flexio_cq_get_obj ( flexio_cq* cq )
获取 Flex IO CQ 对象。
flexio_status flexio_cq_modify_moderation ( flexio_cq* cq, uint16_t max_count, uint16_t period, uint16_t mode )
修改 Flex IO CQ 调解配置。
flexio_status flexio_cq_query_moderation ( flexio_cq* cq, uint16_t* max_count, uint16_t* period, uint16_t* mode )
查询 Flex IO CQ 调解配置。
flexio_status flexio_crash_data ( flexio_process* process, const char* outfile )
以文本形式提供崩溃信息。
flexio_status flexio_device_mkey_create ( flexio_process* process, flexio_mkey_attr* fattr, flexio_mkey** mkey )
为进程设备 UMEM 创建 Mkey。
flexio_status flexio_device_mkey_destroy ( flexio_mkey* mkey )
销毁包含给定 ID 的 MKey 对象
FLEXIO_EXPERIMENTAL int flexio_err_handler_fd ( flexio_process* process )
获取错误处理程序的文件描述符。
FLEXIO_EXPERIMENTAL int flexio_err_status_get ( flexio_process* process )
检查是否发生不可恢复的错误。
flexio_status flexio_event_handler_create ( flexio_process* process, flexio_event_handler_attr* fattr, flexio_event_handler** event_handler_ptr )
创建 Flex IO 事件处理程序。
flexio_status flexio_event_handler_destroy ( flexio_event_handler* event_handler )
销毁 Flex IO 事件处理程序。
FLEXIO_EXPERIMENTAL uint32_t flexio_event_handler_get_activation_id ( flexio_event_handler* event_handler )
查询 Flex IO 事件处理程序的激活 ID。
FLEXIO_EXPERIMENTAL uint32_t flexio_event_handler_get_id ( flexio_event_handler* event_handler )
从 Flex IO 事件处理程序的线程元数据中获取 ID。
FLEXIO_EXPERIMENTAL uint32_t flexio_event_handler_get_obj_id ( flexio_event_handler* event_handler )
获取 Flex IO 事件处理程序的对象 ID。
FLEXIO_EXPERIMENTAL flexio_thread* flexio_event_handler_get_thread ( flexio_event_handler* event_handler )
从 Flex IO 事件处理程序获取 Flex IO 线程对象。
FLEXIO_EXPERIMENTAL mlx5dv_devx_obj* flexio_event_handler_get_thread_obj ( flexio_event_handler* event_handler )
获取 Flex IO 事件处理程序的线程对象。
flexio_status flexio_event_handler_run ( flexio_event_handler* event_handler, uint64_t user_arg )
运行 Flex IO 事件处理程序。
flexio_status flexio_func_get_register_info ( flexio_app* app, flexio_func_t* host_stub_func_addr, uint32_t* pup, char* dev_func_name, char* dev_unpack_func_name, size_t func_name_size, size_t* argbuf_size, flexio_func_arg_pack_fn_t** host_pack_func, flexio_uintptr_t* dev_func_addr, flexio_uintptr_t* dev_unpack_func_addr )
获取先前注册函数的信息。
flexio_status flexio_func_pup_register ( flexio_app* app, const char* dev_func_name, const char* dev_unpack_func_name, flexio_func_t* host_stub_func_addr, size_t argbuf_size, flexio_func_arg_pack_fn_t* host_pack_func )
在应用程序启动时注册函数名。
flexio_status flexio_func_register ( flexio_app* app, const char* dev_func_name, flexio_func_t** out_func )
注册函数以供稍后使用。
flexio_status flexio_host2dev_memcpy ( flexio_process* process, void* src_haddr, size_t buff_bsize, flexio_uintptr_t dest_daddr )
从主机内存复制到预先分配的 Flex IO 堆内存缓冲区。
flexio_status flexio_log_dev_destroy ( flexio_process* process )
销毁 flexio 设备消息传递默认流环境。
flexio_status flexio_log_dev_flush ( flexio_process* process )
在异步消息传递模式下,刷新默认消息流的缓冲区。
flexio_status flexio_log_dev_init ( flexio_process* process, flexio_msg_stream_attr_t* stream_fattr, FILE* out, pthread_t* ppthread )
创建环境以支持来自 DPA 的消息输出。
FLEXIO_EXPERIMENTAL enum flexio_log_lvl flexio_log_lvl_set ( enum flexio_log_lvl lvl )
设置主机 SDK 日志级别。
FLEXIO_EXPERIMENTAL uint32_t flexio_mkey_get_id ( flexio_mkey* mkey )
获取 Flex IO MKey ID。
flexio_status flexio_msg_stream_create ( flexio_process* process, flexio_msg_stream_attr_t* stream_fattr, FILE* out, pthread_t* ppthread, flexio_msg_stream** stream )
创建 Flex IO 消息流,该消息流可以包含从 DPA 发送的输出消息。
flexio_status flexio_msg_stream_destroy ( flexio_msg_stream* stream )
销毁 Flex IO 消息流。
flexio_status flexio_msg_stream_flush ( flexio_msg_stream* stream )
在异步消息传递模式下,刷新消息流的缓冲区。
FLEXIO_EXPERIMENTAL int flexio_msg_stream_get_id ( flexio_msg_stream* stream )
获取 Flex IO 设备消息流的 ID(又名文件描述符)。
flexio_status flexio_msg_stream_level_set ( flexio_msg_stream* stream, flexio_msg_dev_level level )
更改提供的设备消息流的级别。
flexio_status flexio_outbox_create ( flexio_process* process, flexio_outbox_attr* fattr, flexio_outbox** outbox )
创建 Flex IO 发件箱。
flexio_status flexio_outbox_destroy ( flexio_outbox* outbox )
销毁 Flex IO 发件箱。
FLEXIO_EXPERIMENTAL uint32_t flexio_outbox_get_id ( flexio_outbox* outbox )
获取 Flex IO 发件箱 ID。
FLEXIO_EXPERIMENTAL flexio_uar* flexio_outbox_get_uar ( flexio_outbox* outbox )
从 Flex IO 发件箱获取 Flex IO UAR 对象。
flexio_status flexio_process_call ( flexio_process* process, flexio_func_t* host_func, uint64_t* func_ret, ... )
调用 Flex IO 进程。
flexio_status flexio_process_create ( ibv_context* ibv_ctx, flexio_app* app, const flexio_process_attr* process_attr, flexio_process** process_ptr )
创建新的 Flex IO 进程。
flexio_status flexio_process_destroy ( flexio_process* process )
销毁 Flex IO 进程。
flexio_status flexio_process_error_handler_set ( flexio_process* process, flexio_func_t* error_handler )
设置 Flexio 进程错误处理程序。
FLEXIO_EXPERIMENTAL uint32_t flexio_process_get_dumem_id ( flexio_process* process )
获取 Flex IO 进程 DUMEM ID。
FLEXIO_EXPERIMENTAL ibv_pd* flexio_process_get_pd ( flexio_process* process )
从 Flex IO 进程获取 Flex IO IBV PD 对象。
FLEXIO_EXPERIMENTAL flexio_uar* flexio_process_get_uar ( flexio_process* process )
从 Flex IO 进程获取 Flex IO UAR 对象。
flexio_status flexio_process_mem_info_get ( const flexio_process* process, flexio_heap_mem_info* info )
获取进程内存信息。
FLEXIO_EXPERIMENTAL uint64_t flexio_process_udbg_token_get ( flexio_process* process )
获取用于 Flex IO 进程调试访问的令牌。
flexio_status flexio_qp_create ( flexio_process* process, ibv_context* ibv_ctx, flexio_qp_attr* qp_fattr, flexio_qp** qp_ptr )
创建 Flex IO QP。
flexio_status flexio_qp_destroy ( flexio_qp* qp )
销毁 Flex IO QP。
FLEXIO_EXPERIMENTAL uint32_t flexio_qp_get_qp_num ( flexio_qp* qp )
获取 Flex IO QP 编号。
flexio_status flexio_qp_modify ( flexio_qp* qp, flexio_qp_attr* fattr, flexio_qp_attr_opt_param_mask* mask )
修改 Flex IO QP。
flexio_qp_state flexio_qp_state_get ( flexio_qp* qp )
检索设备 QP 状态。
flexio_status flexio_recoverable_buf_dev_alloc ( flexio_process* process, size_t buff_bsize, uint32_t mkey, flexio_uintptr_t* dest_daddr_p )
在 Flex IO 堆内存上分配可恢复的缓冲区。
flexio_status flexio_rmp_create ( flexio_process* process, ibv_context* ibv_ctx, const flexio_wq_attr* fattr, flexio_rmp** flexio_rmp_ptr )
创建 Flex IO RMP。
flexio_status flexio_rmp_destroy ( flexio_rmp* flexio_rmp )
销毁 Flex IO RMP。
FLEXIO_EXPERIMENTAL uint32_t flexio_rmp_get_wq_num ( flexio_rmp* rmp )
获取 Flex IO RMP 编号。
flexio_status flexio_rq_create ( flexio_process* process, ibv_context* ibv_ctx, uint32_t cq_num, const flexio_wq_attr* fattr, flexio_rq** flexio_rq_ptr )
创建 Flex IO RQ。
flexio_status flexio_rq_create_cross_dev ( flexio_process* process, ibv_context* ibv_ctx, uint32_t cq_num, const flexio_wq_attr* fattr, flexio_rq** flexio_rq_ptr )
创建 Flex IO RQ,假定为跨设备。
flexio_status flexio_rq_destroy ( flexio_rq* flexio_rq )
销毁 Flex IO RQ。
FLEXIO_EXPERIMENTAL mlx5dv_devx_obj* flexio_rq_get_object ( flexio_rq* rq )
获取 Flex IO RQ 对象。
FLEXIO_EXPERIMENTAL mlx5dv_devx_obj* flexio_rq_get_tir ( flexio_rq* rq )
获取 Flex IO RQ TIR 对象。
FLEXIO_EXPERIMENTAL uint32_t flexio_rq_get_wq_num ( flexio_rq* rq )
获取 Flex IO RQ 编号。
flexio_status flexio_rq_set_err_state ( flexio_rq* rq )
将 Flex IO RQ 设置为错误状态。
flexio_status flexio_sq_create ( flexio_process* process, ibv_context* ibv_ctx, uint32_t cq_num, const flexio_wq_attr* fattr, flexio_sq** flexio_sq_ptr )
创建 Flex IO SQ。
flexio_status flexio_sq_create_cross_dev ( flexio_process* process, ibv_context* ibv_ctx, uint32_t cq_num, const flexio_wq_attr* fattr, flexio_sq** flexio_sq_ptr )
创建 Flex IO SQ,假定为跨设备。
flexio_status flexio_sq_destroy ( flexio_sq* flexio_sq )
销毁 Flex IO SQ。
FLEXIO_EXPERIMENTAL uint32_t flexio_sq_get_wq_num ( flexio_sq* sq )
获取 Flex IO SQ 编号。
flexio_status flexio_sq_tis_create ( ibv_context* ibv_ctx, flexio_transport_domain* td, flexio_sq_tis** tis )
创建 Flex IO SQ 传输接口发送 (TIS) 对象。
flexio_status flexio_sq_tis_destroy ( flexio_sq_tis* tis )
销毁 Flex IO SQ TIS。
flexio_status flexio_transport_domain_create ( ibv_context* ibv_ctx, flexio_transport_domain** td )
创建 Flex IO 传输域 (TD)。
flexio_status flexio_transport_domain_destroy ( flexio_transport_domain* td )
销毁 Flex IO 传输域 (TD)。
flexio_status flexio_uar_create ( flexio_process* process, flexio_uar** flexio_uar )
创建 Flex IO UAR 对象。
flexio_status flexio_uar_destroy ( flexio_uar* uar )
销毁 Flex IO UAR 对象
flexio_status flexio_uar_extend ( flexio_uar* in_uar, ibv_context* to_extend, flexio_uar** extended )
将 UAR 扩展到 ibv 上下文。
flexio_uar_device_id flexio_uar_get_extended_id ( flexio_uar* uar )
获取 Flex IO 扩展 UAR ID。
FLEXIO_EXPERIMENTAL uint32_t flexio_uar_get_id ( flexio_uar* uar )
获取 Flex IO UAR ID。
flexio_status flexio_version_set ( uint64_t version )
设置 flexio 的版本。
flexio_status flexio_window_create ( flexio_process* process, ibv_pd* pd, flexio_window** window )
创建 Flex IO 窗口。
flexio_status flexio_window_destroy ( flexio_window* window )
销毁 Flex IO 窗口。
FLEXIO_EXPERIMENTAL uint32_t flexio_window_get_id ( flexio_window* window )
获取 Flex IO 窗口 ID。

宏定义

#define FLEXIO_EXPERIMENTAL

__attribute__((deprecated("Symbol is defined as experimental"), \ section(".text.experimental"))) \ FLEXIO_STABLE

#define FLEXIO_MAX_NAME_LEN (256)

应用程序和设备函数名称的最大长度

类型定义

typedef void( flexio_func_arg_pack_fn_t

用于打包函数参数的回调函数。当用户进行调用(例如,flexio_process_call)时,此函数在 FlexIO 运行时内部被调用。它将用户函数的参数打包到 `argbuf` 中提供的参数缓冲区中。参数列表可以任意长,并由 `ap` 表示。此函数的正确使用需要调用者使用 `va_start` 初始化列表。

typedef void( flexio_func_t

Flex IO 应用程序函数原型。

typedef uint32_t flexio_uar_device_id

Flex IO UAR 扩展 ID 原型。

typedef uint64_t flexio_uintptr_t

Flex IO 地址类型。

枚举

enum flexio_affinity_type

Flex IO 线程亲和性类型。

FLEXIO_AFFINITY_NONE = 0
FLEXIO_AFFINITY_STRICT
FLEXIO_AFFINITY_GROUP

enum flexio_cmdq_state

Flex IO 命令队列状态。

FLEXIO_CMDQ_STATE_PENDING = 0
FLEXIO_CMDQ_STATE_RUNNING = 1

enum flexio_cq_period_mode

Flex IO CQ CQE 压缩周期模式。

FLEXIO_CQ_PERIOD_MODE_EVENT = 0x0
FLEXIO_CQ_PERIOD_MODE_CQE = 0x1

enum flexio_cqe_comp_type

Flex IO CQ CQE 压缩模式。

FLEXIO_CQE_COMP_NONE = 0x0
FLEXIO_CQE_COMP_ENABLE = 0x2

enum flexio_log_lvl_t

Flex IO SDK 主机日志级别

FLEXIO_LOG_LVL_ERR = 0
FLEXIO_LOG_LVL_WARN = 1
FLEXIO_LOG_LVL_INFO = 2
FLEXIO_LOG_LVL_DBG = 3

enum flexio_memtype

Flex IO 内存类型。

FLEXIO_MEMTYPE_DPA = 0
FLEXIO_MEMTYPE_HOST = 1

enum flexio_msg_dev_sync_mode

Flex IO 设备消息传递同步模式。

FLEXIO_LOG_DEV_SYNC_MODE_SYNC = 0
FLEXIO_LOG_DEV_SYNC_MODE_ASYNC = 1
FLEXIO_LOG_DEV_SYNC_MODE_BATCH = 2
FLEXIO_LOG_DEV_SYNC_MODE_TRACER = 3

enum flexio_qp_op_types

Flex IO QP 操作类型。

FLEXIO_QP_WR_RDMA_WRITE = 0x4
FLEXIO_QP_WR_RDMA_READ = 0x8
FLEXIO_QP_WR_ATOMIC_CMP_AND_SWAP = 0x10

enum flexio_qp_qpc_mtu

Flex IO QP 可能的 MTU 值。

FLEXIO_QP_QPC_MTU_BYTES_256 = 0x1
FLEXIO_QP_QPC_MTU_BYTES_512 = 0x2
FLEXIO_QP_QPC_MTU_BYTES_1K = 0x3
FLEXIO_QP_QPC_MTU_BYTES_2K = 0x4
FLEXIO_QP_QPC_MTU_BYTES_4K = 0x5

enum flexio_qp_state

Flex IO QP 状态。

FLEXIO_QP_STATE_RST = 0x0
FLEXIO_QP_STATE_INIT = 0x1
FLEXIO_QP_STATE_RTR = 0x2
FLEXIO_QP_STATE_RTS = 0x3
FLEXIO_QP_STATE_ERR = 0x6

enum flexio_qp_transport_type

Flex IO QP 状态。

FLEXIO_QPC_ST_RC = 0x0
FLEXIO_QPC_ST_UC = 0x1
FLEXIO_QPC_ST_UD = 0x2
FLEXIO_QPC_ST_XRC = 0x3
FLEXIO_QPC_ST_IBL2 = 0x4
FLEXIO_QPC_ST_DCI = 0x5
FLEXIO_QPC_ST_QP0 = 0x7
FLEXIO_QPC_ST_QP1 = 0x8
FLEXIO_QPC_ST_RAW_DATAGRAM = 0x9
FLEXIO_QPC_ST_REG_UMR = 0xc
FLEXIO_QPC_ST_DC_CNAK = 0x10

enum flexio_status

Flex IO API 函数返回代码。

FLEXIO_STATUS_SUCCESS = 0
FLEXIO_STATUS_FAILED = 1
FLEXIO_STATUS_TIMEOUT = 2
FLEXIO_STATUS_FATAL_ERR = 3

enum flexio_tracer_transport

Flex IO 设备消息传递追踪器传输模式。

FLEXIO_TRACER_TRANSPORT_QP = 0
FLEXIO_TRACER_TRANSPORT_WINDOW = 1

enum flexio_wq_end_pad_mode

Flex IO 支持的 WQ 类型。

FLEXIO_WQ_END_PAD_NONE = 0x0
FLEXIO_WQ_END_PAD_ALIGN = 0x1

enum flexio_wq_type

Flex IO 支持的 WQ 类型。

FLEXIO_WQ_TYPE_LINKED_LIST = 0x0
FLEXIO_WQ_TYPE_CYCLIC = 0x1

函数

flexio_status flexio_app_create ( flexio_app_attr* fattr, flexio_app** app )
为 FlexIO 应用程序创建容器。
参数
fattr
- 指向应用程序属性结构的指针。
app
- 创建的应用。

返回值

flexio 状态值。

描述

此函数使用给定的 ELF 缓冲区创建一个命名的应用程序。它从编译器生成的构造函数内部调用。

flexio_status flexio_app_destroy ( flexio_app* app )
销毁 flexio 应用程序。
参数
app
- 之前创建的应用。

返回值

flexio 状态值。

描述

此函数销毁与应用程序关联的状态以及所有已注册的函数。此函数将释放内部 elf 缓冲区。它从编译器生成的析构函数内部调用。

flexio_status flexio_app_get_elf ( flexio_app* app, uint64_t* bin_buff, size_t bin_size )
检索与应用程序关联的 ELF 二进制文件。
参数
app
- 之前创建的应用程序。
bin_buff
- 指向用于复制 ELF 二进制文件的缓冲区的指针。
bin_size
- bin_buff 指向的缓冲区的大小。如果此参数小于 ELF 二进制文件的大小,函数将失败。

返回值

flexio 状态值。

描述

此函数向运行时注册函数名称、桩地址。编译器在构造函数中调用此函数。

FLEXIO_EXPERIMENTAL size_t flexio_app_get_elf_size ( flexio_app* app )
获取 Flex IO 应用程序大小。
参数
app
- 指向 Flex IO 应用程序的指针。

返回值

应用程序的大小(字节),出错时返回 NULL。

描述

flexio_status flexio_app_get_list ( flexio_app*** app_list, uint32_t* num_apps )
获取可用的 FlexIO 应用程序列表。
参数
app_list
- 可用应用程序的列表。
num_apps
- 要获取/已获取的应用程序数量。

返回值

flexio 状态值。

描述

此函数返回已加载的 Flex IO 应用程序列表。

const FLEXIO_EXPERIMENTAL char* flexio_app_get_name ( flexio_app* app )
获取 Flex IO 应用程序名称。
参数
app
- 指向 Flex IO 应用程序的指针。

返回值

应用程序的名称,出错时返回 NULL。

描述

flexio_status flexio_app_list_free ( flexio_app** apps_list )
释放 flexio 应用程序列表。
参数
apps_list
- 先前获取的列表。

返回值

flexio 状态值。

描述

此函数释放从 `flexio_app_get_list` 获取的应用程序列表。

flexio_status flexio_buf_dev_alloc ( flexio_process* process, size_t buff_bsize, flexio_uintptr_t* dest_daddr_p )
在 Flex IO 堆内存上分配缓冲区。
参数
process
- 指向 Flex IO 进程上下文的指针。
buff_bsize
- 要分配的缓冲区大小。
dest_daddr_p
- 指向 Flex IO 地址的指针,缓冲区在此地址分配。

返回值

flexio 状态值。

描述

此函数在 Flex IO 堆内存上分配请求大小的缓冲区。成功时 - 将 dest_daddr_p 设置为已分配缓冲区的起始地址。失败时 - 将 dest_daddr_p 设置为 0x0。

flexio_status flexio_buf_dev_free ( flexio_process* process, flexio_uintptr_t daddr )
释放 Flex IO 堆内存缓冲区。
参数
process
- 指向 Flex IO 进程上下文的指针。
daddr
- 指向 Flex IO 堆上已分配内存地址的指针。零值是有效参数。

返回值

flexio 状态值。

描述

此函数通过地址释放 Flex IO 堆内存缓冲区。

flexio_status flexio_buf_dev_memset ( flexio_process* process, int  value, size_t buff_bsize, flexio_uintptr_t dest_daddr )
设置 DPA 堆内存缓冲区为给定值。
参数
process
- 指向 Flex IO 进程上下文的指针。
value
- 用于设置 DPA 堆内存缓冲区的值。
buff_bsize
- Flex IO 堆内存缓冲区的大小。
dest_daddr
- 要设置的 Flex IO 堆内存缓冲区地址。

返回值

flexio 状态值。

描述

flexio_status flexio_cmdq_create ( flexio_process* process, flexio_cmdq_attr* fattr, flexio_cmdq** cmdq )
创建异步 rpc 命令队列。
参数
process
- 指向进程上下文的指针。
fattr
- 指向命令队列属性结构体的指针。
cmdq
- 指向创建的命令队列上下文指针的指针。

返回值

flexio 状态值。

描述

此函数创建异步 rpc 命令队列基础设施,允许后台任务执行。

flexio_status flexio_cmdq_destroy ( flexio_cmdq* cmdq )
销毁命令队列基础设施。
参数
cmdq
- 指向命令队列上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁命令队列基础设施并释放其所有资源。

FLEXIO_EXPERIMENTAL int flexio_cmdq_is_empty ( flexio_cmdq* cmdq )
检查命令队列是否为空。
参数
cmdq
- 指向命令队列上下文的指针。

返回值

布尔值。

描述

此函数检查命令队列是否为空,以及到目前为止的所有作业是否已执行。

flexio_status flexio_cmdq_state_running ( flexio_cmdq* cmdq )
将命令队列移动到运行状态。
参数
cmdq
- 指向命令队列上下文的指针。

返回值

flexio 状态值。

描述

如果队列在挂起状态下创建,此函数将命令队列移动到运行状态。否则无效。

flexio_status flexio_cmdq_task_add ( flexio_cmdq* cmdq, flexio_func_t* host_func, uint64_t arg )
向异步 rpc 命令队列添加任务。
参数
cmdq
- 指向命令队列上下文的指针。
host_func
- 要执行的 DPA 函数的主机桩函数。
arg
- 函数的用户参数。

返回值

flexio 状态值。

描述

此函数将一个任务添加到异步 rpc 命令队列,以便由 DPA 在后台执行。允许后台作业执行。

flexio_status flexio_copy_from_host ( flexio_process* process, void* src_haddr, size_t buff_bsize, flexio_uintptr_t* dest_daddr_p )
从主机内存复制到 Flex IO 堆内存缓冲区。
参数
process
- 指向 Flex IO 进程上下文的指针。
src_haddr
- 主机内存上缓冲区的地址。
buff_bsize
- 要复制的缓冲区大小。
dest_daddr_p
- 指向 Flex IO 地址的指针,缓冲区复制到此地址。

返回值

flexio 状态值。

描述

此函数将数据从主机内存上的缓冲区复制到 Flex IO 内存。该函数在设备堆上分配内存,dest_address 指向该内存。调用者有责任在不再使用此内存时将其释放。

flexio_status flexio_coredump_create ( flexio_process* process, const char* outfile )
创建进程的 DPA 核心转储。
参数
process
- 指向 flexio_process 的指针
outfile
- 用于写入 ELF 格式核心转储数据的路径名。如果为 NULL,则文件名将以 flexio_dev.NNN.core 形式生成,其中 NNN 是进程 ID。如果 outfile 不为 NULL,则将添加后缀 .NNN.core。如果 outfile 以斜杠 (/) 开头(/pathname),它将与上述后缀一起传递给 fopen(),否则 outfile 将在当前目录中创建,如果失败,则在 /tmp 目录中创建

返回值

flexio 状态值。

描述

此函数创建进程及其所有线程的核心转储映像,旨在在发生致命错误或异常终止后使用,以允许用户调试 DPA 应用程序代码。

必须有足够的可用内存来分配最大核心文件大小的 2-3 倍,用于在写入 elf 文件之前的中间处理。

DPA 代码可能引用的内存窗口 *不会* 由此代码转储,如果需要这些数据,则必须单独处理。

flexio_status flexio_cq_create ( flexio_process* process, ibv_context* ibv_ctx, const flexio_cq_attr* fattr, flexio_cq** cq )
创建 Flex IO CQ。
参数
process
- 指向 Flex IO 进程的指针。
ibv_ctx
- 指向 IBV 设备上下文的指针(可能与进程的不同)。如果为 NULL,则将使用进程的上下文。
fattr
- 指向 CQ 属性结构体的指针。
cq
- 指向创建的 CQ 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数创建 Flex IO CQ。

flexio_status flexio_cq_destroy ( flexio_cq* cq )
销毁 Flex IO CQ。
参数
cq
- 指向 CQ 上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁 Flex IO CQ。

FLEXIO_EXPERIMENTAL uint32_t flexio_cq_get_cq_num ( flexio_cq* cq )
获取 Flex IO CQ 编号。
参数
cq
- 指向 Flex IO CQ 的指针。

返回值

CQ 编号,出错时返回 UINT32_MAX。

描述

mlx5dv_devx_obj* flexio_cq_get_obj ( flexio_cq* cq )
获取 Flex IO CQ 对象。
参数
cq
- 指向 CQ 上下文的指针。

返回值

CQ devx 对象。

描述

此函数返回 Flex IO CQ 对象。

flexio_status flexio_cq_modify_moderation ( flexio_cq* cq, uint16_t max_count, uint16_t period, uint16_t mode )
修改 Flex IO CQ 调解配置。
参数
cq
- 指向 CQ 上下文的指针。
max_count
- CQ 调解最大计数 值。
period
- CQ 调解周期 值。
mode
- CQ 调解模式 值。

返回值

flexio 状态值。

描述

flexio_status flexio_cq_query_moderation ( flexio_cq* cq, uint16_t* max_count, uint16_t* period, uint16_t* mode )
查询 Flex IO CQ 调解配置。
参数
cq
- 指向 CQ 上下文的指针。
max_count
- 指向 CQ 调解最大计数 值的指针。
period
- 指向 CQ 调解周期 值的指针。
mode
- 指向 CQ 调解模式 值的指针。

返回值

flexio 状态值。

描述

flexio_status flexio_crash_data ( flexio_process* process, const char* outfile )
以文本形式提供崩溃信息。
参数
process
- 指向 flexio_process 的指针
outfile
- 用于写入 ELF 格式核心转储数据的路径名。如果为 NULL,则文件名将以 flexio_dev.NNN.crash 形式生成,其中 NNN 是进程 ID。如果 outfile 不为 NULL,则将添加后缀 .NNN.crash。如果 outfile 以斜杠 (/) 开头(/pathname),它将与上述后缀一起传递给 fopen(),否则 outfile 将在当前目录中创建,如果失败,则在 /tmp 目录中创建

返回值

flexio 状态值。

描述

此函数以文本形式显示有用的崩溃信息。信息将打印在控制台上并复制到 outfile。

flexio_status flexio_device_mkey_create ( flexio_process* process, flexio_mkey_attr* fattr, flexio_mkey** mkey )
为进程设备 UMEM 创建 Mkey。
参数
process
- 指向 Flex IO 进程上下文的指针。
fattr
- 指向 Flex IO MKey 属性结构体的指针。
mkey
- 指向创建的 MKey 结构体的指针的指针。

返回值

flexio 状态值。

描述

此函数为提供的 PD 和提供的进程设备 UMEM 创建一个 MKey。mkey_id 将指向包含 flexio_mkey 对象中的字段。

flexio_status flexio_device_mkey_destroy ( flexio_mkey* mkey )
销毁包含给定 ID 的 MKey 对象
参数
mkey
- 指向要销毁的 Flex IO MKey 的指针。NULL 是有效值。

返回值

flexio 状态值。

描述

此函数销毁包含给定 ID 的 Mkey 对象。

FLEXIO_EXPERIMENTAL int flexio_err_handler_fd ( flexio_process* process )
获取错误处理程序的文件描述符。
参数
process
- 指向 Flex IO 进程的指针。

返回值

- 文件描述符。

描述

用户应获取 fd 以监视不可恢复的错误

用户可以使用 select/poll/epoll 函数族轮询所有创建的进程。

FLEXIO_EXPERIMENTAL int flexio_err_status_get ( flexio_process* process )
检查是否发生不可恢复的错误。
参数
process
- 指向 Flex IO 进程的指针。NULL 是有效值。

返回值

- 如果发生错误,则为非零值。有关错误代码范围(FW 错误、FlexIO 错误、用户错误)的约定,请参见函数 flexio_dev_error() 的说明

描述

如果来自 flexio_err_handler_fd() 的文件报告存在要读取的数据,建议检查错误状态。

在完成进程之前也要检查错误状态。

flexio_status flexio_event_handler_create ( flexio_process* process, flexio_event_handler_attr* fattr, flexio_event_handler** event_handler_ptr )
创建 Flex IO 事件处理程序。
参数
process
- 指向 Flex IO 进程的指针。
fattr
- 指向事件处理程序属性结构体的指针。
event_handler_ptr
- 指向创建的事件处理程序上下文指针的指针。

返回值

flexio 状态值。

描述

此函数为现有的 Flex IO 进程创建 Flex IO 事件处理程序。

flexio_status flexio_event_handler_destroy ( flexio_event_handler* event_handler )
销毁 Flex IO 事件处理程序。
参数
event_handler
- 指向事件处理程序上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁 Flex IO 事件处理程序。

FLEXIO_EXPERIMENTAL uint32_t flexio_event_handler_get_activation_id ( flexio_event_handler* event_handler )
查询 Flex IO 事件处理程序的激活 ID。
参数
event_handler
- 指向事件处理程序上下文的指针。

返回值

激活 ID,如果出错,则返回 UINT32_MAX。

描述

此函数返回所需的激活 ID,以便同一进程的另一个线程激活此事件处理程序。

FLEXIO_EXPERIMENTAL uint32_t flexio_event_handler_get_id ( flexio_event_handler* event_handler )
从 Flex IO 事件处理程序的线程元数据中获取 ID。
参数
event_handler
- 指向 Flex IO 事件处理程序的指针。

返回值

事件处理程序的线程 ID,如果出错,则返回 UINT32_MAX。

描述

FLEXIO_EXPERIMENTAL uint32_t flexio_event_handler_get_obj_id ( flexio_event_handler* event_handler )
获取 Flex IO 事件处理程序的对象 ID。
参数
event_handler
- 指向 Flex IO 事件处理程序的指针。

返回值

事件处理程序的线程对象 ID,如果出错,则返回 UINT32_MAX。

描述

FLEXIO_EXPERIMENTAL flexio_thread* flexio_event_handler_get_thread ( flexio_event_handler* event_handler )
从 Flex IO 事件处理程序获取 Flex IO 线程对象。
参数
event_handler
- 指向 Flex IO 事件处理程序的指针。

返回值

事件处理程序的线程,如果出错,则返回 NULL。

描述

FLEXIO_EXPERIMENTAL mlx5dv_devx_obj* flexio_event_handler_get_thread_obj ( flexio_event_handler* event_handler )
获取 Flex IO 事件处理程序的线程对象。
参数
event_handler
- 指向 Flex IO 事件处理程序的指针。

返回值

事件处理程序的线程对象,如果出错,则返回 null。

描述

flexio_status flexio_event_handler_run ( flexio_event_handler* event_handler, uint64_t user_arg )
运行 Flex IO 事件处理程序。
参数
event_handler
- 指向事件处理程序上下文的指针。
user_arg
- 事件处理程序线程的 64 位参数。

返回值

flexio 状态值。

描述

此函数使 Flex IO 事件处理程序开始运行。

flexio_status flexio_func_get_register_info ( flexio_app* app, flexio_func_t* host_stub_func_addr, uint32_t* pup, char* dev_func_name, char* dev_unpack_func_name, size_t func_name_size, size_t* argbuf_size, flexio_func_arg_pack_fn_t** host_pack_func, flexio_uintptr_t* dev_func_addr, flexio_uintptr_t* dev_unpack_func_addr )
获取先前注册函数的信息。
参数
app
- FlexIO 应用程序。
host_stub_func_addr
- 已知主机桩函数地址。
pup
- 函数是否已注册 pack/unpack 支持(0:否,1:是)。
dev_func_name
- 设备函数名称。
dev_unpack_func_name
- 设备上解包例程的名称,如果 pup == 0,则为 NA。
func_name_size
- 分配的函数名称长度的大小。
argbuf_size
- 参数缓冲区的大小,如果 pup == 0,则为 NA。
host_pack_func
- 指向主机打包例程的函数指针,如果 pup == 0,则为 NA。
dev_func_addr
- 设备函数地址。
dev_unpack_func_addr
- 设备解包函数地址。

返回值

flexio 状态值。

描述

此函数用于获取有关先前注册函数的信息。它用于在 DPACC/FlexIO 接口之上编写更高级别的库。不建议用户直接使用它。

调用者必须确保已分配字符串指针,并且长度至少为 `FLEXIO_MAX_NAME_LEN + 1`,以确保调用不会因无法复制完整函数名称而失败。

flexio_status flexio_func_pup_register ( flexio_app* app, const char* dev_func_name, const char* dev_unpack_func_name, flexio_func_t* host_stub_func_addr, size_t argbuf_size, flexio_func_arg_pack_fn_t* host_pack_func )
在应用程序启动时注册函数名。
参数
app
- 之前创建的应用程序。
dev_func_name
- 设备函数名称(入口点)。名称长度应不超过 FLEXIO_MAX_NAME_LEN 字节。
dev_unpack_func_name
- 设备包装函数,用于解包参数缓冲区。名称长度应不超过 FLEXIO_MAX_NAME_LEN 字节。
host_stub_func_addr
- 应用程序用于引用设备函数的主机桩函数。
argbuf_size
- 此函数所需的参数缓冲区大小。
host_pack_func
- 主机回调函数,用于打包参数。

返回值

flexio 状态值。

描述

此函数向运行时注册函数名称、桩地址。它从编译器生成的构造函数中调用。

flexio_status flexio_func_register ( flexio_app* app, const char* dev_func_name, flexio_func_t** out_func )
注册函数以供稍后使用。
参数
app
- 先前创建的 flexio 应用程序。
dev_func_name
- 设备上要调用的 flexio 函数的名称。名称长度应不超过 FLEXIO_MAX_NAME_LEN 字节。
out_func
- 与 flexio_process_call(), flexio_event_handler_create() 等一起使用的不透明句柄。

返回值

flexio 状态值。

描述

此函数旨在由用户直接调用,在他们不希望使用编译器接口通常完成的 pack/unpack 支持的情况下。

用户有责任确保使用 __dpa_global__ 注释函数以用于事件处理程序。运行时不会提供任何类型检查。不匹配的调用将导致未定义的行为。

flexio_status flexio_host2dev_memcpy ( flexio_process* process, void* src_haddr, size_t buff_bsize, flexio_uintptr_t dest_daddr )
从主机内存复制到预先分配的 Flex IO 堆内存缓冲区。
参数
process
- 指向 Flex IO 进程上下文的指针。
src_haddr
- 主机内存上缓冲区的地址。
buff_bsize
- 要复制的缓冲区大小。
dest_daddr
- 要复制到的 Flex IO 堆内存缓冲区地址。

返回值

flexio 状态值。

描述

此函数将数据从主机内存上的缓冲区复制到 Flex IO 堆内存上的缓冲区。

flexio_status flexio_log_dev_destroy ( flexio_process* process )
销毁 flexio 设备消息传递默认流环境。
参数
process
- 指向 Flex IO 进程的指针。

返回值

flexio 状态值。

描述

此函数销毁并释放所有资源,这些资源是为进程消息传递需求分配的,由 flexio_log_dev_init() 分配,用于服务默认流。

flexio_status flexio_log_dev_flush ( flexio_process* process )
在异步消息传递模式下,刷新默认消息流的缓冲区。
参数
process
- 指向 Flex IO 进程的指针。

返回值

flexio 状态值。

描述

默认 msg 流缓冲区中的所有数据都将刷新到 flexio_log_dev_init() 中定义的文件。

在同步设备消息传递的情况下,此函数不执行任何操作。此函数分配资源以支持从 Flex IO 到 HOST 的消息传递。

flexio_status flexio_log_dev_init ( flexio_process* process, flexio_msg_stream_attr_t* stream_fattr, FILE* out, pthread_t* ppthread )
创建环境以支持来自 DPA 的消息输出。
参数
process
- 指向 Flex IO 进程的指针。
stream_fattr
- 指向消息传递属性结构体的指针。
out
- 用于保存来自 Flex IO 的数据的文件。如果要在 HOST 的控制台上接收数据,请使用 stdout
ppthread
- 指向接收创建线程的 pthread ID 的指针。如果用户不需要,可以为 NULL。

返回值

flexio 状态值。

描述

此函数分配资源以支持从 Flex IO 到 HOST 的消息输出。它只能分配和创建默认流。

设备消息传递以以下模式工作:同步或异步。在同步模式下,专用线程启动以接收数据并立即输出。当异步模式运行时,所有消息流缓冲区将由 flexio_log_dev_flush() 刷新。缓冲区可能会溢出。

此函数没有“destroy”过程。所有消息传递基础设施都将关闭,资源将使用 flexio_process_destroy() 函数释放。

FLEXIO_EXPERIMENTAL enum flexio_log_lvl flexio_log_lvl_set ( enum flexio_log_lvl lvl )
设置主机 SDK 日志级别。
参数
lvl
- 要设置的日志级别。将打印此优先级或更高优先级级别的所有条目。

返回值

先前的宿主日志级别。

描述

此函数设置宿主日志级别。更改日志级别可能会更改 SDK 代码中某些日志条目的可见性。

FLEXIO_EXPERIMENTAL uint32_t flexio_mkey_get_id ( flexio_mkey* mkey )
获取 Flex IO MKey ID。
参数
mkey
- 指向 Flex IO MKey 的指针。

返回值

Flex IO mkey ID,出错时返回 UINT32_MAX。

描述

flexio_status flexio_msg_stream_create ( flexio_process* process, flexio_msg_stream_attr_t* stream_fattr, FILE* out, pthread_t* ppthread, flexio_msg_stream** stream )
创建 Flex IO 消息流,该消息流可以包含从 DPA 发送的输出消息。
参数
process
- 指向 Flex IO 进程的指针。
stream_fattr
- 指向 flexio_msg_stream 属性结构体的指针。
out
- 用于保存来自 Flex IO 的数据的文件。如果要在 HOST 的控制台上接收数据,请使用 stdout
ppthread
- 指向接收创建线程的 pthread ID 的指针。如果用户不需要,可以为 NULL。
stream
- 指向创建的流上下文指针的指针。

返回值

flexio 状态值。

描述

此函数可以创建 flexio_msg_stream,设备消息可以定向到该流。将来自设备的消息定向到主机可以针对任何和所有打开的流,包括默认流。

此函数为任何新流创建在 flexio_log_dev_init 中创建的相同资源。它也可以创建默认流。它使用 FLEXIO_MSG_DEV_INFO 流级别创建它,可以使用 flexio_msg_stream_level_set 修改该级别。

flexio_status flexio_msg_stream_destroy ( flexio_msg_stream* stream )
销毁 Flex IO 消息流。
参数
stream
- 指向流上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁任何 Flex IO msg 流。

flexio_status flexio_msg_stream_flush ( flexio_msg_stream* stream )
在异步消息传递模式下,刷新消息流的缓冲区。
参数
stream
- 指向 Flex IO msg 流的指针。

返回值

flexio 状态值。

描述

msg 流缓冲区中的所有数据都将刷新到 flexio_msg_stream_create() 中定义的文件。

在同步设备消息传递的情况下,此函数不执行任何操作。此函数分配资源以支持从 Flex IO 到 HOST 的消息传递。

FLEXIO_EXPERIMENTAL int flexio_msg_stream_get_id ( flexio_msg_stream* stream )
获取 Flex IO 设备消息流的 ID(又名文件描述符)。
参数
stream
- 指向 Flex IO 消息流的指针。

返回值

stream_id,如果出错,则返回 -1。

描述

在已销毁的流上使用此函数将导致不可预测的行为。

flexio_status flexio_msg_stream_level_set ( flexio_msg_stream* stream, flexio_msg_dev_level level )
更改提供的设备消息流的级别。
参数
stream
- 指向 Flex IO 消息流的指针。
level
- 新的期望级别,范围在 FLEXIO_MSG_DEV_NO_PRINT 到 FLEXIO_MSG_DEV_DEBUG 之间。FLEXIO_MSG_DEV_ALWAYS_PRINT 在此处不能使用。

返回值

flexio 状态值。

描述

默认流的级别无法更改。请注意,在发送消息时修改流的级别可能会导致消息丢失或不必要的消息。

flexio_status flexio_outbox_create ( flexio_process* process, flexio_outbox_attr* fattr, flexio_outbox** outbox )
创建 Flex IO 发件箱。
参数
process
- 指向 Flex IO 进程的指针。
fattr
- 指向 outbox 属性结构体的指针。
outbox
- 指向创建的 outbox 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数为给定进程创建 Flex IO outbox。

flexio_status flexio_outbox_destroy ( flexio_outbox* outbox )
销毁 Flex IO 发件箱。
参数
outbox
- 指向 outbox 上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO outbox。

FLEXIO_EXPERIMENTAL uint32_t flexio_outbox_get_id ( flexio_outbox* outbox )
获取 Flex IO 发件箱 ID。
参数
outbox
- 指向 Flex IO outbox 的指针。

返回值

Flex IO outbox ID,出错时返回 UINT32_MAX。

描述

FLEXIO_EXPERIMENTAL flexio_uar* flexio_outbox_get_uar ( flexio_outbox* outbox )
从 Flex IO 发件箱获取 Flex IO UAR 对象。
参数
outbox
- 指向 Flex IO outbox 的指针。

返回值

Flex IO outbox UAR 对象,出错时返回 NULL。

描述

flexio_status flexio_process_call ( flexio_process* process, flexio_func_t* host_func, uint64_t* func_ret, ... )
调用 Flex IO 进程。
参数
process
- 指向要运行的 Flex IO 进程的指针。
host_func
- 应用程序用于引用设备函数的主机桩函数。
func_ret
- 指向 ELF 函数返回值的指针。

返回值

flexio 状态值。

描述

flexio_status flexio_process_create ( ibv_context* ibv_ctx, flexio_app* app, const flexio_process_attr* process_attr, flexio_process** process_ptr )
创建新的 Flex IO 进程。
参数
ibv_ctx
- 指向设备上下文的指针。
app
- 设备端应用程序句柄。
process_attr
- 可选,用于创建进程的进程属性。可以为 NULL。
process_ptr
- 指向已创建进程指针的指针。

返回值

flexio 状态值。

描述

此函数使用请求的镜像创建一个新的 Flex IO 进程。

flexio_status flexio_process_destroy ( flexio_process* process )
销毁 Flex IO 进程。
参数
process
- 指向进程的指针。NULL 是有效值。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO 进程。

flexio_status flexio_process_error_handler_set ( flexio_process* process, flexio_func_t* error_handler )
设置 Flexio 进程错误处理程序。
参数
process
- 指向进程的指针
error_handler
- 用作错误处理函数引用的主机桩函数。

返回值

flexio 状态值。

描述

此函数设置 Flex IO 进程错误处理程序。错误处理程序必须在创建进程之后,且在创建第一个线程之前设置。为错误处理程序注册的函数应使用 __dpa_global__ 注解。

FLEXIO_EXPERIMENTAL uint32_t flexio_process_get_dumem_id ( flexio_process* process )
获取 Flex IO 进程 DUMEM ID。
参数
process
- 指向 Flex IO 进程的指针。

返回值

Flex IO 进程 DUMEM ID,出错时返回 UINT32_MAX。

描述

FLEXIO_EXPERIMENTAL ibv_pd* flexio_process_get_pd ( flexio_process* process )
从 Flex IO 进程获取 Flex IO IBV PD 对象。
参数
process
- 指向 Flex IO 进程的指针。

返回值

进程的 PD 对象,出错时返回 NULL。

描述

FLEXIO_EXPERIMENTAL flexio_uar* flexio_process_get_uar ( flexio_process* process )
从 Flex IO 进程获取 Flex IO UAR 对象。
参数
process
- 指向 Flex IO 进程的指针。

返回值

Flex IO 进程 UAR 对象,出错时返回 NULL。

描述

flexio_status flexio_process_mem_info_get ( const flexio_process* process, flexio_heap_mem_info* info )
获取进程内存信息。
参数
process
- 指向 Flex IO 进程上下文的指针。
info
- 指向 flexio_heap_mem_info 结构体的指针,用于填充信息。

返回值

flexio 状态值。

描述

此函数返回进程堆内存基地址及其可用大小。

FLEXIO_EXPERIMENTAL uint64_t flexio_process_udbg_token_get ( flexio_process* process )
获取用于 Flex IO 进程调试访问的令牌。
参数
process
- 指向 Flex IO 进程上下文的指针。

返回值

请求的令牌。零值表示 - 不允许进程的用户调试访问。

描述

此函数返回用户调试系统调用访问所需的令牌。

flexio_status flexio_qp_create ( flexio_process* process, ibv_context* ibv_ctx, flexio_qp_attr* qp_fattr, flexio_qp** qp_ptr )
创建 Flex IO QP。
参数
process
- 指向 Flex IO 进程的指针。
ibv_ctx
- 指向 IBV 设备上下文的指针(可能与进程的不同)。如果为 NULL,则将使用进程的上下文。
qp_fattr
- 指向 QP 属性结构体的指针。
qp_ptr
- 指向已创建 QP 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数创建一个 Flex IO QP。

flexio_status flexio_qp_destroy ( flexio_qp* qp )
销毁 Flex IO QP。
参数
qp
- 指向 QP 上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO QP。

FLEXIO_EXPERIMENTAL uint32_t flexio_qp_get_qp_num ( flexio_qp* qp )
获取 Flex IO QP 编号。
参数
qp
- 指向 Flex IO QP 的指针。

返回值

QP 号码,出错时返回 UINT32_MAX。

描述

flexio_status flexio_qp_modify ( flexio_qp* qp, flexio_qp_attr* fattr, flexio_qp_attr_opt_param_mask* mask )
修改 Flex IO QP。
参数
qp
- 指向 QP 上下文的指针。
fattr
- 指向 QP 属性结构体的指针,该结构体也将定义 QP 连接。
mask
- 指向可选 QP 属性掩码的指针。

返回值

flexio 状态值。

描述

此函数修改 Flex IO QP 并在状态之间转换它。在该过程结束时,如果移动是 QP 状态机中的合法转换,则 Flex IO QP 将从其当前状态移动到 fattr 中给出的下一个状态。

flexio_qp_state flexio_qp_state_get ( flexio_qp* qp )
检索设备 QP 状态。
参数
qp
- 指向 Flex IO QP 的指针。

返回值

enum flexio_qp_state。

描述

此函数返回设备 QP 当前所处的状态。

flexio_status flexio_recoverable_buf_dev_alloc ( flexio_process* process, size_t buff_bsize, uint32_t mkey, flexio_uintptr_t* dest_daddr_p )
在 Flex IO 堆内存上分配可恢复的缓冲区。
参数
process
- 指向 Flex IO 进程上下文的指针。
buff_bsize
- 要分配的缓冲区大小。
mkey
- MKey ID,用于在对象销毁时将内存转储到用户缓冲区。
dest_daddr_p
- 指向 Flex IO 地址的指针,缓冲区在此地址分配。

返回值

flexio 状态值。

描述

此函数在 Flex IO 堆内存上分配具有请求大小的可恢复缓冲区。此缓冲区将强制创建一个内存对象,并在对象销毁时将其内容转储到用户提供的缓冲区。

注意:(1)创建的内存对象的分辨率为 DPA 内存块大小,因此如果 buff_bsize 不是 DPA 内存块大小的倍数,则实际分配将向上取整。(2)MKey 大小必须与缓冲区大小匹配(包括上述向上取整)。

成功时 - 将 dest_daddr_p 设置为已分配缓冲区的起始地址。失败时 - 将 dest_daddr_p 设置为 0x0。

flexio_status flexio_rmp_create ( flexio_process* process, ibv_context* ibv_ctx, const flexio_wq_attr* fattr, flexio_rmp** flexio_rmp_ptr )
创建 Flex IO RMP。
参数
process
- 指向 Flex IO 进程的指针。
ibv_ctx
- 指向 IBV 设备上下文的指针(可能与进程的不同)。如果为 NULL,则将使用进程的上下文。
fattr
- 指向 WQ 属性结构体的指针。
flexio_rmp_ptr
- 指向已创建 RMP 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数创建一个 Flex IO RMP。

flexio_status flexio_rmp_destroy ( flexio_rmp* flexio_rmp )
销毁 Flex IO RMP。
参数
flexio_rmp
- 指向 RMP 上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO RMP。

FLEXIO_EXPERIMENTAL uint32_t flexio_rmp_get_wq_num ( flexio_rmp* rmp )
获取 Flex IO RMP 编号。
参数
rmp
- 指向 Flex IO RMP 的指针。

返回值

RQ 号码,出错时返回 UINT32_MAX。

描述

flexio_status flexio_rq_create ( flexio_process* process, ibv_context* ibv_ctx, uint32_t cq_num, const flexio_wq_attr* fattr, flexio_rq** flexio_rq_ptr )
创建 Flex IO RQ。
参数
process
- 指向 Flex IO 进程的指针。
ibv_ctx
- 指向 IBV 设备上下文的指针(可能与进程的不同)。如果为 NULL,则将使用进程的上下文。
cq_num
- CQ 号码。
fattr
- 指向 RQ WQ 属性结构体的指针。
flexio_rq_ptr
- 指向已创建 RQ 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数创建一个 Flex IO RQ。

flexio_status flexio_rq_create_cross_dev ( flexio_process* process, ibv_context* ibv_ctx, uint32_t cq_num, const flexio_wq_attr* fattr, flexio_rq** flexio_rq_ptr )
创建 Flex IO RQ,假定为跨设备。
参数
process
- 指向 Flex IO 进程的指针。
ibv_ctx
- 指向 IBV 设备上下文的指针(应与进程的不同)。如果为 NULL 或与进程相同 - 将导致错误。
cq_num
- CQ 号码。
fattr
- 指向 RQ WQ 属性结构体的指针。
flexio_rq_ptr
- 指向已创建 RQ 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数创建一个 Flex IO RQ,假设跨 VHCA_ID,不进行检查。

flexio_status flexio_rq_destroy ( flexio_rq* flexio_rq )
销毁 Flex IO RQ。
参数
flexio_rq
- 指向 RQ 上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO RQ。

FLEXIO_EXPERIMENTAL mlx5dv_devx_obj* flexio_rq_get_object ( flexio_rq* rq )
获取 Flex IO RQ 对象。
参数
rq
- 指向 RQ 上下文的指针。

返回值

RQ devx 对象。

描述

此函数返回 Flex IO RQ 对象。

FLEXIO_EXPERIMENTAL mlx5dv_devx_obj* flexio_rq_get_tir ( flexio_rq* rq )
获取 Flex IO RQ TIR 对象。
参数
rq
- 指向 Flex IO RQ 的指针。

返回值

RQ TIR 对象,出错时返回 NULL。

描述

FLEXIO_EXPERIMENTAL uint32_t flexio_rq_get_wq_num ( flexio_rq* rq )
获取 Flex IO RQ 编号。
参数
rq
- 指向 Flex IO RQ 的指针。

返回值

RQ 号码,出错时返回 UINT32_MAX。

描述

flexio_status flexio_rq_set_err_state ( flexio_rq* rq )
将 Flex IO RQ 设置为错误状态。
参数
rq
- 指向要移动到错误状态的 RQ 上下文的指针。

返回值

flexio 状态值。

描述

此函数将 Flex IO RQ 设置为错误状态。

flexio_status flexio_sq_create ( flexio_process* process, ibv_context* ibv_ctx, uint32_t cq_num, const flexio_wq_attr* fattr, flexio_sq** flexio_sq_ptr )
创建 Flex IO SQ。
参数
process
- 指向 Flex IO 进程的指针。
ibv_ctx
- 指向 IBV 设备上下文的指针(可能与进程的不同)。如果为 NULL,则将使用进程的上下文。
cq_num
- CQ 号码(可以是 Flex IO 或主机 CQ)。
fattr
- 指向 SQ 属性结构体的指针。
flexio_sq_ptr
- 指向已创建 SQ 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数创建一个 Flex IO SQ。

flexio_status flexio_sq_create_cross_dev ( flexio_process* process, ibv_context* ibv_ctx, uint32_t cq_num, const flexio_wq_attr* fattr, flexio_sq** flexio_sq_ptr )
创建 Flex IO SQ,假定为跨设备。
参数
process
- 指向 Flex IO 进程的指针。
ibv_ctx
- 指向 IBV 设备上下文的指针(应与进程的不同)。如果为 NULL 或与进程相同 - 将导致错误。
cq_num
- CQ 号码(可以是 Flex IO 或主机 CQ)。
fattr
- 指向 SQ 属性结构体的指针。
flexio_sq_ptr
- 指向已创建 SQ 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数创建一个 Flex IO SQ,假设跨 VHCA_ID,不进行检查。

flexio_status flexio_sq_destroy ( flexio_sq* flexio_sq )
销毁 Flex IO SQ。
参数
flexio_sq
- 指向 SQ 上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO SQ。

FLEXIO_EXPERIMENTAL uint32_t flexio_sq_get_wq_num ( flexio_sq* sq )
获取 Flex IO SQ 编号。
参数
sq
- 指向 Flex IO SQ 的指针。

返回值

SQ 号码,出错时返回 UINT32_MAX。

描述

flexio_status flexio_sq_tis_create ( ibv_context* ibv_ctx, flexio_transport_domain* td, flexio_sq_tis** tis )
创建 Flex IO SQ 传输接口发送 (TIS) 对象。
参数
ibv_ctx
- 指向 IBV 设备上下文的指针。必须与将使用此 TIS 的 SQ 的设备上下文相同。
td
- 指向 Flex IO 传输域结构体的指针。TD 必须为为 TIS 创建提供的相同 IBV 设备上下文创建。
tis
- 指向已创建 SQ TIS 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数创建一个 Flex IO SQ TIS,用于允许从 SQ 进行 steering。

flexio_status flexio_sq_tis_destroy ( flexio_sq_tis* tis )
销毁 Flex IO SQ TIS。
参数
tis
- 指向 SQ TIS 上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO TIS。

flexio_status flexio_transport_domain_create ( ibv_context* ibv_ctx, flexio_transport_domain** td )
创建 Flex IO 传输域 (TD)。
参数
ibv_ctx
- 指向 IBV 设备上下文的指针。
td
- 指向已创建 TD 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数为给定的 IBV 设备上下文创建一个 TD。

flexio_status flexio_transport_domain_destroy ( flexio_transport_domain* td )
销毁 Flex IO 传输域 (TD)。
参数
td
- 指向 TD 上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO TD。

flexio_status flexio_uar_create ( flexio_process* process, flexio_uar** flexio_uar )
创建 Flex IO UAR 对象。
参数
process
- 指向 Flex IO 进程上下文的指针。
flexio_uar
- 指向指向已创建的 Flex IO UAR 结构体的指针。

返回值

flexio 状态值。

描述

此函数创建一个 Flex IO UAR 对象。

flexio_status flexio_uar_destroy ( flexio_uar* uar )
销毁 Flex IO UAR 对象
参数
uar
- 指向要销毁的 Flex IO UAR 的指针。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO UAR 对象。

flexio_status flexio_uar_extend ( flexio_uar* in_uar, ibv_context* to_extend, flexio_uar** extended )
将 UAR 扩展到 ibv 上下文。
参数
in_uar
- 指向 Flex IO uar 的指针。
to_extend
- 指向要扩展到的 IBV 设备上下文的指针。
extended
- 指向 UAR 上下文指针的指针。

返回值

flexio 状态值。

描述

此函数将 UAR 扩展到 ibv 上下文,以允许处理其队列。

flexio_uar_device_id flexio_uar_get_extended_id ( flexio_uar* uar )
获取 Flex IO 扩展 UAR ID。
参数
uar
- 指向 Flex IO 扩展 UAR 的指针。

返回值

Flex IO UAR 扩展 ID,出错时返回 UINT32_MAX。

描述

FLEXIO_EXPERIMENTAL uint32_t flexio_uar_get_id ( flexio_uar* uar )
获取 Flex IO UAR ID。
参数
uar
- 指向 Flex IO UAR 的指针。

返回值

Flex IO UAR ID,出错时返回 UINT32_MAX。

描述

flexio_status flexio_version_set ( uint64_t version )
设置 flexio 的版本。
参数
version
- 要设置的版本,格式为 FLEXIO_VER(major, minor, 0)。

返回值

flexio 状态值。

描述

此函数允许库确定应使用的版本。该函数仅允许无错误调用一次;如果再次使用不同的版本调用,则返回错误。如果使用大于 FLEXIO_CURRENT_VERSION 的版本调用该函数,也会返回错误。

flexio_status flexio_window_create ( flexio_process* process, ibv_pd* pd, flexio_window** window )
创建 Flex IO 窗口。
参数
process
- 指向 Flex IO 进程的指针。
pd
- 指向保护域结构体的指针,窗口应访问该内存。
window
- 指向已创建窗口上下文指针的指针。

返回值

flexio 状态值。

描述

此函数为给定的进程创建 Flex IO 窗口。

flexio_status flexio_window_destroy ( flexio_window* window )
销毁 Flex IO 窗口。
参数
window
- 指向窗口上下文的指针。

返回值

flexio 状态值。

描述

此函数销毁一个 Flex IO 窗口。

FLEXIO_EXPERIMENTAL uint32_t flexio_window_get_id ( flexio_window* window )
获取 Flex IO 窗口 ID。
参数
window
- 指向 Flex IO 窗口的指针。

返回值

Flex IO 窗口 ID,出错时返回 UINT32_MAX。

描述

Flex IO SDK 设备 API,用于 DPA 程序。 包括 DPA 程序的各项服务。

模块

 Flex IO SDK 开发错误处理
 
 Flex IO SDK 开发队列访问
 
 Flex IO SDK 开发队列类型
 

struct spinlock_s

宏定义

#define FLEXIO_DEV_EXPERIMENTAL
将符号(或特定函数)设置为实验性。
#define flexio_dev_msg_broadcast ( lvl, ... )
创建消息条目,并将设备输出发送到所有主机的打开流。 与常规 printf 相同,但具有防止来自不同线程同时打印的保护。
#define flexio_dev_msg_dflt ( lvl, ... )
创建消息条目,并将设备输出发送到主机的默认流。 与常规 printf 相同,但具有防止来自不同线程同时打印的保护。
#define flexio_dev_print ( ... )
创建消息条目,并将设备输出发送到主机的默认流,消息级别为 FLEXIO_MSG_DEV_INFO。 与常规 printf 相同,但具有防止来自不同线程同时打印的保护。
#define spin_init ( lock )
初始化自旋锁机制。
#define spin_lock ( lock )
锁定自旋锁机制。
#define spin_trylock ( lock )
原子性尝试获取锁。
#define spin_unlock ( lock )
解锁自旋锁机制。

类型定义

typedef uint64_t(  flexio_dev_arg_unpack_func_t
typedef void(  flexio_dev_async_rpc_handler_t
typedef void(  flexio_dev_event_handler_t
typedef uint64_t(  flexio_dev_rpc_handler_t
typedef uint32_t  flexio_uar_device_id

枚举

enum cq_ce_mode
enum flexio_dev_nic_counter_ids
enum flexio_dev_status_t
enum flexio_window_entity

函数

flexio_dev_status_t flexio_dev_cross_device_ring_db ( flexio_uar_device_id device_id, uint32_t qpn, uint32_t pi )
向另一个设备 ID 上的 QP 发送门铃信号
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_event_handler_activate ( uint32_t activation_id )
激活事件处理程序线程。
FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_pcc_table_base ( uint16_t vhca_id )
获取可编程拥塞控制表基地址
FLEXIO_DEV_EXPERIMENTAL int flexio_dev_get_thread_ctx ( flexio_dev_thread_ctx** dtctx )
请求线程上下文。
FLEXIO_DEV_EXPERIMENTAL uint32_t flexio_dev_get_thread_id ( flexio_dev_thread_ctx* dtctx )
从线程上下文获取线程 ID。
flexio_uintptr_t flexio_dev_get_thread_local_storage ( flexio_dev_thread_ctx* dtctx )
从线程上下文获取线程本地存储地址。
FLEXIO_DEV_EXPERIMENTAL int flexio_dev_msg ( int  stream_id, flexio_msg_dev_level level, const char* format, ... )
创建消息条目,并将设备输出发送到主机端。
flexio_dev_status_t flexio_dev_multi_window_config ( flexio_window_entity win_entity, uint16_t window_config_id, uint32_t mkey )
配置线程窗口对象。
flexio_dev_status_t flexio_dev_multi_window_copy_from_host ( flexio_window_entity win_entity, void* daddr, uint64_t haddr, uint32_t size )
将缓冲区从主机内存复制到设备内存。
flexio_dev_status_t flexio_dev_multi_window_copy_to_host ( flexio_window_entity win_entity, uint64_t haddr, const void* daddr, uint32_t size )
将缓冲区从设备内存复制到主机内存。
flexio_dev_status_t flexio_dev_multi_window_mkey_config ( flexio_window_entity win_entity, uint32_t mkey )
配置线程窗口 mkey 对象。
flexio_dev_status_t flexio_dev_multi_window_ptr_acquire ( flexio_window_entity win_entity, uint64_t haddr, flexio_uintptr_t* daddr )
从主机分配的内存生成设备地址。
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_nic_counters_config ( uint32_t* counter_values, uint32_t* counter_ids, uint32_t num_counters )
准备要读取的计数器列表。
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_nic_counters_sample ( void )
根据之前的配置调用对计数器进行采样。
flexio_dev_status_t flexio_dev_outbox_config ( flexio_dev_thread_ctx* dtctx, uint16_t outbox_config_id )
配置线程 outbox 对象。
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_outbox_config_fast ( flexio_dev_thread_ctx* dtctx, uint16_t outbox_config_id )
配置线程 outbox 对象,不进行任何检查。
flexio_dev_status_t flexio_dev_outbox_config_uar_extension ( flexio_dev_thread_ctx* dtctx, flexio_uar_device_id device_id )
为 outbox 设置扩展 ID
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_process_finish ( void )
退出 flexio 进程(无错误)。
FLEXIO_DEV_EXPERIMENTAL int flexio_dev_puts ( flexio_dev_thread_ctx* dtctx, char* str )
将字符串放入消息队列。
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_thread_finish ( void )
从线程退出,将其标记为已完成。
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_thread_reschedule ( void )
从线程退出,保持进程活动状态。
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_thread_retrigger ( void )
从线程退出,并重新触发它。
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_yield ( flexio_dev_thread_ctx* dtctx )
可继续的事件处理程序例程的退出点

宏定义

#define FLEXIO_DEV_EXPERIMENTAL

__attribute__((deprecated("Symbol is defined as experimental"), \ section(".text.experimental"))) \ FLEXIO_DEV_STABLE

#define flexio_dev_msg_broadcast ( lvl, ... )

flexio_dev_msg(FLEXIO_MSG_DEV_BROADCAST_STREAM, lvl, __VA_ARGS__)

参数
lvl
- 消息级别。
...
- va_args 参数。 与常规 vsprintf 相同。

#define flexio_dev_msg_dflt ( lvl, ... )

flexio_dev_msg(FLEXIO_MSG_DEV_DEFAULT_STREAM_ID, lvl, __VA_ARGS__)

参数
lvl
- 消息级别。
...
- 格式和参数。 与常规 printf 相同。

#define flexio_dev_print ( ... )

flexio_dev_msg(FLEXIO_MSG_DEV_DEFAULT_STREAM_ID, FLEXIO_MSG_DEV_INFO, __VA_ARGS__)

参数
...
- 格式和参数。 与常规 printf 相同。

#define spin_init ( lock )

初始化自旋锁机制,必须在使用前调用。

__atomic_store_n(&((lock)->locked), 0, __ATOMIC_SEQ_CST)

参数
lock
- 指向 spinlock_s 结构的指针。

#define spin_lock ( lock )

锁定自旋锁机制。

do { \ while (__atomic_exchange_n(&((lock)->locked), 1, __ATOMIC_SEQ_CST)) {;} \ } while (0)

参数
lock
- 指向 spinlock_s 结构的指针。

#define spin_trylock ( lock )

尝试获取锁。立即返回。

__atomic_exchange_n(&((lock)->locked), 1, __ATOMIC_SEQ_CST)

参数
lock
- 指向 spinlock_s 结构的指针。

#define spin_unlock ( lock )

解锁自旋锁机制。

__atomic_store_n(&((lock)->locked), 0, __ATOMIC_SEQ_CST)

参数
lock
- 指向 spinlock_s 结构的指针。

类型定义

typedef uint64_t( flexio_dev_arg_unpack_func_t

解包参数并调用用户函数。

此回调函数在运行时用于从 Host 上的调用中解包参数,然后调用 DPA 上的函数。此函数在 flexio dev 内部调用。

argbuf - Host 写入的参数缓冲区。 func - 指向用户函数的函数指针。

return uint64_t - RPC 函数的结果。

typedef void( flexio_dev_async_rpc_handler_t

异步 RPC 处理程序回调函数类型。

定义 RPC 处理程序回调函数。

arg - RPC 函数的参数。

return void.

typedef void( flexio_dev_event_handler_t

事件处理程序回调函数类型。

定义事件处理程序回调函数。在处理程序函数结束时,需要调用 flexio_dev_process_finish() 而不是常规的 return 语句,以便正确地将资源释放回操作系统。

thread_arg - 执行线程的参数。

return void.

typedef uint64_t( flexio_dev_rpc_handler_t

RPC 处理程序回调函数类型。

为最有用的回调函数定义 RPC 处理程序。

arg - RPC 函数的参数。

return uint64_t - RPC 函数的结果。

typedef uint32_t flexio_uar_device_id

Flex IO UAR 扩展 ID 原型。

枚举

enum cq_ce_mode

Flex IO dev CQ CQE 创建模式。

MLX5_CTRL_SEG_CE_CQE_ON_CQE_ERROR = 0x0
MLX5_CTRL_SEG_CE_CQE_ON_FIRST_CQE_ERROR = 0x1
MLX5_CTRL_SEG_CE_CQE_ALWAYS = 0x2
MLX5_CTRL_SEG_CE_CQE_AND_EQE = 0x3

enum flexio_dev_nic_counter_ids

Flex IO dev NIC 计数器 ID 枚举。

FLEXIO_DEV_NIC_COUNTER_PORT0_RX_BYTES = 0x10
FLEXIO_DEV_NIC_COUNTER_PORT1_RX_BYTES = 0x11
FLEXIO_DEV_NIC_COUNTER_PORT2_RX_BYTES = 0x12
FLEXIO_DEV_NIC_COUNTER_PORT3_RX_BYTES = 0x13
FLEXIO_DEV_NIC_COUNTER_PORT0_TX_BYTES = 0x20
FLEXIO_DEV_NIC_COUNTER_PORT1_TX_BYTES = 0x21
FLEXIO_DEV_NIC_COUNTER_PORT2_TX_BYTES = 0x22
FLEXIO_DEV_NIC_COUNTER_PORT3_TX_BYTES = 0x23

enum flexio_dev_status_t

Flex IO dev API 函数的返回状态。

FLEXIO_DEV_STATUS_SUCCESS = 0
FLEXIO_DEV_STATUS_FAILED = 1

enum flexio_window_entity

Flex IO dev 窗口实体。

FLEXIO_DEV_WINDOW_ENTITY_0 = 0
FLEXIO_DEV_WINDOW_ENTITY_1 = 1
FLEXIO_DEV_WINDOW_ENTITY_NUM = 2

函数

flexio_dev_status_t flexio_dev_cross_device_ring_db ( flexio_uar_device_id device_id, uint32_t qpn, uint32_t pi )
向另一个设备 ID 上的 QP 发送门铃信号
参数
device_id
- 设备 ID。
qpn
- 要在其上发送门铃的 QP 号。
pi
- 门铃生产者索引。

返回值

flexio_dev_status_t

描述

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_event_handler_activate ( uint32_t activation_id )
激活事件处理程序线程。
参数
activation_id
- 事件处理程序激活 ID。

返回值

void.

描述

使用激活 id,激活(触发)具有该激活 id 的事件处理程序。请注意,激活的事件处理程序必须与激活线程属于同一进程。

FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_pcc_table_base ( uint16_t vhca_id )
获取可编程拥塞控制表基地址
参数
vhca_id
- PCC 表 VHCA_ID。

返回值

给定 VHCA_ID 的 PCC 表基地址。

描述

此函数获取可编程拥塞控制表基地址。

FLEXIO_DEV_EXPERIMENTAL int flexio_dev_get_thread_ctx ( flexio_dev_thread_ctx** dtctx )
请求线程上下文。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构指针的指针。

返回值

成功时返回 0,失败时返回负值。

描述

此函数请求线程上下文。应在每个线程启动时调用。

FLEXIO_DEV_EXPERIMENTAL uint32_t flexio_dev_get_thread_id ( flexio_dev_thread_ctx* dtctx )
从线程上下文获取线程 ID。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。

返回值

线程 ID 值。

描述

此函数查询线程上下文以获取其线程 ID(来自线程元数据)。

flexio_uintptr_t flexio_dev_get_thread_local_storage ( flexio_dev_thread_ctx* dtctx )
从线程上下文获取线程本地存储地址。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。

返回值

线程本地存储值。

描述

此函数查询线程上下文以获取其线程本地存储(来自线程元数据)。

FLEXIO_DEV_EXPERIMENTAL int flexio_dev_msg ( int  stream_id, flexio_msg_dev_level level, const char* format, ... )
创建消息条目,并将设备输出发送到主机端。
参数
stream_id
- 相关的消息流 ID,由主机创建和传递。
level
- 消息级别。
format
- 与常规 printf 相同。

返回值

- 与常规 printf 的输出相同。

描述

与常规 printf 相同,但具有防止来自不同线程同时打印的保护机制。

flexio_dev_status_t flexio_dev_multi_window_config ( flexio_window_entity win_entity, uint16_t window_config_id, uint32_t mkey )
配置线程窗口对象。
参数
win_entity
- 要配置的窗口实体。
window_config_id
- 窗口对象 ID。
mkey
- mkey ID。

返回值

flexio_dev_status_t。

描述

此函数更新给定线程上下文的线程窗口对象。

flexio_dev_status_t flexio_dev_multi_window_copy_from_host ( flexio_window_entity win_entity, void* daddr, uint64_t haddr, uint32_t size )
将缓冲区从主机内存复制到设备内存。
参数
win_entity
- 要配置的窗口实体。
daddr
- 指向设备内存缓冲区的指针。
haddr
- 指向主机内存分配缓冲区的指针。
size
- 要复制的字节数。

返回值

flexio_dev_status_t。

描述

此函数将指定数量的字节从主机内存复制到设备内存。目前不支持。

flexio_dev_status_t flexio_dev_multi_window_copy_to_host ( flexio_window_entity win_entity, uint64_t haddr, const void* daddr, uint32_t size )
将缓冲区从设备内存复制到主机内存。
参数
win_entity
- 要配置的窗口实体。
haddr
- 指向主机内存分配缓冲区的指针。
daddr
- 指向设备内存缓冲区的指针。
size
- 要复制的字节数。

返回值

flexio_dev_status_t。

描述

此函数将指定数量的字节从设备内存复制到主机内存。

flexio_dev_status_t flexio_dev_multi_window_mkey_config ( flexio_window_entity win_entity, uint32_t mkey )
配置线程窗口 mkey 对象。
参数
win_entity
- 要配置的窗口实体。
mkey
- mkey ID。

返回值

flexio_dev_status_t。

描述

此函数更新给定线程上下文的线程窗口 mkey 对象。

flexio_dev_status_t flexio_dev_multi_window_ptr_acquire ( flexio_window_entity win_entity, uint64_t haddr, flexio_uintptr_t* daddr )
从主机分配的内存生成设备地址。
参数
win_entity
- 要配置的窗口实体。
haddr
- 主机分配的地址。
daddr
- 指向用于写入设备生成的匹配地址的指针。

返回值

flexio_dev_status_t。

描述

此函数根据已创建的窗口对象,从主机分配的地址生成设备用于访问主机端内存的内存地址。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_nic_counters_config ( uint32_t* counter_values, uint32_t* counter_ids, uint32_t num_counters )
准备要读取的计数器列表。
参数
counter_values
- 用于存储通过 flexio_dev_nic_counters_sample() 读取的计数器值 (32b) 的缓冲区。
counter_ids
- 计数器 ID 数组。
num_counters
- counter_ids 数组中计数器的数量。

返回值

void 进程崩溃的情况:counters_ids 过大,values 指针错误,counter_ids 未知计数器

描述

列表存储在内核内存中。每个进程仅支持单个计数器配置。请注意,数组内存必须仅在全局内存或堆内存中定义。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_nic_counters_sample ( void )
根据之前的配置调用对计数器进行采样。
返回值

void. 进程崩溃的情况:从未调用 flexio_dev_config_nic_counters()

描述

采样在上次成功调用 flexio_dev_config_nic_counters() 中提供的 counter_ids、num_counters 和 values 缓冲区。此调用确保在预先检查的计数器 ID 和缓冲区上进行最快的采样。

flexio_dev_status_t flexio_dev_outbox_config ( flexio_dev_thread_ctx* dtctx, uint16_t outbox_config_id )
配置线程 outbox 对象。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。
outbox_config_id
- outbox 对象配置 ID。

返回值

flexio_dev_status_t。

描述

此函数更新给定线程上下文的线程 outbox 对象。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_outbox_config_fast ( flexio_dev_thread_ctx* dtctx, uint16_t outbox_config_id )
配置线程 outbox 对象,不进行任何检查。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。
outbox_config_id
- outbox 对象配置 ID。

返回值

函数不返回。

描述

此函数更新给定线程上下文的线程 outbox 对象,但它不检查正确性或冗余(与当前配置的 ID 相同)。

flexio_dev_status_t flexio_dev_outbox_config_uar_extension ( flexio_dev_thread_ctx* dtctx, flexio_uar_device_id device_id )
为 outbox 设置扩展 ID
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。
device_id
- 设备 ID。

返回值

flexio_dev_status_t。

描述

此函数设置 outbox 操作的设备 ID。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_process_finish ( void )
退出 flexio 进程(无错误)。
返回值

函数不返回。

描述

此函数将资源释放回操作系统,并在 dpa_process_status 中返回 '0x40'。当前进程的所有线程将停止执行,并且此进程的新线程将无法触发。线程状态不会更改为“finished”(将保持原样)。

FLEXIO_DEV_EXPERIMENTAL int flexio_dev_puts ( flexio_dev_thread_ctx* dtctx, char* str )
将字符串放入消息队列。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构指针的指针。
str
- 指向字符串的指针。

返回值

消息字符串的长度。

描述

此函数将字符串放入主机的默认流消息队列。此队列已由主机应用程序处理。如果主机应用程序未配置设备消息传递流环境,则无效。为了初始化/配置设备消息传递环境 - 在主机端 - 在 flexio_process_create 之后,应创建流,因此应调用 flexio_msg_stream_create,并且应创建默认流。在设备端 - 在使用 flexio_dev_puts 之前,需要线程上下文,因此应在之前调用 flexio_dev_get_thread_ctx。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_thread_finish ( void )
从线程退出,将其标记为已完成。
返回值

函数不返回。

描述

此函数将资源释放回操作系统。线程将被标记为已完成,因此下一个 DUAR 将不会触发它。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_thread_reschedule ( void )
从线程退出,保持进程活动状态。
返回值

函数不返回。

描述

此函数将资源释放回操作系统。对于下一个 DUAR,线程将从头开始重新启动。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_thread_retrigger ( void )
从线程退出,并重新触发它。
返回值

函数不返回。

描述

此函数请求操作系统重新触发线程。线程将不会等待下一个 DUAR 被触发,而是将立即被触发。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_yield ( flexio_dev_thread_ctx* dtctx )
可继续的事件处理程序例程的退出点
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。

返回值

函数不返回。

描述

此函数用于标记可继续事件处理程序上的退出点,用户希望在下一个事件上继续执行。为了使用此 API,创建事件处理程序时必须启用可继续标志,否则调用将无效。

Flex IO SDK 开发错误处理

Flex IO SDK 开发队列访问

Flex IO SDK 开发队列类型

2.3.1. Flex IO SDK dev 错误处理

[ Flex IO SDK dev ]

Flex IO SDK 设备 API,用于 DPA 程序错误处理。

枚举
enum flexio_dev_error_t
函数
FLEXIO_DEV_EXPERIMENTAL __attribute__ ( (__noreturn__) )
退出进程并返回用户(致命)错误代码。
FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_and_rst_errno ( flexio_dev_thread_ctx* dtctx )
获取并重置可恢复(非致命)错误的线程错误标志 (errno)。
FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_errno ( flexio_dev_thread_ctx* dtctx )
获取可恢复(非致命)错误的线程错误标志 (errno)。
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_rst_errno ( flexio_dev_thread_ctx* dtctx )
重置可恢复(非致命)错误的线程错误标志 (errno)。
枚举
enum flexio_dev_error_t

Flex IO dev 错误。

FLEXIO_DEV_ERROR_ILLEGAL_ERR = 0x42
非法用户错误代码

函数
FLEXIO_DEV_EXPERIMENTAL __attribute__ ( (__noreturn__) )
退出进程并返回用户(致命)错误代码。
返回值

- 函数不返回

描述

在 DPA_PROCESS 对象的 dpa_process_status 字段中返回给主机的错误代码定义如下:0: OK 1-63: RTOS 或固件错误 64-127: Flexio-SDK 错误 128-255: 用户定义

FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_and_rst_errno ( flexio_dev_thread_ctx* dtctx )
获取并重置可恢复(非致命)错误的线程错误标志 (errno)。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。

返回值

- 线程错误代码。

描述

FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_errno ( flexio_dev_thread_ctx* dtctx )
获取可恢复(非致命)错误的线程错误标志 (errno)。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。

返回值

线程错误代码。

描述

此函数从线程上下文查询 errno 字段。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_rst_errno ( flexio_dev_thread_ctx* dtctx )
重置可恢复(非致命)错误的线程错误标志 (errno)。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。

返回值

- void。

描述

2.3.2. Flex IO SDK dev 队列访问

[ Flex IO SDK dev ]

Flex IO SDK 设备 API,用于 DPA 程序队列访问。提供用于处理网络队列 (WQ/CQ) 的 API。

宏定义
#define FLEXIO_DEV_COMP_CQE_GET_RX_HASH_RESULT ( _x )
从迷你 CQE 获取 RX 哈希结果。
#define flexio_dev_msix_send ( cqn ) flexio_dev_zcqe_gen(cqn)
从给定的 CQ 生成 MSI-X。
枚举
enum flexio_ctrl_seg_t
enum flexio_dev_cc_db_next_act_t
函数
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db ( uint16_t ccq_id, uint32_t rate, uint32_t rtt_req, flexio_dev_cc_db_next_act_t next_act )
环 CC 门铃。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db_high64bit ( uint64_t value )
写入 CC 门铃寄存器的高 64 位。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db_low64bit ( uint64_t value )
写入 CC 门铃寄存器的低 64 位。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_comp_cq_init ( flexio_dev_cqe64* cqe, int  num_cqes, uint8_t validity_iteration_count )
根据压缩功能要求初始化 CQE。
FLEXIO_DEV_ALWAYS_INLINE uint64_t flexio_dev_comp_cqe_get_comp_cqe ( flexio_dev_cqe64* cqe, int  comp_cqe_index )
从 CQE 获取迷你 CQE。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_get_num_comp_cqes ( flexio_dev_cqe64* cqe )
获取 CQE 中迷你 CQE 的数量。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_get_validity_byte ( flexio_dev_cqe64* cqe )
从 CQE 获取有效性迭代计数字节值。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_is_comp_cqe_array ( flexio_dev_cqe64* cqe )
如果 CQE 是迷你 CQE 数组,则返回 true
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cq_arm ( uint32_t ci, uint32_t qnum )
Arm CQ 函数。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_byte_cnt ( flexio_dev_cqe64* cqe )
从 CQE 函数获取字节计数字段。
FLEXIO_DEV_ALWAYS_INLINE uint16_t flexio_dev_cqe_get_csum_ok ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 csum OK 字段。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_err_synd ( flexio_dev_cqe64* cqe )
从 CQE 函数获取错误综合征字段。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_opcode ( flexio_dev_cqe64* cqe )
从 CQE 函数获取操作码字段。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_owner ( flexio_dev_cqe64* cqe )
从 CQE 函数获取所有者字段。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_qpn ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 QP 号字段。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_type ( flexio_dev_cqe64* cqe )
从 CQE 函数获取类型。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_user_index ( flexio_dev_cqe64* cqe )
从 CQE 函数获取用户索引字段。
FLEXIO_DEV_ALWAYS_INLINE uint16_t flexio_dev_cqe_get_wqe_counter ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 WQE 计数器字段。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_db_ctx_arm ( uint32_t qnum, uint32_t emu_ctx_id )
arm 仿真上下文
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_db_ctx_force_trigger ( uint32_t cqn, uint32_t emu_ctx_id )
强制触发仿真上下文
flexio_dev_status_t flexio_dev_dbr_cq_set_ci ( uint32_t* cq_dbr, uint32_t ci )
为 CQ 函数设置消费者索引值。
flexio_dev_status_t flexio_dev_dbr_rq_inc_pi ( uint32_t* rq_dbr )
将 RQ 的生产者索引递增 1。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_eq_update_ci ( uint32_t ci, uint32_t qnum )
更新 EQ 消费者索引。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_eqe_get_cqn ( flexio_dev_eqe* eqe )
从 EQE 函数获取 CQ 号字段。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_eqe_get_owner ( flexio_dev_eqe* eqe )
从 EQE 函数获取所有者字段。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_qp_sq_ring_db ( uint16_t pi, uint32_t qnum )
QP/SQ 环门铃函数。
FLEXIO_DEV_ALWAYS_INLINE void* flexio_dev_rwqe_get_addr ( flexio_dev_wqe_rcv_data_seg* rwqe )
从接收 WQE 函数获取地址字段。
flexio_dev_status_t flexio_dev_swqe_seg_atomic_set ( flexio_dev_sqe_seg* swqe, uint64_t swap_or_add_data, uint64_t compare_data )
填写原子发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_ctrl_set ( flexio_dev_sqe_seg* swqe, uint32_t sq_pi, uint32_t sq_number, uint32_t ce, flexio_ctrl_seg_t ctrl_seg_type )
填写控制发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_eth_set ( flexio_dev_sqe_seg* swqe, uint16_t cs_swp_flags, uint16_t mss, uint16_t inline_hdr_bsz, uint8_t inline_hdrs[2] )
填写以太网发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_inline_data_set ( flexio_dev_sqe_seg* swqe, uint32_t data_sz, uint32_t* data )
填写内联数据发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_mem_ptr_data_set ( flexio_dev_sqe_seg* swqe, uint32_t data_sz, uint32_t lkey, uint64_t data_addr )
填写内存指针数据发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_rdma_set ( flexio_dev_sqe_seg* swqe, uint32_t rkey, uint64_t raddr )
填充 RDMA 发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_shared_receive_set ( flexio_dev_sqe_seg* swqe, uint16_t next_wqe_index, uint8_t signature )
填充共享接收队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_transpose_set ( flexio_dev_sqe_seg* swqe, uint8_t element_size, uint8_t num_of_cols, uint8_t num_of_rows )
填充转置发送 wqe 段函数。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_zcqe_gen ( uint32_t cqn )
在给定 CQ 上生成一个零 CQE。
宏定义
#define FLEXIO_DEV_COMP_CQE_GET_RX_HASH_RESULT ( _x )

be32_to_cpu((uint32_t)((_x) & 0xFFFFFFFFULL))

参数
_x
- 迷你 CQE 值。

#define flexio_dev_msix_send ( cqn ) flexio_dev_zcqe_gen(cqn)

此函数触发连接到给定 CQ 的 MSI-X 中断。

参数
cqn
- 要触发的 CQ 编号。触发是通过当前配置的外发邮箱完成的,可以根据 CQ 使用外发邮箱配置 API 更改此设置。

枚举
enum flexio_ctrl_seg_t

Flex IO dev WQE 控制段类型。

FLEXIO_CTRL_SEG_SEND_EN = 0
FLEXIO_CTRL_SEG_SEND_RC = 1
FLEXIO_CTRL_SEG_LDMA = 2
FLEXIO_CTRL_SEG_RDMA_WRITE = 3
FLEXIO_CTRL_SEG_RDMA_READ = 4
FLEXIO_CTRL_SEG_ATOMIC_COMPARE_AND_SWAP = 5
FLEXIO_CTRL_SEG_LSO = 6
FLEXIO_CTRL_SEG_NOP = 7
FLEXIO_CTRL_SEG_RDMA_WRITE_IMM = 8
FLEXIO_CTRL_SEG_TRANSPOSE = 9

enum flexio_dev_cc_db_next_act_t

Flex IO dev 拥塞控制下一步操作类型。

CC_DB_NEXT_ACT_SINGLE = 0x0
CC_DB_NEXT_ACT_MULTIPLE = 0x1
CC_DB_NEXT_ACT_FW = 0x2

函数
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db ( uint16_t ccq_id, uint32_t rate, uint32_t rtt_req, flexio_dev_cc_db_next_act_t next_act )
环 CC 门铃。
参数
ccq_id
- 要更新的 CC 队列 ID。
rate
- 要设置的速率。
rtt_req
- 要设置的 RTT 测量请求。
next_act
- 要设置的下一步操作。

返回值

void.

描述

此函数为请求的 CC 队列响铃 CC 门铃,这将设置请求的速率、RTT 请求和下一步操作。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db_high64bit ( uint64_t value )
写入 CC 门铃寄存器的高 64 位。
参数
value
- 要写入的 64 位值。

返回值

void.

描述

此函数写入 CC 门铃寄存器的高 64 位。寄存器值应由调用者根据寄存器布局准备。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db_low64bit ( uint64_t value )
写入 CC 门铃寄存器的低 64 位。
参数
value
- 要写入的 64 位值。

返回值

void.

描述

此函数写入 CC 门铃寄存器的低 64 位。寄存器值应由调用者根据寄存器布局准备。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_comp_cq_init ( flexio_dev_cqe64* cqe, int  num_cqes, uint8_t validity_iteration_count )
根据压缩功能要求初始化 CQE。
参数
cqe
- 要初始化的范围内的第一个 CQE。
num_cqes
- 范围内的 CQE 数量。
validity_iteration_count
- 要初始化的 validity_iteration_count 字段值。

返回值

void.

描述

FLEXIO_DEV_ALWAYS_INLINE uint64_t flexio_dev_comp_cqe_get_comp_cqe ( flexio_dev_cqe64* cqe, int  comp_cqe_index )
从 CQE 获取迷你 CQE。
参数
cqe
- 要解析的 CQE。
comp_cqe_index
- 要从数组返回的迷你 CQE 的索引。

返回值

uint64_t - 迷你 CQE 值。

描述

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_get_num_comp_cqes ( flexio_dev_cqe64* cqe )
获取 CQE 中迷你 CQE 的数量。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - 数组中迷你 CQE 的数量。

描述

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_get_validity_byte ( flexio_dev_cqe64* cqe )
从 CQE 获取有效性迭代计数字节值。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - 有效性字节值。

描述

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_is_comp_cqe_array ( flexio_dev_cqe64* cqe )
如果 CQE 是迷你 CQE 数组,则返回 true
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - 迷你 cqe 数组为真。

描述

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cq_arm ( uint32_t ci, uint32_t qnum )
Arm CQ 函数。
参数
ci
- 当前 CQ 消费者索引。
qnum
- 要 arm 的 CQ 编号。

返回值

void.

描述

将 CQ 移动到“armed”状态。这意味着为此 CQ 创建的下一个 CQE 将导致相关 EQ 上的 EQE。

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_byte_cnt ( flexio_dev_cqe64* cqe )
从 CQE 函数获取字节计数字段。
参数
cqe
- 要解析的 CQE。

返回值

uint32_t - CQE 的字节计数字段值。

描述

解析 CQE 的字节计数字段。

FLEXIO_DEV_ALWAYS_INLINE uint16_t flexio_dev_cqe_get_csum_ok ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 csum OK 字段。
参数
cqe
- 要解析的 CQE。

返回值

uint16_t - CQE 的 csum_ok 字段值。

描述

解析 CQE 的 csum OK 字段。

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_err_synd ( flexio_dev_cqe64* cqe )
从 CQE 函数获取错误综合征字段。
参数
cqe
- 要解析的 CQE。

返回值

uint32_t - CQE 的错误综合征字段值。

描述

解析 CQE 的错误综合征字段。

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_opcode ( flexio_dev_cqe64* cqe )
从 CQE 函数获取操作码字段。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - CQE 的操作码字段值。

描述

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_owner ( flexio_dev_cqe64* cqe )
从 CQE 函数获取所有者字段。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - CQE 的所有者字段值。

描述

解析 CQE 的所有者字段。

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_qpn ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 QP 号字段。
参数
cqe
- 要解析的 CQE。

返回值

uint32_t - CQE 的 QP 编号字段值。

描述

解析 CQE 的 QP 编号字段。

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_type ( flexio_dev_cqe64* cqe )
从 CQE 函数获取类型。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - CQE 的类型。 0 - 无内联数据 1 - 数据 32 段中的内联数据 2 - 数据 64 段中的内联数据 3 - 压缩 CQE

描述

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_user_index ( flexio_dev_cqe64* cqe )
从 CQE 函数获取用户索引字段。
参数
cqe
- 要解析的 CQE。

返回值

uint32_t - CQE 的用户索引字段值。

描述

FLEXIO_DEV_ALWAYS_INLINE uint16_t flexio_dev_cqe_get_wqe_counter ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 WQE 计数器字段。
参数
cqe
- 要解析的 CQE。

返回值

uint16_t - CQE 的 WQE 计数器字段值。

描述

解析 CQE 的 WQE 计数器字段。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_db_ctx_arm ( uint32_t qnum, uint32_t emu_ctx_id )
arm 仿真上下文
参数
qnum
- 主机提供的队列编号。
emu_ctx_id
- 仿真上下文 ID,由主机调用 flexio_emu_db_to_cq_ctx_get_id 提供。

返回值

void.

描述

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_db_ctx_force_trigger ( uint32_t cqn, uint32_t emu_ctx_id )
强制触发仿真上下文
参数
cqn
- 主机提供的 CQ 编号。
emu_ctx_id
- 仿真上下文 ID,由主机调用 flexio_emu_db_to_cq_ctx_get_id 提供。

返回值

void.

描述

flexio_dev_status_t flexio_dev_dbr_cq_set_ci ( uint32_t* cq_dbr, uint32_t ci )
为 CQ 函数设置消费者索引值。
参数
cq_dbr
- 指向 CQ 门铃记录地址的指针。
ci
- 要更新的消费者索引值。

返回值

flexio_dev_status_t。

描述

将更新的消费者索引号写入 CQ 的门铃记录

flexio_dev_status_t flexio_dev_dbr_rq_inc_pi ( uint32_t* rq_dbr )
将 RQ 的生产者索引递增 1。
参数
rq_dbr
- 指向 CQ 门铃记录地址的指针。

返回值

flexio_dev_status_t。

描述

通过将相关的 RQ 生产者索引递增 1 来标记要重复使用的 WQE

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_eq_update_ci ( uint32_t ci, uint32_t qnum )
更新 EQ 消费者索引。
参数
ci
- 当前 EQ 消费者索引。
qnum
- 要更新的 EQ 编号。

返回值

void.

描述

在处理 EQE 后更新 EQ 的消费者索引。

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_eqe_get_cqn ( flexio_dev_eqe* eqe )
从 EQE 函数获取 CQ 号字段。
参数
eqe
- 要解析的 EQE。

返回值

uint32_t - EQE 的 CQ 编号字段值。

描述

解析 EQE 的 CQ 编号字段。

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_eqe_get_owner ( flexio_dev_eqe* eqe )
从 EQE 函数获取所有者字段。
参数
eqe
- 要解析的 EQE。

返回值

uint32_t - EQE 的所有者字段值。

描述

解析 EQE 的所有者字段。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_qp_sq_ring_db ( uint16_t pi, uint32_t qnum )
QP/SQ 环门铃函数。
参数
pi
- 当前队列生产者索引。
qnum
- 要更新的队列编号。

返回值

void.

描述

为 QP 或 SQ 响铃门铃,以提醒硬件有待处理的工作。

FLEXIO_DEV_ALWAYS_INLINE void* flexio_dev_rwqe_get_addr ( flexio_dev_wqe_rcv_data_seg* rwqe )
从接收 WQE 函数获取地址字段。
参数
rwqe
- 要解析的 WQE。

返回值

void* - 接收 WQE 的地址字段值。

描述

解析接收 WQE 的地址字段。

flexio_dev_status_t flexio_dev_swqe_seg_atomic_set ( flexio_dev_sqe_seg* swqe, uint64_t swap_or_add_data, uint64_t compare_data )
填写原子发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
swap_or_add_data
- 将要交换进的数据或将要添加的数据。
compare_data
- 将要比较的数据。在 fetch & add 操作中未使用。

返回值

flexio_dev_status_t。

描述

使用原子段信息填充发送 WQE 段(2 个 DWORD)的字段。此段可以服务于比较和交换或 fetch & add 操作。

flexio_dev_status_t flexio_dev_swqe_seg_ctrl_set ( flexio_dev_sqe_seg* swqe, uint32_t sq_pi, uint32_t sq_number, uint32_t ce, flexio_ctrl_seg_t ctrl_seg_type )
填写控制发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
sq_pi
- 发送 WQE 的生产者索引。
sq_number
- 保存 WQE 的 SQ 编号。
ce
- 所需的 CQE 的 CQ 策略。值取自 cq_ce_mode 枚举。
ctrl_seg_type
- 控制段的类型。

返回值

flexio_dev_status_t。

描述

使用控制段信息填充发送 WQE 段(4 个 DWORD)的字段。这应始终是 WQE 的第一个段。注意:对于 RDMA 写入立即 WQE - 用户应在控制段中填写立即数据信息。

flexio_dev_status_t flexio_dev_swqe_seg_eth_set ( flexio_dev_sqe_seg* swqe, uint16_t cs_swp_flags, uint16_t mss, uint16_t inline_hdr_bsz, uint8_t inline_hdrs[2] )
填写以太网发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
cs_swp_flags
- 校验和和交换的标志,请参阅 PRM 第 8.9.4.2 节,发送 WQE 构造摘要。
mss
- 最大段大小 - 对于 LSO WQE - 每个数据包中要传输的 TCP 负载中的字节数。在非 LSO WQE 上必须为 0。
inline_hdr_bsz
- 内联数据包标头的长度(以字节为单位)。这包括 inline_data 段中的标头。
inline_hdrs
- 内联数据包标头的前 2 个字节。

返回值

flexio_dev_status_t。

描述

使用以太网段信息填充发送 WQE 段(4 个 DWORD)的字段。

flexio_dev_status_t flexio_dev_swqe_seg_inline_data_set ( flexio_dev_sqe_seg* swqe, uint32_t data_sz, uint32_t* data )
填写内联数据发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
data_sz
- 数据大小。
data
- 内联数据数组(3 个 DWORD)。

返回值

flexio_dev_status_t。

描述

使用内联数据段信息填充发送 WQE 段(4 个 DWORD)的字段。

flexio_dev_status_t flexio_dev_swqe_seg_mem_ptr_data_set ( flexio_dev_sqe_seg* swqe, uint32_t data_sz, uint32_t lkey, uint64_t data_addr )
填写内存指针数据发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
data_sz
- 数据大小。
lkey
- 数据操作的本地内存访问密钥。
data_addr
- 数据操作的数据地址。

返回值

flexio_dev_status_t。

描述

使用内存指针数据段信息填充发送 WQE 段(4 个 DWORD)的字段。

flexio_dev_status_t flexio_dev_swqe_seg_rdma_set ( flexio_dev_sqe_seg* swqe, uint32_t rkey, uint64_t raddr )
填充 RDMA 发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
rkey
- RDMA 操作的远程内存访问密钥。
raddr
- RDMA 操作的数据地址。

返回值

flexio_dev_status_t。

描述

使用 RDMA 段信息填充发送 WQE 段(4 个 DWORD)的字段。

flexio_dev_status_t flexio_dev_swqe_seg_shared_receive_set ( flexio_dev_sqe_seg* swqe, uint16_t next_wqe_index, uint8_t signature )
填充共享接收队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
next_wqe_index
- 下一个 wqe 索引。
signature
- 签名。

返回值

flexio_dev_status_t。

描述

填充链表共享接收 WQE 段的字段。

flexio_dev_status_t flexio_dev_swqe_seg_transpose_set ( flexio_dev_sqe_seg* swqe, uint8_t element_size, uint8_t num_of_cols, uint8_t num_of_rows )
填充转置发送 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
element_size
- 矩阵元素大小。
num_of_cols
- 矩阵中的列数。
num_of_rows
- 矩阵中的行数。

返回值

flexio_dev_status_t。

描述

使用转置段信息填充发送 WQE 段(4 个 DWORD)的字段。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_zcqe_gen ( uint32_t cqn )
在给定 CQ 上生成一个零 CQE。
参数
cqn
- 要触发的 CQ 编号。触发是通过当前配置的外发邮箱完成的,可以根据 CQ 使用外发邮箱配置 API 更改此设置。

返回值

void.

描述

此函数通过在其上创建零 CQE 来触发给定的 CQ。反过来,这可能会激活连接到 CQ 的任何处理程序,最常见的是另一个线程或 EQ(和 MSIX)。

2.3.3. Flex IO SDK dev 队列类型

[ Flex IO SDK dev ]

用于 DPA 程序的 Flex IO SDK 设备队列类型。定义基本网络元素结构。

struct flexio_dev_cqe64
struct flexio_dev_eqe
struct flexio_dev_mini_cqe64
union flexio_dev_sqe_seg
struct flexio_dev_wqe_atomic_seg
struct flexio_dev_wqe_ctrl_seg
struct flexio_dev_wqe_eth_seg
struct flexio_dev_wqe_inline_data_seg
struct flexio_dev_wqe_inline_send_data_seg
struct flexio_dev_wqe_mem_ptr_send_data_seg
struct flexio_dev_wqe_rcv_data_seg
struct flexio_dev_wqe_rdma_seg
struct flexio_dev_wqe_shared_receive_seg
struct flexio_dev_wqe_transpose_seg
宏定义
#define LOG_SQE_NUM_SEGS 2
枚举
enum flexio_dev_wqe_eth_seg_cs_swp_flags_t
变量
struct flexio_dev_eqe packed
宏定义
#define LOG_SQE_NUM_SEGS 2

SQ 深度 (log_sq_depth) 以 WQEBB 为单位测量,每个 WQEBB 为 64B。我们必须理解 wqe_idx 和 seg_idx 之间的区别。例如,索引为 5 的 wqe 由索引为 20、21、22 和 23 的 4 个段构建。

枚举
enum flexio_dev_wqe_eth_seg_cs_swp_flags_t

Flex IO dev 以太网段 CS / SWP 标志的位掩码

FLEXIO_ETH_SEG_L4CS = 0x8000
FLEXIO_ETH_SEG_L3CS = 0x4000
FLEXIO_ETH_SEG_L4CS_INNER = 0x2000
FLEXIO_ETH_SEG_L3CS_INNER = 0x1000
FLEXIO_ETH_SEG_TRAILER_ALIGN = 0x0200
FLEXIO_ETH_SEG_SWP_OUTER_L4_TYPE = 0x0040
FLEXIO_ETH_SEG_SWP_OUTER_L3_TYPE = 0x0020
FLEXIO_ETH_SEG_SWP_INNER_L4_TYPE = 0x0002
FLEXIO_ETH_SEG_SWP_INNER_L3_TYPE = 0x0001

变量
struct flexio_dev_eqe packed

描述 Flex IO dev EQE。

描述 Flex IO dev CQE。

描述 Flex IO dev 压缩 CQE。

描述 Flex IO dev WQE 内存指针发送数据段。

描述 Flex IO dev WQE 内联发送数据段。

描述 Flex IO dev WQE 接收数据段。

描述 Flex IO dev 共享接收 WQE。

描述 Flex IO dev WQE 控制段。

描述 Flex IO dev WQE 以太网段。

描述 Flex IO dev WQE 内联数据段。

描述 Flex IO dev WQE RDMA 段。

描述 Flex IO dev WQE ATOMIC 段。

描述 Flex IO dev WQE 转置段。

Flex IO SDK 开发错误处理

Flex IO SDK 开发队列访问

Flex IO SDK 开发队列类型

2.3.1. Flex IO SDK dev 错误处理

[ Flex IO SDK dev ]

Flex IO SDK 设备 API,用于 DPA 程序错误处理。

枚举
enum flexio_dev_error_t
函数
FLEXIO_DEV_EXPERIMENTAL __attribute__ ( (__noreturn__) )
退出进程并返回用户(致命)错误代码。
FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_and_rst_errno ( flexio_dev_thread_ctx* dtctx )
获取并重置可恢复(非致命)错误的线程错误标志 (errno)。
FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_errno ( flexio_dev_thread_ctx* dtctx )
获取可恢复(非致命)错误的线程错误标志 (errno)。
FLEXIO_DEV_EXPERIMENTAL void flexio_dev_rst_errno ( flexio_dev_thread_ctx* dtctx )
重置可恢复(非致命)错误的线程错误标志 (errno)。
枚举
enum flexio_dev_error_t

Flex IO dev 错误。

FLEXIO_DEV_ERROR_ILLEGAL_ERR = 0x42
非法用户错误代码

函数
FLEXIO_DEV_EXPERIMENTAL __attribute__ ( (__noreturn__) )
退出进程并返回用户(致命)错误代码。
返回值

- 函数不返回

描述

在 DPA_PROCESS 对象的 dpa_process_status 字段中返回给主机的错误代码定义如下:0: OK 1-63: RTOS 或固件错误 64-127: Flexio-SDK 错误 128-255: 用户定义

FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_and_rst_errno ( flexio_dev_thread_ctx* dtctx )
获取并重置可恢复(非致命)错误的线程错误标志 (errno)。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。

返回值

- 线程错误代码。

描述

FLEXIO_DEV_EXPERIMENTAL uint64_t flexio_dev_get_errno ( flexio_dev_thread_ctx* dtctx )
获取可恢复(非致命)错误的线程错误标志 (errno)。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。

返回值

线程错误代码。

描述

此函数从线程上下文查询 errno 字段。

FLEXIO_DEV_EXPERIMENTAL void flexio_dev_rst_errno ( flexio_dev_thread_ctx* dtctx )
重置可恢复(非致命)错误的线程错误标志 (errno)。
参数
dtctx
- 指向 flexio_dev_thread_ctx 结构的指针。

返回值

- void。

描述

2.3.2. Flex IO SDK dev 队列访问

[ Flex IO SDK dev ]

Flex IO SDK 设备 API,用于 DPA 程序队列访问。提供用于处理网络队列 (WQ/CQ) 的 API。

宏定义
#define FLEXIO_DEV_COMP_CQE_GET_RX_HASH_RESULT ( _x )
从迷你 CQE 获取 RX 哈希结果。
#define flexio_dev_msix_send ( cqn ) flexio_dev_zcqe_gen(cqn)
从给定的 CQ 生成 MSI-X。
枚举
enum flexio_ctrl_seg_t
enum flexio_dev_cc_db_next_act_t
函数
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db ( uint16_t ccq_id, uint32_t rate, uint32_t rtt_req, flexio_dev_cc_db_next_act_t next_act )
环 CC 门铃。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db_high64bit ( uint64_t value )
写入 CC 门铃寄存器的高 64 位。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db_low64bit ( uint64_t value )
写入 CC 门铃寄存器的低 64 位。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_comp_cq_init ( flexio_dev_cqe64* cqe, int  num_cqes, uint8_t validity_iteration_count )
根据压缩功能要求初始化 CQE。
FLEXIO_DEV_ALWAYS_INLINE uint64_t flexio_dev_comp_cqe_get_comp_cqe ( flexio_dev_cqe64* cqe, int  comp_cqe_index )
从 CQE 获取迷你 CQE。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_get_num_comp_cqes ( flexio_dev_cqe64* cqe )
获取 CQE 中迷你 CQE 的数量。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_get_validity_byte ( flexio_dev_cqe64* cqe )
从 CQE 获取有效性迭代计数字节值。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_is_comp_cqe_array ( flexio_dev_cqe64* cqe )
如果 CQE 是迷你 CQE 数组,则返回 true
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cq_arm ( uint32_t ci, uint32_t qnum )
Arm CQ 函数。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_byte_cnt ( flexio_dev_cqe64* cqe )
从 CQE 函数获取字节计数字段。
FLEXIO_DEV_ALWAYS_INLINE uint16_t flexio_dev_cqe_get_csum_ok ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 csum OK 字段。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_err_synd ( flexio_dev_cqe64* cqe )
从 CQE 函数获取错误综合征字段。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_opcode ( flexio_dev_cqe64* cqe )
从 CQE 函数获取操作码字段。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_owner ( flexio_dev_cqe64* cqe )
从 CQE 函数获取所有者字段。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_qpn ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 QP 号字段。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_type ( flexio_dev_cqe64* cqe )
从 CQE 函数获取类型。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_user_index ( flexio_dev_cqe64* cqe )
从 CQE 函数获取用户索引字段。
FLEXIO_DEV_ALWAYS_INLINE uint16_t flexio_dev_cqe_get_wqe_counter ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 WQE 计数器字段。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_db_ctx_arm ( uint32_t qnum, uint32_t emu_ctx_id )
arm 仿真上下文
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_db_ctx_force_trigger ( uint32_t cqn, uint32_t emu_ctx_id )
强制触发仿真上下文
flexio_dev_status_t flexio_dev_dbr_cq_set_ci ( uint32_t* cq_dbr, uint32_t ci )
为 CQ 函数设置消费者索引值。
flexio_dev_status_t flexio_dev_dbr_rq_inc_pi ( uint32_t* rq_dbr )
将 RQ 的生产者索引递增 1。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_eq_update_ci ( uint32_t ci, uint32_t qnum )
更新 EQ 消费者索引。
FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_eqe_get_cqn ( flexio_dev_eqe* eqe )
从 EQE 函数获取 CQ 号字段。
FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_eqe_get_owner ( flexio_dev_eqe* eqe )
从 EQE 函数获取所有者字段。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_qp_sq_ring_db ( uint16_t pi, uint32_t qnum )
QP/SQ 环门铃函数。
FLEXIO_DEV_ALWAYS_INLINE void* flexio_dev_rwqe_get_addr ( flexio_dev_wqe_rcv_data_seg* rwqe )
从接收 WQE 函数获取地址字段。
flexio_dev_status_t flexio_dev_swqe_seg_atomic_set ( flexio_dev_sqe_seg* swqe, uint64_t swap_or_add_data, uint64_t compare_data )
填写原子发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_ctrl_set ( flexio_dev_sqe_seg* swqe, uint32_t sq_pi, uint32_t sq_number, uint32_t ce, flexio_ctrl_seg_t ctrl_seg_type )
填写控制发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_eth_set ( flexio_dev_sqe_seg* swqe, uint16_t cs_swp_flags, uint16_t mss, uint16_t inline_hdr_bsz, uint8_t inline_hdrs[2] )
填写以太网发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_inline_data_set ( flexio_dev_sqe_seg* swqe, uint32_t data_sz, uint32_t* data )
填写内联数据发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_mem_ptr_data_set ( flexio_dev_sqe_seg* swqe, uint32_t data_sz, uint32_t lkey, uint64_t data_addr )
填写内存指针数据发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_rdma_set ( flexio_dev_sqe_seg* swqe, uint32_t rkey, uint64_t raddr )
填充 RDMA 发送队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_shared_receive_set ( flexio_dev_sqe_seg* swqe, uint16_t next_wqe_index, uint8_t signature )
填充共享接收队列 wqe 段函数。
flexio_dev_status_t flexio_dev_swqe_seg_transpose_set ( flexio_dev_sqe_seg* swqe, uint8_t element_size, uint8_t num_of_cols, uint8_t num_of_rows )
填充转置发送 wqe 段函数。
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_zcqe_gen ( uint32_t cqn )
在给定 CQ 上生成一个零 CQE。
宏定义
#define FLEXIO_DEV_COMP_CQE_GET_RX_HASH_RESULT ( _x )

be32_to_cpu((uint32_t)((_x) & 0xFFFFFFFFULL))

参数
_x
- 迷你 CQE 值。

#define flexio_dev_msix_send ( cqn ) flexio_dev_zcqe_gen(cqn)

此函数触发连接到给定 CQ 的 MSI-X 中断。

参数
cqn
- 要触发的 CQ 编号。触发是通过当前配置的外发邮箱完成的,可以根据 CQ 使用外发邮箱配置 API 更改此设置。

枚举
enum flexio_ctrl_seg_t

Flex IO dev WQE 控制段类型。

FLEXIO_CTRL_SEG_SEND_EN = 0
FLEXIO_CTRL_SEG_SEND_RC = 1
FLEXIO_CTRL_SEG_LDMA = 2
FLEXIO_CTRL_SEG_RDMA_WRITE = 3
FLEXIO_CTRL_SEG_RDMA_READ = 4
FLEXIO_CTRL_SEG_ATOMIC_COMPARE_AND_SWAP = 5
FLEXIO_CTRL_SEG_LSO = 6
FLEXIO_CTRL_SEG_NOP = 7
FLEXIO_CTRL_SEG_RDMA_WRITE_IMM = 8
FLEXIO_CTRL_SEG_TRANSPOSE = 9

enum flexio_dev_cc_db_next_act_t

Flex IO dev 拥塞控制下一步操作类型。

CC_DB_NEXT_ACT_SINGLE = 0x0
CC_DB_NEXT_ACT_MULTIPLE = 0x1
CC_DB_NEXT_ACT_FW = 0x2

函数
FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db ( uint16_t ccq_id, uint32_t rate, uint32_t rtt_req, flexio_dev_cc_db_next_act_t next_act )
环 CC 门铃。
参数
ccq_id
- 要更新的 CC 队列 ID。
rate
- 要设置的速率。
rtt_req
- 要设置的 RTT 测量请求。
next_act
- 要设置的下一步操作。

返回值

void.

描述

此函数为请求的 CC 队列响铃 CC 门铃,这将设置请求的速率、RTT 请求和下一步操作。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db_high64bit ( uint64_t value )
写入 CC 门铃寄存器的高 64 位。
参数
value
- 要写入的 64 位值。

返回值

void.

描述

此函数写入 CC 门铃寄存器的高 64 位。寄存器值应由调用者根据寄存器布局准备。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cc_ring_db_low64bit ( uint64_t value )
写入 CC 门铃寄存器的低 64 位。
参数
value
- 要写入的 64 位值。

返回值

void.

描述

此函数写入 CC 门铃寄存器的低 64 位。寄存器值应由调用者根据寄存器布局准备。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_comp_cq_init ( flexio_dev_cqe64* cqe, int  num_cqes, uint8_t validity_iteration_count )
根据压缩功能要求初始化 CQE。
参数
cqe
- 要初始化的范围内的第一个 CQE。
num_cqes
- 范围内的 CQE 数量。
validity_iteration_count
- 要初始化的 validity_iteration_count 字段值。

返回值

void.

描述

FLEXIO_DEV_ALWAYS_INLINE uint64_t flexio_dev_comp_cqe_get_comp_cqe ( flexio_dev_cqe64* cqe, int  comp_cqe_index )
从 CQE 获取迷你 CQE。
参数
cqe
- 要解析的 CQE。
comp_cqe_index
- 要从数组返回的迷你 CQE 的索引。

返回值

uint64_t - 迷你 CQE 值。

描述

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_get_num_comp_cqes ( flexio_dev_cqe64* cqe )
获取 CQE 中迷你 CQE 的数量。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - 数组中迷你 CQE 的数量。

描述

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_get_validity_byte ( flexio_dev_cqe64* cqe )
从 CQE 获取有效性迭代计数字节值。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - 有效性字节值。

描述

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_comp_cqe_is_comp_cqe_array ( flexio_dev_cqe64* cqe )
如果 CQE 是迷你 CQE 数组,则返回 true
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - 迷你 cqe 数组为真。

描述

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_cq_arm ( uint32_t ci, uint32_t qnum )
Arm CQ 函数。
参数
ci
- 当前 CQ 消费者索引。
qnum
- 要 arm 的 CQ 编号。

返回值

void.

描述

将 CQ 移动到“armed”状态。这意味着为此 CQ 创建的下一个 CQE 将导致相关 EQ 上的 EQE。

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_byte_cnt ( flexio_dev_cqe64* cqe )
从 CQE 函数获取字节计数字段。
参数
cqe
- 要解析的 CQE。

返回值

uint32_t - CQE 的字节计数字段值。

描述

解析 CQE 的字节计数字段。

FLEXIO_DEV_ALWAYS_INLINE uint16_t flexio_dev_cqe_get_csum_ok ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 csum OK 字段。
参数
cqe
- 要解析的 CQE。

返回值

uint16_t - CQE 的 csum_ok 字段值。

描述

解析 CQE 的 csum OK 字段。

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_err_synd ( flexio_dev_cqe64* cqe )
从 CQE 函数获取错误综合征字段。
参数
cqe
- 要解析的 CQE。

返回值

uint32_t - CQE 的错误综合征字段值。

描述

解析 CQE 的错误综合征字段。

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_opcode ( flexio_dev_cqe64* cqe )
从 CQE 函数获取操作码字段。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - CQE 的操作码字段值。

描述

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_owner ( flexio_dev_cqe64* cqe )
从 CQE 函数获取所有者字段。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - CQE 的所有者字段值。

描述

解析 CQE 的所有者字段。

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_qpn ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 QP 号字段。
参数
cqe
- 要解析的 CQE。

返回值

uint32_t - CQE 的 QP 编号字段值。

描述

解析 CQE 的 QP 编号字段。

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_cqe_get_type ( flexio_dev_cqe64* cqe )
从 CQE 函数获取类型。
参数
cqe
- 要解析的 CQE。

返回值

uint8_t - CQE 的类型。 0 - 无内联数据 1 - 数据 32 段中的内联数据 2 - 数据 64 段中的内联数据 3 - 压缩 CQE

描述

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_cqe_get_user_index ( flexio_dev_cqe64* cqe )
从 CQE 函数获取用户索引字段。
参数
cqe
- 要解析的 CQE。

返回值

uint32_t - CQE 的用户索引字段值。

描述

FLEXIO_DEV_ALWAYS_INLINE uint16_t flexio_dev_cqe_get_wqe_counter ( flexio_dev_cqe64* cqe )
从 CQE 函数获取 WQE 计数器字段。
参数
cqe
- 要解析的 CQE。

返回值

uint16_t - CQE 的 WQE 计数器字段值。

描述

解析 CQE 的 WQE 计数器字段。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_db_ctx_arm ( uint32_t qnum, uint32_t emu_ctx_id )
arm 仿真上下文
参数
qnum
- 主机提供的队列编号。
emu_ctx_id
- 仿真上下文 ID,由主机调用 flexio_emu_db_to_cq_ctx_get_id 提供。

返回值

void.

描述

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_db_ctx_force_trigger ( uint32_t cqn, uint32_t emu_ctx_id )
强制触发仿真上下文
参数
cqn
- 主机提供的 CQ 编号。
emu_ctx_id
- 仿真上下文 ID,由主机调用 flexio_emu_db_to_cq_ctx_get_id 提供。

返回值

void.

描述

flexio_dev_status_t flexio_dev_dbr_cq_set_ci ( uint32_t* cq_dbr, uint32_t ci )
为 CQ 函数设置消费者索引值。
参数
cq_dbr
- 指向 CQ 门铃记录地址的指针。
ci
- 要更新的消费者索引值。

返回值

flexio_dev_status_t。

描述

将更新的消费者索引号写入 CQ 的门铃记录

flexio_dev_status_t flexio_dev_dbr_rq_inc_pi ( uint32_t* rq_dbr )
将 RQ 的生产者索引递增 1。
参数
rq_dbr
- 指向 CQ 门铃记录地址的指针。

返回值

flexio_dev_status_t。

描述

通过将相关的 RQ 生产者索引递增 1 来标记要重复使用的 WQE

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_eq_update_ci ( uint32_t ci, uint32_t qnum )
更新 EQ 消费者索引。
参数
ci
- 当前 EQ 消费者索引。
qnum
- 要更新的 EQ 编号。

返回值

void.

描述

在处理 EQE 后更新 EQ 的消费者索引。

FLEXIO_DEV_ALWAYS_INLINE uint32_t flexio_dev_eqe_get_cqn ( flexio_dev_eqe* eqe )
从 EQE 函数获取 CQ 号字段。
参数
eqe
- 要解析的 EQE。

返回值

uint32_t - EQE 的 CQ 编号字段值。

描述

解析 EQE 的 CQ 编号字段。

FLEXIO_DEV_ALWAYS_INLINE uint8_t flexio_dev_eqe_get_owner ( flexio_dev_eqe* eqe )
从 EQE 函数获取所有者字段。
参数
eqe
- 要解析的 EQE。

返回值

uint32_t - EQE 的所有者字段值。

描述

解析 EQE 的所有者字段。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_qp_sq_ring_db ( uint16_t pi, uint32_t qnum )
QP/SQ 环门铃函数。
参数
pi
- 当前队列生产者索引。
qnum
- 要更新的队列编号。

返回值

void.

描述

为 QP 或 SQ 响铃门铃,以提醒硬件有待处理的工作。

FLEXIO_DEV_ALWAYS_INLINE void* flexio_dev_rwqe_get_addr ( flexio_dev_wqe_rcv_data_seg* rwqe )
从接收 WQE 函数获取地址字段。
参数
rwqe
- 要解析的 WQE。

返回值

void* - 接收 WQE 的地址字段值。

描述

解析接收 WQE 的地址字段。

flexio_dev_status_t flexio_dev_swqe_seg_atomic_set ( flexio_dev_sqe_seg* swqe, uint64_t swap_or_add_data, uint64_t compare_data )
填写原子发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
swap_or_add_data
- 将要交换进的数据或将要添加的数据。
compare_data
- 将要比较的数据。在 fetch & add 操作中未使用。

返回值

flexio_dev_status_t。

描述

使用原子段信息填充发送 WQE 段(2 个 DWORD)的字段。此段可以服务于比较和交换或 fetch & add 操作。

flexio_dev_status_t flexio_dev_swqe_seg_ctrl_set ( flexio_dev_sqe_seg* swqe, uint32_t sq_pi, uint32_t sq_number, uint32_t ce, flexio_ctrl_seg_t ctrl_seg_type )
填写控制发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
sq_pi
- 发送 WQE 的生产者索引。
sq_number
- 保存 WQE 的 SQ 编号。
ce
- 所需的 CQE 的 CQ 策略。值取自 cq_ce_mode 枚举。
ctrl_seg_type
- 控制段的类型。

返回值

flexio_dev_status_t。

描述

使用控制段信息填充发送 WQE 段(4 个 DWORD)的字段。这应始终是 WQE 的第一个段。注意:对于 RDMA 写入立即 WQE - 用户应在控制段中填写立即数据信息。

flexio_dev_status_t flexio_dev_swqe_seg_eth_set ( flexio_dev_sqe_seg* swqe, uint16_t cs_swp_flags, uint16_t mss, uint16_t inline_hdr_bsz, uint8_t inline_hdrs[2] )
填写以太网发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
cs_swp_flags
- 校验和和交换的标志,请参阅 PRM 第 8.9.4.2 节,发送 WQE 构造摘要。
mss
- 最大段大小 - 对于 LSO WQE - 每个数据包中要传输的 TCP 负载中的字节数。在非 LSO WQE 上必须为 0。
inline_hdr_bsz
- 内联数据包标头的长度(以字节为单位)。这包括 inline_data 段中的标头。
inline_hdrs
- 内联数据包标头的前 2 个字节。

返回值

flexio_dev_status_t。

描述

使用以太网段信息填充发送 WQE 段(4 个 DWORD)的字段。

flexio_dev_status_t flexio_dev_swqe_seg_inline_data_set ( flexio_dev_sqe_seg* swqe, uint32_t data_sz, uint32_t* data )
填写内联数据发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
data_sz
- 数据大小。
data
- 内联数据数组(3 个 DWORD)。

返回值

flexio_dev_status_t。

描述

使用内联数据段信息填充发送 WQE 段(4 个 DWORD)的字段。

flexio_dev_status_t flexio_dev_swqe_seg_mem_ptr_data_set ( flexio_dev_sqe_seg* swqe, uint32_t data_sz, uint32_t lkey, uint64_t data_addr )
填写内存指针数据发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
data_sz
- 数据大小。
lkey
- 数据操作的本地内存访问密钥。
data_addr
- 数据操作的数据地址。

返回值

flexio_dev_status_t。

描述

使用内存指针数据段信息填充发送 WQE 段(4 个 DWORD)的字段。

flexio_dev_status_t flexio_dev_swqe_seg_rdma_set ( flexio_dev_sqe_seg* swqe, uint32_t rkey, uint64_t raddr )
填充 RDMA 发送队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
rkey
- RDMA 操作的远程内存访问密钥。
raddr
- RDMA 操作的数据地址。

返回值

flexio_dev_status_t。

描述

使用 RDMA 段信息填充发送 WQE 段(4 个 DWORD)的字段。

flexio_dev_status_t flexio_dev_swqe_seg_shared_receive_set ( flexio_dev_sqe_seg* swqe, uint16_t next_wqe_index, uint8_t signature )
填充共享接收队列 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
next_wqe_index
- 下一个 wqe 索引。
signature
- 签名。

返回值

flexio_dev_status_t。

描述

填充链表共享接收 WQE 段的字段。

flexio_dev_status_t flexio_dev_swqe_seg_transpose_set ( flexio_dev_sqe_seg* swqe, uint8_t element_size, uint8_t num_of_cols, uint8_t num_of_rows )
填充转置发送 wqe 段函数。
参数
swqe
- 要填充的发送 WQE 段。
element_size
- 矩阵元素大小。
num_of_cols
- 矩阵中的列数。
num_of_rows
- 矩阵中的行数。

返回值

flexio_dev_status_t。

描述

使用转置段信息填充发送 WQE 段(4 个 DWORD)的字段。

FLEXIO_DEV_ALWAYS_INLINE void flexio_dev_zcqe_gen ( uint32_t cqn )
在给定 CQ 上生成一个零 CQE。
参数
cqn
- 要触发的 CQ 编号。触发是通过当前配置的外发邮箱完成的,可以根据 CQ 使用外发邮箱配置 API 更改此设置。

返回值

void.

描述

此函数通过在其上创建零 CQE 来触发给定的 CQ。反过来,这可能会激活连接到 CQ 的任何处理程序,最常见的是另一个线程或 EQ(和 MSIX)。

2.3.3. Flex IO SDK dev 队列类型

[ Flex IO SDK dev ]

用于 DPA 程序的 Flex IO SDK 设备队列类型。定义基本网络元素结构。

struct flexio_dev_cqe64
struct flexio_dev_eqe
struct flexio_dev_mini_cqe64
union flexio_dev_sqe_seg
struct flexio_dev_wqe_atomic_seg
struct flexio_dev_wqe_ctrl_seg
struct flexio_dev_wqe_eth_seg
struct flexio_dev_wqe_inline_data_seg
struct flexio_dev_wqe_inline_send_data_seg
struct flexio_dev_wqe_mem_ptr_send_data_seg
struct flexio_dev_wqe_rcv_data_seg
struct flexio_dev_wqe_rdma_seg
struct flexio_dev_wqe_shared_receive_seg
struct flexio_dev_wqe_transpose_seg
宏定义
#define LOG_SQE_NUM_SEGS 2
枚举
enum flexio_dev_wqe_eth_seg_cs_swp_flags_t
变量
struct flexio_dev_eqe packed
宏定义
#define LOG_SQE_NUM_SEGS 2

SQ 深度 (log_sq_depth) 以 WQEBB 为单位测量,每个 WQEBB 为 64B。我们必须理解 wqe_idx 和 seg_idx 之间的区别。例如,索引为 5 的 wqe 由索引为 20、21、22 和 23 的 4 个段构建。

枚举
enum flexio_dev_wqe_eth_seg_cs_swp_flags_t

Flex IO dev 以太网段 CS / SWP 标志的位掩码

FLEXIO_ETH_SEG_L4CS = 0x8000
FLEXIO_ETH_SEG_L3CS = 0x4000
FLEXIO_ETH_SEG_L4CS_INNER = 0x2000
FLEXIO_ETH_SEG_L3CS_INNER = 0x1000
FLEXIO_ETH_SEG_TRAILER_ALIGN = 0x0200
FLEXIO_ETH_SEG_SWP_OUTER_L4_TYPE = 0x0040
FLEXIO_ETH_SEG_SWP_OUTER_L3_TYPE = 0x0020
FLEXIO_ETH_SEG_SWP_INNER_L4_TYPE = 0x0002
FLEXIO_ETH_SEG_SWP_INNER_L3_TYPE = 0x0001

变量
struct flexio_dev_eqe packed

描述 Flex IO dev EQE。

描述 Flex IO dev CQE。

描述 Flex IO dev 压缩 CQE。

描述 Flex IO dev WQE 内存指针发送数据段。

描述 Flex IO dev WQE 内联发送数据段。

描述 Flex IO dev WQE 接收数据段。

描述 Flex IO dev 共享接收 WQE。

描述 Flex IO dev WQE 控制段。

描述 Flex IO dev WQE 以太网段。

描述 Flex IO dev WQE 内联数据段。

描述 Flex IO dev WQE RDMA 段。

描述 Flex IO dev WQE ATOMIC 段。

描述 Flex IO dev WQE 转置段。

复制
已复制!
            

‎ #include <stdio.h>

标准 IO 功能介绍

此文件声明了在以下位置实现的标准 IO 功能:flexio-libc。由于底层硬件的性质,仅实现了标准 IO 的有限子集。没有可用的实际文件实现,因此只能执行设备 IO。由于没有操作系统,应用程序需要提供有关其设备的足够详细信息,以便标准 IO 功能可以使用它们。

由于空间限制,某些功能根本没有实现(例如某些printf转换已被省略)。然而,应该警告此实现的潜在用户:printfscanf函数系列,尽管通常与著名的“Hello, world!”程序等看似简单的事物相关联,但实际上相当复杂,这导致它们的包含会占用相当多的代码空间。此外,由于在运行时解释格式字符串的性质,它们速度不快。在可能的情况下,求助于 flexio-libc 提供的(有时是非标准的)预定转换功能通常在速度和代码大小方面花费更少。

代码大小与功能集的可调选项

为了允许程序员在代码大小与功能之间进行权衡,可以使用链接器选项以不同的风格选择 vfprintf() 函数,它是 printf 系列的核心。有关详细说明,请参阅 vfprintf() 的文档。这同样适用于 vfscanf() 和scanf函数系列。

所选 API 的概述

标准流stdin, stdoutstderr被提供,但与 C 标准相反,由于 flexio-libc 不了解适用的设备,因此这些流在应用程序启动时尚未预先初始化。此外,由于 flexio-libc 没有“文件”的概念,因此没有函数fopen()可以用于将流与某些设备关联。(请参阅 注释 1。)相反,提供了函数fdevopen()将流与设备关联,其中设备需要提供一个发送字符、接收字符或两者的函数。 flexio-libc 内部的“文本”流和“二进制”流之间没有区别。字符\n按字面意思发送到设备的put()函数。如果设备需要发送回车符 (\r) 字符,则其put()例程必须实现此功能(请参阅 注释 2)。

作为 fdevopen() 的替代方法,宏 fdev_setup_stream() 可以用于设置用户提供的 FILE 结构。

应该注意的是,将换行符自动转换为回车符 - 换行符序列会破坏二进制传输。如果需要二进制传输,则不应执行自动转换,而是任何旨在发出 CR-LF 序列的字符串都必须使用"\r\n"显式地。

stdin、stdout 和 stderr 是未定义的全局 FILE 指针。如果您想使用它,您的应用程序必须定义这些变量并初始化它们。它们被声明为“const”,因此如果您在启动后不需要修改它,您可以将它们放在 ROM 中。 FILE 不能放在 ROM 中,因为它们的值在运行时会被修改。

在没有 malloc() 的情况下运行 stdio

默认情况下,fdevopen() 需要 malloc()。由于这在微控制器的受限环境中通常是不希望的,因此提供了一个替代选项,可以在完全没有 malloc() 的情况下运行。

宏 fdev_setup_stream() 用于准备用户提供的 FILE 缓冲区以与 stdio 一起操作。

示例

复制
已复制!
            

‎ #include <stdio.h> static int uart_putchar(char c, FILE *stream); static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); static int uart_putchar(char c, FILE *stream) { if (c == '\n') uart_putchar('\r', stream); loop_until_bit_is_set(UCSRA, UDRE); UDR = c; return 0; } int main(void) { init_uart(); stdout = &mystdout; printf("Hello, world!\n"); return 0; }

此示例使用初始化器形式 FDEV_SETUP_STREAM() 而不是类似函数的 fdev_setup_stream(),因此所有数据初始化都在 C 启动期间发生。

如果不再需要以这种方式初始化的流,则可以通过首先调用宏 fdev_close(),然后销毁对象本身来销毁它们。不应为这些流发出 fclose() 调用。虽然调用 fclose() 本身是无害的,但它会导致对 free() 的未定义引用,从而导致链接器将 malloc 模块链接到应用程序中。

注释

注释 1

可能已经可以实现与fopen()兼容的设备抽象,但这需要解析字符串,并从该字符串或应用程序需要提供的附加表中获取所有必要的信息,因此未采用此方法。

注释 2

这基本上遵循 Unix 方法:如果终端等设备需要特殊处理,则这属于终端设备驱动程序提供此功能的领域。因此,一个简单的函数适合作为put()对于fdevopen()与 UART 接口通信的函数可能如下所示

复制
已复制!
            

‎ int uart_putchar(char c, FILE *stream) { if (c == '\n') uart_putchar('\r', stream); loop_until_bit_is_set(UCSRA, UDRE); UDR = c; return 0; }

注释 3

选择此实现是因为维护别名的成本远低于维护每个流的完整副本的成本。然而,提供一个提供完整标准流集的实现被认为是很有用的。不仅如此,写作printf()而不是fprintf(mystream, ...)节省了打字工作,但由于编译器需要求助于在堆栈上传递可变参数函数的所有参数(而不是在寄存器中传递采用固定数量参数的函数的参数),因此通过暗示传递一个参数的能力更少stdin或 stdout 也将节省一些执行时间。

宏定义

#define EOF (-1)
#define PICOLIBC_STDIO_GLOBALS
#define _FDEV_EOF (-2)
#define _FDEV_ERR (-1)
#define _FDEV_SETUP_READ __SRD
#define _FDEV_SETUP_RW (__SRD|__SWR)
#define _FDEV_SETUP_WRITE __SWR
#define __FORMAT_ATTRIBUTE__ ( __a, __s, __f )
#define putc ( __c, __stream ) fputc(__c, __stream)
#define putchar ( __c ) fputc(__c, stdout)

函数

int int int int int int int asprintf ( char** strp, const char* fmt, ... )
void clearerr ( FILE* __stream )
int  feof ( FILE* __stream )
int  ferror ( FILE* __stream )
int  fflush ( FILE* stream )
int int int int int int int int int fprintf ( FILE* __stream, const char* __fmt, ... )
int int int int int int int int int int fputs ( const char* __str, FILE* __stream )
int  printf ( const char* __fmt, ... )
int  puts ( const char* __str )
int int int int snprintf ( char* __s, size_t __n, const char* __fmt, ... )
int int int sprintf ( char* __s, const char* __fmt, ... )
int int int int int int int int vasprintf ( char** strp, const char* fmt, va_list ap )
int int vprintf ( const char* __fmt, va_list __ap )
int int int int int int vsnprintf ( char* __s, size_t __n, const char* __fmt, va_list ap )
int int int int int vsprintf ( char* __s, const char* __fmt, va_list ap )

变量

FILE *const  stderr
FILE *const  stdin
FILE * stdout

宏定义

#define EOF (-1)

EOF声明错误情况下各种标准 IO 函数返回的值。由于 AVR 平台(当前)不包含实际文件的抽象,因此其作为“文件结尾”的起源在此处有些毫无意义。

#define PICOLIBC_STDIO_GLOBALS

当 stdin/stdout/stderr 是全局变量时,定义此符号。当未定义时,将使用旧的 __iob 数组,其中包含指针。

#define _FDEV_EOF (-2)

设备读取期间文件结束条件的返回代码。

用于 fdevopen() 的 get 函数中。

#define _FDEV_ERR (-1)

设备读取期间错误条件的返回代码。

用于 fdevopen() 的 get 函数中。

#define _FDEV_SETUP_READ __SRD

带有读取意图的 fdev_setup_stream()

#define _FDEV_SETUP_RW (__SRD|__SWR)

带有读/写意图的 fdev_setup_stream()

#define _FDEV_SETUP_WRITE __SWR

带有写入意图的 fdev_setup_stream()

#define __FORMAT_ATTRIBUTE__ ( __a, __s, __f )

vfprintfprintf系列函数的核心工具。它根据stream中传递的格式字符串fmt输出值。要打印的实际值作为可变参数列表ap.

vfprintf传递。返回写入到stream的字符数,或EOF在发生错误时返回负值。目前,只有在stream未以写入意图打开时才会发生这种情况。

格式字符串由零个或多个指令组成:普通字符(非%%),这些字符不变地复制到输出流;以及转换规范,每个转换规范都会获取零个或多个后续参数。每个转换规范都以%%%字符开头。参数必须与转换说明符正确对应(在类型提升之后)。在

  • 之后,按顺序出现以下内容:
    • ##:值应转换为“备用形式”。对于 c、d、i、s 和 u 转换,此选项无效。对于 o 转换,数字的精度会增加,以强制输出字符串的第一个字符为零(除非使用显式精度零打印零值)。对于 x 和 X 转换,非零结果会在其前面加上字符串“0x”(对于 X 转换,则为“0X”)。

    • 00(零):零填充。对于所有转换,转换后的值在左侧用零而不是空格填充。如果数字转换(d、i、o、u、i、x 和 X)给定了精度,则忽略 0 标志。

    • --:负字段宽度标志;转换后的值将在字段边界上左对齐。转换后的值在右侧用空格而不是在左侧用空格或零填充。如果同时给出 - 和 0,则 - 覆盖 0。

    • ' '(空格):对于有符号转换(d 或 i)产生的正数,应在前面留一个空格。

    • ++:必须始终在有符号转换产生的数字之前放置符号。如果同时使用 + 和空格,则 + 覆盖空格。

  • 可选的十进制数字字符串,指定最小字段宽度。如果转换后的值的字符数少于字段宽度,则会在左侧(或右侧,如果已给出左对齐标志)用空格填充,以填充字段宽度。

  • 可选的精度,形式为句点 . 后跟一个可选的数字字符串。如果省略数字字符串,则精度视为零。这给出了 d、i、o、u、x 和 X 转换的最小位数,或s转换的字符串要打印的最大字符数。

  • 可选的lh长度修饰符,用于指定 d、i、o、u、x 或 X 转换的参数是“long int”而不是int。这里h被忽略,因为“short int”等同于int.

  • int。指定要应用的转换类型的字符。

转换说明符及其含义是:

  • diouxXint(或适当的变体)参数转换为有符号十进制(d 和 i)、无符号八进制(o)、无符号十进制(u)或无符号十六进制(x 和 X)表示法。字母“abcdef”用于 x 转换;字母“ABCDEF”用于 X 转换。精度(如果有)给出必须出现的最小位数;如果转换后的值需要的位数较少,则在左侧用零填充。

  • pvoid *参数被视为无符号整数,并以类似于%#x命令的方式进行转换。c

  • 参数转换为void *int“unsigned char”,并将结果字符写入。s

  • svoid *“char *”参数应为指向字符类型数组(指向字符串的指针)的指针。从数组中写入字符,直到(但不包括)终止 NUL 字符;如果指定了精度,则写入的字符数不超过指定的数量。如果给出了精度,则不需要存在空字符;如果未指定精度,或精度大于数组的大小,则数组必须包含终止 NUL 字符。

  • %%%写入一个 % 字符。不转换任何参数。完整的转换规范是“%%”。

  • eEdouble 参数被舍入并以格式“[-]d.ddde±dd”转换,其中小数点字符前有一位数字,小数点后的位数等于精度;如果精度缺失,则默认为 6;如果精度为零,则不出现小数点字符。E 转换使用字母'E'(而不是'e')来引入指数。指数始终包含两位数字;如果值为零,则指数为 00。

  • fFdouble 参数被舍入并以十进制表示法转换为格式“[-]ddd.ddd”,其中小数点字符后的位数等于精度规范。如果精度缺失,则默认为 6;如果精度显式为零,则不出现小数点字符。如果出现小数点,则小数点前至少出现一位数字。

  • gGdouble 参数以样式fe(或F对于G转换)。精度指定有效数字的位数。如果精度缺失,则给出 6 位数字;如果精度为零,则视为 1。如果转换后的指数小于 -4 或大于或等于精度,则使用样式。尾随零从结果的小数部分中删除;只有当小数点后至少跟一位数字时,才会出现小数点。

  • S类似于s格式,不同之处在于指针应指向程序存储器 (ROM) 字符串而不是 RAM 字符串。

在任何情况下,不存在或小的字段宽度都不会导致数字字段的截断;如果转换结果比字段宽度宽,则字段会扩展以包含转换结果。

由于所有提及的功能的完整实现变得相当大,因此可以使用链接器选项选择 vfprintf() 的三种不同风格。默认的 vfprintf() 实现了所有提及的功能,除了浮点转换。vfprintf() 的最小化版本可用,它只实现了非常基本的整数和字符串转换功能,但只能指定#附加选项,使用转换标志(这些标志从格式规范中正确解析,但随后被简单地忽略)。可以使用以下编译器选项请求此版本:

复制
已复制!
            

‎ -Wl,-u,vfprintf -lprintf_min

限制

  • 指定的宽度和精度最大为 255。

注释

  • flexio-libc 中不支持浮点数

  • void *hh长度修饰符被忽略(char参数被提升为intint)。更准确地说,此实现不检查h符号的数量。

  • 但是ll长度修饰符将中止输出,因为此实现不处理long longlong long参数。

  • 可变宽度或精度字段(星号*符号)未实现,并将中止输出。

#define putc ( __c, __stream ) fputc(__c, __stream)

putc曾经是一个“快速”宏实现,其功能与 fputc() 相同。出于空间限制,在flexio-libc中,它只是fputc.

#define putchar ( __c ) fputc(__c, stdout)

putchar将字符参数转换为发送到stdout.

函数

int int int int int int int asprintf ( char** strp, const char* fmt, ... )

描述

的变体,将格式化的字符发送到分配的字符串printf()*strp void clearerr ( FILE* __stream ).

清除

描述

的错误和文件结束标志。stream.

int feof ( FILE* __stream )

描述

测试stream的文件结束标志。此标志只能通过调用 clearerr() 清除。

int ferror ( FILE* __stream )

描述

测试stream的文件结束标志。此标志只能通过调用 clearerr() 清除。

int fflush ( FILE* stream )

描述

刷新stream.

。如果流提供了刷新钩子,则使用它。否则返回 0。

int int int int int int int int int fprintf ( FILE* __stream, const char* __fmt, ... )

描述

函数fprintf执行到stream的格式化输出。请参阅vfprintf()了解详细信息。

int int int int int int int int int int fputs ( const char* __str, FILE* __stream )

描述

str指向的字符串写入到流stream.

。成功时返回 0,错误时返回 EOF。

int printf ( const char* __fmt, ... )

描述

函数printf执行到流stdout的格式化输出。请参阅vfprintf()了解详细信息。

int puts ( const char* __str )

描述

strstdout.

stdout

描述

int int int int snprintf ( char* __s, size_t __n, const char* __fmt, ... )类似于,但不假设s具有无限大小,最多n个字符(包括尾随 NUL 字符)将被转换为s.

。返回如果空间足够,将写入到s的字符数。

int int int sprintf ( char* __s, const char* __fmt, ... )

描述

的变体,将格式化的字符发送到分配的字符串printf()的变体,将格式化的字符发送到字符串s.

int int int int int int int int vasprintf ( char** strp, const char* fmt, va_list ap )

描述

的变体,将格式化的字符发送到分配的字符串vprintf()*strp void clearerr ( FILE* __stream ).

int int vprintf ( const char* __fmt, va_list __ap )

描述

函数vprintf执行到流stdout,采用与 vfprintf() 中相同的可变参数列表。

有关详细信息,请参阅 vfprintf()。

int int int int int int vsnprintf ( char* __s, size_t __n, const char* __fmt, va_list ap )

描述

int int int int snprintf ( char* __s, size_t __n, const char* __fmt, ... )vsprintf(),但不假设s具有无限大小,最多n个字符(包括尾随 NUL 字符)将被转换为s.

。返回如果空间足够,将写入到s的字符数。

int int int int int vsprintf ( char* __s, const char* __fmt, va_list ap )

描述

int int int int snprintf ( char* __s, size_t __n, const char* __fmt, ... )类似于类似于 sprintf(),但参数采用可变参数列表。

变量

FILE *const stderr

用于错误输出的流。除非另行指定,否则与stdout.

FILE *const stdin

相同。简化函数将使用此流作为输入流,这些函数不接受stream参数。

FILE * stdout

简化函数将使用此流作为输出流,这些函数不接受stream参数。

© Copyright 2024, NVIDIA. 上次更新日期:2024 年 11 月 7 日。