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

task.h (5566B)


      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#ifndef _ISCI_TASK_H_
     56#define _ISCI_TASK_H_
     57
     58#include <scsi/sas_ata.h>
     59#include "host.h"
     60
     61#define ISCI_TERMINATION_TIMEOUT_MSEC 500
     62
     63struct isci_request;
     64
     65/**
     66 * enum isci_tmf_function_codes - This enum defines the possible preparations
     67 *    of task management requests.
     68 *
     69 *
     70 */
     71enum isci_tmf_function_codes {
     72
     73	isci_tmf_func_none      = 0,
     74	isci_tmf_ssp_task_abort = TMF_ABORT_TASK,
     75	isci_tmf_ssp_lun_reset  = TMF_LU_RESET,
     76};
     77
     78/**
     79 * struct isci_tmf - This class represents the task management object which
     80 *    acts as an interface to libsas for processing task management requests
     81 *
     82 *
     83 */
     84struct isci_tmf {
     85
     86	struct completion *complete;
     87	enum sas_protocol proto;
     88	union {
     89		struct ssp_response_iu resp_iu;
     90		struct dev_to_host_fis d2h_fis;
     91		u8 rsp_buf[SSP_RESP_IU_MAX_SIZE];
     92	} resp;
     93	unsigned char lun[8];
     94	u16 io_tag;
     95	enum isci_tmf_function_codes tmf_code;
     96	int status;
     97};
     98
     99static inline void isci_print_tmf(struct isci_host *ihost, struct isci_tmf *tmf)
    100{
    101	if (SAS_PROTOCOL_SATA == tmf->proto)
    102		dev_dbg(&ihost->pdev->dev,
    103			"%s: status = %x\n"
    104			"tmf->resp.d2h_fis.status = %x\n"
    105			"tmf->resp.d2h_fis.error = %x\n",
    106			__func__,
    107			tmf->status,
    108			tmf->resp.d2h_fis.status,
    109			tmf->resp.d2h_fis.error);
    110	else
    111		dev_dbg(&ihost->pdev->dev,
    112			"%s: status = %x\n"
    113			"tmf->resp.resp_iu.data_present = %x\n"
    114			"tmf->resp.resp_iu.status = %x\n"
    115			"tmf->resp.resp_iu.data_length = %x\n"
    116			"tmf->resp.resp_iu.data[0] = %x\n"
    117			"tmf->resp.resp_iu.data[1] = %x\n"
    118			"tmf->resp.resp_iu.data[2] = %x\n"
    119			"tmf->resp.resp_iu.data[3] = %x\n",
    120			__func__,
    121			tmf->status,
    122			tmf->resp.resp_iu.datapres,
    123			tmf->resp.resp_iu.status,
    124			be32_to_cpu(tmf->resp.resp_iu.response_data_len),
    125			tmf->resp.resp_iu.resp_data[0],
    126			tmf->resp.resp_iu.resp_data[1],
    127			tmf->resp.resp_iu.resp_data[2],
    128			tmf->resp.resp_iu.resp_data[3]);
    129}
    130
    131
    132int isci_task_execute_task(
    133	struct sas_task *task,
    134	gfp_t gfp_flags);
    135
    136int isci_task_abort_task(
    137	struct sas_task *task);
    138
    139int isci_task_abort_task_set(
    140	struct domain_device *d_device,
    141	u8 *lun);
    142
    143int isci_task_clear_task_set(
    144	struct domain_device *d_device,
    145	u8 *lun);
    146
    147int isci_task_query_task(
    148	struct sas_task *task);
    149
    150int isci_task_lu_reset(
    151	struct domain_device *d_device,
    152	u8 *lun);
    153
    154int isci_task_clear_nexus_port(
    155	struct asd_sas_port *port);
    156
    157int isci_task_clear_nexus_ha(
    158	struct sas_ha_struct *ha);
    159
    160int isci_task_I_T_nexus_reset(
    161	struct domain_device *d_device);
    162
    163void isci_task_request_complete(
    164	struct isci_host *isci_host,
    165	struct isci_request *request,
    166	enum sci_task_status completion_status);
    167
    168u16 isci_task_ssp_request_get_io_tag_to_manage(
    169	struct isci_request *request);
    170
    171u8 isci_task_ssp_request_get_function(
    172	struct isci_request *request);
    173
    174
    175void *isci_task_ssp_request_get_response_data_address(
    176	struct isci_request *request);
    177
    178u32 isci_task_ssp_request_get_response_data_length(
    179	struct isci_request *request);
    180
    181#endif /* !defined(_SCI_TASK_H_) */