From ee7d326e955728ad1110320c87fb2b0f62f42e3b Mon Sep 17 00:00:00 2001
From: dlukes <dlukes@4ea69e1a-61f1-4043-bf83-b5c94c648137>
Date: Wed, 17 Dec 2008 12:30:18 +0000
Subject: [PATCH] os_freebsd.cpp: Added support for CHECK_POWER_MODE and
 WRITE_LOG commands

git-svn-id: https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk@2686 4ea69e1a-61f1-4043-bf83-b5c94c648137
---
 sm5/CHANGELOG      |  6 +++++-
 sm5/os_freebsd.cpp | 22 ++++++++++++++++++++--
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/sm5/CHANGELOG b/sm5/CHANGELOG
index 1299b441a..5ba9d073a 100644
--- a/sm5/CHANGELOG
+++ b/sm5/CHANGELOG
@@ -1,6 +1,6 @@
 CHANGELOG for smartmontools
 
-$Id: CHANGELOG,v 1.754 2008/12/10 22:09:34 manfred99 Exp $
+$Id: CHANGELOG,v 1.755 2008/12/17 12:30:18 dlukes Exp $
 
 The most recent version of this file is:
 http://smartmontools.cvs.sourceforge.net/smartmontools/sm5/CHANGELOG?view=markup
@@ -35,11 +35,15 @@ Maintainers / Developers Key:
 [RZ] Richard Zybert
 [SZ] Sf Zhou
 [JPH] Jordan Powell Hargrave
+[DL] Dan Lukes
 
 NOTES FOR FUTURE RELEASES: see TODO file.
 
 <DEVELOPERS: ADDITIONS TO THE CHANGE LOG GO JUST BELOW HERE, PLEASE>
 
+  [DL] os_freebsd.cpp:
+       Added support for CHECK_POWER_MODE and WRITE_LOG commands
+
   [MS] knowndrives.cpp update:
        There seem to exist WD Raptors with SATA II interface, add them.
 
diff --git a/sm5/os_freebsd.cpp b/sm5/os_freebsd.cpp
index 1da1b25c2..e9a435991 100644
--- a/sm5/os_freebsd.cpp
+++ b/sm5/os_freebsd.cpp
@@ -44,9 +44,9 @@
 #include "extern.h"
 #include "os_freebsd.h"
 
-static const char *filenameandversion="$Id: os_freebsd.cpp,v 1.69 2008/11/03 17:00:47 dpgilbert Exp $";
+static const char *filenameandversion="$Id: os_freebsd.cpp,v 1.70 2008/12/17 12:30:18 dlukes Exp $";
 
-const char *os_XXXX_c_cvsid="$Id: os_freebsd.cpp,v 1.69 2008/11/03 17:00:47 dpgilbert Exp $" \
+const char *os_XXXX_c_cvsid="$Id: os_freebsd.cpp,v 1.70 2008/12/17 12:30:18 dlukes Exp $" \
 ATACMDS_H_CVSID CCISS_H_CVSID CONFIG_H_CVSID INT64_H_CVSID OS_FREEBSD_H_CVSID SCSICMDS_H_CVSID UTILITY_H_CVSID;
 
 extern smartmonctrl * con;
@@ -387,6 +387,20 @@ int ata_command_interface(int fd, smart_command_set command, int select, char *d
     request.u.ata.lba=0xc24f<<8;
     request.flags=ATA_CMD_CONTROL;
     break;
+  case CHECK_POWER_MODE:
+    request.u.ata.command=ATA_CHECK_POWER_MODE;
+    request.u.ata.feature=0;
+    request.flags=ATA_CMD_CONTROL;
+    break;
+  case WRITE_LOG:
+    memcpy(buff, data, 512);
+    request.u.ata.feature=ATA_SMART_WRITE_LOG_SECTOR;
+    request.u.ata.lba=select|(0xc24f<<8);
+    request.u.ata.count=1;
+    request.flags=ATA_CMD_WRITE;
+    request.data=(char *)buff;
+    request.count=512;
+    break;
   default:
     pout("Unrecognized command %d in ata_command_interface()\n"
          "Please contact " PACKAGE_BUGREPORT "\n", command);
@@ -444,6 +458,10 @@ int ata_command_interface(int fd, smart_command_set command, int select, char *d
     return -1;
   }
   // 
+  if (command == CHECK_POWER_MODE) {
+    data[0] = request.u.ata.count & 0xff;
+    return 0;
+  }
   if (copydata)
     memcpy(data, buff, 512);
   
-- 
GitLab