Bug 96206 - [patch] sysutils/smartmontools update to 5.36
[patch] sysutils/smartmontools update to 5.36
Status: Closed FIXED
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s)
Latest
Any Any
: Normal Affects Only Me
Assigned To: Renato Botelho
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2006-04-23 15:40 UTC by Dmitry Morozovsky
Modified: 2006-05-11 18:03 UTC (History)
1 user (show)

See Also:


Attachments
file.diff (31.78 KB, patch)
2006-04-23 15:40 UTC, Dmitry Morozovsky
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Dmitry Morozovsky freebsd_committer 2006-04-23 15:40:16 UTC

This is update of smartmontools, incorporating almost two year changes,
including FreeBSD port patches.

Fix: [patches should be cvs rm'ed]
Comment 1 Edwin Groothuis freebsd_committer 2006-04-23 15:44:11 UTC
State Changed
From-To: open->feedback

Awaiting maintainers feedback
Comment 2 Dmitry Morozovsky freebsd_committer 2006-04-23 18:20:25 UTC
On Sun, 23 Apr 2006, Edwin Groothuis wrote:

I found two Maxtor lines are missing from knowndrives, hence the patch:

--- knowndrives.c.orig  Wed Apr  5 23:50:07 2006
+++ knowndrives.c       Sun Apr 23 20:46:00 2006
@@ -562,6 +562,20 @@
     vendoropts_9_minutes,
     NULL, NULL
   },
+  { "Maxtor MaXLine Pro 500",
+    "^Maxtor 7H500[FR]0$",
+    ".*",
+    NULL,
+    vendoropts_9_minutes,
+    NULL, NULL
+  },
+  { "Maxtor MaXLine III family",
+    "^Maxtor 7[LV](30|25)0[FRS]0$",
+    ".*",
+    NULL,
+    vendoropts_9_minutes,
+    NULL, NULL
+  },
   { "Maxtor MaXLine Plus II",
     "^Maxtor 7Y250[PM]0$",
     ".*",


Sincerely,
D.Marck                                        [DM5020, MCK-RIPE, DM3-RIPN]
---------------------------------------------------------------------------
*** Dmitry Morozovsky --- D.Marck --- Wild Woozle --- marck@FreeBSD.org ***
---------------------------------------------------------------------------
Comment 3 martines 2006-04-25 23:04:38 UTC
Looks good to me. There is also another pr, ports/96325 which may be
duplicating this patch.

Ed
Comment 4 Mark Linimon freebsd_committer 2006-04-25 23:45:26 UTC
State Changed
From-To: feedback->open

Maintainer approved.
Comment 5 Renato Botelho freebsd_committer 2006-04-26 20:38:18 UTC
Responsible Changed
From-To: freebsd-ports-bugs->garga

I'll take it.
Comment 6 Renato Botelho freebsd_committer 2006-04-27 12:35:21 UTC
Dear maintainer,

Since i'm here, i propose you following patch. Most significant changes are:
  * Move files/smartd.sh -> files/smartd.in, and use USE_RC_SUBR=smartd.in,
    it does install automatically rc.d script, change %%MACROS%%...
  * Move pkg-message -> files/pkg-message.in and use SUB_LIST facility

Please, take a look and tell me if you approve this.

----------------------------- smartmontools.diff starts here ----------
Index: Makefile
===================================================================
RCS file: /home/pcvs/ports/sysutils/smartmontools/Makefile,v
retrieving revision 1.22
diff -u -r1.22 Makefile
--- Makefile	7 Jan 2006 06:29:55 -0000	1.22
+++ Makefile	27 Apr 2006 11:30:10 -0000
@@ -6,8 +6,7 @@
 #
 
 PORTNAME=	smartmontools
-PORTVERSION=	5.33
-PORTREVISION=	5
+PORTVERSION=	5.36
 CATEGORIES=	sysutils
 MASTER_SITES=	${MASTER_SITE_SOURCEFORGE}
 MASTER_SITE_SUBDIR=	${PORTNAME}
@@ -16,29 +15,25 @@
 COMMENT=	S.M.A.R.T. disk monitoring tools
 
 USE_GMAKE=	yes
-USE_RC_SUBR=	yes
 GNU_CONFIGURE=	yes
 CONFIGURE_ARGS=	--with-initscriptdir=${PREFIX}/etc/rc.d \
 		--with-docdir=${DOCSDIR} --enable-sample
 CONFIGURE_TARGET=	--build=${MACHINE_ARCH}-portbld-freebsd${OSREL}
 
+SUB_FILES=	pkg-message
+USE_RC_SUBR=	smartd
+
 PROGRAMS=	smartctl smartd
 MAN5=		smartd.conf.5
 MAN8=		smartd.8 smartctl.8
 DOCS=		AUTHORS CHANGELOG INSTALL NEWS README TODO WARNINGS
 EXAMPLES=	smartd.conf examplescripts/README examplescripts/Example?
-RC_SCRIPTS_SUB=	PREFIX=${PREFIX} RC_SUBR=${RC_SUBR}
-
-post-build:
-	${SED}	${RC_SCRIPTS_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} \
-		${FILESDIR}/smartd.sh > ${WRKDIR}/smartd.sh
 
 do-install:
 	cd ${WRKSRC} && ${INSTALL_PROGRAM} ${PROGRAMS} ${PREFIX}/sbin
 	cd ${WRKSRC} && ${INSTALL_MAN} ${MAN5} ${MANPREFIX}/man/man5
 	cd ${WRKSRC} && ${INSTALL_MAN} ${MAN8} ${MANPREFIX}/man/man8
 	${INSTALL_DATA} ${WRKSRC}/smartd.conf.sample ${PREFIX}/etc
-	${INSTALL_SCRIPT} ${WRKDIR}/smartd.sh ${PREFIX}/etc/rc.d/smartd.sh
 	@${MKDIR} ${EXAMPLESDIR}
 	cd ${WRKSRC} && ${INSTALL_DATA} ${EXAMPLES} ${EXAMPLESDIR}
 .if !defined(NOPORTDOCS)
@@ -49,6 +44,6 @@
 .include <bsd.port.pre.mk>
 
 post-install:
-	${CAT} ${PKGMESSAGE}
+	@${CAT} ${PKGMESSAGE}
 
 .include <bsd.port.post.mk>
Index: distinfo
===================================================================
RCS file: /home/pcvs/ports/sysutils/smartmontools/distinfo,v
retrieving revision 1.8
diff -u -r1.8 distinfo
--- distinfo	24 Jan 2006 01:06:32 -0000	1.8
+++ distinfo	27 Apr 2006 11:30:10 -0000
@@ -1,3 +1,3 @@
-MD5 (smartmontools-5.33.tar.gz) = 53f6861a916169a88a9edb1848e27dd0
-SHA256 (smartmontools-5.33.tar.gz) = 2fdde1b4e610cd6e004db8f98ac1100fcbea03b8f11e236de536ce22bc6c620d
-SIZE (smartmontools-5.33.tar.gz) = 509826
+MD5 (smartmontools-5.36.tar.gz) = 2e424f2d35efa38a29ebca419c1dbe3c
+SHA256 (smartmontools-5.36.tar.gz) = f2032adf22f8d17aad7f3dbed0a9361c25e273d3ca6abb996c84159afd624bf4
+SIZE (smartmontools-5.36.tar.gz) = 540786
Index: pkg-message
===================================================================
RCS file: pkg-message
diff -N pkg-message
--- pkg-message	15 Mar 2006 08:16:30 -0000	1.4
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,13 +0,0 @@
-smartmontools has been installed
-
-To check the status of drives, use the following:
-
-	${PREFIX}/sbin/smartctl -a /dev/ad0		for first ATA drive
-	${PREFIX}/sbin/smartctl -a /dev/da0		for first SCSI drive
-
-To enable monitor of drives, you can use ${PREFIX}/sbin/smartd
-A sample configuration file has been installed as ${PREFIX}/etc/smartd.conf.sample
-Copy this file to ${PREFIX}/etc/smartd.conf and edit appropriately
-
-To have smartd start at boot
-	echo 'smartd_enable="YES"' >> /etc/rc.conf
Index: pkg-plist
===================================================================
RCS file: /home/pcvs/ports/sysutils/smartmontools/pkg-plist,v
retrieving revision 1.2
diff -u -r1.2 pkg-plist
--- pkg-plist	28 Apr 2004 18:27:52 -0000	1.2
+++ pkg-plist	27 Apr 2006 11:30:10 -0000
@@ -2,7 +2,6 @@
 @unexec /bin/echo "===>" Stopping smartd ...
 @unexec /usr/bin/killall smartd 2>/dev/null || true
 etc/smartd.conf.sample
-etc/rc.d/smartd.sh
 sbin/smartctl
 sbin/smartd
 %%PORTDOCS%%%%DOCSDIR%%/AUTHORS
Index: files/patch-config.h.in
===================================================================
RCS file: files/patch-config.h.in
diff -N files/patch-config.h.in
--- files/patch-config.h.in	10 Oct 2005 12:39:59 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
---- config.h.in.orig	Thu Aug  4 15:16:22 2005
-+++ config.h.in	Thu Aug  4 15:19:21 2005
-@@ -66,6 +66,9 @@
- /* Define to 1 if you have the <sys/twereg.h> header file. */
- #undef HAVE_SYS_TWEREG_H
- 
-+/* Define to 1 if you have the <sys/tw_osl_ioctl.h> header file. */
-+#undef HAVE_SYS_TW_OSL_IOCTL_H
-+
- /* Define to 1 if you have the <sys/types.h> header file. */
- #undef HAVE_SYS_TYPES_H
- 
Index: files/patch-configure.in
===================================================================
RCS file: files/patch-configure.in
diff -N files/patch-configure.in
--- files/patch-configure.in	10 Oct 2005 12:39:59 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,11 +0,0 @@
---- configure.in.orig	Thu Aug  4 15:16:15 2005
-+++ configure.in	Thu Aug  4 15:18:50 2005
-@@ -56,6 +56,8 @@
- dnl Check for FreeBSD twe include files...currently missing on 5.2, but should be there
- AC_CHECK_HEADERS([sys/tweio.h])
- AC_CHECK_HEADERS([sys/twereg.h])
-+dnl Check for FreeBSD twa include files...
-+AC_CHECK_HEADERS([sys/tw_osl_ioctl.h])
- 
- dnl Checks for typedefs, structures, and compiler characteristics.
- 
Index: files/patch-knowndrives.c
===================================================================
RCS file: files/patch-knowndrives.c
diff -N files/patch-knowndrives.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-knowndrives.c	27 Apr 2006 11:30:10 -0000
@@ -0,0 +1,23 @@
+--- knowndrives.c.orig  Wed Apr  5 23:50:07 2006
++++ knowndrives.c       Sun Apr 23 20:46:00 2006
+@@ -562,6 +562,20 @@
+     vendoropts_9_minutes,
+     NULL, NULL
+   },
++  { "Maxtor MaXLine Pro 500",
++    "^Maxtor 7H500[FR]0$",
++    ".*",
++    NULL,
++    vendoropts_9_minutes,
++    NULL, NULL
++  },
++  { "Maxtor MaXLine III family",
++    "^Maxtor 7[LV](30|25)0[FRS]0$",
++    ".*",
++    NULL,
++    vendoropts_9_minutes,
++    NULL, NULL
++  },
+   { "Maxtor MaXLine Plus II",
+     "^Maxtor 7Y250[PM]0$",
+     ".*",
Index: files/patch-os_freebsd.c
===================================================================
RCS file: files/patch-os_freebsd.c
diff -N files/patch-os_freebsd.c
--- files/patch-os_freebsd.c	10 Oct 2005 12:39:59 -0000	1.6
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,641 +0,0 @@
---- os_freebsd.c.orig	Sun Oct  9 13:00:56 2005
-+++ os_freebsd.c	Sun Oct  9 13:00:46 2005
-@@ -18,6 +18,7 @@
- #include <stdio.h>
- #include <sys/types.h>
- #include <dirent.h>
-+#include <fcntl.h>
- #include <err.h>
- #include <camlib.h>
- #include <cam/scsi/scsi_message.h>
-@@ -109,7 +110,11 @@
-   }
- 
-   if (parse_ok == CONTROLLER_ATA) {
-+#ifdef IOCATAREQUEST
-+    if ((fdchan->device = open(dev,O_RDONLY))<0) {
-+#else
-     if ((fdchan->atacommand = open("/dev/ata",O_RDWR))<0) {
-+#endif
-       int myerror = errno;      //preserve across free call
-       free (fdchan);
-       errno = myerror;
-@@ -120,7 +125,26 @@
-   if (parse_ok == CONTROLLER_3WARE_678K_CHAR) {
-     char buf[512];
-     sprintf(buf,"/dev/twe%d",fdchan->device);
-+#ifdef IOCATAREQUEST
-+    if ((fdchan->device = open(buf,O_RDWR))<0) {
-+#else
-     if ((fdchan->atacommand = open(buf,O_RDWR))<0) {
-+#endif
-+      int myerror = errno; // preserver across free call
-+      free(fdchan);
-+      errno=myerror;
-+      return -1;
-+    }
-+  }
-+
-+  if (parse_ok == CONTROLLER_3WARE_9000_CHAR) {
-+    char buf[512];
-+    sprintf(buf,"/dev/twa%d",fdchan->device);
-+#ifdef IOCATAREQUEST
-+    if ((fdchan->device = open(buf,O_RDWR))<0) {
-+#else
-+    if ((fdchan->atacommand = open(buf,O_RDWR))<0) {
-+#endif
-       int myerror = errno; // preserver across free call
-       free(fdchan);
-       errno=myerror;
-@@ -167,8 +191,13 @@
-     free(fdchan->devname);
-   
-   // close device, if open
-+#ifdef IOCATAREQUEST
-+  if (fdchan->device)
-+    failed=close(fdchan->device);
-+#else
-   if (fdchan->atacommand)
-     failed=close(fdchan->atacommand);
-+#endif
- 
-   if (fdchan->scsicontrol)
-     failed=close(fdchan->scsicontrol);
-@@ -221,7 +250,7 @@
- }
- 
- int ata_command_interface(int fd, smart_command_set command, int select, char *data) {
--#ifndef ATAREQUEST
-+#if !defined(ATAREQUEST) && !defined(IOCATAREQUEST)
-   // sorry, but without ATAng, we can't do anything here
-   printwarning(BAD_KERNEL,NULL);
-   errno = ENOSYS;
-@@ -229,7 +258,11 @@
- #else
-   struct freebsd_dev_channel* con;
-   int retval, copydata=0;
-+#ifdef IOCATAREQUEST
-+  struct ata_ioc_request request;
-+#else
-   struct ata_cmd iocmd;
-+#endif
-   unsigned char buff[512];
- 
-   // check that "file descriptor" is valid
-@@ -238,89 +271,97 @@
- 
-   bzero(buff,512);
- 
-+#ifdef IOCATAREQUEST
-+  bzero(&request,sizeof(struct ata_ioc_request));
-+#else
-   bzero(&iocmd,sizeof(struct ata_cmd));
-+#endif
-   bzero(buff,512);
-+
-+#ifndef IOCATAREQUEST
-   iocmd.cmd=ATAREQUEST;
-   iocmd.channel=con->channel;
-   iocmd.device=con->device;
-+#define request iocmd.u.request
-+#endif
- 
--  iocmd.u.request.u.ata.command=ATA_SMART_CMD;
--  iocmd.u.request.timeout=600;
-+  request.u.ata.command=ATA_SMART_CMD;
-+  request.timeout=600;
-   switch (command){
-   case READ_VALUES:
--    iocmd.u.request.u.ata.feature=ATA_SMART_READ_VALUES;
--    iocmd.u.request.u.ata.lba=0xc24f<<8;
--    iocmd.u.request.flags=ATA_CMD_READ;
--    iocmd.u.request.data=buff;
--    iocmd.u.request.count=512;
-+    request.u.ata.feature=ATA_SMART_READ_VALUES;
-+    request.u.ata.lba=0xc24f<<8;
-+    request.flags=ATA_CMD_READ;
-+    request.data=buff;
-+    request.count=512;
-     copydata=1;
-     break;
-   case READ_THRESHOLDS:
--    iocmd.u.request.u.ata.feature=ATA_SMART_READ_THRESHOLDS;
--    iocmd.u.request.u.ata.count=1;
--    iocmd.u.request.u.ata.lba=1|(0xc24f<<8);
--    iocmd.u.request.flags=ATA_CMD_READ;
--    iocmd.u.request.data=buff;
--    iocmd.u.request.count=512;
-+    request.u.ata.feature=ATA_SMART_READ_THRESHOLDS;
-+    request.u.ata.count=1;
-+    request.u.ata.lba=1|(0xc24f<<8);
-+    request.flags=ATA_CMD_READ;
-+    request.data=buff;
-+    request.count=512;
-     copydata=1;
-     break;
-   case READ_LOG:
--    iocmd.u.request.u.ata.feature=ATA_SMART_READ_LOG_SECTOR;
--    iocmd.u.request.u.ata.lba=select|(0xc24f<<8);
--    iocmd.u.request.u.ata.count=1;
--    iocmd.u.request.flags=ATA_CMD_READ;
--    iocmd.u.request.data=buff;
--    iocmd.u.request.count=512;
-+    request.u.ata.feature=ATA_SMART_READ_LOG_SECTOR;
-+    request.u.ata.lba=select|(0xc24f<<8);
-+    request.u.ata.count=1;
-+    request.flags=ATA_CMD_READ;
-+    request.data=buff;
-+    request.count=512;
-     copydata=1;
-     break;
-   case IDENTIFY:
--    iocmd.u.request.u.ata.command=ATA_IDENTIFY_DEVICE;
--    iocmd.u.request.flags=ATA_CMD_READ;
--    iocmd.u.request.data=buff;
--    iocmd.u.request.count=512;
-+    request.u.ata.command=ATA_IDENTIFY_DEVICE;
-+    request.flags=ATA_CMD_READ;
-+    request.data=buff;
-+    request.count=512;
-     copydata=1;
-     break;
-   case PIDENTIFY:
--    iocmd.u.request.u.ata.command=ATA_IDENTIFY_PACKET_DEVICE;
--    iocmd.u.request.flags=ATA_CMD_READ;
--    iocmd.u.request.data=buff;
--    iocmd.u.request.count=512;
-+    request.u.ata.command=ATA_IDENTIFY_PACKET_DEVICE;
-+    request.flags=ATA_CMD_READ;
-+    request.data=buff;
-+    request.count=512;
-     copydata=1;
-     break;
-   case ENABLE:
--    iocmd.u.request.u.ata.feature=ATA_SMART_ENABLE;
--    iocmd.u.request.u.ata.lba=0xc24f<<8;
--    iocmd.u.request.flags=ATA_CMD_CONTROL;
-+    request.u.ata.feature=ATA_SMART_ENABLE;
-+    request.u.ata.lba=0xc24f<<8;
-+    request.flags=ATA_CMD_CONTROL;
-     break;
-   case DISABLE:
--    iocmd.u.request.u.ata.feature=ATA_SMART_DISABLE;
--    iocmd.u.request.u.ata.lba=0xc24f<<8;
--    iocmd.u.request.flags=ATA_CMD_CONTROL;
-+    request.u.ata.feature=ATA_SMART_DISABLE;
-+    request.u.ata.lba=0xc24f<<8;
-+    request.flags=ATA_CMD_CONTROL;
-     break;
-   case AUTO_OFFLINE:
-     // NOTE: According to ATAPI 4 and UP, this command is obsolete
--    iocmd.u.request.u.ata.feature=ATA_SMART_AUTO_OFFLINE;
--    iocmd.u.request.u.ata.lba=select|(0xc24f<<8);
--    iocmd.u.request.flags=ATA_CMD_CONTROL;
-+    request.u.ata.feature=ATA_SMART_AUTO_OFFLINE;
-+    request.u.ata.lba=select|(0xc24f<<8);
-+    request.flags=ATA_CMD_CONTROL;
-     break;
-   case AUTOSAVE:
--    iocmd.u.request.u.ata.feature=ATA_SMART_AUTOSAVE;
--    iocmd.u.request.u.ata.count=0xf1;  // to enable autosave
--    iocmd.u.request.u.ata.lba=0xc24f<<8;
--    iocmd.u.request.flags=ATA_CMD_CONTROL;
-+    request.u.ata.feature=ATA_SMART_AUTOSAVE;
-+    request.u.ata.count=0xf1;  // to enable autosave
-+    request.u.ata.lba=0xc24f<<8;
-+    request.flags=ATA_CMD_CONTROL;
-     break;
-   case IMMEDIATE_OFFLINE:
--    iocmd.u.request.u.ata.feature=ATA_SMART_IMMEDIATE_OFFLINE;
--    iocmd.u.request.u.ata.lba = select|(0xc24f<<8); // put test in sector
--    iocmd.u.request.flags=ATA_CMD_CONTROL;
-+    request.u.ata.feature=ATA_SMART_IMMEDIATE_OFFLINE;
-+    request.u.ata.lba = select|(0xc24f<<8); // put test in sector
-+    request.flags=ATA_CMD_CONTROL;
-     break;
-   case STATUS_CHECK: // same command, no HDIO in FreeBSD
-   case STATUS:
-     // this command only says if SMART is working.  It could be
-     // replaced with STATUS_CHECK below.
--    iocmd.u.request.u.ata.feature=ATA_SMART_STATUS;
--    iocmd.u.request.u.ata.lba=0xc24f<<8;
--    iocmd.u.request.flags=ATA_CMD_CONTROL;
-+    request.u.ata.feature=ATA_SMART_STATUS;
-+    request.u.ata.lba=0xc24f<<8;
-+    request.flags=ATA_CMD_CONTROL;
-     break;
-   default:
-     pout("Unrecognized command %d in ata_command_interface()\n"
-@@ -334,15 +375,19 @@
-     unsigned const char failed_lo=0xf4, failed_hi=0x2c;
-     unsigned char low,high;
-     
--    if ((retval=ioctl(con->atacommand, IOCATA, &iocmd)))
-+#ifdef IOCATAREQUEST
-+    if ((retval=ioctl(con->device, IOCATAREQUEST, &request)) || request.error)
-+#else
-+    if ((retval=ioctl(con->atacommand, IOCATA, &iocmd)) || request.error)
-+#endif
-       return -1;
- 
- #if __FreeBSD_version < 502000
-     printwarning(NO_RETURN,NULL);
- #endif
- 
--    high = (iocmd.u.request.u.ata.lba >> 16) & 0xff;
--    low = (iocmd.u.request.u.ata.lba >> 8) & 0xff;
-+    high = (request.u.ata.lba >> 16) & 0xff;
-+    low = (request.u.ata.lba >> 8) & 0xff;
-     
-     // Cyl low and Cyl high unchanged means "Good SMART status"
-     if (low==normal_lo && high==normal_hi)
-@@ -355,21 +400,23 @@
-     // We haven't gotten output that makes sense; print out some debugging info
-     char buf[512];
-     sprintf(buf,"CMD=0x%02x\nFR =0x%02x\nNS =0x%02x\nSC =0x%02x\nCL =0x%02x\nCH =0x%02x\nRETURN =0x%04x\n",
--            (int)iocmd.u.request.u.ata.command,
--            (int)iocmd.u.request.u.ata.feature,
--            (int)iocmd.u.request.u.ata.count,
--            (int)((iocmd.u.request.u.ata.lba) & 0xff),
--            (int)((iocmd.u.request.u.ata.lba>>8) & 0xff),
--            (int)((iocmd.u.request.u.ata.lba>>16) & 0xff),
--            (int)iocmd.u.request.error);
-+            (int)request.u.ata.command,
-+            (int)request.u.ata.feature,
-+            (int)request.u.ata.count,
-+            (int)((request.u.ata.lba) & 0xff),
-+            (int)((request.u.ata.lba>>8) & 0xff),
-+            (int)((request.u.ata.lba>>16) & 0xff),
-+            (int)request.error);
-     printwarning(BAD_SMART,buf);
-     return 0;   
-   }
- 
--  if ((retval=ioctl(con->atacommand, IOCATA, &iocmd))) {
--    perror("Failed command: ");
-+#ifdef IOCATAREQUEST
-+  if ((retval=ioctl(con->device, IOCATAREQUEST, &request)) || request.error)
-+#else
-+  if ((retval=ioctl(con->atacommand, IOCATA, &iocmd)) || request.error)
-+#endif
-     return -1;
--  }
-   // 
-   if (copydata)
-     memcpy(data, buff, 512);
-@@ -483,16 +530,22 @@
- 
- // Interface to ATA devices behind 3ware escalade RAID controller cards.  See os_linux.c
- 
-+#define BUFFER_LEN_678K_CHAR ( sizeof(struct twe_usercommand) ) // 520
-+#define BUFFER_LEN_9000_CHAR ( sizeof(TW_OSLI_IOCTL_NO_DATA_BUF) + sizeof(TWE_Command) ) // 2048
-+#define TW_IOCTL_BUFFER_SIZE ( MAX(BUFFER_LEN_678K_CHAR, BUFFER_LEN_9000_CHAR) )
-+
- int escalade_command_interface(int fd, int disknum, int escalade_type, smart_command_set command, int select, char *data) {
-   // to hold true file descriptor
-   struct freebsd_dev_channel* con;
- 
-   // return value and buffer for ioctl()
-   int  ioctlreturn, readdata=0;
--  struct twe_usercommand* cmd = NULL;
-+  struct twe_usercommand* cmd_twe = NULL;
-+  TW_OSLI_IOCTL_NO_DATA_BUF* cmd_twa = NULL;
-+  TWE_Command_ATA* ata = NULL;
- 
-   // Used by both the SCSI and char interfaces
--  char ioctl_buffer[sizeof(struct twe_usercommand)];
-+  char ioctl_buffer[TW_IOCTL_BUFFER_SIZE];
- 
-   if (disknum < 0) {
-     printwarning(NO_DISK_3WARE,NULL);
-@@ -503,27 +556,40 @@
-   if (isnotopen(&fd,&con))
-       return -1;
- 
--  memset(ioctl_buffer, 0, sizeof(struct twe_usercommand));
-+  memset(ioctl_buffer, 0, TW_IOCTL_BUFFER_SIZE);
- 
--  cmd = (struct twe_usercommand*)ioctl_buffer;
--  cmd->tu_command.ata.opcode = TWE_OP_ATA_PASSTHROUGH;
-+  if (escalade_type==CONTROLLER_3WARE_9000_CHAR) {
-+    cmd_twa = (TW_OSLI_IOCTL_NO_DATA_BUF*)ioctl_buffer;
-+    cmd_twa->pdata = ((TW_OSLI_IOCTL_WITH_PAYLOAD*)cmd_twa)->payload.data_buf;
-+    cmd_twa->driver_pkt.buffer_length = 512;
-+    ata = (TWE_Command_ATA*)&cmd_twa->cmd_pkt.command.cmd_pkt_7k;
-+  } else if (escalade_type==CONTROLLER_3WARE_678K_CHAR) {
-+    cmd_twe = (struct twe_usercommand*)ioctl_buffer;
-+    ata = &cmd_twe->tu_command.ata;
-+  } else {
-+    pout("Unrecognized escalade_type %d in freebsd_3ware_command_interface(disk %d)\n"
-+         "Please contact " PACKAGE_BUGREPORT "\n", escalade_type, disknum);
-+    errno=ENOSYS;
-+    return -1;
-+  }
- 
-   // Same for (almost) all commands - but some reset below
--  cmd->tu_command.ata.request_id    = 0xFF;
--  cmd->tu_command.ata.unit   = disknum;
--  cmd->tu_command.ata.host_id = 0;
--  cmd->tu_command.ata.status        = 0;           
--  cmd->tu_command.ata.flags         = 0x1;
--  cmd->tu_command.ata.drive_head    = 0x0;
--  cmd->tu_command.ata.sector_num    = 0;
-+  ata->opcode        = TWE_OP_ATA_PASSTHROUGH;
-+  ata->request_id    = 0xFF;
-+  ata->unit          = disknum;
-+  ata->host_id       = 0;
-+  ata->status        = 0;           
-+  ata->flags         = 0x1;
-+  ata->drive_head    = 0x0;
-+  ata->sector_num    = 0;
- 
-   // All SMART commands use this CL/CH signature.  These are magic
-   // values from the ATA specifications.
--  cmd->tu_command.ata.cylinder_lo   = 0x4F;
--  cmd->tu_command.ata.cylinder_hi   = 0xC2;
-+  ata->cylinder_lo   = 0x4F;
-+  ata->cylinder_hi   = 0xC2;
-   
-   // SMART ATA COMMAND REGISTER value
--  cmd->tu_command.ata.command       = ATA_SMART_CMD;
-+  ata->command       = ATA_SMART_CMD;
-   
-   // Is this a command that reads or returns 512 bytes?
-   // passthru->param values are:
-@@ -538,61 +604,63 @@
-       command == IDENTIFY        ||
-       command == WRITE_LOG ) {
-     readdata=1;
--    cmd->tu_size = 512;
--    cmd->tu_data = data;
--    cmd->tu_command.ata.sgl_offset = 0x5;
--    cmd->tu_command.ata.size         = 0x5;
--    cmd->tu_command.ata.param        = 0xD;
--    cmd->tu_command.ata.sector_count = 0x1;
-+    if (escalade_type==CONTROLLER_3WARE_678K_CHAR) {
-+      cmd_twe->tu_data = data;
-+      cmd_twe->tu_size = 512;
-+    }
-+    ata->sgl_offset   = 0x5;
-+    ata->size         = 0x5;
-+    ata->param        = 0xD;
-+    ata->sector_count = 0x1;
-     // For 64-bit to work correctly, up the size of the command packet
-     // in dwords by 1 to account for the 64-bit single sgl 'address'
-     // field. Note that this doesn't agree with the typedefs but it's
-     // right (agree with kernel driver behavior/typedefs).
--    //if (sizeof(long)==8)
--    //  cmd->tu_command.ata.size++;
-+    //if (escalade_type==CONTROLLER_3WARE_9000_CHAR && sizeof(long)==8)
-+    //  ata->size++;
-   }
-   else {
-     // Non data command -- but doesn't use large sector 
-     // count register values.  
--    cmd->tu_command.ata.sgl_offset = 0x0;
--    cmd->tu_command.ata.size         = 0x5;
--    cmd->tu_command.ata.param        = 0x8;
--    cmd->tu_command.ata.sector_count = 0x0;
-+    ata->sgl_offset   = 0x0;
-+    ata->size         = 0x5;
-+    ata->param        = 0x8;
-+    ata->sector_count = 0x0;
-   }
-   
-   // Now set ATA registers depending upon command
-   switch (command){
-   case CHECK_POWER_MODE:
--    cmd->tu_command.ata.command     = ATA_CHECK_POWER_MODE;
--    cmd->tu_command.ata.features    = 0;
--    cmd->tu_command.ata.cylinder_lo = 0;
--    cmd->tu_command.ata.cylinder_hi = 0;
-+    ata->command     = ATA_CHECK_POWER_MODE;
-+    ata->features    = 0;
-+    ata->cylinder_lo = 0;
-+    ata->cylinder_hi = 0;
-     break;
-   case READ_VALUES:
--    cmd->tu_command.ata.features = ATA_SMART_READ_VALUES;
-+    ata->features = ATA_SMART_READ_VALUES;
-     break;
-   case READ_THRESHOLDS:
--    cmd->tu_command.ata.features = ATA_SMART_READ_THRESHOLDS;
-+    ata->features = ATA_SMART_READ_THRESHOLDS;
-     break;
-   case READ_LOG:
--    cmd->tu_command.ata.features = ATA_SMART_READ_LOG_SECTOR;
-+    ata->features = ATA_SMART_READ_LOG_SECTOR;
-     // log number to return
--    cmd->tu_command.ata.sector_num  = select;
-+    ata->sector_num  = select;
-     break;
-   case WRITE_LOG:
--    cmd->tu_data = data;
-+    if (escalade_type==CONTROLLER_3WARE_9000_CHAR)
-+      memcpy(cmd_twa->pdata, data, 512);
-     readdata=0;
--    cmd->tu_command.ata.features     = ATA_SMART_WRITE_LOG_SECTOR;
--    cmd->tu_command.ata.sector_count = 1;
--    cmd->tu_command.ata.sector_num   = select;
--    cmd->tu_command.ata.param        = 0xF;  // PIO data write
-+    ata->features     = ATA_SMART_WRITE_LOG_SECTOR;
-+    ata->sector_num   = select;
-+    ata->param        = 0xF;  // PIO data write
-     break;
-   case IDENTIFY:
-     // ATA IDENTIFY DEVICE
--    cmd->tu_command.ata.command     = ATA_IDENTIFY_DEVICE;
--    cmd->tu_command.ata.features    = 0;
--    cmd->tu_command.ata.cylinder_lo = 0;
--    cmd->tu_command.ata.cylinder_hi = 0;
-+    ata->command     = ATA_IDENTIFY_DEVICE;
-+    ata->features    = 0;
-+    ata->cylinder_lo = 0;
-+    ata->cylinder_hi = 0;
-     break;
-   case PIDENTIFY:
-     // 3WARE controller can NOT have packet device internally
-@@ -600,34 +668,34 @@
-     errno=ENODEV;
-     return -1;
-   case ENABLE:
--    cmd->tu_command.ata.features = ATA_SMART_ENABLE;
-+    ata->features = ATA_SMART_ENABLE;
-     break;
-   case DISABLE:
--    cmd->tu_command.ata.features = ATA_SMART_DISABLE;
-+    ata->features = ATA_SMART_DISABLE;
-     break;
-   case AUTO_OFFLINE:
--    cmd->tu_command.ata.features     = ATA_SMART_AUTO_OFFLINE;
-+    ata->features     = ATA_SMART_AUTO_OFFLINE;
-     // Enable or disable?
--    cmd->tu_command.ata.sector_count = select;
-+    ata->sector_count = select;
-     break;
-   case AUTOSAVE:
--    cmd->tu_command.ata.features     = ATA_SMART_AUTOSAVE;
-+    ata->features     = ATA_SMART_AUTOSAVE;
-     // Enable or disable?
--    cmd->tu_command.ata.sector_count = select;
-+    ata->sector_count = select;
-     break;
-   case IMMEDIATE_OFFLINE:
--    cmd->tu_command.ata.features    = ATA_SMART_IMMEDIATE_OFFLINE;
-+    ata->features    = ATA_SMART_IMMEDIATE_OFFLINE;
-     // What test type to run?
--    cmd->tu_command.ata.sector_num  = select;
-+    ata->sector_num  = select;
-     break;
-   case STATUS_CHECK:
--    cmd->tu_command.ata.features = ATA_SMART_STATUS;
-+    ata->features = ATA_SMART_STATUS;
-     break;
-   case STATUS:
-     // This is JUST to see if SMART is enabled, by giving SMART status
-     // command. But it doesn't say if status was good, or failing.
-     // See below for the difference.
--    cmd->tu_command.ata.features = ATA_SMART_STATUS;
-+    ata->features = ATA_SMART_STATUS;
-     break;
-   default:
-     pout("Unrecognized command %d in freebsd_3ware_command_interface(disk %d)\n"
-@@ -637,7 +705,19 @@
-   }
- 
-   // Now send the command down through an ioctl()
--  ioctlreturn=ioctl(con->atacommand,TWEIO_COMMAND,cmd);
-+  if (escalade_type==CONTROLLER_3WARE_9000_CHAR) {
-+#ifdef IOCATAREQUEST
-+    ioctlreturn=ioctl(con->device,TW_OSL_IOCTL_FIRMWARE_PASS_THROUGH,cmd_twa);
-+#else
-+    ioctlreturn=ioctl(con->atacommand,TW_OSL_IOCTL_FIRMWARE_PASS_THROUGH,cmd_twa);
-+#endif
-+  } else {
-+#ifdef IOCATAREQUEST
-+    ioctlreturn=ioctl(con->device,TWEIO_COMMAND,cmd_twe);
-+#else
-+    ioctlreturn=ioctl(con->atacommand,TWEIO_COMMAND,cmd_twe);
-+#endif
-+  }
-   
-   // Deal with the different error cases
-   if (ioctlreturn) {
-@@ -648,9 +728,9 @@
-   
-   // See if the ATA command failed.  Now that we have returned from
-   // the ioctl() call, if passthru is valid, then:
--  // - cmd->tu_command.ata.status contains the 3ware controller STATUS
--  // - cmd->tu_command.ata.command contains the ATA STATUS register
--  // - cmd->tu_command.ata.features contains the ATA ERROR register
-+  // - ata->status contains the 3ware controller STATUS
-+  // - ata->command contains the ATA STATUS register
-+  // - ata->features contains the ATA ERROR register
-   //
-   // Check bits 0 (error bit) and 5 (device fault) of the ATA STATUS
-   // If bit 0 (error bit) is set, then ATA ERROR register is valid.
-@@ -658,21 +738,27 @@
-   // doesn't make much sense: we don't care in detail why the error
-   // happened.
-   
--  if (cmd->tu_command.ata.status || (cmd->tu_command.ata.command & 0x21)) {
--    pout("Command failed, ata.status=(0x%2.2x), ata.command=(0x%2.2x), ata.flags=(0x%2.2x)\n",cmd->tu_command.ata.status,cmd->tu_command.ata.command,cmd->tu_command.ata.flags);
-+  if (ata->status || (ata->command & 0x21)) {
-+    pout("Command failed, ata.status=(0x%2.2x), ata.command=(0x%2.2x), ata.flags=(0x%2.2x)\n",ata->status,ata->command,ata->flags);
-     errno=EIO;
-     return -1;
-   }
-   
-+  // If this is a read data command, copy data to output buffer
-+  if (readdata) {
-+    if (escalade_type==CONTROLLER_3WARE_9000_CHAR)
-+      memcpy(data, cmd_twa->pdata, 512);
-+  }
-+
-   // For STATUS_CHECK, we need to check register values
-   if (command==STATUS_CHECK) {
-     
-     // To find out if the SMART RETURN STATUS is good or failing, we
-     // need to examine the values of the Cylinder Low and Cylinder
-     // High Registers.
--    
--    unsigned short cyl_lo=cmd->tu_command.ata.cylinder_lo;
--    unsigned short cyl_hi=cmd->tu_command.ata.cylinder_hi;
-+
-+    unsigned short cyl_lo=ata->cylinder_lo;
-+    unsigned short cyl_hi=ata->cylinder_hi;
-     
-     // If values in Cyl-LO and Cyl-HI are unchanged, SMART status is good.
-     if (cyl_lo==0x4F && cyl_hi==0xC2)
-@@ -688,7 +774,7 @@
-   
-   // copy sector count register (one byte!) to return data
-   if (command==CHECK_POWER_MODE)
--    *data=*(char *)&(cmd->tu_command.ata.sector_count);
-+    *data=*(char *)&(ata->sector_count);
-   
-   // look for nonexistent devices/ports
-   if (command==IDENTIFY && !nonempty((unsigned char *)data, 512)) {
-@@ -709,6 +795,14 @@
-   return 0;
- }
- 
-+static int get_twa_channel_unit (const char* name, int* unit, int* dev) {
-+  if (sscanf(name, "twa%d", dev) != 1)
-+    return -1;
-+  *unit=0; // not really needed for TWA drives, as we handle that seperately
-+  return 0;
-+}
-+
-+#ifndef IOCATAREQUEST
- static int get_ata_channel_unit ( const char* name, int* unit, int* dev) {
- #ifndef ATAREQUEST
-   *dev=0;
-@@ -756,7 +850,7 @@
-     return 0;
- #endif
- }
--
-+#endif
- 
- // Guess device type (ata or scsi) based on device name (FreeBSD
- // specific) SCSI device name in FreeBSD can be sd, sr, scd, st, nst,
-@@ -768,6 +862,7 @@
- static const char * fbsd_dev_scsi_tape2 = "nsa";
- static const char * fbsd_dev_scsi_tape3 = "esa";
- static const char * fbsd_dev_twe_disk = "twed";
-+static const char * fbsd_dev_twa_disk = "twa";
- 
- static int parse_ata_chan_dev(const char * dev_name, struct freebsd_dev_channel *chan) {
-   int len;
-@@ -788,11 +883,13 @@
-   // form /dev/ad* or ad*
-   if (!strncmp(fbsd_dev_ata_disk_prefix, dev_name,
-                strlen(fbsd_dev_ata_disk_prefix))) {
-+#ifndef IOCATAREQUEST
-     if (chan != NULL) {
-       if (get_ata_channel_unit(dev_name,&(chan->channel),&(chan->device))<0) {
-         return CONTROLLER_UNKNOWN;
-       }
-     }
-+#endif
-     return CONTROLLER_ATA;
-   }
-   
-@@ -824,6 +921,16 @@
-       }
-     }
-     return CONTROLLER_3WARE_678K_CHAR;
-+  }
-+
-+  if (!strncmp(fbsd_dev_twa_disk,dev_name,
-+	       strlen(fbsd_dev_twa_disk))) {
-+    if (chan != NULL) {
-+      if (get_twa_channel_unit(dev_name,&(chan->channel),&(chan->device))<0) {
-+	return CONTROLLER_UNKNOWN;
-+      }
-+    }
-+    return CONTROLLER_3WARE_9000_CHAR;
-   }
- 
-   // we failed to recognize any of the forms
Index: files/patch-os_freebsd.h
===================================================================
RCS file: files/patch-os_freebsd.h
diff -N files/patch-os_freebsd.h
--- files/patch-os_freebsd.h	10 Oct 2005 12:39:59 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,265 +0,0 @@
---- os_freebsd.h.orig	Sun Sep  5 09:16:07 2004
-+++ os_freebsd.h	Sat Aug  6 21:08:54 2005
-@@ -261,6 +261,262 @@
- 
- #endif
- 
-+#ifdef  HAVE_SYS_TW_OSL_IOCTL_H
-+#include <sys/tw_osl_ioctl.h>
-+#else
-+/*
-+ * Following cut out of tw_osl_types.h
-+ *
-+ */
-+
-+typedef void			TW_VOID;
-+typedef char			TW_INT8;
-+typedef unsigned char		TW_UINT8;
-+typedef short			TW_INT16;
-+typedef unsigned short		TW_UINT16;
-+typedef int			TW_INT32;
-+typedef unsigned int		TW_UINT32;
-+typedef long long		TW_INT64;
-+typedef unsigned long long	TW_UINT64;
-+
-+/*
-+ * Following cut out of tw_cl_share.h
-+ *
-+ */
-+
-+#pragma pack(1)
-+
-+struct tw_cl_event_packet {
-+	TW_UINT32	sequence_id;
-+	TW_UINT32	time_stamp_sec;
-+	TW_UINT16	aen_code;
-+	TW_UINT8	severity;
-+	TW_UINT8	retrieved;
-+	TW_UINT8	repeat_count;
-+	TW_UINT8	parameter_len;
-+	TW_UINT8	parameter_data[98];
-+	TW_UINT32	event_src;
-+	TW_UINT8	severity_str[20];
-+};
-+
-+#pragma pack()
-+
-+/*
-+ * Following cut out of tw_cl_fwif.h
-+ *
-+ */
-+
-+#define TWA_FW_CMD_ATA_PASSTHROUGH		0x11
-+
-+#define TWA_SENSE_DATA_LENGTH		18
-+
-+#pragma pack(1)
-+/* 7000 structures. */
-+struct tw_cl_command_init_connect {
-+	TW_UINT8	res1__opcode;	/* 3:5 */
-+	TW_UINT8	size;
-+	TW_UINT8	request_id;
-+	TW_UINT8	res2;
-+	TW_UINT8	status;
-+	TW_UINT8	flags;
-+	TW_UINT16	message_credits;
-+	TW_UINT32	features;
-+	TW_UINT16	fw_srl;
-+	TW_UINT16	fw_arch_id;
-+	TW_UINT16	fw_branch;
-+	TW_UINT16	fw_build;
-+	TW_UINT32	result;
-+};
-+
-+
-+/* Structure for downloading firmware onto the controller. */
-+struct tw_cl_command_download_firmware {
-+	TW_UINT8	sgl_off__opcode;/* 3:5 */
-+	TW_UINT8	size;
-+	TW_UINT8	request_id;
-+	TW_UINT8	unit;
-+	TW_UINT8	status;
-+	TW_UINT8	flags;
-+	TW_UINT16	param;
-+	TW_UINT8	sgl[1];
-+};
-+
-+
-+/* Structure for hard resetting the controller. */
-+struct tw_cl_command_reset_firmware {
-+	TW_UINT8	res1__opcode;	/* 3:5 */
-+	TW_UINT8	size;
-+	TW_UINT8	request_id;
-+	TW_UINT8	unit;
-+	TW_UINT8	status;
-+	TW_UINT8	flags;
-+	TW_UINT8	res2;
-+	TW_UINT8	param;
-+};
-+
-+
-+/* Structure for sending get/set param commands. */
-+struct tw_cl_command_param {
-+	TW_UINT8	sgl_off__opcode;/* 3:5 */
-+	TW_UINT8	size;
-+	TW_UINT8	request_id;
-+	TW_UINT8	host_id__unit;	/* 4:4 */
-+	TW_UINT8	status;
-+	TW_UINT8	flags;
-+	TW_UINT16	param_count;
-+	TW_UINT8	sgl[1];
-+};
-+
-+
-+/* Generic command packet. */
-+struct tw_cl_command_generic {
-+	TW_UINT8	sgl_off__opcode;/* 3:5 */
-+	TW_UINT8	size;
-+	TW_UINT8	request_id;
-+	TW_UINT8	host_id__unit;	/* 4:4 */
-+	TW_UINT8	status;
-+	TW_UINT8	flags;
-+	TW_UINT16	count;	/* block cnt, parameter cnt, message credits */
-+};
-+
-+
-+/* Command packet header. */
-+struct tw_cl_command_header {
-+	TW_UINT8	sense_data[TWA_SENSE_DATA_LENGTH];
-+	struct {
-+		TW_INT8		reserved[4];
-+		TW_UINT16	error;
-+		TW_UINT8	padding;
-+		TW_UINT8	res__severity;	/* 5:3 */
-+	} status_block;
-+	TW_UINT8	err_specific_desc[98];
-+	struct {
-+		TW_UINT8	size_header;
-+		TW_UINT16	reserved;
-+		TW_UINT8	size_sense;
-+	} header_desc;
-+};
-+
-+
-+/* 7000 Command packet. */
-+union tw_cl_command_7k {
-+	struct tw_cl_command_init_connect	init_connect;
-+	struct tw_cl_command_download_firmware	download_fw;
-+	struct tw_cl_command_reset_firmware	reset_fw;
-+	struct tw_cl_command_param		param;
-+	struct tw_cl_command_generic		generic;
-+	TW_UINT8	padding[1024 - sizeof(struct tw_cl_command_header)];
-+};
-+
-+
-+/* 9000 Command Packet. */
-+struct tw_cl_command_9k {
-+	TW_UINT8	res__opcode;	/* 3:5 */
-+	TW_UINT8	unit;
-+	TW_UINT16	lun_l4__req_id;	/* 4:12 */
-+	TW_UINT8	status;
-+	TW_UINT8	sgl_offset; /* offset (in bytes) to sg_list, from the
-+					end of sgl_entries */
-+	TW_UINT16	lun_h4__sgl_entries;
-+	TW_UINT8	cdb[16];
-+	TW_UINT8	sg_list[872];/* total struct size =
-+					1024-sizeof(cmd_hdr) */
-+};
-+
-+
-+/* Full command packet. */
-+struct tw_cl_command_packet {
-+	struct tw_cl_command_header	cmd_hdr;
-+	union {
-+		union tw_cl_command_7k	cmd_pkt_7k;
-+		struct tw_cl_command_9k cmd_pkt_9k;
-+	} command;
-+};
-+
-+#pragma pack()
-+
-+/*
-+ * Following cut out of tw_cl_ioctl.h
-+ *
-+ */
-+
-+#pragma pack(1)
-+
-+/* Structure used to handle GET/RELEASE LOCK ioctls. */
-+struct tw_cl_lock_packet {
-+	TW_UINT32	timeout_msec;
-+	TW_UINT32	time_remaining_msec;
-+	TW_UINT32	force_flag;
-+};
-+
-+
-+/* Structure used to handle GET COMPATIBILITY INFO ioctl. */
-+struct tw_cl_compatibility_packet {
-+	TW_UINT8	driver_version[32];/* driver version */
-+	TW_UINT16	working_srl;	/* driver & firmware negotiated srl */
-+	TW_UINT16	working_branch;	/* branch # of the firmware that the
-+					driver is compatible with */
-+	TW_UINT16	working_build;	/* build # of the firmware that the
-+					driver is compatible with */
-+};
-+
-+
-+/* Driver understandable part of the ioctl packet built by the API. */
-+struct tw_cl_driver_packet {
-+	TW_UINT32	control_code;
-+	TW_UINT32	status;
-+	TW_UINT32	unique_id;
-+	TW_UINT32	sequence_id;
-+	TW_UINT32	os_status;
-+	TW_UINT32	buffer_length;
-+};
-+
-+#pragma pack()
-+
-+/*
-+ * Following cut out of tw_osl_ioctl.h
-+ *
-+ */
-+
-+#pragma pack(1)
-+/*
-+ * We need the structure below to ensure that the first byte of
-+ * data_buf is not overwritten by the kernel, after we return
-+ * from the ioctl call.  Note that cmd_pkt has been reduced
-+ * to an array of 1024 bytes even though it's actually 2048 bytes
-+ * in size.  This is because, we don't expect requests from user
-+ * land requiring 2048 (273 sg elements) byte cmd pkts.
-+ */
-+typedef struct tw_osli_ioctl_no_data_buf {
-+	struct tw_cl_driver_packet	driver_pkt;
-+	TW_VOID				*pdata; /* points to data_buf */
-+	TW_INT8				padding[488 - sizeof(TW_VOID *)];
-+	struct tw_cl_command_packet	cmd_pkt;
-+} TW_OSLI_IOCTL_NO_DATA_BUF;
-+
-+#pragma pack()
-+
-+#define TW_OSL_IOCTL_FIRMWARE_PASS_THROUGH		\
-+	_IOWR('T', 202, TW_OSLI_IOCTL_NO_DATA_BUF)
-+
-+#pragma pack(1)
-+
-+typedef struct tw_osli_ioctl_with_payload {
-+	struct tw_cl_driver_packet	driver_pkt;
-+	TW_INT8				padding[488];
-+	struct tw_cl_command_packet	cmd_pkt;
-+	union {
-+		struct tw_cl_event_packet		event_pkt;
-+		struct tw_cl_lock_packet		lock_pkt;
-+		struct tw_cl_compatibility_packet	compat_pkt;
-+		TW_INT8					data_buf[1];
-+	} payload;
-+} TW_OSLI_IOCTL_WITH_PAYLOAD;
-+
-+#pragma pack()
-+
-+#endif
-+
- /* 
-    The following definitions/macros/prototypes are used for three
-    different interfaces, referred to as "the three cases" below.
Index: files/pkg-message.in
===================================================================
RCS file: files/pkg-message.in
diff -N files/pkg-message.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/pkg-message.in	27 Apr 2006 11:30:10 -0000
@@ -0,0 +1,14 @@
+smartmontools has been installed
+
+To check the status of drives, use the following:
+
+	%%PREFIX%%/sbin/smartctl -a /dev/ad0		for first ATA drive
+	%%PREFIX%%/sbin/smartctl -a /dev/da0		for first SCSI drive
+
+To enable monitor of drives, you can use %%PREFIX%%/sbin/smartd
+A sample configuration file has been installed as 
+%%PREFIX%%/etc/smartd.conf.sample
+Copy this file to %%PREFIX%%/etc/smartd.conf and edit appropriately
+
+To have smartd start at boot
+	echo 'smartd_enable="YES"' >> /etc/rc.conf
Index: files/smartd.in
===================================================================
RCS file: files/smartd.in
diff -N files/smartd.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/smartd.in	27 Apr 2006 11:30:10 -0000
@@ -0,0 +1,44 @@
+#!/bin/sh
+# $FreeBSD$
+
+# PROVIDE: smartd
+# REQUIRE: DAEMON
+# BEFORE: LOGIN
+# KEYWORD: shutdown
+
+# Define these smartd_* variables in one of these files:
+#	/etc/rc.conf
+#	/etc/rc.conf.local
+#	/etc/rc.conf.d/smartd
+#
+# DO NOT CHANGE THESE DEFAULT VALUES HERE
+#
+smartd_enable="${smartd_enable-NO}"
+smartd_pidfile="/var/run/smartd.pid"
+
+. %%RC_SUBR%%
+
+name="smartd"
+rcvar=`set_rcvar`
+command="%%PREFIX%%/sbin/smartd"
+
+load_rc_config $name
+
+: ${smartd_config="%%PREFIX%%/etc/smartd.conf"}
+: ${smartd_flags="-c ${smartd_config}"}
+
+pidfile="${smartd_pidfile}"
+required_files="${smartd_config}"
+
+case "${smartd_flags}" in
+*-p\ *)
+	echo "ERROR: \$smartd_flags includes -p option." \
+		"Please use \$smartd_pidfile instead."
+	exit 1
+	;;
+*)
+	smartd_flags="-p ${pidfile} ${smartd_flags}"
+	;;
+esac
+
+run_rc_command "$1"
Index: files/smartd.sh
===================================================================
RCS file: files/smartd.sh
diff -N files/smartd.sh
--- files/smartd.sh	20 Feb 2006 20:47:44 -0000	1.7
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,44 +0,0 @@
-#!/bin/sh
-# $FreeBSD: ports/sysutils/smartmontools/files/smartd.sh,v 1.7 2006/02/20 20:47:44 dougb Exp $
-
-# PROVIDE: smartd
-# REQUIRE: DAEMON
-# BEFORE: LOGIN
-# KEYWORD: shutdown
-
-# Define these smartd_* variables in one of these files:
-#	/etc/rc.conf
-#	/etc/rc.conf.local
-#	/etc/rc.conf.d/smartd
-#
-# DO NOT CHANGE THESE DEFAULT VALUES HERE
-#
-smartd_enable="${smartd_enable-NO}"
-smartd_pidfile="/var/run/smartd.pid"
-
-. %%RC_SUBR%%
-
-name="smartd"
-rcvar=`set_rcvar`
-command="%%PREFIX%%/sbin/smartd"
-
-load_rc_config $name
-
-: ${smartd_config="%%PREFIX%%/etc/smartd.conf"}
-: ${smartd_flags="-c ${smartd_config}"}
-
-pidfile="${smartd_pidfile}"
-required_files="${smartd_config}"
-
-case "${smartd_flags}" in
-*-p\ *)
-	echo "ERROR: \$smartd_flags includes -p option." \
-		"Please use \$smartd_pidfile instead."
-	exit 1
-	;;
-*)
-	smartd_flags="-p ${pidfile} ${smartd_flags}"
-	;;
-esac
-
-run_rc_command "$1"
----------------------------- smartmontools.diff ends here ----------

Regards
-- 
Renato Botelho <garga @ FreeBSD.org>
               <freebsd @ galle.com.br>
GnuPG Key: http://www.FreeBSD.org/~garga/pubkey.asc

Pilfering Treasure property is paticularly dangerous: big thieves are
ruthless in punishing little thieves.
		-- Diogenes
Comment 7 Renato Botelho freebsd_committer 2006-04-27 16:11:35 UTC
State Changed
From-To: open->feedback

Ask for maintainer approval.
Comment 8 Renato Botelho freebsd_committer 2006-05-11 18:03:32 UTC
State Changed
From-To: feedback->closed

Committed. Thanks!