*\r
********/\r
\r
+typedef struct _uvp_qp_create\r
+{\r
+ ib_qp_create_t qp_create;\r
+\r
+ void *context;\r
+ uint32_t max_inline_send;\r
+ uint32_t initiator_depth;\r
+ uint32_t responder_resources;\r
+\r
+} uvp_qp_create_t;\r
+\r
+typedef ib_api_status_t\r
+(AL_API *uvp_wv_pre_create_qp) (\r
+ IN const ib_pd_handle_t h_uvp_pd,\r
+ IN const uvp_qp_create_t *p_create_attr,\r
+ IN OUT ci_umv_buf_t *p_umv_buf,\r
+ OUT ib_qp_handle_t *ph_uvp_qp);\r
+\r
/********/\r
\r
/****f* user-mode Verbs/uvp_post_create_qp_t\r
\r
/********/\r
\r
+/*\r
+ * Define uvp_wc_t so that we can cast directly to ib_wc_t.\r
+ */\r
+typedef struct _uvp_wc\r
+{\r
+ void* qp_context;\r
+ /* If pointer size is 32-bits, then compiler will pad before uint64_t */\r
+ uint64_t wr_id;\r
+ ib_wc_type_t wc_type;\r
+\r
+ uint32_t length;\r
+ ib_wc_status_t status;\r
+ uint64_t vendor_specific;\r
+\r
+ union _uvp_wc_recv\r
+ {\r
+ struct _uvp_wc_conn\r
+ {\r
+ ib_recv_opt_t recv_opt;\r
+ ib_net32_t immediate_data;\r
+\r
+ } conn;\r
+\r
+ struct _uvp_wc_ud\r
+ {\r
+ ib_recv_opt_t recv_opt;\r
+ ib_net32_t immediate_data;\r
+ ib_net32_t remote_qp;\r
+ uint16_t pkey_index;\r
+ ib_net16_t remote_lid;\r
+ uint8_t remote_sl;\r
+ uint8_t path_bits;\r
+\r
+ } ud;\r
+ } recv;\r
+} uvp_wc_t;\r
+\r
+typedef int\r
+(AL_API *uvp_poll_cq_array) (\r
+ IN const void* h_cq,\r
+ IN const int num_entries,\r
+ IN OUT uvp_wc_t* const wcs);\r
+\r
+/********/\r
+\r
/****f* user-mode Verbs/uvp_rearm_cq\r
* NAME\r
* uvp_rearm_cq -- Invoke the Completion handler, on next entry added.\r
*\r
* SOURCE\r
*/\r
-typedef struct _uvp_interface\r
+typedef struct _uvp2_interface\r
{\r
ib_net64_t guid;\r
/*\r
*/\r
uvp_nd_modify_qp_t nd_modify_qp;\r
uvp_nd_get_qp_state_t nd_get_qp_state;\r
+\r
+} uvp2_interface_t;\r
+\r
+typedef struct _uvp_interface\r
+{\r
+ ib_net64_t guid;\r
+ /*\r
+ * Version of the header file this interface export can handle\r
+ */\r
+ uint32_t version;\r
+\r
+ uvp_pre_open_ca_t pre_open_ca;\r
+ uvp_post_open_ca_t post_open_ca;\r
+ uvp_pre_query_ca pre_query_ca;\r
+ uvp_post_query_ca_t post_query_ca;\r
+ uvp_pre_modify_ca pre_modify_ca;\r
+ uvp_post_modify_ca_t post_modify_ca;\r
+ uvp_pre_close_ca_t pre_close_ca;\r
+ uvp_post_close_ca_t post_close_ca;\r
+ uvp_pre_ci_call pre_ci_call;\r
+ uvp_post_ci_call post_ci_call;\r
+\r
+ uvp_pre_allocate_pd pre_allocate_pd;\r
+ uvp_post_allocate_pd_t post_allocate_pd;\r
+ uvp_pre_deallocate_pd pre_deallocate_pd;\r
+ uvp_post_deallocate_pd_t post_deallocate_pd;\r
+\r
+ uvp_pre_create_av pre_create_av;\r
+ uvp_post_create_av_t post_create_av;\r
+ uvp_pre_query_av pre_query_av;\r
+ uvp_post_query_av_t post_query_av;\r
+ uvp_pre_modify_av pre_modify_av;\r
+ uvp_post_modify_av_t post_modify_av;\r
+ uvp_pre_destroy_av pre_destroy_av;\r
+ uvp_post_destroy_av_t post_destroy_av;\r
+\r
+ uvp_pre_create_srq pre_create_srq;\r
+ uvp_post_create_srq_t post_create_srq;\r
+ uvp_pre_modify_srq pre_modify_srq;\r
+ uvp_post_modify_srq_t post_modify_srq;\r
+ uvp_pre_query_srq pre_query_srq;\r
+ uvp_post_query_srq_t post_query_srq;\r
+ uvp_pre_destroy_srq pre_destroy_srq;\r
+ uvp_post_destroy_srq_t post_destroy_srq;\r
+\r
+ uvp_pre_create_qp pre_create_qp;\r
+ uvp_post_create_qp_t post_create_qp;\r
+ uvp_pre_modify_qp pre_modify_qp;\r
+ uvp_post_modify_qp_t post_modify_qp;\r
+ uvp_pre_query_qp pre_query_qp;\r
+ uvp_post_query_qp_t post_query_qp;\r
+ uvp_pre_destroy_qp pre_destroy_qp;\r
+ uvp_post_destroy_qp_t post_destroy_qp;\r
+\r
+ uvp_pre_create_cq pre_create_cq;\r
+ uvp_post_create_cq_t post_create_cq;\r
+ uvp_pre_query_cq pre_query_cq;\r
+ uvp_post_query_cq_t post_query_cq;\r
+ uvp_pre_resize_cq pre_resize_cq;\r
+ uvp_post_resize_cq_t post_resize_cq;\r
+ uvp_pre_destroy_cq pre_destroy_cq;\r
+ uvp_post_destroy_cq_t post_destroy_cq;\r
+\r
+ uvp_pre_create_mw pre_create_mw;\r
+ uvp_post_create_mw_t post_create_mw;\r
+ uvp_pre_query_mw pre_query_mw;\r
+ uvp_post_query_mw_t post_query_mw;\r
+ uvp_pre_destroy_mw pre_destroy_mw;\r
+ uvp_post_destroy_mw_t post_destroy_mw;\r
+\r
+ uvp_bind_mw bind_mw;\r
+ uvp_post_send post_send;\r
+ uvp_post_recv post_recv;\r
+ uvp_post_srq_recv post_srq_recv;\r
+\r
+ uvp_peek_cq peek_cq;\r
+ uvp_poll_cq poll_cq;\r
+ uvp_rearm_cq rearm_cq;\r
+ uvp_rearm_n_cq rearm_n_cq;\r
+\r
+ uvp_pre_attach_mcast pre_attach_mcast;\r
+ uvp_post_attach_mcast post_attach_mcast;\r
+ uvp_pre_detach_mcast pre_detach_mcast;\r
+ uvp_post_detach_mcast post_detach_mcast;\r
+\r
+ uvp_nd_modify_qp_t nd_modify_qp;\r
+ uvp_nd_get_qp_state_t nd_get_qp_state;\r
+\r
+ uvp_wv_pre_create_qp wv_pre_create_qp;\r
+ uvp_poll_cq_array poll_cq_array;\r
\r
-} uvp_interface_t;\r
+} uvp_interface_t;\r
\r
/********/\r
\r
*/\r
typedef ib_api_status_t\r
(AL_API *uvp_get_interface_t)(\r
- IN OUT uvp_interface_t* const p_uvp );\r
+ IN OUT uvp2_interface_t* const p_uvp );\r
/*\r
* DESCRIPTION\r
* This routine is called by UAL to get the functions supported by\r
*\r
* PARAMETERS\r
* p_uvp\r
-* [in out] Pointer to the uvp_interface_t structure that has the function\r
+* [in out] Pointer to the uvp2_interface_t structure that has the function\r
* vector to support verbs functionality.\r
*\r
* RETURN VALUE\r