1/*
2 * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5 *
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License").  You may not use this file except in compliance with the
9 * License.  Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
11 *
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
17 * License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
21 */
22/*
23 *	File: 	err_iokit.sub
24 *	Author:	Godfrey van der Linden, Apple Computer, Inc
25 *	Date:	Sept, 2005
26 *
27 *	error codes for Mach and Unix kernels
28 */
29
30#include <TargetConditionals.h>
31#include <IOKit/IOReturn.h>
32#if !TARGET_OS_EMBEDDED
33#include <IOKit/usb/USB.h>
34#include <IOKit/firewire/IOFireWireLib.h>
35#endif
36
37static const struct error_sparse_map err_codes_iokit_common_map[] = {
38    err_code_map_entry(kIOReturnInvalid, kIOReturnInvalid ),
39    err_code_map_entry(kIOReturnError,   kIOReturnNotFound),
40};
41
42static const char * const err_codes_iokit_common[] = {
43    "(iokit/common) invalid - should never be seen",			// 0x001
44
45    "(iokit/common) general error",					// 0x2bc
46    "(iokit/common) can't allocate memory",				// 0x2bd
47    "(iokit/common) resource shortage",					// 0x2be
48    "(iokit/common) error during IPC",					// 0x2bf
49    "(iokit/common) no such device",					// 0x2c0
50    "(iokit/common) privilege violation",				// 0x2c1
51    "(iokit/common) invalid argument",					// 0x2c2
52    "(iokit/common) device read locked",				// 0x2c3
53    "(iokit/common) device write locked",				// 0x2c4
54    "(iokit/common) exclusive access and device already open",		// 0x2c5
55    "(iokit/common) sent/received messages had different msg_id",	// 0x2c6
56    "(iokit/common) unsupported function",				// 0x2c7
57    "(iokit/common) misc. VM failure",					// 0x2c8
58    "(iokit/common) internal error",					// 0x2c9
59    "(iokit/common) General I/O error",					// 0x2ca
60    "(iokit/common) ???",						// 0x2cb
61    "(iokit/common) can't acquire lock",				// 0x2cc
62    "(iokit/common) device not open",					// 0x2cd
63    "(iokit/common) read not supported",				// 0x2ce
64    "(iokit/common) write not supported",				// 0x2cf
65    "(iokit/common) alignment error",					// 0x2d0
66    "(iokit/common) Media Error",					// 0x2d1
67    "(iokit/common) device(s) still open",				// 0x2d2
68    "(iokit/common) rld failure",					// 0x2d3
69    "(iokit/common) DMA failure",					// 0x2d4
70    "(iokit/common) Device Busy",					// 0x2d5
71    "(iokit/common) I/O Timeout",					// 0x2d6
72    "(iokit/common) device offline",					// 0x2d7
73    "(iokit/common) not ready",						// 0x2d8
74    "(iokit/common) device not attached",				// 0x2d9
75    "(iokit/common) no DMA channels left",				// 0x2da
76    "(iokit/common) no space for data",					// 0x2db
77    "(iokit/common) ???",						// 0x2dc
78    "(iokit/common) port already exists",				// 0x2dd
79    "(iokit/common) can't wire down physical memory",			// 0x2de
80    "(iokit/common) no interrupt attached",				// 0x2df
81    "(iokit/common) no DMA frames enqueued",				// 0x2e0
82    "(iokit/common) oversized msg received on interrupt port",		// 0x2e1
83    "(iokit/common) not permitted",					// 0x2e2
84    "(iokit/common) no power to device",				// 0x2e3
85    "(iokit/common) media not present",					// 0x2e4
86    "(iokit/common) media not formatted",				// 0x2e5
87    "(iokit/common) no such mode",					// 0x2e6
88    "(iokit/common) data underrun",					// 0x2e7
89    "(iokit/common) data overrun",					// 0x2e8
90    "(iokit/common) the device is not working properly!",		// 0x2e9
91    "(iokit/common) a completion routine is required",			// 0x2ea
92    "(iokit/common) operation aborted",					// 0x2eb
93    "(iokit/common) bus bandwidth would be exceeded",			// 0x2ec
94    "(iokit/common) device not responding",				// 0x2ed
95    "(iokit/common) isochronous I/O request for distant past!",		// 0x2ee
96    "(iokit/common) isochronous I/O request for distant future",	// 0x2ef
97    "(iokit/common) data was not found",				// 0x2f0
98};
99
100#if !TARGET_OS_EMBEDDED
101static const struct error_sparse_map err_codes_iokit_usb_map[] = {
102    err_code_map_entry(kIOUSBCRCErr, kIOUSBDataToggleErr),
103    err_code_map_entry(kIOUSBPIDCheckErr, kIOUSBWrongPIDErr),
104    err_code_map_entry(kIOUSBReserved1Err, kIOUSBLinkErr),
105    err_code_map_entry(kIOUSBDeviceNotHighSpeed, kIOUSBTransactionTimeout),
106    err_code_map_entry(kIOUSBConfigNotFound,     kIOUSBEndpointNotFound),
107    err_code_map_entry(kIOUSBNotEnoughPowerErr,  kIOUSBUnknownPipeErr),
108};
109
110// error codes with in 0xe0004000
111static const char * const err_codes_iokit_usb[] = {
112    "(iokit/usb) USB Controller Error: bad CRC received",		// 0x001
113    "(iokit/usb) USB Controller Error:  bitstuffing",			// 0x002
114    "(iokit/usb) USB Controller Error: Bad data toggle",		// 0x003
115
116    "(iokit/usb) USB Controller Error: PID CRC error",			// 0x006
117    "(iokit/usb) USB Controller Error: Bad or wrong PID",		// 0x007
118
119    "(iokit/usb) Reserved",						// 0x00a
120    "(iokit/usb) Reserved",						// 0x00b
121    "(iokit/usb) USB Controller: Buffer Overrun",			// 0x00c
122    "(iokit/usb) USB Controller: Buffer Underrun ",			// 0x00d
123    "(iokit/usb) Transaction was not sent on the bus",			// 0x00e
124    "(iokit/usb) Transaction was not sent on the bus",			// 0x00f
125    "(iokit/usb) USB Controller: Link Error",				// 0x010
126
127    "(iokit/usb) device is not high speed, ehci driver returns error",	// 0x049
128    "(iokit/usb) synchronous usb request on the workloop thread",	// 0x04a
129    "(iokit/usb) high speed hub error during split transaction",	// 0x04b
130    "(iokit/usb) user land isoch call with unprepared frame-list",	// 0x04c
131    "(iokit/usb) user land isoch call with unprepared data buffer",	// 0x04d
132    "(iokit/usb) interface ref not recognized",				// 0x050
133    "(iokit/usb) pipe has stalled, error needs to be cleared",		// 0x04f
134    "(iokit/usb) transaction has been returned to the caller",		// 0x050
135    "(iokit/usb) transaction timed out",				// 0x051
136
137    "(iokit/usb) configuration not found",				// 0x056
138    "(iokit/usb) endpoint not found",					// 0x057
139
140    "(iokit/usb) not enough power for selected configuration",		// 0x05d
141    "(iokit/usb) not enough pipes in interface",			// 0x05e
142    "(iokit/usb) no async port",					// 0x05f
143    "(iokit/usb) too many pipes",					// 0x060
144    "(iokit/usb) pipe ref not recognized",				// 0x061
145};
146
147static const struct error_sparse_map err_codes_iokit_fw_map[] = {
148    err_code_map_entry(kIOConfigNoEntry, kIOFireWireBusReset),
149    err_code_map_entry(kIOFireWireBogusDCLProgram, kIOFireWireCompleting),
150    err_code_map_entry(kIOFWMessageServiceIsRequestingClose, kIOFWMessageTopologyChanged),
151};
152
153// error codes with in 0xe0008000
154static const char * const err_codes_iokit_fw[] = {
155    "(iokit/firewire) can't find requested entry in config ROM",	// 001
156    "(iokit/firewire) command pending (internal)",			// 002
157    "(iokit/firewire) DCL callback is final callback (internal)",	// 003
158    "(iokit/firewire) device rom changed, ref is no longer valid",	// 004
159    "(iokit/firewire) kIOFireWireAlreadyRegistered",			// 005
160    "(iokit/firewire) kIOFireWireMultipleTalkers",			// 006
161    "(iokit/firewire) kIOFireWireChannelActive",			// 007
162    "(iokit/firewire) kIOFireWireNoListenerOrTalker",			// 008
163    "(iokit/firewire) kIOFireWireNoChannels",				// 009
164    "(iokit/firewire) requested isoch channel is in use",		// 00A
165    "(iokit/firewire) kIOFireWireSeparateBus",				// 00B
166    "(iokit/firewire) kIOFireWireBadSelfIDs",				// 00C
167    "(iokit/firewire) kIOFireWireLowCableVoltage",			// 00D
168    "(iokit/firewire) kIOFireWireInsufficientPower",			// 00E
169    "(iokit/firewire) all transaction labels are in use",		// 00f
170    "(iokit/firewire) rcode 0, resp_complete",				// 010
171    "(iokit/firewire) rcode 1, reserved",				// 011
172    "(iokit/firewire) rcode 2, reserved",				// 012
173    "(iokit/firewire) rcode 3, reserved",				// 013
174    "(iokit/firewire) rcode 4, resp_conflict_error",			// 014
175    "(iokit/firewire) rcode 5, resp_data_error",			// 015
176    "(iokit/firewire) rcode 6, resp_type_error",			// 016
177    "(iokit/firewire) rcode 7, resp_address_error",			// 017
178    "(iokit/firewire) rcode 8, reserved",				// 018
179    "(iokit/firewire) rcode 9, reserved",				// 019
180    "(iokit/firewire) rcode 10, reserved",				// 01a
181    "(iokit/firewire) rcode 11, reserved",				// 01b
182    "(iokit/firewire) rcode 12, reserved",				// 01c
183    "(iokit/firewire) rcode 13, reserved",				// 01d
184    "(iokit/firewire) rcode 14, reserved",				// 01e
185    "(iokit/firewire) rcode 15, reserved",				// 01f
186    "(iokit/firewire) bus reset occurred, generation does not match",	// 020
187
188    "(iokit/firewire) DCL program contains an illegal DCL",		// 101
189    "(iokit/firewire) kIOFireWireTalkingAndListening",			// 102
190    "(iokit/firewire) system sleep, DCL program stopped",		// 103
191    "(iokit/firewire) command is actively completing (internal)",	// 104
192
193    "(iokit/firewire) device offline, please close device object",	// 7d0
194    "(iokit/firewire) more power may be available",			// 7d1
195    "(iokit/firewire) IOFireWire plane in registry updated",		// 7d2
196};
197
198// error codes with in 0xe0020000
199static const char * const err_codes_iokit_bluetooth[] = {
200    "(iokit/bluetooth) unknown error",					// 000
201    "(iokit/bluetooth) interrupted operation, hardware reset",		// 001
202    "(iokit/bluetooth) connection to device already exists",		// 002
203    "(iokit/bluetooth) no HCI controller",				// 003
204    "(iokit/bluetooth) changing power states is unsupported",		// 004
205};
206#endif /* !TARGET_OS_EMBEDDED */
207
208static const struct error_sparse_map err_iokit_sub_map[] = {
209    err_sub_map_entry(sub_iokit_common,          sub_iokit_pmu),
210    err_sub_map_entry(sub_iokit_vendor_specific, sub_iokit_reserved)
211};
212
213#define err_iokit_null_sub	{ "(iokit/?", 0 }
214static const struct error_subsystem err_iokit_sub[] =
215{
216    /* 0 */ {
217	"(iokit/common)",			// 0xe0000000
218	errlib_count(err_codes_iokit_common),
219	err_codes_iokit_common,
220	err_codes_iokit_common_map,
221	errlib_count(err_codes_iokit_common_map),
222    },
223#if !TARGET_OS_EMBEDDED
224    /*  1 */ {
225	"(iokit/usb)",				// 0xe0004000
226	errlib_count(err_codes_iokit_usb),
227	err_codes_iokit_usb,
228	err_codes_iokit_usb_map,
229	errlib_count(err_codes_iokit_usb_map),
230    },
231    /*  2 */ {
232	"(iokit/firewire)",			// 0xe0008000
233	errlib_count(err_codes_iokit_fw),
234	err_codes_iokit_fw,
235	err_codes_iokit_fw_map,
236	errlib_count(err_codes_iokit_fw_map),
237    },
238#endif /* !TARGET_OS_EMBEDDED */
239    /*  3 */ err_iokit_null_sub,		// 0xe000c000
240    /*  4 */ { "(iokit/blkstorage)", 0 },	// 0xe0010000
241    /*  5 */ { "(iokit/graphics)",   0 },	// 0xe0014000
242    /*  6 */ err_iokit_null_sub,		// 0xe0018000
243    /*  7 */ err_iokit_null_sub,		// 0xe001c000
244#if !TARGET_OS_EMBEDDED
245    /*  8 */ {
246	"(iokit/bluetooth)",			// 0xe0020000
247	errlib_count(err_codes_iokit_bluetooth),
248	err_codes_iokit_bluetooth,
249	NULL, 0,
250    },
251#endif /* !TARGET_OS_EMBEDDED */
252    /*  9 */ { "(iokit/pmu)",        0 },	// 0xe0024000
253    /* -2 */ { "(iokit/vendor)",     0 },	// 0xe0028000
254    /* -1 */ { "(iokit/reserved)",   0 },	// 0xe002c000
255};
256
257
258/* vim: set ft=c ts=8 sw=4: */
259