[HCA] Add client reregister support.
[mirror/winof/.git] / hw / mt23108 / vapi / Hca / verbs / common / vapi_common.c
1 /*\r
2  * Copyright (c) 2004-2005 Mellanox Technologies Ltd.  All rights reserved.\r
3  *\r
4  * This software is available to you under the OpenIB.org BSD license\r
5  * below:\r
6  *\r
7  *     Redistribution and use in source and binary forms, with or\r
8  *     without modification, are permitted provided that the following\r
9  *     conditions are met:\r
10  *\r
11  *      - Redistributions of source code must retain the above\r
12  *        copyright notice, this list of conditions and the following\r
13  *        disclaimer.\r
14  *\r
15  *      - Redistributions in binary form must reproduce the above\r
16  *        copyright notice, this list of conditions and the following\r
17  *        disclaimer in the documentation and/or other materials\r
18  *        provided with the distribution.\r
19  *\r
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
24  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
25  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
26  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
27  * SOFTWARE.\r
28  *\r
29  * $Id$\r
30  */\r
31 \r
32 #ifdef MT_KERNEL\r
33  /* Taken care via  vapi_common.h -> mtl_common.h -> ... ->\r
34   *                 -> /lib/modules/N.N.N/build/include/linux/string.h\r
35   * extern int    strlen(const char*);\r
36   * extern char* (char*, const char*);\r
37   */\r
38 #else\r
39 # include <string.h>\r
40 #endif\r
41 #include "vapi_common.h"\r
42 \r
43 const char* VAPI_strerror( VAPI_ret_t errnum)\r
44 {\r
45   switch (errnum) {\r
46 #define VAPI_ERROR_INFO(A, B, C) case A: return C;\r
47     VAPI_ERROR_LIST\r
48 #undef VAPI_ERROR_INFO\r
49     default: return "VAPI_UNKNOWN_ERROR";\r
50   }\r
51 \r
52 }\r
53 const char* VAPI_strerror_sym( VAPI_ret_t errnum)\r
54 {\r
55   switch (errnum) {\r
56 #define VAPI_ERROR_INFO(A, B, C) case A: return #A;\r
57     VAPI_ERROR_LIST\r
58 #undef VAPI_ERROR_INFO\r
59     default: return "VAPI_UNKNOWN_ERROR";\r
60   }\r
61 }\r
62 \r
63 \r
64 \r
65 static char*  safe_append(\r
66   char*       cbuf,\r
67   char*       buf_end,\r
68   u_int32_t   mask,\r
69   u_int32_t   flag,\r
70   const char* flag_sym\r
71 )\r
72 {\r
73   if (mask & flag)\r
74   {\r
75     int  l = (int)strlen(flag_sym);\r
76     if (cbuf + l + 2 < buf_end)\r
77     {\r
78       strcpy(cbuf, flag_sym);\r
79       cbuf += l;\r
80       *cbuf++ = '+';\r
81       *cbuf = '\0';\r
82     }\r
83     else\r
84     {\r
85       cbuf = NULL;\r
86     }\r
87   }\r
88   return cbuf;\r
89 } /* safe_append */\r
90 \r
91 \r
92 static  void end_mask_sym(char* buf, char* cbuf, int bufsz)\r
93 {\r
94   if (bufsz > 0)\r
95   {\r
96     if (buf == cbuf)\r
97     {\r
98       *cbuf = '\0'; /* empty string */\r
99     }\r
100     else if (cbuf == 0) /* was truncated */\r
101     {\r
102        int  l = (int)strlen(buf);\r
103        buf[l - 1] = '>';\r
104     }\r
105   }\r
106 } /* end_mask_sym */\r
107 \r
108 \r
109 #define INIT_BUF_SKIP(skipped_pfx)     \\r
110   int    skip = (int)strlen(skipped_pfx);   \\r
111   char*  cbuf     = buf;               \\r
112   char*  buf_end  = buf + bufsz;       \\r
113   *buf = '\0';\r
114 \r
115 \r
116 #define SAFE_APPEND(e) \\r
117   if (cbuf) { cbuf = safe_append(cbuf, buf_end, mask, e, #e + skip); }\r
118 \r
119 const char* VAPI_hca_cap_sym(char* buf, int bufsz, u_int32_t mask)\r
120 {\r
121   INIT_BUF_SKIP("VAPI_")\r
122 \r
123   SAFE_APPEND(VAPI_RESIZE_OUS_WQE_CAP)\r
124   SAFE_APPEND(VAPI_BAD_PKEY_COUNT_CAP)\r
125   SAFE_APPEND(VAPI_BAD_QKEY_COUNT_CAP)\r
126   SAFE_APPEND(VAPI_RAW_MULTI_CAP)\r
127   SAFE_APPEND(VAPI_AUTO_PATH_MIG_CAP)\r
128   SAFE_APPEND(VAPI_CHANGE_PHY_PORT_CAP)\r
129   SAFE_APPEND(VAPI_UD_AV_PORT_ENFORCE_CAP)\r
130   SAFE_APPEND(VAPI_CURR_QP_STATE_MOD_CAP)\r
131   SAFE_APPEND(VAPI_SHUTDOWN_PORT_CAP)\r
132   SAFE_APPEND(VAPI_INIT_TYPE_CAP)\r
133   SAFE_APPEND(VAPI_PORT_ACTIVE_EV_CAP)\r
134   SAFE_APPEND(VAPI_SYS_IMG_GUID_CAP)\r
135   SAFE_APPEND(VAPI_RC_RNR_NAK_GEN_CAP)\r
136 \r
137   end_mask_sym(buf, cbuf, bufsz);\r
138   return buf;\r
139 } /* VAPI_hca_cap_sym */\r
140 \r
141 \r
142 const char* VAPI_hca_attr_mask_sym(char* buf, int bufsz, u_int32_t mask)\r
143 {\r
144   INIT_BUF_SKIP("HCA_ATTR_")\r
145   SAFE_APPEND(HCA_ATTR_IS_SM)\r
146   SAFE_APPEND(HCA_ATTR_IS_SNMP_TUN_SUP)\r
147   SAFE_APPEND(HCA_ATTR_IS_DEV_MGT_SUP)\r
148   SAFE_APPEND(HCA_ATTR_IS_VENDOR_CLS_SUP)\r
149    SAFE_APPEND(HCA_ATTR_IS_CLIENT_REREGISTRATION_SUP)\r
150   SAFE_APPEND(HCA_ATTR_MAX)\r
151   end_mask_sym(buf, cbuf, bufsz);\r
152   return buf;\r
153 } /* VAPI_hca_attr_mask_sym */\r
154 \r
155 \r
156 const char* VAPI_qp_attr_mask_sym(char* buf, int bufsz, u_int32_t mask)\r
157 {\r
158   INIT_BUF_SKIP("QP_ATTR_")\r
159 \r
160   SAFE_APPEND(QP_ATTR_QP_STATE)\r
161   SAFE_APPEND(QP_ATTR_EN_SQD_ASYN_NOTIF)\r
162   SAFE_APPEND(QP_ATTR_QP_NUM)\r
163   SAFE_APPEND(QP_ATTR_REMOTE_ATOMIC_FLAGS)\r
164   SAFE_APPEND(QP_ATTR_PKEY_IX)\r
165   SAFE_APPEND(QP_ATTR_PORT)\r
166   SAFE_APPEND(QP_ATTR_QKEY)\r
167   SAFE_APPEND(QP_ATTR_AV)\r
168   SAFE_APPEND(QP_ATTR_PATH_MTU)\r
169   SAFE_APPEND(QP_ATTR_TIMEOUT)\r
170   SAFE_APPEND(QP_ATTR_RETRY_COUNT)\r
171   SAFE_APPEND(QP_ATTR_RNR_RETRY)\r
172   SAFE_APPEND(QP_ATTR_RQ_PSN)\r
173   SAFE_APPEND(QP_ATTR_QP_OUS_RD_ATOM)\r
174   SAFE_APPEND(QP_ATTR_ALT_PATH)\r
175   SAFE_APPEND(QP_ATTR_RSRV_1)\r
176   SAFE_APPEND(QP_ATTR_RSRV_2)\r
177   SAFE_APPEND(QP_ATTR_RSRV_3)\r
178   SAFE_APPEND(QP_ATTR_RSRV_4)\r
179   SAFE_APPEND(QP_ATTR_RSRV_5)\r
180   SAFE_APPEND(QP_ATTR_RSRV_6)\r
181   //SAFE_APPEND(QP_ATTR_ALT_TIMEOUT)\r
182   //SAFE_APPEND(QP_ATTR_ALT_RETRY_COUNT)\r
183   //SAFE_APPEND(QP_ATTR_ALT_RNR_RETRY)\r
184   //SAFE_APPEND(QP_ATTR_ALT_PKEY_IX)\r
185   //SAFE_APPEND(QP_ATTR_ALT_PORT)\r
186   SAFE_APPEND(QP_ATTR_MIN_RNR_TIMER)\r
187   SAFE_APPEND(QP_ATTR_SQ_PSN)\r
188   SAFE_APPEND(QP_ATTR_OUS_DST_RD_ATOM)\r
189   SAFE_APPEND(QP_ATTR_PATH_MIG_STATE)\r
190   SAFE_APPEND(QP_ATTR_CAP)\r
191   SAFE_APPEND(QP_ATTR_DEST_QP_NUM)\r
192   end_mask_sym(buf, cbuf, bufsz);\r
193   return buf;\r
194 } /* VAPI_qp_attr_mask_sym */\r
195 \r
196 \r
197 const char* VAPI_mrw_acl_mask_sym(char* buf, int bufsz, u_int32_t mask)\r
198 {\r
199   INIT_BUF_SKIP("VAPI_EN_")\r
200 \r
201   SAFE_APPEND(VAPI_EN_LOCAL_WRITE)\r
202   SAFE_APPEND(VAPI_EN_REMOTE_WRITE)\r
203   SAFE_APPEND(VAPI_EN_REMOTE_READ)\r
204   SAFE_APPEND(VAPI_EN_REMOTE_ATOM)\r
205   SAFE_APPEND(VAPI_EN_MEMREG_BIND)\r
206   end_mask_sym(buf, cbuf, bufsz);\r
207   return buf;\r
208 } /* VAPI_mrw_acl_mask_sym */\r
209 \r
210 \r
211 const char* VAPI_mr_change_mask_sym(char* buf, int bufsz, u_int32_t mask)\r
212 {\r
213   INIT_BUF_SKIP("VAPI_MR_")\r
214 \r
215   SAFE_APPEND(VAPI_MR_CHANGE_TRANS)\r
216   SAFE_APPEND(VAPI_MR_CHANGE_PD)\r
217   SAFE_APPEND(VAPI_MR_CHANGE_ACL)\r
218   end_mask_sym(buf, cbuf, bufsz);\r
219   return buf;\r
220 } /* VAPI_mr_change_mask_sym */\r
221 \r
222 \r
223 const char* VAPI_rdma_atom_acl_mask_sym(char* buf, int bufsz, u_int32_t mask)\r
224 {\r
225   INIT_BUF_SKIP("VAPI_EN_REM_")\r
226   SAFE_APPEND(VAPI_EN_REM_WRITE)\r
227   SAFE_APPEND(VAPI_EN_REM_READ)\r
228   SAFE_APPEND(VAPI_EN_REM_ATOMIC_OP)\r
229   end_mask_sym(buf, cbuf, bufsz);\r
230   return buf;\r
231 } /* VAPI_rdma_atom_acl_sym */\r
232 \r
233 \r
234 #define CASE_SETSTR(e)  case e: s = #e; break;\r
235 static  const char*  UnKnown = "UnKnown";\r
236 \r
237 const char* VAPI_atomic_cap_sym(VAPI_atomic_cap_t e)\r
238 {\r
239   const char*  s = UnKnown;\r
240   switch (e)\r
241   {\r
242     CASE_SETSTR(VAPI_ATOMIC_CAP_NONE)\r
243     CASE_SETSTR(VAPI_ATOMIC_CAP_HCA)\r
244     CASE_SETSTR(VAPI_ATOMIC_CAP_GLOB)\r
245     default: ;\r
246   }\r
247   return s;\r
248 } /* VAPI_atomic_cap_sym */\r
249 \r
250 \r
251 const char* VAPI_sig_type_sym(VAPI_sig_type_t e)\r
252 {\r
253   const char*  s = UnKnown;\r
254   switch (e)\r
255   {\r
256     CASE_SETSTR(VAPI_SIGNAL_ALL_WR)\r
257     CASE_SETSTR(VAPI_SIGNAL_REQ_WR)\r
258     default: ;\r
259   }\r
260   return s;\r
261 } /* VAPI_sig_type_sym */\r
262 \r
263 \r
264 const char* VAPI_ts_type_sym(VAPI_ts_type_t e)\r
265 {\r
266   const char*  s = UnKnown;\r
267   switch (e)\r
268   {\r
269     CASE_SETSTR(VAPI_TS_RC)\r
270     CASE_SETSTR(VAPI_TS_RD)\r
271     CASE_SETSTR(VAPI_TS_UC)\r
272     CASE_SETSTR(VAPI_TS_UD)\r
273     CASE_SETSTR(VAPI_TS_RAW)\r
274     default: ;\r
275   }\r
276   return s;\r
277 } /* VAPI_ts_type_sym */\r
278 \r
279 \r
280 const char* VAPI_qp_state_sym(VAPI_qp_state_t e)\r
281 {\r
282   const char*  s = UnKnown;\r
283   switch (e)\r
284   {\r
285     CASE_SETSTR(VAPI_RESET)\r
286     CASE_SETSTR(VAPI_INIT)\r
287     CASE_SETSTR(VAPI_RTR)\r
288     CASE_SETSTR(VAPI_RTS)\r
289     CASE_SETSTR(VAPI_SQD)\r
290     CASE_SETSTR(VAPI_SQE)\r
291     CASE_SETSTR(VAPI_ERR)\r
292     default: ;\r
293   }\r
294   return s;\r
295 } /* VAPI_qp_state_sym */\r
296 \r
297 \r
298 const char* VAPI_mig_state_sym(VAPI_mig_state_t e)\r
299 {\r
300   const char*  s = UnKnown;\r
301   switch (e)\r
302   {\r
303     CASE_SETSTR(VAPI_MIGRATED)\r
304     CASE_SETSTR(VAPI_REARM)\r
305     CASE_SETSTR(VAPI_ARMED)\r
306     default: ;\r
307   }\r
308   return s;\r
309 } /* VAPI_mig_state_sym */\r
310 \r
311 \r
312 const char* VAPI_special_qp_sym(VAPI_special_qp_t e)\r
313 {\r
314   const char*  s = UnKnown;\r
315   switch (e)\r
316   {\r
317     CASE_SETSTR(VAPI_REGULAR_QP)\r
318     CASE_SETSTR(VAPI_SMI_QP)\r
319     CASE_SETSTR(VAPI_GSI_QP)\r
320     CASE_SETSTR(VAPI_RAW_IPV6_QP)\r
321     CASE_SETSTR(VAPI_RAW_ETY_QP)\r
322     default: ;\r
323   }\r
324   return s;\r
325 } /* VAPI_special_qp_sym */\r
326 \r
327 \r
328 const char* VAPI_mrw_type_sym(VAPI_mrw_type_t e)\r
329 {\r
330   const char*  s = UnKnown;\r
331   switch (e)\r
332   {\r
333     CASE_SETSTR(VAPI_MR)\r
334     CASE_SETSTR(VAPI_MW)\r
335     CASE_SETSTR(VAPI_MPR)\r
336     CASE_SETSTR(VAPI_MSHAR)\r
337     default: ;\r
338   }\r
339   return s;\r
340 } /* VAPI_mrw_type_sym */\r
341 \r
342 \r
343 const char* VAPI_remote_node_addr_sym(VAPI_remote_node_addr_type_t e)\r
344 {\r
345   const char*  s = UnKnown;\r
346   switch (e)\r
347   {\r
348     CASE_SETSTR(VAPI_RNA_RD)\r
349     CASE_SETSTR(VAPI_RNA_UD)\r
350     CASE_SETSTR(VAPI_RNA_RAW_ETY)\r
351     CASE_SETSTR(VAPI_RNA_RAW_IPV6)\r
352     default: ;\r
353   }\r
354   return s;\r
355 } /* VAPI_remote_node_addr_sym */\r
356 \r
357 \r
358 const char* VAPI_wr_opcode_sym(VAPI_wr_opcode_t e)\r
359 {\r
360   const char*  s = UnKnown;\r
361   switch (e)\r
362   {\r
363     CASE_SETSTR(VAPI_RDMA_WRITE)\r
364     CASE_SETSTR(VAPI_RDMA_WRITE_WITH_IMM)\r
365     CASE_SETSTR(VAPI_SEND)\r
366     CASE_SETSTR(VAPI_SEND_WITH_IMM)\r
367     CASE_SETSTR(VAPI_RDMA_READ)\r
368     CASE_SETSTR(VAPI_ATOMIC_CMP_AND_SWP)\r
369     CASE_SETSTR(VAPI_ATOMIC_FETCH_AND_ADD)\r
370     CASE_SETSTR(VAPI_RECEIVE)\r
371     default: ;\r
372   }\r
373   return s;\r
374 } /* VAPI_wr_opcode_sym */\r
375 \r
376 \r
377 const char* VAPI_cqe_opcode_sym(VAPI_cqe_opcode_t e)\r
378 {\r
379   const char*  s = UnKnown;\r
380   switch (e)\r
381   {\r
382     CASE_SETSTR(VAPI_CQE_SQ_SEND_DATA)\r
383     CASE_SETSTR(VAPI_CQE_SQ_RDMA_WRITE)\r
384     CASE_SETSTR(VAPI_CQE_SQ_RDMA_READ)\r
385     CASE_SETSTR(VAPI_CQE_SQ_COMP_SWAP)\r
386     CASE_SETSTR(VAPI_CQE_SQ_FETCH_ADD)\r
387     CASE_SETSTR(VAPI_CQE_SQ_BIND_MRW)\r
388     CASE_SETSTR(VAPI_CQE_RQ_SEND_DATA)\r
389     CASE_SETSTR(VAPI_CQE_RQ_RDMA_WITH_IMM)\r
390     default: ;\r
391   }\r
392   return s;\r
393 } /* VAPI_cqe_opcode_sym */\r
394 \r
395 \r
396 const char* VAPI_wc_status_sym(VAPI_wc_status_t e)\r
397 {\r
398   const char*  s = UnKnown;\r
399   switch (e)\r
400   {\r
401     CASE_SETSTR(VAPI_SUCCESS)\r
402     CASE_SETSTR(VAPI_LOC_LEN_ERR)\r
403     CASE_SETSTR(VAPI_LOC_QP_OP_ERR)\r
404     CASE_SETSTR(VAPI_LOC_EE_OP_ERR)\r
405     CASE_SETSTR(VAPI_LOC_PROT_ERR)\r
406     CASE_SETSTR(VAPI_WR_FLUSH_ERR)\r
407     CASE_SETSTR(VAPI_MW_BIND_ERR)\r
408     CASE_SETSTR(VAPI_BAD_RESP_ERR)\r
409     CASE_SETSTR(VAPI_LOC_ACCS_ERR)\r
410     CASE_SETSTR(VAPI_REM_INV_REQ_ERR)\r
411     CASE_SETSTR(VAPI_REM_ACCESS_ERR)\r
412     CASE_SETSTR(VAPI_REM_OP_ERR)\r
413     CASE_SETSTR(VAPI_RETRY_EXC_ERR)\r
414     CASE_SETSTR(VAPI_RNR_RETRY_EXC_ERR)\r
415     CASE_SETSTR(VAPI_LOC_RDD_VIOL_ERR)\r
416     CASE_SETSTR(VAPI_REM_INV_RD_REQ_ERR)\r
417     CASE_SETSTR(VAPI_REM_ABORT_ERR)\r
418     CASE_SETSTR(VAPI_INV_EECN_ERR)\r
419     CASE_SETSTR(VAPI_INV_EEC_STATE_ERR)\r
420     CASE_SETSTR(VAPI_COMP_FATAL_ERR)\r
421     CASE_SETSTR(VAPI_COMP_GENERAL_ERR)\r
422     default: ;\r
423   }\r
424   return s;\r
425 } /* VAPI_wc_status_sym */\r
426 \r
427 \r
428 const char* VAPI_comp_type_sym(VAPI_comp_type_t e)\r
429 {\r
430   const char*  s = UnKnown;\r
431   switch (e)\r
432   {\r
433     CASE_SETSTR(VAPI_SIGNALED)\r
434     CASE_SETSTR(VAPI_UNSIGNALED)\r
435     default: ;\r
436   }\r
437   return s;\r
438 } /* VAPI_comp_type_sym */\r
439 \r
440 \r
441 const char* VAPI_cq_notif_sym(VAPI_cq_notif_type_t e)\r
442 {\r
443   const char*  s = UnKnown;\r
444   switch (e)\r
445   {\r
446     CASE_SETSTR(VAPI_NOTIF_NONE)\r
447     CASE_SETSTR(VAPI_SOLIC_COMP)\r
448     CASE_SETSTR(VAPI_NEXT_COMP)\r
449     default: ;\r
450   }\r
451   return s;\r
452 } /* VAPI_cq_notif_sym */\r
453 \r
454 \r
455 const char* VAPI_event_record_sym(VAPI_event_record_type_t e)\r
456 {\r
457   const char*  s = UnKnown;\r
458   switch (e)\r
459   {\r
460     CASE_SETSTR(VAPI_QP_PATH_MIGRATED)\r
461     CASE_SETSTR(VAPI_EEC_PATH_MIGRATED)\r
462     CASE_SETSTR(VAPI_QP_COMM_ESTABLISHED)\r
463     CASE_SETSTR(VAPI_EEC_COMM_ESTABLISHED)\r
464     CASE_SETSTR(VAPI_SEND_QUEUE_DRAINED)\r
465     CASE_SETSTR(VAPI_CQ_ERROR)\r
466     CASE_SETSTR(VAPI_LOCAL_WQ_INV_REQUEST_ERROR)\r
467     CASE_SETSTR(VAPI_LOCAL_WQ_ACCESS_VIOL_ERROR)\r
468     CASE_SETSTR(VAPI_LOCAL_WQ_CATASTROPHIC_ERROR)\r
469     CASE_SETSTR(VAPI_PATH_MIG_REQ_ERROR)\r
470     CASE_SETSTR(VAPI_LOCAL_EEC_CATASTROPHIC_ERROR)\r
471     CASE_SETSTR(VAPI_LOCAL_CATASTROPHIC_ERROR)\r
472     CASE_SETSTR(VAPI_PORT_ERROR)\r
473     CASE_SETSTR(VAPI_PORT_ACTIVE)\r
474     CASE_SETSTR(VAPI_RECEIVE_QUEUE_DRAINED)\r
475     CASE_SETSTR(VAPI_SRQ_LIMIT_REACHED)\r
476     CASE_SETSTR(VAPI_SRQ_CATASTROPHIC_ERROR)\r
477     default: ;\r
478   }\r
479   return s;\r
480 } /* VAPI_event_record_sym */\r
481 \r
482 const char* VAPI_event_syndrome_sym(VAPI_event_syndrome_t e)\r
483 {\r
484   const char*  s = UnKnown;\r
485   switch (e)\r
486   {\r
487       CASE_SETSTR(VAPI_EV_SYNDROME_NONE)\r
488       CASE_SETSTR(VAPI_CATAS_ERR_FW_INTERNAL)\r
489       CASE_SETSTR(VAPI_CATAS_ERR_EQ_OVERFLOW)\r
490       CASE_SETSTR(VAPI_CATAS_ERR_MISBEHAVED_UAR_PAGE)\r
491       CASE_SETSTR(VAPI_CATAS_ERR_UPLINK_BUS_ERR)\r
492       CASE_SETSTR(VAPI_CATAS_ERR_HCA_DDR_DATA_ERR)\r
493       CASE_SETSTR(VAPI_CATAS_ERR_INTERNAL_PARITY_ERR)\r
494       CASE_SETSTR(VAPI_CATAS_ERR_MASTER_ABORT)\r
495       CASE_SETSTR(VAPI_CATAS_ERR_GO_BIT)\r
496       CASE_SETSTR(VAPI_CATAS_ERR_CMD_TIMEOUT)\r
497       CASE_SETSTR(VAPI_CATAS_ERR_FATAL_CR)\r
498       CASE_SETSTR(VAPI_CATAS_ERR_FATAL_TOKEN)\r
499       CASE_SETSTR(VAPI_CATAS_ERR_GENERAL)\r
500       CASE_SETSTR(VAPI_CQ_ERR_OVERRUN)\r
501       CASE_SETSTR(VAPI_CQ_ERR_ACCESS_VIOL)\r
502       CASE_SETSTR(VAPI_CATAS_ERR_FATAL_EXTERNAL)\r
503     default: ;\r
504   }\r
505   return s;\r
506 }\r
507 \r
508 \r
509 #if defined(TEST_VAPI_COMMON)\r
510 /* compile via:\r
511   gcc -g -DTEST_VAPI_COMMON -I.. -I$MTHOME/include -o /tmp/x vapi_common.c\r
512  */\r
513 int main(int argc, char** argv)\r
514 {\r
515   char    buffer[100];\r
516   char*   cbuffer = &buffer[0];\r
517   u_int32_t m = VAPI_BAD_PKEY_COUNT_CAP | VAPI_AUTO_PATH_MIG_CAP;\r
518   printf("m=%s\n", VAPI_hca_cap_sym(buffer, sizeof(buffer), m));\r
519   printf("trunc1: m=%s\n", VAPI_hca_cap_sym(buffer, 1, m));\r
520   printf("trunc10: m=%s\n", VAPI_hca_cap_sym(buffer, 10, m));\r
521 \r
522   return 0;\r
523 }\r
524 #endif\r