[DAPL2] DAPL Counters & 2.0.3 extensions to support counter retrieval.
[mirror/winof/.git] / ulp / dapl2 / dapl / common / dapl_pz_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_pz_create.c\r
31  *\r
32  * PURPOSE: Memory management\r
33  *\r
34  * $Id:$\r
35  **********************************************************************/\r
36 \r
37 #include "dapl.h"\r
38 #include "dapl_pz_util.h"\r
39 #include "dapl_adapter_util.h"\r
40 \r
41 /*\r
42  * dapl_pz_create\r
43  *\r
44  * Create an instance of a protection zone\r
45  *\r
46  * Input:\r
47  *      ia_handle\r
48  *\r
49  * Output:\r
50  *      pz_handle\r
51  *\r
52  * Returns:\r
53  *      DAT_SUCCESS\r
54  *      DAT_INSUFFICIENT_RESOURCES\r
55  *      DAT_INVALID_PARAMETER\r
56  *      DAT_INVLAID_HANDLE\r
57  */\r
58 DAT_RETURN DAT_API\r
59 dapl_pz_create (\r
60     IN  DAT_IA_HANDLE   ia_handle,\r
61     OUT DAT_PZ_HANDLE   *pz_handle)\r
62 {\r
63     DAPL_IA             *ia;\r
64     DAPL_PZ             *pz;\r
65     DAT_RETURN          dat_status;\r
66 \r
67     dapl_dbg_log (DAPL_DBG_TYPE_API,\r
68                   "dapl_pz_create (%p, %p)\n",\r
69                   ia_handle, \r
70                   pz_handle);\r
71 \r
72     dat_status = DAT_SUCCESS;\r
73     if ( DAPL_BAD_HANDLE (ia_handle, DAPL_MAGIC_IA) )\r
74     {\r
75         dat_status = DAT_ERROR (DAT_INVALID_HANDLE,DAT_INVALID_HANDLE_IA);\r
76         goto bail;\r
77     }\r
78 \r
79     if (NULL == pz_handle)\r
80     {\r
81         dat_status = DAT_ERROR (DAT_INVALID_PARAMETER,DAT_INVALID_ARG2);\r
82         goto bail;\r
83     }\r
84 \r
85     ia = (DAPL_IA *) ia_handle;\r
86 \r
87     pz = dapl_pz_alloc (ia);\r
88     if ( NULL == pz )\r
89     {\r
90         dat_status = DAT_ERROR (DAT_INSUFFICIENT_RESOURCES,DAT_RESOURCE_MEMORY);\r
91         goto bail;\r
92     }\r
93     DAPL_CNTR(ia, DCNT_IA_PZ_CREATE);\r
94 \r
95     dat_status = dapls_ib_pd_alloc (ia, pz);\r
96     if ( DAT_SUCCESS != dat_status )\r
97     {\r
98         dapl_pz_dealloc (pz);\r
99         pz = NULL;\r
100     }\r
101 \r
102     *pz_handle = pz;\r
103 \r
104  bail:\r
105     return dat_status;\r
106 }\r