$NetBSD: patch-ab,v 1.6 2005/10/27 21:36:13 kristerw Exp $

--- os_netbsd.c.orig	2004-04-20 06:53:26.000000000 +0200
+++ os_netbsd.c	2005-09-06 23:02:45.000000000 +0200
@@ -23,2 +23,3 @@
 #include "os_netbsd.h"
+#include <unistd.h>
 
@@ -180,9 +181,9 @@ ata_command_interface(int fd, smart_comm
     req.flags = ATACMD_READ;
     req.features = WDSM_RD_DATA;
     req.command = WDCC_SMART;
-    req.databuf = (caddr_t) inbuf;
+    req.databuf = inbuf;
     req.datalen = sizeof(inbuf);
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.timeout = 1000;
     copydata = 1;
     break;
@@ -190,9 +191,9 @@ ata_command_interface(int fd, smart_comm
     req.flags = ATACMD_READ;
     req.features = WDSM_RD_THRESHOLDS;
     req.command = WDCC_SMART;
-    req.databuf = (caddr_t) inbuf;
+    req.databuf = inbuf;
     req.datalen = sizeof(inbuf);
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.timeout = 1000;
     copydata = 1;
     break;
@@ -200,9 +201,9 @@ ata_command_interface(int fd, smart_comm
     req.flags = ATACMD_READ;
     req.features = ATA_SMART_READ_LOG_SECTOR;	/* XXX missing from wdcreg.h */
     req.command = WDCC_SMART;
-    req.databuf = (caddr_t) inbuf;
+    req.databuf = inbuf;
     req.datalen = sizeof(inbuf);
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.sec_num = select;
     req.sec_count = 1;
     req.timeout = 1000;
@@ -213,9 +214,9 @@ ata_command_interface(int fd, smart_comm
     req.flags = ATACMD_WRITE;
     req.features = ATA_SMART_WRITE_LOG_SECTOR;	/* XXX missing from wdcreg.h */
     req.command = WDCC_SMART;
-    req.databuf = (caddr_t) inbuf;
+    req.databuf = inbuf;
     req.datalen = sizeof(inbuf);
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.sec_num = select;
     req.sec_count = 1;
     req.timeout = 1000;
@@ -240,14 +241,14 @@ ata_command_interface(int fd, smart_comm
     req.flags = ATACMD_READ;
     req.features = WDSM_ENABLE_OPS;
     req.command = WDCC_SMART;
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.timeout = 1000;
     break;
   case DISABLE:
     req.flags = ATACMD_READ;
     req.features = WDSM_DISABLE_OPS;
     req.command = WDCC_SMART;
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.timeout = 1000;
     break;
   case AUTO_OFFLINE:
@@ -255,9 +256,9 @@ ata_command_interface(int fd, smart_comm
     req.flags = ATACMD_READ;
     req.features = ATA_SMART_AUTO_OFFLINE;	/* XXX missing from wdcreg.h */
     req.command = WDCC_SMART;
-    req.databuf = (caddr_t) inbuf;
+    req.databuf = inbuf;
     req.datalen = sizeof(inbuf);
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.sec_num = select;
     req.sec_count = 1;
     req.timeout = 1000;
@@ -266,7 +267,7 @@ ata_command_interface(int fd, smart_comm
     req.flags = ATACMD_READ;
     req.features = ATA_SMART_AUTOSAVE;	/* XXX missing from wdcreg.h */
     req.command = WDCC_SMART;
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.sec_count = 0xf1;
     /* to enable autosave */
     req.timeout = 1000;
@@ -276,9 +277,9 @@ ata_command_interface(int fd, smart_comm
     req.flags = ATACMD_READ;
     req.features = ATA_SMART_IMMEDIATE_OFFLINE;	/* XXX missing from wdcreg.h */
     req.command = WDCC_SMART;
-    req.databuf = (caddr_t) inbuf;
+    req.databuf = inbuf;
     req.datalen = sizeof(inbuf);
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.sec_num = select;
     req.sec_count = 1;
     req.timeout = 1000;
@@ -289,7 +290,7 @@ ata_command_interface(int fd, smart_comm
     req.flags = ATACMD_READ;
     req.features = WDSM_STATUS;
     req.command = WDCC_SMART;
-    req.cylinder = htole16(WDSMART_CYL);
+    req.cylinder = WDSMART_CYL;
     req.timeout = 1000;
     break;
   case CHECK_POWER_MODE:
@@ -313,11 +314,11 @@ ata_command_interface(int fd, smart_comm
       return -1;
     }
     /* Cyl low and Cyl high unchanged means "Good SMART status" */
-    if (le16toh(req.cylinder) == normal)
+    if (req.cylinder == normal)
       return 0;
 
     /* These values mean "Bad SMART status" */
-    if (le16toh(req.cylinder) == failed)
+    if (req.cylinder == failed)
       return 1;
 
     /* We haven't gotten output that makes sense; 
@@ -381,7 +382,7 @@ do_scsi_cmnd_io(int fd, struct scsi_cmnd
   sc.databuf = iop->dxferp;
   sc.datalen = iop->dxfer_len;
   sc.senselen = iop->max_sense_len;
-  sc.timeout = iop->timeout == 0 ? 60000 : iop->timeout;	/* XXX */
+  sc.timeout = iop->timeout == 0 ? 60000 : (iop->timeout * 1000);	/* XXX */
   sc.flags =
     (iop->dxfer_dir == DXFER_NONE ? SCCMD_READ :	/* XXX */
     (iop->dxfer_dir == DXFER_FROM_DEVICE ? SCCMD_READ : SCCMD_WRITE));
