123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938 |
- /* machine generated. Once. TODO: write the vendor support to bring this in as we should.
- * But the errors almost never change, so there's no hurry.
- */
- #include <u.h>
- #include <libc.h>
- typedef struct Err Err;
- struct Err
- {
- int n;
- char *s;
- };
- static Err scsierrs[] = {
- {0x0000, "no additional sense information"},
- {0x0001, "filemark detected"},
- {0x0002, "end-of-partition/medium detected"},
- {0x0003, "setmark detected"},
- {0x0004, "beginning-of-partition/medium detected"},
- {0x0005, "end-of-data detected"},
- {0x0006, "i/o process terminated"},
- {0x0007, "programmable early warning detected"},
- {0x0011, "audio play operation in progress"},
- {0x0012, "audio play operation paused"},
- {0x0013, "audio play operation successfully completed"},
- {0x0014, "audio play operation stopped due to error"},
- {0x0015, "no current audio status to return"},
- {0x0016, "operation in progress"},
- {0x0017, "cleaning requested"},
- {0x0018, "erase operation in progress"},
- {0x0019, "locate operation in progress"},
- {0x001a, "rewind operation in progress"},
- {0x001b, "set capacity operation in progress"},
- {0x001c, "verify operation in progress"},
- {0x0100, "no index/sector signal"},
- {0x0200, "no seek complete"},
- {0x0300, "peripheral device write fault"},
- {0x0301, "no write current"},
- {0x0302, "excessive write errors"},
- {0x0400, "logical unit not ready, cause not reportable"},
- {0x0401, "logical unit is in process of becoming ready"},
- {0x0402, "logical unit not ready, initializing command required"},
- {0x0403, "logical unit not ready, manual intervention required"},
- {0x0404, "logical unit not ready, format in progress"},
- {0x0405, "logical unit not ready, rebuild in progress"},
- {0x0406, "logical unit not ready, recalculation in progress"},
- {0x0407, "logical unit not ready, operation in progress"},
- {0x0408, "logical unit not ready, long write in progress"},
- {0x0409, "logical unit not ready, self-test in progress"},
- {0x040a, "logical unit not accessible, asymmetric access state transition"},
- {0x040b, "logical unit not accessible, target port in standby state"},
- {0x040c, "logical unit not accessible, target port in unavailable state"},
- {0x0410, "logical unit not ready, auxiliary memory not accessible"},
- {0x0411, "logical unit not ready, notify (enable spinup) required"},
- {0x0412, "logical unit not ready, offline"},
- {0x0413, "logical unit not ready, sa creation in progress"},
- {0x0414, "logical unit not ready, space allocation in progress"},
- {0x0415, "logical unit not ready, robotics disabled"},
- {0x0416, "logical unit not ready, configuration required"},
- {0x0417, "logical unit not ready, calibration required"},
- {0x0418, "logical unit not ready, a door is open"},
- {0x0419, "logical unit not ready, operating in sequential mode"},
- {0x0500, "logical unit does not respond to selection"},
- {0x0600, "no reference position found"},
- {0x0700, "multiple peripheral devices selected"},
- {0x0800, "logical unit communication failure"},
- {0x0801, "logical unit communication time-out"},
- {0x0802, "logical unit communication parity error"},
- {0x0803, "logical unit communication crc error (ultra-dma/32)"},
- {0x0804, "unreachable copy target"},
- {0x0900, "track following error"},
- {0x0901, "tracking servo failure"},
- {0x0902, "focus servo failure"},
- {0x0903, "spindle servo failure"},
- {0x0904, "head select fault"},
- {0x0a00, "error log overflow"},
- {0x0b00, "warning"},
- {0x0b01, "warning - specified temperature exceeded"},
- {0x0b02, "warning - enclosure degraded"},
- {0x0b03, "warning - background self-test failed"},
- {0x0b04, "warning - background pre-scan detected medium error"},
- {0x0b05, "warning - background medium scan detected medium error"},
- {0x0b06, "warning - non-volatile cache now volatile"},
- {0x0b07, "warning - degraded power to non-volatile cache"},
- {0x0b08, "warning - power loss expected"},
- {0x0c00, "write error"},
- {0x0c01, "write error - recovered with auto reallocation"},
- {0x0c02, "write error - auto reallocation failed"},
- {0x0c03, "write error - recommend reassignment"},
- {0x0c04, "compression check miscompare error"},
- {0x0c05, "data expansion occurred during compression"},
- {0x0c06, "block not compressible"},
- {0x0c07, "write error - recovery needed"},
- {0x0c08, "write error - recovery failed"},
- {0x0c09, "write error - loss of streaming"},
- {0x0c0a, "write error - padding blocks added"},
- {0x0c0b, "auxiliary memory write error"},
- {0x0c0c, "write error - unexpected unsolicited data"},
- {0x1000, "id crc or ecc error"},
- {0x1001, "logical block guard check failed"},
- {0x1002, "logical block application tag check failed"},
- {0x1003, "logical block reference tag check failed"},
- {0x1100, "unrecovered read error"},
- {0x1101, "read retries exhausted"},
- {0x1102, "error too long to correct"},
- {0x1103, "multiple read errors"},
- {0x1104, "unrecovered read error - auto reallocate failed"},
- {0x1105, "l-ec uncorrectable error"},
- {0x1106, "circ unrecovered error"},
- {0x1107, "data re-synchronization error"},
- {0x1108, "incomplete block read"},
- {0x1109, "no gap found"},
- {0x110a, "miscorrected error"},
- {0x110b, "unrecovered read error - recommend reassignment"},
- {0x110c, "unrecovered read error - recommend rewrite the data"},
- {0x1110, "error reading isrc number"},
- {0x1111, "read error - loss of streaming"},
- {0x1112, "auxiliary memory read error"},
- {0x1113, "read error - failed retransmission request"},
- {0x1114, "read error - lba marked bad by application client"},
- {0x1200, "address mark not found for id field"},
- {0x1300, "address mark not found for data field"},
- {0x1400, "recorded entity not found"},
- {0x1401, "record not found"},
- {0x1402, "filemark or setmark not found"},
- {0x1403, "end-of-data not found"},
- {0x1404, "block sequence error"},
- {0x1405, "record not found - recommend reassignment"},
- {0x1406, "record not found - data auto-reallocated"},
- {0x1407, "locate operation failure"},
- {0x1500, "random positioning error"},
- {0x1501, "mechanical positioning error"},
- {0x1502, "positioning error detected by read of medium"},
- {0x1600, "data synchronization mark error"},
- {0x1601, "data sync error - data rewritten"},
- {0x1602, "data sync error - recommend rewrite"},
- {0x1603, "data sync error - data auto-reallocated"},
- {0x1604, "data sync error - recommend reassignment"},
- {0x1700, "recovered data with no error correction applied"},
- {0x1701, "recovered data with retries"},
- {0x1702, "recovered data with positive head offset"},
- {0x1703, "recovered data with negative head offset"},
- {0x1704, "recovered data with retries and/or circ applied"},
- {0x1705, "recovered data using previous sector id"},
- {0x1706, "recovered data without ecc - data auto-reallocated"},
- {0x1707, "recovered data without ecc - recommend reassignment"},
- {0x1708, "recovered data without ecc - recommend rewrite"},
- {0x1709, "recovered data without ecc - data rewritten"},
- {0x1800, "recovered data with error correction applied"},
- {0x1801, "recovered data with error corr. & retries applied"},
- {0x1802, "recovered data - data auto-reallocated"},
- {0x1803, "recovered data with circ"},
- {0x1804, "recovered data with l-ec"},
- {0x1805, "recovered data - recommend reassignment"},
- {0x1806, "recovered data - recommend rewrite"},
- {0x1807, "recovered data with ecc - data rewritten"},
- {0x1808, "recovered data with linking"},
- {0x1900, "defect list error"},
- {0x1901, "defect list not available"},
- {0x1902, "defect list error in primary list"},
- {0x1903, "defect list error in grown list"},
- {0x1a00, "parameter list length error"},
- {0x1b00, "synchronous data transfer error"},
- {0x1c00, "defect list not found"},
- {0x1c01, "primary defect list not found"},
- {0x1c02, "grown defect list not found"},
- {0x2000, "invalid command operation code"},
- {0x2001, "access denied - initiator pending-enrolled"},
- {0x2002, "access denied - no access rights"},
- {0x2003, "access denied - invalid mgmt id key"},
- {0x2004, "illegal command while in write capable state"},
- {0x2005, "obsolete"},
- {0x2006, "illegal command while in explicit address mode"},
- {0x2007, "illegal command while in implicit address mode"},
- {0x2008, "access denied - enrollment conflict"},
- {0x2009, "access denied - invalid lu identifier"},
- {0x200a, "access denied - invalid proxy token"},
- {0x200b, "access denied - acl lun conflict"},
- {0x2100, "logical block address out of range"},
- {0x2101, "invalid element address"},
- {0x2102, "invalid address for write"},
- {0x2103, "invalid write crossing layer jump"},
- {0x2200, "illegal function (use 20 00, 24 00, or 26 00)"},
- {0x2400, "invalid field in cdb"},
- {0x2401, "cdb decryption error"},
- {0x2402, "obsolete"},
- {0x2403, "obsolete"},
- {0x2404, "security audit value frozen"},
- {0x2405, "security working key frozen"},
- {0x2406, "nonce not unique"},
- {0x2407, "nonce timestamp out of range"},
- {0x2408, "invalid xcdb"},
- {0x2500, "logical unit not supported"},
- {0x2600, "invalid field in parameter list"},
- {0x2601, "parameter not supported"},
- {0x2602, "parameter value invalid"},
- {0x2603, "threshold parameters not supported"},
- {0x2604, "invalid release of persistent reservation"},
- {0x2605, "data decryption error"},
- {0x2606, "too many target descriptors"},
- {0x2607, "unsupported target descriptor type code"},
- {0x2608, "too many segment descriptors"},
- {0x2609, "unsupported segment descriptor type code"},
- {0x260a, "unexpected inexact segment"},
- {0x260b, "inline data length exceeded"},
- {0x260c, "invalid operation for copy source or destination"},
- {0x2610, "data decryption key fail limit reached"},
- {0x2611, "incomplete key-associated data set"},
- {0x2612, "vendor specific key reference not found"},
- {0x2700, "write protected"},
- {0x2701, "hardware write protected"},
- {0x2702, "logical unit software write protected"},
- {0x2703, "associated write protect"},
- {0x2704, "persistent write protect"},
- {0x2705, "permanent write protect"},
- {0x2706, "conditional write protect"},
- {0x2707, "space allocation failed write protect"},
- {0x2800, "not ready to ready change, medium may have changed"},
- {0x2801, "import or export element accessed"},
- {0x2802, "format-layer may have changed"},
- {0x2803, "import/export element accessed, medium changed"},
- {0x2900, "power on, reset, or bus device reset occurred"},
- {0x2901, "power on occurred"},
- {0x2902, "scsi bus reset occurred"},
- {0x2903, "bus device reset function occurred"},
- {0x2904, "device internal reset"},
- {0x2905, "transceiver mode changed to single-ended"},
- {0x2906, "transceiver mode changed to lvd"},
- {0x2907, "i_t nexus loss occurred"},
- {0x2a00, "parameters changed"},
- {0x2a01, "mode parameters changed"},
- {0x2a02, "log parameters changed"},
- {0x2a03, "reservations preempted"},
- {0x2a04, "reservations released"},
- {0x2a05, "registrations preempted"},
- {0x2a06, "asymmetric access state changed"},
- {0x2a07, "implicit asymmetric access state transition failed"},
- {0x2a08, "priority changed"},
- {0x2a09, "capacity data has changed"},
- {0x2a0a, "error history i_t nexus cleared"},
- {0x2a0b, "error history snapshot released"},
- {0x2a0c, "error recovery attributes have changed"},
- {0x2a10, "timestamp changed"},
- {0x2a11, "data encryption parameters changed by another i_t nexus"},
- {0x2a12, "data encryption parameters changed by vendor specific event"},
- {0x2a13, "data encryption key instance counter has changed"},
- {0x2a14, "sa creation capabilities data has changed"},
- {0x2b00, "copy cannot execute since host cannot disconnect"},
- {0x2c00, "command sequence error"},
- {0x2c01, "too many windows specified"},
- {0x2c02, "invalid combination of windows specified"},
- {0x2c03, "current program area is not empty"},
- {0x2c04, "current program area is empty"},
- {0x2c05, "illegal power condition request"},
- {0x2c06, "persistent prevent conflict"},
- {0x2c07, "previous busy status"},
- {0x2c08, "previous task set full status"},
- {0x2c09, "previous reservation conflict status"},
- {0x2c0a, "partition or collection contains user objects"},
- {0x2c0b, "not reserved"},
- {0x3000, "incompatible medium installed"},
- {0x3001, "cannot read medium - unknown format"},
- {0x3002, "cannot read medium - incompatible format"},
- {0x3003, "cleaning cartridge installed"},
- {0x3004, "cannot write medium - unknown format"},
- {0x3005, "cannot write medium - incompatible format"},
- {0x3006, "cannot format medium - incompatible medium"},
- {0x3007, "cleaning failure"},
- {0x3008, "cannot write - application code mismatch"},
- {0x3009, "current session not fixated for append"},
- {0x300a, "cleaning request rejected"},
- {0x300c, "worm medium - overwrite attempted"},
- {0x3010, "medium not formatted"},
- {0x3011, "incompatible volume type"},
- {0x3012, "incompatible volume qualifier"},
- {0x3013, "cleaning volume expired"},
- {0x3100, "medium format corrupted"},
- {0x3101, "format command failed"},
- {0x3102, "zoned formatting failed due to spare linking"},
- {0x3200, "no defect spare location available"},
- {0x3201, "defect list update failure"},
- {0x3300, "tape length error"},
- {0x3400, "enclosure failure"},
- {0x3500, "enclosure services failure"},
- {0x3501, "unsupported enclosure function"},
- {0x3502, "enclosure services unavailable"},
- {0x3503, "enclosure services transfer failure"},
- {0x3504, "enclosure services transfer refused"},
- {0x3505, "enclosure services checksum error"},
- {0x3600, "ribbon, ink, or toner failure"},
- {0x3700, "rounded parameter"},
- {0x3800, "event status notification"},
- {0x3802, "esn - power management class event"},
- {0x3804, "esn - media class event"},
- {0x3806, "esn - device busy class event"},
- {0x3807, "thin provisioning soft threshold reached"},
- {0x3900, "saving parameters not supported"},
- {0x3a00, "medium not present"},
- {0x3a01, "medium not present - tray closed"},
- {0x3a02, "medium not present - tray open"},
- {0x3a03, "medium not present - loadable"},
- {0x3a04, "medium not present - medium auxiliary memory accessible"},
- {0x3b00, "sequential positioning error"},
- {0x3b01, "tape position error at beginning-of-medium"},
- {0x3b02, "tape position error at end-of-medium"},
- {0x3b03, "tape or electronic vertical forms unit not ready"},
- {0x3b04, "slew failure"},
- {0x3b05, "paper jam"},
- {0x3b06, "failed to sense top-of-form"},
- {0x3b07, "failed to sense bottom-of-form"},
- {0x3b08, "reposition error"},
- {0x3b09, "read past end of medium"},
- {0x3b0a, "read past beginning of medium"},
- {0x3b0b, "position past end of medium"},
- {0x3b0c, "position past beginning of medium"},
- {0x3b11, "medium magazine not accessible"},
- {0x3b12, "medium magazine removed"},
- {0x3b13, "medium magazine inserted"},
- {0x3b14, "medium magazine locked"},
- {0x3b15, "medium magazine unlocked"},
- {0x3b16, "mechanical positioning or changer error"},
- {0x3b17, "read past end of user object"},
- {0x3b18, "element disabled"},
- {0x3b19, "element enabled"},
- {0x3b1a, "data transfer device removed"},
- {0x3b1b, "data transfer device inserted"},
- {0x4000, "ram failure (should use 40 nn)"},
- {0x4100, "data path failure (should use 40 nn)"},
- {0x4200, "power-on or self-test failure (should use 40 nn)"},
- {0x4300, "message error"},
- {0x4400, "internal target failure"},
- {0x4471, "ata device failed set features"},
- {0x4500, "select or reselect failure"},
- {0x4600, "unsuccessful soft reset"},
- {0x4700, "scsi parity error"},
- {0x4701, "data phase crc error detected"},
- {0x4702, "scsi parity error detected during st data phase"},
- {0x4703, "information unit iucrc error detected"},
- {0x4704, "asynchronous information protection error detected"},
- {0x4705, "protocol service crc error"},
- {0x4706, "phy test function in progress"},
- {0x4800, "initiator detected error message received"},
- {0x4900, "invalid message error"},
- {0x4a00, "command phase error"},
- {0x4b00, "data phase error"},
- {0x4b01, "invalid target port transfer tag received"},
- {0x4b02, "too much write data"},
- {0x4b03, "ack/nak timeout"},
- {0x4b04, "nak received"},
- {0x4b05, "data offset error"},
- {0x4b06, "initiator response timeout"},
- {0x4b07, "connection lost"},
- {0x4c00, "logical unit failed self-configuration"},
- {0x5000, "write append error"},
- {0x5001, "write append position error"},
- {0x5002, "position error related to timing"},
- {0x5100, "erase failure"},
- {0x5101, "erase failure - incomplete erase operation detected"},
- {0x5200, "cartridge fault"},
- {0x5300, "media load or eject failed"},
- {0x5301, "unload tape failure"},
- {0x5302, "medium removal prevented"},
- {0x5303, "medium removal prevented by data transfer element"},
- {0x5304, "medium thread or unthread failure"},
- {0x5400, "scsi to host system interface failure"},
- {0x5500, "system resource failure"},
- {0x5501, "system buffer full"},
- {0x5502, "insufficient reservation resources"},
- {0x5503, "insufficient resources"},
- {0x5504, "insufficient registration resources"},
- {0x5505, "insufficient access control resources"},
- {0x5506, "auxiliary memory out of space"},
- {0x5507, "quota error"},
- {0x5508, "maximum number of supplemental decryption keys exceeded"},
- {0x5509, "medium auxiliary memory not accessible"},
- {0x550a, "data currently unavailable"},
- {0x550b, "insufficient power for operation"},
- {0x5700, "unable to recover table-of-contents"},
- {0x5800, "generation does not exist"},
- {0x5900, "updated block read"},
- {0x5a00, "operator request or state change input"},
- {0x5a01, "operator medium removal request"},
- {0x5a02, "operator selected write protect"},
- {0x5a03, "operator selected write permit"},
- {0x5b00, "log exception"},
- {0x5b01, "threshold condition met"},
- {0x5b02, "log counter at maximum"},
- {0x5b03, "log list codes exhausted"},
- {0x5c00, "rpl status change"},
- {0x5c01, "spindles synchronized"},
- {0x5c02, "spindles not synchronized"},
- {0x6000, "lamp failure"},
- {0x6100, "video acquisition error"},
- {0x6101, "unable to acquire video"},
- {0x6102, "out of focus"},
- {0x6200, "scan head positioning error"},
- {0x6300, "end of user area encountered on this track"},
- {0x6301, "packet does not fit in available space"},
- {0x6400, "illegal mode for this track"},
- {0x6401, "invalid packet size"},
- {0x6500, "voltage fault"},
- {0x6600, "automatic document feeder cover up"},
- {0x6601, "automatic document feeder lift up"},
- {0x6602, "document jam in automatic document feeder"},
- {0x6603, "document miss feed automatic in document feeder"},
- {0x6700, "configuration failure"},
- {0x6701, "configuration of incapable logical units failed"},
- {0x6702, "add logical unit failed"},
- {0x6703, "modification of logical unit failed"},
- {0x6704, "exchange of logical unit failed"},
- {0x6705, "remove of logical unit failed"},
- {0x6706, "attachment of logical unit failed"},
- {0x6707, "creation of logical unit failed"},
- {0x6708, "assign failure occurred"},
- {0x6709, "multiply assigned logical unit"},
- {0x670a, "set target port groups command failed"},
- {0x670b, "ata device feature not enabled"},
- {0x6800, "logical unit not configured"},
- {0x6900, "data loss on logical unit"},
- {0x6901, "multiple logical unit failures"},
- {0x6902, "parity/data mismatch"},
- {0x6a00, "informational, refer to log"},
- {0x6b00, "state change has occurred"},
- {0x6b01, "redundancy level got better"},
- {0x6b02, "redundancy level got worse"},
- {0x6c00, "rebuild failure occurred"},
- {0x7100, "decompression exception long algorithm id"},
- {0x7200, "session fixation error"},
- {0x7201, "session fixation error writing lead-in"},
- {0x7202, "session fixation error writing lead-out"},
- {0x7203, "session fixation error - incomplete track in session"},
- {0x7204, "empty or partially written reserved track"},
- {0x7205, "no more track reservations allowed"},
- {0x7206, "rmz extension is not allowed"},
- {0x7207, "no more test zone extensions are allowed"},
- {0x7300, "cd control error"},
- {0x7301, "power calibration area almost full"},
- {0x7302, "power calibration area is full"},
- {0x7303, "power calibration area error"},
- {0x7304, "program memory area update failure"},
- {0x7305, "program memory area is full"},
- {0x7306, "rma/pma is almost full"},
- {0x7310, "current power calibration area almost full"},
- {0x7311, "current power calibration area is full"},
- {0x7317, "rdz is full"},
- {0x7400, "security error"},
- {0x7401, "unable to decrypt data"},
- {0x7402, "unencrypted data encountered while decrypting"},
- {0x7403, "incorrect data encryption key"},
- {0x7404, "cryptographic integrity validation failed"},
- {0x7405, "error decrypting data"},
- {0x7406, "unknown signature verification key"},
- {0x7407, "encryption parameters not useable"},
- {0x7408, "digital signature validation failure"},
- {0x7409, "encryption mode mismatch on read"},
- {0x740a, "encrypted block not raw read enabled"},
- {0x740b, "incorrect encryption parameters"},
- {0x740c, "unable to decrypt parameter list"},
- {0x7410, "sa creation parameter value invalid"},
- {0x7411, "sa creation parameter value rejected"},
- {0x7412, "invalid sa usage"},
- {0x7421, "data encryption configuration prevented"},
- {0x7430, "sa creation parameter not supported"},
- {0x7440, "authentication failed"},
- {0x7461, "external data encryption key manager access error"},
- {0x7462, "external data encryption key manager error"},
- {0x7463, "external data encryption key not found"},
- {0x7464, "external data encryption request not authorized"},
- {0x7471, "logical unit access not authorized"},
- {0x7479, "security conflict in translated device"},
- };
- char*
- scsierrmsg(int n)
- {
- int i;
- for(i = 0; i < nelem(scsierrs); i++)
- if(scsierrs[i].n == n)
- return scsierrs[i].s;
- return "scsi error";
- }
|