xref: /freebsd/sys/dev/isci/scil/scu_viit_data.h (revision 0957b409)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
3  *
4  * This file is provided under a dual BSD/GPLv2 license.  When using or
5  * redistributing this file, you may do so under either license.
6  *
7  * GPL LICENSE SUMMARY
8  *
9  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of version 2 of the GNU General Public License as
13  * published by the Free Software Foundation.
14  *
15  * This program is distributed in the hope that it will be useful, but
16  * WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
23  * The full GNU General Public License is included in this distribution
24  * in the file called LICENSE.GPL.
25  *
26  * BSD LICENSE
27  *
28  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
29  * All rights reserved.
30  *
31  * Redistribution and use in source and binary forms, with or without
32  * modification, are permitted provided that the following conditions
33  * are met:
34  *
35  *   * Redistributions of source code must retain the above copyright
36  *     notice, this list of conditions and the following disclaimer.
37  *   * Redistributions in binary form must reproduce the above copyright
38  *     notice, this list of conditions and the following disclaimer in
39  *     the documentation and/or other materials provided with the
40  *     distribution.
41  *
42  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
48  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53  *
54  * $FreeBSD$
55  */
56 #ifndef _SCU_VIIT_DATA_HEADER_
57 #define _SCU_VIIT_DATA_HEADER_
58 
59 /**
60  * @file
61  *
62  * @brief This file contains the constants and structures for the SCU hardware
63  *        VIIT table entries.
64  */
65 
66 #ifdef __cplusplus
67 extern "C" {
68 #endif // __cplusplus
69 
70 #include <dev/isci/scil/sci_types.h>
71 
72 #define SCU_VIIT_ENTRY_ID_MASK         (0xC0000000UL)
73 #define SCU_VIIT_ENTRY_ID_SHIFT        (30UL)
74 
75 #define SCU_VIIT_ENTRY_FUNCTION_MASK   (0x0FF00000UL)
76 #define SCU_VIIT_ENTRY_FUNCTION_SHIFT  (20UL)
77 
78 #define SCU_VIIT_ENTRY_IPPTMODE_MASK   (0x0001F800UL)
79 #define SCU_VIIT_ENTRY_IPPTMODE_SHIFT  (12UL)
80 
81 #define SCU_VIIT_ENTRY_LPVIE_MASK      (0x00000F00UL)
82 #define SCU_VIIT_ENTRY_LPVIE_SHIFT     (8UL)
83 
84 #define SCU_VIIT_ENTRY_STATUS_MASK     (0x000000FFUL)
85 #define SCU_VIIT_ENTRY_STATUS_SHIFT    (0UL)
86 
87 #define SCU_VIIT_ENTRY_ID_INVALID   (0UL << SCU_VIIT_ENTRY_ID_SHIFT)
88 #define SCU_VIIT_ENTRY_ID_VIIT      (1UL << SCU_VIIT_ENTRY_ID_SHIFT)
89 #define SCU_VIIT_ENTRY_ID_IIT       (2UL << SCU_VIIT_ENTRY_ID_SHIFT)
90 #define SCU_VIIT_ENTRY_ID_VIRT_EXP  (3UL << SCU_VIIT_ENTRY_ID_SHIFT)
91 
92 #define SCU_VIIT_IPPT_SSP_INITIATOR (0x01UL << SCU_VIIT_ENTRY_IPPTMODE_SHIFT)
93 #define SCU_VIIT_IPPT_SMP_INITIATOR (0x02UL << SCU_VIIT_ENTRY_IPPTMODE_SHIFT)
94 #define SCU_VIIT_IPPT_STP_INITIATOR (0x04UL << SCU_VIIT_ENTRY_IPPTMODE_SHIFT)
95 #define SCU_VIIT_IPPT_INITIATOR     \
96    (                                \
97        SCU_VIIT_IPPT_SSP_INITIATOR  \
98      | SCU_VIIT_IPPT_SMP_INITIATOR  \
99      | SCU_VIIT_IPPT_STP_INITIATOR  \
100    )
101 
102 #define SCU_VIIT_STATUS_RNC_VALID      (0x01UL << SCU_VIIT_ENTRY_STATUS_SHIFT)
103 #define SCU_VIIT_STATUS_ADDRESS_VALID  (0x02UL << SCU_VIIT_ENTRY_STATUS_SHIFT)
104 #define SCU_VIIT_STATUS_RNI_VALID      (0x04UL << SCU_VIIT_ENTRY_STATUS_SHIFT)
105 #define SCU_VIIT_STATUS_ALL_VALID      \
106    (                                   \
107        SCU_VIIT_STATUS_RNC_VALID       \
108      | SCU_VIIT_STATUS_ADDRESS_VALID   \
109      | SCU_VIIT_STATUS_RNI_VALID       \
110    )
111 
112 #define SCU_VIIT_IPPT_SMP_TARGET    (0x10UL << SCU_VIIT_ENTRY_IPPTMODE_SHIFT)
113 
114 /**
115  * @struct SCU_VIIT_ENTRY
116  *
117  * @brief This is the SCU Virtual Initiator Table Entry
118  */
119 typedef struct SCU_VIIT_ENTRY
120 {
121    /**
122     * This must be encoded as to the type of initiator that is being constructed
123     * for this port.
124     */
125    U32  status;
126 
127    /**
128     * Virtual initiator high SAS Address
129     */
130    U32  initiator_sas_address_hi;
131 
132    /**
133     * Virtual initiator low SAS Address
134     */
135    U32  initiator_sas_address_lo;
136 
137    /**
138     * This must be 0
139     */
140    U32  reserved;
141 
142 } SCU_VIIT_ENTRY_T;
143 
144 
145 // IIT Status Defines
146 #define SCU_IIT_ENTRY_ID_MASK                (0xC0000000UL)
147 #define SCU_IIT_ENTRY_ID_SHIFT               (30UL)
148 
149 #define SCU_IIT_ENTRY_STATUS_UPDATE_MASK     (0x20000000UL)
150 #define SCU_IIT_ENTRY_STATUS_UPDATE_SHIFT    (29UL)
151 
152 #define SCU_IIT_ENTRY_LPI_MASK               (0x00000F00UL)
153 #define SCU_IIT_ENTRY_LPI_SHIFT              (8UL)
154 
155 #define SCU_IIT_ENTRY_STATUS_MASK            (0x000000FFUL)
156 #define SCU_IIT_ENTRY_STATUS_SHIFT           (0UL)
157 
158 // IIT Remote Initiator Defines
159 #define SCU_IIT_ENTRY_REMOTE_TAG_MASK  (0x0000FFFFUL)
160 #define SCU_IIT_ENTRY_REMOTE_TAG_SHIFT (0UL)
161 
162 #define SCU_IIT_ENTRY_REMOTE_RNC_MASK  (0x0FFF0000UL)
163 #define SCU_IIT_ENTRY_REMOTE_RNC_SHIFT (16UL)
164 
165 #define SCU_IIT_ENTRY_ID_INVALID   (0UL << SCU_IIT_ENTRY_ID_SHIFT)
166 #define SCU_IIT_ENTRY_ID_VIIT      (1UL << SCU_IIT_ENTRY_ID_SHIFT)
167 #define SCU_IIT_ENTRY_ID_IIT       (2UL << SCU_IIT_ENTRY_ID_SHIFT)
168 #define SCU_IIT_ENTRY_ID_VIRT_EXP  (3UL << SCU_IIT_ENTRY_ID_SHIFT)
169 
170 /**
171  * @struct SCU_IIT_ENTRY
172  *
173  * @brief This will be implemented later when we support virtual functions
174  */
175 typedef struct SCU_IIT_ENTRY
176 {
177    U32  status;
178    U32  remote_initiator_sas_address_hi;
179    U32  remote_initiator_sas_address_lo;
180    U32  remote_initiator;
181 
182 } SCU_IIT_ENTRY_T;
183 
184 #ifdef __cplusplus
185 }
186 #endif // __cplusplus
187 
188 #endif // _SCU_VIIT_DATA_HEADER_
189