ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * CDDL HEADER START
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim *
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * The contents of this file are subject to the terms of the
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * Common Development and Distribution License (the "License").
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * You may not use this file except in compliance with the License.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim *
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * or http://www.opensolaris.org/os/licensing.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * See the License for the specific language governing permissions
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * and limitations under the License.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim *
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * When distributing Covered Code, include this CDDL HEADER in each
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * If applicable, add the following below this CDDL HEADER, with the
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * fields enclosed by brackets "[]" replaced with your own identifying
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * information: Portions Copyright [yyyy] [name of copyright owner]
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim *
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * CDDL HEADER END
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim */
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim */
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim#include <sys/types.h>
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim#include <sys/scsi/generic/commands.h>
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim#include <sys/scsi/impl/commands.h>
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim#include <sys/scsi/generic/smp_frames.h>
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim#include <scsi/libsmp.h>
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim#include <scsi/libsmp_plugin.h>
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim#include "sas2.h"
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic off_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_rq_dataoff(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_request_frame(ap, NULL, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len > SMP_REQ_MINLEN)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (offsetof(smp_request_frame_t, srf_data[0]));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (-1);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic void
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_rq_setframe(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim const smp_function_def_t *dp = smp_action_get_function_def(ap);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_request_frame_t *fp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim uint_t cap;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim uint16_t change_count;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim uint16_t *rqcc;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t rqlen, rslen;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_request_frame(ap, (void *)&fp, &rqlen);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, NULL, &rslen);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim cap = smp_target_getcap(tp);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fp->srf_frame_type = SMP_FRAME_TYPE_REQUEST;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fp->srf_function = dp->sfd_function;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fp->srf_allocated_response_len = (rslen - SMP_RESP_MINLEN) / 4;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fp->srf_request_len = (rqlen - SMP_REQ_MINLEN) / 4;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim } else {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fp->srf_allocated_response_len = 0;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fp->srf_request_len = 0;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim /*
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * If this command requires that the expected expander change count
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * be set (as many do), we will attempt to set it based on the
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * most recently executed command. However, if the user has set it
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * already, we will not overwrite that setting. It is the consumer's
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * responsibility to keep track of expander changes each time it
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * receives a new change count in a response.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim */
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (dp->sfd_flags & SMP_FD_F_NEEDS_CHANGE_COUNT) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim ASSERT(rqlen >= SMP_REQ_MINLEN + sizeof (uint16_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim /* LINTED - alignment */
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim rqcc = (uint16_t *)(&fp->srf_data[0]);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (SCSI_READ16(rqcc) == 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim change_count = smp_target_get_change_count(tp);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SCSI_WRITE16(rqcc, change_count);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_rs_datalen(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_response_frame_t *fp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, (void **)&fp, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len >= SMP_RESP_MINLEN)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len -= SMP_RESP_MINLEN;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim else
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len &= ~3;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (fp->srf_response_len == 0)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 4 * (fp->srf_response_len)));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic off_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_rs_dataoff(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, NULL, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len > SMP_RESP_MINLEN)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (offsetof(smp_request_frame_t, srf_data[0]));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (-1);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic void
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_rs_getparams(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim const smp_function_def_t *dp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_response_frame_t *fp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim uint16_t change_count;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim dp = smp_action_get_function_def(ap);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, (void **)&fp, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_set_result(ap, fp->srf_result);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (!(dp->sfd_flags & SMP_FD_F_PROVIDES_CHANGE_COUNT))
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len <= SMP_RESP_MINLEN + sizeof (uint16_t))
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim change_count = SCSI_READ16(&fp->srf_data[0]);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_target_set_change_count(tp, change_count);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_general_rs_datalen(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim const smp_function_def_t *dp = smp_action_get_function_def(ap);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_response_frame_t *fp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim ASSERT(dp->sfd_function == SMP_FUNC_REPORT_GENERAL);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, (void **)&fp, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len >= SMP_RESP_MINLEN)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len -= SMP_RESP_MINLEN;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim else
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len &= ~3;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (fp->srf_response_len == 0)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 24));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 4 * (fp->srf_response_len)));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_manufacturer_info_rs_datalen(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim const smp_function_def_t *dp = smp_action_get_function_def(ap);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_response_frame_t *fp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim ASSERT(dp->sfd_function == SMP_FUNC_REPORT_MANUFACTURER_INFO);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, (void **)&fp, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len >= SMP_RESP_MINLEN)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len -= SMP_RESP_MINLEN;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim else
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len &= ~3;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (fp->srf_response_len == 0)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 56));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 4 * (fp->srf_response_len)));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_self_config_status_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_self_config_status_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_zone_perm_table_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_zone_perm_table_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister/*ARGSUSED*/
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollisterstatic size_t
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollistersas2_report_zone_mgr_password_rq_len(size_t user, smp_target_t *tp)
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister{
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister if (user != 0) {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) smp_set_errno(ESMP_RANGE);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return (0);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister }
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return (SMP_REQ_MINLEN + sizeof (smp_report_zone_perm_table_req_t));
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister}
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_broadcast_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_broadcast_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_discover_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_discover_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_discover_rs_datalen(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim const smp_function_def_t *dp = smp_action_get_function_def(ap);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_response_frame_t *fp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim ASSERT(dp->sfd_function == SMP_FUNC_DISCOVER);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, (void **)&fp, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len >= SMP_RESP_MINLEN)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len -= SMP_RESP_MINLEN;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim else
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len &= ~3;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (fp->srf_response_len == 0)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 48));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 4 * (fp->srf_response_len)));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_phy_error_log_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_phy_error_log_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_phy_error_log_rs_datalen(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim const smp_function_def_t *dp = smp_action_get_function_def(ap);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_response_frame_t *fp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim ASSERT(dp->sfd_function == SMP_FUNC_REPORT_PHY_ERROR_LOG);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, (void **)&fp, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len >= SMP_RESP_MINLEN)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len -= SMP_RESP_MINLEN;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim else
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len &= ~3;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (fp->srf_response_len == 0)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, sizeof (smp_report_phy_error_log_resp_t)));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 4 * (fp->srf_response_len)));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_phy_sata_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_phy_sata_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_phy_sata_rs_datalen(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim const smp_function_def_t *dp = smp_action_get_function_def(ap);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_response_frame_t *fp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim ASSERT(dp->sfd_function == SMP_FUNC_REPORT_PHY_SATA);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, (void **)&fp, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len >= SMP_RESP_MINLEN)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len -= SMP_RESP_MINLEN;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim else
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len &= ~3;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (fp->srf_response_len == 0)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 52));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 4 * (fp->srf_response_len)));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_route_info_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_route_info_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_route_info_rs_datalen(smp_action_t *ap, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim const smp_function_def_t *dp = smp_action_get_function_def(ap);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_response_frame_t *fp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t len;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim ASSERT(dp->sfd_function == SMP_FUNC_REPORT_ROUTE_INFO);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim smp_action_get_response_frame(ap, (void **)&fp, &len);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (len >= SMP_RESP_MINLEN)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len -= SMP_RESP_MINLEN;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim else
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim len &= ~3;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (fp->srf_response_len == 0)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, sizeof (smp_report_route_info_resp_t)));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (MIN(len, 4 * (fp->srf_response_len)));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_phy_event_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_phy_event_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_discover_list_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_discover_list_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_phy_event_list_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_phy_event_list_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_report_exp_route_table_list_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_exp_route_table_list_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_config_general_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_config_general_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_enable_disable_zoning_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_enable_disable_zoning_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_zoned_broadcast_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t descrsz;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user == 0 || user > 1008) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim descrsz = P2ROUNDUP((user - 1), 4);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + descrsz + sizeof (smp_zoned_broadcast_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_zone_lock_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_zone_lock_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_zone_activate_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_zone_activate_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_zone_unlock_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_zone_unlock_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_config_zone_manager_password_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_config_zone_manager_password_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_config_zone_phy_info_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user == 0 || user > 252) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_config_zone_phy_info_req_t) +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (user - 1) * sizeof (smp_zone_phy_config_descr_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_config_zone_perm_table_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim uint_t cap = smp_target_getcap(tp);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim size_t maxdescr, descrsz;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_ZG_256)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim descrsz = sizeof (smp_zone_perm_descr256_t);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim else
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim descrsz = sizeof (smp_zone_perm_descr128_t);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim maxdescr = (1020 - sizeof (smp_config_zone_perm_table_req_t)) / descrsz;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user == 0 || user > maxdescr) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_config_zone_perm_table_req_t) - 1 +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim user * descrsz);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_config_route_info_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_config_route_info_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_phy_control_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_phy_control_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_phy_test_function_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user != 0) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_phy_test_function_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic size_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsas2_config_phy_event_rq_len(size_t user, smp_target_t *tp)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (user == 0 || user > 126) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (void) smp_set_errno(ESMP_RANGE);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_config_phy_event_req_t) +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim (user - 1) * sizeof (smp_phy_event_config_descr_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsmp_function_def_t sas2_functions[] = {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_GENERAL,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_report_general_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_MANUFACTURER_INFO,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_report_manufacturer_info_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_SELF_CONFIG_STATUS,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_report_self_config_status_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_ZONE_PERM_TABLE,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_report_zone_perm_table_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_ZONE_MANAGER_PASSWORD,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_PROVIDES_CHANGE_COUNT,
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister .sfd_rq_len = sas2_report_zone_mgr_password_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_BROADCAST,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_report_broadcast_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_DISCOVER,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_discover_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_discover_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_PHY_ERROR_LOG,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_report_phy_error_log_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_report_phy_error_log_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_PHY_SATA,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_report_phy_sata_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_report_phy_sata_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_ROUTE_INFO,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_report_route_info_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_report_route_info_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_PHY_EVENT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_report_phy_event_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_DISCOVER_LIST,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_discover_list_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_PHY_EVENT_LIST,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_report_phy_event_list_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_REPORT_EXP_ROUTE_TABLE_LIST,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_PROVIDES_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_report_exp_route_table_list_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_CONFIG_GENERAL,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_config_general_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_ENABLE_DISABLE_ZONING,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_enable_disable_zoning_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_ZONED_BROADCAST,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_zoned_broadcast_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_ZONE_LOCK,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_READ | SMP_FD_F_WRITE |
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_zone_lock_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_ZONE_ACTIVATE,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_zone_activate_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_ZONE_UNLOCK,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_zone_unlock_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_CONFIG_ZONE_MANAGER_PASSWORD,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_config_zone_manager_password_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_CONFIG_ZONE_PHY_INFO,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_config_zone_phy_info_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_CONFIG_ZONE_PERM_TABLE,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_config_zone_perm_table_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_CONFIG_ROUTE_INFO,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_config_route_info_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_PHY_CONTROL,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_phy_control_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_PHY_TEST_FUNCTION,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_phy_test_function_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = SMP_FUNC_CONFIG_PHY_EVENT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_flags = SMP_FD_F_WRITE | SMP_FD_F_NEEDS_CHANGE_COUNT,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_len = sas2_config_phy_event_rq_len,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_dataoff = sas2_rq_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rq_setframe = sas2_rq_setframe,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_datalen = sas2_rs_datalen,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_dataoff = sas2_rs_dataoff,
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_rs_getparams = sas2_rs_getparams
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim},
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim .sfd_function = -1
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim};
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * Returns the number of bytes in the request frame, including the header
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * and footer, for the given function and capabilities. Presently the only
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * relevant capability is long-request, which in some cases increases the
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * size of the request from the SAS-1 spec to that found in SAS-2.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim *
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * Variably-sized request frames have no default size; we return 0 in that
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * case, which will often be interpreted by the caller as an error although
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * in general it is not.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim */
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsize_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsmp_default_request_len(uint_t cap, smp_function_t fn)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim switch (fn) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_GENERAL:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_MANUFACTURER_INFO:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_FUNC_REPORT_ZONE_MANAGER_PASSWORD:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return (SMP_REQ_MINLEN +
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister sizeof (smp_report_zone_mgr_password_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_SELF_CONFIG_STATUS:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_self_config_status_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_ZONE_PERM_TABLE:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_zone_perm_table_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_BROADCAST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_broadcast_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_DISCOVER:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_discover_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_PHY_ERROR_LOG:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_phy_error_log_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_PHY_SATA:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_phy_sata_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_ROUTE_INFO:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_report_route_info_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_PHY_EVENT:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_phy_event_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_DISCOVER_LIST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_discover_list_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_PHY_EVENT_LIST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_phy_event_list_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_EXP_ROUTE_TABLE_LIST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_exp_route_table_list_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_GENERAL:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_config_general_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ENABLE_DISABLE_ZONING:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_enable_disable_zoning_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ZONE_LOCK:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_zone_lock_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ZONE_ACTIVATE:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_zone_activate_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ZONE_UNLOCK:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_zone_unlock_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_ZONE_MANAGER_PASSWORD:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim if (cap & SMP_TARGET_C_LONG_RESP)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_config_zone_manager_password_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_ROUTE_INFO:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_config_route_info_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_PHY_CONTROL:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_phy_control_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_PHY_TEST_FUNCTION:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_REQ_MINLEN + sizeof (smp_phy_test_function_req_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ZONED_BROADCAST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_ZONE_PHY_INFO:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_ZONE_PERM_TABLE:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_PHY_EVENT:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim default:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * This is slightly different - return the length in bytes, including the
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * header and footer, to be assumed for the response frame type if the
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * length field is zero. Since the length field will not be zero unless the
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * long response bit is clear or the target is buggy, we always assume that
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * the caller wants the size of the v1 frame.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim */
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim/*ARGSUSED*/
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsize_t
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimsmp_default_response_len(uint_t cap, smp_function_t fn)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim{
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim switch (fn) {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_SELF_CONFIG_STATUS:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_ZONE_PERM_TABLE:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_BROADCAST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_PHY_EVENT:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_DISCOVER_LIST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_PHY_EVENT_LIST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_EXP_ROUTE_TABLE_LIST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_GENERAL:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ENABLE_DISABLE_ZONING:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ZONED_BROADCAST:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ZONE_LOCK:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ZONE_ACTIVATE:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_ZONE_UNLOCK:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_ZONE_MANAGER_PASSWORD:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_ZONE_PHY_INFO:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_ZONE_PERM_TABLE:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_ROUTE_INFO:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_PHY_CONTROL:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_PHY_TEST_FUNCTION:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_CONFIG_PHY_EVENT:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_RESP_MINLEN);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_FUNC_REPORT_ZONE_MANAGER_PASSWORD:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return (SMP_RESP_MINLEN +
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister sizeof (smp_report_zone_mgr_password_resp_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_GENERAL:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_RESP_MINLEN + 24);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_MANUFACTURER_INFO:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_RESP_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_manufacturer_info_resp_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_DISCOVER:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_RESP_MINLEN + 48);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_PHY_ERROR_LOG:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_RESP_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_phy_error_log_resp_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_PHY_SATA:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_RESP_MINLEN + 52);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim case SMP_FUNC_REPORT_ROUTE_INFO:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (SMP_RESP_MINLEN +
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim sizeof (smp_report_route_info_resp_t));
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim default:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim }
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim}