[DAPL2] DAPL Counters & 2.0.3 extensions to support counter retrieval.
[mirror/winof/.git] / ulp / dapl2 / dapl / common / dapl_srq_create.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_srq_create.c\r
31  *\r
32  * PURPOSE: Shared Receive Queue management\r
33  * Description: Interfaces in this file are completely described in\r
34  *              the DAPL 1.2 API, Chapter 6, section 5.1\r
35  *\r
36  * $Id:$\r
37  **********************************************************************/\r
38 \r
39 #include "dapl.h"\r
40 #include "dapl_ia_util.h"\r
41 #include "dapl_srq_util.h"\r
42 #include "dapl_adapter_util.h"\r
43 \r
44 \r
45 /*\r
46  * dapl_srq_create\r
47  *\r
48  * DAPL Version 1.2, 6.5.1\r
49  *\r
50  * Create an instance of a Shared Receive Queue that is provided to the\r
51  * consumer at srq_handle.\r
52  *\r
53  * Input:\r
54  *      ia_handle\r
55  *      pz_handle\r
56  *      srq_attr\r
57  *\r
58  * Output:\r
59  *      srq_handle\r
60  *\r
61  * Returns:\r
62  *      DAT_SUCCESS\r
63  *      DAT_INSUFFICIENT_RESOURCES\r
64  *      DAT_INVALID_HANDLE\r
65  *      DAT_INVALID_PARAMETER\r
66  *      ?DAT_INVALID_ATTRIBUTE??\r
67  *      DAT_MODEL_NOT_SUPPORTED\r
68  */\r
69 DAT_RETURN DAT_API\r
70 dapl_srq_create (\r
71         IN      DAT_IA_HANDLE           ia_handle,\r
72         IN      DAT_PZ_HANDLE           pz_handle,\r
73         IN      DAT_SRQ_ATTR            *srq_attr,\r
74         OUT     DAT_SRQ_HANDLE          *srq_handle )\r
75 {\r
76     DAPL_IA             *ia_ptr;\r
77     DAPL_SRQ            *srq_ptr;\r
78     DAT_RETURN          dat_status;\r
79 \r
80     dat_status = DAT_SUCCESS;\r
81 \r
82     dapl_dbg_log (DAPL_DBG_TYPE_API,\r
83                   "dapl_srq_create (%p, %p, %p, %p)\n",\r
84                   ia_handle, \r
85                   pz_handle, \r
86                   srq_attr, \r
87                   srq_handle);\r
88 \r
89     ia_ptr = (DAPL_IA *)ia_handle;\r
90 \r
91     /*\r
92      * Verify parameters\r
93      */\r
94     if ( DAPL_BAD_HANDLE (ia_ptr, DAPL_MAGIC_IA) )\r
95     {\r
96         dat_status = DAT_ERROR (DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_IA);\r
97         goto bail;\r
98     }\r
99 \r
100     DAPL_CNTR(ia_ptr, DCNT_IA_SRQ_CREATE);\r
101 \r
102     /*\r
103      * Verify non-required parameters.\r
104      * N.B. Assumption: any parameter that can be\r
105      *      modified by dat_ep_modify() is not strictly\r
106      *      required when the EP is created\r
107      */\r
108     if ( pz_handle != NULL && \r
109          DAPL_BAD_HANDLE (pz_handle, DAPL_MAGIC_PZ) )\r
110     {\r
111         dat_status = DAT_ERROR (DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_PZ);\r
112         goto bail;\r
113     }\r
114 \r
115     if ( srq_handle == NULL )\r
116     {\r
117         dat_status = DAT_ERROR (DAT_INVALID_PARAMETER, DAT_INVALID_ARG4);\r
118         goto bail;\r
119     }\r
120     if (DAPL_BAD_PTR(srq_attr))\r
121     {\r
122         dat_status = DAT_ERROR (DAT_INVALID_PARAMETER, DAT_INVALID_ARG3);\r
123         goto bail;\r
124     }\r
125 \r
126     /* Allocate SRQ */\r
127     srq_ptr = dapl_srq_alloc (ia_ptr, srq_attr);\r
128     if (srq_ptr == NULL)\r
129     {\r
130         dat_status = DAT_ERROR (DAT_INSUFFICIENT_RESOURCES, DAT_RESOURCE_MEMORY);\r
131         goto bail;\r
132     }\r
133 \r
134     srq_ptr->param.ia_handle = (DAT_IA_HANDLE) ia_ptr;\r
135     srq_ptr->param.srq_state = DAT_SRQ_STATE_OPERATIONAL;\r
136     srq_ptr->param.pz_handle = pz_handle;\r
137 \r
138     /*\r
139      * XXX Allocate provider resource here!!!\r
140      */\r
141     /* XXX */    dat_status = DAT_ERROR (DAT_NOT_IMPLEMENTED, DAT_NO_SUBTYPE);\r
142     /* XXX */    dapl_srq_dealloc (srq_ptr);\r
143     /* XXX */    goto bail;\r
144 \r
145     /* Link it onto the IA */\r
146     dapl_ia_link_srq (ia_ptr, srq_ptr);\r
147 \r
148     *srq_handle = srq_ptr;\r
149 \r
150 bail:\r
151     return dat_status;\r
152 }\r
153 \r
154 \r
155 /*\r
156  * Local variables:\r
157  *  c-indent-level: 4\r
158  *  c-basic-offset: 4\r
159  *  tab-width: 8\r
160  * End:\r
161  */\r