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>