* Revert r57265 until the testbot issues caused by earlier revisions are fixed.
[reactos.git] / reactos / base / applications / atactl / atactl.cpp
index 63a0416..69ea2f9 100644 (file)
@@ -39,13 +39,6 @@ char* g_bb_list = NULL;
 int gRadix = 16;
 PADAPTERINFO g_AdapterInfo = NULL;
 
-BOOLEAN
-ata_power_mode(
-    int bus_id,
-    int dev_id,
-    int power_mode
-    );
-
 void print_help() {
     printf("Usage:\n"
            "  atactl -<switches> c|s<controller id>:b<bus id>:d<device id>[:l<lun>]\n"
@@ -68,12 +61,6 @@ void print_help() {
            "  d [XXX]   lock ATA/SATA bus for device removal for XXX seconds or\n"
            "              for %d seconds if no lock timeout specified.\n"
            "              can be used with -h, -m or standalone.\n"
-           "  D [XXX]   disable device (turn into sleep mode) and lock ATA/SATA bus \n"
-           "              for device removal for XXX seconds or\n"
-           "              for %d seconds if no lock timeout specified.\n"
-           "              can be used with -h, -m or standalone.\n"
-           "  pX        change power state to X, where X is\n"
-           "              0 - active, 1 - idle, 2 - standby, 3 - sleep\n"
            "  r         (R)eset device\n"
            "  ba        (A)ssign (B)ad-block list\n"
            "  bl        get assigned (B)ad-block (L)ist\n"
@@ -129,7 +116,6 @@ void print_help() {
 #define CMD_ATA_MODE  0x04
 #define CMD_ATA_RESET 0x05
 #define CMD_ATA_BBLK  0x06
-#define CMD_ATA_POWER 0x07
 
 HANDLE
 ata_open_dev(
@@ -318,76 +304,6 @@ ata_send_ioctl(
     return TRUE;
 } // end ata_send_ioctl()
 
-int
-ata_send_scsi(
-    HANDLE h,
-    PSCSI_ADDRESS addr,
-    PCDB   cdb,
-    UCHAR  cdbLength,
-    PVOID  Buffer,
-    ULONG  BufferLength,
-    BOOLEAN DataIn,
-    PSENSE_DATA senseData,
-    PULONG returned
-    )
-{
-    ULONG status;
-    PSCSI_PASS_THROUGH_WITH_BUFFERS sptwb;
-    ULONG data_len = BufferLength;
-    ULONG len;
-
-    len = BufferLength + offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf);
-
-    sptwb = (PSCSI_PASS_THROUGH_WITH_BUFFERS)GlobalAlloc(GMEM_FIXED, len);
-    if(!sptwb) {
-        return FALSE;
-    }
-    memset(sptwb, 0, offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf));
-
-    sptwb->spt.Length = sizeof(SCSI_PASS_THROUGH);
-    sptwb->spt.PathId   = addr->PathId;
-    sptwb->spt.TargetId = addr->TargetId;
-    sptwb->spt.Lun      = addr->Lun;
-    sptwb->spt.CdbLength = cdbLength;
-    sptwb->spt.SenseInfoLength = 24;
-    sptwb->spt.DataIn = Buffer ? (DataIn ? SCSI_IOCTL_DATA_IN : SCSI_IOCTL_DATA_OUT) : 0;
-    sptwb->spt.DataTransferLength = BufferLength;
-    sptwb->spt.TimeOutValue = 10;
-    sptwb->spt.DataBufferOffset =
-       offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,ucDataBuf);
-    sptwb->spt.SenseInfoOffset = 
-       offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,ucSenseBuf);
-    memcpy(&sptwb->spt.Cdb, cdb, cdbLength);
-
-    if(Buffer && !DataIn) {
-        memcpy(&sptwb->ucSenseBuf, Buffer, BufferLength);
-    }
-
-    status = DeviceIoControl(h,
-                             IOCTL_SCSI_PASS_THROUGH,
-                             sptwb,
-                             (Buffer && !DataIn) ? len : sizeof(SCSI_PASS_THROUGH),
-                             sptwb,
-                             (Buffer && DataIn) ? len : offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf),
-                             returned,
-                             FALSE);
-
-    if(Buffer && DataIn) {
-        memcpy(Buffer, &sptwb->ucDataBuf, BufferLength);
-    }
-    if(senseData) {
-        memcpy(senseData, &sptwb->ucSenseBuf, sizeof(sptwb->ucSenseBuf));
-    }
-
-    GlobalFree(sptwb);
-
-    if(!status) {
-        status = GetLastError();
-        return FALSE;
-    }
-    return TRUE;
-} // end ata_send_scsi()
-
 IO_SCSI_CAPABILITIES g_capabilities;
 UCHAR g_inquiry_buffer[2048];
 
@@ -619,10 +535,9 @@ ata_check_unit(
     GETTRANSFERMODE IoMode;
     PSENDCMDOUTPARAMS pout;
     PIDENTIFY_DATA   ident;
-    PINQUIRYDATA     scsi_ident;
     char buff[sizeof(SENDCMDOUTPARAMS)+/*sizeof(IDENTIFY_DATA)*/2048];
     char mode_str[12];
-    //ULONG bus_id = (dev_id >> 24) & 0xff;
+    ULONG bus_id = (dev_id >> 24) & 0xff;
     BOOLEAN found = FALSE;
     SENDCMDINPARAMS pin;
     int io_mode = -1;
@@ -631,7 +546,7 @@ ata_check_unit(
     char lun_str[10];
     HKEY hKey2;
     ULONGLONG max_lba = -1;
-    USHORT chs[3] = { 0 };
+    USHORT chs[3];
 
     if(dev_id != -1) {
         dev_id &= 0x00ffffff;
@@ -679,7 +594,7 @@ ata_check_unit(
             } else {
                 mode_str[0] = 0;
             }
-            printf(" b%lu [%s]\n",
+            printf(" b%u [%s]\n",
                 i,
                 mode_str
                 );
@@ -702,8 +617,7 @@ ata_check_unit(
             
             if(l_dev_id == dev_id || dev_id == -1) {
 
-                scsi_ident = (PINQUIRYDATA)&(inquiryData->InquiryData);
-                if(!memcmp(&(scsi_ident->VendorId[0]), UNIATA_COMM_PORT_VENDOR_STR, 24)) {
+                if(!memcmp(&(inquiryData->InquiryData[8]), UNIATA_COMM_PORT_VENDOR_STR, 24)) {
                     // skip communication port
                     goto next_dev;
                 }
@@ -771,27 +685,29 @@ ata_check_unit(
 
                 }
 
-                if(!g_extended) {
-                    printf("  b%lu:d%d%s    %24.24s %4.4s ",
-                        i,
-                        inquiryData->TargetId,
-                        lun_str,
-                        /*(inquiryData->DeviceClaimed) ? "Y" : "N",*/
-                        (g_extended ? (PUCHAR)"" : &scsi_ident->VendorId[0]),
-                        (g_extended ? (PUCHAR)"" : &scsi_ident->ProductRevisionLevel[0])
-                        );
-                } else {
-                    printf("  b%lu:d%d%s ",
-                        i,
-                        inquiryData->TargetId,
-                        lun_str
-                        );
-                }
-
                 if(status) {
+                    if(!g_extended) {
+                        printf("  b%u:d%d%s    %24.24s %4.4s ",
+                            i,
+                            inquiryData->TargetId,
+                            lun_str,
+                            /*(inquiryData->DeviceClaimed) ? "Y" : "N",*/
+                            (g_extended ? (PUCHAR)"" : &inquiryData->InquiryData[8]),
+                            (g_extended ? (PUCHAR)"" : &inquiryData->InquiryData[8+24])
+                            );
+                    } else {
+                        printf("  b%u:d%d%s ",
+                            i,
+                            inquiryData->TargetId,
+                            lun_str
+                            );
+                    }
                     if(io_mode == -1) {
-                        io_mode = ata_cur_mode_from_ident(ident, IDENT_MODE_ACTIVE);
+                        io_mode = ata_cur_mode_from_ident(ident);
                     }
+                } else {
+                    goto next_dev;
+
                 }
                 if(io_mode != -1) {
                     ata_mode_to_str(mode_str, io_mode);
@@ -809,139 +725,100 @@ ata_check_unit(
                 }
                 printf("\n");
 
-                if(g_extended) {
-                    if(status) {
-
-                        BOOLEAN BlockMode_valid = TRUE;
-                        BOOLEAN print_geom = FALSE;
-
-                        switch(ident->DeviceType) {
-                        case ATAPI_TYPE_DIRECT:
-                            if(ident->Removable) {
-                                printf("    Floppy        ");
-                            } else {
-                                printf("    Hard Drive    ");
-                            }
-                            break;
-                        case ATAPI_TYPE_TAPE:
-                            printf("    Tape Drive    ");
-                            break;
-                        case ATAPI_TYPE_CDROM:
-                            printf("    CD/DVD Drive  ");
-                            BlockMode_valid = FALSE;
-                            break;
-                        case ATAPI_TYPE_OPTICAL:
-                            printf("    Optical Drive ");
-                            BlockMode_valid = FALSE;
-                            break;
-                        default:
+                if(status && g_extended) {
+
+                    BOOLEAN BlockMode_valid = TRUE;
+                    BOOLEAN print_geom = FALSE;
+
+                    switch(ident->DeviceType) {
+                    case ATAPI_TYPE_DIRECT:
+                        if(ident->Removable) {
+                            printf("    Floppy        ");
+                        } else {
                             printf("    Hard Drive    ");
-                            print_geom = TRUE;
-                            //MOV_DD_SWP(max_lba, ident->UserAddressableSectors);
-                            max_lba = ident->UserAddressableSectors;
-                            if(ident->FeaturesSupport.Address48) {
-                               max_lba = ident->UserAddressableSectors48;
-                            }
-                            //MOV_DW_SWP(chs[0], ident->NumberOfCylinders);
-                            //MOV_DW_SWP(chs[1], ident->NumberOfHeads);
-                            //MOV_DW_SWP(chs[2], ident->SectorsPerTrack);
-                            chs[0] = ident->NumberOfCylinders;
-                            chs[1] = ident->NumberOfHeads;
-                            chs[2] = ident->SectorsPerTrack;
-                            if(!max_lba) {
-                                max_lba = (ULONG)(chs[0])*(ULONG)(chs[1])*(ULONG)(chs[2]);
-                            }
-                        }
-                        if(io_mode != -1) {
-                            printf("           %.12s\n", mode_str);
-                        }
-                        for (j = 0; j < 40; j += 2) {
-                            MOV_DW_SWP(SerNum[j], ((PUCHAR)ident->ModelNumber)[j]);
                         }
-                        printf("    Mod: %40.40s\n", SerNum);
-                        for (j = 0; j < 8; j += 2) {
-                            MOV_DW_SWP(SerNum[j], ((PUCHAR)ident->FirmwareRevision)[j]);
+                        break;
+                    case ATAPI_TYPE_TAPE:
+                        printf("    Tape Drive    ");
+                        break;
+                    case ATAPI_TYPE_CDROM:
+                        printf("    CD/DVD Drive  ");
+                        BlockMode_valid = FALSE;
+                        break;
+                    case ATAPI_TYPE_OPTICAL:
+                        printf("    Optical Drive ");
+                        BlockMode_valid = FALSE;
+                        break;
+                    default:
+                        printf("    Hard Drive    ");
+                        print_geom = 1;
+                        //MOV_DD_SWP(max_lba, ident->UserAddressableSectors);
+                        max_lba = ident->UserAddressableSectors;
+                        if(ident->FeaturesSupport.Address48) {
+                           max_lba = ident->UserAddressableSectors48;
                         }
-                        printf("    Rev: %8.8s\n", SerNum);
-                        for (j = 0; j < 20; j += 2) {
-                            MOV_DW_SWP(SerNum[j], ((PUCHAR)ident->SerialNumber)[j]);
+                        //MOV_DW_SWP(chs[0], ident->NumberOfCylinders);
+                        //MOV_DW_SWP(chs[1], ident->NumberOfHeads);
+                        //MOV_DW_SWP(chs[2], ident->SectorsPerTrack);
+                        chs[0] = ident->NumberOfCylinders;
+                        chs[1] = ident->NumberOfHeads;
+                        chs[2] = ident->SectorsPerTrack;
+                        if(!max_lba) {
+                            max_lba = (ULONG)(chs[0])*(ULONG)(chs[1])*(ULONG)(chs[2]);
                         }
-                        printf("    S/N: %20.20s\n", SerNum);
-
-                        if(BlockMode_valid) {
-                            if(ident->MaximumBlockTransfer) {
-                                printf("    Multi-block mode:        %u block%s\n", ident->MaximumBlockTransfer, ident->MaximumBlockTransfer == 1 ? "" : "s");
-                            } else {
-                                printf("    Multi-block mode:        N/A\n");
-                            }
-                        }
-                        if(print_geom) {
-                            printf("    C/H/S:                   %u/%u/%u \n", chs[0], chs[1], chs[2]);
-                            printf("    LBA:                     %I64u \n", max_lba);
-                            if(max_lba < 2) {
-                                printf("    Size:                    %lu kb\n", (ULONG)(max_lba/2));
-                            } else
-                            if(max_lba < 2*1024*1024) {
-                                printf("    Size:                    %lu Mb\n", (ULONG)(max_lba/2048));
-                            } else
-                            if(max_lba < (ULONG)2*1024*1024*1024) {
-                                printf("    Size:                    %lu.%lu (%lu) Gb\n", (ULONG)(max_lba/2048/1024),
-                                                                                  (ULONG)(((max_lba/2048)%1024)/10),
-                                                                                  (ULONG)(max_lba*512/1000/1000/1000)
-                                );
-                            } else {
-                                printf("    Size:                    %lu.%lu (%lu) Tb\n", (ULONG)(max_lba/2048/1024/1024),
-                                                                                  (ULONG)((max_lba/2048/1024)%1024)/10,
-                                                                                  (ULONG)(max_lba*512/1000/1000/1000)
-                                );
-                            }
+                    }
+                    if(io_mode != -1) {
+                        printf("           %.12s\n", mode_str);
+                    }
+                    for (j = 0; j < 40; j += 2) {
+                        MOV_DW_SWP(SerNum[j], ((PUCHAR)ident->ModelNumber)[j]);
+                    }
+                    printf("    Mod: %40.40s\n", SerNum);
+                    for (j = 0; j < 8; j += 2) {
+                        MOV_DW_SWP(SerNum[j], ((PUCHAR)ident->FirmwareRevision)[j]);
+                    }
+                    printf("    Rev: %8.8s\n", SerNum);
+                    for (j = 0; j < 20; j += 2) {
+                        MOV_DW_SWP(SerNum[j], ((PUCHAR)ident->SerialNumber)[j]);
+                    }
+                    printf("    S/N: %20.20s\n", SerNum);
+
+                    if(BlockMode_valid) {
+                        if(ident->MaximumBlockTransfer) {
+                            printf("    Multi-block mode:        %u block%s\n", ident->MaximumBlockTransfer, ident->MaximumBlockTransfer == 1 ? "" : "s");
+                        } else {
+                            printf("    Multi-block mode:        N/A\n");
                         }
-                        len = 0;
-                        if((hKey2 = ata_get_bblist_regh(ident, DevSerial, TRUE))) {
-                            if(RegQueryValueEx(hKey2, DevSerial, NULL, NULL, NULL, &len) == ERROR_SUCCESS) {
-                                printf("    !!! Assigned bad-block list !!!\n");
-                            }
-                            RegCloseKey(hKey2);
+                    }
+                    if(print_geom) {
+                        printf("    C/H/S:                   %u/%u/%u \n", chs[0], chs[1], chs[2]);
+                        printf("    LBA:                     %I64u \n", max_lba);
+                        if(max_lba < 2) {
+                            printf("    Size:                    %u kb\n", max_lba/2);
+                        } else
+                        if(max_lba < 2*1024*1024) {
+                            printf("    Size:                    %u Mb\n", max_lba/2048);
+                        } else
+                        if(max_lba < (ULONG)2*1024*1024*1024) {
+                            printf("    Size:                    %u.%u (%u) Gb\n", (ULONG)(max_lba/2048/1024),
+                                                                              (ULONG)(((max_lba/2048)%1024)/10),
+                                                                              (ULONG)(max_lba*512/1000/1000/1000)
+                            );
+                        } else {
+                            printf("    Size:                    %u.%u (%u) Tb\n", (ULONG)(max_lba/2048/1024/1024),
+                                                                              (ULONG)((max_lba/2048/1024)%1024)/10,
+                                                                              (ULONG)(max_lba*512/1000/1000/1000)
+                            );
                         }
-                    } else {
-                        switch(scsi_ident->DeviceType) {
-                        case DIRECT_ACCESS_DEVICE:
-                            if(scsi_ident->RemovableMedia) {
-                                printf("    Floppy        ");
-                            } else {
-                                printf("    Hard Drive    ");
-                            }
-                            break;
-                        case SEQUENTIAL_ACCESS_DEVICE:
-                            printf("    Tape Drive    ");
-                            break;
-                        case PRINTER_DEVICE:
-                            printf("    Printer       ");
-                            break;
-                        case PROCESSOR_DEVICE:
-                            printf("    Processor     ");
-                            break;
-                        case WRITE_ONCE_READ_MULTIPLE_DEVICE:
-                            printf("    WORM Drive    ");
-                            break;
-                        case READ_ONLY_DIRECT_ACCESS_DEVICE:
-                            printf("    CDROM Drive   ");
-                            break;
-                        case SCANNER_DEVICE:
-                            printf("    Scanner       ");
-                            break;
-                        case OPTICAL_DEVICE:
-                            printf("    Optical Drive ");
-                            break;
-                        case MEDIUM_CHANGER:
-                            printf("    Changer       ");
-                            break;
-                        case COMMUNICATION_DEVICE:
-                            printf("    Comm. device  ");
-                            break;
+                    }
+                    len = 0;
+                    if(hKey2 = ata_get_bblist_regh(ident, DevSerial, TRUE)) {
+                        if(RegQueryValueEx(hKey2, DevSerial, NULL, NULL, NULL, &len) == ERROR_SUCCESS) {
+                            printf("    !!! Assigned bad-block list !!!\n");
                         }
-                        printf("\n");
+                        RegCloseKey(hKey2);
                     }
+
                 }
                 memcpy(&g_ident, ident, sizeof(IDENTIFY_DATA));
             }
@@ -1010,7 +887,7 @@ ata_adapter_info(
         } else {
             if(AdapterInfo->AdapterInterfaceType == PCIBus) {
                 slotData.u.AsULONG = AdapterInfo->slotNumber;
-                printf("  PCI Bus/Dev/Func:   %lu/%lu/%lu%s\n",
+                printf("  PCI Bus/Dev/Func:   %u/%u/%u%s\n",
                     AdapterInfo->SystemIoBusNumber, slotData.u.bits.DeviceNumber, slotData.u.bits.FunctionNumber,
                     AdapterInfo->AdapterInterfaceType == AdapterInfo->OrigAdapterInterfaceType ? "" : " (ISA-Bridged)");
                 printf("  VendorId/DevId/Rev: %#04x/%#04x/%#02x\n",
@@ -1024,7 +901,7 @@ ata_adapter_info(
             if(AdapterInfo->AdapterInterfaceType == Isa) {
                 printf("  ISA Bus\n");
             }
-            printf("  IRQ: %ld\n", AdapterInfo->BusInterruptLevel);
+            printf("  IRQ: %d\n", AdapterInfo->BusInterruptLevel);
         }
     }
     ata_close_dev(h);
@@ -1183,8 +1060,7 @@ ata_hide(
     int bus_id,
     int dev_id,
     int lock,
-    int persistent_hide,
-    int power_mode
+    int persistent_hide
     )
 {
     char dev_name[64];
@@ -1197,11 +1073,6 @@ ata_hide(
     if(dev_id == -1) {
         return FALSE;
     }
-
-    if(power_mode) {
-        ata_power_mode(bus_id, dev_id, power_mode);
-    }
-
     if(lock < 0) {
         lock = DEFAULT_REMOVAL_LOCK_TIMEOUT;
     }
@@ -1390,7 +1261,7 @@ ata_bblk(
         }
 
         len = GetFileSize(hf, NULL);
-        if(!len || len == INVALID_FILE_SIZE)
+        if(!len || len == -1)
             goto exit;
         bblist = (char*)GlobalAlloc(GMEM_FIXED, len*8);
     }
@@ -1439,7 +1310,7 @@ ata_bblk(
             j++;
             BB_Msg[sizeof(BB_Msg)-1] = 0;
             k=0;
-            while((a = BB_Msg[k])) {
+            while(a = BB_Msg[k]) {
                 if(a == ' ' || a == '\t' || a == '\r') {
                     k++;
                     continue;
@@ -1458,7 +1329,7 @@ ata_bblk(
                 continue;
             }
             k0 = k;
-            while((a = BB_Msg[k])) {
+            while(a = BB_Msg[k]) {
                 if(a == ' ' || a == '\t' || a == '\r') {
                     BB_Msg[k] = '\t';
                 }
@@ -1609,52 +1480,6 @@ exit:
     return retval;
 } // end ata_bblk()
 
-BOOLEAN
-ata_power_mode(
-    int bus_id,
-    int dev_id,
-    int power_mode
-    )
-{
-    char dev_name[64];
-    HANDLE h;
-    ULONG status;
-    ULONG returned;
-    SCSI_ADDRESS addr;
-    CDB cdb;
-    SENSE_DATA senseData;
-
-    if(dev_id == -1) {
-        return FALSE;
-    }
-    if(!power_mode) {
-        return TRUE;
-    }
-
-    sprintf(dev_name, "\\\\.\\Scsi%d:", bus_id);
-    h = ata_open_dev(dev_name);
-    if(!h)
-        return FALSE;
-    addr.PortNumber = bus_id;
-    addr.PathId   = (UCHAR)(dev_id >> 16);
-    addr.TargetId = (UCHAR)(dev_id >> 8);
-    addr.Lun      = (UCHAR)(dev_id);
-
-    memset(&cdb, 0, sizeof(cdb));
-    cdb.START_STOP.OperationCode = SCSIOP_START_STOP_UNIT;
-    cdb.START_STOP.Immediate = 1;
-    cdb.START_STOP.PowerConditions = power_mode;
-    cdb.START_STOP.Start = (power_mode != StartStop_Power_Sleep);
-
-    printf("Changing power state to ...\n");
-
-    status = ata_send_scsi(h, &addr, &cdb, 6,
-                            NULL, 0, FALSE,
-                            &senseData, &returned);
-    ata_close_dev(h);
-    return TRUE;
-} // end ata_power_mode()
-
 int
 ata_num_to_x_dev(
     char a
@@ -1671,7 +1496,7 @@ main (
     char* argv[]
     )
 {
-    //ULONG Flags = 0;
+    ULONG Flags = 0;
     int i, j;
     char a;
     int bus_id = -1;
@@ -1682,7 +1507,6 @@ main (
     int mode=-1;
     int list_bb=0;
     int persistent_hide=0;
-    int power_mode=StartStop_Power_NoChg;
 
     printf("Console ATA control utility for Windows NT3.51/NT4/2000/XP/2003\n"
            "Version 0." UNIATA_VER_STR ", Copyright (c) Alexander A. Telyatnikov, 2003-2012\n"
@@ -1692,7 +1516,7 @@ main (
         if(!argv[i])
             continue;
         if((a = argv[i][0]) != '-') {
-            for(j=0; (a = argv[i][j]); j++) {
+            for(j=0; a = argv[i][j]; j++) {
                 switch(a) {
                 case 'a' :
                 case 's' :
@@ -1806,47 +1630,10 @@ main (
                 g_bb_list=argv[i];
                 j = strlen(argv[i])-1;
                 break;
-            case 'p' :
-                if(cmd && (cmd != CMD_ATA_FIND) && (cmd != CMD_ATA_HIDE)) {
-                    print_help();
-                }
-                switch(argv[i][j+1]) {
-                case '0':
-                case 'a':
-                    // do nothing
-                    break;
-                case '1':
-                case 'i':
-                    power_mode = StartStop_Power_Idle;
-                    break;
-                case '2':
-                case 's':
-                    power_mode = StartStop_Power_Standby;
-                    break;
-                case '3':
-                case 'p':
-                    power_mode = StartStop_Power_Sleep;
-                    break;
-                default:
-                    j--;
-                }
-                j++;
-                if(power_mode && !cmd) {
-                    cmd = CMD_ATA_POWER;
-                }
-                break;
-            case 'D' :
-                power_mode = StartStop_Power_Sleep;
-                if(cmd && (cmd != CMD_ATA_HIDE)) {
-                    print_help();
-                }
             case 'd' :
-                if(cmd && (cmd != CMD_ATA_FIND) && (cmd != CMD_ATA_HIDE) && (cmd != CMD_ATA_POWER)) {
+                if(cmd && (cmd != CMD_ATA_FIND) && (cmd != CMD_ATA_HIDE)) {
                     print_help();
                 }
-                if(!cmd) {
-                    cmd = CMD_ATA_HIDE;
-                }
                 i++;
                 if(!argv[i]) {
                     print_help();
@@ -1912,13 +1699,10 @@ main (
         ata_scan(bus_id, dev_id, lock, persistent_hide);
     } else
     if(cmd == CMD_ATA_HIDE) {
-        ata_hide(bus_id, dev_id, lock, persistent_hide, power_mode);
+        ata_hide(bus_id, dev_id, lock, persistent_hide);
     } else
     if(cmd == CMD_ATA_BBLK) {
         ata_bblk(bus_id, dev_id, list_bb);
-    } else
-    if(cmd == CMD_ATA_POWER) {
-        ata_power_mode(bus_id, dev_id, power_mode);
     } else {
         print_help();
     }