From df28907b13e56a43436f35574244f2b85f577f0b Mon Sep 17 00:00:00 2001 From: martin Date: Wed, 7 Sep 2005 07:32:10 +0000 Subject: Make this work on big endian NetBSD machines. (Patches already forwarded to the maintainers) --- sysutils/smartmontools/patches/patch-ab | 137 ++++++++++++++++++++++++++++++-- sysutils/smartmontools/patches/patch-ac | 22 +++++ sysutils/smartmontools/patches/patch-ad | 16 ++++ 3 files changed, 170 insertions(+), 5 deletions(-) create mode 100644 sysutils/smartmontools/patches/patch-ac create mode 100644 sysutils/smartmontools/patches/patch-ad (limited to 'sysutils/smartmontools/patches') diff --git a/sysutils/smartmontools/patches/patch-ab b/sysutils/smartmontools/patches/patch-ab index df225afaace..04da9df2ec2 100644 --- a/sysutils/smartmontools/patches/patch-ab +++ b/sysutils/smartmontools/patches/patch-ab @@ -1,13 +1,140 @@ -$NetBSD: patch-ab,v 1.4 2005/07/19 04:01:41 kristerw Exp $ +$NetBSD: patch-ab,v 1.5 2005/09/07 07:32:10 martin Exp $ ---- os_netbsd.c.orig Tue Apr 20 06:53:26 2004 -+++ os_netbsd.c Tue Jul 19 05:49:51 2005 -@@ -23,2 +23,3 @@ +--- 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 -@@ -383,3 +384,3 @@ +@@ -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)); diff --git a/sysutils/smartmontools/patches/patch-ac b/sysutils/smartmontools/patches/patch-ac new file mode 100644 index 00000000000..f2d7966fcf0 --- /dev/null +++ b/sysutils/smartmontools/patches/patch-ac @@ -0,0 +1,22 @@ +$NetBSD: patch-ac,v 1.1 2005/09/07 07:32:10 martin Exp $ + +--- atacmds.c.orig 2004-06-03 05:47:06.000000000 +0200 ++++ atacmds.c 2005-08-10 22:18:14.000000000 +0200 +@@ -673,7 +673,9 @@ int ataReadHDIdentity (int device, struc + } + } + ++#ifndef __NetBSD__ + // if machine is big-endian, swap byte order as needed ++ // (the NetBSD kernel does deliver the results in host byte order) + if (isbigendian()){ + int i; + +@@ -682,6 +684,7 @@ int ataReadHDIdentity (int device, struc + for (i=80; i<=87; i++) + swap2((char *)(rawshort+i)); + } ++#endif + + // If there is a checksum there, validate it + if ((rawshort[255] & 0x00ff) == 0x00a5 && checksum(rawbyte)) diff --git a/sysutils/smartmontools/patches/patch-ad b/sysutils/smartmontools/patches/patch-ad new file mode 100644 index 00000000000..938cf04f2ef --- /dev/null +++ b/sysutils/smartmontools/patches/patch-ad @@ -0,0 +1,16 @@ +$NetBSD: patch-ad,v 1.1 2005/09/07 07:32:10 martin Exp $ + +--- ataprint.c.orig 2004-06-04 22:59:16.000000000 +0200 ++++ ataprint.c 2005-08-15 22:18:08.000000000 +0200 +@@ -90,7 +90,11 @@ void formatdriveidstring(char *out, cons + char tmp[65]; + + n = n > 64 ? 64 : n; ++#ifndef __NetBSD__ + swapbytes(tmp, in, n); ++#else ++ strncpy(tmp, in, n); /* NetBSD delivers host byte order strings */ ++#endif + tmp[n] = '\0'; + trim(out, tmp); + } -- cgit v1.2.3