cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

scu_remote_node_context.h (6777B)


      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 */
     72struct 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 */
    203struct 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 */
    216union 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__ */