[DAPL2] DAPL Counters & 2.0.3 extensions to support counter retrieval.
[mirror/winof/.git] / ulp / dapl2 / dapl / common / dapl_evd_un_async_error_callb.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_evd_un_async_error_callback.c\r
31  *\r
32  * PURPOSE: implements Unaffiliated callbacks from verbs\r
33  *\r
34  * $Id:$\r
35  **********************************************************************/\r
36 \r
37 #include "dapl.h"\r
38 #include "dapl_evd_util.h"\r
39 #include "dapl_adapter_util.h"\r
40 \r
41 /*\r
42  * dapl_evd_un_async_error_callback\r
43  *\r
44  * The callback function registered with verbs for unaffiliated async errors\r
45  *\r
46  * Input:\r
47  *      ib_cm_handle,\r
48  *      ib_cm_event\r
49  *      cause_ptr\r
50  *      context (evd)\r
51  *\r
52  * Output:\r
53  *      None\r
54  *\r
55  */\r
56 \r
57 void \r
58 dapl_evd_un_async_error_callback (\r
59         IN      ib_hca_handle_t         ib_hca_handle,\r
60         IN      ib_error_record_t *     cause_ptr,\r
61         IN      void *                  context)\r
62 \r
63 {\r
64     DAPL_EVD            *async_evd;\r
65     DAT_EVENT_NUMBER    async_event;\r
66     DAT_RETURN          dat_status;\r
67 \r
68     dapl_dbg_log (DAPL_DBG_TYPE_CALLBACK | DAPL_DBG_TYPE_EXCEPTION,\r
69                   "dapl_evd_un_async_error_callback (%p, %p, %p)\n", \r
70                   ib_hca_handle, \r
71                   cause_ptr, \r
72                   context);\r
73 \r
74     if ( NULL == context )\r
75     {\r
76         dapl_os_panic ("NULL == context\n");\r
77         return;\r
78     }\r
79 \r
80     async_evd = (DAPL_EVD *) context;\r
81     DAPL_CNTR(async_evd->header.owner_ia, DCNT_IA_ASYNC_ERROR);\r
82 \r
83     dat_status = dapls_ib_get_async_event(cause_ptr, &async_event);\r
84 \r
85     if ( dat_status == DAT_SUCCESS )\r
86     {\r
87         /*\r
88          * If dapls_ib_get_async_event is not successful,\r
89          * an event has been generated by the provider that\r
90          * we are not interested in. E.g. LINK_UP.\r
91          */\r
92         dapls_evd_post_async_error_event( async_evd,\r
93                                           async_event,\r
94                                           async_evd->header.owner_ia);\r
95     }\r
96     dapl_dbg_log (DAPL_DBG_TYPE_CALLBACK | DAPL_DBG_TYPE_EXCEPTION,\r
97                   "dapl_evd_un_async_error_callback () returns\n");\r
98 }\r
99 \r