The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/isci/scil/scic_sds_stp_request.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
    3  *
    4  * This file is provided under a dual BSD/GPLv2 license.  When using or
    5  * redistributing this file, you may do so under either license.
    6  *
    7  * GPL LICENSE SUMMARY
    8  *
    9  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
   10  *
   11  * This program is free software; you can redistribute it and/or modify
   12  * it under the terms of version 2 of the GNU General Public License as
   13  * published by the Free Software Foundation.
   14  *
   15  * This program is distributed in the hope that it will be useful, but
   16  * WITHOUT ANY WARRANTY; without even the implied warranty of
   17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   18  * General Public License for more details.
   19  *
   20  * You should have received a copy of the GNU General Public License
   21  * along with this program; if not, write to the Free Software
   22  * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
   23  * The full GNU General Public License is included in this distribution
   24  * in the file called LICENSE.GPL.
   25  *
   26  * BSD LICENSE
   27  *
   28  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
   29  * All rights reserved.
   30  *
   31  * Redistribution and use in source and binary forms, with or without
   32  * modification, are permitted provided that the following conditions
   33  * are met:
   34  *
   35  *   * Redistributions of source code must retain the above copyright
   36  *     notice, this list of conditions and the following disclaimer.
   37  *   * Redistributions in binary form must reproduce the above copyright
   38  *     notice, this list of conditions and the following disclaimer in
   39  *     the documentation and/or other materials provided with the
   40  *     distribution.
   41  *
   42  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   43  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   44  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   45  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   46  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   47  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   48  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   49  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   50  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   51  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   52  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   53  *
   54  * $FreeBSD$
   55  */
   56 #ifndef _SCIC_SDS_STP_REQUEST_T_
   57 #define _SCIC_SDS_STP_REQUEST_T_
   58 
   59 #ifdef __cplusplus
   60 extern "C" {
   61 #endif // __cplusplus
   62 
   63 #include <dev/isci/scil/intel_sata.h>
   64 #include <dev/isci/scil/sci_types.h>
   65 #include <dev/isci/scil/scic_sds_request.h>
   66 
   67 /**
   68  * @struct
   69  *
   70  * @brief This structure represents the additional information that is
   71  *        required to handle SATA PIO requests.
   72  */
   73 typedef struct SCIC_SDS_STP_REQUEST
   74 {
   75    SCIC_SDS_REQUEST_T parent;
   76 
   77    SATA_FIS_REG_D2H_T d2h_reg_fis;
   78 
   79    union
   80    {
   81       U32 ncq;
   82 
   83       U32 udma;
   84 
   85       struct
   86       {
   87          /**
   88           * Total transfer for the entire PIO request recorded at request construction
   89           * time.
   90           *
   91           * @todo Should we just decrement this value for each byte of data transitted
   92           *       or received to elemenate the current_transfer_bytes field?
   93           */
   94          U32 total_transfer_bytes;
   95 
   96          /**
   97           * Total number of bytes received/transmitted in data frames since the start
   98           * of the IO request.  At the end of the IO request this should equal the
   99           * total_transfer_bytes.
  100           */
  101          U32 current_transfer_bytes;
  102 
  103          /**
  104           * The number of bytes requested in the in the PIO setup.
  105           */
  106          U32 pio_transfer_bytes;
  107 
  108          /**
  109           * PIO Setup ending status value to tell us if we need to wait for another FIS
  110           * or if the transfer is complete. On the receipt of a D2H FIS this will be
  111           * the status field of that FIS.
  112           */
  113          U8  ending_status;
  114 
  115          /**
  116           * On receipt of a D2H FIS this will be the ending error field if the
  117           * ending_status has the SATA_STATUS_ERR bit set.
  118           */
  119          U8  ending_error;
  120 
  121          /**
  122           * Protocol Type. This is filled in by core during IO Request construction type.
  123           */
  124          U8  sat_protocol;
  125 
  126          /**
  127          * This field keeps track of sgl pair to be retrieved from OS memory for processing.
  128          */
  129          U8  sgl_pair_index;
  130 
  131          struct
  132          {
  133             SCU_SGL_ELEMENT_PAIR_T * sgl_pair;
  134             U8                       sgl_set;
  135             U32                      sgl_offset;
  136          } request_current;
  137       } pio;
  138 
  139       struct
  140       {
  141          /**
  142           * The number of bytes requested in the PIO setup before CDB data frame.
  143           */
  144          U32 device_preferred_cdb_length;
  145       } packet;
  146    } type;
  147 
  148 } SCIC_SDS_STP_REQUEST_T;
  149 
  150 /**
  151  * @enum SCIC_SDS_STP_REQUEST_STARTED_UDMA_SUBSTATES
  152  *
  153  * @brief This enumeration depicts the various sub-states associated with
  154  *        a SATA/STP UDMA protocol operation.
  155  */
  156 enum SCIC_SDS_STP_REQUEST_STARTED_UDMA_SUBSTATES
  157 {
  158    SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_TC_COMPLETION_SUBSTATE,
  159    SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_D2H_REG_FIS_SUBSTATE,
  160 
  161    SCIC_SDS_STP_REQUEST_STARTED_UDMA_MAX_SUBSTATES
  162 };
  163 
  164 /**
  165  * @enum SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_SUBSTATES
  166  *
  167  * @brief This enumeration depicts the various sub-states associated with
  168  *        a SATA/STP non-data protocol operation.
  169  */
  170 enum SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_SUBSTATES
  171 {
  172    SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_H2D_COMPLETION_SUBSTATE,
  173    SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_D2H_SUBSTATE,
  174    SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_MAX_SUBSTATES
  175 };
  176 
  177 /**
  178  * @enum SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_SUBSTATES
  179  *
  180  * @brief THis enumeration depicts the various sub-states associated with a
  181  *        SATA/STP soft reset operation.
  182  */
  183 enum SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_SUBSTATES
  184 {
  185    SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_ASSERTED_COMPLETION_SUBSTATE,
  186    SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_DIAGNOSTIC_COMPLETION_SUBSTATE,
  187    SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_D2H_RESPONSE_FRAME_SUBSTATE,
  188 
  189    SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_MAX_SUBSTATES
  190 };
  191 
  192 extern SCIC_SDS_IO_REQUEST_STATE_HANDLER_T
  193    scic_sds_stp_request_started_udma_substate_handler_table
  194       [SCIC_SDS_STP_REQUEST_STARTED_UDMA_MAX_SUBSTATES];
  195 
  196 extern SCI_BASE_STATE_T
  197    scic_sds_stp_request_started_udma_substate_table
  198       [SCIC_SDS_STP_REQUEST_STARTED_UDMA_MAX_SUBSTATES];
  199 
  200 extern SCIC_SDS_IO_REQUEST_STATE_HANDLER_T
  201    scic_sds_stp_request_started_non_data_substate_handler_table
  202       [SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_MAX_SUBSTATES];
  203 
  204 extern SCI_BASE_STATE_T
  205    scic_sds_stp_request_started_non_data_substate_table
  206       [SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_MAX_SUBSTATES];
  207 
  208 
  209 extern SCIC_SDS_IO_REQUEST_STATE_HANDLER_T
  210    scic_sds_stp_request_started_soft_reset_substate_handler_table
  211       [SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_MAX_SUBSTATES];
  212 
  213 extern SCI_BASE_STATE_T
  214    scic_sds_stp_request_started_soft_reset_substate_table
  215       [SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_MAX_SUBSTATES];
  216 
  217 // ---------------------------------------------------------------------------
  218 
  219 U32 scic_sds_stp_request_get_object_size(void);
  220 
  221 U32 scic_sds_stp_task_request_get_object_size(void);
  222 
  223 void scu_sata_reqeust_construct_task_context(
  224    SCIC_SDS_REQUEST_T * this_request,
  225    SCU_TASK_CONTEXT_T * task_context
  226 );
  227 
  228 void scic_sds_stp_non_ncq_request_construct(
  229    SCIC_SDS_REQUEST_T *this_request
  230 );
  231 
  232 SCI_STATUS scic_sds_stp_pio_request_construct(
  233    SCIC_SDS_REQUEST_T  * scic_io_request,
  234    U8                    sat_protocol,
  235    BOOL                  copy_rx_frame
  236 );
  237 
  238 SCI_STATUS scic_sds_stp_pio_request_construct_pass_through (
  239    SCIC_SDS_REQUEST_T  * scic_io_request,
  240    SCIC_STP_PASSTHRU_REQUEST_CALLBACKS_T *passthru_cb
  241 );
  242 
  243 SCI_STATUS scic_sds_stp_udma_request_construct(
  244    SCIC_SDS_REQUEST_T * this_request,
  245    U32 transfer_length,
  246    SCI_IO_REQUEST_DATA_DIRECTION data_direction
  247 );
  248 
  249 SCI_STATUS scic_sds_stp_non_data_request_construct(
  250    SCIC_SDS_REQUEST_T * this_request
  251 );
  252 
  253 SCI_STATUS scic_sds_stp_soft_reset_request_construct(
  254    SCIC_SDS_REQUEST_T * this_request
  255 );
  256 
  257 SCI_STATUS scic_sds_stp_ncq_request_construct(
  258    SCIC_SDS_REQUEST_T * this_request,
  259    U32 transfer_length,
  260    SCI_IO_REQUEST_DATA_DIRECTION data_direction
  261 );
  262 
  263 void scu_stp_raw_request_construct_task_context(
  264    SCIC_SDS_STP_REQUEST_T * this_request,
  265    SCU_TASK_CONTEXT_T     * task_context
  266 
  267 );
  268 
  269 SCI_STATUS scic_sds_io_request_construct_sata(
  270    SCIC_SDS_REQUEST_T          * this_request,
  271    U8                            sat_protocol,
  272    U32                           transfer_length,
  273    SCI_IO_REQUEST_DATA_DIRECTION data_direction,
  274    BOOL                          copy_rx_frame,
  275    BOOL                          do_translate_sgl
  276 );
  277 
  278 #ifdef __cplusplus
  279 }
  280 #endif // __cplusplus
  281 
  282 #endif // _SCIC_SDS_STP_REQUEST_T_

Cache object: 0f9e378b008aa569796789f4160b261f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.