+++ /dev/null
-Author: chrfranke <chrfranke@4ea69e1a-61f1-4043-bf83-b5c94c648137>
-Date: Tue Jul 27 13:08:31 2010 +0000
-
- Linux: Support SATA drives on LSI 3ware 9750 controllers (ticket #86).
-
-Index: smartmontools-5.39.1+svn3124/CHANGELOG
-===================================================================
---- smartmontools-5.39.1+svn3124.orig/CHANGELOG 2010-07-12 21:21:00.000000000 +0200
-+++ smartmontools-5.39.1+svn3124/CHANGELOG 2010-12-23 11:05:12.103063859 +0100
-@@ -86,6 +86,10 @@
- This fixes build on QNX (ticket #1).
- Thanks to Stefan (stevestereo) for testing.
-
-+ [CF] Linux: Support SATA drives on LSI 3ware 9750 controllers.
-+ Patch provided by Victor Payno (ticket #86).
-+ Modified to avoid duplicate code.
-+
- [CF] drivedb.h update:
- - WD Caviar Green (Adv. Format) family
-
-Index: smartmontools-5.39.1+svn3124/NEWS
-===================================================================
---- smartmontools-5.39.1+svn3124.orig/NEWS 2010-06-11 18:21:25.000000000 +0200
-+++ smartmontools-5.39.1+svn3124/NEWS 2010-12-23 11:05:12.103063859 +0100
-@@ -22,6 +22,7 @@
- SCT Error Recovery Control time limit.
- - smartctl options '--scan, --scan-open'.
- - Linux: Add '/dev/sd[a-c][a-z]' to smartd DEVICESCAN.
-+- Linux: Support SATA drives on LSI 3ware 9750 controllers.
- - Windows: Read 'drivedb.h' and 'smartd.conf' from exe directory.
- - Windows: Support for 64-bit executables.
- - Windows: Support for cross compilation on Linux.
-Index: smartmontools-5.39.1+svn3124/os_linux.cpp
-===================================================================
---- smartmontools-5.39.1+svn3124.orig/os_linux.cpp 2010-04-30 19:35:35.000000000 +0200
-+++ smartmontools-5.39.1+svn3124/os_linux.cpp 2010-12-23 11:05:12.103063859 +0100
-@@ -196,6 +196,7 @@
- " smartctl --all --device=3ware,2 /dev/sda\n"
- " smartctl --all --device=3ware,2 /dev/twe0\n"
- " smartctl --all --device=3ware,2 /dev/twa0\n"
-+ " smartctl --all --device=3ware,2 /dev/twl0\n"
- " (Prints all SMART info for 3rd ATA disk on 3ware RAID controller)\n"
- " smartctl --all --device=hpt,1/1/3 /dev/sda\n"
- " (Prints all SMART info for the SATA disk attached to the 3rd PMPort\n"
-@@ -1216,7 +1217,8 @@
- enum escalade_type_t {
- AMCC_3WARE_678K,
- AMCC_3WARE_678K_CHAR,
-- AMCC_3WARE_9000_CHAR
-+ AMCC_3WARE_9000_CHAR,
-+ AMCC_3WARE_9700_CHAR
- };
-
- linux_escalade_device(smart_interface * intf, const char * dev_name,
-@@ -1389,12 +1391,17 @@
-
- bool linux_escalade_device::open()
- {
-- if (m_escalade_type == AMCC_3WARE_9000_CHAR || m_escalade_type == AMCC_3WARE_678K_CHAR) {
-+ if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR ||
-+ m_escalade_type == AMCC_3WARE_678K_CHAR) {
- // the device nodes for these controllers are dynamically assigned,
- // so we need to check that they exist with the correct major
- // numbers and if not, create them
-- const char * node = (m_escalade_type == AMCC_3WARE_9000_CHAR ? "twa" : "twe" );
-- const char * driver = (m_escalade_type == AMCC_3WARE_9000_CHAR ? "3w-9xxx": "3w-xxxx");
-+ const char * node = (m_escalade_type == AMCC_3WARE_9700_CHAR ? "twl" :
-+ m_escalade_type == AMCC_3WARE_9000_CHAR ? "twa" :
-+ "twe" );
-+ const char * driver = (m_escalade_type == AMCC_3WARE_9700_CHAR ? "3w-sas" :
-+ m_escalade_type == AMCC_3WARE_9000_CHAR ? "3w-9xxx" :
-+ "3w-xxxx" );
- if (setup_3ware_nodes(node, driver))
- return set_err((errno ? errno : ENXIO), "setup_3ware_nodes(\"%s\", \"%s\") failed", node, driver);
- }
-@@ -1461,7 +1468,7 @@
- memset(ioctl_buffer, 0, TW_IOCTL_BUFFER_SIZE);
-
- // TODO: Handle controller differences by different classes
-- if (m_escalade_type==AMCC_3WARE_9000_CHAR) {
-+ if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR) {
- tw_ioctl_apache = (TW_Ioctl_Buf_Apache *)ioctl_buffer;
- tw_ioctl_apache->driver_command.control_code = TW_IOCTL_FIRMWARE_PASS_THROUGH;
- tw_ioctl_apache->driver_command.buffer_length = 512; /* payload size */
-@@ -1523,7 +1530,8 @@
- // 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 (m_escalade_type==AMCC_3WARE_9000_CHAR && sizeof(long)==8)
-+ if ((m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR)
-+ && sizeof(long) == 8)
- passthru->size++;
- }
- else if (in.direction == ata_cmd_in::no_data) {
-@@ -1535,7 +1543,7 @@
- passthru->sector_count = 0x0;
- }
- else if (in.direction == ata_cmd_in::data_out) {
-- if (m_escalade_type == AMCC_3WARE_9000_CHAR)
-+ if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR)
- memcpy(tw_ioctl_apache->data_buffer, in.buffer, in.size);
- else if (m_escalade_type == AMCC_3WARE_678K_CHAR)
- memcpy(tw_ioctl_char->data_buffer, in.buffer, in.size);
-@@ -1548,7 +1556,8 @@
- passthru->byte0.sgloff = 0x5;
- passthru->size = 0x7; // TODO: Other value for multi-sector ?
- passthru->param = 0xF; // PIO data write
-- if (m_escalade_type==AMCC_3WARE_9000_CHAR && sizeof(long)==8)
-+ if ((m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR)
-+ && sizeof(long) == 8)
- passthru->size++;
- }
- else
-@@ -1556,7 +1565,7 @@
-
- // Now send the command down through an ioctl()
- int ioctlreturn;
-- if (m_escalade_type==AMCC_3WARE_9000_CHAR)
-+ if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR)
- ioctlreturn=ioctl(get_fd(), TW_IOCTL_FIRMWARE_PASS_THROUGH, tw_ioctl_apache);
- else if (m_escalade_type==AMCC_3WARE_678K_CHAR)
- ioctlreturn=ioctl(get_fd(), TW_CMD_PACKET_WITH_DATA, tw_ioctl_char);
-@@ -1607,7 +1616,7 @@
-
- // If this is a read data command, copy data to output buffer
- if (readdata) {
-- if (m_escalade_type==AMCC_3WARE_9000_CHAR)
-+ if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR)
- memcpy(in.buffer, tw_ioctl_apache->data_buffer, in.size);
- else if (m_escalade_type==AMCC_3WARE_678K_CHAR)
- memcpy(in.buffer, tw_ioctl_char->data_buffer, in.size);
-@@ -2695,7 +2704,7 @@
- if (!memcmp(req_buff + 8, "3ware", 5) || !memcmp(req_buff + 8, "AMCC", 4)) {
- close();
- set_err(EINVAL, "AMCC/3ware controller, please try adding '-d 3ware,N',\n"
-- "you may need to replace %s with /dev/twaN or /dev/tweN", get_dev_name());
-+ "you may need to replace %s with /dev/twlN, /dev/twaN or /dev/tweN", get_dev_name());
- return this;
- }
-
-@@ -2997,6 +3006,7 @@
- static const char * lin_dev_scsi_tape1 = "ns";
- static const char * lin_dev_scsi_tape2 = "os";
- static const char * lin_dev_scsi_tape3 = "nos";
-+static const char * lin_dev_3ware_9700_char = "twl";
- static const char * lin_dev_3ware_9000_char = "twa";
- static const char * lin_dev_3ware_678k_char = "twe";
- static const char * lin_dev_cciss_dir = "cciss/";
-@@ -3080,6 +3090,11 @@
- strlen(lin_dev_scsi_tape3)))
- return new linux_scsi_device(this, name, "");
-
-+ // form /dev/twl*
-+ if (!strncmp(lin_dev_3ware_9700_char, dev_name,
-+ strlen(lin_dev_3ware_9700_char)))
-+ return missing_option("-d 3ware,N");
-+
- // form /dev/twa*
- if (!strncmp(lin_dev_3ware_9000_char, dev_name,
- strlen(lin_dev_3ware_9000_char)))
-@@ -3122,7 +3137,9 @@
- return 0;
- }
-
-- if (!strncmp(name, "/dev/twa", 8))
-+ if (!strncmp(name, "/dev/twl", 8))
-+ return new linux_escalade_device(this, name, linux_escalade_device::AMCC_3WARE_9700_CHAR, disknum);
-+ else if (!strncmp(name, "/dev/twa", 8))
- return new linux_escalade_device(this, name, linux_escalade_device::AMCC_3WARE_9000_CHAR, disknum);
- else if (!strncmp(name, "/dev/twe", 8))
- return new linux_escalade_device(this, name, linux_escalade_device::AMCC_3WARE_678K_CHAR, disknum);
-Index: smartmontools-5.39.1+svn3124/smartctl.8.in
-===================================================================
---- smartmontools-5.39.1+svn3124.orig/smartctl.8.in 2010-06-11 18:21:25.000000000 +0200
-+++ smartmontools-5.39.1+svn3124/smartctl.8.in 2010-12-23 11:05:12.103063859 +0100
-@@ -65,7 +65,7 @@
- \fB"/dev/sg*"\fP. For SATA disks accessed with libata, use
- \fB"/dev/sd[a\-z]"\fP and append \fB"\-d ata"\fP. For disks behind
- 3ware controllers you may need \fB"/dev/sd[a\-z]"\fP or
--\fB"/dev/twe[0\-9]"\fP or \fB"/dev/twa[0\-9]"\fP: see details
-+\fB"/dev/twe[0\-9]"\fP, \fB"/dev/twa[0\-9]"\fP or \fB"/dev/twl[0\-9]"\fP: see details
- below. For disks behind HighPoint RocketRAID controllers you may need
- \fB"/dev/sd[a\-z]"\fP. For disks behind Areca SATA RAID controllers,
- you need \fB"/dev/sg[2\-9]"\fP (note that smartmontools interacts with
-@@ -303,6 +303,9 @@
- .nf
- \fBsmartctl \-a \-d 3ware,1 /dev/twa0\fP
- .fi
-+.nf
-+\fBsmartctl \-a \-d 3ware,1 /dev/twl0\fP
-+.fi
- where in the argument \fI3ware,N\fP, the integer N is the disk number
- (3ware \'port\') within the 3ware ATA RAID controller. The allowed
- values of N are from 0 to 127 inclusive. The first two forms, which
-@@ -314,12 +317,17 @@
- /dev/twa0\-15, must be used with 3ware 9000 series controllers, which
- use the 3w\-9xxx driver.
-
--Note that if the special character device nodes /dev/twa? and
--/dev/twe? do not exist, or exist with the incorrect major or minor
-+The devices /dev/twl0\-15 must be used with the 3ware/LSI 9750 series
-+controllers which use the 3w-sas driver.
-+
-+Note that if the special character device nodes /dev/twl?, /dev/twa?
-+and /dev/twe? do not exist, or exist with the incorrect major or minor
- numbers, smartctl will recreate them on the fly. Typically /dev/twa0
- refers to the first 9000\-series controller, /dev/twa1 refers to the
--second 9000 series controller, and so on. Likewise /dev/twe0 refers to
--the first 6/7/8000\-series controller, /dev/twa1 refers to the second
-+second 9000 series controller, and so on. The /dev/twl0 devices refers
-+to the first 9750 series controller, /dev/twl1 resfers to the second
-+9750 series controller, and so on. Likewise /dev/twe0 refers to
-+the first 6/7/8000\-series controller, /dev/twe1 refers to the second
- 6/7/8000 series controller, and so on.
-
- Note that for the 6/7/8000 controllers, \fBany\fP of the physical
-@@ -354,7 +362,7 @@
- instructions. Alternatively, use the character device /dev/twe0\-15 interface.
-
- The selective self\-test functions (\'\-t select,A\-B\') are only supported
--using the character device interface /dev/twa0\-15 and /dev/twe0\-15.
-+using the character device interface /dev/twl0\-15, /dev/twa0\-15 and /dev/twe0\-15.
- The necessary WRITE LOG commands can not be passed through the SCSI
- interface.
-
-@@ -1688,8 +1696,14 @@
- .nf
- .B smartctl \-a \-d 3ware,0 /dev/twa0
- .fi
--Examine all SMART data for the first ATA disk connected to a 3ware
--RAID 9000 controller card.
-+Examine all SMART data for the first ATA disk connected to a
-+3ware RAID 9000 controller card.
-+.PP
-+.nf
-+.B smartctl \-a \-d 3ware,0 /dev/twl0
-+.fi
-+Examine all SMART data for the first SATA (not SAS) disk connected to a
-+3ware RAID 9750 controller card.
- .PP
- .nf
- .B smartctl \-t short \-d 3ware,3 /dev/sdb
-Index: smartmontools-5.39.1+svn3124/smartd.8.in
-===================================================================
---- smartmontools-5.39.1+svn3124.orig/smartd.8.in 2010-12-23 11:00:15.000000000 +0100
-+++ smartmontools-5.39.1+svn3124/smartd.8.in 2010-12-23 11:06:26.676860226 +0100
-@@ -601,10 +601,17 @@
- .B #
- .nf
- .B # Two ATA disks on a 3ware 9000 controller.
--.B # Start long self-tests Sundays between midnight and
-+.B # Start long self-tests Sundays between midnight and
- .B # 1am and 2-3 am
- .B \ \ /dev/twa0 -d 3ware,0 -a -s L/../../7/00
- .B \ \ /dev/twa0 -d 3ware,1 -a -s L/../../7/02
-+.nf
-+.B #
-+.B # Two SATA (not SAS) disks on a 3ware 9750 controller.
-+.B # Start long self-tests Sundays between midnight and
-+.B # 1am and 2-3 am
-+.B \ \ /dev/twl0 -d 3ware,0 -a -s L/../../7/00
-+.B \ \ /dev/twl0 -d 3ware,1 -a -s L/../../7/02
- .B #
- .nf
- .B # Monitor 2 disks connected to the first HP SmartArray controller which
-@@ -703,11 +710,11 @@
- status fails, or if new errors appear in the self-test log.
-
- .B If a 3ware controller is used
--then the corresponding SCSI (/dev/sd?) or character device (/dev/twe?
--or /dev/twa?) must be listed, along with the \'\-d 3ware,N\' Directive
--(see below). The individual ATA disks hosted by the 3ware controller
--appear to \fBsmartd\fP as normal ATA devices. Hence all the ATA
--directives can be used for these disks (but see note below).
-+then the corresponding SCSI (/dev/sd?) or character device (/dev/twe?,
-+/dev/twa? or /dev/twl?) must be listed, along with the \'\-d 3ware,N\'
-+Directive (see below). The individual ATA disks hosted by the 3ware
-+controller appear to \fBsmartd\fP as normal ATA devices. Hence all
-+the ATA directives can be used for these disks (but see note below).
-
- .B If an Areca controller is used
- then the corresponding SCSI generic device (/dev/sg?) must be listed,
-@@ -791,11 +798,11 @@
-
- ATA disks behind 3ware controllers may alternatively be accessed via a
- character device interface /dev/twe0-15 (3ware 6000/7000/8000
--controllers) and /dev/twa0-15 (3ware 9000 series controllers). Note
--that the 9000 series controllers may \fBonly\fP be accessed using the
--character device interface /dev/twa0-15 and not the SCSI device
--interface /dev/sd?. Please see the \fBsmartctl\fP(8) man page for
--further details.
-+controllers), /dev/twa0-15 (3ware 9000 series controllers) and
-+/dev/twl0-15 (3ware 9750 series controllers). Note that the 9000 series
-+controllers may \fBonly\fP be accessed using the character device
-+interface /dev/twa0-15 and not the SCSI device interface /dev/sd?.
-+Please see the \fBsmartctl\fP(8) man page for further details.
-
- Note that older 3w-xxxx drivers do not pass the \'Enable Autosave\'
- (\fB-S on\fP) and \'Enable Automatic Offline\' (\fB-o on\fP) commands
-@@ -806,8 +813,8 @@
- patch to older versions. See
- \fBhttp://smartmontools.sourceforge.net/\fP for instructions.
- Alternatively use the character device interfaces /dev/twe0-15 (3ware
--6/7/8000 series controllers) or /dev/twa0-15 (3ware 9000 series
--controllers).
-+6/7/8000 series controllers), /dev/twa0-15 (3ware 9000 series
-+controllers) or /dev/twl0-15 (3ware 9750 series controllers).
-
- .I areca,N
- \- the device consists of one or more SATA disks connected to an Areca
-Index: smartmontools-5.39.1+svn3124/smartd.conf
-===================================================================
---- smartmontools-5.39.1+svn3124.orig/smartd.conf 2010-12-23 11:00:15.000000000 +0100
-+++ smartmontools-5.39.1+svn3124/smartd.conf 2010-12-23 11:05:12.107063211 +0100
-@@ -75,12 +75,18 @@
- #/dev/sdc -d 3ware,2 -a -s L/../../7/03
- #/dev/sdc -d 3ware,3 -a -s L/../../7/04
-
--# Monitor 2 ATA disks connected to a 3ware 9000 controller which uses
--# the 3w-9xxx driver (Linux, FreeBSD). Start long self-tests Tuesdays
-+# Monitor 2 ATA disks connected to a 3ware 9000 controller which
-+# uses the 3w-9xxx driver (Linux, FreeBSD). Start long self-tests Tuesdays
- # between 1-2 and 3-4 am.
- #/dev/twa0 -d 3ware,0 -a -s L/../../2/01
- #/dev/twa0 -d 3ware,1 -a -s L/../../2/03
-
-+# Monitor 2 SATA (not SAS) disks connected to a 3ware 9000 controller which
-+# uses the 3w-sas driver (Linux, FreeBSD). Start long self-tests Tuesdays
-+# between 1-2 and 3-4 am.
-+#/dev/twl0 -d 3ware,0 -a -s L/../../2/01
-+#/dev/twa0 -d 3ware,1 -a -s L/../../2/03
-+
- # Same as above for Windows. Option '-d 3ware,N' is not necessary,
- # disk (port) number is specified in device name.
- # NOTE: On Windows, DEVICESCAN works also for 3ware controllers.
-Index: smartmontools-5.39.1+svn3124/smartd.conf.5.in
-===================================================================
---- smartmontools-5.39.1+svn3124.orig/smartd.conf.5.in 2010-12-23 11:00:15.000000000 +0100
-+++ smartmontools-5.39.1+svn3124/smartd.conf.5.in 2010-12-23 11:07:46.278565643 +0100
-@@ -177,12 +177,19 @@
- .B #
- .nf
- .B # Two ATA disks on a 3ware 9000 controller.
--.B # Start long self-tests Sundays between midnight and
-+.B # Start long self-tests Sundays between midnight and
- .B # 1am and 2-3 am
- .B \ \ /dev/twa0 -d 3ware,0 -a -s L/../../7/00
- .B \ \ /dev/twa0 -d 3ware,1 -a -s L/../../7/02
- .B #
- .nf
-+.B # Two SATA (not SAS) disks on a 3ware 9750 controller.
-+.B # Start long self-tests Sundays between midnight and
-+.B # 1am and 2-3 am
-+.B \ \ /dev/twl0 -d 3ware,0 -a -s L/../../7/00
-+.B \ \ /dev/twl0 -d 3ware,1 -a -s L/../../7/02
-+.B #
-+.nf
- .B # Monitor 2 disks connected to the first HP SmartArray controller which
- .B # uses the cciss driver. Start long tests on Sunday nights and short
- .B # self-tests every night and send errors to root
-@@ -279,11 +286,11 @@
- status fails, or if new errors appear in the self-test log.
-
- .B If a 3ware controller is used
--then the corresponding SCSI (/dev/sd?) or character device (/dev/twe?
--or /dev/twa?) must be listed, along with the \'\-d 3ware,N\' Directive
--(see below). The individual ATA disks hosted by the 3ware controller
--appear to \fBsmartd\fP as normal ATA devices. Hence all the ATA
--directives can be used for these disks (but see note below).
-+then the corresponding SCSI (/dev/sd?) or character device (/dev/twe?,
-+/dev/twa? or /dev/twl?) must be listed, along with the \'\-d 3ware,N\'
-+Directive (see below). The individual ATA disks hosted by the 3ware
-+controller appear to \fBsmartd\fP as normal ATA devices. Hence all
-+the ATA directives can be used for these disks (but see note below).
-
- .B If an Areca controller is used
- then the corresponding SCSI generic device (/dev/sg?) must be listed,
-@@ -367,11 +374,11 @@
-
- ATA disks behind 3ware controllers may alternatively be accessed via a
- character device interface /dev/twe0-15 (3ware 6000/7000/8000
--controllers) and /dev/twa0-15 (3ware 9000 series controllers). Note
--that the 9000 series controllers may \fBonly\fP be accessed using the
--character device interface /dev/twa0-15 and not the SCSI device
--interface /dev/sd?. Please see the \fBsmartctl\fP(8) man page for
--further details.
-+controllers), /dev/twa0-15 (3ware 9000 series controllers) and
-+/dev/twl0-15 (3ware 9750 series controllers). Note that the 9000 series
-+controllers may \fBonly\fP be accessed using the character device
-+interface /dev/twa0-15 and not the SCSI device interface /dev/sd?.
-+Please see the \fBsmartctl\fP(8) man page for further details.
-
- Note that older 3w-xxxx drivers do not pass the \'Enable Autosave\'
- (\fB-S on\fP) and \'Enable Automatic Offline\' (\fB-o on\fP) commands
-@@ -382,8 +389,8 @@
- patch to older versions. See
- \fBhttp://smartmontools.sourceforge.net/\fP for instructions.
- Alternatively use the character device interfaces /dev/twe0-15 (3ware
--6/7/8000 series controllers) or /dev/twa0-15 (3ware 9000 series
--controllers).
-+6/7/8000 series controllers), /dev/twa0-15 (3ware 9000 series
-+controllers) or /dev/twl0-15 (3ware 9750 series controllers).
-
- .I areca,N
- \- the device consists of one or more SATA disks connected to an Areca