int efa_load_efawin_lib()

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;
}