59449b4e37
(Patches already forwarded to the maintainers)
140 lines
4.8 KiB
Text
140 lines
4.8 KiB
Text
$NetBSD: patch-ab,v 1.5 2005/09/07 07:32:10 martin Exp $
|
|
|
|
--- os_netbsd.c.orig 2004-04-20 06:53:26.000000000 +0200
|
|
+++ os_netbsd.c 2005-09-06 23:02:45.000000000 +0200
|
|
@@ -21,4 +21,5 @@
|
|
#include "scsicmds.h"
|
|
#include "utility.h"
|
|
#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));
|