scic_sds_request.h revision 231134
1193323Sed/*-
2193323Sed * This file is provided under a dual BSD/GPLv2 license.  When using or
3193323Sed * redistributing this file, you may do so under either license.
4193323Sed *
5193323Sed * GPL LICENSE SUMMARY
6193323Sed *
7193323Sed * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
8193323Sed *
9193323Sed * This program is free software; you can redistribute it and/or modify
10193323Sed * it under the terms of version 2 of the GNU General Public License as
11193323Sed * published by the Free Software Foundation.
12193323Sed *
13193323Sed * This program is distributed in the hope that it will be useful, but
14193323Sed * WITHOUT ANY WARRANTY; without even the implied warranty of
15193323Sed * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16193323Sed * General Public License for more details.
17193323Sed *
18193323Sed * You should have received a copy of the GNU General Public License
19193323Sed * along with this program; if not, write to the Free Software
20193323Sed * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
21193323Sed * The full GNU General Public License is included in this distribution
22193323Sed * in the file called LICENSE.GPL.
23193323Sed *
24193323Sed * BSD LICENSE
25193323Sed *
26193323Sed * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
27193323Sed * All rights reserved.
28193323Sed *
29193323Sed * Redistribution and use in source and binary forms, with or without
30193323Sed * modification, are permitted provided that the following conditions
31193323Sed * are met:
32193323Sed *
33193323Sed *   * Redistributions of source code must retain the above copyright
34193323Sed *     notice, this list of conditions and the following disclaimer.
35198892Srdivacky *   * Redistributions in binary form must reproduce the above copyright
36193323Sed *     notice, this list of conditions and the following disclaimer in
37193323Sed *     the documentation and/or other materials provided with the
38193323Sed *     distribution.
39193323Sed *
40193323Sed * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
41193323Sed * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
42193323Sed * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
43193323Sed * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
44193323Sed * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45193323Sed * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
46193323Sed * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
47193323Sed * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
48193323Sed * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
49193323Sed * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
50193323Sed * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
51193323Sed *
52193323Sed * $FreeBSD$
53193323Sed */
54193323Sed#ifndef _SCIC_SDS_IO_REQUEST_H_
55193323Sed#define _SCIC_SDS_IO_REQUEST_H_
56193323Sed
57193323Sed/**
58193323Sed * @file
59193323Sed *
60193323Sed * @brief This file contains the structures, constants and prototypes for the
61193323Sed *        SCIC_SDS_IO_REQUEST object.
62193323Sed */
63193323Sed
64193323Sed#ifdef __cplusplus
65193323Sedextern "C" {
66193323Sed#endif // __cplusplus
67193323Sed
68193323Sed#include <dev/isci/scil/scic_io_request.h>
69193323Sed
70193323Sed#include <dev/isci/scil/sci_base_request.h>
71193323Sed#include <dev/isci/scil/sci_base_state_machine_logger.h>
72193323Sed#include <dev/isci/scil/scu_task_context.h>
73193323Sed#include <dev/isci/scil/intel_sas.h>
74193323Sed
75193323Sedstruct SCIC_SDS_CONTROLLER;
76193323Sedstruct SCIC_SDS_REMOTE_DEVICE;
77193323Sedstruct SCIC_SDS_IO_REQUEST_STATE_HANDLER;
78193323Sed
79193323Sed/**
80193323Sed * @enum _SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATES
81193323Sed *
82193323Sed * @brief This enumeration depicts all of the substates for a task
83193323Sed *        management request to be performed in the STARTED super-state.
84193323Sed */
85193323Sedtypedef enum _SCIC_SDS_RAW_REQUEST_STARTED_TASK_MGMT_SUBSTATES
86193323Sed{
87193323Sed   /**
88193323Sed    * The AWAIT_TC_COMPLETION sub-state indicates that the started raw
89193323Sed    * task management request is waiting for the transmission of the
90193323Sed    * initial frame (i.e. command, task, etc.).
91193323Sed    */
92193323Sed   SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_COMPLETION,
93193323Sed
94193323Sed   /**
95193323Sed    * This sub-state indicates that the started task management request
96193323Sed    * is waiting for the reception of an unsolicited frame
97193323Sed    * (i.e. response IU).
98193323Sed    */
99193323Sed   SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_RESPONSE,
100193323Sed
101193323Sed   SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_MAX_SUBSTATES
102193323Sed
103193323Sed} SCIC_SDS_RAW_REQUEST_STARTED_TASK_MGMT_SUBSTATES;
104193323Sed
105193323Sed
106193323Sed/**
107193323Sed * @enum _SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATES
108193323Sed *
109198090Srdivacky * @brief This enumeration depicts all of the substates for a SMP
110198090Srdivacky *        request to be performed in the STARTED super-state.
111198090Srdivacky */
112193323Sedtypedef enum _SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATES
113193323Sed{
114193323Sed   /**
115193323Sed    * This sub-state indicates that the started task management request
116193323Sed    * is waiting for the reception of an unsolicited frame
117193323Sed    * (i.e. response IU).
118193323Sed    */
119193323Sed   SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_RESPONSE,
120193323Sed
121193323Sed   /**
122193323Sed    * The AWAIT_TC_COMPLETION sub-state indicates that the started SMP request is
123193323Sed    * waiting for the transmission of the initial frame (i.e. command, task, etc.).
124193323Sed    */
125193323Sed   SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_TC_COMPLETION,
126193323Sed
127193323Sed   SCIC_SDS_SMP_REQUEST_STARTED_MAX_SUBSTATES
128193323Sed
129193323Sed} SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATES;
130193323Sed
131193323Sed/**
132193323Sed * @struct SCIC_SDS_IO_REQUEST
133193323Sed *
134193323Sed * @brief This structure contains or references all of the data necessary
135193323Sed *        to process a task management or normal IO request.
136198090Srdivacky */
137193323Sedtypedef struct SCIC_SDS_REQUEST
138193323Sed{
139193323Sed   /**
140193323Sed    * This field indictes the parent object of the request.
141193323Sed    */
142193323Sed   SCI_BASE_REQUEST_T parent;
143193323Sed
144193323Sed   void *user_request;
145193323Sed
146193323Sed   /**
147198090Srdivacky    * This field simply points to the controller to which this IO request
148198090Srdivacky    * is associated.
149193323Sed    */
150193323Sed   struct SCIC_SDS_CONTROLLER    *owning_controller;
151193323Sed
152193323Sed   /**
153193323Sed    * This field simply points to the remote device to which this IO request
154193323Sed    * is associated.
155193323Sed    */
156193323Sed   struct SCIC_SDS_REMOTE_DEVICE *target_device;
157193323Sed
158193323Sed   /**
159193323Sed    * This field is utilized to determine if the SCI user is managing
160193323Sed    * the IO tag for this request or if the core is managing it.
161193323Sed    */
162193323Sed   BOOL was_tag_assigned_by_user;
163193323Sed
164193323Sed   /**
165193323Sed    * This field indicates the IO tag for this request.  The IO tag is
166193323Sed    * comprised of the task_index and a sequence count. The sequence count
167193323Sed    * is utilized to help identify tasks from one life to another.
168193323Sed    */
169193323Sed   U16 io_tag;
170193323Sed
171193323Sed   /**
172193323Sed   * This field specifies the sat protocol being utilized for this
173193323Sed   * IO request, such as SAT_PROTOCOL_PIO_DATA_IN, SAT_PROTOCOL_FPDMA etc.
174193323Sed   */
175193323Sed   U8 sat_protocol;
176193323Sed
177193323Sed   /**
178193323Sed    * This field specifies the protocol being utilized for this
179193323Sed    * IO request.
180193323Sed    */
181193323Sed   SCIC_TRANSPORT_PROTOCOL protocol;
182193323Sed
183193323Sed   /**
184193323Sed    * This field indicates the completion status taken from the SCUs
185193323Sed    * completion code.  It indicates the completion result for the SCU hardware.
186193323Sed    */
187193323Sed   U32 scu_status;
188193323Sed
189193323Sed   /**
190193323Sed    * This field indicates the completion status returned to the SCI user.  It
191193323Sed    * indicates the users view of the io request completion.
192193323Sed    */
193193323Sed   U32 sci_status;
194193323Sed
195193323Sed   /**
196193323Sed    * This field contains the value to be utilized when posting (e.g. Post_TC,
197193323Sed    * Post_TC_Abort) this request to the silicon.
198193323Sed    */
199193323Sed   U32 post_context;
200193323Sed
201193323Sed   void                   *command_buffer;
202193323Sed   void                   *response_buffer;
203193323Sed   SCU_TASK_CONTEXT_T     *task_context_buffer;
204193323Sed   SCU_SGL_ELEMENT_PAIR_T *sgl_element_pair_buffer;
205193323Sed
206193323Sed   /**
207193323Sed    * This field indicates if this request is a task management request or
208193323Sed    * normal IO request.
209193323Sed    */
210193323Sed   BOOL is_task_management_request;
211193323Sed
212193323Sed   /**
213193323Sed    * This field indicates that this request contains an initialized started
214193323Sed    * substate machine.
215193323Sed    */
216193323Sed   BOOL has_started_substate_machine;
217193323Sed
218193323Sed   /**
219193323Sed    * This field is a pointer to the stored rx frame data.  It is used in STP
220193323Sed    * internal requests and SMP response frames.  If this field is non-NULL the
221193323Sed    * saved frame must be released on IO request completion.
222193323Sed    *
223193323Sed    * @todo In the future do we want to keep a list of RX frame buffers?
224198090Srdivacky    */
225193323Sed   U32 saved_rx_frame_index;
226193323Sed
227193323Sed   /**
228198090Srdivacky    * This field specifies the data necessary to manage the sub-state
229198090Srdivacky    * machine executed while in the SCI_BASE_REQUEST_STATE_STARTED state.
230198090Srdivacky    */
231193323Sed   SCI_BASE_STATE_MACHINE_T started_substate_machine;
232198090Srdivacky
233198090Srdivacky   /**
234198090Srdivacky    * This field specifies the current state handlers in place for this
235198090Srdivacky    * IO Request object.  This field is updated each time the request
236198090Srdivacky    * changes state.
237198090Srdivacky    */
238198090Srdivacky   struct SCIC_SDS_IO_REQUEST_STATE_HANDLER *state_handlers;
239198090Srdivacky
240198090Srdivacky   #ifdef SCI_LOGGING
241198090Srdivacky   /**
242198090Srdivacky    * This field is the observer of the started subsate machine
243198090Srdivacky    */
244198090Srdivacky   SCI_BASE_STATE_MACHINE_LOGGER_T started_substate_machine_logger;
245198090Srdivacky   #endif
246198090Srdivacky
247198090Srdivacky   /**
248198090Srdivacky    * This field in the recorded device sequence for the io request.  This is
249198090Srdivacky    * recorded during the build operation and is compared in the start
250198090Srdivacky    * operation.  If the sequence is different then there was a change of
251193323Sed    * devices from the build to start operations.
252193323Sed    */
253193323Sed   U8  device_sequence;
254193323Sed
255198090Srdivacky} SCIC_SDS_REQUEST_T;
256198090Srdivacky
257198090Srdivacky
258198090Srdivackytypedef SCI_STATUS (*SCIC_SDS_IO_REQUEST_FRAME_HANDLER_T)(
259193323Sed                         SCIC_SDS_REQUEST_T * this_request,
260198090Srdivacky                         U32                  frame_index);
261193323Sed
262193323Sedtypedef SCI_STATUS (*SCIC_SDS_IO_REQUEST_EVENT_HANDLER_T)(
263193323Sed                         SCIC_SDS_REQUEST_T * this_request,
264193323Sed                         U32                  event_code);
265193323Sed
266193323Sedtypedef SCI_STATUS (*SCIC_SDS_IO_REQUEST_TASK_COMPLETION_HANDLER_T)(
267193323Sed                         SCIC_SDS_REQUEST_T * this_request,
268193323Sed                         U32                  completion_code);
269193323Sed
270193323Sed/**
271193323Sed * @struct SCIC_SDS_IO_REQUEST_STATE_HANDLER
272193323Sed *
273193323Sed * @brief This is the SDS core definition of the state handlers.
274193323Sed */
275193323Sedtypedef struct SCIC_SDS_IO_REQUEST_STATE_HANDLER
276193323Sed{
277193323Sed   SCI_BASE_REQUEST_STATE_HANDLER_T parent;
278193323Sed
279193323Sed   SCIC_SDS_IO_REQUEST_TASK_COMPLETION_HANDLER_T  tc_completion_handler;
280193323Sed   SCIC_SDS_IO_REQUEST_EVENT_HANDLER_T            event_handler;
281193323Sed   SCIC_SDS_IO_REQUEST_FRAME_HANDLER_T            frame_handler;
282193323Sed
283193323Sed} SCIC_SDS_IO_REQUEST_STATE_HANDLER_T;
284193323Sed
285193323Sedextern SCI_BASE_STATE_T scic_sds_request_state_table[];
286193323Sedextern SCIC_SDS_IO_REQUEST_STATE_HANDLER_T
287193323Sed       scic_sds_request_state_handler_table[];
288193323Sed
289193323Sedextern SCI_BASE_STATE_T scic_sds_io_request_started_task_mgmt_substate_table[];
290193323Sedextern SCIC_SDS_IO_REQUEST_STATE_HANDLER_T
291193323Sed       scic_sds_ssp_task_request_started_substate_handler_table[];
292193323Sed
293193323Sedextern SCI_BASE_STATE_T scic_sds_smp_request_started_substate_table[];
294193323Sedextern SCIC_SDS_IO_REQUEST_STATE_HANDLER_T
295193323Sed       scic_sds_smp_request_started_substate_handler_table[];
296193323Sed
297193323Sed/**
298193323Sed * This macro returns the maximum number of SGL element paris that we will
299193323Sed * support in a single IO request.
300193323Sed */
301193323Sed#define SCU_MAX_SGL_ELEMENT_PAIRS ((SCU_IO_REQUEST_SGE_COUNT + 1) / 2)
302193323Sed
303193323Sed/**
304193323Sed * This macro will return the controller for this io request object
305193323Sed */
306193323Sed#define scic_sds_request_get_controller(this_request) \
307193323Sed   ((this_request)->owning_controller)
308193323Sed
309193323Sed/**
310193323Sed * This macro will return the device for this io request object
311193323Sed */
312193323Sed#define scic_sds_request_get_device(this_request) \
313193323Sed   ((this_request)->target_device)
314193323Sed
315193323Sed/**
316193323Sed * This macro will return the port for this io request object
317193323Sed */
318193323Sed#define scic_sds_request_get_port(this_request) \
319193323Sed   scic_sds_remote_device_get_port(scic_sds_request_get_device(this_request))
320193323Sed
321193323Sed/**
322193323Sed * This macro returns the constructed post context result for the io
323193323Sed * request.
324193323Sed */
325193323Sed#define scic_sds_request_get_post_context(this_request) \
326193323Sed   ((this_request)->post_context)
327193323Sed
328193323Sed/**
329193323Sed * This is a helper macro to return the os handle for this request object.
330193323Sed */
331193323Sed#define scic_sds_request_get_task_context(request) \
332193323Sed   ((request)->task_context_buffer)
333193323Sed
334193323Sed#define CACHE_LINE_SIZE (64)
335198090Srdivacky#define scic_sds_request_align_task_context_buffer(address) \
336193323Sed   ((SCU_TASK_CONTEXT_T *)( \
337193323Sed       (((POINTER_UINT)(address)) + (CACHE_LINE_SIZE - 1)) \
338193323Sed     & ~(CACHE_LINE_SIZE - 1) \
339193323Sed   ))
340193323Sed
341193323Sed/**
342193323Sed * This macro will align the memory address so that it is correct for the SCU
343193323Sed * hardware to DMA the SGL element pairs.
344193323Sed */
345193323Sed#define scic_sds_request_align_sgl_element_buffer(address) \
346193323Sed   ((SCU_SGL_ELEMENT_PAIR_T *)( \
347193323Sed     ((char *)(address)) \
348193323Sed   + ( \
349193323Sed         ((~(POINTER_UINT)(address)) + 1) \
350193323Sed       & (sizeof(SCU_SGL_ELEMENT_PAIR_T) - 1) \
351193323Sed     ) \
352193323Sed   ))
353193323Sed
354193323Sed/**
355193323Sed * This macro will set the scu hardware status and sci request completion
356193323Sed * status for an io request.
357193323Sed */
358193323Sed#define scic_sds_request_set_status(request, scu_status_code, sci_status_code) \
359193323Sed{ \
360193323Sed   (request)->scu_status = (scu_status_code); \
361193323Sed   (request)->sci_status = (sci_status_code); \
362193323Sed}
363193323Sed
364193323Sed#define scic_sds_request_complete(a_request) \
365193323Sed   ((a_request)->state_handlers->parent.complete_handler(&(a_request)->parent))
366193323Sed
367193323SedU32 scic_sds_request_get_min_timer_count(void);
368193323Sed
369193323SedU32 scic_sds_request_get_max_timer_count(void);
370193323Sed
371193323Sed
372193323Sed/**
373193323Sed * This macro invokes the core state task completion handler for the
374193323Sed * SCIC_SDS_IO_REQUEST_T object.
375198090Srdivacky */
376198090Srdivacky#define scic_sds_io_request_tc_completion(this_request, completion_code) \
377193323Sed{ \
378193323Sed   if (this_request->parent.state_machine.current_state_id  \
379193323Sed          == SCI_BASE_REQUEST_STATE_STARTED \
380193323Sed       && this_request->has_started_substate_machine \
381193323Sed          == FALSE) \
382193323Sed      scic_sds_request_started_state_tc_completion_handler(this_request, completion_code); \
383193323Sed   else \
384193323Sed      this_request->state_handlers->tc_completion_handler(this_request, completion_code); \
385193323Sed}
386193323Sed
387193323Sed/**
388193323Sed * This macro zeros the hardware SGL element data
389193323Sed */
390193323Sed#define SCU_SGL_ZERO(scu_sge) \
391193323Sed{ \
392193323Sed   (scu_sge).length = 0; \
393193323Sed   (scu_sge).address_lower = 0; \
394193323Sed   (scu_sge).address_upper = 0; \
395193323Sed   (scu_sge).address_modifier = 0; \
396193323Sed}
397193323Sed
398193323Sed/**
399193323Sed * This macro copys the SGL Element data from the host os to the hardware SGL
400193323Sed * elment data
401193323Sed */
402193323Sed#define SCU_SGL_COPY(os_handle, scu_sge, os_sge) \
403193323Sed{ \
404193323Sed   (scu_sge).length = \
405193323Sed      scic_cb_sge_get_length_field(os_handle, os_sge); \
406193323Sed   (scu_sge).address_upper = \
407193323Sed      sci_cb_physical_address_upper(scic_cb_sge_get_address_field(os_handle, os_sge)); \
408193323Sed   (scu_sge).address_lower = \
409193323Sed      sci_cb_physical_address_lower(scic_cb_sge_get_address_field(os_handle, os_sge)); \
410193323Sed   (scu_sge).address_modifier = 0; \
411193323Sed}
412193323Sed
413193323Sed//*****************************************************************************
414193323Sed//* CORE REQUEST PROTOTYPES
415193323Sed//*****************************************************************************
416
417SCU_SGL_ELEMENT_PAIR_T *scic_sds_request_get_sgl_element_pair(
418   SCIC_SDS_REQUEST_T *this_request,
419   U32                 sgl_pair_index
420);
421
422void scic_sds_request_build_sgl(
423   SCIC_SDS_REQUEST_T *this_request
424);
425
426void scic_sds_ssp_io_request_assign_buffers(
427   SCIC_SDS_REQUEST_T *this_request
428);
429
430void scic_sds_ssp_task_request_assign_buffers(
431   SCIC_SDS_REQUEST_T *this_request
432);
433
434void scic_sds_stp_request_assign_buffers(
435   SCIC_SDS_REQUEST_T * this_request
436);
437
438void scic_sds_smp_request_assign_buffers(
439   SCIC_SDS_REQUEST_T * this_request
440);
441
442// ---------------------------------------------------------------------------
443
444SCI_STATUS scic_sds_request_start(
445   SCIC_SDS_REQUEST_T *this_request
446);
447
448SCI_STATUS scic_sds_io_request_terminate(
449   SCIC_SDS_REQUEST_T *this_request
450);
451
452SCI_STATUS scic_sds_io_request_complete(
453   SCIC_SDS_REQUEST_T *this_request
454);
455
456void scic_sds_io_request_copy_response(
457   SCIC_SDS_REQUEST_T *this_request
458);
459
460SCI_STATUS scic_sds_io_request_event_handler(
461   SCIC_SDS_REQUEST_T *this_request,
462   U32                    event_code
463);
464
465SCI_STATUS scic_sds_io_request_frame_handler(
466   SCIC_SDS_REQUEST_T *this_request,
467   U32                    frame_index
468);
469
470SCI_STATUS scic_sds_task_request_complete(
471   SCIC_SDS_REQUEST_T *this_request
472);
473
474SCI_STATUS scic_sds_task_request_terminate(
475   SCIC_SDS_REQUEST_T *this_request
476);
477
478#ifdef SCI_LOGGING
479void scic_sds_request_initialize_state_logging(
480   SCIC_SDS_REQUEST_T *this_request
481);
482
483void scic_sds_request_deinitialize_state_logging(
484   SCIC_SDS_REQUEST_T *this_request
485);
486#else // SCI_LOGGING
487#define scic_sds_request_initialize_state_logging(x)
488#define scic_sds_request_deinitialize_state_logging(x)
489#endif // SCI_LOGGING
490
491//*****************************************************************************
492//* DEFAULT STATE HANDLERS
493//*****************************************************************************
494
495SCI_STATUS scic_sds_request_default_start_handler(
496   SCI_BASE_REQUEST_T *this_request
497);
498
499SCI_STATUS scic_sds_request_default_abort_handler(
500   SCI_BASE_REQUEST_T *this_request
501);
502
503SCI_STATUS scic_sds_request_default_complete_handler(
504   SCI_BASE_REQUEST_T *this_request
505);
506
507SCI_STATUS scic_sds_request_default_destruct_handler(
508   SCI_BASE_REQUEST_T *this_request
509);
510
511SCI_STATUS scic_sds_request_default_tc_completion_handler(
512   SCIC_SDS_REQUEST_T * this_request,
513   U32                  completion_code
514);
515
516SCI_STATUS scic_sds_request_default_event_handler(
517   SCIC_SDS_REQUEST_T * this_request,
518   U32                  event_code
519);
520
521SCI_STATUS scic_sds_request_default_frame_handler(
522   SCIC_SDS_REQUEST_T * this_request,
523   U32                  frame_index
524);
525
526//*****************************************************************************
527//* STARTED STATE HANDLERS
528//*****************************************************************************
529
530SCI_STATUS scic_sds_request_started_state_abort_handler(
531   SCI_BASE_REQUEST_T *this_request
532);
533
534SCI_STATUS scic_sds_request_started_state_tc_completion_handler(
535   SCIC_SDS_REQUEST_T * this_request,
536   U32                  completion_code
537);
538
539#ifdef __cplusplus
540}
541#endif // __cplusplus
542
543#endif // _SCIC_SDS_IO_REQUEST_H_
544