From 8db9c931b04b74b840e28d41dc9f3c5fe4475690 Mon Sep 17 00:00:00 2001
From: jhering <jhering@4ea69e1a-61f1-4043-bf83-b5c94c648137>
Date: Mon, 19 Nov 2007 12:32:12 +0000
Subject: [PATCH] fix bad return code (get STATUS) for QNX Part

git-svn-id: https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk@2436 4ea69e1a-61f1-4043-bf83-b5c94c648137
---
 sm5/CHANGELOG     |   4 +-
 sm5/os_qnxnto.cpp | 274 +++++++++++++++++++++++-----------------------
 2 files changed, 142 insertions(+), 136 deletions(-)

diff --git a/sm5/CHANGELOG b/sm5/CHANGELOG
index c9fe61359..fc1915f63 100644
--- a/sm5/CHANGELOG
+++ b/sm5/CHANGELOG
@@ -1,6 +1,6 @@
 CHANGELOG for smartmontools
 
-$Id: CHANGELOG,v 1.637 2007/11/13 14:53:27 jhering Exp $
+$Id: CHANGELOG,v 1.638 2007/11/19 12:31:42 jhering Exp $
 
 The most recent version of this file is:
 http://smartmontools.cvs.sourceforge.net/smartmontools/sm5/CHANGELOG?view=markup
@@ -33,6 +33,8 @@ Maintainers / Developers Key:
 NOTES FOR FUTURE RELEASES: see TODO file.
 
 <DEVELOPERS: ADDITIONS TO THE CHANGE LOG GO JUST BELOW HERE, PLEASE>
+  [JH] fix bad return code (get STATUS) for QNX Part
+
   [JH] initial porting to QNX Neutrino 6.3.2
        need at this time a prerelease devb-eide driver and libcam.so.2
        only tested for X86 Target, but devb-eide and lobcam.so.2 available for X86/ARM
diff --git a/sm5/os_qnxnto.cpp b/sm5/os_qnxnto.cpp
index 13094a9cb..15d2a090c 100644
--- a/sm5/os_qnxnto.cpp
+++ b/sm5/os_qnxnto.cpp
@@ -18,7 +18,7 @@
 // should have one *_H_CVSID macro appearing below for each file
 // appearing with #include "*.h" above.  Please list these (below) in
 // alphabetic/dictionary order.
-const char *os_XXXX_c_cvsid="$Id: os_qnxnto.cpp,v 1.1 2007/11/13 14:53:27 jhering Exp $" \
+const char *os_XXXX_c_cvsid="$Id: os_qnxnto.cpp,v 1.2 2007/11/19 12:32:12 jhering Exp $" \
 ATACMDS_H_CVSID CONFIG_H_CVSID INT64_H_CVSID OS_QNXNTO_H_CVSID SCSICMDS_H_CVSID UTILITY_H_CVSID;
 
 
@@ -189,168 +189,168 @@ int                  status,rc;
   switch(command)
    {
     case READ_VALUES:
-         cpt.cam_flags			= CAM_DIR_IN;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_dxfer_len		= 512;
-         cpt.cam_data_ptr		= (uint32_t)data;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_PIO_DATA_IN;
-         cdb->ata_pass_thru.flags	= ATA_FLG_T_DIR|ATA_FLG_TLEN_STPSIU;
-         cdb->ata_pass_thru.command	= ATA_SMART_CMD;
-         cdb->ata_pass_thru.features	= ATA_SMART_READ_VALUES;
-         cdb->ata_pass_thru.lba_mid	= ATA_SMART_LBA_MID_SIG;
-         cdb->ata_pass_thru.lba_high	= ATA_SMART_LBA_HI_SIG;
+         cpt.cam_flags                  = CAM_DIR_IN;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_dxfer_len              = 512;
+         cpt.cam_data_ptr               = (uint32_t)data;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_PIO_DATA_IN;
+         cdb->ata_pass_thru.flags       = ATA_FLG_T_DIR|ATA_FLG_TLEN_STPSIU;
+         cdb->ata_pass_thru.command     = ATA_SMART_CMD;
+         cdb->ata_pass_thru.features    = ATA_SMART_READ_VALUES;
+         cdb->ata_pass_thru.lba_mid     = ATA_SMART_LBA_MID_SIG;
+         cdb->ata_pass_thru.lba_high    = ATA_SMART_LBA_HI_SIG;
          break;
     case READ_THRESHOLDS:
-         cpt.cam_flags			= CAM_DIR_IN;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_dxfer_len		= 512;
-         cpt.cam_data_ptr		= (uint32_t)data;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_PIO_DATA_IN;
-         cdb->ata_pass_thru.flags	= ATA_FLG_T_DIR|ATA_FLG_TLEN_STPSIU;
-         cdb->ata_pass_thru.command	= ATA_SMART_CMD;
-         cdb->ata_pass_thru.features	= ATA_SMART_READ_THRESHOLDS;
-         cdb->ata_pass_thru.lba_mid	= ATA_SMART_LBA_MID_SIG;
-         cdb->ata_pass_thru.lba_high	= ATA_SMART_LBA_HI_SIG;
+         cpt.cam_flags                  = CAM_DIR_IN;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_dxfer_len              = 512;
+         cpt.cam_data_ptr               = (uint32_t)data;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_PIO_DATA_IN;
+         cdb->ata_pass_thru.flags       = ATA_FLG_T_DIR|ATA_FLG_TLEN_STPSIU;
+         cdb->ata_pass_thru.command     = ATA_SMART_CMD;
+         cdb->ata_pass_thru.features    = ATA_SMART_READ_THRESHOLDS;
+         cdb->ata_pass_thru.lba_mid     = ATA_SMART_LBA_MID_SIG;
+         cdb->ata_pass_thru.lba_high    = ATA_SMART_LBA_HI_SIG;
          break;
     case READ_LOG:
-         cpt.cam_flags			= CAM_DIR_IN;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_dxfer_len		= 512;
-         cpt.cam_data_ptr		= (uint32_t)data;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_PIO_DATA_IN;
-         cdb->ata_pass_thru.flags	= ATA_FLG_T_DIR | ATA_FLG_TLEN_STPSIU;
-         cdb->ata_pass_thru.command	= ATA_SMART_CMD;
-         cdb->ata_pass_thru.features	= ATA_SMART_READ_LOG_SECTOR;
+         cpt.cam_flags                  = CAM_DIR_IN;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_dxfer_len              = 512;
+         cpt.cam_data_ptr               = (uint32_t)data;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_PIO_DATA_IN;
+         cdb->ata_pass_thru.flags       = ATA_FLG_T_DIR|ATA_FLG_TLEN_STPSIU;
+         cdb->ata_pass_thru.command     = ATA_SMART_CMD;
+         cdb->ata_pass_thru.features    = ATA_SMART_READ_LOG_SECTOR;
          cdb->ata_pass_thru.sector_count= 1;
-         cdb->ata_pass_thru.lba_low	= select;
-         cdb->ata_pass_thru.lba_mid	= ATA_SMART_LBA_MID_SIG;
-         cdb->ata_pass_thru.lba_high	= ATA_SMART_LBA_HI_SIG;
+         cdb->ata_pass_thru.lba_low     = select;
+         cdb->ata_pass_thru.lba_mid     = ATA_SMART_LBA_MID_SIG;
+         cdb->ata_pass_thru.lba_high    = ATA_SMART_LBA_HI_SIG;
          break;
     case WRITE_LOG:
          return(-1);
          break;
     case IDENTIFY:
-         cpt.cam_flags			= CAM_DIR_IN;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_dxfer_len		= 512;
-         cpt.cam_data_ptr		= (uint32_t)data;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_PIO_DATA_IN;
-         cdb->ata_pass_thru.flags	= ATA_FLG_T_DIR|ATA_FLG_TLEN_STPSIU;
-         cdb->ata_pass_thru.command	= ATA_IDENTIFY_DEVICE;
+         cpt.cam_flags                  = CAM_DIR_IN;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_dxfer_len              = 512;
+         cpt.cam_data_ptr               = (uint32_t)data;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_PIO_DATA_IN;
+         cdb->ata_pass_thru.flags       = ATA_FLG_T_DIR|ATA_FLG_TLEN_STPSIU;
+         cdb->ata_pass_thru.command     = ATA_IDENTIFY_DEVICE;
          break;
     case PIDENTIFY:
-         cpt.cam_flags			= CAM_DIR_IN;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_dxfer_len		= 512;
-         cpt.cam_data_ptr		= (uint32_t)data;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_PIO_DATA_IN;
-         cdb->ata_pass_thru.flags	= ATA_FLG_T_DIR|ATA_FLG_TLEN_STPSIU;
-         cdb->ata_pass_thru.command	= ATA_IDENTIFY_PACKET_DEVICE;
+         cpt.cam_flags                  = CAM_DIR_IN;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_dxfer_len              = 512;
+         cpt.cam_data_ptr               = (uint32_t)data;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_PIO_DATA_IN;
+         cdb->ata_pass_thru.flags       = ATA_FLG_T_DIR|ATA_FLG_TLEN_STPSIU;
+         cdb->ata_pass_thru.command     = ATA_IDENTIFY_PACKET_DEVICE;
          break;
     case ENABLE:
-         cpt.cam_flags			= CAM_DIR_NONE;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_DATA_NONE;
-         cdb->ata_pass_thru.command	= ATA_SMART_CMD;
-         cdb->ata_pass_thru.features	= ATA_SMART_ENABLE;
-         cdb->ata_pass_thru.lba_mid	= ATA_SMART_LBA_MID_SIG;
-         cdb->ata_pass_thru.lba_high	= ATA_SMART_LBA_HI_SIG;
+         cpt.cam_flags                  = CAM_DIR_NONE;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_DATA_NONE;
+         cdb->ata_pass_thru.command     = ATA_SMART_CMD;
+         cdb->ata_pass_thru.features    = ATA_SMART_ENABLE;
+         cdb->ata_pass_thru.lba_mid     = ATA_SMART_LBA_MID_SIG;
+         cdb->ata_pass_thru.lba_high    = ATA_SMART_LBA_HI_SIG;
          break;
     case DISABLE:
-         cpt.cam_flags			= CAM_DIR_NONE;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_DATA_NONE;
-         cdb->ata_pass_thru.command	= ATA_SMART_CMD;
-         cdb->ata_pass_thru.features	= ATA_SMART_DISABLE;
-         cdb->ata_pass_thru.lba_mid	= ATA_SMART_LBA_MID_SIG;
-         cdb->ata_pass_thru.lba_high	= ATA_SMART_LBA_HI_SIG;
+         cpt.cam_flags                  = CAM_DIR_NONE;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_DATA_NONE;
+         cdb->ata_pass_thru.command     = ATA_SMART_CMD;
+         cdb->ata_pass_thru.features    = ATA_SMART_DISABLE;
+         cdb->ata_pass_thru.lba_mid     = ATA_SMART_LBA_MID_SIG;
+         cdb->ata_pass_thru.lba_high    = ATA_SMART_LBA_HI_SIG;
          break;
     case AUTO_OFFLINE:
     // NOTE: According to ATAPI 4 and UP, this command is obsolete 
-         cpt.cam_flags			= CAM_DIR_NONE;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_DATA_NONE;
-         cdb->ata_pass_thru.command	= ATA_SMART_CMD;
-         cdb->ata_pass_thru.features	= ATA_SMART_AUTO_OFFLINE;
-         cdb->ata_pass_thru.lba_low	= select;
-         cdb->ata_pass_thru.lba_mid	= ATA_SMART_LBA_MID_SIG;
-         cdb->ata_pass_thru.lba_high	= ATA_SMART_LBA_HI_SIG;
+         cpt.cam_flags                  = CAM_DIR_NONE;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_DATA_NONE;
+         cdb->ata_pass_thru.command     = ATA_SMART_CMD;
+         cdb->ata_pass_thru.features    = ATA_SMART_AUTO_OFFLINE;
+         cdb->ata_pass_thru.lba_low     = select;
+         cdb->ata_pass_thru.lba_mid     = ATA_SMART_LBA_MID_SIG;
+         cdb->ata_pass_thru.lba_high    = ATA_SMART_LBA_HI_SIG;
          break;
     case AUTOSAVE:
-         cpt.cam_flags			= CAM_DIR_NONE;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_DATA_NONE;
-         cdb->ata_pass_thru.command	= ATA_SMART_CMD;
-         cdb->ata_pass_thru.features	= ATA_SMART_AUTOSAVE;
+         cpt.cam_flags                  = CAM_DIR_NONE;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_DATA_NONE;
+         cdb->ata_pass_thru.command     = ATA_SMART_CMD;
+         cdb->ata_pass_thru.features    = ATA_SMART_AUTOSAVE;
          cdb->ata_pass_thru.sector_count= select;
-         cdb->ata_pass_thru.lba_mid	= ATA_SMART_LBA_MID_SIG;
-         cdb->ata_pass_thru.lba_high	= ATA_SMART_LBA_HI_SIG;
+         cdb->ata_pass_thru.lba_mid     = ATA_SMART_LBA_MID_SIG;
+         cdb->ata_pass_thru.lba_high    = ATA_SMART_LBA_HI_SIG;
          break;
     case IMMEDIATE_OFFLINE:
     // NOTE: According to ATAPI 4 and UP, this command is obsolete 
-         cpt.cam_flags			= CAM_DIR_NONE;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_DATA_NONE;
-         cdb->ata_pass_thru.command	= ATA_SMART_CMD;
-         cdb->ata_pass_thru.features	= ATA_SMART_IMMEDIATE_OFFLINE;
-         cdb->ata_pass_thru.lba_low	= select;
-         cdb->ata_pass_thru.lba_mid	= ATA_SMART_LBA_MID_SIG;
-         cdb->ata_pass_thru.lba_high	= ATA_SMART_LBA_HI_SIG;
+         cpt.cam_flags                  = CAM_DIR_NONE;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_DATA_NONE;
+         cdb->ata_pass_thru.command     = ATA_SMART_CMD;
+         cdb->ata_pass_thru.features    = ATA_SMART_IMMEDIATE_OFFLINE;
+         cdb->ata_pass_thru.lba_low     = select;
+         cdb->ata_pass_thru.lba_mid     = ATA_SMART_LBA_MID_SIG;
+         cdb->ata_pass_thru.lba_high    = ATA_SMART_LBA_HI_SIG;
          break;
     case STATUS_CHECK:
     // same command, no HDIO in NetBSD 
     case STATUS:
-         cpt.cam_flags			= CAM_DIR_NONE;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_DATA_NONE;
-         cdb->ata_pass_thru.flags	= ATA_FLG_CK_COND;
-         cdb->ata_pass_thru.command	= ATA_SMART_CMD;
-         cdb->ata_pass_thru.features	= ATA_SMART_STATUS;
-         cdb->ata_pass_thru.lba_mid	= ATA_SMART_LBA_MID_SIG;
-         cdb->ata_pass_thru.lba_high	= ATA_SMART_LBA_HI_SIG;
+         cpt.cam_flags                  = CAM_DIR_NONE;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_DATA_NONE;
+         cdb->ata_pass_thru.flags       = ATA_FLG_CK_COND;
+         cdb->ata_pass_thru.command     = ATA_SMART_CMD;
+         cdb->ata_pass_thru.features    = ATA_SMART_STATUS;
+         cdb->ata_pass_thru.lba_mid     = ATA_SMART_LBA_MID_SIG;
+         cdb->ata_pass_thru.lba_high    = ATA_SMART_LBA_HI_SIG;
          break;
     case CHECK_POWER_MODE:
-         cpt.cam_flags			= CAM_DIR_NONE;
-         cpt.cam_cdb_len		= 16;
-         cpt.cam_sense_len		= sizeof(sense);
-         cpt.cam_sense_ptr		= (uint32_t)&sense;
-         cdb->ata_pass_thru.opcode	= SC_ATA_PT16;
-         cdb->ata_pass_thru.protocol	= ATA_PROTO_DATA_NONE;
-         cdb->ata_pass_thru.flags	= ATA_FLG_CK_COND;
-         cdb->ata_pass_thru.command	= ATA_CHECK_POWER_MODE;
+         cpt.cam_flags                  = CAM_DIR_NONE;
+         cpt.cam_cdb_len                = 16;
+         cpt.cam_sense_len              = sizeof(sense);
+         cpt.cam_sense_ptr              = (uint32_t)&sense;
+         cdb->ata_pass_thru.opcode      = SC_ATA_PT16;
+         cdb->ata_pass_thru.protocol    = ATA_PROTO_DATA_NONE;
+         cdb->ata_pass_thru.flags       = ATA_FLG_CK_COND;
+         cdb->ata_pass_thru.command     = ATA_CHECK_POWER_MODE;
          break;
     default:
          pout("Unrecognized command %d in ata_command_interface()\n", command);
@@ -359,11 +359,15 @@ int                  status,rc;
    }
 // execute now
   if((status=ata_pass_thru(fd,&cpt))==EOK)
+   {
+    rc=status==EOK?0:-1;
     if(cpt.cam_status!=CAM_REQ_CMP)
+     {
       ata_interpret_sense(&cpt,&sense,&status,0);
-  rc=status==EOK?0:1;
-  if((command==STATUS||command==STATUS_CHECK)&&status==EOK)
-    rc=((sense.desc.lba_high<<8)|sense.desc.lba_mid)==ATA_SMART_SIG?0:1;
+      if(command==STATUS||command==STATUS_CHECK)
+        rc=((sense.desc.lba_high<<8)|sense.desc.lba_mid)==ATA_SMART_SIG?0:1;
+     }
+   }
   if(command==CHECK_POWER_MODE)
     data[0]=cdb->ata_pass_thru.sector_count;
 // finish
-- 
GitLab