xref: /freebsd-src/contrib/ofed/libibverbs/enum_strs.c (revision 87181516ef48be852d5e5fee53c6e0dbfc62f21e)
1*d6b92ffaSHans Petter Selasky /*
2*d6b92ffaSHans Petter Selasky  * Copyright (c) 2008 Lawrence Livermore National Laboratory
3*d6b92ffaSHans Petter Selasky  *
4*d6b92ffaSHans Petter Selasky  * This software is available to you under a choice of one of two
5*d6b92ffaSHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
6*d6b92ffaSHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
7*d6b92ffaSHans Petter Selasky  * COPYING in the main directory of this source tree, or the
8*d6b92ffaSHans Petter Selasky  * OpenIB.org BSD license below:
9*d6b92ffaSHans Petter Selasky  *
10*d6b92ffaSHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
11*d6b92ffaSHans Petter Selasky  *     without modification, are permitted provided that the following
12*d6b92ffaSHans Petter Selasky  *     conditions are met:
13*d6b92ffaSHans Petter Selasky  *
14*d6b92ffaSHans Petter Selasky  *      - Redistributions of source code must retain the above
15*d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
16*d6b92ffaSHans Petter Selasky  *        disclaimer.
17*d6b92ffaSHans Petter Selasky  *
18*d6b92ffaSHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
19*d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
20*d6b92ffaSHans Petter Selasky  *        disclaimer in the documentation and/or other materials
21*d6b92ffaSHans Petter Selasky  *        provided with the distribution.
22*d6b92ffaSHans Petter Selasky  *
23*d6b92ffaSHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24*d6b92ffaSHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25*d6b92ffaSHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26*d6b92ffaSHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27*d6b92ffaSHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28*d6b92ffaSHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29*d6b92ffaSHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30*d6b92ffaSHans Petter Selasky  * SOFTWARE.
31*d6b92ffaSHans Petter Selasky  */
32*d6b92ffaSHans Petter Selasky 
33*d6b92ffaSHans Petter Selasky #include <infiniband/verbs.h>
34*d6b92ffaSHans Petter Selasky 
ibv_node_type_str(enum ibv_node_type node_type)35*d6b92ffaSHans Petter Selasky const char *ibv_node_type_str(enum ibv_node_type node_type)
36*d6b92ffaSHans Petter Selasky {
37*d6b92ffaSHans Petter Selasky 	static const char *const node_type_str[] = {
38*d6b92ffaSHans Petter Selasky 		[IBV_NODE_CA]		= "InfiniBand channel adapter",
39*d6b92ffaSHans Petter Selasky 		[IBV_NODE_SWITCH]	= "InfiniBand switch",
40*d6b92ffaSHans Petter Selasky 		[IBV_NODE_ROUTER]	= "InfiniBand router",
41*d6b92ffaSHans Petter Selasky 		[IBV_NODE_RNIC]		= "iWARP NIC",
42*d6b92ffaSHans Petter Selasky 		[IBV_NODE_USNIC]	= "usNIC",
43*d6b92ffaSHans Petter Selasky 		[IBV_NODE_USNIC_UDP]	= "usNIC UDP",
44*d6b92ffaSHans Petter Selasky 	};
45*d6b92ffaSHans Petter Selasky 
46*d6b92ffaSHans Petter Selasky 	if (node_type < IBV_NODE_CA || node_type > IBV_NODE_USNIC_UDP)
47*d6b92ffaSHans Petter Selasky 		return "unknown";
48*d6b92ffaSHans Petter Selasky 
49*d6b92ffaSHans Petter Selasky 	return node_type_str[node_type];
50*d6b92ffaSHans Petter Selasky }
51*d6b92ffaSHans Petter Selasky 
ibv_port_state_str(enum ibv_port_state port_state)52*d6b92ffaSHans Petter Selasky const char *ibv_port_state_str(enum ibv_port_state port_state)
53*d6b92ffaSHans Petter Selasky {
54*d6b92ffaSHans Petter Selasky 	static const char *const port_state_str[] = {
55*d6b92ffaSHans Petter Selasky 		[IBV_PORT_NOP]		= "no state change (NOP)",
56*d6b92ffaSHans Petter Selasky 		[IBV_PORT_DOWN]		= "down",
57*d6b92ffaSHans Petter Selasky 		[IBV_PORT_INIT]		= "init",
58*d6b92ffaSHans Petter Selasky 		[IBV_PORT_ARMED]	= "armed",
59*d6b92ffaSHans Petter Selasky 		[IBV_PORT_ACTIVE]	= "active",
60*d6b92ffaSHans Petter Selasky 		[IBV_PORT_ACTIVE_DEFER]	= "active defer"
61*d6b92ffaSHans Petter Selasky 	};
62*d6b92ffaSHans Petter Selasky 
63*d6b92ffaSHans Petter Selasky 	if (port_state < IBV_PORT_NOP || port_state > IBV_PORT_ACTIVE_DEFER)
64*d6b92ffaSHans Petter Selasky 		return "unknown";
65*d6b92ffaSHans Petter Selasky 
66*d6b92ffaSHans Petter Selasky 	return port_state_str[port_state];
67*d6b92ffaSHans Petter Selasky }
68*d6b92ffaSHans Petter Selasky 
ibv_event_type_str(enum ibv_event_type event)69*d6b92ffaSHans Petter Selasky const char *ibv_event_type_str(enum ibv_event_type event)
70*d6b92ffaSHans Petter Selasky {
71*d6b92ffaSHans Petter Selasky 	static const char *const event_type_str[] = {
72*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_CQ_ERR]		= "CQ error",
73*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_QP_FATAL]		= "local work queue catastrophic error",
74*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_QP_REQ_ERR]		= "invalid request local work queue error",
75*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_QP_ACCESS_ERR]	= "local access violation work queue error",
76*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_COMM_EST]		= "communication established",
77*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_SQ_DRAINED]		= "send queue drained",
78*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_PATH_MIG]		= "path migrated",
79*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_PATH_MIG_ERR]	= "path migration request error",
80*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_DEVICE_FATAL]	= "local catastrophic error",
81*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_PORT_ACTIVE]		= "port active",
82*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_PORT_ERR]		= "port error",
83*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_LID_CHANGE]		= "LID change",
84*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_PKEY_CHANGE]		= "P_Key change",
85*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_SM_CHANGE]		= "SM change",
86*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_SRQ_ERR]		= "SRQ catastrophic error",
87*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_SRQ_LIMIT_REACHED]	= "SRQ limit reached",
88*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_QP_LAST_WQE_REACHED]	= "last WQE reached",
89*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_CLIENT_REREGISTER]	= "client reregistration",
90*d6b92ffaSHans Petter Selasky 		[IBV_EVENT_GID_CHANGE]		= "GID table change"
91*d6b92ffaSHans Petter Selasky 	};
92*d6b92ffaSHans Petter Selasky 
93*d6b92ffaSHans Petter Selasky 	if (event < IBV_EVENT_CQ_ERR || event > IBV_EVENT_GID_CHANGE)
94*d6b92ffaSHans Petter Selasky 		return "unknown";
95*d6b92ffaSHans Petter Selasky 
96*d6b92ffaSHans Petter Selasky 	return event_type_str[event];
97*d6b92ffaSHans Petter Selasky }
98*d6b92ffaSHans Petter Selasky 
ibv_wc_status_str(enum ibv_wc_status status)99*d6b92ffaSHans Petter Selasky const char *ibv_wc_status_str(enum ibv_wc_status status)
100*d6b92ffaSHans Petter Selasky {
101*d6b92ffaSHans Petter Selasky 	static const char *const wc_status_str[] = {
102*d6b92ffaSHans Petter Selasky 		[IBV_WC_SUCCESS]		= "success",
103*d6b92ffaSHans Petter Selasky 		[IBV_WC_LOC_LEN_ERR]		= "local length error",
104*d6b92ffaSHans Petter Selasky 		[IBV_WC_LOC_QP_OP_ERR]		= "local QP operation error",
105*d6b92ffaSHans Petter Selasky 		[IBV_WC_LOC_EEC_OP_ERR]		= "local EE context operation error",
106*d6b92ffaSHans Petter Selasky 		[IBV_WC_LOC_PROT_ERR]		= "local protection error",
107*d6b92ffaSHans Petter Selasky 		[IBV_WC_WR_FLUSH_ERR]		= "Work Request Flushed Error",
108*d6b92ffaSHans Petter Selasky 		[IBV_WC_MW_BIND_ERR]		= "memory management operation error",
109*d6b92ffaSHans Petter Selasky 		[IBV_WC_BAD_RESP_ERR]		= "bad response error",
110*d6b92ffaSHans Petter Selasky 		[IBV_WC_LOC_ACCESS_ERR]		= "local access error",
111*d6b92ffaSHans Petter Selasky 		[IBV_WC_REM_INV_REQ_ERR]	= "remote invalid request error",
112*d6b92ffaSHans Petter Selasky 		[IBV_WC_REM_ACCESS_ERR]		= "remote access error",
113*d6b92ffaSHans Petter Selasky 		[IBV_WC_REM_OP_ERR]		= "remote operation error",
114*d6b92ffaSHans Petter Selasky 		[IBV_WC_RETRY_EXC_ERR]		= "transport retry counter exceeded",
115*d6b92ffaSHans Petter Selasky 		[IBV_WC_RNR_RETRY_EXC_ERR]	= "RNR retry counter exceeded",
116*d6b92ffaSHans Petter Selasky 		[IBV_WC_LOC_RDD_VIOL_ERR]	= "local RDD violation error",
117*d6b92ffaSHans Petter Selasky 		[IBV_WC_REM_INV_RD_REQ_ERR]	= "remote invalid RD request",
118*d6b92ffaSHans Petter Selasky 		[IBV_WC_REM_ABORT_ERR]		= "aborted error",
119*d6b92ffaSHans Petter Selasky 		[IBV_WC_INV_EECN_ERR]		= "invalid EE context number",
120*d6b92ffaSHans Petter Selasky 		[IBV_WC_INV_EEC_STATE_ERR]	= "invalid EE context state",
121*d6b92ffaSHans Petter Selasky 		[IBV_WC_FATAL_ERR]		= "fatal error",
122*d6b92ffaSHans Petter Selasky 		[IBV_WC_RESP_TIMEOUT_ERR]	= "response timeout error",
123*d6b92ffaSHans Petter Selasky 		[IBV_WC_GENERAL_ERR]		= "general error"
124*d6b92ffaSHans Petter Selasky 	};
125*d6b92ffaSHans Petter Selasky 
126*d6b92ffaSHans Petter Selasky 	if (status < IBV_WC_SUCCESS || status > IBV_WC_GENERAL_ERR)
127*d6b92ffaSHans Petter Selasky 		return "unknown";
128*d6b92ffaSHans Petter Selasky 
129*d6b92ffaSHans Petter Selasky 	return wc_status_str[status];
130*d6b92ffaSHans Petter Selasky }
131