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_user_callback.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_USER_CALLBACK_H_
   57 #define _SCIC_USER_CALLBACK_H_
   58 
   59 /**
   60  * @file
   61  *
   62  * @brief This file contains all of the interface methods/macros that must
   63  *        be implemented by an SCI Core user.
   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 #include <dev/isci/scil/sci_controller.h>
   73 
   74 /**
   75  * @brief This callback method asks the user to create a timer and provide
   76  *        a handle for this timer for use in further timer interactions.
   77  *
   78  * @warning The "timer_callback" method should be executed in a mutually
   79  *          exclusive  manner from the controller completion handler
   80  *          handler (refer to scic_controller_get_handler_methods()).
   81  *
   82  * @param[in]  controller This parameter specifies the controller with
   83  *             which this timer is to be associated.
   84  * @param[in]  timer_callback This parameter specifies the callback method
   85  *             to be invoked whenever the timer expires.
   86  * @param[in]  cookie This parameter specifies a piece of information that
   87  *             the user must retain.  This cookie is to be supplied by the
   88  *             user anytime a timeout occurs for the created timer.
   89  *
   90  * @return This method returns a handle to a timer object created by the
   91  *         user.  The handle will be utilized for all further interactions
   92  *         relating to this timer.
   93  */
   94 void * scic_cb_timer_create(
   95    SCI_CONTROLLER_HANDLE_T   controller,
   96    SCI_TIMER_CALLBACK_T      timer_callback,
   97    void                    * cookie
   98 );
   99 
  100 /**
  101  * @brief This callback method asks the user to destroy the supplied timer.
  102  *
  103  * @param[in]  controller This parameter specifies the controller with
  104  *             which this timer is to associated.
  105  * @param[in]  timer This parameter specifies the timer to be destroyed.
  106  *
  107  * @return none
  108  */
  109 void scic_cb_timer_destroy(
  110    SCI_CONTROLLER_HANDLE_T   controller,
  111    void                    * timer
  112 );
  113 
  114 /**
  115  * @brief This callback method asks the user to start the supplied timer.
  116  *
  117  * @warning All timers in the system started by the SCI Core are one shot
  118  *          timers.  Therefore, the SCI user should make sure that it
  119  *          removes the timer from it's list when a timer actually fires.
  120  *          Additionally, SCI Core user's should be able to handle
  121  *          calls from the SCI Core to stop a timer that may already
  122  *          be stopped.
  123  *
  124  * @param[in]  controller This parameter specifies the controller with
  125  *             which this timer is to associated.
  126  * @param[in]  timer This parameter specifies the timer to be started.
  127  * @param[in]  milliseconds This parameter specifies the number of
  128  *             milliseconds for which to stall.  The operating system driver
  129  *             is allowed to round this value up where necessary.
  130  *
  131  * @return none
  132  */
  133 void scic_cb_timer_start(
  134    SCI_CONTROLLER_HANDLE_T   controller,
  135    void                    * timer,
  136    U32                       milliseconds
  137 );
  138 
  139 /**
  140  * @brief This callback method asks the user to stop the supplied timer.
  141  *
  142  * @param[in]  controller This parameter specifies the controller with
  143  *             which this timer is to associated.
  144  * @param[in]  timer This parameter specifies the timer to be stopped.
  145  *
  146  * @return none
  147  */
  148 void scic_cb_timer_stop(
  149    SCI_CONTROLLER_HANDLE_T   controller,
  150    void                    * timer
  151 );
  152 
  153 /**
  154  * @brief This method is called when the core requires the OS driver
  155  *        to stall execution.  This method is utilized during initialization
  156  *        or non-performance paths only.
  157  *
  158  * @param[in]  microseconds This parameter specifies the number of
  159  *             microseconds for which to stall.  The operating system driver
  160  *             is allowed to round this value up where necessary.
  161  *
  162  * @return none.
  163  */
  164 void scic_cb_stall_execution(
  165    U32  microseconds
  166 );
  167 
  168 /**
  169  * @brief This user callback will inform the user that the controller has
  170  *        finished the start process.
  171  *
  172  * @param[in]  controller This parameter specifies the controller that was
  173  *             started.
  174  * @param[in]  completion_status This parameter specifies the results of
  175  *             the start operation.  SCI_SUCCESS indicates successful
  176  *             completion.
  177  *
  178  * @return none
  179  */
  180 void scic_cb_controller_start_complete(
  181    SCI_CONTROLLER_HANDLE_T  controller,
  182    SCI_STATUS               completion_status
  183 );
  184 
  185 /**
  186  * @brief This user callback will inform the user that the controller has
  187  *        finished the stop process.
  188  *
  189  * @param[in]  controller This parameter specifies the controller that was
  190  *             stopped.
  191  * @param[in]  completion_status This parameter specifies the results of
  192  *             the stop operation.  SCI_SUCCESS indicates successful
  193  *             completion.
  194  *
  195  * @return none
  196  */
  197 void scic_cb_controller_stop_complete(
  198    SCI_CONTROLLER_HANDLE_T  controller,
  199    SCI_STATUS               completion_status
  200 );
  201 
  202 /**
  203  * @brief This user callback will inform the user that an IO request has
  204  *        completed.
  205  *
  206  * @param[in]  controller This parameter specifies the controller on
  207  *             which the IO is completing.
  208  * @param[in]  remote_device This parameter specifies the remote device on
  209  *             which this IO request is completing.
  210  * @param[in]  io_request This parameter specifies the IO request that has
  211  *             completed.
  212  * @param[in]  completion_status This parameter specifies the results of
  213  *             the IO request operation.  SCI_SUCCESS indicates successful
  214  *             completion.
  215  *
  216  * @return none
  217  */
  218 void scic_cb_io_request_complete(
  219    SCI_CONTROLLER_HANDLE_T     controller,
  220    SCI_REMOTE_DEVICE_HANDLE_T  remote_device,
  221    SCI_IO_REQUEST_HANDLE_T     io_request,
  222    SCI_IO_STATUS               completion_status
  223 );
  224 
  225 /**
  226  * @brief This method simply returns the virtual address associated
  227  *        with the scsi_io and byte_offset supplied parameters.
  228  *
  229  * @note This callback is not utilized in the fast path.  The expectation
  230  *       is that this method is utilized for items such as SCSI to ATA
  231  *       translation for commands like INQUIRY, READ CAPACITY, etc.
  232  *
  233  * @param[in] scic_user_io_request This parameter points to the user's
  234  *            IO request object.  It is a cookie that allows the user to
  235  *            provide the necessary information for this callback.
  236  * @param[in] byte_offset This parameter specifies the offset into the data
  237  *            buffers pointed to by the SGL.  The byte offset starts at 0
  238  *            and continues until the last byte pointed to be the last SGL
  239  *            element.
  240  *
  241  * @return A virtual address pointer to the location specified by the
  242  *         parameters.
  243  */
  244 U8 *scic_cb_io_request_get_virtual_address_from_sgl(
  245    void * scic_user_io_request,
  246    U32    byte_offset
  247 );
  248 
  249 /**
  250  * @brief This user callback will inform the user that a task management
  251  *        request completed.
  252  *
  253  * @param[in]  controller This parameter specifies the controller on
  254  *             which the task management request is completing.
  255  * @param[in]  remote_device This parameter specifies the remote device on
  256  *             which this task management request is completing.
  257  * @param[in]  task_request This parameter specifies the task management
  258  *             request that has completed.
  259  * @param[in]  completion_status This parameter specifies the results of
  260  *             the IO request operation.  SCI_SUCCESS indicates successful
  261  *             completion.
  262  *
  263  * @return none
  264  */
  265 void scic_cb_task_request_complete(
  266    SCI_CONTROLLER_HANDLE_T     controller,
  267    SCI_REMOTE_DEVICE_HANDLE_T  remote_device,
  268    SCI_TASK_REQUEST_HANDLE_T   task_request,
  269    SCI_TASK_STATUS             completion_status
  270 );
  271 
  272 #ifndef SCI_GET_PHYSICAL_ADDRESS_OPTIMIZATION_ENABLED
  273 /**
  274  * @brief This callback method asks the user to provide the physical
  275  *        address for the supplied virtual address when building an
  276  *        io request object.
  277  *
  278  * @param[in] controller This parameter is the core controller object
  279  *            handle.
  280  * @param[in] io_request This parameter is the io request object handle
  281  *            for which the physical address is being requested.
  282  * @param[in] virtual_address This parameter is the virtual address which
  283  *            is to be returned as a physical address.
  284  * @param[out] physical_address The physical address for the supplied virtual
  285  *        address.
  286  *
  287  * @return None.
  288  */
  289 void scic_cb_io_request_get_physical_address(
  290    SCI_CONTROLLER_HANDLE_T   controller,
  291    SCI_IO_REQUEST_HANDLE_T   io_request,
  292    void                    * virtual_address,
  293    SCI_PHYSICAL_ADDRESS    * physical_address
  294 );
  295 #endif // SCI_GET_PHYSICAL_ADDRESS_OPTIMIZATION_ENABLED
  296 
  297 /**
  298  * @brief This callback method asks the user to provide the number of
  299  *        bytes to be transferred as part of this request.
  300  *
  301  * @param[in] scic_user_io_request This parameter points to the user's
  302  *            IO request object.  It is a cookie that allows the user to
  303  *            provide the necessary information for this callback.
  304  *
  305  * @return This method returns the number of payload data bytes to be
  306  *         transferred for this IO request.
  307  */
  308 U32 scic_cb_io_request_get_transfer_length(
  309    void * scic_user_io_request
  310 );
  311 
  312 /**
  313  * @brief This callback method asks the user to provide the data direction
  314  *        for this request.
  315  *
  316  * @param[in] scic_user_io_request This parameter points to the user's
  317  *            IO request object.  It is a cookie that allows the user to
  318  *            provide the necessary information for this callback.
  319  *
  320  * @return This method returns the value of SCI_IO_REQUEST_DATA_OUT or
  321  *         SCI_IO_REQUEST_DATA_IN, or SCI_IO_REQUEST_NO_DATA.
  322  */
  323 SCI_IO_REQUEST_DATA_DIRECTION scic_cb_io_request_get_data_direction(
  324    void * scic_user_io_request
  325 );
  326 
  327 #ifdef ENABLE_OSSL_COPY_BUFFER
  328 /**
  329  * @brief This method is presently utilized in the PIO path,
  330  *        copies from UF buffer to the SGL buffer. This method
  331  *        can be served for other OS related copies.
  332  *
  333  * @param[in] scic_user_io_request. This parameter points to the user's
  334  *            IO request object.  It is a cookie that allows the user to
  335  *            provide the necessary information for this callback.
  336  * @param[in] source addr. Address of UF buffer.
  337  * @param[in] offset. This parameter specifies the offset into the data
  338  *            buffers pointed to by the SGL.  The byte offset starts at 0
  339  *            and continues until the last byte pointed to be the last SGL
  340  *            element.
  341  * @param[in] length. data length
  342  *
  343  * @return    None
  344  */
  345 void scic_cb_io_request_copy_buffer(
  346    void * scic_user_io_request,
  347    U8   *source_addr,
  348    U32   offset,
  349    U32   length
  350 );
  351 #endif
  352 
  353 #ifndef SCI_SGL_OPTIMIZATION_ENABLED
  354 /**
  355  * @brief This callback method asks the user to provide the address
  356  *        to where the next Scatter-Gather Element is located.
  357  *
  358  * Details regarding usage:
  359  *   - Regarding the first SGE: the user should initialize an index,
  360  *     or a pointer, prior to construction of the request that will
  361  *     reference the very first scatter-gather element.  This is
  362  *     important since this method is called for every scatter-gather
  363  *     element, including the first element.
  364  *   - Regarding the last SGE: the user should return NULL from this
  365  *     method when this method is called and the SGL has exhausted
  366  *     all elements.
  367  *
  368  * @param[in] scic_user_io_request This parameter points to the user's
  369  *            IO request object.  It is a cookie that allows the user to
  370  *            provide the necessary information for this callback.
  371  * @param[in] current_sge_address This parameter specifies the address for
  372  *            the current SGE (i.e. the one that has just processed).
  373  * @param[out] next_sge An address specifying the location for the next
  374  *            scatter gather element to be processed.
  375  *
  376  * @return None
  377  */
  378 void scic_cb_io_request_get_next_sge(
  379    void * scic_user_io_request,
  380    void * current_sge_address,
  381    void ** next_sge
  382 );
  383 #endif // SCI_SGL_OPTIMIZATION_ENABLED
  384 
  385 /**
  386  * @brief This callback method asks the user to provide the contents of the
  387  *        "address" field in the Scatter-Gather Element.
  388  *
  389  * @param[in] scic_user_io_request This parameter points to the user's
  390  *            IO request object.  It is a cookie that allows the user to
  391  *            provide the necessary information for this callback.
  392  * @param[in] sge_address This parameter specifies the address for the
  393  *            SGE from which to retrieve the address field.
  394  *
  395  * @return A physical address specifying the contents of the SGE's address
  396  *         field.
  397  */
  398 SCI_PHYSICAL_ADDRESS scic_cb_sge_get_address_field(
  399    void * scic_user_io_request,
  400    void * sge_address
  401 );
  402 
  403 /**
  404  * @brief This callback method asks the user to provide the contents of the
  405  *        "length" field in the Scatter-Gather Element.
  406  *
  407  * @param[in] scic_user_io_request This parameter points to the user's
  408  *            IO request object.  It is a cookie that allows the user to
  409  *            provide the necessary information for this callback.
  410  * @param[in] sge_address This parameter specifies the address for the
  411  *            SGE from which to retrieve the address field.
  412  *
  413  * @return This method returns the length field specified inside the SGE
  414  *         referenced by the sge_address parameter.
  415  */
  416 U32 scic_cb_sge_get_length_field(
  417    void * scic_user_io_request,
  418    void * sge_address
  419 );
  420 
  421 /**
  422  * @brief This callback method asks the user to provide the address for
  423  *        the command descriptor block (CDB) associated with this IO request.
  424  *
  425  * @param[in] scic_user_io_request This parameter points to the user's
  426  *            IO request object.  It is a cookie that allows the user to
  427  *            provide the necessary information for this callback.
  428  *
  429  * @return This method returns the virtual address of the CDB.
  430  */
  431 void * scic_cb_ssp_io_request_get_cdb_address(
  432    void * scic_user_io_request
  433 );
  434 
  435 /**
  436  * @brief This callback method asks the user to provide the length of
  437  *        the command descriptor block (CDB) associated with this IO request.
  438  *
  439  * @param[in] scic_user_io_request This parameter points to the user's
  440  *            IO request object.  It is a cookie that allows the user to
  441  *            provide the necessary information for this callback.
  442  *
  443  * @return This method returns the length of the CDB.
  444  */
  445 U32 scic_cb_ssp_io_request_get_cdb_length(
  446    void * scic_user_io_request
  447 );
  448 
  449 /**
  450  * @brief This callback method asks the user to provide the Logical Unit (LUN)
  451  *        associated with this IO request.
  452  *
  453  * @note The contents of the value returned from this callback are defined
  454  *       by the protocol standard (e.g. T10 SAS specification).  Please
  455  *       refer to the transport command information unit description
  456  *       in the associated standard.
  457  *
  458  * @param[in] scic_user_io_request This parameter points to the user's
  459  *            IO request object.  It is a cookie that allows the user to
  460  *            provide the necessary information for this callback.
  461  *
  462  * @return This method returns the LUN associated with this request.
  463  * @todo This should be U64?
  464  */
  465 U32 scic_cb_ssp_io_request_get_lun(
  466    void * scic_user_io_request
  467 );
  468 
  469 /**
  470  * @brief This callback method asks the user to provide the task attribute
  471  *        associated with this IO request.
  472  *
  473  * @note The contents of the value returned from this callback are defined
  474  *       by the protocol standard (e.g. T10 SAS specification).  Please
  475  *       refer to the transport command information unit description
  476  *       in the associated standard.
  477  *
  478  * @param[in] scic_user_io_request This parameter points to the user's
  479  *            IO request object.  It is a cookie that allows the user to
  480  *            provide the necessary information for this callback.
  481  *
  482  * @return This method returns the task attribute associated with this
  483  *         IO request.
  484  */
  485 U32 scic_cb_ssp_io_request_get_task_attribute(
  486    void * scic_user_io_request
  487 );
  488 
  489 /**
  490  * @brief This callback method asks the user to provide the command priority
  491  *        associated with this IO request.
  492  *
  493  * @note The contents of the value returned from this callback are defined
  494  *       by the protocol standard (e.g. T10 SAS specification).  Please
  495  *       refer to the transport command information unit description
  496  *       in the associated standard.
  497  *
  498  * @param[in] scic_user_io_request This parameter points to the user's
  499  *            IO request object.  It is a cookie that allows the user to
  500  *            provide the necessary information for this callback.
  501  *
  502  * @return This method returns the command priority associated with this
  503  *         IO request.
  504  */
  505 U32 scic_cb_ssp_io_request_get_command_priority(
  506    void * scic_user_io_request
  507 );
  508 
  509 /**
  510  * @brief This callback method asks the user if the received RX frame data is
  511  *        to be copied to the SGL or should be stored by the SCI core to be
  512  *        retrieved later with the scic_io_request_get_rx_frame().
  513  *
  514  * @param[in] scic_user_io_request This parameter points to the user's IO
  515  *       request object.  It is a cookie that allows the user to provide the
  516  *       necessary information for this callback.
  517  *
  518  * @return This method returns TRUE if the SCI core should copy the received
  519  *         frame data to the SGL location or FALSE if the SCI user wants to
  520  *         retrieve the frame data at a later time.
  521  */
  522 BOOL scic_cb_io_request_do_copy_rx_frames(
  523    void * scic_user_io_request
  524 );
  525 
  526 /**
  527  * @brief This callback method asks the user to return the SAT protocol
  528  *        definition for this IO request.  This method is only called by the
  529  *        SCI core if the request type constructed is SATA.
  530  *
  531  * @param[in] scic_user_io_request This parameter points to the user's IO
  532  *       request object.  It is a cookie that allows the user to provide the
  533  *       necessary information for this callback.
  534  *
  535  * @return This method returns one of the sat.h defined protocols for the
  536  *         given io request.
  537  */
  538 U8 scic_cb_request_get_sat_protocol(
  539    void * scic_user_io_request
  540 );
  541 
  542 /**
  543  * @brief This callback method asks the user to indicate if the IO is initially
  544  *           constructed or is reconstructed using the recycled memory.
  545  *
  546  * @param[in] scic_user_io_request This parameter points to the user's IO
  547  *       request object.  It is a cookie that allows the user to provide the
  548  *       necessary information for this callback.
  549  *
  550  * @return This method returns TRUE if the request is initial constructed.
  551  *         This method returns FALSE if the request is constructed using recycled
  552  *         memory. For many scic user, this method mostly always returns TRUE.
  553  */
  554 BOOL scic_cb_request_is_initial_construction(
  555    void * scic_user_io_request
  556 );
  557 
  558 /**
  559  * @brief This method returns the Logical Unit to be utilized for this
  560  *        task management request.
  561  *
  562  * @note The contents of the value returned from this callback are defined
  563  *       by the protocol standard (e.g. T10 SAS specification).  Please
  564  *       refer to the transport task information unit description
  565  *       in the associated standard.
  566  *
  567  * @param[in] scic_user_task_request This parameter points to the user's
  568  *            task request object.  It is a cookie that allows the user to
  569  *            provide the necessary information for this callback.
  570  *
  571  * @return This method returns the LUN associated with this request.
  572  * @todo This should be U64?
  573  */
  574 U32 scic_cb_ssp_task_request_get_lun(
  575    void * scic_user_task_request
  576 );
  577 
  578 /**
  579  * @brief This method returns the task management function to be utilized
  580  *        for this task request.
  581  *
  582  * @note The contents of the value returned from this callback are defined
  583  *       by the protocol standard (e.g. T10 SAS specification).  Please
  584  *       refer to the transport task information unit description
  585  *       in the associated standard.
  586  *
  587  * @param[in] scic_user_task_request This parameter points to the user's
  588  *            task request object.  It is a cookie that allows the user to
  589  *            provide the necessary information for this callback.
  590  *
  591  * @return This method returns an unsigned byte representing the task
  592  *         management function to be performed.
  593  */
  594 U8 scic_cb_ssp_task_request_get_function(
  595    void * scic_user_task_request
  596 );
  597 
  598 /**
  599  * @brief This method returns the task management IO tag to be managed.
  600  *        Depending upon the task management function the value returned
  601  *        from this method may be ignored.
  602  *
  603  * @param[in] scic_user_task_request This parameter points to the user's
  604  *            task request object.  It is a cookie that allows the user to
  605  *            provide the necessary information for this callback.
  606  *
  607  * @return This method returns an unsigned 16-bit word depicting the IO
  608  *         tag to be managed.
  609  */
  610 U16 scic_cb_ssp_task_request_get_io_tag_to_manage(
  611    void * scic_user_task_request
  612 );
  613 
  614 /**
  615  * @brief This callback method asks the user to provide the virtual
  616  *        address of the response data buffer for the supplied IO request.
  617  *
  618  * @param[in] scic_user_task_request This parameter points to the user's
  619  *            task request object.  It is a cookie that allows the user to
  620  *            provide the necessary information for this callback.
  621  *
  622  * @return This method returns the virtual address for the response data buffer
  623  *         associated with this IO request.
  624  */
  625 void * scic_cb_ssp_task_request_get_response_data_address(
  626    void * scic_user_task_request
  627 );
  628 
  629 /**
  630  * @brief This callback method asks the user to provide the length of the
  631  *        response data buffer for the supplied IO request.
  632  *
  633  * @param[in] scic_user_task_request This parameter points to the user's
  634  *            task request object.  It is a cookie that allows the user to
  635  *            provide the necessary information for this callback.
  636  *
  637  * @return This method returns the length of the response buffer data
  638  *         associated with this IO request.
  639  */
  640 U32 scic_cb_ssp_task_request_get_response_data_length(
  641    void * scic_user_task_request
  642 );
  643 
  644 /**
  645  * @brief In this method the user is expected to log the supplied
  646  *        error information.  The user must be capable of handling variable
  647  *        length argument lists and should consider prepending the fact
  648  *        that this is an error from the core.
  649  *
  650  * @param[in]  logger_object This parameter specifies the logger object
  651  *             associated with this message.
  652  * @param[in]  log_object_mask This parameter specifies the log objects
  653  *             for which this message is being generated.
  654  * @param[in]  log_message This parameter specifies the message to be logged.
  655  *
  656  * @return none
  657  */
  658 void scic_cb_logger_log_error(
  659    SCI_LOGGER_HANDLE_T   logger_object,
  660    U32                   log_object_mask,
  661    char                * log_message,
  662    ...
  663 );
  664 
  665 
  666 /**
  667  * @brief In this method the user is expected to log the supplied warning
  668  *        information.  The user must be capable of handling variable
  669  *        length argument lists and should consider prepending the fact
  670  *        that this is a warning from the core.
  671  *
  672  * @param[in]  logger_object This parameter specifies the logger object
  673  *             associated with this message.
  674  * @param[in]  log_object_mask This parameter specifies the log objects
  675  *             for which this message is being generated.
  676  * @param[in]  log_message This parameter specifies the message to be logged.
  677  *
  678  * @return none
  679  */
  680 void scic_cb_logger_log_warning(
  681    SCI_LOGGER_HANDLE_T   logger_object,
  682    U32                   log_object_mask,
  683    char                * log_message,
  684    ...
  685 );
  686 
  687 
  688 /**
  689  * @brief In this method the user is expected to log the supplied debug
  690  *        information.  The user must be capable of handling variable
  691  *        length argument lists and should consider prepending the fact
  692  *        that this is a debug message from the core.
  693  *
  694  * @param[in]  logger_object This parameter specifies the logger object
  695  *             associated with this message.
  696  * @param[in]  log_object_mask This parameter specifies the log objects
  697  *             for which this message is being generated.
  698  * @param[in]  log_message This parameter specifies the message to be logged.
  699  *
  700  * @return none
  701  */
  702 void scic_cb_logger_log_info(
  703    SCI_LOGGER_HANDLE_T   logger_object,
  704    U32                   log_object_mask,
  705    char                * log_message,
  706    ...
  707 );
  708 
  709 
  710 /**
  711  * @brief In this method the user is expected to log the supplied function
  712  *        trace information.  The user must be capable of handling variable
  713  *        length argument lists and should consider prepending the fact
  714  *        that this is a function trace (i.e. entry/exit) message from the
  715  *        core.
  716  *
  717  * @param[in]  logger_object This parameter specifies the logger object
  718  *             associated with this message.
  719  * @param[in]  log_object_mask This parameter specifies the log objects
  720  *             for which this message is being generated.
  721  * @param[in]  log_message This parameter specifies the message to be logged.
  722  *
  723  * @return none
  724  */
  725 void scic_cb_logger_log_trace(
  726    SCI_LOGGER_HANDLE_T   logger_object,
  727    U32                   log_object_mask,
  728    char                * log_message,
  729    ...
  730 );
  731 
  732 
  733 /**
  734  * @brief In this method the user is expected to log the supplied state
  735  *        transition information. The user must be capable of handling
  736  *        variable length argument lists and should consider prepending the
  737  *        fact that this is a warning from the core.
  738  *
  739  * @param[in]  logger_object This parameter specifies the logger object
  740  *             associated with this message.
  741  * @param[in]  log_object_mask This parameter specifies the log objects
  742  *             for which this message is being generated.
  743  * @param[in]  log_message This parameter specifies the message to be logged.
  744  *
  745  * @return none
  746  */
  747 void scic_cb_logger_log_states(
  748    SCI_LOGGER_HANDLE_T   logger_object,
  749    U32                   log_object_mask,
  750    char                * log_message,
  751    ...
  752 );
  753 
  754 
  755 /**
  756  * @brief In this method the user must return the base address register (BAR)
  757  *        value for the supplied base address register number.
  758  *
  759  * @param[in] controller The controller for which to retrieve the bar number.
  760  * @param[in] bar_number This parameter depicts the BAR index/number to be read.
  761  *
  762  * @return Return a pointer value indicating the contents of the BAR.
  763  * @retval NULL indicates an invalid BAR index/number was specified.
  764  * @retval All other values indicate a valid VIRTUAL address from the BAR.
  765  */
  766 void * scic_cb_pci_get_bar(
  767    SCI_CONTROLLER_HANDLE_T  controller,
  768    U16                      bar_number
  769 );
  770 
  771 /**
  772  * @brief In this method the user must read from PCI memory via access.
  773  *        This method is used for access to memory space and IO space.
  774  *
  775  * @param[in]  controller The controller for which to read a DWORD.
  776  * @param[in]  address This parameter depicts the address from
  777  *             which to read.
  778  *
  779  * @return The value being returned from the PCI memory location.
  780  *
  781  * @todo This PCI memory access calls likely need to be optimized into macro?
  782  */
  783 U32 scic_cb_pci_read_dword(
  784    SCI_CONTROLLER_HANDLE_T   controller,
  785    void                    * address
  786 );
  787 
  788 /**
  789  * @brief In this method the user must write to PCI memory via access.
  790  *        This method is used for access to memory space and IO space.
  791  *
  792  * @param[in]  controller The controller for which to read a DWORD.
  793  * @param[in]  address This parameter depicts the address into
  794  *             which to write.
  795  * @param[out] write_value This parameter depicts the value being written
  796  *             into the PCI memory location.
  797  *
  798  * @todo This PCI memory access calls likely need to be optimized into macro?
  799  */
  800 void scic_cb_pci_write_dword(
  801    SCI_CONTROLLER_HANDLE_T   controller,
  802    void                    * address,
  803    U32                       write_value
  804 );
  805 
  806 /**
  807  * @brief This method informs the user when a stop operation on the port
  808  *        has completed.
  809  *
  810  * @param[in] controller This parameter represents the controller which
  811  *            contains the port.
  812  * @param[in] port This parameter specifies the SCI port object for which
  813  *            the callback is being invoked.
  814  * @param[in] completion_status This parameter specifies the status for
  815  *            the operation being completed.
  816  *
  817  * @return none
  818  */
  819 void scic_cb_port_stop_complete(
  820    SCI_CONTROLLER_HANDLE_T  controller,
  821    SCI_PORT_HANDLE_T        port,
  822    SCI_STATUS               completion_status
  823 );
  824 
  825 /**
  826  * @brief This method informs the user when a hard reset on the port
  827  *        has completed.  This hard reset could have been initiated by the
  828  *        user or by the remote port.
  829  *
  830  * @param[in] controller This parameter represents the controller which
  831  *            contains the port.
  832  * @param[in] port This parameter specifies the SCI port object for which
  833  *            the callback is being invoked.
  834  * @param[in] completion_status This parameter specifies the status for
  835  *            the operation being completed.
  836  *
  837  * @return none
  838  */
  839 void scic_cb_port_hard_reset_complete(
  840    SCI_CONTROLLER_HANDLE_T  controller,
  841    SCI_PORT_HANDLE_T        port,
  842    SCI_STATUS               completion_status
  843 );
  844 
  845 /**
  846  * @brief This method informs the user that the port is now in a ready
  847  *        state and can be utilized to issue IOs.
  848  *
  849  * @param[in] controller This parameter represents the controller which
  850  *            contains the port.
  851  * @param[in] port This parameter specifies the SCI port object for which
  852  *            the callback is being invoked.
  853  *
  854  * @return none
  855  */
  856 void scic_cb_port_ready(
  857    SCI_CONTROLLER_HANDLE_T  controller,
  858    SCI_PORT_HANDLE_T        port
  859 );
  860 
  861 /**
  862  * @brief This method informs the user that the port is now not in a ready
  863  *        (i.e. busy) state and can't be utilized to issue IOs.
  864  *
  865  * @param[in] controller This parameter represents the controller which
  866  *            contains the port.
  867  * @param[in] port This parameter specifies the SCI port object for which
  868  *            the callback is being invoked.
  869  * @param[in] reason_code This parameter specifies the reason for the port
  870  *            not ready callback.
  871  *
  872  * @return none
  873  */
  874 void scic_cb_port_not_ready(
  875    SCI_CONTROLLER_HANDLE_T  controller,
  876    SCI_PORT_HANDLE_T        port,
  877    U32                      reason_code
  878 );
  879 
  880 /**
  881  * @brief This method informs the SCI Core user that a phy/link became
  882  *        ready, but the phy is not allowed in the port.  In some
  883  *        situations the underlying hardware only allows for certain phy
  884  *        to port mappings.  If these mappings are violated, then this
  885  *        API is invoked.
  886  *
  887  * @param[in] controller This parameter represents the controller which
  888  *            contains the port.
  889  * @param[in] port This parameter specifies the SCI port object for which
  890  *            the callback is being invoked.
  891  * @param[in] phy This parameter specifies the phy that came ready, but the
  892  *            phy can't be a valid member of the port.
  893  *
  894  * @return none
  895  */
  896 void scic_cb_port_invalid_link_up(
  897    SCI_CONTROLLER_HANDLE_T  controller,
  898    SCI_PORT_HANDLE_T        port,
  899    SCI_PHY_HANDLE_T         phy
  900 );
  901 
  902 /**
  903  * @brief This callback method informs the user that a broadcast change
  904  *        primitive was received.
  905  *
  906  * @param[in] controller This parameter represents the controller which
  907  *            contains the port.
  908  * @param[in] port This parameter specifies the SCI port object for which
  909  *            the callback is being invoked.  For instances where the phy
  910  *            on which the primitive was received is not part of a port, this
  911  *            parameter will be SCI_INVALID_HANDLE_T.
  912  * @param[in] phy This parameter specifies the phy on which the primitive
  913  *            was received.
  914  *
  915  * @return none
  916  */
  917 void scic_cb_port_bc_change_primitive_recieved(
  918    SCI_CONTROLLER_HANDLE_T  controller,
  919    SCI_PORT_HANDLE_T        port,
  920    SCI_PHY_HANDLE_T         phy
  921 );
  922 
  923 /**
  924  * @brief This callback method informs the user that a broadcast SES
  925  *        primitive was received.
  926  *
  927  * @param[in] controller This parameter represents the controller which
  928  *            contains the port.
  929  * @param[in] port This parameter specifies the SCI port object for which
  930  *            the callback is being invoked.  For instances where the phy
  931  *            on which the primitive was received is not part of a port, this
  932  *            parameter will be SCI_INVALID_HANDLE_T.
  933  * @param[in] phy This parameter specifies the phy on which the primitive
  934  *            was received.
  935  *
  936  * @return none
  937  */
  938 void scic_cb_port_bc_ses_primitive_recieved(
  939    SCI_CONTROLLER_HANDLE_T  controller,
  940    SCI_PORT_HANDLE_T        port,
  941    SCI_PHY_HANDLE_T         phy
  942 );
  943 
  944 /**
  945  * @brief This callback method informs the user that a broadcast EXPANDER
  946  *        primitive was received.
  947  *
  948  * @param[in] controller This parameter represents the controller which
  949  *            contains the port.
  950  * @param[in] port This parameter specifies the SCI port object for which
  951  *            the callback is being invoked.  For instances where the phy
  952  *            on which the primitive was received is not part of a port, this
  953  *            parameter will be SCI_INVALID_HANDLE_T.
  954  * @param[in] phy This parameter specifies the phy on which the primitive
  955  *            was received.
  956  *
  957  * @return none
  958  */
  959 void scic_cb_port_bc_expander_primitive_recieved(
  960    SCI_CONTROLLER_HANDLE_T  controller,
  961    SCI_PORT_HANDLE_T        port,
  962    SCI_PHY_HANDLE_T         phy
  963 );
  964 
  965 /**
  966  * @brief This callback method informs the user that a broadcast ASYNCHRONOUS
  967  *        EVENT (AEN) primitive was received.
  968  *
  969  * @param[in] controller This parameter represents the controller which
  970  *            contains the port.
  971  * @param[in] port This parameter specifies the SCI port object for which
  972  *            the callback is being invoked.  For instances where the phy
  973  *            on which the primitive was received is not part of a port, this
  974  *            parameter will be SCI_INVALID_HANDLE_T.
  975  * @param[in] phy This parameter specifies the phy on which the primitive
  976  *            was received.
  977  *
  978  * @return none
  979  */
  980 void scic_cb_port_bc_aen_primitive_recieved(
  981    SCI_CONTROLLER_HANDLE_T  controller,
  982    SCI_PORT_HANDLE_T        port,
  983    SCI_PHY_HANDLE_T         phy
  984 );
  985 
  986 /**
  987  * @brief This callback method informs the user that a phy has become
  988  *        operational and is capable of communicating with the remote end
  989  *        point.
  990  *
  991  * @param[in] controller This parameter represents the controller
  992  *            associated with the phy.
  993  * @param[in] port This parameter specifies the port object for which the
  994  *            user callback is being invoked.  There may be conditions where
  995  *            this parameter can be SCI_INVALID_HANDLE
  996  * @param[in] phy This parameter specifies the phy object for which the
  997  *            user callback is being invoked.
  998  *
  999  * @return none
 1000  */
 1001 void scic_cb_port_link_up(
 1002    SCI_CONTROLLER_HANDLE_T  controller,
 1003    SCI_PORT_HANDLE_T        port,
 1004    SCI_PHY_HANDLE_T         phy
 1005 );
 1006 
 1007 /**
 1008  * @brief This callback method informs the user that a phy is no longer
 1009  *        operational and is not capable of communicating with the remote end
 1010  *        point.
 1011  *
 1012  * @param[in] controller This parameter represents the controller
 1013  *            associated with the phy.
 1014  * @param[in] port This parameter specifies the port object for which the
 1015  *            user callback is being invoked.  There may be conditions where
 1016  *            this parameter can be SCI_INVALID_HANDLE
 1017  * @param[in] phy This parameter specifies the phy object for which the
 1018  *            user callback is being invoked.
 1019  *
 1020  * @return none
 1021  */
 1022 void scic_cb_port_link_down(
 1023    SCI_CONTROLLER_HANDLE_T  controller,
 1024    SCI_PORT_HANDLE_T        port,
 1025    SCI_PHY_HANDLE_T         phy
 1026 );
 1027 
 1028 /**
 1029  * @brief This user callback method will inform the user that a start
 1030  *        operation has completed.
 1031  *
 1032  * @param[in] controller This parameter specifies the core controller
 1033  *            associated with the completion callback.
 1034  * @param[in] remote_device This parameter specifies the remote device
 1035  *            associated with the completion callback.
 1036  * @param[in] completion_status This parameter specifies the completion
 1037  *            status for the operation.
 1038  *
 1039  * @return none
 1040  */
 1041 void scic_cb_remote_device_start_complete(
 1042    SCI_CONTROLLER_HANDLE_T    controller,
 1043    SCI_REMOTE_DEVICE_HANDLE_T remote_device,
 1044    SCI_STATUS                 completion_status
 1045 );
 1046 
 1047 /**
 1048  * @brief This user callback method will inform the user that a stop
 1049  *        operation has completed.
 1050  *
 1051  * @param[in] controller This parameter specifies the core controller
 1052  *            associated with the completion callback.
 1053  * @param[in] remote_device This parameter specifies the remote device
 1054  *            associated with the completion callback.
 1055  * @param[in] completion_status This parameter specifies the completion
 1056  *            status for the operation.
 1057  *
 1058  * @return none
 1059  */
 1060 void scic_cb_remote_device_stop_complete(
 1061    SCI_CONTROLLER_HANDLE_T    controller,
 1062    SCI_REMOTE_DEVICE_HANDLE_T remote_device,
 1063    SCI_STATUS                 completion_status
 1064 );
 1065 
 1066 /**
 1067  * @brief This user callback method will inform the user that a remote
 1068  *        device is now capable of handling IO requests.
 1069  *
 1070  * @param[in] controller This parameter specifies the core controller
 1071  *            associated with the completion callback.
 1072  * @param[in] remote_device This parameter specifies the remote device
 1073  *            associated with the callback.
 1074  *
 1075  * @return none
 1076  */
 1077 void scic_cb_remote_device_ready(
 1078    SCI_CONTROLLER_HANDLE_T     controller,
 1079    SCI_REMOTE_DEVICE_HANDLE_T  remote_device
 1080 );
 1081 
 1082 /**
 1083  * @brief This user callback method will inform the user that a remote
 1084  *        device is no longer capable of handling IO requests (until a
 1085  *        ready callback is invoked).
 1086  *
 1087  * @param[in] controller This parameter specifies the core controller
 1088  *            associated with the completion callback.
 1089  * @param[in] remote_device This parameter specifies the remote device
 1090  *            associated with the callback.
 1091  * @param[in] reason_code This paramete specifies the reason the remote
 1092  *            device is not ready.
 1093  *
 1094  * @return none
 1095  */
 1096 void scic_cb_remote_device_not_ready(
 1097    SCI_CONTROLLER_HANDLE_T     controller,
 1098    SCI_REMOTE_DEVICE_HANDLE_T  remote_device,
 1099    U32                         reason_code
 1100 );
 1101 
 1102 
 1103 /**
 1104  * @brief This user callback method will inform the user that this controller
 1105  *        is having unexpected error. The user can choose to reset the controller.
 1106  * @param[in] controller The controller that is failed at the moment.
 1107  *
 1108  * @return none
 1109  */
 1110 void scic_cb_controller_error(
 1111    SCI_CONTROLLER_HANDLE_T     controller,
 1112    SCI_CONTROLLER_ERROR        error
 1113 );
 1114 
 1115 
 1116 #if !defined(DISABLE_ATAPI)
 1117 /**
 1118  * @brief This user callback gets from stp packet io's user request
 1119  *           the CDB address.
 1120  * @param[in] scic_user_io_request
 1121  *
 1122  * @return The cdb address.
 1123  */
 1124 void * scic_cb_stp_packet_io_request_get_cdb_address(
 1125    void * scic_user_io_request
 1126 );
 1127 
 1128 /**
 1129  * @brief This user callback gets from stp packet io's user request
 1130  *           the CDB length.
 1131  * @param[in] scic_user_io_request
 1132  *
 1133  * @return The cdb length.
 1134  */
 1135 U32 scic_cb_stp_packet_io_request_get_cdb_length(
 1136    void * scic_user_io_request
 1137 );
 1138 #else //!defined(DISABLE_ATAPI)
 1139 #define scic_cb_stp_packet_io_request_get_cdb_address(scic_user_io_request) NULL
 1140 #define scic_cb_stp_packet_io_request_get_cdb_length(scic_user_io_request) 0
 1141 #endif //!defined(DISABLE_ATAPI)
 1142 
 1143 #ifdef __cplusplus
 1144 }
 1145 #endif // __cplusplus
 1146 
 1147 #endif // _SCIC_USER_CALLBACK_H_
 1148 

Cache object: f8066655cf383b35c1b9a6bc281a9079


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