Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
scsi
isci
remote_node_context.h
Go to the documentation of this file.
1
/*
2
* This file is provided under a dual BSD/GPLv2 license. When using or
3
* redistributing this file, you may do so under either license.
4
*
5
* GPL LICENSE SUMMARY
6
*
7
* Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
8
*
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of version 2 of the GNU General Public License as
11
* published by the Free Software Foundation.
12
*
13
* This program is distributed in the hope that it will be useful, but
14
* WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
21
* The full GNU General Public License is included in this distribution
22
* in the file called LICENSE.GPL.
23
*
24
* BSD LICENSE
25
*
26
* Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
27
* All rights reserved.
28
*
29
* Redistribution and use in source and binary forms, with or without
30
* modification, are permitted provided that the following conditions
31
* are met:
32
*
33
* * Redistributions of source code must retain the above copyright
34
* notice, this list of conditions and the following disclaimer.
35
* * Redistributions in binary form must reproduce the above copyright
36
* notice, this list of conditions and the following disclaimer in
37
* the documentation and/or other materials provided with the
38
* distribution.
39
* * Neither the name of Intel Corporation nor the names of its
40
* contributors may be used to endorse or promote products derived
41
* from this software without specific prior written permission.
42
*
43
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
44
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
45
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
46
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
47
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
50
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
51
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
52
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
53
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54
*/
55
56
#ifndef _SCIC_SDS_REMOTE_NODE_CONTEXT_H_
57
#define _SCIC_SDS_REMOTE_NODE_CONTEXT_H_
58
67
#include "
isci.h
"
68
76
#define SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX 0x0FFF
77
78
enum
sci_remote_node_suspension_reasons
{
79
SCI_HW_SUSPEND
,
80
SCI_SW_SUSPEND_NORMAL
,
81
SCI_SW_SUSPEND_LINKHANG_DETECT
82
};
83
#define SCI_SOFTWARE_SUSPEND_CMD SCU_CONTEXT_COMMAND_POST_RNC_SUSPEND_TX_RX
84
#define SCI_SOFTWARE_SUSPEND_EXPECTED_EVENT SCU_EVENT_TL_RNC_SUSPEND_TX_RX
85
86
struct
isci_request
;
87
struct
isci_remote_device
;
88
struct
sci_remote_node_context
;
89
90
typedef
void
(*
scics_sds_remote_node_context_callback
)(
void
*);
91
122
#define RNC_STATES {\
123
C(RNC_INITIAL),\
124
C(RNC_POSTING),\
125
C(RNC_INVALIDATING),\
126
C(RNC_RESUMING),\
127
C(RNC_READY),\
128
C(RNC_TX_SUSPENDED),\
129
C(RNC_TX_RX_SUSPENDED),\
130
C(RNC_AWAIT_SUSPENSION),\
131
}
132
#undef C
133
#define C(a) SCI_##a
134
enum
scis_sds_remote_node_context_states
RNC_STATES
;
135
#undef C
136
const
char
*
rnc_state_name
(
enum
scis_sds_remote_node_context_states
state
);
137
144
enum
sci_remote_node_context_destination_state
{
145
RNC_DEST_UNSPECIFIED
,
146
RNC_DEST_READY
,
147
RNC_DEST_FINAL
,
148
RNC_DEST_SUSPENDED
,
/* Set when suspend during post/invalidate */
149
RNC_DEST_SUSPENDED_RESUME
/* Set when a resume was done during posting
150
* or invalidating and already suspending.
151
*/
152
};
153
160
struct
sci_remote_node_context
{
165
u16
remote_node_index
;
166
171
u32
suspend_type
;
172
enum
sci_remote_node_suspension_reasons
suspend_reason
;
173
u32
suspend_count
;
174
180
enum
sci_remote_node_context_destination_state
destination_state
;
181
186
scics_sds_remote_node_context_callback
user_callback
;
187
192
void
*
user_cookie
;
193
197
struct
sci_base_state_machine
sm
;
198
};
199
200
void
sci_remote_node_context_construct
(
struct
sci_remote_node_context
*rnc,
201
u16
remote_node_index);
202
203
204
bool
sci_remote_node_context_is_ready
(
205
struct
sci_remote_node_context
*sci_rnc);
206
207
bool
sci_remote_node_context_is_suspended
(
struct
sci_remote_node_context
*sci_rnc);
208
209
enum
sci_status
sci_remote_node_context_event_handler
(
struct
sci_remote_node_context
*sci_rnc,
210
u32
event_code
);
211
enum
sci_status
sci_remote_node_context_destruct
(
struct
sci_remote_node_context
*sci_rnc,
212
scics_sds_remote_node_context_callback
callback
,
213
void
*callback_parameter);
214
enum
sci_status
sci_remote_node_context_suspend
(
struct
sci_remote_node_context
*sci_rnc,
215
enum
sci_remote_node_suspension_reasons
reason
,
216
u32
suspension_code);
217
enum
sci_status
sci_remote_node_context_resume
(
struct
sci_remote_node_context
*sci_rnc,
218
scics_sds_remote_node_context_callback
cb_fn,
219
void
*cb_p);
220
enum
sci_status
sci_remote_node_context_start_task
(
struct
sci_remote_node_context
*sci_rnc,
221
struct
isci_request
*ireq,
222
scics_sds_remote_node_context_callback
cb_fn,
223
void
*cb_p);
224
enum
sci_status
sci_remote_node_context_start_io
(
struct
sci_remote_node_context
*sci_rnc,
225
struct
isci_request
*ireq);
226
int
sci_remote_node_context_is_safe_to_abort
(
227
struct
sci_remote_node_context
*sci_rnc);
228
229
static
inline
bool
sci_remote_node_context_is_being_destroyed(
230
struct
sci_remote_node_context
*sci_rnc)
231
{
232
return
(sci_rnc->
destination_state
==
RNC_DEST_FINAL
)
233
|| ((sci_rnc->
sm
.current_state_id == SCI_RNC_INITIAL)
234
&& (sci_rnc->
destination_state
==
RNC_DEST_UNSPECIFIED
));
235
}
236
#endif
/* _SCIC_SDS_REMOTE_NODE_CONTEXT_H_ */
Generated on Thu Jan 10 2013 14:21:16 for Linux Kernel by
1.8.2