in interface/efawin.c [252:436]
int efa_load_efawin_lib()
{
efa_win_reg_mr_fn efa_win_reg_mr;
efa_win_reg_mr_iova2_fn efa_win_reg_mr_iova2;
efa_win_dereg_mr_fn efa_win_dereg_mr;
efa_win_query_device_fn efa_win_query_device;
efa_win_qp_to_qp_ex_fn efa_win_qp_to_qp_ex;
efa_win_query_port_fn efa_win_query_port;
efa_win_query_gid_fn efa_win_query_gid;
efa_win_modify_qp_fn efa_win_modify_qp;
efa_win_destroy_qp_fn efa_win_destroy_qp;
efa_win_create_qp_fn efa_win_create_qp;
efa_win_dealloc_pd_fn efa_win_dealloc_pd;
efa_win_alloc_pd_fn efa_win_alloc_pd;
efa_win_fork_init_fn efa_win_fork_init;
efa_win_free_device_list_fn efa_win_free_device_list;
efa_win_close_device_fn efa_win_close_device;
efa_win_get_device_list_fn efa_win_get_device_list;
efa_win_open_device_fn efa_win_open_device;
efa_win_create_cq_fn efa_win_create_cq;
efa_win_wc_status_str_fn efa_win_wc_status_str;
efa_win_destroy_cq_fn efa_win_destroy_cq;
efa_win_destroy_ah_fn efa_win_destroy_ah;
efa_win_create_ah_fn efa_win_create_ah;
efa_windv_query_ah_fn efa_windv_query_ah;
efa_windv_query_device_fn efa_windv_query_device;
efa_windv_create_qp_ex_fn efa_windv_create_qp_ex;
efa_win_check_version_fn efa_win_check_version;
if(hEfawinLib != NULL) {
return -EALREADY;
}
hEfawinLib = LoadLibraryA("efawin.dll");
if (!hEfawinLib) {
int error = GetLastError();
return -error;
}
efa_win_check_version = (efa_win_check_version_fn)GetProcAddress(hEfawinLib, "check_version");
if (!efa_win_check_version) {
goto liberror;
}
if (!efa_win_check_version(EFAWIN_INTERFACE_VERSION)) {
goto liberror;
}
efa_win_reg_mr = (efa_win_reg_mr_fn)GetProcAddress(hEfawinLib, "ibv_reg_mr");
if (!efa_win_reg_mr) {
goto liberror;
}
efa_win_reg_mr_iova2 = (efa_win_reg_mr_iova2_fn)GetProcAddress(hEfawinLib, "ibv_reg_mr_iova2");
if (!efa_win_reg_mr_iova2) {
goto liberror;
}
efa_win_dereg_mr = (efa_win_dereg_mr_fn)GetProcAddress(hEfawinLib, "ibv_dereg_mr");
if (!efa_win_dereg_mr) {
goto liberror;
}
efa_win_query_device = (efa_win_query_device_fn)GetProcAddress(hEfawinLib, "ibv_query_device");
if (!efa_win_query_device) {
goto liberror;
}
efa_win_qp_to_qp_ex = (efa_win_qp_to_qp_ex_fn)GetProcAddress(hEfawinLib, "ibv_qp_to_qp_ex");
if (!efa_win_qp_to_qp_ex) {
goto liberror;
}
efa_win_query_port = (efa_win_query_port_fn)GetProcAddress(hEfawinLib, "ibv_query_port");
if (!efa_win_query_port) {
goto liberror;
}
efa_win_query_gid = (efa_win_query_gid_fn)GetProcAddress(hEfawinLib, "ibv_query_gid");
if (!efa_win_query_gid) {
goto liberror;
}
efa_win_modify_qp = (efa_win_modify_qp_fn)GetProcAddress(hEfawinLib, "ibv_modify_qp");
if (!efa_win_modify_qp) {
goto liberror;
}
efa_win_destroy_qp = (efa_win_destroy_qp_fn)GetProcAddress(hEfawinLib, "ibv_destroy_qp");
if (!efa_win_destroy_qp) {
goto liberror;
}
efa_win_create_qp = (efa_win_create_qp_fn)GetProcAddress(hEfawinLib, "ibv_create_qp");
if (!efa_win_create_qp) {
goto liberror;
}
efa_win_dealloc_pd = (efa_win_dealloc_pd_fn)GetProcAddress(hEfawinLib, "ibv_dealloc_pd");
if (!efa_win_dealloc_pd) {
goto liberror;
}
efa_win_alloc_pd = (efa_win_alloc_pd_fn)GetProcAddress(hEfawinLib, "ibv_alloc_pd");
if (!efa_win_alloc_pd) {
goto liberror;
}
efa_win_fork_init = (efa_win_fork_init_fn)GetProcAddress(hEfawinLib, "ibv_fork_init");
if (!efa_win_fork_init) {
goto liberror;
}
efa_win_free_device_list = (efa_win_free_device_list_fn)GetProcAddress(hEfawinLib, "ibv_free_device_list");
if (!efa_win_free_device_list) {
goto liberror;
}
efa_win_close_device = (efa_win_close_device_fn)GetProcAddress(hEfawinLib, "ibv_close_device");
if (!efa_win_close_device) {
goto liberror;
}
efa_win_get_device_list = (efa_win_get_device_list_fn)GetProcAddress(hEfawinLib, "ibv_get_device_list");
if (!efa_win_get_device_list) {
goto liberror;
}
efa_win_open_device = (efa_win_open_device_fn)GetProcAddress(hEfawinLib, "ibv_open_device");
if (!efa_win_open_device) {
goto liberror;
}
efa_win_create_cq = (efa_win_create_cq_fn)GetProcAddress(hEfawinLib, "ibv_create_cq");
if (!efa_win_create_cq) {
goto liberror;
}
efa_win_wc_status_str = (efa_win_wc_status_str_fn)GetProcAddress(hEfawinLib, "ibv_wc_status_str");
if (!efa_win_wc_status_str) {
goto liberror;
}
efa_win_destroy_cq = (efa_win_destroy_cq_fn)GetProcAddress(hEfawinLib, "ibv_destroy_cq");
if (!efa_win_destroy_cq) {
goto liberror;
}
efa_win_destroy_ah = (efa_win_destroy_ah_fn)GetProcAddress(hEfawinLib, "ibv_destroy_ah");
if (!efa_win_destroy_ah) {
goto liberror;
}
efa_win_create_ah = (efa_win_create_ah_fn)GetProcAddress(hEfawinLib, "ibv_create_ah");
if (!efa_win_create_ah) {
goto liberror;
}
efa_windv_query_ah = (efa_windv_query_ah_fn)GetProcAddress(hEfawinLib, "efadv_query_ah");
if (!efa_windv_query_ah) {
goto liberror;
}
efa_windv_create_qp_ex = (efa_windv_create_qp_ex_fn)GetProcAddress(hEfawinLib, "efadv_create_qp_ex");
if (!efa_windv_create_qp_ex) {
goto liberror;
}
efa_windv_query_device = (efa_windv_query_device_fn)GetProcAddress(hEfawinLib, "efadv_query_device");
if (!efa_windv_query_device) {
goto liberror;
}
efawin_ops.efa_win_reg_mr = efa_win_reg_mr;
efawin_ops.efa_win_reg_mr_iova2 = efa_win_reg_mr_iova2;
efawin_ops.efa_win_dereg_mr = efa_win_dereg_mr;
efawin_ops.efa_win_query_device = efa_win_query_device;
efawin_ops.efa_win_qp_to_qp_ex = efa_win_qp_to_qp_ex;
efawin_ops.efa_win_query_port = efa_win_query_port;
efawin_ops.efa_win_query_gid = efa_win_query_gid;
efawin_ops.efa_win_modify_qp = efa_win_modify_qp;
efawin_ops.efa_win_destroy_qp = efa_win_destroy_qp;
efawin_ops.efa_win_create_qp = efa_win_create_qp;
efawin_ops.efa_win_dealloc_pd = efa_win_dealloc_pd;
efawin_ops.efa_win_alloc_pd = efa_win_alloc_pd;
efawin_ops.efa_win_fork_init = efa_win_fork_init;
efawin_ops.efa_win_free_device_list = efa_win_free_device_list;
efawin_ops.efa_win_close_device = efa_win_close_device;
efawin_ops.efa_win_get_device_list = efa_win_get_device_list;
efawin_ops.efa_win_open_device = efa_win_open_device;
efawin_ops.efa_win_create_cq = efa_win_create_cq;
efawin_ops.efa_win_wc_status_str = efa_win_wc_status_str;
efawin_ops.efa_win_destroy_cq = efa_win_destroy_cq;
efawin_ops.efa_win_destroy_ah = efa_win_destroy_ah;
efawin_ops.efa_win_create_ah = efa_win_create_ah;
efawin_ops.efa_windv_query_ah = efa_windv_query_ah;
efawin_ops.efa_windv_query_device = efa_windv_query_device;
efawin_ops.efa_windv_create_qp_ex = efa_windv_create_qp_ex;
return ERROR_SUCCESS;
liberror:
if (hEfawinLib)
{
FreeLibrary(hEfawinLib);
hEfawinLib = NULL;
}
return -ENODEV;
}