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 _SCI_SAS_H_ 57 #define _SCI_SAS_H_ 58 59 #include <linux/kernel.h> 60 61 /* 62 * SATA FIS Types These constants depict the various SATA FIS types devined in 63 * the serial ATA specification. 64 * XXX: This needs to go into <scsi/sas.h> 65 */ 66 #define FIS_REGH2D 0x27 67 #define FIS_REGD2H 0x34 68 #define FIS_SETDEVBITS 0xA1 69 #define FIS_DMA_ACTIVATE 0x39 70 #define FIS_DMA_SETUP 0x41 71 #define FIS_BIST_ACTIVATE 0x58 72 #define FIS_PIO_SETUP 0x5F 73 #define FIS_DATA 0x46 74 75 /**************************************************************************/ 76 #define SSP_RESP_IU_MAX_SIZE 280 77 78 /* 79 * contents of the SSP COMMAND INFORMATION UNIT. 80 * For specific information on each of these individual fields please 81 * reference the SAS specification SSP transport layer section. 82 * XXX: This needs to go into <scsi/sas.h> 83 */ 84 struct ssp_cmd_iu { 85 u8 LUN[8]; 86 u8 add_cdb_len:6; 87 u8 _r_a:2; 88 u8 _r_b; 89 u8 en_fburst:1; 90 u8 task_prio:4; 91 u8 task_attr:3; 92 u8 _r_c; 93 94 u8 cdb[16]; 95 } __packed; 96 97 /* 98 * contents of the SSP TASK INFORMATION UNIT. 99 * For specific information on each of these individual fields please 100 * reference the SAS specification SSP transport layer section. 101 * XXX: This needs to go into <scsi/sas.h> 102 */ 103 struct ssp_task_iu { 104 u8 LUN[8]; 105 u8 _r_a; 106 u8 task_func; 107 u8 _r_b[4]; 108 u16 task_tag; 109 u8 _r_c[12]; 110 } __packed; 111 112 113 /* 114 * struct smp_req_phy_id - This structure defines the contents of 115 * an SMP Request that is comprised of the struct smp_request_header and a 116 * phy identifier. 117 * Examples: SMP_REQUEST_DISCOVER, SMP_REQUEST_REPORT_PHY_SATA. 118 * 119 * For specific information on each of these individual fields please reference 120 * the SAS specification. 121 */ 122 struct smp_req_phy_id { 123 u8 _r_a[4]; /* bytes 4-7 */ 124 125 u8 ign_zone_grp:1; /* byte 8 */ 126 u8 _r_b:7; 127 128 u8 phy_id; /* byte 9 */ 129 u8 _r_c; /* byte 10 */ 130 u8 _r_d; /* byte 11 */ 131 } __packed; 132 133 /* 134 * struct smp_req_config_route_info - This structure defines the 135 * contents of an SMP Configure Route Information request. 136 * 137 * For specific information on each of these individual fields please reference 138 * the SAS specification. 139 */ 140 struct smp_req_conf_rtinfo { 141 u16 exp_change_cnt; /* bytes 4-5 */ 142 u8 exp_rt_idx_hi; /* byte 6 */ 143 u8 exp_rt_idx; /* byte 7 */ 144 145 u8 _r_a; /* byte 8 */ 146 u8 phy_id; /* byte 9 */ 147 u16 _r_b; /* bytes 10-11 */ 148 149 u8 _r_c:7; /* byte 12 */ 150 u8 dis_rt_entry:1; 151 u8 _r_d[3]; /* bytes 13-15 */ 152 153 u8 rt_sas_addr[8]; /* bytes 16-23 */ 154 u8 _r_e[16]; /* bytes 24-39 */ 155 } __packed; 156 157 /* 158 * struct smp_req_phycntl - This structure defines the contents of an 159 * SMP Phy Controller request. 160 * 161 * For specific information on each of these individual fields please reference 162 * the SAS specification. 163 */ 164 struct smp_req_phycntl { 165 u16 exp_change_cnt; /* byte 4-5 */ 166 167 u8 _r_a[3]; /* bytes 6-8 */ 168 169 u8 phy_id; /* byte 9 */ 170 u8 phy_op; /* byte 10 */ 171 172 u8 upd_pathway:1; /* byte 11 */ 173 u8 _r_b:7; 174 175 u8 _r_c[12]; /* byte 12-23 */ 176 177 u8 att_dev_name[8]; /* byte 24-31 */ 178 179 u8 _r_d:4; /* byte 32 */ 180 u8 min_linkrate:4; 181 182 u8 _r_e:4; /* byte 33 */ 183 u8 max_linkrate:4; 184 185 u8 _r_f[2]; /* byte 34-35 */ 186 187 u8 pathway:4; /* byte 36 */ 188 u8 _r_g:4; 189 190 u8 _r_h[3]; /* bytes 37-39 */ 191 } __packed; 192 193 /* 194 * struct smp_req - This structure simply unionizes the existing request 195 * structures into a common request type. 196 * 197 * XXX: This data structure may need to go to scsi/sas.h 198 */ 199 struct smp_req { 200 u8 type; /* byte 0 */ 201 u8 func; /* byte 1 */ 202 u8 alloc_resp_len; /* byte 2 */ 203 u8 req_len; /* byte 3 */ 204 u8 req_data[]; 205 } __packed; 206 207 /* 208 * struct sci_sas_address - This structure depicts how a SAS address is 209 * represented by SCI. 210 * XXX convert this to u8 [SAS_ADDR_SIZE] like the rest of libsas 211 * 212 */ 213 struct sci_sas_address { 214 u32 high; 215 u32 low; 216 }; 217 #endif 218