pkgsrc/sysutils/smartmontools/patches/patch-ab
martin 59449b4e37 Make this work on big endian NetBSD machines.
(Patches already forwarded to the maintainers)
2005-09-07 07:32:10 +00:00

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));