svn commit: r198496 - in stable/7: etc etc/mtree include sys sys/contrib/pf sys/dev/mfi usr.sbin usr.sbin/acpi usr.sbin/adduser usr.sbin/arp usr.sbin/bluetooth usr.sbin/bluetooth/btpand usr.sbin/bl...

John Baldwin jhb at FreeBSD.org
Mon Oct 26 18:57:58 UTC 2009


Author: jhb
Date: Mon Oct 26 18:57:57 2009
New Revision: 198496
URL: http://svn.freebsd.org/changeset/base/198496

Log:
  MFC 196200,196211,196280-196282:
  Introduce mfiutil, a basic utility for managing LSI SAS-RAID & Dell PERC5/6
  controllers.  Controller, array, and drive status can be checked, basic
  attributes can be changed, and arrays and spares can be created and deleted.
  Controller firmware can also be flashed.
  
  This does not replace MegaCLI, found in ports, as that is officially sanctioned
  and supported by LSI and includes vastly more functionality.  However, mfiutil
  is open source and guaranteed to provide basic functionality, which can be
  especially useful if you have a problem and can't get MegaCLI to work.

Added:
  stable/7/usr.sbin/mfiutil/   (props changed)
     - copied from r196200, head/usr.sbin/mfiutil/
  stable/7/usr.sbin/mfiutil/mfiutil.8   (contents, props changed)
     - copied, changed from r196280, head/usr.sbin/mfiutil/mfiutil.8
Modified:
  stable/7/etc/   (props changed)
  stable/7/etc/mtree/BSD.include.dist
  stable/7/etc/termcap.small   (props changed)
  stable/7/include/   (props changed)
  stable/7/include/Makefile
  stable/7/sys/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)
  stable/7/sys/dev/mfi/mfi_ioctl.h
  stable/7/sys/dev/mfi/mfireg.h
  stable/7/usr.sbin/   (props changed)
  stable/7/usr.sbin/Makefile
  stable/7/usr.sbin/acpi/   (props changed)
  stable/7/usr.sbin/adduser/   (props changed)
  stable/7/usr.sbin/arp/   (props changed)
  stable/7/usr.sbin/bluetooth/   (props changed)
  stable/7/usr.sbin/bluetooth/btpand/   (props changed)
  stable/7/usr.sbin/bluetooth/hcsecd/   (props changed)
  stable/7/usr.sbin/bluetooth/hcseriald/   (props changed)
  stable/7/usr.sbin/bluetooth/rfcomm_pppd/   (props changed)
  stable/7/usr.sbin/bluetooth/sdpd/   (props changed)
  stable/7/usr.sbin/bsnmpd/modules/snmp_pf/   (props changed)
  stable/7/usr.sbin/burncd/   (props changed)
  stable/7/usr.sbin/cdcontrol/   (props changed)
  stable/7/usr.sbin/chown/   (props changed)
  stable/7/usr.sbin/chroot/   (props changed)
  stable/7/usr.sbin/config/   (props changed)
  stable/7/usr.sbin/cpucontrol/   (props changed)
  stable/7/usr.sbin/crashinfo/   (props changed)
  stable/7/usr.sbin/cron/   (props changed)
  stable/7/usr.sbin/cron/cron/   (props changed)
  stable/7/usr.sbin/crunch/   (props changed)
  stable/7/usr.sbin/eeprom/   (props changed)
  stable/7/usr.sbin/extattr/   (props changed)
  stable/7/usr.sbin/fdcontrol/   (props changed)
  stable/7/usr.sbin/fdformat/   (props changed)
  stable/7/usr.sbin/fdread/   (props changed)
  stable/7/usr.sbin/fdwrite/   (props changed)
  stable/7/usr.sbin/freebsd-update/   (props changed)
  stable/7/usr.sbin/fwcontrol/   (props changed)
  stable/7/usr.sbin/gstat/   (props changed)
  stable/7/usr.sbin/iostat/   (props changed)
  stable/7/usr.sbin/jail/   (props changed)
  stable/7/usr.sbin/jexec/   (props changed)
  stable/7/usr.sbin/jls/   (props changed)
  stable/7/usr.sbin/lpr/   (props changed)
  stable/7/usr.sbin/makefs/   (props changed)
  stable/7/usr.sbin/makefs/ffs/ffs_bswap.c   (props changed)
  stable/7/usr.sbin/makefs/ffs/ffs_subr.c   (props changed)
  stable/7/usr.sbin/makefs/ffs/ufs_bswap.h   (props changed)
  stable/7/usr.sbin/makefs/getid.c   (props changed)
  stable/7/usr.sbin/mergemaster/   (props changed)
  stable/7/usr.sbin/mfiutil/Makefile
  stable/7/usr.sbin/mfiutil/mfi_drive.c
  stable/7/usr.sbin/mountd/   (props changed)
  stable/7/usr.sbin/mtree/   (props changed)
  stable/7/usr.sbin/ndiscvt/   (props changed)
  stable/7/usr.sbin/newsyslog/newsyslog.conf.5   (props changed)
  stable/7/usr.sbin/nscd/   (props changed)
  stable/7/usr.sbin/ntp/   (props changed)
  stable/7/usr.sbin/pciconf/   (props changed)
  stable/7/usr.sbin/pkg_install/   (props changed)
  stable/7/usr.sbin/pmcstat/   (props changed)
  stable/7/usr.sbin/portsnap/   (props changed)
  stable/7/usr.sbin/powerd/   (props changed)
  stable/7/usr.sbin/ppp/   (props changed)
  stable/7/usr.sbin/pstat/   (props changed)
  stable/7/usr.sbin/pw/   (props changed)
  stable/7/usr.sbin/pwd_mkdb/   (props changed)
  stable/7/usr.sbin/rpc.lockd/   (props changed)
  stable/7/usr.sbin/rpc.statd/   (props changed)
  stable/7/usr.sbin/rpc.yppasswdd/   (props changed)
  stable/7/usr.sbin/sade/   (props changed)
  stable/7/usr.sbin/setfib/   (props changed)
  stable/7/usr.sbin/sysinstall/   (props changed)
  stable/7/usr.sbin/syslogd/   (props changed)
  stable/7/usr.sbin/traceroute/   (props changed)
  stable/7/usr.sbin/traceroute6/   (props changed)
  stable/7/usr.sbin/tzsetup/   (props changed)
  stable/7/usr.sbin/wpa/wpa_supplicant/   (props changed)
  stable/7/usr.sbin/ypserv/   (props changed)
  stable/7/usr.sbin/zic/   (props changed)

Modified: stable/7/etc/mtree/BSD.include.dist
==============================================================================
--- stable/7/etc/mtree/BSD.include.dist	Mon Oct 26 18:32:06 2009	(r198495)
+++ stable/7/etc/mtree/BSD.include.dist	Mon Oct 26 18:57:57 2009	(r198496)
@@ -102,6 +102,8 @@
         ..
         lmc
         ..
+	mfi
+	..
         mpt
             mpilib
             ..

Modified: stable/7/include/Makefile
==============================================================================
--- stable/7/include/Makefile	Mon Oct 26 18:32:06 2009	(r198495)
+++ stable/7/include/Makefile	Mon Oct 26 18:57:57 2009	(r198496)
@@ -43,7 +43,7 @@ LDIRS=	bsm cam geom net net80211 netatal
 
 LSUBDIRS=	cam/scsi \
 	dev/acpica dev/an dev/bktr dev/firewire dev/hwpmc \
-	dev/ic dev/iicbus ${_dev_ieee488} dev/lmc dev/ofw \
+	dev/ic dev/iicbus ${_dev_ieee488} dev/lmc dev/mfi dev/ofw \
 	dev/pbio ${_dev_powermac_nvram} dev/ppbus dev/smbus \
 	dev/speaker dev/usb dev/utopia dev/vkbd dev/wi \
 	fs/devfs fs/fdescfs fs/fifofs fs/msdosfs fs/ntfs fs/nullfs \

Modified: stable/7/sys/dev/mfi/mfi_ioctl.h
==============================================================================
--- stable/7/sys/dev/mfi/mfi_ioctl.h	Mon Oct 26 18:32:06 2009	(r198495)
+++ stable/7/sys/dev/mfi/mfi_ioctl.h	Mon Oct 26 18:57:57 2009	(r198496)
@@ -27,6 +27,8 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include <dev/mfi/mfireg.h>
+
 #if defined(__amd64__) /* Assume amd64 wants 32 bit Linux */
 struct iovec32 {
 	u_int32_t	iov_base;

Modified: stable/7/sys/dev/mfi/mfireg.h
==============================================================================
--- stable/7/sys/dev/mfi/mfireg.h	Mon Oct 26 18:32:06 2009	(r198495)
+++ stable/7/sys/dev/mfi/mfireg.h	Mon Oct 26 18:57:57 2009	(r198496)
@@ -89,7 +89,7 @@ __FBSDID("$FreeBSD$");
 #define MFI_ODCR0	0xa0 		/* outbound doorbell clear register0  */
 #define MFI_OSP0	0xb0 		/* outbound scratch pad0  */
 #define MFI_1078_EIM	0x80000004 	/* 1078 enable intrrupt mask  */
-#define MFI_RMI		0x2 		/* reply message interrupt  */
+#define MFI_RMI		0x2 		/* reply message interrupt  */       
 #define MFI_1078_RM	0x80000000 	/* reply 1078 message interrupt  */
 #define MFI_ODC		0x4 		/* outbound doorbell change interrupt */
 
@@ -151,15 +151,41 @@ typedef enum {
 	MFI_DCMD_CTRL_EVENT_GETINFO =	0x01040100,
 	MFI_DCMD_CTRL_EVENT_GET =	0x01040300,
 	MFI_DCMD_CTRL_EVENT_WAIT =	0x01040500,
+	MFI_DCMD_PR_GET_STATUS =	0x01070100,
+	MFI_DCMD_PR_GET_PROPERTIES =	0x01070200,
+	MFI_DCMD_PR_SET_PROPERTIES =	0x01070300,
+	MFI_DCMD_PR_START =		0x01070400,
+	MFI_DCMD_PR_STOP =		0x01070500,
+	MFI_DCMD_TIME_SECS_GET =	0x01080201,
+	MFI_DCMD_FLASH_FW_OPEN =	0x010f0100,
+	MFI_DCMD_FLASH_FW_DOWNLOAD =	0x010f0200,
+	MFI_DCMD_FLASH_FW_FLASH =	0x010f0300,
+	MFI_DCMD_FLASH_FW_CLOSE =	0x010f0400,
+	MFI_DCMD_PD_GET_LIST =		0x02010000,
+	MFI_DCMD_PD_GET_INFO = 		0x02020000,
+	MFI_DCMD_PD_STATE_SET =		0x02030100,
+	MFI_DCMD_PD_REBUILD_START =	0x02040100,
+	MFI_DCMD_PD_REBUILD_ABORT =	0x02040200,
+	MFI_DCMD_PD_CLEAR_START =	0x02050100,
+	MFI_DCMD_PD_CLEAR_ABORT =	0x02050200,
+	MFI_DCMD_PD_GET_PROGRESS =	0x02060000,
+	MFI_DCMD_PD_LOCATE_START =	0x02070100,
+	MFI_DCMD_PD_LOCATE_STOP =	0x02070200,
 	MFI_DCMD_LD_GET_LIST =		0x03010000,
 	MFI_DCMD_LD_GET_INFO =		0x03020000,
 	MFI_DCMD_LD_GET_PROP =		0x03030000,
 	MFI_DCMD_LD_SET_PROP =		0x03040000,
+	MFI_DCMD_LD_INIT_START =	0x03060100,
 	MFI_DCMD_LD_DELETE =		0x03090000,
 	MFI_DCMD_CFG_READ =		0x04010000,
 	MFI_DCMD_CFG_ADD =		0x04020000,
 	MFI_DCMD_CFG_CLEAR =		0x04030000,
+	MFI_DCMD_CFG_MAKE_SPARE =	0x04040000,
+	MFI_DCMD_CFG_REMOVE_SPARE =	0x04050000,	
 	MFI_DCMD_CFG_FOREIGN_IMPORT =	0x04060400,
+	MFI_DCMD_BBU_GET_STATUS =	0x05010000,
+	MFI_DCMD_BBU_GET_CAPACITY_INFO =0x05020000,
+	MFI_DCMD_BBU_GET_DESIGN_INFO =	0x05030000,
 	MFI_DCMD_CLUSTER =		0x08000000,
 	MFI_DCMD_CLUSTER_RESET_ALL =	0x08010100,
 	MFI_DCMD_CLUSTER_RESET_LD =	0x08010200
@@ -245,6 +271,9 @@ typedef enum {
 	MFI_STAT_RESERVATION_IN_PROGRESS,
 	MFI_STAT_I2C_ERRORS_DETECTED,
 	MFI_STAT_PCI_ERRORS_DETECTED,
+	MFI_STAT_DIAG_FAILED,
+	MFI_STAT_BOOT_MSG_PENDING,
+	MFI_STAT_FOREIGN_CONFIG_INCOMPLETE,
 	MFI_STAT_INVALID_STATUS =	0xFF
 } mfi_status_t;
 
@@ -303,6 +332,17 @@ typedef enum {
 	MR_LD_CACHE_ALLOW_WRITE_CACHE =	0x20,
 	MR_LD_CACHE_ALLOW_READ_CACHE =	0x40
 } mfi_ld_cache;
+#define	MR_LD_CACHE_MASK	0x7f
+
+#define	MR_LD_CACHE_POLICY_READ_AHEAD_NONE		0
+#define	MR_LD_CACHE_POLICY_READ_AHEAD_ALWAYS		MR_LD_CACHE_READ_AHEAD
+#define	MR_LD_CACHE_POLICY_READ_AHEAD_ADAPTIVE		\
+	(MR_LD_CACHE_READ_AHEAD | MR_LD_CACHE_READ_ADAPTIVE)
+#define	MR_LD_CACHE_POLICY_WRITE_THROUGH		0
+#define	MR_LD_CACHE_POLICY_WRITE_BACK			MR_LD_CACHE_WRITE_BACK
+#define	MR_LD_CACHE_POLICY_IO_CACHED			\
+	(MR_LD_CACHE_ALLOW_WRITE_CACHE | MR_LD_CACHE_ALLOW_READ_CACHE)
+#define	MR_LD_CACHE_POLICY_IO_DIRECT			0
 
 typedef enum {
 	MR_PD_CACHE_UNCHANGED  =	0,
@@ -320,6 +360,7 @@ typedef enum {
 #define MFI_DEFAULT_ID		-1
 #define MFI_MAX_LUN		8
 #define MFI_MAX_LD		64
+#define	MFI_MAX_PD		256
 
 #define MFI_FRAME_SIZE		64
 #define MFI_MBOX_SIZE		12
@@ -866,12 +907,10 @@ union mfi_pd_ddf_type {
 } __packed;
 
 struct mfi_pd_progress {
-	struct {
-		uint32_t		rbld	: 1;
-		uint32_t		patrol	: 1;
-		uint32_t		clear	: 1;
-		uint32_t		reserved: 29;
-	} active;
+	uint32_t			active;
+#define	MFI_PD_PROGRESS_REBUILD	(1<<0)
+#define	MFI_PD_PROGRESS_PATROL	(1<<1)
+#define	MFI_PD_PROGRESS_CLEAR	(1<<2)
 	struct mfi_progress		rbld;
 	struct mfi_progress		patrol;
 	struct mfi_progress		clear;
@@ -890,8 +929,8 @@ struct mfi_pd_info {
 	uint32_t			other_err_count;
 	uint32_t			pred_fail_count;
 	uint32_t			last_pred_fail_event_seq_num;
-	uint16_t			fw_state;
-	uint8_t				disable_for_removal;
+	uint16_t			fw_state;	/* MFI_PD_STATE_* */
+	uint8_t				disabled_for_removal;
 	uint8_t				link_speed;
 	union mfi_pd_ddf_type		state;
 	struct {
@@ -918,7 +957,7 @@ struct mfi_pd_address {
 	uint16_t		encl_device_id;
 	uint8_t			encl_index;
 	uint8_t			slot_number;
-	uint8_t			scsi_dev_type;
+	uint8_t			scsi_dev_type;	/* 0 = disk */
 	uint8_t			connect_port_bitmap;
 	uint64_t		sas_addr[2];
 } __packed;
@@ -926,12 +965,19 @@ struct mfi_pd_address {
 struct mfi_pd_list {
 	uint32_t		size;
 	uint32_t		count;
-	uint8_t			data;
-	/*
-	struct mfi_pd_address	addr[];
-	*/
+	struct mfi_pd_address	addr[0];
 } __packed;
 
+enum mfi_pd_state {
+	MFI_PD_STATE_UNCONFIGURED_GOOD = 0x00,
+	MFI_PD_STATE_UNCONFIGURED_BAD = 0x01,
+	MFI_PD_STATE_HOT_SPARE = 0x02,
+	MFI_PD_STATE_OFFLINE = 0x10,
+	MFI_PD_STATE_FAILED = 0x11,
+	MFI_PD_STATE_REBUILD = 0x14,
+	MFI_PD_STATE_ONLINE = 0x18
+};
+
 union mfi_ld_ref {
 	struct {
 		uint8_t		target_id;
@@ -986,6 +1032,9 @@ struct mfi_ld_params {
 	uint8_t			span_depth;
 	uint8_t			state;
 	uint8_t			init_state;
+#define	MFI_LD_PARAMS_INIT_NO		0
+#define	MFI_LD_PARAMS_INIT_QUICK	1
+#define	MFI_LD_PARAMS_INIT_FULL		2
 	uint8_t			is_consistent;
 	uint8_t			reserved[23];
 } __packed;
@@ -995,7 +1044,7 @@ struct mfi_ld_progress {
 #define	MFI_LD_PROGRESS_CC	(1<<0)
 #define	MFI_LD_PROGRESS_BGI	(1<<1)
 #define	MFI_LD_PROGRESS_FGI	(1<<2)
-#define	MFI_LD_PORGRESS_RECON	(1<<3)
+#define	MFI_LD_PROGRESS_RECON	(1<<3)
 	struct mfi_progress	cc;
 	struct mfi_progress	bgi;
 	struct mfi_progress	fgi;
@@ -1028,26 +1077,18 @@ struct mfi_ld_info {
 	uint8_t			reserved2[16];
 } __packed;
 
-union mfi_spare_type {
-	struct {
-		uint8_t		is_dedicate		:1;
-		uint8_t		is_revertable		:1;
-		uint8_t		is_encl_affinity	:1;
-		uint8_t		reserved		:5;
-	} v;
-	uint8_t		type;
-} __packed;
-
 #define MAX_ARRAYS 16
 struct mfi_spare {
 	union mfi_pd_ref	ref;
-	union mfi_spare_type	spare_type;
+	uint8_t			spare_type;
+#define	MFI_SPARE_DEDICATED	(1 << 0)
+#define	MFI_SPARE_REVERTIBLE	(1 << 1)
+#define	MFI_SPARE_ENCL_AFFINITY	(1 << 2)
 	uint8_t			reserved[2];
 	uint8_t			array_count;
-	uint16_t		array_refd[MAX_ARRAYS];
+	uint16_t		array_ref[MAX_ARRAYS];
 } __packed;
 
-#define MAX_ROW_SIZE 32
 struct mfi_array {
 	uint64_t			size;
 	uint8_t				num_drives;
@@ -1055,13 +1096,13 @@ struct mfi_array {
 	uint16_t			array_ref;
 	uint8_t				pad[20];
 	struct {
-		union mfi_pd_ref	ref;
-		uint16_t		fw_state;
+		union mfi_pd_ref	ref;	/* 0xffff == missing drive */
+		uint16_t		fw_state;	/* MFI_PD_STATE_* */
 		struct {
 			uint8_t		pd;
 			uint8_t		slot;
 		} encl;
-	} pd[MAX_ROW_SIZE];
+	} pd[0];
 } __packed;
 
 struct mfi_config_data {
@@ -1073,13 +1114,117 @@ struct mfi_config_data {
 	uint16_t		spares_count;
 	uint16_t		spares_size;
 	uint8_t			reserved[16];
-	uint8_t			data;
-	/*
-	struct mfi_array	array[];
-	struct mfi_ld_config	ld[];
-	struct mfi_spare	spare[];
-	*/
-} __packed;
+	struct mfi_array	array[0];
+	struct mfi_ld_config	ld[0];
+	struct mfi_spare	spare[0];
+} __packed;
+
+struct mfi_bbu_capacity_info {
+	uint16_t		relative_charge;
+	uint16_t		absolute_charge;
+	uint16_t		remaining_capacity;
+	uint16_t		full_charge_capacity;
+	uint16_t		run_time_to_empty;
+	uint16_t		average_time_to_empty;
+	uint16_t		average_time_to_full;
+	uint16_t		cycle_count;
+	uint16_t		max_error;
+	uint16_t		remaining_capacity_alarm;
+	uint16_t		remaining_time_alarm;
+	uint8_t			reserved[26];
+} __packed;
+
+struct mfi_bbu_design_info {
+	uint32_t		mfg_date;
+	uint16_t		design_capacity;
+	uint16_t		design_voltage;
+	uint16_t		spec_info;
+	uint16_t		serial_number;
+	uint16_t		pack_stat_config;
+	uint8_t			mfg_name[12];
+	uint8_t			device_name[8];
+	uint8_t			device_chemistry[8];
+	uint8_t			mfg_data[8];
+	uint8_t			reserved[17];
+} __packed;
+
+struct mfi_ibbu_state {
+	uint16_t		gas_guage_status;
+	uint16_t		relative_charge;
+	uint16_t		charger_system_state;
+	uint16_t		charger_system_ctrl;
+	uint16_t		charging_current;
+	uint16_t		absolute_charge;
+	uint16_t		max_error;
+	uint8_t			reserved[18];
+} __packed;
+
+struct mfi_bbu_state {
+	uint16_t		gas_guage_status;
+	uint16_t		relative_charge;
+	uint16_t		charger_status;
+	uint16_t		remaining_capacity;
+	uint16_t		full_charge_capacity;
+	uint8_t			is_SOH_good;
+	uint8_t			reserved[21];
+} __packed;
+
+union mfi_bbu_status_detail {
+	struct mfi_ibbu_state	ibbu;
+	struct mfi_bbu_state	bbu;
+};
+
+struct mfi_bbu_status {
+	uint8_t			battery_type;
+#define	MFI_BBU_TYPE_NONE	0
+#define	MFI_BBU_TYPE_IBBU	1
+#define	MFI_BBU_TYPE_BBU	2	
+	uint8_t			reserved;
+	uint16_t		voltage;
+	int16_t			current;
+	uint16_t		temperature;
+	uint32_t		fw_status;
+#define	MFI_BBU_STATE_PACK_MISSING	(1 << 0)
+#define	MFI_BBU_STATE_VOLTAGE_LOW	(1 << 1)
+#define	MFI_BBU_STATE_TEMPERATURE_HIGH	(1 << 2)
+#define	MFI_BBU_STATE_CHARGE_ACTIVE	(1 << 0)
+#define	MFI_BBU_STATE_DISCHARGE_ACTIVE	(1 << 0)
+	uint8_t			pad[20];
+	union mfi_bbu_status_detail detail;
+} __packed;
+
+enum mfi_pr_state {
+	MFI_PR_STATE_STOPPED = 0,
+	MFI_PR_STATE_READY = 1,
+	MFI_PR_STATE_ACTIVE = 2,
+	MFI_PR_STATE_ABORTED = 0xff
+};
+
+struct mfi_pr_status {
+	uint32_t		num_iteration;
+	uint8_t			state;
+	uint8_t			num_pd_done;
+	uint8_t			reserved[10];
+};
+
+enum mfi_pr_opmode {
+	MFI_PR_OPMODE_AUTO = 0,
+	MFI_PR_OPMODE_MANUAL = 1,
+	MFI_PR_OPMODE_DISABLED = 2
+};
+
+struct mfi_pr_properties {
+	uint8_t			op_mode;
+	uint8_t			max_pd;
+	uint8_t			reserved;
+	uint8_t			exclude_ld_count;
+	uint16_t		excluded_ld[MFI_MAX_LD];
+	uint8_t			cur_pd_map[MFI_MAX_PD / 8];
+	uint8_t			last_pd_map[MFI_MAX_PD / 8];
+	uint32_t		next_exec;
+	uint32_t		exec_freq;
+	uint32_t		clear_freq;
+};
 
 #define MFI_SCSI_MAX_TARGETS	128
 #define MFI_SCSI_MAX_LUNS	8

Modified: stable/7/usr.sbin/Makefile
==============================================================================
--- stable/7/usr.sbin/Makefile	Mon Oct 26 18:32:06 2009	(r198495)
+++ stable/7/usr.sbin/Makefile	Mon Oct 26 18:57:57 2009	(r198496)
@@ -91,6 +91,7 @@ SUBDIR=	${_ac} \
 	manctl \
 	memcontrol \
 	mergemaster \
+	mfiutil \
 	mixer \
 	${_mld6query} \
 	mlxcontrol \

Modified: stable/7/usr.sbin/mfiutil/Makefile
==============================================================================
--- head/usr.sbin/mfiutil/Makefile	Thu Aug 13 23:18:45 2009	(r196200)
+++ stable/7/usr.sbin/mfiutil/Makefile	Mon Oct 26 18:57:57 2009	(r198496)
@@ -3,6 +3,7 @@ PROG=	mfiutil
 
 SRCS=	mfiutil.c mfi_cmd.c mfi_config.c mfi_drive.c mfi_evt.c mfi_flash.c \
 	mfi_patrol.c mfi_show.c mfi_volume.c
+MAN8=	mfiutil.8
 
 CFLAGS+= -fno-builtin-strftime
 WARNS?=3

Modified: stable/7/usr.sbin/mfiutil/mfi_drive.c
==============================================================================
--- head/usr.sbin/mfiutil/mfi_drive.c	Thu Aug 13 23:18:45 2009	(r196200)
+++ stable/7/usr.sbin/mfiutil/mfi_drive.c	Mon Oct 26 18:57:57 2009	(r198496)
@@ -75,8 +75,9 @@ int
 mfi_lookup_drive(int fd, char *drive, uint16_t *device_id)
 {
 	struct mfi_pd_list *list;
-	long val;
 	uint8_t encl, slot;
+	long val;
+	u_int i;
 	char *cp;
 
 	/* Look for a raw device id first. */
@@ -117,15 +118,15 @@ mfi_lookup_drive(int fd, char *drive, ui
 			return (errno);
 		}
 
-		for (val = 0; val < list->count; val++) {
-			if (list->addr[val].scsi_dev_type != 0)
+		for (i = 0; i < list->count; i++) {
+			if (list->addr[i].scsi_dev_type != 0)
 				continue;
 
 			if (((encl == 0xff &&
-			    list->addr[val].encl_device_id == 0xffff) ||
-			    list->addr[val].encl_index == encl) &&
-			    list->addr[val].slot_number == slot) {
-				*device_id = list->addr[val].device_id;
+			    list->addr[i].encl_device_id == 0xffff) ||
+			    list->addr[i].encl_index == encl) &&
+			    list->addr[i].slot_number == slot) {
+				*device_id = list->addr[i].device_id;
 				free(list);
 				return (0);
 			}

Copied and modified: stable/7/usr.sbin/mfiutil/mfiutil.8 (from r196280, head/usr.sbin/mfiutil/mfiutil.8)
==============================================================================
--- head/usr.sbin/mfiutil/mfiutil.8	Mon Aug 17 06:05:55 2009	(r196280, copy source)
+++ stable/7/usr.sbin/mfiutil/mfiutil.8	Mon Oct 26 18:57:57 2009	(r198496)
@@ -27,8 +27,8 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd June 17, 2008
-.Dt MFIUTIL 1
+.Dd August 16, 2009
+.Dt MFIUTIL 8
 .Os
 .Sh NAME
 .Nm mfiutil
@@ -161,9 +161,6 @@ on the volume may be specified by the co
 device,
 such as
 .Em mfid0 .
-Note that this second method only works on OS versions
-.Dv 6.2-YAHOO-20070510
-and later.
 .Pp
 Drives may be specified in two forms.
 First,
@@ -562,13 +559,8 @@ patrol read starting in 5 minutes:
 .Pp
 .Sh SEE ALSO
 .Xr mfi 4
-.Sh BUGS
-On 64-bit OS versions
-.Dv 6.2-YAHOO-20070514
-and earlier,
-the 
-.Xr mfi 4
-driver does not properly report firmware errors to 32-bit versions of
-.Nm .
-As a result,
-some commands may fail even though they do not report any errors.
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Fx 8.0 .


More information about the svn-src-all mailing list