Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs
[pandora-kernel.git] / drivers / scsi / isci / scu_remote_node_context.h
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 __SCU_REMOTE_NODE_CONTEXT_HEADER__
57 #define __SCU_REMOTE_NODE_CONTEXT_HEADER__
58
59 /**
60  * This file contains the structures and constatns used by the SCU hardware to
61  *    describe a remote node context.
62  *
63  *
64  */
65
66 /**
67  * struct ssp_remote_node_context - This structure contains the SCU hardware
68  *    definition for an SSP remote node.
69  *
70  *
71  */
72 struct ssp_remote_node_context {
73         /* WORD 0 */
74
75         /**
76          * This field is the remote node index assigned for this remote node. All
77          * remote nodes must have a unique remote node index. The value of the remote
78          * node index can not exceed the maximum number of remote nodes reported in
79          * the SCU device context capacity register.
80          */
81         u32 remote_node_index:12;
82         u32 reserved0_1:4;
83
84         /**
85          * This field tells the SCU hardware how many simultaneous connections that
86          * this remote node will support.
87          */
88         u32 remote_node_port_width:4;
89
90         /**
91          * This field tells the SCU hardware which logical port to associate with this
92          * remote node.
93          */
94         u32 logical_port_index:3;
95         u32 reserved0_2:5;
96
97         /**
98          * This field will enable the I_T nexus loss timer for this remote node.
99          */
100         u32 nexus_loss_timer_enable:1;
101
102         /**
103          * This field is the for driver debug only and is not used.
104          */
105         u32 check_bit:1;
106
107         /**
108          * This field must be set to true when the hardware DMAs the remote node
109          * context to the hardware SRAM.  When the remote node is being invalidated
110          * this field must be set to false.
111          */
112         u32 is_valid:1;
113
114         /**
115          * This field must be set to true.
116          */
117         u32 is_remote_node_context:1;
118
119         /* WORD 1 - 2 */
120
121         /**
122          * This is the low word of the remote device SAS Address
123          */
124         u32 remote_sas_address_lo;
125
126         /**
127          * This field is the high word of the remote device SAS Address
128          */
129         u32 remote_sas_address_hi;
130
131         /* WORD 3 */
132         /**
133          * This field reprensets the function number assigned to this remote device.
134          * This value must match the virtual function number that is being used to
135          * communicate to the device.
136          */
137         u32 function_number:8;
138         u32 reserved3_1:8;
139
140         /**
141          * This field provides the driver a way to cheat on the arbitration wait time
142          * for this remote node.
143          */
144         u32 arbitration_wait_time:16;
145
146         /* WORD 4 */
147         /**
148          * This field tells the SCU hardware how long this device may occupy the
149          * connection before it must be closed.
150          */
151         u32 connection_occupancy_timeout:16;
152
153         /**
154          * This field tells the SCU hardware how long to maintain a connection when
155          * there are no frames being transmitted on the link.
156          */
157         u32 connection_inactivity_timeout:16;
158
159         /* WORD  5 */
160         /**
161          * This field allows the driver to cheat on the arbitration wait time for this
162          * remote node.
163          */
164         u32 initial_arbitration_wait_time:16;
165
166         /**
167          * This field is tells the hardware what to program for the connection rate in
168          * the open address frame.  See the SAS spec for valid values.
169          */
170         u32 oaf_connection_rate:4;
171
172         /**
173          * This field tells the SCU hardware what to program for the features in the
174          * open address frame.  See the SAS spec for valid values.
175          */
176         u32 oaf_features:4;
177
178         /**
179          * This field tells the SCU hardware what to use for the source zone group in
180          * the open address frame.  See the SAS spec for more details on zoning.
181          */
182         u32 oaf_source_zone_group:8;
183
184         /* WORD 6 */
185         /**
186          * This field tells the SCU hardware what to use as the more capibilities in
187          * the open address frame. See the SAS Spec for details.
188          */
189         u32 oaf_more_compatibility_features;
190
191         /* WORD 7 */
192         u32 reserved7;
193
194 };
195
196 /**
197  * struct stp_remote_node_context - This structure contains the SCU hardware
198  *    definition for a STP remote node.
199  *
200  * STP Targets are not yet supported so this definition is a placeholder until
201  * we do support them.
202  */
203 struct stp_remote_node_context {
204         /**
205          * Placeholder data for the STP remote node.
206          */
207         u32 data[8];
208
209 };
210
211 /**
212  * This union combines the SAS and SATA remote node definitions.
213  *
214  * union scu_remote_node_context
215  */
216 union scu_remote_node_context {
217         /**
218          * SSP Remote Node
219          */
220         struct ssp_remote_node_context ssp;
221
222         /**
223          * STP Remote Node
224          */
225         struct stp_remote_node_context stp;
226
227 };
228
229 #endif /* __SCU_REMOTE_NODE_CONTEXT_HEADER__ */