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