]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[MTHCA\IBAL] rdma SPI new entry points
authorsleybo <sleybo@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 5 Apr 2007 11:13:37 +0000 (11:13 +0000)
committersleybo <sleybo@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 5 Apr 2007 11:13:37 +0000 (11:13 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1@626 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

branches/RDMA/core/al/al_qp.h
branches/RDMA/core/al/al_rdma.c [new file with mode: 0644]
branches/RDMA/core/al/user/SOURCES
branches/RDMA/core/al/user/ual_qp.c
branches/RDMA/inc/kernel/iba/ib_al_ifc.h
branches/RDMA/inc/user/iba/ib_uvp.h

index 8b18d580b358303d82392ac7d264c89330a5ecb3..a6e71090eb556b380e221a432ed4263c8c36f374 100644 (file)
@@ -65,6 +65,44 @@ typedef ib_api_status_t
        IN                              ib_recv_wr_t* const                     p_recv_wr,\r
        IN                              ib_recv_wr_t                            **p_recv_failure OPTIONAL );\r
 \r
+typedef ib_api_status_t\r
+(*ib_pfn_rdma_send_t)(\r
+       IN              const   ib_qp_handle_t                          h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN                              uint32_t                                                send_opt);\r
+\r
+typedef ib_api_status_t\r
+(*ib_pfn_rdma_recv_t)(\r
+       IN              const   ib_qp_handle_t                          h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds);\r
+\r
+\r
+typedef ib_api_status_t\r
+(*ib_pfn_rdma_write_t)(\r
+       IN              const   void* __ptr64                                   h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN              const   void* __ptr64                                   view,\r
+       IN                              uint64_t                                                offset,\r
+       IN                              uint32_t                                                send_opt);\r
+\r
+\r
+typedef ib_api_status_t\r
+(*ib_pfn_rdma_read_t)(\r
+       IN              const   void* __ptr64                                   h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN              const   void* __ptr64                                   view,\r
+       IN                              uint64_t                                                offset,\r
+       IN                              uint32_t                                                send_opt);\r
+\r
+\r
 typedef ib_api_status_t\r
 (*ib_pfn_init_dgrm_svc_t)(\r
        IN              const   ib_qp_handle_t                          h_qp,\r
@@ -145,6 +183,12 @@ typedef struct _ib_qp
        ib_pfn_modify_qp_t                      pfn_modify_qp;\r
        ib_pfn_post_recv_t                      pfn_post_recv;\r
        ib_pfn_post_send_t                      pfn_post_send;\r
+       /*RDMA interface*/\r
+       ib_pfn_rdma_send_t              pfn_rdma_send;\r
+       ib_pfn_rdma_recv_t              pfn_rdma_recv;\r
+       ib_pfn_rdma_write_t             pfn_rdma_write;\r
+       ib_pfn_rdma_read_t              pfn_rdma_read;\r
+       \r
        ib_pfn_reg_mad_svc_t            pfn_reg_mad_svc;\r
        ib_pfn_dereg_mad_svc_t          pfn_dereg_mad_svc;\r
        ib_pfn_queue_mad_t                      pfn_queue_mad;\r
diff --git a/branches/RDMA/core/al/al_rdma.c b/branches/RDMA/core/al/al_rdma.c
new file mode 100644 (file)
index 0000000..55bf167
--- /dev/null
@@ -0,0 +1,181 @@
+/*\r
+ * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
+ * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. \r
+ *\r
+ * This software is available to you under the OpenIB.org BSD license\r
+ * below:\r
+ *\r
+ *     Redistribution and use in source and binary forms, with or\r
+ *     without modification, are permitted provided that the following\r
+ *     conditions are met:\r
+ *\r
+ *      - Redistributions of source code must retain the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer.\r
+ *\r
+ *      - Redistributions in binary form must reproduce the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer in the documentation and/or other materials\r
+ *        provided with the distribution.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+ * SOFTWARE.\r
+ *\r
+ * $Id: al_rdma.c 1793 2006-11-12 19:01:34Z leonid $\r
+ */\r
+\r
+#include "al_debug.h"\r
+#if defined(EVENT_TRACING)\r
+#ifdef offsetof\r
+#undef offsetof\r
+#endif\r
+#include "al_rdma.tmh"\r
+#endif\r
+\r
+#include "al_qp.h"\r
+\r
+\r
+\r
+\r
+/*\r
+ * Post a work request to the send queue of the RDMA QP.\r
+ */\r
+ib_api_status_t\r
+ib_rdma_send(\r
+       IN                              ib_qp_handle_t                          h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN                              uint32_t                                                send_opt)\r
+{\r
+       ib_api_status_t                 status;\r
+       AL_ENTER( AL_DBG_QP );\r
+\r
+       if( AL_OBJ_INVALID_HANDLE( h_qp, AL_OBJ_TYPE_H_QP ) )\r
+       {\r
+               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("IB_INVALID_QP_HANDLE\n") );\r
+               return IB_INVALID_QP_HANDLE;\r
+       }\r
+       if( !ds_array )\r
+       {\r
+               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("IB_INVALID_PARAMETER\n") );\r
+               return IB_INVALID_PARAMETER;\r
+       }\r
+\r
+       status =\r
+               h_qp->pfn_rdma_send( h_qp->h_send_qp, wr_id, ds_array, num_ds, send_opt);\r
+\r
+       AL_EXIT( AL_DBG_QP );\r
+       return status;\r
+}\r
+\r
+\r
+/*\r
+ * Post a work request to the recv queue of the RDMA QP.\r
+ */\r
+ib_api_status_t\r
+ib_rdma_recv(\r
+       IN                              ib_qp_handle_t                          h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds)\r
+{\r
+       ib_api_status_t                 status;\r
+       AL_ENTER( AL_DBG_QP );\r
+\r
+       if( AL_OBJ_INVALID_HANDLE( h_qp, AL_OBJ_TYPE_H_QP ) )\r
+       {\r
+               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("IB_INVALID_QP_HANDLE\n") );\r
+               return IB_INVALID_QP_HANDLE;\r
+       }\r
+       if( !ds_array )\r
+       {\r
+               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("IB_INVALID_PARAMETER\n") );\r
+               return IB_INVALID_PARAMETER;\r
+       }\r
+\r
+       status =\r
+               h_qp->pfn_rdma_recv( h_qp->h_recv_qp, wr_id, ds_array, num_ds);\r
+\r
+       AL_EXIT( AL_DBG_QP );\r
+       return status;\r
+}\r
+\r
+\r
+/*\r
+ * Post a RDMA write work request to the send queue of the RDMA QP.\r
+ */\r
+ib_api_status_t\r
+ib_rdma_write(\r
+       IN                              ib_qp_handle_t                          h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN              const   void* __ptr64                                   view,\r
+       IN                              uint64_t                                                offset,\r
+       IN                              uint32_t                                                send_opt)\r
+{\r
+       ib_api_status_t                 status;\r
+       AL_ENTER( AL_DBG_QP );\r
+\r
+       if( AL_OBJ_INVALID_HANDLE( h_qp, AL_OBJ_TYPE_H_QP ) )\r
+       {\r
+               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("IB_INVALID_QP_HANDLE\n") );\r
+               return IB_INVALID_QP_HANDLE;\r
+       }\r
+       if( !ds_array )\r
+       {\r
+               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("IB_INVALID_PARAMETER\n") );\r
+               return IB_INVALID_PARAMETER;\r
+       }\r
+\r
+       status =\r
+               h_qp->pfn_rdma_write( h_qp->h_send_qp, wr_id, ds_array, num_ds, view, offset, send_opt);\r
+\r
+       AL_EXIT( AL_DBG_QP );\r
+       return status;\r
+}\r
+\r
+\r
+\r
+/*\r
+ * Post a RDMA read work request to the send queue of the RDMA QP.\r
+ */\r
+ib_api_status_t\r
+ib_rdma_read(\r
+       IN                              ib_qp_handle_t                          h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN              const   void* __ptr64                                   view,\r
+       IN                              uint64_t                                                offset,\r
+       IN                              uint32_t                                                send_opt)\r
+{\r
+       ib_api_status_t                 status;\r
+       AL_ENTER( AL_DBG_QP );\r
+\r
+       if( AL_OBJ_INVALID_HANDLE( h_qp, AL_OBJ_TYPE_H_QP ) )\r
+       {\r
+               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("IB_INVALID_QP_HANDLE\n") );\r
+               return IB_INVALID_QP_HANDLE;\r
+       }\r
+       if( !ds_array )\r
+       {\r
+               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("IB_INVALID_PARAMETER\n") );\r
+               return IB_INVALID_PARAMETER;\r
+       }\r
+\r
+       status =\r
+               h_qp->pfn_rdma_read( h_qp->h_send_qp, wr_id, ds_array, num_ds, view, offset, send_opt);\r
+\r
+       AL_EXIT( AL_DBG_QP );\r
+       return status;\r
+}\r
+\r
+\r
index bd1cfbf85e034f9bb2ac794bdb6b021259d89e22..363337aa075a9eab00320fc483e7015047bd4dd0 100644 (file)
@@ -65,6 +65,7 @@ SOURCES=\
        ..\al_reg_svc.c                 \\r
        ..\al_res_mgr.c                 \\r
        ..\al_srq.c                             \\r
+       ..\al_rdma.c                            \\r
        ..\al_sub.c                             \\r
        ..\ib_common.c                  \\r
        ..\ib_statustext.c\r
index 0ff64866e480e36cc96d949f591525beae46510c..5549447d2740fe5310e050aee479a06b3433549a 100644 (file)
@@ -370,6 +370,25 @@ ual_create_qp(
                        h_qp->h_send_qp = h_qp;\r
                        h_qp->pfn_post_send = ual_post_send;\r
                }\r
+               if(h_qp->type == IB_QPT_RELIABLE_CONN)\r
+               {\r
+                       if( uvp_intf.rdma_send && uvp_intf.rdma_recv)\r
+                       {\r
+                               \r
+                               h_qp->pfn_rdma_send = uvp_intf.rdma_send;\r
+                               h_qp->pfn_rdma_recv = uvp_intf.rdma_recv;\r
+                               h_qp->pfn_rdma_write = uvp_intf.rdma_write;\r
+                               h_qp->pfn_rdma_read = uvp_intf.rdma_read;\r
+                       }\r
+                       else\r
+                       {\r
+                               \r
+                               //TODO add kernel support\r
+                               //h_qp->pfn_post_send = ual_rdma_send;\r
+                               //h_qp->pfn_post_recv = ual_rdma_recv;\r
+                       }\r
+                       \r
+               }\r
        }\r
        else\r
        {\r
@@ -377,6 +396,14 @@ ual_create_qp(
                h_qp->pfn_post_recv = ual_post_recv;\r
                h_qp->h_send_qp = h_qp;\r
                h_qp->pfn_post_send = ual_post_send;\r
+               if(h_qp->type == IB_QPT_RELIABLE_CONN)\r
+               {\r
+                       //h_qp->h_rdma_qp = h_qp;\r
+                       //TODO add kernel support\r
+                       //h_qp->pfn_rdma_recv = ual_rdma_recv;\r
+                       //h_qp->pfn_rdma_send = ual_rdma_send;\r
+               }\r
+                       \r
        }\r
 \r
 \r
index b8fefadc5b4e9513a9df0610f821735d3523288a..c34ae50a033905a8b93367df9c048d271a51345a 100644 (file)
@@ -344,6 +344,54 @@ typedef ib_api_status_t
        IN                              ib_recv_wr_t* const                     p_recv_wr,\r
                OUT                     ib_recv_wr_t                            **pp_recv_failure OPTIONAL );\r
 \r
+typedef ib_api_status_t\r
+(*ib_pfn_post_srq_recv_t)(\r
+       IN              const   ib_srq_handle_t                         h_srq,\r
+       IN                              ib_recv_wr_t* const                     p_recv_wr,\r
+               OUT                     ib_recv_wr_t                            **pp_recv_failure OPTIONAL );\r
+\r
+\r
+//**********************************************\r
+\r
+\r
+typedef ib_api_status_t\r
+(*ib_pfn_rdma_send_t)(\r
+       IN              const   ib_qp_handle_t                          h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN                              uint32_t                                                send_opt);\r
+\r
+typedef ib_api_status_t\r
+(*ib_pfn_rdma_recv_t)(\r
+       IN              const   ib_qp_handle_t                          h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds);\r
+\r
+typedef ib_api_status_t\r
+(*ib_pfn_rdma_write_t)(\r
+       IN              const   void* __ptr64                                   h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN              const   void* __ptr64                                   view,\r
+       IN                              uint64_t                                                offset,\r
+       IN                              uint32_t                                                send_opt);\r
+\r
+\r
+typedef ib_api_status_t\r
+(*ib_pfn_rdma_read_t)(\r
+       IN              const   void* __ptr64                                   h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN              const   void* __ptr64                                   view,\r
+       IN                              uint64_t                                                offset,\r
+       IN                              uint32_t                                                send_opt);\r
+\r
+\r
+//***************************************\r
 typedef ib_api_status_t\r
 (*ib_pfn_send_mad_t)(\r
        IN              const   ib_mad_svc_handle_t                     h_mad_svc,\r
index 33be7520a204d9131ecb2a7075db1a94e5777fea..92ac35c362471485c08abf2806914d3b9c0bd5e4 100644 (file)
@@ -2793,7 +2793,132 @@ typedef ib_api_status_t
 *\r
 ********/\r
 \r
-/********/\r
+/****f* user-mode Verbs/uvp_rdma_send\r
+* NAME\r
+*      uvp_rdma_send -- TODO\r
+*\r
+* SYNOPSIS\r
+*/\r
+\r
+typedef ib_api_status_t\r
+(AL_API *uvp_rdma_send) (\r
+       IN              const   void*           __ptr64                 h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN                              uint32_t                                                send_opt);\r
+/*\r
+* DESCRIPTION\r
+*      TODO\r
+* PARAMETERS\r
+*      TODO\r
+* RETURN VALUE\r
+*TODO\r
+* PORTABILITY\r
+*      Kernel & User mode.\r
+*\r
+* NOTES\r
+TODO*\r
+* SEE ALSO\r
+*      uvp_rdma_recv\r
+*\r
+********/\r
+\r
+\r
+/****f* user-mode Verbs/uvp_rdma_recv\r
+* NAME\r
+*      uvp_rdma_recv -- TODO\r
+*\r
+* SYNOPSIS\r
+*/\r
+\r
+typedef ib_api_status_t\r
+(AL_API *uvp_rdma_recv) (\r
+       IN              const   void* __ptr64                                   h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds);\r
+/*\r
+* DESCRIPTION\r
+*TODO\r
+*\r
+* PARAMETERS\r
+*TODO\r
+* RETURN VALUE\r
+*TODO\r
+* PORTABILITY\r
+*TODO\r
+*\r
+* SEE ALSO\r
+*      uvp_rdma_send\r
+*\r
+********/\r
+\r
+/****f* user-mode Verbs/uvp_rdma_write\r
+* NAME\r
+*      uvp_rdma_write -- TODO\r
+*\r
+* SYNOPSIS\r
+*/\r
+\r
+typedef ib_api_status_t\r
+(AL_API *uvp_rdma_write) (\r
+       IN              const   void* __ptr64                                   h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN              const   void* __ptr64                                   view,\r
+       IN                              uint64_t                                                offset,\r
+       IN                              uint32_t                                                send_opt);\r
+/*\r
+* DESCRIPTION\r
+*TODO\r
+*\r
+* PARAMETERS\r
+*TODO\r
+* RETURN VALUE\r
+*TODO\r
+* PORTABILITY\r
+*TODO\r
+*\r
+* SEE ALSO\r
+*      uvp_rdma_send\r
+*\r
+********/\r
+\r
+\r
+/****f* user-mode Verbs/uvp_rdma_read\r
+* NAME\r
+*      uvp_rdma_read -- TODO\r
+*\r
+* SYNOPSIS\r
+*/\r
+\r
+typedef ib_api_status_t\r
+(AL_API *uvp_rdma_read) (\r
+       IN              const   void* __ptr64                                   h_qp,\r
+       IN                              uint64_t                                                wr_id,\r
+       IN              const   ib_local_ds_t* __ptr64                  ds_array,\r
+       IN                              uint32_t                                                num_ds,\r
+       IN              const   void* __ptr64                                   view,\r
+       IN                              uint64_t                                                offset,\r
+       IN                              uint32_t                                                send_opt);\r
+/*\r
+* DESCRIPTION\r
+*TODO\r
+*\r
+* PARAMETERS\r
+*TODO\r
+* RETURN VALUE\r
+*TODO\r
+* PORTABILITY\r
+*TODO\r
+*\r
+* SEE ALSO\r
+*      uvp_rdma_send\r
+*\r
+********/\r
+\r
 \r
 /****f* user-mode Verbs/uvp_peek_cq\r
 * NAME\r
@@ -3323,6 +3448,14 @@ typedef struct _uvp_interface
        uvp_pre_detach_mcast            pre_detach_mcast;\r
        uvp_post_detach_mcast           post_detach_mcast;\r
 \r
+       /*\r
+        * RDMA interface Verbs\r
+        */\r
+       uvp_rdma_send                   rdma_send;\r
+       uvp_rdma_recv                   rdma_recv;\r
+       uvp_rdma_write                  rdma_write;\r
+       uvp_rdma_read                   rdma_read;\r
+       \r
 } uvp_interface_t;\r
 \r
 /********/\r