1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright (c) 1999-2000 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27 /*
28 * t1394_errmsg.c
29 * Utility function that targets can use to convert an error code into a
30 * printable string.
31 */
32
33 #include <sys/1394/t1394.h>
34 #include <sys/1394/s1394.h>
35 #include <sys/1394/cmd1394.h>
36 #include <sys/1394/ixl1394.h>
37
38 static const char *error_string[] = {
39 "CMD1394_CMDSUCCESS: Command Success", /* 0 */
40 "", /* -1 */
41 "", /* -2 */
42 "", /* -3 */
43 "", /* -4 */
44 "", /* -5 */
45 "", /* -6 */
46 "", /* -7 */
47 "", /* -8 */
48 "", /* -9 */
49 "CMD1394_ENULL_MBLK: NULL mblk pointer", /* -10 */
50 "CMD1394_EMBLK_TOO_SMALL: Mblk too small", /* -11 */
51 "CMD1394_ESTALE_GENERATION: Stale generation", /* -12 */
52 "CMD1394_EDEVICE_REMOVED: Device removed", /* -13 */
53 "CMD1394_EINVALID_CONTEXT: Invalid context", /* -14 */
54 "CMD1394_EINVALID_COMMAND: Invalid command", /* -15 */
55 "CMD1394_EUNKNOWN_ERROR: Unknown error", /* -16 */
56 "CMD1394_NOSTATUS: No status", /* -17 */
57 "CMD1394_EFATAL_ERROR: Fatal error", /* -18 */
58 "CMD1394_ENO_ATREQ: Unable to send ATREQ", /* -19 */
59 "CMD1394_EDEVICE_ERROR: Device error", /* -20 */
60 "", /* -21 */
61 "", /* -22 */
62 "", /* -23 */
63 "", /* -24 */
64 "", /* -25 */
65 "", /* -26 */
66 "", /* -27 */
67 "", /* -28 */
68 "", /* -29 */
69 "CMD1394_EDEVICE_BUSY: Device busy", /* -30 */
70 "CMD1394_ERETRIES_EXCEEDED: Too many retries", /* -31 */
71 "CMD1394_ETYPE_ERROR: Resp/ack type error", /* -32 */
72 "CMD1394_EDATA_ERROR: Resp/ack data error", /* -33 */
73 "CMD1394_EBUSRESET: Bus reset", /* -34 */
74 "CMD1394_EADDRESS_ERROR: Address error", /* -35 */
75 "CMD1394_ETIMEOUT: Command timed out", /* -36 */
76 "CMD1394_ERSRC_CONFLICT: Resource conflict" /* -37 */
77 };
78
79 static const char *ixl_compilation_error_string[] = {
80 "IXL1394_EMEM_ALLOC_FAIL: Memory allocation failed", /* -301 */
81 "IXL1394_EBAD_IXL_OPCODE: Bad opcode", /* -302 */
82 "IXL1394_EFRAGMENT_OFLO: Descriptor block overflow", /* -303 */
83 "IXL1394_ENO_DATA_PKTS: No descriptor blocks", /* -304 */
84 "IXL1394_EMISPLACED_RECV: Misplaced receive", /* -305 */
85 "IXL1394_EMISPLACED_SEND: Misplaced send", /* -306 */
86 "IXL1394_EPKT_HDR_MISSING: Packet header missing", /* -307 */
87 "IXL1394_ENULL_BUFFER_ADDR: NULL buffer address", /* -308 */
88 "IXL1394_EPKTSIZE_MAX_OFLO: Packet > 0xFFFF bytes", /* -309 */
89 "IXL1394_EPKTSIZE_RATIO: Improper packet length/count", /* -310 */
90 "IXL1394_EUNAPPLIED_SET_CMD: Unused set command", /* -311 */
91 "IXL1394_EDUPLICATE_SET_CMD: Multiple set commands", /* -312 */
92 "IXL1394_EJUMP_NOT_TO_LABEL: Jump destination not a label", /* -313 */
93 "IXL1394_EUPDATE_DISALLOWED: Update not allowed ", /* -314 */
94 "IXL1394_EBAD_SKIPMODE: Invalid skip mode", /* -315 */
95 "IXL1394_EWRONG_XR_CMD_MODE: Inapproriate xmit/recv mode", /* -316 */
96 "IXL1394_EINTERNAL_ERROR: Internal error", /* -317 */
97 "IXL1394_ENOT_IMPLEMENTED: Unimplemented error", /* -318 */
98 "IXL1394_EOPCODE_MISMATCH: Opcode mismatch", /* -319 */
99 "IXL1394_EOPCODE_DISALLOWED: Opcode disallowed for update", /* -320 */
100 "IXL1394_EBAD_SKIP_LABEL: Skip label destination not a label",
101 "IXL1394_EXFER_BUF_MISSING: Missing buffer in transfer command",
102 "IXL1394_EXFER_BUF_CNT_DIFF: Packet count differs in new buffer",
103 "IXL1394_EORIG_IXL_CORRUPTED: Original IXL program corrupted",
104 "IXL1394_ECOUNT_MISMATCH: IXL command count difference", /* -325 */
105 "IXL1394_EPRE_UPD_DMALOST: DMA path lost before update", /* -326 */
106 "IXL1394_EPOST_UPD_DMALOST: DMA path lost after update", /* -327 */
107 "IXL1394_ERISK_PROHIBITS_UPD: Risk prohibits update" /* -328 */
108 };
109
110 static const char *addr_error_string[] = {
111 "T1394_EALLOC_ADDR: Unable to alloc 1394 address block", /* -400 */
112 };
113
114 static const char *cec_error_string[] = {
115 "T1394_ENO_BANDWIDTH: Bandwidth allocation failed", /* -500 */
116 "T1394_ENO_CHANNEL: Channel allocation failed", /* -501 */
117 "T1394_ETARGET: One or more callbacks failed in isoch setup" /* -502 */
118 };
119
120 static const char *idma_error_string[] = {
121 "T1394_EIDMA_NO_RESRCS: No DMA resources", /* -600 */
122 "T1394_EIDMA_CONFLICT: Conflicting arguments" /* -601 */
123 };
124
125 static const char *cfgrom_error_string[] = {
126 "T1394_ECFGROM_FULL: Config ROM is full", /* -700 */
127 "T1394_EINVALID_PARAM: Invalid parameter in call", /* -701 */
128 "T1394_EINVALID_CONTEXT: Invalid context for call", /* -702 */
129 "T1394_NOERROR: No error" /* -703 */
130 };
131
132 #define T1394_ERRMSG_EMPTY_STRING ""
133
134 /*
135 * Function: t1394_errmsg()
136 * Input(s): result Result code
137 * flags The flags parameter is unused (for now)
138 *
139 * Output(s): const string; empty string if invalid result code is passed in
140 *
141 * Description: t1394_errmsg() returns a string corresponding the error code
142 */
143 /* ARGSUSED */
144 const char *
t1394_errmsg(int result,uint_t flags)145 t1394_errmsg(int result, uint_t flags)
146 {
147 int err;
148 const char *msg = T1394_ERRMSG_EMPTY_STRING;
149
150 if (result > 0) {
151 return (T1394_ERRMSG_EMPTY_STRING);
152 }
153
154 result = -result;
155
156 if ((result >= -CMD1394_ERR_FIRST) && (result <= -CMD1394_ERR_LAST)) {
157 err = result - (-CMD1394_ERR_FIRST);
158 msg = error_string[err];
159 } else if ((result >= -IXL1394_COMP_ERR_FIRST) &&
160 (result <= -IXL1394_COMP_ERR_LAST)) {
161 err = result - (-IXL1394_COMP_ERR_FIRST);
162 msg = ixl_compilation_error_string[err];
163 } else if ((result >= -T1394_EADDR_FIRST) &&
164 (result <= -T1394_EADDR_LAST)) {
165 err = result - (-T1394_EADDR_FIRST);
166 msg = addr_error_string[err];
167 } else if ((result >= -T1394_CEC_ERR_FIRST) &&
168 (result <= -T1394_CEC_ERR_LAST)) {
169 err = result - (-T1394_CEC_ERR_FIRST);
170 msg = cec_error_string[err];
171 } else if ((result >= -T1394_IDMA_ERR_FIRST) &&
172 (result <= -T1394_IDMA_ERR_LAST)) {
173 err = result - (-T1394_IDMA_ERR_FIRST);
174 msg = idma_error_string[err];
175 } else if ((result >= -T1394_ECFG_FIRST) &&
176 (result <= -T1394_ECFG_LAST)) {
177 err = result - (-T1394_ECFG_FIRST);
178 msg = cfgrom_error_string[err];
179 }
180
181 return (msg);
182 }
183