scic_sds_request.h revision 265571
1144966Svkashyap/*-
2169400Sscottl * This file is provided under a dual BSD/GPLv2 license.  When using or
3144966Svkashyap * redistributing this file, you may do so under either license.
4144966Svkashyap *
5144966Svkashyap * GPL LICENSE SUMMARY
6144966Svkashyap *
7144966Svkashyap * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
8144966Svkashyap *
9144966Svkashyap * This program is free software; you can redistribute it and/or modify
10144966Svkashyap * it under the terms of version 2 of the GNU General Public License as
11144966Svkashyap * published by the Free Software Foundation.
12144966Svkashyap *
13144966Svkashyap * This program is distributed in the hope that it will be useful, but
14144966Svkashyap * WITHOUT ANY WARRANTY; without even the implied warranty of
15144966Svkashyap * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16144966Svkashyap * General Public License for more details.
17144966Svkashyap *
18144966Svkashyap * You should have received a copy of the GNU General Public License
19144966Svkashyap * along with this program; if not, write to the Free Software
20144966Svkashyap * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
21144966Svkashyap * The full GNU General Public License is included in this distribution
22144966Svkashyap * in the file called LICENSE.GPL.
23144966Svkashyap *
24144966Svkashyap * BSD LICENSE
25144966Svkashyap *
26144966Svkashyap * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
27144966Svkashyap * All rights reserved.
28144966Svkashyap *
29144966Svkashyap * Redistribution and use in source and binary forms, with or without
30144966Svkashyap * modification, are permitted provided that the following conditions
31144966Svkashyap * are met:
32144966Svkashyap *
33144966Svkashyap *   * Redistributions of source code must retain the above copyright
34169400Sscottl *     notice, this list of conditions and the following disclaimer.
35172496Sscottl *   * Redistributions in binary form must reproduce the above copyright
36144966Svkashyap *     notice, this list of conditions and the following disclaimer in
37144966Svkashyap *     the documentation and/or other materials provided with the
38144966Svkashyap *     distribution.
39144966Svkashyap *
40144966Svkashyap * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
41144966Svkashyap * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
42144966Svkashyap * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
43144966Svkashyap * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
44149968Sobrien * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45144966Svkashyap * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
46144966Svkashyap * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
47144966Svkashyap * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
48144966Svkashyap * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
49144966Svkashyap * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
50144966Svkashyap * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
51144966Svkashyap *
52144966Svkashyap * $FreeBSD: stable/10/sys/dev/isci/scil/scic_sds_request.h 265571 2014-05-07 16:57:33Z jimharris $
53144966Svkashyap */
54144966Svkashyap#ifndef _SCIC_SDS_IO_REQUEST_H_
55144966Svkashyap#define _SCIC_SDS_IO_REQUEST_H_
56144966Svkashyap
57144966Svkashyap/**
58144966Svkashyap * @file
59144966Svkashyap *
60144966Svkashyap * @brief This file contains the structures, constants and prototypes for the
61144966Svkashyap *        SCIC_SDS_IO_REQUEST object.
62144966Svkashyap */
63144966Svkashyap
64144966Svkashyap#ifdef __cplusplus
65144966Svkashyapextern "C" {
66144966Svkashyap#endif // __cplusplus
67144966Svkashyap
68144966Svkashyap#include <sys/param.h>
69144966Svkashyap
70144966Svkashyap#include <dev/isci/scil/scic_io_request.h>
71144966Svkashyap
72144966Svkashyap#include <dev/isci/scil/sci_base_request.h>
73144966Svkashyap#include <dev/isci/scil/sci_base_state_machine_logger.h>
74144966Svkashyap#include <dev/isci/scil/scu_task_context.h>
75144966Svkashyap#include <dev/isci/scil/intel_sas.h>
76144966Svkashyap
77144966Svkashyapstruct SCIC_SDS_CONTROLLER;
78144966Svkashyapstruct SCIC_SDS_REMOTE_DEVICE;
79144966Svkashyapstruct SCIC_SDS_IO_REQUEST_STATE_HANDLER;
80144966Svkashyap
81144966Svkashyap/**
82144966Svkashyap * @enum _SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATES
83212008Sdelphij *
84144966Svkashyap * @brief This enumeration depicts all of the substates for a task
85144966Svkashyap *        management request to be performed in the STARTED super-state.
86144966Svkashyap */
87144966Svkashyaptypedef enum _SCIC_SDS_RAW_REQUEST_STARTED_TASK_MGMT_SUBSTATES
88144966Svkashyap{
89144966Svkashyap   /**
90144966Svkashyap    * The AWAIT_TC_COMPLETION sub-state indicates that the started raw
91144966Svkashyap    * task management request is waiting for the transmission of the
92144966Svkashyap    * initial frame (i.e. command, task, etc.).
93144966Svkashyap    */
94208969Sdelphij   SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_COMPLETION,
95144966Svkashyap
96208969Sdelphij   /**
97208969Sdelphij    * This sub-state indicates that the started task management request
98144966Svkashyap    * is waiting for the reception of an unsolicited frame
99144966Svkashyap    * (i.e. response IU).
100144966Svkashyap    */
101172496Sscottl   SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_RESPONSE,
102208969Sdelphij
103144966Svkashyap   SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_MAX_SUBSTATES
104144966Svkashyap
105144966Svkashyap} SCIC_SDS_RAW_REQUEST_STARTED_TASK_MGMT_SUBSTATES;
106144966Svkashyap
107144966Svkashyap
108144966Svkashyap/**
109144966Svkashyap * @enum _SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATES
110144966Svkashyap *
111144966Svkashyap * @brief This enumeration depicts all of the substates for a SMP
112144966Svkashyap *        request to be performed in the STARTED super-state.
113144966Svkashyap */
114144966Svkashyaptypedef enum _SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATES
115144966Svkashyap{
116144966Svkashyap   /**
117144966Svkashyap    * This sub-state indicates that the started task management request
118172496Sscottl    * is waiting for the reception of an unsolicited frame
119170872Sscottl    * (i.e. response IU).
120144966Svkashyap    */
121144966Svkashyap   SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_RESPONSE,
122144966Svkashyap
123144966Svkashyap   /**
124144966Svkashyap    * The AWAIT_TC_COMPLETION sub-state indicates that the started SMP request is
125144966Svkashyap    * waiting for the transmission of the initial frame (i.e. command, task, etc.).
126144966Svkashyap    */
127144966Svkashyap   SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_TC_COMPLETION,
128172496Sscottl
129144966Svkashyap   SCIC_SDS_SMP_REQUEST_STARTED_MAX_SUBSTATES
130144966Svkashyap
131144966Svkashyap} SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATES;
132144966Svkashyap
133144966Svkashyap/**
134144966Svkashyap * @struct SCIC_SDS_IO_REQUEST
135144966Svkashyap *
136144966Svkashyap * @brief This structure contains or references all of the data necessary
137144966Svkashyap *        to process a task management or normal IO request.
138144966Svkashyap */
139144966Svkashyaptypedef struct SCIC_SDS_REQUEST
140144966Svkashyap{
141144966Svkashyap   /**
142144966Svkashyap    * This field indictes the parent object of the request.
143144966Svkashyap    */
144144966Svkashyap   SCI_BASE_REQUEST_T parent;
145144966Svkashyap
146172496Sscottl   void *user_request;
147144966Svkashyap
148144966Svkashyap   /**
149172496Sscottl    * This field simply points to the controller to which this IO request
150144966Svkashyap    * is associated.
151144966Svkashyap    */
152144966Svkashyap   struct SCIC_SDS_CONTROLLER    *owning_controller;
153144966Svkashyap
154144966Svkashyap   /**
155144966Svkashyap    * This field simply points to the remote device to which this IO request
156144966Svkashyap    * is associated.
157144966Svkashyap    */
158144966Svkashyap   struct SCIC_SDS_REMOTE_DEVICE *target_device;
159144966Svkashyap
160144966Svkashyap   /**
161144966Svkashyap    * This field is utilized to determine if the SCI user is managing
162144966Svkashyap    * the IO tag for this request or if the core is managing it.
163144966Svkashyap    */
164144966Svkashyap   BOOL was_tag_assigned_by_user;
165144966Svkashyap
166144966Svkashyap   /**
167144966Svkashyap    * This field indicates the IO tag for this request.  The IO tag is
168144966Svkashyap    * comprised of the task_index and a sequence count. The sequence count
169144966Svkashyap    * is utilized to help identify tasks from one life to another.
170172496Sscottl    */
171172496Sscottl   U16 io_tag;
172144966Svkashyap
173144966Svkashyap   /**
174144966Svkashyap   * This field specifies the sat protocol being utilized for this
175144966Svkashyap   * IO request, such as SAT_PROTOCOL_PIO_DATA_IN, SAT_PROTOCOL_FPDMA etc.
176144966Svkashyap   */
177144966Svkashyap   U8 sat_protocol;
178144966Svkashyap
179172496Sscottl   /**
180172496Sscottl    * This field specifies the protocol being utilized for this
181144966Svkashyap    * IO request.
182144966Svkashyap    */
183144966Svkashyap   SCIC_TRANSPORT_PROTOCOL protocol;
184144966Svkashyap
185144966Svkashyap   /**
186144966Svkashyap    * This field indicates the completion status taken from the SCUs
187144966Svkashyap    * completion code.  It indicates the completion result for the SCU hardware.
188144966Svkashyap    */
189144966Svkashyap   U32 scu_status;
190144966Svkashyap
191144966Svkashyap   /**
192144966Svkashyap    * This field indicates the completion status returned to the SCI user.  It
193144966Svkashyap    * indicates the users view of the io request completion.
194144966Svkashyap    */
195144966Svkashyap   U32 sci_status;
196144966Svkashyap
197144966Svkashyap   /**
198144966Svkashyap    * This field contains the value to be utilized when posting (e.g. Post_TC,
199144966Svkashyap    * Post_TC_Abort) this request to the silicon.
200144966Svkashyap    */
201144966Svkashyap   U32 post_context;
202144966Svkashyap
203144966Svkashyap   void                   *command_buffer;
204144966Svkashyap   void                   *response_buffer;
205144966Svkashyap   SCU_TASK_CONTEXT_T     *task_context_buffer;
206144966Svkashyap   SCU_SGL_ELEMENT_PAIR_T *sgl_element_pair_buffer;
207144966Svkashyap
208144966Svkashyap   /**
209144966Svkashyap    * This field indicates if this request is a task management request or
210144966Svkashyap    * normal IO request.
211144966Svkashyap    */
212144966Svkashyap   BOOL is_task_management_request;
213144966Svkashyap
214144966Svkashyap   /**
215144966Svkashyap    * This field indicates that this request contains an initialized started
216144966Svkashyap    * substate machine.
217144966Svkashyap    */
218144966Svkashyap   BOOL has_started_substate_machine;
219144966Svkashyap
220144966Svkashyap   /**
221144966Svkashyap    * This field is a pointer to the stored rx frame data.  It is used in STP
222144966Svkashyap    * internal requests and SMP response frames.  If this field is non-NULL the
223144966Svkashyap    * saved frame must be released on IO request completion.
224144966Svkashyap    *
225144966Svkashyap    * @todo In the future do we want to keep a list of RX frame buffers?
226144966Svkashyap    */
227144966Svkashyap   U32 saved_rx_frame_index;
228144966Svkashyap
229144966Svkashyap   /**
230208969Sdelphij    * This field specifies the data necessary to manage the sub-state
231144966Svkashyap    * machine executed while in the SCI_BASE_REQUEST_STATE_STARTED state.
232144966Svkashyap    */
233144966Svkashyap   SCI_BASE_STATE_MACHINE_T started_substate_machine;
234144966Svkashyap
235144966Svkashyap   /**
236144966Svkashyap    * This field specifies the current state handlers in place for this
237144966Svkashyap    * IO Request object.  This field is updated each time the request
238144966Svkashyap    * changes state.
239144966Svkashyap    */
240144966Svkashyap   struct SCIC_SDS_IO_REQUEST_STATE_HANDLER *state_handlers;
241144966Svkashyap
242144966Svkashyap   #ifdef SCI_LOGGING
243144966Svkashyap   /**
244144966Svkashyap    * This field is the observer of the started subsate machine
245144966Svkashyap    */
246144966Svkashyap   SCI_BASE_STATE_MACHINE_LOGGER_T started_substate_machine_logger;
247144966Svkashyap   #endif
248144966Svkashyap
249144966Svkashyap   /**
250144966Svkashyap    * This field in the recorded device sequence for the io request.  This is
251144966Svkashyap    * recorded during the build operation and is compared in the start
252144966Svkashyap    * operation.  If the sequence is different then there was a change of
253144966Svkashyap    * devices from the build to start operations.
254144966Svkashyap    */
255144966Svkashyap   U8  device_sequence;
256144966Svkashyap
257144966Svkashyap} SCIC_SDS_REQUEST_T;
258144966Svkashyap
259144966Svkashyap
260144966Svkashyaptypedef SCI_STATUS (*SCIC_SDS_IO_REQUEST_FRAME_HANDLER_T)(
261144966Svkashyap                         SCIC_SDS_REQUEST_T * this_request,
262144966Svkashyap                         U32                  frame_index);
263144966Svkashyap
264246713Skibtypedef SCI_STATUS (*SCIC_SDS_IO_REQUEST_EVENT_HANDLER_T)(
265246713Skib                         SCIC_SDS_REQUEST_T * this_request,
266144966Svkashyap                         U32                  event_code);
267144966Svkashyap
268246713Skibtypedef SCI_STATUS (*SCIC_SDS_IO_REQUEST_TASK_COMPLETION_HANDLER_T)(
269246713Skib                         SCIC_SDS_REQUEST_T * this_request,
270246713Skib                         U32                  completion_code);
271246713Skib
272144966Svkashyap/**
273144966Svkashyap * @struct SCIC_SDS_IO_REQUEST_STATE_HANDLER
274144966Svkashyap *
275144966Svkashyap * @brief This is the SDS core definition of the state handlers.
276246713Skib */
277246713Skibtypedef struct SCIC_SDS_IO_REQUEST_STATE_HANDLER
278246713Skib{
279212008Sdelphij   SCI_BASE_REQUEST_STATE_HANDLER_T parent;
280212008Sdelphij
281144966Svkashyap   SCIC_SDS_IO_REQUEST_TASK_COMPLETION_HANDLER_T  tc_completion_handler;
282144966Svkashyap   SCIC_SDS_IO_REQUEST_EVENT_HANDLER_T            event_handler;
283144966Svkashyap   SCIC_SDS_IO_REQUEST_FRAME_HANDLER_T            frame_handler;
284144966Svkashyap
285144966Svkashyap} SCIC_SDS_IO_REQUEST_STATE_HANDLER_T;
286212008Sdelphij
287212008Sdelphijextern SCI_BASE_STATE_T scic_sds_request_state_table[];
288212008Sdelphijextern SCIC_SDS_IO_REQUEST_STATE_HANDLER_T
289212008Sdelphij       scic_sds_request_state_handler_table[];
290212008Sdelphij
291212008Sdelphijextern SCI_BASE_STATE_T scic_sds_io_request_started_task_mgmt_substate_table[];
292144966Svkashyapextern SCIC_SDS_IO_REQUEST_STATE_HANDLER_T
293144966Svkashyap       scic_sds_ssp_task_request_started_substate_handler_table[];
294144966Svkashyap
295144966Svkashyapextern SCI_BASE_STATE_T scic_sds_smp_request_started_substate_table[];
296144966Svkashyapextern SCIC_SDS_IO_REQUEST_STATE_HANDLER_T
297144966Svkashyap       scic_sds_smp_request_started_substate_handler_table[];
298144966Svkashyap
299144966Svkashyap/**
300144966Svkashyap * This macro returns the maximum number of SGL element paris that we will
301144966Svkashyap * support in a single IO request.
302144966Svkashyap */
303144966Svkashyap#define SCU_MAX_SGL_ELEMENT_PAIRS ((SCU_IO_REQUEST_SGE_COUNT + 1) / 2)
304144966Svkashyap
305144966Svkashyap/**
306144966Svkashyap * This macro will return the controller for this io request object
307144966Svkashyap */
308144966Svkashyap#define scic_sds_request_get_controller(this_request) \
309144966Svkashyap   ((this_request)->owning_controller)
310144966Svkashyap
311144966Svkashyap/**
312144966Svkashyap * This macro will return the device for this io request object
313144966Svkashyap */
314144966Svkashyap#define scic_sds_request_get_device(this_request) \
315144966Svkashyap   ((this_request)->target_device)
316144966Svkashyap
317208969Sdelphij/**
318208969Sdelphij * This macro will return the port for this io request object
319208969Sdelphij */
320144966Svkashyap#define scic_sds_request_get_port(this_request) \
321144966Svkashyap   scic_sds_remote_device_get_port(scic_sds_request_get_device(this_request))
322144966Svkashyap
323144966Svkashyap/**
324212008Sdelphij * This macro returns the constructed post context result for the io
325144966Svkashyap * request.
326144966Svkashyap */
327144966Svkashyap#define scic_sds_request_get_post_context(this_request) \
328144966Svkashyap   ((this_request)->post_context)
329212008Sdelphij
330212008Sdelphij/**
331212008Sdelphij * This is a helper macro to return the os handle for this request object.
332212008Sdelphij */
333212008Sdelphij#define scic_sds_request_get_task_context(request) \
334212008Sdelphij   ((request)->task_context_buffer)
335212008Sdelphij
336212008Sdelphij#define scic_sds_request_align_task_context_buffer(address) \
337212008Sdelphij   ((SCU_TASK_CONTEXT_T *)( \
338144966Svkashyap       (((POINTER_UINT)(address)) + (CACHE_LINE_SIZE - 1)) \
339208969Sdelphij     & ~(CACHE_LINE_SIZE - 1) \
340144966Svkashyap   ))
341144966Svkashyap
342144966Svkashyap/**
343144966Svkashyap * This macro will align the memory address so that it is correct for the SCU
344144966Svkashyap * hardware to DMA the SGL element pairs.
345144966Svkashyap */
346144966Svkashyap#define scic_sds_request_align_sgl_element_buffer(address) \
347144966Svkashyap   ((SCU_SGL_ELEMENT_PAIR_T *)( \
348144966Svkashyap     ((char *)(address)) \
349144966Svkashyap   + ( \
350144966Svkashyap         ((~(POINTER_UINT)(address)) + 1) \
351144966Svkashyap       & (sizeof(SCU_SGL_ELEMENT_PAIR_T) - 1) \
352144966Svkashyap     ) \
353212008Sdelphij   ))
354144966Svkashyap
355144966Svkashyap/**
356144966Svkashyap * This macro will set the scu hardware status and sci request completion
357144966Svkashyap * status for an io request.
358144966Svkashyap */
359212008Sdelphij#define scic_sds_request_set_status(request, scu_status_code, sci_status_code) \
360212008Sdelphij{ \
361144966Svkashyap   (request)->scu_status = (scu_status_code); \
362144966Svkashyap   (request)->sci_status = (sci_status_code); \
363144966Svkashyap}
364144966Svkashyap
365144966Svkashyap#define scic_sds_request_complete(a_request) \
366144966Svkashyap   ((a_request)->state_handlers->parent.complete_handler(&(a_request)->parent))
367144966Svkashyap
368144966SvkashyapU32 scic_sds_request_get_min_timer_count(void);
369144966Svkashyap
370144966SvkashyapU32 scic_sds_request_get_max_timer_count(void);
371144966Svkashyap
372144966Svkashyap
373144966Svkashyap/**
374144966Svkashyap * This macro invokes the core state task completion handler for the
375144966Svkashyap * SCIC_SDS_IO_REQUEST_T object.
376144966Svkashyap */
377144966Svkashyap#define scic_sds_io_request_tc_completion(this_request, completion_code) \
378163816Smjacob{ \
379163816Smjacob   if (this_request->parent.state_machine.current_state_id  \
380163816Smjacob          == SCI_BASE_REQUEST_STATE_STARTED \
381163816Smjacob       && this_request->has_started_substate_machine \
382144966Svkashyap          == FALSE) \
383163816Smjacob      scic_sds_request_started_state_tc_completion_handler(this_request, completion_code); \
384163816Smjacob   else \
385163816Smjacob      this_request->state_handlers->tc_completion_handler(this_request, completion_code); \
386163816Smjacob}
387163816Smjacob
388163816Smjacob/**
389163816Smjacob * This macro zeros the hardware SGL element data
390163816Smjacob */
391163816Smjacob#define SCU_SGL_ZERO(scu_sge) \
392163816Smjacob{ \
393144966Svkashyap   (scu_sge).length = 0; \
394144966Svkashyap   (scu_sge).address_lower = 0; \
395144966Svkashyap   (scu_sge).address_upper = 0; \
396144966Svkashyap   (scu_sge).address_modifier = 0; \
397144966Svkashyap}
398144966Svkashyap
399144966Svkashyap/**
400144966Svkashyap * This macro copys the SGL Element data from the host os to the hardware SGL
401144966Svkashyap * elment data
402144966Svkashyap */
403144966Svkashyap#define SCU_SGL_COPY(os_handle, scu_sge, os_sge) \
404144966Svkashyap{ \
405144966Svkashyap   (scu_sge).length = \
406144966Svkashyap      scic_cb_sge_get_length_field(os_handle, os_sge); \
407144966Svkashyap   (scu_sge).address_upper = \
408144966Svkashyap      sci_cb_physical_address_upper(scic_cb_sge_get_address_field(os_handle, os_sge)); \
409144966Svkashyap   (scu_sge).address_lower = \
410144966Svkashyap      sci_cb_physical_address_lower(scic_cb_sge_get_address_field(os_handle, os_sge)); \
411144966Svkashyap   (scu_sge).address_modifier = 0; \
412144966Svkashyap}
413144966Svkashyap
414144966Svkashyap//*****************************************************************************
415144966Svkashyap//* CORE REQUEST PROTOTYPES
416144966Svkashyap//*****************************************************************************
417144966Svkashyap
418144966SvkashyapSCU_SGL_ELEMENT_PAIR_T *scic_sds_request_get_sgl_element_pair(
419152213Svkashyap   SCIC_SDS_REQUEST_T *this_request,
420144966Svkashyap   U32                 sgl_pair_index
421144966Svkashyap);
422144966Svkashyap
423144966Svkashyapvoid scic_sds_request_build_sgl(
424163816Smjacob   SCIC_SDS_REQUEST_T *this_request
425163816Smjacob);
426163816Smjacob
427163816Smjacobvoid scic_sds_ssp_io_request_assign_buffers(
428212008Sdelphij   SCIC_SDS_REQUEST_T *this_request
429144966Svkashyap);
430144966Svkashyap
431144966Svkashyapvoid scic_sds_ssp_task_request_assign_buffers(
432144966Svkashyap   SCIC_SDS_REQUEST_T *this_request
433144966Svkashyap);
434144966Svkashyap
435144966Svkashyapvoid scic_sds_stp_request_assign_buffers(
436144966Svkashyap   SCIC_SDS_REQUEST_T * this_request
437144966Svkashyap);
438144966Svkashyap
439144966Svkashyapvoid scic_sds_smp_request_assign_buffers(
440144966Svkashyap   SCIC_SDS_REQUEST_T * this_request
441144966Svkashyap);
442144966Svkashyap
443144966Svkashyap// ---------------------------------------------------------------------------
444144966Svkashyap
445144966SvkashyapSCI_STATUS scic_sds_request_start(
446144966Svkashyap   SCIC_SDS_REQUEST_T *this_request
447144966Svkashyap);
448144966Svkashyap
449144966SvkashyapSCI_STATUS scic_sds_io_request_terminate(
450144966Svkashyap   SCIC_SDS_REQUEST_T *this_request
451144966Svkashyap);
452144966Svkashyap
453144966SvkashyapSCI_STATUS scic_sds_io_request_complete(
454144966Svkashyap   SCIC_SDS_REQUEST_T *this_request
455144966Svkashyap);
456144966Svkashyap
457144966Svkashyapvoid scic_sds_io_request_copy_response(
458144966Svkashyap   SCIC_SDS_REQUEST_T *this_request
459145688Svkashyap);
460144966Svkashyap
461144966SvkashyapSCI_STATUS scic_sds_io_request_event_handler(
462144966Svkashyap   SCIC_SDS_REQUEST_T *this_request,
463144966Svkashyap   U32                    event_code
464144966Svkashyap);
465144966Svkashyap
466144966SvkashyapSCI_STATUS scic_sds_io_request_frame_handler(
467144966Svkashyap   SCIC_SDS_REQUEST_T *this_request,
468144966Svkashyap   U32                    frame_index
469144966Svkashyap);
470144966Svkashyap
471144966SvkashyapSCI_STATUS scic_sds_task_request_complete(
472144966Svkashyap   SCIC_SDS_REQUEST_T *this_request
473144966Svkashyap);
474144966Svkashyap
475144966SvkashyapSCI_STATUS scic_sds_task_request_terminate(
476144966Svkashyap   SCIC_SDS_REQUEST_T *this_request
477144966Svkashyap);
478144966Svkashyap
479144966Svkashyap#ifdef SCI_LOGGING
480144966Svkashyapvoid scic_sds_request_initialize_state_logging(
481152213Svkashyap   SCIC_SDS_REQUEST_T *this_request
482152213Svkashyap);
483152213Svkashyap
484203108Smavvoid scic_sds_request_deinitialize_state_logging(
485144966Svkashyap   SCIC_SDS_REQUEST_T *this_request
486172496Sscottl);
487203108Smav#else // SCI_LOGGING
488203108Smav#define scic_sds_request_initialize_state_logging(x)
489203108Smav#define scic_sds_request_deinitialize_state_logging(x)
490172496Sscottl#endif // SCI_LOGGING
491144966Svkashyap
492169400Sscottl//*****************************************************************************
493144966Svkashyap//* DEFAULT STATE HANDLERS
494203108Smav//*****************************************************************************
495172496Sscottl
496144966SvkashyapSCI_STATUS scic_sds_request_default_start_handler(
497144966Svkashyap   SCI_BASE_REQUEST_T *this_request
498144966Svkashyap);
499144966Svkashyap
500144966SvkashyapSCI_STATUS scic_sds_request_default_abort_handler(
501144966Svkashyap   SCI_BASE_REQUEST_T *this_request
502144966Svkashyap);
503144966Svkashyap
504144966SvkashyapSCI_STATUS scic_sds_request_default_complete_handler(
505144966Svkashyap   SCI_BASE_REQUEST_T *this_request
506144966Svkashyap);
507208969Sdelphij
508144966SvkashyapSCI_STATUS scic_sds_request_default_destruct_handler(
509144966Svkashyap   SCI_BASE_REQUEST_T *this_request
510144966Svkashyap);
511144966Svkashyap
512208969SdelphijSCI_STATUS scic_sds_request_default_tc_completion_handler(
513208969Sdelphij   SCIC_SDS_REQUEST_T * this_request,
514144966Svkashyap   U32                  completion_code
515208969Sdelphij);
516208969Sdelphij
517208969SdelphijSCI_STATUS scic_sds_request_default_event_handler(
518208969Sdelphij   SCIC_SDS_REQUEST_T * this_request,
519208969Sdelphij   U32                  event_code
520172496Sscottl);
521208969Sdelphij
522172496SscottlSCI_STATUS scic_sds_request_default_frame_handler(
523144966Svkashyap   SCIC_SDS_REQUEST_T * this_request,
524144966Svkashyap   U32                  frame_index
525144966Svkashyap);
526144966Svkashyap
527144966Svkashyap//*****************************************************************************
528212008Sdelphij//* STARTED STATE HANDLERS
529212008Sdelphij//*****************************************************************************
530152213Svkashyap
531212008SdelphijSCI_STATUS scic_sds_request_started_state_abort_handler(
532152213Svkashyap   SCI_BASE_REQUEST_T *this_request
533152213Svkashyap);
534152213Svkashyap
535152213SvkashyapSCI_STATUS scic_sds_request_started_state_tc_completion_handler(
536212008Sdelphij   SCIC_SDS_REQUEST_T * this_request,
537152213Svkashyap   U32                  completion_code
538212008Sdelphij);
539212008Sdelphij
540212008Sdelphij#ifdef __cplusplus
541212008Sdelphij}
542212008Sdelphij#endif // __cplusplus
543152213Svkashyap
544152213Svkashyap#endif // _SCIC_SDS_IO_REQUEST_H_
545152213Svkashyap