Annotation of embedaddon/smartmontools/atacmdnames.cpp, revision 1.1

1.1     ! misho       1: /*
        !             2:  * atacmdnames.cpp
        !             3:  *
        !             4:  * This module is based on the T13/1532D Volume 1 Revision 3 (ATA/ATAPI-7)
        !             5:  * specification, which is available from http://www.t13.org/#FTP_site
        !             6:  *
        !             7:  * Home page of code is: http://smartmontools.sourceforge.net
        !             8:  * Address of support mailing list: smartmontools-support@lists.sourceforge.net
        !             9:  *
        !            10:  * Copyright (C) 2003-8 Philip Williams
        !            11:  *
        !            12:  * This program is free software; you can redistribute it and/or modify
        !            13:  * it under the terms of the GNU General Public License as published by
        !            14:  * the Free Software Foundation; either version 2, or (at your option)
        !            15:  * any later version.
        !            16:  *
        !            17:  * You should have received a copy of the GNU General Public License
        !            18:  * (for example COPYING); if not, write to the Free
        !            19:  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
        !            20:  *
        !            21:  */
        !            22: 
        !            23: #include "atacmdnames.h"
        !            24: #include <stdlib.h>
        !            25: #include <stdio.h>
        !            26: 
        !            27: #define COMMAND_TABLE_SIZE 256
        !            28: 
        !            29: const char *atacmdnames_c_cvsid="$Id: atacmdnames.cpp,v 1.17 2008/03/29 23:41:28 shattered Exp $" ATACMDNAMES_H_CVSID;
        !            30: 
        !            31: const char cmd_reserved[]        = "[RESERVED]";
        !            32: const char cmd_vendor_specific[] = "[VENDOR SPECIFIC]";
        !            33: const char cmd_reserved_sa[]     = "[RESERVED FOR SERIAL ATA]";
        !            34: const char cmd_reserved_cf[]     = "[RESERVED FOR COMPACTFLASH ASSOCIATION]";
        !            35: const char cmd_reserved_mcpt[]   = "[RESERVED FOR MEDIA CARD PASS THROUGH]";
        !            36: const char cmd_recalibrate_ret4[]= "RECALIBRATE [RET-4]";
        !            37: const char cmd_seek_ret4[]       = "SEEK [RET-4]";
        !            38: 
        !            39: const char *command_table[COMMAND_TABLE_SIZE] = {
        !            40: /*-------------------------------------------------- 00h-0Fh -----*/
        !            41:   "NOP",
        !            42:   cmd_reserved,
        !            43:   cmd_reserved,
        !            44:   "CFA REQUEST EXTENDED ERROR CODE",
        !            45:   cmd_reserved,
        !            46:   cmd_reserved,
        !            47:   cmd_reserved,
        !            48:   cmd_reserved,
        !            49:   "DEVICE RESET",
        !            50:   cmd_reserved,
        !            51:   cmd_reserved,
        !            52:   cmd_reserved,
        !            53:   cmd_reserved,
        !            54:   cmd_reserved,
        !            55:   cmd_reserved,
        !            56:   cmd_reserved,
        !            57: /*-------------------------------------------------- 10h-1Fh -----*/
        !            58:   "RECALIBRATE [OBS-4]",
        !            59:   cmd_recalibrate_ret4,
        !            60:   cmd_recalibrate_ret4,
        !            61:   cmd_recalibrate_ret4,
        !            62:   cmd_recalibrate_ret4,
        !            63:   cmd_recalibrate_ret4,
        !            64:   cmd_recalibrate_ret4,
        !            65:   cmd_recalibrate_ret4,
        !            66:   cmd_recalibrate_ret4,
        !            67:   cmd_recalibrate_ret4,
        !            68:   cmd_recalibrate_ret4,
        !            69:   cmd_recalibrate_ret4,
        !            70:   cmd_recalibrate_ret4,
        !            71:   cmd_recalibrate_ret4,
        !            72:   cmd_recalibrate_ret4,
        !            73:   cmd_recalibrate_ret4,
        !            74: /*-------------------------------------------------- 20h-2Fh -----*/
        !            75:   "READ SECTOR(S)",
        !            76:   "READ SECTOR(S) [OBS-5]",
        !            77:   "READ LONG (w/ retry) [OBS-4]",
        !            78:   "READ LONG (w/o retry) [OBS-4]",
        !            79:   "READ SECTOR(S) EXT",
        !            80:   "READ DMA EXT",
        !            81:   "READ DMA QUEUED EXT",
        !            82:   "READ NATIVE MAX ADDRESS EXT",
        !            83:   cmd_reserved,
        !            84:   "READ MULTIPLE EXT",
        !            85:   "READ STREAM DMA",
        !            86:   "READ STREAM PIO",
        !            87:   cmd_reserved,
        !            88:   cmd_reserved,
        !            89:   cmd_reserved,
        !            90:   "READ LOG EXT",
        !            91: /*-------------------------------------------------- 30h-3Fh -----*/
        !            92:   "WRITE SECTOR(S)",
        !            93:   "WRITE SECTOR(S) [OBS-5]",
        !            94:   "WRITE LONG(w/ retry) [OBS-4]",
        !            95:   "WRITE LONG(w/o retry) [OBS-4]",
        !            96:   "WRITE SECTORS(S) EXT",
        !            97:   "WRITE DMA EXT",
        !            98:   "WRITE DMA QUEUED EXT",
        !            99:   "SET MAX ADDRESS EXT",
        !           100:   "CFA WRITE SECTORS WITHOUT ERASE",
        !           101:   "WRITE MULTIPLE EXT",
        !           102:   "WRITE STREAM DMA",
        !           103:   "WRITE STREAM PIO",
        !           104:   "WRITE VERIFY [OBS-4]",
        !           105:   "WRITE DMA FUA EXT",
        !           106:   "WRITE DMA QUEUED FUA EXT",
        !           107:   "WRITE LOG EXT",
        !           108: /*-------------------------------------------------- 40h-4Fh -----*/
        !           109:   "READ VERIFY SECTOR(S)",
        !           110:   "READ VERIFY SECTOR(S) [OBS-5]",
        !           111:   "READ VERIFY SECTOR(S) EXT",
        !           112:   cmd_reserved,
        !           113:   cmd_reserved,
        !           114:   cmd_reserved,
        !           115:   cmd_reserved,
        !           116:   cmd_reserved,
        !           117:   cmd_reserved,
        !           118:   cmd_reserved,
        !           119:   cmd_reserved,
        !           120:   cmd_reserved,
        !           121:   cmd_reserved,
        !           122:   cmd_reserved,
        !           123:   cmd_reserved,
        !           124:   cmd_reserved,
        !           125: /*-------------------------------------------------- 50h-5Fh -----*/
        !           126:   "FORMAT TRACK [OBS-4]",
        !           127:   "CONFIGURE STREAM",
        !           128:   cmd_reserved,
        !           129:   cmd_reserved,
        !           130:   cmd_reserved,
        !           131:   cmd_reserved,
        !           132:   cmd_reserved,
        !           133:   cmd_reserved,
        !           134:   cmd_reserved,
        !           135:   cmd_reserved,
        !           136:   cmd_reserved,
        !           137:   cmd_reserved,
        !           138:   cmd_reserved,
        !           139:   cmd_reserved,
        !           140:   cmd_reserved,
        !           141:   cmd_reserved,
        !           142: /*-------------------------------------------------- 60h-6Fh -----*/
        !           143:   "READ FPDMA QUEUED",
        !           144:   "WRITE FPDMA QUEUED",  
        !           145:   cmd_reserved_sa,
        !           146:   cmd_reserved_sa,
        !           147:   cmd_reserved_sa,
        !           148:   cmd_reserved_sa,
        !           149:   cmd_reserved_sa,
        !           150:   cmd_reserved_sa,
        !           151:   cmd_reserved,
        !           152:   cmd_reserved,
        !           153:   cmd_reserved,
        !           154:   cmd_reserved,
        !           155:   cmd_reserved,
        !           156:   cmd_reserved,
        !           157:   cmd_reserved,
        !           158:   cmd_reserved,
        !           159: /*-------------------------------------------------- 70h-7Fh -----*/
        !           160:   "SEEK [OBS-7]",
        !           161:   cmd_seek_ret4,
        !           162:   cmd_seek_ret4,
        !           163:   cmd_seek_ret4,
        !           164:   cmd_seek_ret4,
        !           165:   cmd_seek_ret4,
        !           166:   cmd_seek_ret4,
        !           167:   cmd_seek_ret4,
        !           168:   cmd_seek_ret4,
        !           169:   cmd_seek_ret4,
        !           170:   cmd_seek_ret4,
        !           171:   cmd_seek_ret4,
        !           172:   cmd_seek_ret4,
        !           173:   cmd_seek_ret4,
        !           174:   cmd_seek_ret4,
        !           175:   cmd_seek_ret4,
        !           176: /*-------------------------------------------------- 80h-8Fh -----*/
        !           177:   cmd_vendor_specific,
        !           178:   cmd_vendor_specific,
        !           179:   cmd_vendor_specific,
        !           180:   cmd_vendor_specific,
        !           181:   cmd_vendor_specific,
        !           182:   cmd_vendor_specific,
        !           183:   cmd_vendor_specific,
        !           184:   "CFA TRANSLATE SECTOR [VS IF NO CFA]",
        !           185:   cmd_vendor_specific,
        !           186:   cmd_vendor_specific,
        !           187:   cmd_vendor_specific,
        !           188:   cmd_vendor_specific,
        !           189:   cmd_vendor_specific,
        !           190:   cmd_vendor_specific,
        !           191:   cmd_vendor_specific,
        !           192:   cmd_vendor_specific,
        !           193: /*-------------------------------------------------- 90h-9Fh -----*/
        !           194:   "EXECUTE DEVICE DIAGNOSTIC",
        !           195:   "INITIALIZE DEVICE PARAMETERS [OBS-6]",
        !           196:   "DOWNLOAD MICROCODE",
        !           197:   cmd_reserved,
        !           198:   "STANDBY IMMEDIATE [RET-4]",
        !           199:   "IDLE IMMEDIATE [RET-4]",
        !           200:   "STANDBY [RET-4]",
        !           201:   "IDLE [RET-4]",
        !           202:   "CHECK POWER MODE [RET-4]",
        !           203:   "SLEEP [RET-4]",
        !           204:   cmd_vendor_specific,
        !           205:   cmd_reserved,
        !           206:   cmd_reserved,
        !           207:   cmd_reserved,
        !           208:   cmd_reserved,
        !           209:   cmd_reserved,
        !           210: /*-------------------------------------------------- A0h-AFh -----*/
        !           211:   "PACKET",
        !           212:   "IDENTIFY PACKET DEVICE",
        !           213:   "SERVICE",
        !           214:   cmd_reserved,
        !           215:   cmd_reserved,
        !           216:   cmd_reserved,
        !           217:   cmd_reserved,
        !           218:   cmd_reserved,
        !           219:   cmd_reserved,
        !           220:   cmd_reserved,
        !           221:   cmd_reserved,
        !           222:   cmd_reserved,
        !           223:   cmd_reserved,
        !           224:   cmd_reserved,
        !           225:   cmd_reserved,
        !           226:   cmd_reserved,
        !           227: /*-------------------------------------------------- B0h-BFh -----*/
        !           228:   "SMART",
        !           229:   "DEVICE CONFIGURATION",
        !           230:   cmd_reserved,
        !           231:   cmd_reserved,
        !           232:   cmd_reserved,
        !           233:   cmd_reserved,
        !           234:   cmd_reserved,
        !           235:   cmd_reserved,
        !           236:   cmd_reserved_cf,
        !           237:   cmd_reserved_cf,
        !           238:   cmd_reserved_cf,
        !           239:   cmd_reserved_cf,
        !           240:   cmd_reserved_cf,
        !           241:   cmd_reserved_cf,
        !           242:   cmd_reserved_cf,
        !           243:   cmd_reserved_cf,
        !           244: /*-------------------------------------------------- C0h-CFh -----*/
        !           245:   "CFA ERASE SECTORS [VS IF NO CFA]",
        !           246:   cmd_vendor_specific,
        !           247:   cmd_vendor_specific,
        !           248:   cmd_vendor_specific,
        !           249:   "READ MULTIPLE",
        !           250:   "WRITE MULTIPLE",
        !           251:   "SET MULTIPLE MODE",
        !           252:   "READ DMA QUEUED",
        !           253:   "READ DMA",
        !           254:   "READ DMA [OBS-5]",
        !           255:   "WRITE DMA",
        !           256:   "WRITE DMA [OBS-5]",
        !           257:   "WRITE DMA QUEUED",
        !           258:   "CFA WRITE MULTIPLE WITHOUT ERASE",
        !           259:   "WRITE MULTIPLE FUA EXT",
        !           260:   cmd_reserved,
        !           261: /*-------------------------------------------------- D0h-DFh -----*/
        !           262:   cmd_reserved,
        !           263:   "CHECK MEDIA CARD TYPE",
        !           264:   cmd_reserved_mcpt,
        !           265:   cmd_reserved_mcpt,
        !           266:   cmd_reserved_mcpt,
        !           267:   cmd_reserved,
        !           268:   cmd_reserved,
        !           269:   cmd_reserved,
        !           270:   cmd_reserved,
        !           271:   cmd_reserved,
        !           272:   "GET MEDIA STATUS",
        !           273:   "ACKNOWLEDGE MEDIA CHANGE [RET-4]",
        !           274:   "BOOT POST-BOOT [RET-4]",
        !           275:   "BOOT PRE-BOOT [RET-4]",
        !           276:   "MEDIA LOCK",
        !           277:   "MEDIA UNLOCK",
        !           278: /*-------------------------------------------------- E0h-EFh -----*/
        !           279:   "STANDBY IMMEDIATE",
        !           280:   "IDLE IMMEDIATE",
        !           281:   "STANDBY",
        !           282:   "IDLE",
        !           283:   "READ BUFFER",
        !           284:   "CHECK POWER MODE",
        !           285:   "SLEEP",
        !           286:   "FLUSH CACHE",
        !           287:   "WRITE BUFFER",
        !           288:   "WRITE SAME [RET-4]",  /* Warning!  This command is retired but the value of
        !           289:                             f_reg is used in look_up_ata_command().  If this
        !           290:                             command code is reclaimed in a future standard then
        !           291:                             be sure to update look_up_ata_command(). */
        !           292:   "FLUSH CACHE EXT",
        !           293:   cmd_reserved,
        !           294:   "IDENTIFY DEVICE",
        !           295:   "MEDIA EJECT",
        !           296:   "IDENTIFY DEVICE DMA [OBS-4]",
        !           297:   "SET FEATURES",
        !           298: /*-------------------------------------------------- F0h-FFh -----*/
        !           299:   cmd_vendor_specific,
        !           300:   "SECURITY SET PASSWORD",
        !           301:   "SECURITY UNLOCK",
        !           302:   "SECURITY ERASE PREPARE",
        !           303:   "SECURITY ERASE UNIT",
        !           304:   "SECURITY FREEZE LOCK",
        !           305:   "SECURITY DISABLE PASSWORD",
        !           306:   cmd_vendor_specific,
        !           307:   "READ NATIVE MAX ADDRESS",
        !           308:   "SET MAX",
        !           309:   cmd_vendor_specific,
        !           310:   cmd_vendor_specific,
        !           311:   cmd_vendor_specific,
        !           312:   cmd_vendor_specific,
        !           313:   cmd_vendor_specific,
        !           314:   cmd_vendor_specific
        !           315: };
        !           316: 
        !           317: /* Returns the name of the command (and possibly sub-command) with the given
        !           318:    command code and feature register values.   For most command codes this
        !           319:    simply returns the corresponding entry in the command_table array, but for
        !           320:    others the value of the feature register specifies a subcommand or
        !           321:    distinguishes commands. */
        !           322: const char *look_up_ata_command(unsigned char c_code, unsigned char f_reg) {
        !           323: 
        !           324:   // check that command table not messed up.  The compiler will issue
        !           325:   // warnings if there are too many array elements, but won't issue
        !           326:   // warnings if there are not enough of them.
        !           327:   if (sizeof(command_table) != sizeof(char *)*COMMAND_TABLE_SIZE){
        !           328:     fprintf(stderr, 
        !           329:             "Problem in atacmdnames.c.  Command Table command_table[] does\n"
        !           330:             "not have %d entries!  It has %d entries. Please fix it.\n",
        !           331:             COMMAND_TABLE_SIZE, (int)(sizeof(command_table)/sizeof(char *)));
        !           332:     abort();
        !           333:   }
        !           334: 
        !           335:   switch (c_code) {
        !           336:   case 0x00:  /* NOP */
        !           337:     switch (f_reg) {
        !           338:     case 0x00:
        !           339:       return "NOP [Abort queued commands]";
        !           340:     case 0x01:
        !           341:       return "NOP [Don't abort queued commands]";
        !           342:     default:
        !           343:       return "NOP [Reserved subcommand]";
        !           344:     }
        !           345:   case 0x92:  /* DOWNLOAD MICROCODE */
        !           346:     switch (f_reg) {
        !           347:     case 0x01:
        !           348:       return "DOWNLOAD MICROCODE [Temporary]";
        !           349:     case 0x07:
        !           350:       return "DOWNLOAD MICROCODE [Save]";
        !           351:     default:
        !           352:       return "DOWNLOAD MICROCODE [Reserved subcommand]";
        !           353:     }
        !           354:   case 0xB0:  /* SMART */
        !           355:     switch (f_reg) {
        !           356:     case 0xD0:
        !           357:       return "SMART READ DATA";
        !           358:     case 0xD1:
        !           359:       return "SMART READ ATTRIBUTE THRESHOLDS [OBS-4]";
        !           360:     case 0xD2:
        !           361:       return "SMART ENABLE/DISABLE ATTRIBUTE AUTOSAVE";
        !           362:     case 0xD3:
        !           363:       return "SMART SAVE ATTRIBUTE VALUES [OBS-6]";
        !           364:     case 0xD4:
        !           365:       return "SMART EXECUTE OFF-LINE IMMEDIATE";
        !           366:     case 0xD5:
        !           367:       return "SMART READ LOG";
        !           368:     case 0xD6:
        !           369:       return "SMART WRITE LOG";
        !           370:     case 0xD7:
        !           371:       return "SMART WRITE ATTRIBUTE THRESHOLDS [NS, OBS-4]";
        !           372:     case 0xD8:
        !           373:       return "SMART ENABLE OPERATIONS";
        !           374:     case 0xD9:
        !           375:       return "SMART DISABLE OPERATIONS";
        !           376:     case 0xDA:
        !           377:       return "SMART RETURN STATUS";
        !           378:     case 0xDB:
        !           379:       return "SMART EN/DISABLE AUTO OFFLINE [NS (SFF-8035i)]";
        !           380:     default:
        !           381:         if (f_reg >= 0xE0)
        !           382:           return "[Vendor specific SMART command]";
        !           383:         else
        !           384:           return "[Reserved SMART command]";
        !           385:     }
        !           386:   case 0xB1:  /* DEVICE CONFIGURATION */
        !           387:     switch (f_reg) {
        !           388:     case 0xC0:
        !           389:       return "DEVICE CONFIGURATION RESTORE";
        !           390:     case 0xC1:
        !           391:       return "DEVICE CONFIGURATION FREEZE LOCK";
        !           392:     case 0xC2:
        !           393:       return "DEVICE CONFIGURATION IDENTIFY";
        !           394:     case 0xC3:
        !           395:       return "DEVICE CONFIGURATION SET";
        !           396:     default:
        !           397:       return "DEVICE CONFIGURATION [Reserved command]";
        !           398:     }
        !           399:   case 0xE9:  /* WRITE SAME */
        !           400:     switch (f_reg) {
        !           401:     case 0x22:
        !           402:       return "WRITE SAME [Start specified] [RET-4]";
        !           403:     case 0xDD:
        !           404:       return "WRITE SAME [Start unspecified] [RET-4]";
        !           405:     default:
        !           406:       return "WRITE SAME [Invalid subcommand] [RET-4]";
        !           407:     } 
        !           408:   case 0xEF:  /* SET FEATURES */
        !           409:     switch (f_reg) {
        !           410:     case 0x01:
        !           411:       return "SET FEATURES [Enable 8-bit PIO]";
        !           412:     case 0x02:
        !           413:       return "SET FEATURES [Enable write cache]";
        !           414:     case 0x03:
        !           415:       return "SET FEATURES [Set transfer mode]";
        !           416:     case 0x04:
        !           417:       return "SET FEATURES [Enable auto DR] [OBS-4]";
        !           418:     case 0x05:
        !           419:       return "SET FEATURES [Enable APM]";
        !           420:     case 0x06:
        !           421:       return "SET FEATURES [Enable Pwr-Up In Standby]";
        !           422:     case 0x07:
        !           423:       return "SET FEATURES [Set device spin-up]";
        !           424:     case 0x09:
        !           425:       return "SET FEATURES [Reserved (address offset)]";
        !           426:     case 0x0A:
        !           427:       return "SET FEATURES [Enable CFA power mode 1]";
        !           428:     case 0x10:
        !           429:       return "SET FEATURES [Reserved for Serial ATA]";
        !           430:     case 0x20:
        !           431:       return "SET FEATURES [Set Time-ltd R/W WCT]";
        !           432:     case 0x21:
        !           433:       return "SET FEATURES [Set Time-ltd R/W EH]";
        !           434:     case 0x31:
        !           435:       return "SET FEATURES [Disable Media Status Notf]";
        !           436:     case 0x33:
        !           437:       return "SET FEATURES [Disable retry] [OBS-4]";
        !           438:     case 0x42:
        !           439:       return "SET FEATURES [Enable AAM]";
        !           440:     case 0x43:
        !           441:       return "SET FEATURES [Set Max Host I/F S Times]";
        !           442:     case 0x44:
        !           443:       return "SET FEATURES [Length of VS data] [OBS-4]";
        !           444:     case 0x54:
        !           445:       return "SET FEATURES [Set cache segs] [OBS-4]";
        !           446:     case 0x55:
        !           447:       return "SET FEATURES [Disable read look-ahead]";
        !           448:     case 0x5D:
        !           449:       return "SET FEATURES [Enable release interrupt]";
        !           450:     case 0x5E:
        !           451:       return "SET FEATURES [Enable SERVICE interrupt]";
        !           452:     case 0x66:
        !           453:       return "SET FEATURES [Disable revert defaults]";
        !           454:     case 0x77:
        !           455:       return "SET FEATURES [Disable ECC] [OBS-4]";
        !           456:     case 0x81:
        !           457:       return "SET FEATURES [Disable 8-bit PIO]";
        !           458:     case 0x82:
        !           459:       return "SET FEATURES [Disable write cache]";
        !           460:     case 0x84:
        !           461:       return "SET FEATURES [Disable auto DR] [OBS-4]";
        !           462:     case 0x85:
        !           463:       return "SET FEATURES [Disable APM]";
        !           464:     case 0x86:
        !           465:       return "SET FEATURES [Disable Pwr-Up In Standby]";
        !           466:     case 0x88:
        !           467:       return "SET FEATURES [Disable ECC] [OBS-4]";
        !           468:     case 0x89:
        !           469:       return "SET FEATURES [Reserved (address offset)]";
        !           470:     case 0x8A:
        !           471:       return "SET FEATURES [Disable CFA power mode 1]";
        !           472:     case 0x90:
        !           473:       return "SET FEATURES [Reserved for Serial ATA]";
        !           474:     case 0x95:
        !           475:       return "SET FEATURES [Enable Media Status Notf]";
        !           476:     case 0x99:
        !           477:       return "SET FEATURES [Enable retries] [OBS-4]";
        !           478:     case 0x9A:
        !           479:       return "SET FEATURES [Set max avg curr] [OBS-4]";
        !           480:     case 0xAA:
        !           481:       return "SET FEATURES [Enable read look-ahead]";
        !           482:     case 0xAB:
        !           483:       return "SET FEATURES [Set max prefetch] [OBS-4]";
        !           484:     case 0xBB:
        !           485:       return "SET FEATURES [4 bytes VS data] [OBS-4]";
        !           486:     case 0xC2:
        !           487:       return "SET FEATURES [Disable AAM]";
        !           488:     case 0xCC:
        !           489:       return "SET FEATURES [Enable revert to defaults]";
        !           490:     case 0xDD:
        !           491:       return "SET FEATURES [Disable release interrupt]";
        !           492:     case 0xDE:
        !           493:       return "SET FEATURES [Disable SERVICE interrupt]";
        !           494:     case 0xE0:
        !           495:       return "SET FEATURES [Obsolete subcommand]";
        !           496:     default:
        !           497:       if (f_reg >= 0xF0)
        !           498:         return "SET FEATURES [Reserved for CFA]";
        !           499:       else
        !           500:         return "SET FEATURES [Reserved subcommand]";
        !           501:     }
        !           502:   case 0xF9:  /* SET MAX */
        !           503:     switch (f_reg) {
        !           504:     case 0x00:
        !           505:       return "SET MAX ADDRESS [OBS-6]";
        !           506:     case 0x01:
        !           507:       return "SET MAX SET PASSWORD";
        !           508:     case 0x02:
        !           509:       return "SET MAX LOCK";
        !           510:     case 0x03:
        !           511:       return "SET MAX UNLOCK";
        !           512:     case 0x04:
        !           513:       return "SET MAX FREEZE LOCK";
        !           514:     default:
        !           515:       return "[Reserved SET MAX command]";
        !           516:     }
        !           517:   default:
        !           518:     return command_table[c_code];
        !           519:   }
        !           520: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>