ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * CDDL HEADER START
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 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * See the License for the specific language governing permissions
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * and limitations under the License.
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 * CDDL HEADER END
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
24f5a37652e188ebdcdd6da454511686935025dfRichard PALO * Copyright 2015 PALO, Richard
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kimstatic void fatal(int, const char *, ...) __NORETURN;
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Function accepted");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Unknown function");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Function failed");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Invalid request frame length");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Invalid expander change count");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Busy");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Incomplete descriptor list");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("PHY does not exist");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Index does not exist");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("PHY does not support SATA");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Unknown PHY operation");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Unknown PHY test function");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("PHY test in progress");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("PHY vacant");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Unknown PHY event source");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Unknown descriptor type");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Unknown PHY filter");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Affiliation violation");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Zone violation");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("No management access rights");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Unknown enable/disable zoning value");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Zone lock violation");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Not activated");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Zone group out of range");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("No physical presence");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Saving not supported");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Source zone group does not exist");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister return ("Disabled password not supported");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister char *smp_result_str = smp_get_result(result);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister fatal(-5, "Command failed: Unknown result (0x%x)",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister fatal(-5, "Command failed: %s", smp_result_str);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_action_get_response(ap, &result, (void **)&smp_resp, &smp_resp_len);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister if (close_on_fail && (result != SMP_RES_FUNCTION_ACCEPTED)) {
24f5a37652e188ebdcdd6da454511686935025dfRichard PALO/* ARGSUSED */
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollistersmp_handle_report_route_info(int argc, char *argv[])
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister uint16_t route_indexes = smp_target_get_exp_route_indexes(tp);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister uint8_t num_phys = smp_target_get_number_of_phys(tp);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister * Verify the expander supports the PHY-based expander route table
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister fatal(-6, "Expander does not support PHY-based route table\n");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister if (((int16_t)rt_idx_req == -1) && ((int8_t)phy_id_req == -1)) {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister } else if (((int16_t)rt_idx_req < 0) || (rt_idx_req >= route_indexes) ||
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister ((int8_t)phy_id_req < 0) || (phy_id_req >= num_phys)) {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister fatal(-1, "Invalid route index (%d) or PHY ID (%d)\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister "RT Idx", "PHY ID", "DIS", "Routed SASAddr");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_action_get_request(ap, (void **)&rp, NULL);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister rirp = (smp_report_route_info_resp_t *)smp_resp;
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister if (rirp->srrir_exp_route_entry_disabled == 0) {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("No enabled entries in the table.\n");
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollistersmp_phy_event_src_str(smp_phy_event_source_t src, boolean_t *peak_detector)
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_RUNNING_DISPARITY_ERROR_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_LOSS_OF_DWORD_SYNC_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_ELASTICITY_BUFFER_OVERFLOW_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Elasticity buffer overflow count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_RX_ADDR_FRAME_ERROR_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Received address frame error count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_TX_ABANDON_CLASS_OPEN_REJ_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Transmitted abandon-class OPEN_REJECT count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_RX_ABANDON_CLASS_OPEN_REJ_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Received abandon-class OPEN_REJECT count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_TX_RETRY_CLASS_OPEN_REJ_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Transmitted retry-class OPEN_REJECT count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_RX_RETRY_CLASS_OPEN_REJ_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Received retry-class OPEN_REJECT count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_RX_AIP_W_O_PARTIAL_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Received AIP (WAITING ON PARTIAL) count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Received AIP (WAITING ON CONNECTION) count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_PEAK_TX_PATHWAY_BLOCKED_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Peak transmitted pathway blocked count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Peak transmitted arbitration wait time";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_TX_SSP_FRAME_ERROR_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Transmitted SSP frame error count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_RX_SSP_FRAME_ERROR_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "Transmitted CREDIT_BLOCKED count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_SATA_FLOW_CTRL_BUF_OVERFLOW_COUNT:
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister src_str = "SATA flow control buffer overflow count";
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_PHY_EVENT_RX_SMP_FRAME_ERROR_COUNT:
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fatal(-1, "Usage: %s <device> <function> ...\n", argv[0]);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fatal(-1, "Usage: %s <device> <function> ...\n", argv[0]);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister "Usage: %s <device> 0x%x <phy identifier>\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_FUNC_REPORT_EXP_ROUTE_TABLE_LIST: {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister "Usage: %s <device> 0x%x <SAS Address Index>\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_FUNC_REPORT_ZONE_MANAGER_PASSWORD: {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister "Usage: %s <device> 0x%x <report type>\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister "Usage: %s <device> 0x%x "
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister "[0(no change) | 1(enable)| 2(disable)]\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister fatal(-1, "Usage: %s <device> 0x%x <bcast type>\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister "Usage: %s <device> 0x%x <exp_route_idx> "
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister "Usage: %s <device> 0x%x <phy identifier> "
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister " <phy operation>\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister fatal(-1, "Usage: %s <device> <function> ...\n", argv[0]);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister * If the arguments are invalid, this function will not return.
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fatal(-1, "libsmp initialization failed: %s", smp_errmsg());
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fatal(-2, "failed to open %s: %s", argv[1], smp_errmsg());
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister exp_change_count = smp_target_get_change_count(tp);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("\tSAS Address: %016llx\n", smp_target_addr(tp));
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("\tVendor/Product/Revision: %s/%s/%s\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_target_vendor(tp), smp_target_product(tp),
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("\tExp Vendor/ID/Rev: %s/%04x/%02x\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_target_component_vendor(tp), smp_target_component_id(tp),
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("\tExpander change count: 0x%04x\n", exp_change_count);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim fatal(-3, "failed to allocate action: %s", smp_errmsg());
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim dp->sdr_phy_identifier = strtoul(argv[3], NULL, 0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim rp->sedzr_enable_disable_zoning = strtoul(argv[3], NULL, 0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim rp->spcr_phy_identifier = strtoul(argv[3], NULL, 0);
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim rp->spcr_phy_operation = strtoul(argv[4], NULL, 0);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_FUNC_REPORT_EXP_ROUTE_TABLE_LIST: {
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SCSI_WRITE16(&rp->srertlr_starting_routed_sas_addr_index,
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_action_get_request(ap, (void **)&pelp, NULL);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister pelp->srpelr_phy_identifier = strtoul(argv[3], NULL, 0);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_action_get_request(ap, (void **)&rpep, NULL);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister rpep->srper_phy_identifier = strtoul(argv[3], NULL, 0);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_FUNC_REPORT_ZONE_MANAGER_PASSWORD: {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_action_get_request(ap, (void **)&rzmprp, NULL);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister rzmprp->srzmpr_rpt_type = strtoul(argv[3], NULL, 0);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_action_get_request(ap, (void **)&rbrp, NULL);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister rbrp->srbr_broadcast_type = strtoul(argv[3], NULL, 0);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_discover_resp_t *rp = (smp_discover_resp_t *)smp_resp;
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim SCSI_READ64(&rp->sdr_sas_addr), rp->sdr_phy_identifier);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_FUNC_REPORT_ZONE_MANAGER_PASSWORD: {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (smp_report_zone_mgr_password_resp_t *)smp_resp;
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("%s zone manager password: 0x", rpt_type);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister case SMP_FUNC_REPORT_EXP_ROUTE_TABLE_LIST: {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_report_exp_route_table_list_resp_t *rtlr =
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (smp_report_exp_route_table_list_resp_t *)smp_resp;
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_route_table_descr_t *descp = &rtlr->srertlr_descrs[0];
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("Expander change count: 0x%04x\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("Expander route table change count: 0x%04x\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister BE_16(rtlr->srertlr_route_table_change_count));
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("Zoning enabled: %s\n", yesorno);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("Configuring: %s\n", yesorno);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("Number of descriptors: %d\n", ndescrs);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister startnum = BE_16(rtlr->srertlr_first_routed_sas_addr_index);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("First/Last routed SAS address index: %d/%d\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister startnum, BE_16(rtlr->srertlr_last_routed_sas_addr_index));
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("Starting PHY identifier: %d\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister for (idx = 0; idx < ndescrs; idx++, descp++) {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("#%03d: Routed SAS addr: %016llx ",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister idx + startnum, BE_64(descp->srtd_routed_sas_addr));
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (smp_report_phy_error_log_resp_t *)smp_resp;
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("PHY error log for PHY %d:\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("\tInvalid DWORD count: %d\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("\tRunning disparity error count: %d\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister BE_32(pelr->srpelr_running_disparity_error_count));
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("\tLoss of DWORD sync count: %d\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("\tPHY reset problem count: %d\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister BE_32(pelr->srpelr_phy_reset_problem_count));
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("Number of PHY event descriptors: %d\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister for (idx = 0; idx < rper->srper_n_phy_event_descrs; idx++) {
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_phy_event_src_str(perd->sped_phy_event_source,
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister "threshold: %d\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister smp_broadcast_descr_t *bdp = &brp->srbr_descrs[0];
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("\tNumber of broadcast descriptors: %d\n",
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister bdp->sbd_broadcast_type, bdp->sbd_phy_identifier,
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister (void) printf("Response: (len %d)\n", smp_resp_len);
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister for (j = i; j < i + 8; j++)
d0698e0d179f97729cacdbc2f13446a6b0a3f22aDavid Hollister for (j = i; j < i + 8; j++)
ac88567a7a5bb7f01cf22cf366bc9d6203e24d7aHyon Kim return (0);