From owner-svn-src-projects@freebsd.org Thu Oct 15 15:51:41 2015 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B32E6A15A77 for ; Thu, 15 Oct 2015 15:51:41 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8AD4CA0D; Thu, 15 Oct 2015 15:51:41 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t9FFpeEm045693; Thu, 15 Oct 2015 15:51:40 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t9FFpetb045691; Thu, 15 Oct 2015 15:51:40 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201510151551.t9FFpetb045691@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Thu, 15 Oct 2015 15:51:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r289366 - projects/mpsutil/usr.sbin/mpsutil X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2015 15:51:41 -0000 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 #else #include "mps_ioctl.h" +#include "mpr_ioctl.h" #endif #include #include @@ -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)