aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2023-02-22 22:06:43 +0000
committerAlan Somers <asomers@FreeBSD.org>2023-09-21 14:38:24 +0000
commit7d154c4dc64e61af7ca536c4e9927fa07c675a83 (patch)
tree04bf2e1092a1961d9453f0e728504a0422f7751e
parentfb619c94c679e939496fe0cf94b8d2cba95e6e63 (diff)
-rw-r--r--sys/dev/mpr/mpr.c2
-rw-r--r--sys/dev/mpr/mpr_user.c4
-rw-r--r--sys/dev/mps/mps.c2
-rw-r--r--sys/dev/mps/mps_user.c4
-rw-r--r--usr.sbin/mpsutil/mps_cmd.c40
5 files changed, 33 insertions, 19 deletions
diff --git a/sys/dev/mpr/mpr.c b/sys/dev/mpr/mpr.c
index 72993be8834e..23f7ff0c3e9a 100644
--- a/sys/dev/mpr/mpr.c
+++ b/sys/dev/mpr/mpr.c
@@ -1871,7 +1871,7 @@ mpr_setup_sysctl(struct mpr_softc *sc)
SYSCTL_ADD_STRING(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
OID_AUTO, "msg_version", CTLFLAG_RD, sc->msg_version,
- strlen(sc->msg_version), "message interface version");
+ strlen(sc->msg_version), "message interface version (deprecated)");
SYSCTL_ADD_INT(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
OID_AUTO, "io_cmds_active", CTLFLAG_RD,
diff --git a/sys/dev/mpr/mpr_user.c b/sys/dev/mpr/mpr_user.c
index d9dc3d2377a2..f2847ae36d66 100644
--- a/sys/dev/mpr/mpr_user.c
+++ b/sys/dev/mpr/mpr_user.c
@@ -852,7 +852,7 @@ mpr_user_pass_thru(struct mpr_softc *sc, mpr_pass_thru_t *data)
rpl = (MPI2_DEFAULT_REPLY *)cm->cm_reply;
sz = rpl->MsgLength * 4;
- if (sz > data->ReplySize) {
+ if (bootverbose && sz > data->ReplySize) {
mpr_printf(sc, "%s: user reply buffer (%d) "
"smaller than returned buffer (%d)\n",
__func__, data->ReplySize, sz);
@@ -1077,7 +1077,7 @@ mpr_user_pass_thru(struct mpr_softc *sc, mpr_pass_thru_t *data)
rpl = (MPI2_DEFAULT_REPLY *)cm->cm_reply;
sz = rpl->MsgLength * 4;
- if (sz > data->ReplySize) {
+ if (bootverbose && sz > data->ReplySize) {
mpr_printf(sc, "%s: user reply buffer (%d) smaller "
"than returned buffer (%d)\n", __func__,
data->ReplySize, sz);
diff --git a/sys/dev/mps/mps.c b/sys/dev/mps/mps.c
index 43362b96b7b6..f358ab8a73a9 100644
--- a/sys/dev/mps/mps.c
+++ b/sys/dev/mps/mps.c
@@ -1719,7 +1719,7 @@ mps_setup_sysctl(struct mps_softc *sc)
SYSCTL_ADD_STRING(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
OID_AUTO, "msg_version", CTLFLAG_RD, sc->msg_version,
- strlen(sc->msg_version), "message interface version");
+ strlen(sc->msg_version), "message interface version (deprecated)");
SYSCTL_ADD_INT(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
OID_AUTO, "io_cmds_active", CTLFLAG_RD,
diff --git a/sys/dev/mps/mps_user.c b/sys/dev/mps/mps_user.c
index cf2fdb2b2adb..3d1b478d81b1 100644
--- a/sys/dev/mps/mps_user.c
+++ b/sys/dev/mps/mps_user.c
@@ -851,7 +851,7 @@ mps_user_pass_thru(struct mps_softc *sc, mps_pass_thru_t *data)
rpl = (MPI2_DEFAULT_REPLY *)cm->cm_reply;
sz = rpl->MsgLength * 4;
- if (sz > data->ReplySize) {
+ if (bootverbose && sz > data->ReplySize) {
mps_printf(sc, "%s: user reply buffer (%d) "
"smaller than returned buffer (%d)\n",
__func__, data->ReplySize, sz);
@@ -1005,7 +1005,7 @@ mps_user_pass_thru(struct mps_softc *sc, mps_pass_thru_t *data)
rpl = (MPI2_DEFAULT_REPLY *)cm->cm_reply;
sz = rpl->MsgLength * 4;
- if (sz > data->ReplySize) {
+ if (bootverbose && sz > data->ReplySize) {
mps_printf(sc, "%s: user reply buffer (%d) smaller "
"than returned buffer (%d)\n", __func__,
data->ReplySize, sz);
diff --git a/usr.sbin/mpsutil/mps_cmd.c b/usr.sbin/mpsutil/mps_cmd.c
index 448e4cea602f..2101bbba73b0 100644
--- a/usr.sbin/mpsutil/mps_cmd.c
+++ b/usr.sbin/mpsutil/mps_cmd.c
@@ -721,25 +721,39 @@ mps_pass_command(int fd, void *req, uint32_t req_len, void *reply,
return (0);
}
+/* Return the length in bytes of the device's MPI2_IOC_FACTS reply */
+static size_t
+mps_get_ioc_factslen(int fd)
+{
+ MPI2_IOC_FACTS_REQUEST req;
+ const size_t factslen = 4;
+ char factsbuf[4] = {0};
+ MPI2_IOC_FACTS_REPLY *facts = (MPI2_IOC_FACTS_REPLY*)factsbuf;
+ int error;
+
+ bzero(&req, sizeof(req));
+ req.Function = MPI2_FUNCTION_IOC_FACTS;
+ error = mps_pass_command(fd, &req, sizeof(MPI2_IOC_FACTS_REQUEST),
+ factsbuf, factslen, NULL, 0, NULL, 0, 10);
+
+ if (error)
+ return (0);
+
+ /* The card's response is measured in dwords */
+ return (facts->MsgLength * 4);
+}
+
MPI2_IOC_FACTS_REPLY *
mps_get_iocfacts(int fd)
{
MPI2_IOC_FACTS_REPLY *facts;
MPI2_IOC_FACTS_REQUEST req;
- char msgver[8], sysctlname[128];
- size_t len, factslen;
+ size_t factslen;
int error;
- snprintf(sysctlname, sizeof(sysctlname), "dev.%s.%d.msg_version",
- is_mps ? "mps" : "mpr", mps_unit);
-
- factslen = sizeof(MPI2_IOC_FACTS_REPLY);
- len = sizeof(msgver);
- error = sysctlbyname(sysctlname, msgver, &len, NULL, 0);
- if (error == 0) {
- if (strncmp(msgver, "2.6", sizeof(msgver)) == 0)
- factslen += 4;
- }
+ factslen = mps_get_ioc_factslen(fd);
+ if (factslen == 0)
+ return (NULL);
facts = malloc(factslen);
if (facts == NULL) {
@@ -747,7 +761,7 @@ mps_get_iocfacts(int fd)
return (NULL);
}
- bzero(&req, factslen);
+ bzero(&req, sizeof(req));
req.Function = MPI2_FUNCTION_IOC_FACTS;
#if 1