1f11c7f63SJim Harris /*- 2718cf2ccSPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0 3718cf2ccSPedro F. Giffuni * 4f11c7f63SJim Harris * This file is provided under a dual BSD/GPLv2 license. When using or 5f11c7f63SJim Harris * redistributing this file, you may do so under either license. 6f11c7f63SJim Harris * 7f11c7f63SJim Harris * GPL LICENSE SUMMARY 8f11c7f63SJim Harris * 9f11c7f63SJim Harris * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 10f11c7f63SJim Harris * 11f11c7f63SJim Harris * This program is free software; you can redistribute it and/or modify 12f11c7f63SJim Harris * it under the terms of version 2 of the GNU General Public License as 13f11c7f63SJim Harris * published by the Free Software Foundation. 14f11c7f63SJim Harris * 15f11c7f63SJim Harris * This program is distributed in the hope that it will be useful, but 16f11c7f63SJim Harris * WITHOUT ANY WARRANTY; without even the implied warranty of 17f11c7f63SJim Harris * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18f11c7f63SJim Harris * General Public License for more details. 19f11c7f63SJim Harris * 20f11c7f63SJim Harris * You should have received a copy of the GNU General Public License 21f11c7f63SJim Harris * along with this program; if not, write to the Free Software 22f11c7f63SJim Harris * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 23f11c7f63SJim Harris * The full GNU General Public License is included in this distribution 24f11c7f63SJim Harris * in the file called LICENSE.GPL. 25f11c7f63SJim Harris * 26f11c7f63SJim Harris * BSD LICENSE 27f11c7f63SJim Harris * 28f11c7f63SJim Harris * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 29f11c7f63SJim Harris * All rights reserved. 30f11c7f63SJim Harris * 31f11c7f63SJim Harris * Redistribution and use in source and binary forms, with or without 32f11c7f63SJim Harris * modification, are permitted provided that the following conditions 33f11c7f63SJim Harris * are met: 34f11c7f63SJim Harris * 35f11c7f63SJim Harris * * Redistributions of source code must retain the above copyright 36f11c7f63SJim Harris * notice, this list of conditions and the following disclaimer. 37f11c7f63SJim Harris * * Redistributions in binary form must reproduce the above copyright 38f11c7f63SJim Harris * notice, this list of conditions and the following disclaimer in 39f11c7f63SJim Harris * the documentation and/or other materials provided with the 40f11c7f63SJim Harris * distribution. 41f11c7f63SJim Harris * 42f11c7f63SJim Harris * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 43f11c7f63SJim Harris * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 44f11c7f63SJim Harris * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 45f11c7f63SJim Harris * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 46f11c7f63SJim Harris * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 47f11c7f63SJim Harris * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 48f11c7f63SJim Harris * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 49f11c7f63SJim Harris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 50f11c7f63SJim Harris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 51f11c7f63SJim Harris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 52f11c7f63SJim Harris * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 53f11c7f63SJim Harris */ 54f11c7f63SJim Harris #ifndef _SCU_TASK_CONTEXT_H_ 55f11c7f63SJim Harris #define _SCU_TASK_CONTEXT_H_ 56f11c7f63SJim Harris 57f11c7f63SJim Harris /** 58f11c7f63SJim Harris * @file 59f11c7f63SJim Harris * 60f11c7f63SJim Harris * @brief This file contains the structures and constants for the SCU hardware 61f11c7f63SJim Harris * task context. 62f11c7f63SJim Harris */ 63f11c7f63SJim Harris 64f11c7f63SJim Harris #ifdef __cplusplus 65f11c7f63SJim Harris extern "C" { 66f11c7f63SJim Harris #endif // __cplusplus 67f11c7f63SJim Harris 68f11c7f63SJim Harris #include <dev/isci/scil/sci_types.h> 69f11c7f63SJim Harris 70f11c7f63SJim Harris /** 71f11c7f63SJim Harris * @enum SCU_SSP_TASK_TYPE 72f11c7f63SJim Harris * 73f11c7f63SJim Harris * @brief This enumberation defines the various SSP task types the SCU 74f11c7f63SJim Harris * hardware will accept. 75f11c7f63SJim Harris * 76f11c7f63SJim Harris * The definition for the various task types the SCU hardware will accept can 77f11c7f63SJim Harris * be found in the DS specification. 78f11c7f63SJim Harris */ 79f11c7f63SJim Harris typedef enum 80f11c7f63SJim Harris { 81f11c7f63SJim Harris SCU_TASK_TYPE_IOREAD, ///< IO READ direction or no direction 82f11c7f63SJim Harris SCU_TASK_TYPE_IOWRITE, ///< IO Write direction 83f11c7f63SJim Harris SCU_TASK_TYPE_SMP_REQUEST, ///< SMP Request type 84f11c7f63SJim Harris SCU_TASK_TYPE_RESPONSE, ///< Driver generated response frame (targt mode) 85f11c7f63SJim Harris SCU_TASK_TYPE_RAW_FRAME, ///< Raw frame request type 86f11c7f63SJim Harris SCU_TASK_TYPE_PRIMITIVE ///< Request for a primitive to be transmitted 87f11c7f63SJim Harris } SCU_SSP_TASK_TYPE; 88f11c7f63SJim Harris 89f11c7f63SJim Harris /** 90f11c7f63SJim Harris * @enum SCU_SATA_TASK_TYPE 91f11c7f63SJim Harris * 92f11c7f63SJim Harris * @brief This enumeration defines the various SATA task types the SCU 93f11c7f63SJim Harris * hardware will accept. 94f11c7f63SJim Harris * 95f11c7f63SJim Harris * The definition for the various task types the SCU hardware will accept can 96f11c7f63SJim Harris * be found in the DS specification. 97f11c7f63SJim Harris */ 98f11c7f63SJim Harris typedef enum 99f11c7f63SJim Harris { 100f11c7f63SJim Harris SCU_TASK_TYPE_DMA_IN, ///< Read request 101f11c7f63SJim Harris SCU_TASK_TYPE_FPDMAQ_READ, ///< NCQ read request 102f11c7f63SJim Harris SCU_TASK_TYPE_PACKET_DMA_IN, ///< Packet read request 103f11c7f63SJim Harris SCU_TASK_TYPE_SATA_RAW_FRAME, ///< Raw frame request 104f11c7f63SJim Harris RESERVED_4, 105f11c7f63SJim Harris RESERVED_5, 106f11c7f63SJim Harris RESERVED_6, 107f11c7f63SJim Harris RESERVED_7, 108f11c7f63SJim Harris SCU_TASK_TYPE_DMA_OUT, ///< Write request 109f11c7f63SJim Harris SCU_TASK_TYPE_FPDMAQ_WRITE, ///< NCQ write Request 110f11c7f63SJim Harris SCU_TASK_TYPE_PACKET_DMA_OUT ///< Packet write request 111f11c7f63SJim Harris } SCU_SATA_TASK_TYPE; 112f11c7f63SJim Harris 113f11c7f63SJim Harris 114f11c7f63SJim Harris /** 115f11c7f63SJim Harris * @name SCU_CONTEXT_TYPE 116f11c7f63SJim Harris */ 117f11c7f63SJim Harris /*@{*/ 118f11c7f63SJim Harris #define SCU_TASK_CONTEXT_TYPE 0 119f11c7f63SJim Harris #define SCU_RNC_CONTEXT_TYPE 1 120f11c7f63SJim Harris /*@}*/ 121f11c7f63SJim Harris 122f11c7f63SJim Harris /** 123f11c7f63SJim Harris * @name SCU_TASK_CONTEXT_VALIDITY 124f11c7f63SJim Harris */ 125f11c7f63SJim Harris /*@{*/ 126f11c7f63SJim Harris #define SCU_TASK_CONTEXT_INVALID 0 127f11c7f63SJim Harris #define SCU_TASK_CONTEXT_VALID 1 128f11c7f63SJim Harris /*@}*/ 129f11c7f63SJim Harris 130f11c7f63SJim Harris /** 131f11c7f63SJim Harris * @name SCU_COMMAND_CODE 132f11c7f63SJim Harris */ 133f11c7f63SJim Harris /*@{*/ 134f11c7f63SJim Harris #define SCU_COMMAND_CODE_INITIATOR_NEW_TASK 0 135f11c7f63SJim Harris #define SCU_COMMAND_CODE_ACTIVE_TASK 1 136f11c7f63SJim Harris #define SCU_COMMAND_CODE_PRIMITIVE_SEQ_TASK 2 137f11c7f63SJim Harris #define SCU_COMMAND_CODE_TARGET_RAW_FRAMES 3 138f11c7f63SJim Harris /*@}*/ 139f11c7f63SJim Harris 140f11c7f63SJim Harris /** 141f11c7f63SJim Harris * @name SCU_TASK_PRIORITY 142f11c7f63SJim Harris */ 143f11c7f63SJim Harris /*@{*/ 144f11c7f63SJim Harris /** 145f11c7f63SJim Harris * This priority is used when there is no priority request for this request. 146f11c7f63SJim Harris */ 147f11c7f63SJim Harris #define SCU_TASK_PRIORITY_NORMAL 0 148f11c7f63SJim Harris 149f11c7f63SJim Harris /** 150f11c7f63SJim Harris * This priority indicates that the task should be scheduled to the head 151f11c7f63SJim Harris * of the queue. The task will NOT be executed if the TX is suspended for 152f11c7f63SJim Harris * the remote node. 153f11c7f63SJim Harris */ 154f11c7f63SJim Harris #define SCU_TASK_PRIORITY_HEAD_OF_Q 1 155f11c7f63SJim Harris 156f11c7f63SJim Harris /** 157f11c7f63SJim Harris * This priority indicates that the task will be executed before all 158f11c7f63SJim Harris * SCU_TASK_PRIORITY_NORMAL and SCU_TASK_PRIORITY_HEAD_OF_Q tasks. 159f11c7f63SJim Harris * The task WILL be executed if the TX is suspended for the remote node. 160f11c7f63SJim Harris */ 161f11c7f63SJim Harris #define SCU_TASK_PRIORITY_HIGH 2 162f11c7f63SJim Harris 163f11c7f63SJim Harris /** 164f11c7f63SJim Harris * This task priority is reserved and should not be used. 165f11c7f63SJim Harris */ 166f11c7f63SJim Harris #define SCU_TASK_PRIORITY_RESERVED 3 167f11c7f63SJim Harris /*@}*/ 168f11c7f63SJim Harris 169f11c7f63SJim Harris #define SCU_TASK_INITIATOR_MODE 1 170f11c7f63SJim Harris #define SCU_TASK_TARGET_MODE 0 171f11c7f63SJim Harris 172f11c7f63SJim Harris #define SCU_TASK_REGULAR 0 173f11c7f63SJim Harris #define SCU_TASK_ABORTED 1 174f11c7f63SJim Harris 175453130d9SPedro F. Giffuni //direction bit definition 176f11c7f63SJim Harris /** 177f11c7f63SJim Harris * @name SATA_DIRECTION 178f11c7f63SJim Harris */ 179f11c7f63SJim Harris /*@{*/ 180f11c7f63SJim Harris #define SCU_SATA_WRITE_DATA_DIRECTION 0 181f11c7f63SJim Harris #define SCU_SATA_READ_DATA_DIRECTION 1 182f11c7f63SJim Harris /*@}*/ 183f11c7f63SJim Harris 184f11c7f63SJim Harris /** 185f11c7f63SJim Harris * @name SCU_COMMAND_CONTEXT_MACROS 186f11c7f63SJim Harris * 187f11c7f63SJim Harris * These macros provide the mask and shift operations to construct the various 188f11c7f63SJim Harris * SCU commands 189f11c7f63SJim Harris */ 190f11c7f63SJim Harris /*@{*/ 191f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_TYPE_SHIFT 21UL 192f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_TYPE_MASK 0x00E00000UL 193f11c7f63SJim Harris #define scu_get_command_request_type(x) \ 194f11c7f63SJim Harris ((x) & SCU_CONTEXT_COMMAND_REQUEST_TYPE_MASK) 195f11c7f63SJim Harris 196f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_SUBTYPE_SHIFT 18UL 197f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_SUBTYPE_MASK 0x001C0000UL 198f11c7f63SJim Harris #define scu_get_command_request_subtype(x) \ 199f11c7f63SJim Harris ((x) & SCU_CONTEXT_COMMAND_REQUEST_SUBTYPE_MASK) 200f11c7f63SJim Harris 201f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_FULLTYPE_MASK \ 202f11c7f63SJim Harris ( \ 203f11c7f63SJim Harris SCU_CONTEXT_COMMAND_REQUEST_TYPE_MASK \ 204f11c7f63SJim Harris | SCU_CONTEXT_COMMAND_REQUEST_SUBTYPE_MASK \ 205f11c7f63SJim Harris ) 206f11c7f63SJim Harris #define scu_get_command_request_full_type(x) \ 207f11c7f63SJim Harris ((x) & SCU_CONTEXT_COMMAND_REQUEST_FULLTYPE_MASK) 208f11c7f63SJim Harris 209f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_PROTOCOL_ENGINE_GROUP_SHIFT 16UL 210f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_PROTOCOL_ENGINE_GROUP_MASK 0x00010000UL 211f11c7f63SJim Harris #define scu_get_command_protocl_engine_group(x) \ 212f11c7f63SJim Harris ((x) & SCU_CONTEXT_COMMAND_PROTOCOL_ENGINE_GROUP_MASK) 213f11c7f63SJim Harris 214f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_LOGICAL_PORT_SHIFT 12UL 215f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_LOGICAL_PORT_MASK 0x00007000UL 216f11c7f63SJim Harris #define scu_get_command_reqeust_logical_port(x) \ 217f11c7f63SJim Harris ((x) & SCU_CONTEXT_COMMAND_LOGICAL_PORT_MASK) 218f11c7f63SJim Harris 219f11c7f63SJim Harris 220f11c7f63SJim Harris #define MAKE_SCU_CONTEXT_COMMAND_TYPE(type) \ 221f11c7f63SJim Harris ((U32)(type) << SCU_CONTEXT_COMMAND_REQUEST_TYPE_SHIFT) 222f11c7f63SJim Harris /*@}*/ 223f11c7f63SJim Harris 224f11c7f63SJim Harris /** 225f11c7f63SJim Harris * @name SCU_COMMAND_TYPES 226f11c7f63SJim Harris * 227f11c7f63SJim Harris * These constants provide the grouping of the different SCU command types. 228f11c7f63SJim Harris */ 229f11c7f63SJim Harris /*@{*/ 230f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_TC MAKE_SCU_CONTEXT_COMMAND_TYPE(0UL) 231f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_TYPE_DUMP_TC MAKE_SCU_CONTEXT_COMMAND_TYPE(1UL) 232f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_RNC MAKE_SCU_CONTEXT_COMMAND_TYPE(2UL) 233f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_TYPE_DUMP_RNC MAKE_SCU_CONTEXT_COMMAND_TYPE(3UL) 234f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_TYPE_OTHER_RNC MAKE_SCU_CONTEXT_COMMAND_TYPE(6UL) 235f11c7f63SJim Harris /*@}*/ 236f11c7f63SJim Harris 237f11c7f63SJim Harris #define MAKE_SCU_CONTEXT_COMMAND_REQUEST(type, command) \ 238f11c7f63SJim Harris ((type) | (((U32)(command)) << SCU_CONTEXT_COMMAND_REQUEST_SUBTYPE_SHIFT)) 239f11c7f63SJim Harris 240f11c7f63SJim Harris /** 241f11c7f63SJim Harris * @name SCU_REQUEST_TYPES 242f11c7f63SJim Harris * 243f11c7f63SJim Harris * These constants are the various request types that can be posted to the SCU 244f11c7f63SJim Harris * hardware. 245f11c7f63SJim Harris */ 246f11c7f63SJim Harris /*@{*/ 247f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUST_POST_TC \ 248f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_TC, 0)) 249f11c7f63SJim Harris 250f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUEST_POST_TC_ABORT \ 251f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_TC, 1)) 252f11c7f63SJim Harris 253f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_REQUST_DUMP_TC \ 254f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_DUMP_TC, 0)) 255f11c7f63SJim Harris 256f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_POST_RNC_32 \ 257f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_RNC, 0)) 258f11c7f63SJim Harris 259f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_POST_RNC_96 \ 260f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_RNC, 1)) 261f11c7f63SJim Harris 262f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_POST_RNC_INVALIDATE \ 263f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_RNC, 2)) 264f11c7f63SJim Harris 265f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_DUMP_RNC_32 \ 266f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_DUMP_RNC, 0)) 267f11c7f63SJim Harris 268f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_DUMP_RNC_96 \ 269f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_DUMP_RNC, 1)) 270f11c7f63SJim Harris 271f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_POST_RNC_SUSPEND_TX \ 272f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_OTHER_RNC, 0)) 273f11c7f63SJim Harris 274f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_POST_RNC_SUSPEND_TX_RX \ 275f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_OTHER_RNC, 1)) 276f11c7f63SJim Harris 277f11c7f63SJim Harris #define SCU_CONTEXT_COMMAND_POST_RNC_RESUME \ 278f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_OTHER_RNC, 2)) 279f11c7f63SJim Harris 280f11c7f63SJim Harris #define SCU_CONTEXT_IT_NEXUS_LOSS_TIMER_ENABLE \ 281f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_OTHER_RNC, 3)) 282f11c7f63SJim Harris 283f11c7f63SJim Harris #define SCU_CONTEXT_IT_NEXUS_LOSS_TIMER_DISABLE \ 284f11c7f63SJim Harris (MAKE_SCU_CONTEXT_COMMAND_REQUEST(SCU_CONTEXT_COMMAND_REQUEST_TYPE_OTHER_RNC, 4)) 285f11c7f63SJim Harris /*@}*/ 286f11c7f63SJim Harris 287f11c7f63SJim Harris /** 288f11c7f63SJim Harris * @name SCU_TASK_CONTEXT_PROTOCOL 289f11c7f63SJim Harris * SCU Task context protocol types this is uesd to program the SCU Task 290f11c7f63SJim Harris * context protocol field in word 0x00. 291f11c7f63SJim Harris */ 292f11c7f63SJim Harris /*@{*/ 293f11c7f63SJim Harris #define SCU_TASK_CONTEXT_PROTOCOL_SMP 0x00 294f11c7f63SJim Harris #define SCU_TASK_CONTEXT_PROTOCOL_SSP 0x01 295f11c7f63SJim Harris #define SCU_TASK_CONTEXT_PROTOCOL_STP 0x02 296f11c7f63SJim Harris #define SCU_TASK_CONTEXT_PROTOCOL_NONE 0x07 297f11c7f63SJim Harris /*@}*/ 298f11c7f63SJim Harris 299f11c7f63SJim Harris /** 300f11c7f63SJim Harris * @struct SSP_TASK_CONTEXT 301f11c7f63SJim Harris * 302f11c7f63SJim Harris * @brief This is the SCU hardware definition for an SSP request. 303f11c7f63SJim Harris */ 304f11c7f63SJim Harris struct SSP_TASK_CONTEXT 305f11c7f63SJim Harris { 306f11c7f63SJim Harris // OFFSET 0x18 307f11c7f63SJim Harris U32 reserved00 : 24; 308f11c7f63SJim Harris U32 frame_type : 8; 309f11c7f63SJim Harris 310f11c7f63SJim Harris // OFFSET 0x1C 311f11c7f63SJim Harris U32 reserved01; 312f11c7f63SJim Harris 313f11c7f63SJim Harris // OFFSET 0x20 314f11c7f63SJim Harris U32 fill_bytes : 2; 315f11c7f63SJim Harris U32 reserved02 : 6; 316f11c7f63SJim Harris U32 changing_data_pointer : 1; 317f11c7f63SJim Harris U32 retransmit : 1; 318f11c7f63SJim Harris U32 retry_data_frame : 1; 319f11c7f63SJim Harris U32 tlr_control : 2; 320f11c7f63SJim Harris U32 reserved03 : 19; 321f11c7f63SJim Harris 322f11c7f63SJim Harris // OFFSET 0x24 323f11c7f63SJim Harris U32 uiRsvd4; 324f11c7f63SJim Harris 325f11c7f63SJim Harris // OFFSET 0x28 326f11c7f63SJim Harris U32 target_port_transfer_tag : 16; 327f11c7f63SJim Harris U32 tag : 16; 328f11c7f63SJim Harris 329f11c7f63SJim Harris // OFFSET 0x2C 330f11c7f63SJim Harris U32 data_offset; 331f11c7f63SJim Harris }; 332f11c7f63SJim Harris 333f11c7f63SJim Harris /** 334f11c7f63SJim Harris * @struct STP_TASK_CONTEXT 335f11c7f63SJim Harris * 336f11c7f63SJim Harris * @brief This is the SCU hardware definition for an STP request. 337f11c7f63SJim Harris */ 338f11c7f63SJim Harris struct STP_TASK_CONTEXT 339f11c7f63SJim Harris { 340f11c7f63SJim Harris // OFFSET 0x18 341f11c7f63SJim Harris U32 fis_type : 8; 342f11c7f63SJim Harris U32 pm_port : 4; 343f11c7f63SJim Harris U32 reserved0 : 3; 344f11c7f63SJim Harris U32 control : 1; 345f11c7f63SJim Harris U32 command : 8; 346f11c7f63SJim Harris U32 features : 8; 347f11c7f63SJim Harris 348f11c7f63SJim Harris // OFFSET 0x1C 349f11c7f63SJim Harris U32 reserved1; 350f11c7f63SJim Harris 351f11c7f63SJim Harris // OFFSET 0x20 352f11c7f63SJim Harris U32 reserved2; 353f11c7f63SJim Harris 354f11c7f63SJim Harris // OFFSET 0x24 355f11c7f63SJim Harris U32 reserved3; 356f11c7f63SJim Harris 357f11c7f63SJim Harris // OFFSET 0x28 358f11c7f63SJim Harris U32 ncq_tag : 5; 359f11c7f63SJim Harris U32 reserved4 : 27; 360f11c7f63SJim Harris 361f11c7f63SJim Harris // OFFSET 0x2C 362f11c7f63SJim Harris U32 data_offset; // TODO: What is this used for? 363f11c7f63SJim Harris }; 364f11c7f63SJim Harris 365f11c7f63SJim Harris /** 366f11c7f63SJim Harris * @struct SMP_TASK_CONTEXT 367f11c7f63SJim Harris * 368f11c7f63SJim Harris * @brief This is the SCU hardware definition for an SMP request. 369f11c7f63SJim Harris */ 370f11c7f63SJim Harris struct SMP_TASK_CONTEXT 371f11c7f63SJim Harris { 372f11c7f63SJim Harris // OFFSET 0x18 373f11c7f63SJim Harris U32 response_length : 8; 374f11c7f63SJim Harris U32 function_result : 8; 375f11c7f63SJim Harris U32 function : 8; 376f11c7f63SJim Harris U32 frame_type : 8; 377f11c7f63SJim Harris 378f11c7f63SJim Harris // OFFSET 0x1C 379f11c7f63SJim Harris U32 smp_response_ufi : 12; 380f11c7f63SJim Harris U32 reserved1 : 20; 381f11c7f63SJim Harris 382f11c7f63SJim Harris // OFFSET 0x20 383f11c7f63SJim Harris U32 reserved2; 384f11c7f63SJim Harris 385f11c7f63SJim Harris // OFFSET 0x24 386f11c7f63SJim Harris U32 reserved3; 387f11c7f63SJim Harris 388f11c7f63SJim Harris // OFFSET 0x28 389f11c7f63SJim Harris U32 reserved4; 390f11c7f63SJim Harris 391f11c7f63SJim Harris // OFFSET 0x2C 392f11c7f63SJim Harris U32 reserved5; 393f11c7f63SJim Harris }; 394f11c7f63SJim Harris 395f11c7f63SJim Harris /** 396f11c7f63SJim Harris * @struct PRIMITIVE_TASK_CONTEXT 397f11c7f63SJim Harris * 398f11c7f63SJim Harris * @brief This is the SCU hardware definition used when the driver wants to 399f11c7f63SJim Harris * send a primitive on the link. 400f11c7f63SJim Harris */ 401f11c7f63SJim Harris struct PRIMITIVE_TASK_CONTEXT 402f11c7f63SJim Harris { 403f11c7f63SJim Harris // OFFSET 0x18 404f11c7f63SJim Harris /** 405f11c7f63SJim Harris * This field is the control word and it must be 0. 406f11c7f63SJim Harris */ 407f11c7f63SJim Harris U32 control; ///< must be set to 0 408f11c7f63SJim Harris 409f11c7f63SJim Harris // OFFSET 0x1C 410f11c7f63SJim Harris /** 411f11c7f63SJim Harris * This field specifies the primitive that is to be transmitted. 412f11c7f63SJim Harris */ 413f11c7f63SJim Harris U32 sequence; 414f11c7f63SJim Harris 415f11c7f63SJim Harris // OFFSET 0x20 416f11c7f63SJim Harris U32 reserved0; 417f11c7f63SJim Harris 418f11c7f63SJim Harris // OFFSET 0x24 419f11c7f63SJim Harris U32 reserved1; 420f11c7f63SJim Harris 421f11c7f63SJim Harris // OFFSET 0x28 422f11c7f63SJim Harris U32 reserved2; 423f11c7f63SJim Harris 424f11c7f63SJim Harris // OFFSET 0x2C 425f11c7f63SJim Harris U32 reserved3; 426f11c7f63SJim Harris }; 427f11c7f63SJim Harris 428f11c7f63SJim Harris /** 429f11c7f63SJim Harris * @union PROTOCOL_CONTEXT 430f11c7f63SJim Harris * 431f11c7f63SJim Harris * @brief The union of the protocols that can be selected in the SCU task 432f11c7f63SJim Harris * context field. 433f11c7f63SJim Harris */ 434f11c7f63SJim Harris union PROTOCOL_CONTEXT 435f11c7f63SJim Harris { 436f11c7f63SJim Harris struct SSP_TASK_CONTEXT ssp; 437f11c7f63SJim Harris struct STP_TASK_CONTEXT stp; 438f11c7f63SJim Harris struct SMP_TASK_CONTEXT smp; 439f11c7f63SJim Harris struct PRIMITIVE_TASK_CONTEXT primitive; 440f11c7f63SJim Harris U32 words[6]; 441f11c7f63SJim Harris }; 442f11c7f63SJim Harris 443f11c7f63SJim Harris /** 444f11c7f63SJim Harris * @struct SCU_SGL_ELEMENT 445f11c7f63SJim Harris * @typedef SCU_SGL_ELEMENT_T 446f11c7f63SJim Harris * 447f11c7f63SJim Harris * @brief This structure represents a single SCU defined SGL element. 448f11c7f63SJim Harris * 449f11c7f63SJim Harris * SCU SGLs contain a 64 bit address with the maximum data transfer being 24 450f11c7f63SJim Harris * bits in size. The SGL can not cross a 4GB boundary. 451f11c7f63SJim Harris */ 452f11c7f63SJim Harris typedef struct SCU_SGL_ELEMENT 453f11c7f63SJim Harris { 454f11c7f63SJim Harris /** 455f11c7f63SJim Harris * This field is the upper 32 bits of the 64 bit physical address. 456f11c7f63SJim Harris */ 457f11c7f63SJim Harris U32 address_upper; 458f11c7f63SJim Harris 459f11c7f63SJim Harris /** 460f11c7f63SJim Harris * This field is the lower 32 bits of the 64 bit physical address. 461f11c7f63SJim Harris */ 462f11c7f63SJim Harris U32 address_lower; 463f11c7f63SJim Harris 464f11c7f63SJim Harris /** 465f11c7f63SJim Harris * This field is the number of bytes to transfer. 466f11c7f63SJim Harris */ 467f11c7f63SJim Harris U32 length: 24; 468f11c7f63SJim Harris 469f11c7f63SJim Harris /** 470f11c7f63SJim Harris * This field is the address modifier to be used when a virtual function is 471f11c7f63SJim Harris * requesting a data transfer. 472f11c7f63SJim Harris */ 473f11c7f63SJim Harris U32 address_modifier: 8; 474f11c7f63SJim Harris 475f11c7f63SJim Harris } SCU_SGL_ELEMENT_T; 476f11c7f63SJim Harris 477f11c7f63SJim Harris #define SCU_SGL_ELEMENT_PAIR_A 0 478f11c7f63SJim Harris #define SCU_SGL_ELEMENT_PAIR_B 1 479f11c7f63SJim Harris 480f11c7f63SJim Harris /** 481f11c7f63SJim Harris * @struct SCU_SGL_ELEMENT_PAIR 482f11c7f63SJim Harris * 483f11c7f63SJim Harris * @brief This structure is the SCU hardware definition of a pair of SGL 484f11c7f63SJim Harris * elements. 485f11c7f63SJim Harris * 486453130d9SPedro F. Giffuni * The SCU hardware always works on SGL pairs. They are referred to in the DS 487f11c7f63SJim Harris * specification as SGL A and SGL B. Each SGL pair is followed by the address 488f11c7f63SJim Harris * of the next pair. 489f11c7f63SJim Harris */ 490f11c7f63SJim Harris typedef struct SCU_SGL_ELEMENT_PAIR 491f11c7f63SJim Harris { 492f11c7f63SJim Harris // OFFSET 0x60-0x68 493f11c7f63SJim Harris /** 494f11c7f63SJim Harris * This field is the SGL element A of the SGL pair. 495f11c7f63SJim Harris */ 496f11c7f63SJim Harris SCU_SGL_ELEMENT_T A; 497f11c7f63SJim Harris 498f11c7f63SJim Harris // OFFSET 0x6C-0x74 499f11c7f63SJim Harris /** 500f11c7f63SJim Harris * This field is the SGL element B of the SGL pair. 501f11c7f63SJim Harris */ 502f11c7f63SJim Harris SCU_SGL_ELEMENT_T B; 503f11c7f63SJim Harris 504f11c7f63SJim Harris // OFFSET 0x78-0x7C 505f11c7f63SJim Harris /** 506f11c7f63SJim Harris * This field is the upper 32 bits of the 64 bit address to the next SGL 507f11c7f63SJim Harris * element pair. 508f11c7f63SJim Harris */ 509f11c7f63SJim Harris U32 next_pair_upper; 510f11c7f63SJim Harris 511f11c7f63SJim Harris /** 512f11c7f63SJim Harris * This field is the lower 32 bits of the 64 bit address to the next SGL 513f11c7f63SJim Harris * element pair. 514f11c7f63SJim Harris */ 515f11c7f63SJim Harris U32 next_pair_lower; 516f11c7f63SJim Harris 517f11c7f63SJim Harris } SCU_SGL_ELEMENT_PAIR_T; 518f11c7f63SJim Harris 519f11c7f63SJim Harris /** 520f11c7f63SJim Harris * @struct TRANSPORT_SNAPSHOT 521f11c7f63SJim Harris * 522f11c7f63SJim Harris * @brief This structure is the SCU hardware scratch area for the task 523f11c7f63SJim Harris * context. 524f11c7f63SJim Harris * 525f11c7f63SJim Harris * This is set to 0 by the driver but can be read by issuing a dump TC request 526f11c7f63SJim Harris * to the SCU. 527f11c7f63SJim Harris */ 528f11c7f63SJim Harris struct TRANSPORT_SNAPSHOT 529f11c7f63SJim Harris { 530f11c7f63SJim Harris // OFFSET 0x48 531f11c7f63SJim Harris U32 xfer_rdy_write_data_length; 532f11c7f63SJim Harris 533f11c7f63SJim Harris // OFFSET 0x4C 534f11c7f63SJim Harris U32 data_offset; 535f11c7f63SJim Harris 536f11c7f63SJim Harris // OFFSET 0x50 537f11c7f63SJim Harris U32 data_transfer_size : 24; 538f11c7f63SJim Harris U32 reserved_50_0 : 8; 539f11c7f63SJim Harris 540f11c7f63SJim Harris // OFFSET 0x54 541f11c7f63SJim Harris U32 next_initiator_write_data_offset; 542f11c7f63SJim Harris 543f11c7f63SJim Harris // OFFSET 0x58 544f11c7f63SJim Harris U32 next_initiator_write_data_xfer_size : 24; 545f11c7f63SJim Harris U32 reserved_58_0 : 8; 546f11c7f63SJim Harris }; 547f11c7f63SJim Harris 548f11c7f63SJim Harris /** 549f11c7f63SJim Harris * @struct SCU_TASK_CONTEXT 550f11c7f63SJim Harris * 551f11c7f63SJim Harris * @brief This structure defines the contents of the SCU silicon task context. 552f11c7f63SJim Harris * It lays out all of the fields according to the expected order and 553f11c7f63SJim Harris * location for the Storage Controller unit. 554f11c7f63SJim Harris */ 555f11c7f63SJim Harris typedef struct SCU_TASK_CONTEXT 556f11c7f63SJim Harris { 557f11c7f63SJim Harris // OFFSET 0x00 ------ 558f11c7f63SJim Harris /** 559f11c7f63SJim Harris * This field must be encoded to one of the valid SCU task priority values 560f11c7f63SJim Harris * - SCU_TASK_PRIORITY_NORMAL 561f11c7f63SJim Harris * - SCU_TASK_PRIORITY_HEAD_OF_Q 562f11c7f63SJim Harris * - SCU_TASK_PRIORITY_HIGH 563f11c7f63SJim Harris */ 564f11c7f63SJim Harris U32 priority : 2; 565f11c7f63SJim Harris 566f11c7f63SJim Harris /** 567f11c7f63SJim Harris * This field must be set to TRUE if this is an initiator generated request. 568f11c7f63SJim Harris * Until target mode is supported all task requests are initiator requests. 569f11c7f63SJim Harris */ 570f11c7f63SJim Harris U32 initiator_request : 1; 571f11c7f63SJim Harris 572f11c7f63SJim Harris /** 573f11c7f63SJim Harris * This field must be set to one of the valid connection rates valid values 574f11c7f63SJim Harris * are 0x8, 0x9, and 0xA. 575f11c7f63SJim Harris */ 576f11c7f63SJim Harris U32 connection_rate : 4; 577f11c7f63SJim Harris 578f11c7f63SJim Harris /** 579f11c7f63SJim Harris * This field muse be programed when generating an SMP response since the SMP 580f11c7f63SJim Harris * connection remains open until the SMP response is generated. 581f11c7f63SJim Harris */ 582f11c7f63SJim Harris U32 protocol_engine_index : 3; 583f11c7f63SJim Harris 584f11c7f63SJim Harris /** 585f11c7f63SJim Harris * This field must contain the logical port for the task request. 586f11c7f63SJim Harris */ 587f11c7f63SJim Harris U32 logical_port_index : 3; 588f11c7f63SJim Harris 589f11c7f63SJim Harris /** 590f11c7f63SJim Harris * This field must be set to one of the SCU_TASK_CONTEXT_PROTOCOL values 591f11c7f63SJim Harris * - SCU_TASK_CONTEXT_PROTOCOL_SMP 592f11c7f63SJim Harris * - SCU_TASK_CONTEXT_PROTOCOL_SSP 593f11c7f63SJim Harris * - SCU_TASK_CONTEXT_PROTOCOL_STP 594f11c7f63SJim Harris * - SCU_TASK_CONTEXT_PROTOCOL_NONE 595f11c7f63SJim Harris */ 596f11c7f63SJim Harris U32 protocol_type : 3; 597f11c7f63SJim Harris 598f11c7f63SJim Harris /** 599f11c7f63SJim Harris * This filed must be set to the TCi allocated for this task 600f11c7f63SJim Harris */ 601f11c7f63SJim Harris U32 task_index : 12; 602f11c7f63SJim Harris 603f11c7f63SJim Harris /** 604f11c7f63SJim Harris * This field is reserved and must be set to 0x00 605f11c7f63SJim Harris */ 606f11c7f63SJim Harris U32 reserved_00_0 : 1; 607f11c7f63SJim Harris 608f11c7f63SJim Harris /** 609f11c7f63SJim Harris * For a normal task request this must be set to 0. If this is an abort of 610f11c7f63SJim Harris * this task request it must be set to 1. 611f11c7f63SJim Harris */ 612f11c7f63SJim Harris U32 abort : 1; 613f11c7f63SJim Harris 614f11c7f63SJim Harris /** 615f11c7f63SJim Harris * This field must be set to TRUE for the SCU hardware to process the task. 616f11c7f63SJim Harris */ 617f11c7f63SJim Harris U32 valid : 1; 618f11c7f63SJim Harris 619f11c7f63SJim Harris /** 620f11c7f63SJim Harris * This field must be set to SCU_TASK_CONTEXT_TYPE 621f11c7f63SJim Harris */ 622f11c7f63SJim Harris U32 context_type : 1; 623f11c7f63SJim Harris 624f11c7f63SJim Harris // OFFSET 0x04 625f11c7f63SJim Harris /** 626f11c7f63SJim Harris * This field contains the RNi that is the target of this request. 627f11c7f63SJim Harris */ 628f11c7f63SJim Harris U32 remote_node_index : 12; 629f11c7f63SJim Harris 630f11c7f63SJim Harris /** 631f11c7f63SJim Harris * This field is programmed if this is a mirrored request, which we are not 632f11c7f63SJim Harris * using, in which case it is the RNi for the mirrored target. 633f11c7f63SJim Harris */ 634f11c7f63SJim Harris U32 mirrored_node_index : 12; 635f11c7f63SJim Harris 636f11c7f63SJim Harris /** 637f11c7f63SJim Harris * This field is programmed with the direction of the SATA reqeust 638f11c7f63SJim Harris * - SCU_SATA_WRITE_DATA_DIRECTION 639f11c7f63SJim Harris * - SCU_SATA_READ_DATA_DIRECTION 640f11c7f63SJim Harris */ 641f11c7f63SJim Harris U32 sata_direction : 1; 642f11c7f63SJim Harris 643f11c7f63SJim Harris /** 644f11c7f63SJim Harris * This field is programmsed with one of the following SCU_COMMAND_CODE 645f11c7f63SJim Harris * - SCU_COMMAND_CODE_INITIATOR_NEW_TASK 646f11c7f63SJim Harris * - SCU_COMMAND_CODE_ACTIVE_TASK 647f11c7f63SJim Harris * - SCU_COMMAND_CODE_PRIMITIVE_SEQ_TASK 648f11c7f63SJim Harris * - SCU_COMMAND_CODE_TARGET_RAW_FRAMES 649f11c7f63SJim Harris */ 650f11c7f63SJim Harris U32 command_code : 2; 651f11c7f63SJim Harris 652f11c7f63SJim Harris /** 653f11c7f63SJim Harris * This field is set to TRUE if the remote node should be suspended. 654f11c7f63SJim Harris * This bit is only valid for SSP & SMP target devices. 655f11c7f63SJim Harris */ 656f11c7f63SJim Harris U32 suspend_node : 1; 657f11c7f63SJim Harris 658f11c7f63SJim Harris /** 659f11c7f63SJim Harris * This field is programmed with one of the following command type codes 660f11c7f63SJim Harris * 661f11c7f63SJim Harris * For SAS requests use the SCU_SSP_TASK_TYPE 662f11c7f63SJim Harris * - SCU_TASK_TYPE_IOREAD 663f11c7f63SJim Harris * - SCU_TASK_TYPE_IOWRITE 664f11c7f63SJim Harris * - SCU_TASK_TYPE_SMP_REQUEST 665f11c7f63SJim Harris * - SCU_TASK_TYPE_RESPONSE 666f11c7f63SJim Harris * - SCU_TASK_TYPE_RAW_FRAME 667f11c7f63SJim Harris * - SCU_TASK_TYPE_PRIMITIVE 668f11c7f63SJim Harris * 669f11c7f63SJim Harris * For SATA requests use the SCU_SATA_TASK_TYPE 670f11c7f63SJim Harris * - SCU_TASK_TYPE_DMA_IN 671f11c7f63SJim Harris * - SCU_TASK_TYPE_FPDMAQ_READ 672f11c7f63SJim Harris * - SCU_TASK_TYPE_PACKET_DMA_IN 673f11c7f63SJim Harris * - SCU_TASK_TYPE_SATA_RAW_FRAME 674f11c7f63SJim Harris * - SCU_TASK_TYPE_DMA_OUT 675f11c7f63SJim Harris * - SCU_TASK_TYPE_FPDMAQ_WRITE 676f11c7f63SJim Harris * - SCU_TASK_TYPE_PACKET_DMA_OUT 677f11c7f63SJim Harris */ 678f11c7f63SJim Harris U32 task_type : 4; 679f11c7f63SJim Harris 680f11c7f63SJim Harris // OFFSET 0x08 681f11c7f63SJim Harris /** 682f11c7f63SJim Harris * This field is reserved and the must be set to 0x00 683f11c7f63SJim Harris */ 684f11c7f63SJim Harris U32 link_layer_control : 8; // presently all reserved 685f11c7f63SJim Harris 686f11c7f63SJim Harris /** 687f11c7f63SJim Harris * This field is set to TRUE when TLR is to be enabled 688f11c7f63SJim Harris */ 689f11c7f63SJim Harris U32 ssp_tlr_enable : 1; 690f11c7f63SJim Harris 691f11c7f63SJim Harris /** 692f11c7f63SJim Harris * This is field specifies if the SCU DMAs a response frame to host 693f11c7f63SJim Harris * memory for good response frames when operating in target mode. 694f11c7f63SJim Harris */ 695f11c7f63SJim Harris U32 dma_ssp_target_good_response : 1; 696f11c7f63SJim Harris 697f11c7f63SJim Harris /** 698f11c7f63SJim Harris * This field indicates if the SCU should DMA the response frame to 699f11c7f63SJim Harris * host memory. 700f11c7f63SJim Harris */ 701f11c7f63SJim Harris U32 do_not_dma_ssp_good_response : 1; 702f11c7f63SJim Harris 703f11c7f63SJim Harris /** 704f11c7f63SJim Harris * This field is set to TRUE when strict ordering is to be enabled 705f11c7f63SJim Harris */ 706f11c7f63SJim Harris U32 strict_ordering : 1; 707f11c7f63SJim Harris 708f11c7f63SJim Harris /** 709453130d9SPedro F. Giffuni * This field indicates the type of endianness to be utilized for the 710f11c7f63SJim Harris * frame. command, task, and response frames utilized control_frame 711f11c7f63SJim Harris * set to 1. 712f11c7f63SJim Harris */ 713f11c7f63SJim Harris U32 control_frame : 1; 714f11c7f63SJim Harris 715f11c7f63SJim Harris /** 716f11c7f63SJim Harris * This field is reserved and the driver should set to 0x00 717f11c7f63SJim Harris */ 718f11c7f63SJim Harris U32 tl_control_reserved : 3; 719f11c7f63SJim Harris 720f11c7f63SJim Harris /** 721f11c7f63SJim Harris * This field is set to TRUE when the SCU hardware task timeout control is to 722f11c7f63SJim Harris * be enabled 723f11c7f63SJim Harris */ 724f11c7f63SJim Harris U32 timeout_enable : 1; 725f11c7f63SJim Harris 726f11c7f63SJim Harris /** 727f11c7f63SJim Harris * This field is reserved and the driver should set it to 0x00 728f11c7f63SJim Harris */ 729f11c7f63SJim Harris U32 pts_control_reserved : 7; 730f11c7f63SJim Harris 731f11c7f63SJim Harris /** 732f11c7f63SJim Harris * This field should be set to TRUE when block guard is to be enabled 733f11c7f63SJim Harris */ 734f11c7f63SJim Harris U32 block_guard_enable : 1; 735f11c7f63SJim Harris 736f11c7f63SJim Harris /** 737f11c7f63SJim Harris * This field is reserved and the driver should set to 0x00 738f11c7f63SJim Harris */ 739f11c7f63SJim Harris U32 sdma_control_reserved : 7; 740f11c7f63SJim Harris 741f11c7f63SJim Harris // OFFSET 0x0C 742f11c7f63SJim Harris /** 743f11c7f63SJim Harris * This field is the address modifier for this io request it should be 744f11c7f63SJim Harris * programmed with the virtual function that is making the request. 745f11c7f63SJim Harris */ 746f11c7f63SJim Harris U32 address_modifier : 16; 747f11c7f63SJim Harris 748f11c7f63SJim Harris /** 749f11c7f63SJim Harris * @todo What we support mirrored SMP response frame? 750f11c7f63SJim Harris */ 751f11c7f63SJim Harris U32 mirrored_protocol_engine : 3; // mirrored protocol Engine Index 752f11c7f63SJim Harris 753f11c7f63SJim Harris /** 754f11c7f63SJim Harris * If this is a mirrored request the logical port index for the mirrored RNi 755f11c7f63SJim Harris * must be programmed. 756f11c7f63SJim Harris */ 757f11c7f63SJim Harris U32 mirrored_logical_port : 4; // mirrored local port index 758f11c7f63SJim Harris 759f11c7f63SJim Harris /** 760f11c7f63SJim Harris * This field is reserved and the driver must set it to 0x00 761f11c7f63SJim Harris */ 762f11c7f63SJim Harris U32 reserved_0C_0 : 8; 763f11c7f63SJim Harris 764f11c7f63SJim Harris /** 765f11c7f63SJim Harris * This field must be set to TRUE if the mirrored request processing is to be 766f11c7f63SJim Harris * enabled. 767f11c7f63SJim Harris */ 768f11c7f63SJim Harris U32 mirror_request_enable : 1; // Mirrored request Enable 769f11c7f63SJim Harris 770f11c7f63SJim Harris // OFFSET 0x10 771f11c7f63SJim Harris /** 772f11c7f63SJim Harris * This field is the command iu length in dwords 773f11c7f63SJim Harris */ 774f11c7f63SJim Harris U32 ssp_command_iu_length : 8; 775f11c7f63SJim Harris 776f11c7f63SJim Harris /** 777f11c7f63SJim Harris * This is the target TLR enable bit it must be set to 0 when creatning the 778f11c7f63SJim Harris * task context. 779f11c7f63SJim Harris */ 780f11c7f63SJim Harris U32 xfer_ready_tlr_enable : 1; 781f11c7f63SJim Harris 782f11c7f63SJim Harris /** 783f11c7f63SJim Harris * This field is reserved and the driver must set it to 0x00 784f11c7f63SJim Harris */ 785f11c7f63SJim Harris U32 reserved_10_0 : 7; 786f11c7f63SJim Harris 787f11c7f63SJim Harris /** 788f11c7f63SJim Harris * This is the maximum burst size that the SCU hardware will send in one 789f11c7f63SJim Harris * connection its value is (N x 512) and N must be a multiple of 2. If the 790f11c7f63SJim Harris * value is 0x00 then maximum burst size is disabled. 791f11c7f63SJim Harris */ 792f11c7f63SJim Harris U32 ssp_max_burst_size : 16; 793f11c7f63SJim Harris 794f11c7f63SJim Harris // OFFSET 0x14 795f11c7f63SJim Harris /** 796453130d9SPedro F. Giffuni * This filed is set to the number of bytes to be transferred in the request. 797f11c7f63SJim Harris */ 798f11c7f63SJim Harris U32 transfer_length_bytes : 24; // In terms of bytes 799f11c7f63SJim Harris 800f11c7f63SJim Harris /** 801f11c7f63SJim Harris * This field is reserved and the driver should set it to 0x00 802f11c7f63SJim Harris */ 803f11c7f63SJim Harris U32 reserved_14_0 : 8; 804f11c7f63SJim Harris 805f11c7f63SJim Harris // OFFSET 0x18-0x2C 806f11c7f63SJim Harris /** 807453130d9SPedro F. Giffuni * This union provides for the protocol specific part of the SCU Task Context. 808f11c7f63SJim Harris */ 809f11c7f63SJim Harris union PROTOCOL_CONTEXT type; 810f11c7f63SJim Harris 811f11c7f63SJim Harris // OFFSET 0x30-0x34 812f11c7f63SJim Harris /** 813f11c7f63SJim Harris * This field is the upper 32 bits of the 64 bit physical address of the 814f11c7f63SJim Harris * command iu buffer 815f11c7f63SJim Harris */ 816f11c7f63SJim Harris U32 command_iu_upper; 817f11c7f63SJim Harris 818f11c7f63SJim Harris /** 819f11c7f63SJim Harris * This field is the lower 32 bits of the 64 bit physical address of the 820f11c7f63SJim Harris * command iu buffer 821f11c7f63SJim Harris */ 822f11c7f63SJim Harris U32 command_iu_lower; 823f11c7f63SJim Harris 824f11c7f63SJim Harris // OFFSET 0x38-0x3C 825f11c7f63SJim Harris /** 826f11c7f63SJim Harris * This field is the upper 32 bits of the 64 bit physical address of the 827f11c7f63SJim Harris * response iu buffer 828f11c7f63SJim Harris */ 829f11c7f63SJim Harris U32 response_iu_upper; 830f11c7f63SJim Harris 831f11c7f63SJim Harris /** 832f11c7f63SJim Harris * This field is the lower 32 bits of the 64 bit physical address of the 833f11c7f63SJim Harris * response iu buffer 834f11c7f63SJim Harris */ 835f11c7f63SJim Harris U32 response_iu_lower; 836f11c7f63SJim Harris 837f11c7f63SJim Harris // OFFSET 0x40 838f11c7f63SJim Harris /** 839f11c7f63SJim Harris * This field is set to the task phase of the SCU hardware. The driver must 840f11c7f63SJim Harris * set this to 0x01 841f11c7f63SJim Harris */ 842f11c7f63SJim Harris U32 task_phase : 8; 843f11c7f63SJim Harris 844f11c7f63SJim Harris /** 845f11c7f63SJim Harris * This field is set to the transport layer task status. The driver must set 846f11c7f63SJim Harris * this to 0x00 847f11c7f63SJim Harris */ 848f11c7f63SJim Harris U32 task_status : 8; 849f11c7f63SJim Harris 850f11c7f63SJim Harris /** 851f11c7f63SJim Harris * This field is used during initiator write TLR 852f11c7f63SJim Harris */ 853f11c7f63SJim Harris U32 previous_extended_tag : 4; 854f11c7f63SJim Harris 855f11c7f63SJim Harris /** 856f11c7f63SJim Harris * This field is set the maximum number of retries for a STP non-data FIS 857f11c7f63SJim Harris */ 858f11c7f63SJim Harris U32 stp_retry_count : 2; 859f11c7f63SJim Harris 860f11c7f63SJim Harris /** 861f11c7f63SJim Harris * This field is reserved and the driver must set it to 0x00 862f11c7f63SJim Harris */ 863f11c7f63SJim Harris U32 reserved_40_1 : 2; 864f11c7f63SJim Harris 865f11c7f63SJim Harris /** 866f11c7f63SJim Harris * This field is used by the SCU TL to determine when to take a snapshot when 867f11c7f63SJim Harris * tranmitting read data frames. 868f11c7f63SJim Harris * - 0x00 The entire IO 869f11c7f63SJim Harris * - 0x01 32k 870f11c7f63SJim Harris * - 0x02 64k 871f11c7f63SJim Harris * - 0x04 128k 872f11c7f63SJim Harris * - 0x08 256k 873f11c7f63SJim Harris */ 874f11c7f63SJim Harris U32 ssp_tlr_threshold : 4; 875f11c7f63SJim Harris 876f11c7f63SJim Harris /** 877f11c7f63SJim Harris * This field is reserved and the driver must set it to 0x00 878f11c7f63SJim Harris */ 879f11c7f63SJim Harris U32 reserved_40_2 : 4; 880f11c7f63SJim Harris 881f11c7f63SJim Harris // OFFSET 0x44 882f11c7f63SJim Harris U32 write_data_length; // read only set to 0 883f11c7f63SJim Harris 884f11c7f63SJim Harris // OFFSET 0x48-0x58 885f11c7f63SJim Harris struct TRANSPORT_SNAPSHOT snapshot; // read only set to 0 886f11c7f63SJim Harris 887f11c7f63SJim Harris // OFFSET 0x5C 888f11c7f63SJim Harris U32 block_protection_enable : 1; 889f11c7f63SJim Harris U32 block_size : 2; 890f11c7f63SJim Harris U32 block_protection_function : 2; 891f11c7f63SJim Harris U32 reserved_5C_0 : 9; 892f11c7f63SJim Harris U32 active_sgl_element : 2; // read only set to 0 893f11c7f63SJim Harris U32 sgl_exhausted : 1; // read only set to 0 894f11c7f63SJim Harris U32 payload_data_transfer_error : 4; // read only set to 0 895f11c7f63SJim Harris U32 frame_buffer_offset : 11; // read only set to 0 896f11c7f63SJim Harris 897f11c7f63SJim Harris // OFFSET 0x60-0x7C 898f11c7f63SJim Harris /** 899f11c7f63SJim Harris * This field is the first SGL element pair found in the TC data structure. 900f11c7f63SJim Harris */ 901f11c7f63SJim Harris SCU_SGL_ELEMENT_PAIR_T sgl_pair_ab; 902f11c7f63SJim Harris // OFFSET 0x80-0x9C 903f11c7f63SJim Harris /** 904f11c7f63SJim Harris * This field is the second SGL element pair found in the TC data structure. 905f11c7f63SJim Harris */ 906f11c7f63SJim Harris SCU_SGL_ELEMENT_PAIR_T sgl_pair_cd; 907f11c7f63SJim Harris 908f11c7f63SJim Harris // OFFSET 0xA0-BC 909f11c7f63SJim Harris SCU_SGL_ELEMENT_PAIR_T sgl_snapshot_ac; 910f11c7f63SJim Harris 911f11c7f63SJim Harris // OFFSET 0xC0 912f11c7f63SJim Harris U32 active_sgl_element_pair; // read only set to 0 913f11c7f63SJim Harris 914f11c7f63SJim Harris // OFFSET 0xC4-0xCC 915f11c7f63SJim Harris U32 reserved_C4_CC[3]; 916f11c7f63SJim Harris 917f11c7f63SJim Harris // OFFSET 0xD0 918f11c7f63SJim Harris U32 intermediate_crc_value : 16; 919f11c7f63SJim Harris U32 initial_crc_seed : 16; 920f11c7f63SJim Harris 921f11c7f63SJim Harris // OFFSET 0xD4 922f11c7f63SJim Harris U32 application_tag_for_verify : 16; 923f11c7f63SJim Harris U32 application_tag_for_generate : 16; 924f11c7f63SJim Harris 925f11c7f63SJim Harris // OFFSET 0xD8 926f11c7f63SJim Harris U32 reference_tag_seed_for_verify_function; 927f11c7f63SJim Harris 928f11c7f63SJim Harris // OFFSET 0xDC 929f11c7f63SJim Harris U32 reserved_DC; 930f11c7f63SJim Harris 931f11c7f63SJim Harris // OFFSET 0xE0 932f11c7f63SJim Harris U32 reserved_E0_0 : 16; 933f11c7f63SJim Harris U32 application_tag_mask_for_generate: 16; 934f11c7f63SJim Harris 935f11c7f63SJim Harris // OFFSET 0xE4 936f11c7f63SJim Harris U32 block_protection_control : 16; 937f11c7f63SJim Harris U32 application_tag_mask_for_verify : 16; 938f11c7f63SJim Harris 939f11c7f63SJim Harris // OFFSET 0xE8 940f11c7f63SJim Harris U32 block_protection_error : 8; 941f11c7f63SJim Harris U32 reserved_E8_0 :24; 942f11c7f63SJim Harris 943f11c7f63SJim Harris // OFFSET 0xEC 944f11c7f63SJim Harris U32 reference_tag_seed_for_verify; 945f11c7f63SJim Harris 946f11c7f63SJim Harris // OFFSET 0xF0 947f11c7f63SJim Harris U32 intermediate_crc_valid_snapshot : 16; 948f11c7f63SJim Harris U32 reserved_F0_0 : 16; 949f11c7f63SJim Harris 950f11c7f63SJim Harris // OFFSET 0xF4 951f11c7f63SJim Harris U32 reference_tag_seed_for_verify_function_snapshot; 952f11c7f63SJim Harris 953f11c7f63SJim Harris // OFFSET 0xF8 954f11c7f63SJim Harris U32 snapshot_of_reserved_dword_DC_of_tc; 955f11c7f63SJim Harris 956f11c7f63SJim Harris // OFFSET 0xFC 957f11c7f63SJim Harris U32 reference_tag_seed_for_generate_function_snapshot; 958f11c7f63SJim Harris 959f11c7f63SJim Harris } SCU_TASK_CONTEXT_T; 960f11c7f63SJim Harris 961f11c7f63SJim Harris #ifdef __cplusplus 962f11c7f63SJim Harris } 963f11c7f63SJim Harris #endif // __cplusplus 964f11c7f63SJim Harris 965f11c7f63SJim Harris #endif // _SCU_TASK_CONTEXT_H_ 966