linux/drivers/scsi/isci/sas.h
<<
>>
Prefs
   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 */
  84struct 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 */
 103struct 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 */
 122struct 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 */
 140struct 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 */
 164struct 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 */
 199struct 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 */
 213struct sci_sas_address {
 214        u32 high;
 215        u32 low;
 216};
 217#endif
 218