Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Oct 2015 15:51:40 +0000 (UTC)
From:      Baptiste Daroussin <bapt@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r289366 - projects/mpsutil/usr.sbin/mpsutil
Message-ID:  <201510151551.t9FFpetb045691@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bapt
Date: Thu Oct 15 15:51:40 2015
New Revision: 289366
URL: https://svnweb.freebsd.org/changeset/base/289366

Log:
  Add generic storage structure for both mpr and mps to simplify code
  Use correct ioctl on mpr
  Prevent duplication in headers between mps_ioctl.h and mpr_ioctl.h
  
  Sponsored by:	Gandi.net

Modified:
  projects/mpsutil/usr.sbin/mpsutil/mpr_ioctl.h
  projects/mpsutil/usr.sbin/mpsutil/mps_cmd.c

Modified: projects/mpsutil/usr.sbin/mpsutil/mpr_ioctl.h
==============================================================================
--- projects/mpsutil/usr.sbin/mpsutil/mpr_ioctl.h	Thu Oct 15 15:24:13 2015	(r289365)
+++ projects/mpsutil/usr.sbin/mpsutil/mpr_ioctl.h	Thu Oct 15 15:51:40 2015	(r289366)
@@ -360,6 +360,7 @@ typedef struct mpr_btdh_mapping
 #define	MPRIO_RAID_ACTION	_IOWR('M', 205, struct mpr_raid_action)
 #define	MPRIO_MPR_COMMAND	_IOWR('M', 210, struct mpr_usr_command)
 
+#ifndef MPTIOCTL
 #define	MPTIOCTL			('I')
 #define	MPTIOCTL_GET_ADAPTER_DATA	_IOWR(MPTIOCTL, 1,\
     struct mpr_adapter_data)
@@ -382,5 +383,6 @@ typedef struct mpr_btdh_mapping
     struct mpr_reg_access)
 #define	MPTIOCTL_BTDH_MAPPING		_IOWR(MPTIOCTL, 11,\
     struct mpr_btdh_mapping)
+#endif
 
 #endif /* !_MPR_IOCTL_H_ */

Modified: projects/mpsutil/usr.sbin/mpsutil/mps_cmd.c
==============================================================================
--- projects/mpsutil/usr.sbin/mpsutil/mps_cmd.c	Thu Oct 15 15:24:13 2015	(r289365)
+++ projects/mpsutil/usr.sbin/mpsutil/mps_cmd.c	Thu Oct 15 15:51:40 2015	(r289366)
@@ -38,6 +38,7 @@ __RCSID("$FreeBSD$");
 #include <sys/mps_ioctl.h>
 #else
 #include "mps_ioctl.h"
+#include "mpr_ioctl.h"
 #endif
 #include <sys/sysctl.h>
 #include <sys/uio.h>
@@ -219,6 +220,26 @@ static const char *mps_ioc_status_codes[
 	"Diagnostic released",			/* 0x00A0 */
 };
 
+struct mprs_pass_thru {
+        uint64_t        PtrRequest;
+        uint64_t        PtrReply;
+        uint64_t        PtrData;
+        uint32_t        RequestSize;
+        uint32_t        ReplySize;
+        uint32_t        DataSize;
+        uint32_t        DataDirection;
+        uint64_t        PtrDataOut;
+        uint32_t        DataOutSize;
+        uint32_t        Timeout;
+};
+
+struct mprs_btdh_mapping {
+        uint16_t        TargetID;
+        uint16_t        Bus;
+        uint16_t        DevHandle;
+        uint16_t        Reserved;
+};
+
 const char *
 mps_ioc_status(U16 IOCStatus)
 {
@@ -237,9 +258,8 @@ int
 mps_map_btdh(int fd, uint16_t *devhandle, uint16_t *bus, uint16_t *target)
 {
 	int error;
-	struct mps_btdh_mapping map;
+	struct mprs_btdh_mapping map;
 
-	bzero(&map, sizeof(map));
 	map.Bus = *bus;
 	map.TargetID = *target;
 	map.DevHandle = *devhandle;
@@ -640,7 +660,7 @@ mps_user_command(int fd, void *req, uint
 	cmd.len = len;
 	cmd.flags = flags;
 
-	if (ioctl(fd, MPSIO_MPS_COMMAND, &cmd) < 0)
+	if (ioctl(fd, is_mps ? MPSIO_MPS_COMMAND : MPRIO_MPR_COMMAND, &cmd) < 0)
 		return (errno);
 	return (0);
 }
@@ -650,7 +670,7 @@ mps_pass_command(int fd, void *req, uint
 	uint32_t reply_len, void *data_in, uint32_t datain_len, void *data_out,
 	uint32_t dataout_len, uint32_t timeout)
 {
-	struct mps_pass_thru pass;
+	struct mprs_pass_thru pass;
 
 	pass.PtrRequest = (uint64_t)(uintptr_t)req;
 	pass.PtrReply = (uint64_t)(uintptr_t)reply;
@@ -660,14 +680,31 @@ mps_pass_command(int fd, void *req, uint
 	pass.ReplySize = reply_len;
 	pass.DataSize = datain_len;
 	pass.DataOutSize = dataout_len;
-	if (datain_len && dataout_len)
-		pass.DataDirection = MPS_PASS_THRU_DIRECTION_BOTH;
-	else if (datain_len)
-		pass.DataDirection = MPS_PASS_THRU_DIRECTION_READ;
-	else if (dataout_len)
-		pass.DataDirection = MPS_PASS_THRU_DIRECTION_WRITE;
-	else
-		pass.DataDirection = MPS_PASS_THRU_DIRECTION_NONE;
+	if (datain_len && dataout_len) {
+		if (is_mps) {
+			pass.DataDirection = MPS_PASS_THRU_DIRECTION_BOTH;
+		} else {
+			pass.DataDirection = MPR_PASS_THRU_DIRECTION_BOTH;
+		}
+	} else if (datain_len) {
+		if (is_mps) {
+			pass.DataDirection = MPS_PASS_THRU_DIRECTION_READ;
+		} else {
+			pass.DataDirection = MPR_PASS_THRU_DIRECTION_READ;
+		}
+	} else if (dataout_len) {
+		if (is_mps) {
+			pass.DataDirection = MPS_PASS_THRU_DIRECTION_WRITE;
+		} else {
+			pass.DataDirection = MPR_PASS_THRU_DIRECTION_WRITE;
+		}
+	} else {
+		if (is_mps) {
+			pass.DataDirection = MPS_PASS_THRU_DIRECTION_NONE;
+		} else {
+			pass.DataDirection = MPR_PASS_THRU_DIRECTION_NONE;
+		}
+	}
 	pass.Timeout = timeout;
 
 	if (ioctl(fd, MPTIOCTL_PASS_THRU, &pass) < 0)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510151551.t9FFpetb045691>