[DAPL2] DAPL Counters & 2.0.3 extensions to support counter retrieval.
[mirror/winof/.git] / ulp / dapl2 / dapl / common / dapl_ep_post_recv.c
1 /*\r
2  * Copyright (c) 2002-2003, Network Appliance, Inc. All rights reserved.\r
3  *\r
4  * This Software is licensed under one of the following licenses:\r
5  *\r
6  * 1) under the terms of the "Common Public License 1.0" a copy of which is\r
7  *    available from the Open Source Initiative, see\r
8  *    http://www.opensource.org/licenses/cpl.php.\r
9  *\r
10  * 2) under the terms of the "The BSD License" a copy of which is\r
11  *    available from the Open Source Initiative, see\r
12  *    http://www.opensource.org/licenses/bsd-license.php.\r
13  *\r
14  * 3) under the terms of the "GNU General Public License (GPL) Version 2" a\r
15  *    copy of which is available from the Open Source Initiative, see\r
16  *    http://www.opensource.org/licenses/gpl-license.php.\r
17  *\r
18  * Licensee has the right to choose one of the above licenses.\r
19  *\r
20  * Redistributions of source code must retain the above copyright\r
21  * notice and one of the license notices.\r
22  *\r
23  * Redistributions in binary form must reproduce both the above copyright\r
24  * notice, one of the license notices in the documentation\r
25  * and/or other materials provided with the distribution.\r
26  */\r
27 \r
28 /**********************************************************************\r
29  *\r
30  * MODULE: dapl_ep_post_recv.c\r
31  *\r
32  * PURPOSE: Endpoint management\r
33  * Description: Interfaces in this file are completely described in\r
34  *              the DAPL 1.1 API, Chapter 6, section 5\r
35  *\r
36  * $Id:$\r
37  **********************************************************************/\r
38 \r
39 #include "dapl.h"\r
40 #include "dapl_cookie.h"\r
41 #include "dapl_adapter_util.h"\r
42 \r
43 /*\r
44  * dapl_ep_post_recv\r
45  *\r
46  * DAPL Requirements Version xxx, 6.5.11\r
47  *\r
48  * Request to receive data over the connection of ep handle into\r
49  * local_iov\r
50  *\r
51  * Input:\r
52  *      ep_handle\r
53  *      num_segments\r
54  *      local_iov\r
55  *      user_cookie\r
56  *      completion_flags\r
57  *\r
58  * Output:\r
59  *      None.\r
60  *\r
61  * Returns:\r
62  *      DAT_SUCCESS\r
63  *      DAT_INSUFFICIENT_RESOURCES\r
64  *      DAT_INVALID_PARAMETER\r
65  *      DAT_INVALID_STATE\r
66  *      DAT_PROTECTION_VIOLATION\r
67  *      DAT_PROVILEGES_VIOLATION\r
68  */\r
69 DAT_RETURN DAT_API\r
70 dapl_ep_post_recv (\r
71         IN      DAT_EP_HANDLE           ep_handle,\r
72         IN      DAT_COUNT               num_segments,\r
73         IN      DAT_LMR_TRIPLET         *local_iov,\r
74         IN      DAT_DTO_COOKIE          user_cookie,\r
75         IN      DAT_COMPLETION_FLAGS    completion_flags )\r
76 {\r
77     DAPL_EP             *ep_ptr;\r
78     DAPL_COOKIE         *cookie;\r
79     DAT_RETURN          dat_status;\r
80 \r
81     dapl_dbg_log (DAPL_DBG_TYPE_API,\r
82                   "dapl_ep_post_recv (%p, %d, %p, %p, %x)\n",\r
83                   ep_handle,\r
84                   num_segments,\r
85                   local_iov,\r
86                   user_cookie.as_64,\r
87                   completion_flags);\r
88 \r
89     if ( DAPL_BAD_HANDLE (ep_handle, DAPL_MAGIC_EP) )\r
90     {\r
91         dat_status = DAT_ERROR (DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_EP);\r
92         goto bail;\r
93     }\r
94 \r
95     ep_ptr = (DAPL_EP *) ep_handle;\r
96 \r
97     /*\r
98      * Synchronization ok since this buffer is only used for receive\r
99      * requests, which aren't allowed to race with each other.\r
100      */\r
101     dat_status = dapls_dto_cookie_alloc (&ep_ptr->recv_buffer,\r
102                                          DAPL_DTO_TYPE_RECV,\r
103                                          user_cookie,\r
104                                          &cookie);\r
105     if ( DAT_SUCCESS != dat_status)\r
106     {\r
107         goto bail;\r
108     }\r
109 \r
110     /*\r
111      * Invoke provider specific routine to post DTO\r
112      */\r
113     dat_status = dapls_ib_post_recv (ep_ptr, cookie, num_segments, local_iov);\r
114 \r
115     if ( dat_status != DAT_SUCCESS )\r
116     {\r
117         dapls_cookie_dealloc (&ep_ptr->recv_buffer, cookie);\r
118     }\r
119 \r
120 bail:\r
121     dapl_dbg_log (DAPL_DBG_TYPE_RTN,\r
122                   "dapl_ep_post_recv () returns 0x%x\n",\r
123                   dat_status);\r
124 \r
125     return dat_status;\r
126 }\r