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/scif_controller.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 _SCIF_CONTROLLER_H_
   57 #define _SCIF_CONTROLLER_H_
   58 
   59 /**
   60  * @file
   61  *
   62  * @brief This file contains all of the interface methods that can be called
   63  *        by an SCIF user on a SCIF controller object.
   64  */
   65 
   66 #ifdef __cplusplus
   67 extern "C" {
   68 #endif // __cplusplus
   69 
   70 #include <dev/isci/scil/sci_types.h>
   71 #include <dev/isci/scil/sci_status.h>
   72 
   73 
   74 /**
   75  * @brief This method will attempt to construct a framework controller object
   76  *        utilizing the supplied parameter information.
   77  *
   78  * @param[in]  library This parameter specifies the handle to the framework
   79  *             library object associated with the controller being constructed.
   80  * @param[in]  controller This parameter specifies the framework controller to
   81  *             be constructed.
   82  * @param[in]  user_object This parameter is a reference to the SCIL users
   83  *             controller object and will be used to associate with the
   84  *             framework controller.
   85  *
   86  * @return Indicate if the controller was successfully constructed or if
   87  *         it failed in some way.
   88  * @retval SCI_SUCCESS This value is returned if the controller was
   89  *         successfully constructed.
   90  * @retval SCI_FAILURE_UNSUPPORTED_INIT_DATA_VERSION This value is returned
   91  *         if the controller does not support the supplied oem parameter
   92  *         data version.
   93  * @retval SCI_FAILURE_UNSUPPORTED_PORT_CONFIGURATION This value is returned
   94  *         if the controller doesn't support the port configuration scheme
   95  *         (APC or MPC).
   96  */
   97 SCI_STATUS scif_controller_construct(
   98    SCI_LIBRARY_HANDLE_T      library,
   99    SCI_CONTROLLER_HANDLE_T   controller,
  100    void *                    user_object
  101 );
  102 
  103 /**
  104  * @brief This method will initialize the SCI Framework controller object.
  105  *        This includes initialization of the associated core controller.
  106  *
  107  * @param[in]  controller This parameter specifies the controller to be
  108  *             initialized.
  109  *
  110  * @return Indicate if the controller was successfully initialized or if
  111  *         it failed in some way.
  112  * @retval SCI_SUCCESS This value is returned if the controller hardware
  113  *         was successfully initialized.
  114  */
  115 SCI_STATUS scif_controller_initialize(
  116    SCI_CONTROLLER_HANDLE_T  controller
  117 );
  118 
  119 /**
  120  * @brief This method returns the suggested scif_controller_start()
  121  *        timeout amount.  The user is free to use any timeout value,
  122  *        but this method provides the suggested minimum start timeout
  123  *        value.  The returned value is based upon empirical information
  124  *        determined as a result of interoperability testing.
  125  *
  126  * @param[in]  controller the handle to the controller object for which
  127  *             to return the suggested start timeout.
  128  *
  129  * @return  This method returns the number of milliseconds for the
  130  *          suggested start operation timeout.
  131  */
  132 U32 scif_controller_get_suggested_start_timeout(
  133    SCI_CONTROLLER_HANDLE_T  controller
  134 );
  135 
  136 /**
  137  * @brief This method will start the SCIF controller.  The SCI User completion
  138  *        callback is called when the following conditions are met:
  139  *        -# the return status of this method is SCI_SUCCESS.
  140  *        -# after all of the phys have successfully started or been given
  141  *           the opportunity to start.
  142  *
  143  * @pre   The controller must be in the INITIALIZED or STARTED state.
  144  *
  145  * @param[in]  controller the handle to the controller object to start.
  146  * @param[in]  timeout This parameter specifies the number of milliseconds
  147  *             in which the start operation should complete.
  148  *
  149  * @return Indicate if the controller start method succeeded or failed in
  150  *         some way.
  151  * @retval SCI_SUCCESS if the start operation succeeded.
  152  * @retval SCI_WARNING_ALREADY_IN_STATE if the controller is already in
  153  *         the STARTED state.
  154  * @retval SCI_FAILURE_INVALID_STATE if the controller is not either in
  155  *         the INITIALIZED or STARTED states.
  156  * @retval SCI_FAILURE_INVALID_MEMORY_DESCRIPTOR if there are
  157  *         inconsistent or invalid values in the supplied
  158  *         SCI_PHYSICAL_MEMORY_DESCRIPTOR array.
  159  * @retval SCI_FAILURE_UNSUPPORTED_PORT_CONFIGURATION This value is
  160  *         returned if the phy to port allocation cannot be supported.
  161  *
  162  * @see For additional information please refer to: scic_controller_start()
  163  */
  164 SCI_STATUS scif_controller_start(
  165    SCI_CONTROLLER_HANDLE_T  controller,
  166    U32                      timeout
  167 );
  168 
  169 /**
  170  * @brief This method will stop an individual framework controller object. This
  171  *        includes quiescing IOs, releasing affiliations, and other shutdown
  172  *        related operations. This method will invoke the associated user
  173  *        callback upon completion.  The completion callback is called when
  174  *        the following conditions are met:
  175  *           -# the method return status is SCI_SUCCESS.
  176  *           -# the controller has been quiesced.
  177  *        This method will ensure that all framework IO requests are quiesced
  178  *        and any additional framework operations are halted.
  179  *
  180  * @pre   The controller must be in the STARTED or STOPPED state.
  181  *
  182  * @param[in]  controller the handle to the controller object to stop.
  183  * @param[in]  timeout This parameter specifies the number of milliseconds
  184  *             in which the stop operation should complete.
  185  *
  186  * @return Indicate if the controller stop method succeeded or failed in
  187  *         some way.
  188  * @retval SCI_SUCCESS if the stop operation successfully began.
  189  * @retval SCI_WARNING_ALREADY_IN_STATE if the controller is already in
  190  *         the STOPPED state.
  191  * @retval SCI_FAILURE_INVALID_STATE if the controller is not either in
  192  *         the STARTED or STOPPED states.
  193  *
  194  * @see For additional information please refer to: scic_controller_stop()
  195  */
  196 SCI_STATUS scif_controller_stop(
  197    SCI_CONTROLLER_HANDLE_T  controller,
  198    U32                      timeout
  199 );
  200 
  201 /**
  202  * @brief This method will reset the supplied framework controller regardless
  203  *        of the state of said controller.  This operation is considered
  204  *        destructive.  Outstanding IO requests are not aborted or completed
  205  *        at the actual remote device.  However, the framework will
  206  *        manufacture completion callbacks to the OS driver for the IO
  207  *        requests.
  208  *
  209  * @param[in]  controller the handle to the controller object to reset.
  210  *
  211  * @return Indicate if the controller reset method succeeded or failed in
  212  *         some way.
  213  * @retval SCI_SUCCESS if the reset operation successfully started.
  214  * @retval SCI_FATAL_ERROR if the controller reset operation is unable to
  215  *         complete.
  216  *
  217  * @see For additional information please refer to: scic_controller_reset()
  218  */
  219 SCI_STATUS scif_controller_reset(
  220    SCI_CONTROLLER_HANDLE_T  controller
  221 );
  222 
  223 /**
  224  * @brief This method returns the SCI Core controller handle associated
  225  *        with this controller.
  226  *
  227  * @param[in]  scif_controller the handle to the controller object for which
  228  *             to retrieve the core specific controller handle
  229  *
  230  * @return Return the SCI core controller handle associated with the supplied
  231  *         framework controller.
  232  */
  233 SCI_CONTROLLER_HANDLE_T scif_controller_get_scic_handle(
  234    SCI_CONTROLLER_HANDLE_T   scif_controller
  235 );
  236 
  237 /**
  238  * @brief This method is called by the SCIF user to send/start a framework
  239  *        IO request.
  240  *
  241  * @param[in]  controller the handle to the controller object for which
  242  *             to start an IO request.
  243  * @param[in]  remote_device the handle to the remote device object for which
  244  *             to start an IO request.
  245  * @param[in]  io_request the handle to the io request object to start.
  246  * @param[in]  io_tag This parameter specifies a previously allocated IO tag
  247  *             that the user desires to be utilized for this request.
  248  *             This parameter is optional.  The user is allowed to supply
  249  *             SCI_CONTROLLER_INVALID_IO_TAG as the value for this parameter.
  250  *             @see scic_controller_allocate_tag() for more information
  251  *             on allocating a tag.
  252  *
  253  * @return Indicate if the controller successfully started the IO request.
  254  * @retval SCI_IO_SUCCESS if the IO request was successfully started.
  255  *
  256  * @see For additional information please refer to: scic_controller_start_io()
  257  *
  258  * @todo Determine the failure situations and return values.
  259  */
  260 SCI_IO_STATUS scif_controller_start_io(
  261    SCI_CONTROLLER_HANDLE_T     controller,
  262    SCI_REMOTE_DEVICE_HANDLE_T  remote_device,
  263    SCI_IO_REQUEST_HANDLE_T     io_request,
  264    U16                         io_tag
  265 );
  266 
  267 /**
  268  * @brief This method is called by the SCIF user to send/start a framework
  269  *        task management request.
  270  *
  271  * @param[in]  controller the handle to the controller object for which
  272  *             to start the task management request.
  273  * @param[in]  remote_device the handle to the remote device object for which
  274  *             to start the task management request.
  275  * @param[in]  task_request the handle to the task request object to start.
  276  * @param[in]  io_tag This parameter specifies a previously allocated IO tag
  277  *             that the user desires to be utilized for this request.  Note
  278  *             this not the io_tag of the request being managed.  It is to
  279  *             be utilized for the task request itself.
  280  *             This parameter is optional.  The user is allowed to supply
  281  *             SCI_CONTROLLER_INVALID_IO_TAG as the value for this parameter.
  282  *             @see scic_controller_allocate_tag() for more information
  283  *             on allocating a tag.
  284  *
  285  * @return Indicate if the controller successfully started the IO request.
  286  * @retval SCI_TASK_SUCCESS if the task request was successfully started.
  287  *
  288  * @see For additional information please refer to: scic_controller_start_task()
  289  *
  290  * @todo Determine the failure situations and return values.
  291  */
  292 SCI_TASK_STATUS scif_controller_start_task(
  293    SCI_CONTROLLER_HANDLE_T     controller,
  294    SCI_REMOTE_DEVICE_HANDLE_T  remote_device,
  295    SCI_TASK_REQUEST_HANDLE_T   task_request,
  296    U16                         io_tag
  297 );
  298 
  299 /**
  300  * @brief This method is called by the SCI user to complete a previously
  301  *        started IO request.  After this method is invoked, the user should
  302  *        consider the IO request as invalid until it is properly reused
  303  *        (i.e. re-constructed).
  304  *
  305  * @param[in]  controller The handle to the controller object for which
  306  *             to complete the IO request.
  307  * @param[in]  remote_device The handle to the remote device object for which
  308  *             to complete the IO request.
  309  * @param[in]  io_request the handle to the io request object to complete.
  310  *
  311  * @return Indicate if the controller successfully completed the IO request.
  312  * @retval SCI_SUCCESS if the completion process was successful.
  313  *
  314  * @see For additional information please refer to:
  315  *      scic_controller_complete_io()
  316  */
  317 SCI_STATUS scif_controller_complete_io(
  318    SCI_CONTROLLER_HANDLE_T     controller,
  319    SCI_REMOTE_DEVICE_HANDLE_T  remote_device,
  320    SCI_IO_REQUEST_HANDLE_T     io_request
  321 );
  322 
  323 /**
  324  * @brief This method will perform framework specific completion operations for
  325  *        a task management request. After this method is invoked, the user
  326  *        should consider the task request as invalid until it is properly
  327  *        reused (i.e. re-constructed).
  328  *
  329  * @param[in]  controller The handle to the controller object for which
  330  *             to complete the task management request.
  331  * @param[in]  remote_device The handle to the remote device object for which
  332  *             to complete the task management request.
  333  * @param[in]  task_request the handle to the task management request object
  334  *             to complete.
  335  *
  336  * @return Indicate if the controller successfully completed the task
  337  *         management request.
  338  * @retval SCI_SUCCESS if the completion process was successful.
  339  */
  340 SCI_STATUS scif_controller_complete_task(
  341    SCI_CONTROLLER_HANDLE_T     controller,
  342    SCI_REMOTE_DEVICE_HANDLE_T  remote_device,
  343    SCI_TASK_REQUEST_HANDLE_T   task_request
  344 );
  345 
  346 /**
  347  * @brief This method simply provides the user with a unique handle for a
  348  *        given SAS/SATA domain index.
  349  *
  350  * @param[in]  controller This parameter represents the handle to the
  351  *             controller object from which to retrieve a domain (SAS or
  352  *             SATA) handle.
  353  * @param[in]  port_index This parameter specifies the domain index in
  354  *             the controller for which to retrieve the domain handle.
  355  *             @note 0 <= port_index < maximum number of phys.
  356  * @param[out] domain_handle This parameter specifies the retrieved domain
  357  *             handle to be provided to the caller.
  358  *
  359  * @return Indicate if the retrieval of the domain handle was successful.
  360  * @retval SCI_SUCCESS This value is returned if the retrieval was successful.
  361  * @retval SCI_FAILURE_INVALID_PORT This value is returned if the supplied
  362  *         port index is not invalid.
  363  */
  364 SCI_STATUS scif_controller_get_domain_handle(
  365    SCI_CONTROLLER_HANDLE_T   controller,
  366    U8                        port_index,
  367    SCI_DOMAIN_HANDLE_T     * domain_handle
  368 );
  369 
  370 /**
  371  * @brief This method allows the user to configure the SCI Framework
  372  *        into either a performance mode or a memory savings mode.
  373  *
  374  * @param[in]  controller This parameter represents the handle to the
  375  *             controller object for which to update the operating
  376  *             mode.
  377  * @param[in]  mode This parameter specifies the new mode for the
  378  *             controller.
  379  *
  380  * @return Indicate if the user successfully change the operating mode
  381  *         of the controller.
  382  * @retval SCI_SUCCESS The user successfully updated the mode.
  383  */
  384 SCI_STATUS scif_controller_set_mode(
  385    SCI_CONTROLLER_HANDLE_T   controller,
  386    SCI_CONTROLLER_MODE       mode
  387 );
  388 
  389 /**
  390  * @brief This method simply returns the T10 SCSI to ATA Translation (SAT)
  391  *        specification version to which this translator is compliant for
  392  *        supported commands.
  393  *
  394  * @return An integer value indicating the SAT version to which this
  395  *         translator complies.
  396  */
  397 U32 scif_controller_get_sat_compliance_version(
  398    void
  399 );
  400 
  401 /**
  402  * @brief This method simply returns the revision of the T10 SCSI to ATA
  403  *        Translation (SAT) specification version to which this translator
  404  *        is compliant for supported commands.
  405  *
  406  * @return An integer value indicating the revision of the SAT version
  407  *         to which this translator complies.
  408  */
  409 U32 scif_controller_get_sat_compliance_version_revision(
  410    void
  411 );
  412 
  413 /**
  414  * @brief This method is called by the SCI user to start internal io.
  415  */
  416 typedef void (*SCI_START_INTERNAL_IO_ROUTINE)(
  417    SCI_CONTROLLER_HANDLE_T controller
  418 );
  419 
  420 #if !defined(DISABLE_INTERRUPTS)
  421 /**
  422  * @brief This method allows the user to configure the interrupt coalescence.
  423  *           Please refer to the comment header for
  424  *           scic_controller_set_interrupt_coalescence() to find details.
  425  */
  426 SCI_STATUS scif_controller_set_interrupt_coalescence(
  427    SCI_CONTROLLER_HANDLE_T controller,
  428    U32                     coalesce_number,
  429    U32                     coalesce_timeout
  430 );
  431 
  432 /**
  433  * @brief This method retrieves the interrupt coalescence information.
  434  *           Please refer to the comment header for
  435  *           scic_controller_get_interrupt_coalescence() to find details.
  436  */
  437 void scif_controller_get_interrupt_coalescence(
  438    SCI_CONTROLLER_HANDLE_T controller,
  439    U32                   * coalesce_number,
  440    U32                   * coalesce_timeout
  441 );
  442 
  443 #else // !defined(DISABLE_INTERRUPTS)
  444 
  445 #define scif_controller_set_interrupt_coalescence(controller, num, timeout) \
  446         SCI_FAILURE
  447 #define scif_controller_get_interrupt_coalescence(controller, num, timeout)
  448 
  449 #endif // !defined(DISABLE_INTERRUPTS)
  450 
  451 #ifdef __cplusplus
  452 }
  453 #endif // __cplusplus
  454 
  455 #endif // _SCIF_CONTROLLER_H_
  456 

Cache object: e01bb6ab9803d65945adb8f2f6967163


[ 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.