1230557Sjimharris/*- 2230557Sjimharris * This file is provided under a dual BSD/GPLv2 license. When using or 3230557Sjimharris * redistributing this file, you may do so under either license. 4230557Sjimharris * 5230557Sjimharris * GPL LICENSE SUMMARY 6230557Sjimharris * 7230557Sjimharris * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 8230557Sjimharris * 9230557Sjimharris * This program is free software; you can redistribute it and/or modify 10230557Sjimharris * it under the terms of version 2 of the GNU General Public License as 11230557Sjimharris * published by the Free Software Foundation. 12230557Sjimharris * 13230557Sjimharris * This program is distributed in the hope that it will be useful, but 14230557Sjimharris * WITHOUT ANY WARRANTY; without even the implied warranty of 15230557Sjimharris * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16230557Sjimharris * General Public License for more details. 17230557Sjimharris * 18230557Sjimharris * You should have received a copy of the GNU General Public License 19230557Sjimharris * along with this program; if not, write to the Free Software 20230557Sjimharris * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 21230557Sjimharris * The full GNU General Public License is included in this distribution 22230557Sjimharris * in the file called LICENSE.GPL. 23230557Sjimharris * 24230557Sjimharris * BSD LICENSE 25230557Sjimharris * 26230557Sjimharris * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 27230557Sjimharris * All rights reserved. 28230557Sjimharris * 29230557Sjimharris * Redistribution and use in source and binary forms, with or without 30230557Sjimharris * modification, are permitted provided that the following conditions 31230557Sjimharris * are met: 32230557Sjimharris * 33230557Sjimharris * * Redistributions of source code must retain the above copyright 34230557Sjimharris * notice, this list of conditions and the following disclaimer. 35230557Sjimharris * * Redistributions in binary form must reproduce the above copyright 36230557Sjimharris * notice, this list of conditions and the following disclaimer in 37230557Sjimharris * the documentation and/or other materials provided with the 38230557Sjimharris * distribution. 39230557Sjimharris * 40230557Sjimharris * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 41230557Sjimharris * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 42230557Sjimharris * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 43230557Sjimharris * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 44230557Sjimharris * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 45230557Sjimharris * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 46230557Sjimharris * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 47230557Sjimharris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 48230557Sjimharris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 49230557Sjimharris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 50230557Sjimharris * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 51230557Sjimharris * 52230557Sjimharris * $FreeBSD$ 53230557Sjimharris */ 54230557Sjimharris#ifndef _SCIF_SAS_SMP_REMOTE_DEVICE_H_ 55230557Sjimharris#define _SCIF_SAS_SMP_REMOTE_DEVICE_H_ 56230557Sjimharris 57230557Sjimharris#ifdef __cplusplus 58230557Sjimharrisextern "C" { 59230557Sjimharris#endif // __cplusplus 60230557Sjimharris 61230557Sjimharris 62230557Sjimharris#include <dev/isci/scil/sci_fast_list.h> 63230557Sjimharris#include <dev/isci/scil/scif_sas_smp_phy.h> 64230557Sjimharris 65230557Sjimharris/** 66230557Sjimharris * @file 67230557Sjimharris * 68230557Sjimharris * @brief This file contains the protected interface structures, constants, 69230557Sjimharris * and methods for the SCIF_SAS_SMP_REMOTE_DEVICE object. 70230557Sjimharris */ 71230557Sjimharris 72230557Sjimharrisstruct SCIF_SAS_CONTROLLER; 73230557Sjimharrisstruct SCIF_SAS_REMOTE_DEVICE; 74230557Sjimharrisstruct SCIF_SAS_INTERNAL_IO_REQUEST; 75230557Sjimharrisstruct SCIF_SAS_REQUEST; 76230557Sjimharrisstruct SCIF_SAS_SMP_PHY; 77230557Sjimharris 78230557Sjimharris#define SMP_REQUEST_RETRY_WAIT_DURATION 20 79230557Sjimharris#define SMP_SPINUP_HOLD_RELEASE_WAIT_DURATION 100 80230557Sjimharris 81230557Sjimharris/** 82230557Sjimharris * @name SCIF_SAS_SMP_REMOTE_DEVICE_ACTIVITY_CODES 83230557Sjimharris * 84230557Sjimharris * These constants depict the various SMP remote device activities. 85230557Sjimharris */ 86230557Sjimharris/*@{*/ 87230557Sjimharris#define NOT_IN_SMP_ACTIVITY 0xff 88230557Sjimharris#define SCIF_SAS_SMP_REMOTE_DEVICE_ACTIVITY_NONE 0x0 89230557Sjimharris#define SCIF_SAS_SMP_REMOTE_DEVICE_ACTIVITY_DISCOVER 0x1 90230557Sjimharris#define SCIF_SAS_SMP_REMOTE_DEVICE_ACTIVITY_TARGET_RESET 0x2 91230557Sjimharris#define SCIF_SAS_SMP_REMOTE_DEVICE_ACTIVITY_SATA_SPINUP_HOLD_RELEASE 0x3 92230557Sjimharris#define SCIF_SAS_SMP_REMOTE_DEVICE_ACTIVITY_CONFIG_ROUTE_TABLE 0x4 93230557Sjimharris#define SCIF_SAS_SMP_REMOTE_DEVICE_ACTIVITY_CLEAN_ROUTE_TABLE 0x5 94230557Sjimharris#define SCIF_SAS_SMP_REMOTE_DEVICE_ACTIVITY_CLEAR_AFFILIATION 0x6 95230557Sjimharris/*@}*/ 96230557Sjimharris 97230557Sjimharris 98230557Sjimharris 99230557Sjimharris/** 100230557Sjimharris * @name SCIF_SAS_CONFIG_ROUTE_TABLE_OPTION_CODES 101230557Sjimharris * 102230557Sjimharris * These constants depict the various configure route table options. 103230557Sjimharris */ 104230557Sjimharris/*@{*/ 105230557Sjimharris#define SCIF_SAS_CONFIG_ROUTE_TABLE_LOWEST_PHY_ONLY 0 106230557Sjimharris#define SCIF_SAS_CONFIG_ROUTE_TABLE_MIDDLE_PHY_ONLY 1 107230557Sjimharris#define SCIF_SAS_CONFIG_ROUTE_TABLE_HIGHEST_PHY_ONLY 2 108230557Sjimharris#define SCIF_SAS_CONFIG_ROUTE_TABLE_ALL_PHYS 3 109230557Sjimharris/*@}*/ 110230557Sjimharris 111230557Sjimharris/** 112230557Sjimharris * @struct SCIF_SAS_SMP_REMOTE_DEVICE 113230557Sjimharris * 114230557Sjimharris * @brief The SCIF_SAS_SMP_REMOTE_DEVICE stores data for smp remote devices 115230557Sjimharris * (expanders) discovering attached targets. 116230557Sjimharris * 117230557Sjimharris */ 118230557Sjimharristypedef struct SCIF_SAS_SMP_REMOTE_DEVICE 119230557Sjimharris{ 120230557Sjimharris /** 121230557Sjimharris * This field stores the current SMP request function in the discovering 122230557Sjimharris * sequence. 123230557Sjimharris */ 124230557Sjimharris U32 current_smp_request; 125230557Sjimharris 126230557Sjimharris /** 127230557Sjimharris * This field indicates a smp device is either in the middle of normal discover 128230557Sjimharris * process or in the middle of resetting a expander attahced remote device. 129230557Sjimharris */ 130230557Sjimharris U8 current_activity; 131230557Sjimharris 132230557Sjimharris /** 133230557Sjimharris * This field stores the current expander phy index for sending out SMP 134230557Sjimharris * DISCOVER request. 135230557Sjimharris */ 136230557Sjimharris U8 current_activity_phy_index; 137230557Sjimharris 138230557Sjimharris /** 139230557Sjimharris * This field stores the current route index to config route table for 140230557Sjimharris * a phy. 141230557Sjimharris */ 142230557Sjimharris U16 curr_config_route_index; 143230557Sjimharris 144230557Sjimharris /** 145230557Sjimharris * This field indicates whether a route table of an expander has been cleaned 146230557Sjimharris * since a DISCOVER process starts. 147230557Sjimharris */ 148230557Sjimharris BOOL is_route_table_cleaned; 149230557Sjimharris 150230557Sjimharris /** 151230557Sjimharris * This field stores the smp phy whose route entries are edited by sending 152230557Sjimharris * CONFIG ROUTE INFO commands. 153230557Sjimharris */ 154230557Sjimharris struct SCIF_SAS_SMP_PHY * config_route_smp_phy_anchor; 155230557Sjimharris 156230557Sjimharris /* 157230557Sjimharris * This field stores the current smp phy on a destination device's smp phy list whose 158230557Sjimharris * attached device's sas address is to be edited into this smp device's route table. 159230557Sjimharris * When one config route info response is processed, we can find the next smp phy to edit 160230557Sjimharris * using this field's value. 161230557Sjimharris */ 162230557Sjimharris struct SCIF_SAS_SMP_PHY * curr_config_route_destination_smp_phy; 163230557Sjimharris 164230557Sjimharris /* 165230557Sjimharris * This field stores the current smp phy to which a PHY CONTROL (clear affiliation) 166230557Sjimharris * command is sent out. 167230557Sjimharris */ 168230557Sjimharris struct SCIF_SAS_SMP_PHY * curr_clear_affiliation_phy; 169230557Sjimharris 170230557Sjimharris /** 171230557Sjimharris * This field is to indicate a smp activity for this smp device is 172230557Sjimharris * to be started (not yet). The scheduled activity could be Discover or Config 173230557Sjimharris * Route Table. 174230557Sjimharris */ 175230557Sjimharris U8 scheduled_activity; 176230557Sjimharris 177230557Sjimharris /** 178230557Sjimharris * This timer is used for waiting before retrying a smp request, or before 179230557Sjimharris * sending Discover request after Phy Control during Target Reset. 180230557Sjimharris */ 181230557Sjimharris void * smp_activity_timer; 182230557Sjimharris 183230557Sjimharris /** 184230557Sjimharris * This field save the retry count for internal smp request. Since when 185230557Sjimharris * an internal smp request gets retried, it has been destructed already. 186230557Sjimharris */ 187230557Sjimharris U8 io_retry_count; 188230557Sjimharris 189230557Sjimharris /** 190230557Sjimharris * This field stores the number of phys for expander device found by decoding 191230557Sjimharris * the SMP REPORT GENERAL response. 192230557Sjimharris */ 193230557Sjimharris U8 number_of_phys; 194230557Sjimharris 195230557Sjimharris /** 196230557Sjimharris * This field indicates the maximum number of expander route indexes per phy for 197230557Sjimharris * this expander device. 198230557Sjimharris */ 199230557Sjimharris U16 expander_route_indexes; 200230557Sjimharris 201230557Sjimharris /** 202230557Sjimharris * This field indicates whether an expander device supports table-to-table 203230557Sjimharris * connection. 204230557Sjimharris */ 205230557Sjimharris BOOL is_table_to_table_supported; 206230557Sjimharris 207230557Sjimharris /** 208230557Sjimharris * This field indicates whether an expander device is externally configurable. 209230557Sjimharris * If it is, it is not self-configuring and is not able to config others. 210230557Sjimharris */ 211230557Sjimharris BOOL is_externally_configurable; 212230557Sjimharris 213230557Sjimharris /** 214230557Sjimharris * This field indicates whether an expander device is able to config others. 215230557Sjimharris */ 216230557Sjimharris BOOL is_able_to_config_others; 217230557Sjimharris 218230557Sjimharris /** 219230557Sjimharris * This field contains the list of all smp phys that connect to another smp phy. 220230557Sjimharris */ 221230557Sjimharris SCI_FAST_LIST_T smp_phy_list; 222230557Sjimharris 223230557Sjimharris}SCIF_SAS_SMP_REMOTE_DEVICE_T; 224230557Sjimharris 225230557Sjimharrisvoid scif_sas_smp_remote_device_clear( 226230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 227230557Sjimharris); 228230557Sjimharris 229230557Sjimharrisvoid scif_sas_smp_remote_device_construct( 230230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 231230557Sjimharris); 232230557Sjimharris 233230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_decode_smp_response( 234230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 235230557Sjimharris struct SCIF_SAS_REQUEST * fw_request, 236230557Sjimharris void * response_data, 237230557Sjimharris SCI_IO_STATUS completion_status 238230557Sjimharris); 239230557Sjimharris 240230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_decode_report_general_response( 241230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 242230557Sjimharris SMP_RESPONSE_T * smp_response 243230557Sjimharris); 244230557Sjimharris 245230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_decode_initial_discover_response( 246230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 247230557Sjimharris SMP_RESPONSE_T * smp_response 248230557Sjimharris); 249230557Sjimharris 250230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_decode_report_phy_sata_response( 251230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 252230557Sjimharris SMP_RESPONSE_T * smp_response 253230557Sjimharris); 254230557Sjimharris 255230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_decode_target_reset_phy_control_response( 256230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 257230557Sjimharris SMP_RESPONSE_T * smp_response 258230557Sjimharris); 259230557Sjimharris 260230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_decode_discover_phy_control_response( 261230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 262230557Sjimharris SMP_RESPONSE_T * smp_response 263230557Sjimharris); 264230557Sjimharris 265230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_decode_target_reset_discover_response( 266230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 267230557Sjimharris SMP_RESPONSE_T * smp_response 268230557Sjimharris); 269230557Sjimharris 270230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_decode_spinup_hold_release_discover_response( 271230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 272230557Sjimharris SMP_RESPONSE_T * smp_response 273230557Sjimharris); 274230557Sjimharris 275230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_decode_config_route_info_response( 276230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 277230557Sjimharris SMP_RESPONSE_T * smp_response 278230557Sjimharris); 279230557Sjimharris 280230557Sjimharrisvoid scif_sas_smp_remote_device_start_discover( 281230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 282230557Sjimharris); 283230557Sjimharris 284230557Sjimharrisvoid scif_sas_smp_remote_device_continue_discover( 285230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 286230557Sjimharris); 287230557Sjimharris 288230557Sjimharrisvoid scif_sas_smp_remote_device_finish_initial_discover( 289230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 290230557Sjimharris); 291230557Sjimharris 292230557Sjimharrisvoid scif_sas_smp_remote_device_finish_discover( 293230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 294230557Sjimharris); 295230557Sjimharris 296230557Sjimharrisvoid scif_sas_smp_remote_device_continue_target_reset( 297230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 298230557Sjimharris struct SCIF_SAS_REQUEST * fw_request 299230557Sjimharris); 300230557Sjimharris 301230557Sjimharrisvoid scif_sas_smp_remote_device_fail_discover( 302230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 303230557Sjimharris); 304230557Sjimharris 305230557Sjimharrisvoid scif_sas_smp_remote_device_fail_target_reset( 306230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 307230557Sjimharris struct SCIF_SAS_REQUEST * fw_request 308230557Sjimharris); 309230557Sjimharris 310230557Sjimharrisvoid scif_sas_smp_remote_device_continue_current_activity( 311230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 312230557Sjimharris struct SCIF_SAS_REQUEST * fw_request, 313230557Sjimharris SCI_STATUS status 314230557Sjimharris); 315230557Sjimharris 316230557Sjimharrisvoid scif_sas_smp_remote_device_target_reset_poll( 317230557Sjimharris struct SCIF_SAS_REQUEST * fw_request 318230557Sjimharris); 319230557Sjimharris 320230557Sjimharrisvoid scif_sas_smp_remote_device_sata_spinup_hold_release( 321230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 322230557Sjimharris); 323230557Sjimharris 324230557Sjimharrisvoid scif_sas_smp_remote_device_fail_target_spinup_hold_release( 325230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 326230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * target_device 327230557Sjimharris); 328230557Sjimharris 329230557Sjimharrisvoid scif_sas_smp_remote_device_retry_internal_io( 330230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 331230557Sjimharris U8 io_retry_count, 332230557Sjimharris U32 delay 333230557Sjimharris); 334230557Sjimharris 335230557SjimharrisBOOL scif_sas_smp_remote_device_is_in_activity( 336230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 337230557Sjimharris); 338230557Sjimharris 339230557SjimharrisSCIF_SAS_SMP_PHY_T * scif_sas_smp_remote_device_find_smp_phy_by_id( 340230557Sjimharris U8 phy_identifier, 341230557Sjimharris struct SCIF_SAS_SMP_REMOTE_DEVICE * smp_remote_device 342230557Sjimharris); 343230557Sjimharris 344230557Sjimharrisvoid scif_sas_smp_remote_device_removed( 345230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * this_device 346230557Sjimharris); 347230557Sjimharris 348230557Sjimharrisvoid scif_sas_smp_remote_device_terminated_request_handler( 349230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 350230557Sjimharris struct SCIF_SAS_REQUEST * fw_request 351230557Sjimharris); 352230557Sjimharris 353230557Sjimharrisvoid scif_sas_smp_remote_device_populate_smp_phy_list( 354230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 355230557Sjimharris); 356230557Sjimharris 357230557SjimharrisSCI_STATUS scif_sas_smp_remote_device_save_smp_phy_info( 358230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device, 359230557Sjimharris SMP_RESPONSE_DISCOVER_T * discover_response 360230557Sjimharris); 361230557Sjimharris 362230557Sjimharris#ifdef SCI_SMP_PHY_LIST_DEBUG_PRINT 363230557Sjimharrisvoid scif_sas_smp_remote_device_print_smp_phy_list( 364230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 365230557Sjimharris); 366230557Sjimharris#endif 367230557Sjimharris 368230557Sjimharrisvoid scif_sas_smp_remote_device_configure_upstream_expander_route_info( 369230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * this_device 370230557Sjimharris); 371230557Sjimharris 372230557Sjimharrisstruct SCIF_SAS_REMOTE_DEVICE * scif_sas_remote_device_find_upstream_expander( 373230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * this_device 374230557Sjimharris); 375230557Sjimharris 376230557Sjimharrisstruct SCIF_SAS_REMOTE_DEVICE * scif_sas_remote_device_find_downstream_expander( 377230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * this_device 378230557Sjimharris); 379230557Sjimharris 380230557SjimharrisBOOL scif_sas_smp_remote_device_do_config_route_info( 381230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * device_being_config, 382230557Sjimharris struct SCIF_SAS_SMP_PHY * destination_smp_phy 383230557Sjimharris); 384230557Sjimharris 385230557Sjimharrisvoid scif_sas_smp_remote_device_configure_route_table( 386230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * device_being_config 387230557Sjimharris); 388230557Sjimharris 389230557Sjimharrisvoid scif_sas_smp_remote_device_clean_route_table( 390230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 391230557Sjimharris); 392230557Sjimharris 393230557Sjimharrisvoid scif_sas_smp_remote_device_clean_route_table_entry( 394230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 395230557Sjimharris); 396230557Sjimharris 397230557Sjimharrisvoid scif_sas_smp_remote_device_cancel_config_route_table_activity( 398230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 399230557Sjimharris); 400230557Sjimharris 401230557Sjimharrisvoid scif_sas_smp_remote_device_cancel_smp_activity( 402230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 403230557Sjimharris); 404230557Sjimharris 405230557SjimharrisU8 scif_sas_smp_remote_device_get_config_route_table_method( 406230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 407230557Sjimharris); 408230557Sjimharris 409230557Sjimharrisvoid scif_sas_smp_remote_device_start_clear_affiliation( 410230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 411230557Sjimharris); 412230557Sjimharris 413230557Sjimharrisvoid scif_sas_smp_remote_device_continue_clear_affiliation( 414230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 415230557Sjimharris); 416230557Sjimharris 417230557Sjimharrisvoid scif_sas_smp_remote_device_finish_clear_affiliation( 418230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * fw_device 419230557Sjimharris); 420230557Sjimharris 421230557Sjimharrisvoid scif_sas_smp_remote_device_start_target_reset( 422230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * expander_device, 423230557Sjimharris struct SCIF_SAS_REMOTE_DEVICE * target_device, 424230557Sjimharris struct SCIF_SAS_REQUEST * fw_request 425230557Sjimharris); 426230557Sjimharris 427230557Sjimharris#ifdef __cplusplus 428230557Sjimharris} 429230557Sjimharris#endif // __cplusplus 430230557Sjimharris 431230557Sjimharris#endif // _SCIF_SAS_SMP_REMOTE_DEVICE_H_ 432