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/twa/tw_osl_inline.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-FreeBSD
    3  *
    4  * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
    5  * Copyright (c) 2004-05 Vinod Kashyap.
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  *
   17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   27  * SUCH DAMAGE.
   28  *
   29  *      $FreeBSD: releng/12.0/sys/dev/twa/tw_osl_inline.h 326255 2017-11-27 14:52:40Z pfg $
   30  */
   31 
   32 /*
   33  * AMCC'S 3ware driver for 9000 series storage controllers.
   34  *
   35  * Author: Vinod Kashyap
   36  * Modifications by: Adam Radford
   37  */
   38 
   39 
   40 
   41 #ifndef TW_OSL_INLINE_H
   42 
   43 #define TW_OSL_INLINE_H
   44 
   45 
   46 /*
   47  * Inline functions shared between OSL and CL, and defined by OSL.
   48  */
   49 
   50 
   51 #include <dev/twa/tw_osl.h>
   52 
   53 
   54 
   55 /*
   56  * Function name:       tw_osl_init_lock
   57  * Description:         Initializes a lock.
   58  *
   59  * Input:               ctlr_handle     -- ptr to controller handle
   60  *                      lock_name       -- string indicating name of the lock
   61  * Output:              lock            -- ptr to handle to the initialized lock
   62  * Return value:        None
   63  */
   64 #define tw_osl_init_lock(ctlr_handle, lock_name, lock)  \
   65         mtx_init(lock, lock_name, NULL, MTX_SPIN)
   66 
   67 
   68 
   69 /*
   70  * Function name:       tw_osl_destroy_lock
   71  * Description:         Destroys a previously initialized lock.
   72  *
   73  * Input:               ctlr_handle     -- ptr to controller handle
   74  *                      lock            -- ptr to handle to the lock to be
   75  *                                              destroyed
   76  * Output:              None
   77  * Return value:        None
   78  */
   79 #define tw_osl_destroy_lock(ctlr_handle, lock)  \
   80         mtx_destroy(lock)
   81 
   82 
   83 
   84 /*
   85  * Function name:       tw_osl_get_lock
   86  * Description:         Acquires the specified lock.
   87  *
   88  * Input:               ctlr_handle     -- ptr to controller handle
   89  *                      lock            -- ptr to handle to the lock to be
   90  *                                              acquired
   91  * Output:              None
   92  * Return value:        None
   93  */
   94 #define tw_osl_get_lock(ctlr_handle, lock)      \
   95         mtx_lock_spin(lock)
   96 
   97 
   98 
   99 /*
  100  * Function name:       tw_osl_free_lock
  101  * Description:         Frees a previously acquired lock.
  102  *
  103  * Input:               ctlr_handle     -- ptr to controller handle
  104  *                      lock            -- ptr to handle to the lock to be freed
  105  * Output:              None
  106  * Return value:        None
  107  */
  108 #define tw_osl_free_lock(ctlr_handle, lock)     \
  109         mtx_unlock_spin(lock)
  110 
  111 
  112 
  113 #ifdef TW_OSL_DEBUG
  114 
  115 /*
  116  * Function name:       tw_osl_dbg_printf
  117  * Description:         Prints passed info (prefixed by ctlr name)to syslog
  118  *
  119  * Input:               ctlr_handle -- controller handle
  120  *                      fmt -- format string for the arguments to follow
  121  *                      ... -- variable number of arguments, to be printed
  122  *                              based on the fmt string
  123  * Output:              None
  124  * Return value:        Number of bytes printed
  125  */
  126 #define tw_osl_dbg_printf(ctlr_handle, fmt, args...)                    \
  127         twa_printf((ctlr_handle->osl_ctlr_ctxt), fmt, ##args)
  128 
  129 #endif /* TW_OSL_DEBUG */
  130 
  131 
  132 
  133 /*
  134  * Function name:       tw_osl_notify_event
  135  * Description:         Prints passed event info (prefixed by ctlr name)
  136  *                      to syslog
  137  *
  138  * Input:               ctlr_handle -- controller handle
  139  *                      event -- ptr to a packet describing the event/error
  140  * Output:              None
  141  * Return value:        None
  142  */
  143 #define tw_osl_notify_event(ctlr_handle, event)                         \
  144         twa_printf((ctlr_handle->osl_ctlr_ctxt),                        \
  145                 "%s: (0x%02X: 0x%04X): %s: %s\n",                       \
  146                 event->severity_str,                                    \
  147                 event->event_src,                                       \
  148                 event->aen_code,                                        \
  149                 event->parameter_data +                                 \
  150                         strlen(event->parameter_data) + 1,              \
  151                 event->parameter_data)
  152 
  153 
  154 
  155 /*
  156  * Function name:       tw_osl_read_reg
  157  * Description:         Reads a register on the controller
  158  *
  159  * Input:               ctlr_handle -- controller handle
  160  *                      offset -- offset from Base Address
  161  *                      size -- # of bytes to read
  162  * Output:              None
  163  * Return value:        Value read
  164  */
  165 #define tw_osl_read_reg         tw_osl_read_reg_inline
  166 static __inline TW_UINT32
  167 tw_osl_read_reg_inline(struct tw_cl_ctlr_handle *ctlr_handle,
  168         TW_INT32 offset, TW_INT32 size)
  169 {
  170         bus_space_tag_t         bus_tag =
  171                 ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_tag;
  172         bus_space_handle_t      bus_handle =
  173                 ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_handle;
  174 
  175         if (size == 4)
  176                 return((TW_UINT32)bus_space_read_4(bus_tag, bus_handle,
  177                         offset));
  178         else if (size == 2)
  179                 return((TW_UINT32)bus_space_read_2(bus_tag, bus_handle,
  180                         offset));
  181         else
  182                 return((TW_UINT32)bus_space_read_1(bus_tag, bus_handle,
  183                         offset));
  184 }
  185 
  186 
  187 
  188 /*
  189  * Function name:       tw_osl_write_reg
  190  * Description:         Writes to a register on the controller
  191  *
  192  * Input:               ctlr_handle -- controller handle
  193  *                      offset -- offset from Base Address
  194  *                      value -- value to write
  195  *                      size -- # of bytes to write
  196  * Output:              None
  197  * Return value:        None
  198  */
  199 #define tw_osl_write_reg        tw_osl_write_reg_inline
  200 static __inline TW_VOID
  201 tw_osl_write_reg_inline(struct tw_cl_ctlr_handle *ctlr_handle,
  202         TW_INT32 offset, TW_INT32 value, TW_INT32 size)
  203 {
  204         bus_space_tag_t         bus_tag =
  205                 ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_tag;
  206         bus_space_handle_t      bus_handle =
  207                 ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_handle;
  208 
  209         if (size == 4)
  210                 bus_space_write_4(bus_tag, bus_handle, offset, value);
  211         else if (size == 2)
  212                 bus_space_write_2(bus_tag, bus_handle, offset, (TW_INT16)value);
  213         else
  214                 bus_space_write_1(bus_tag, bus_handle, offset, (TW_INT8)value);
  215 }
  216 
  217 
  218 
  219 #ifdef TW_OSL_PCI_CONFIG_ACCESSIBLE
  220 
  221 /*
  222  * Function name:       tw_osl_read_pci_config
  223  * Description:         Reads from the PCI config space.
  224  *
  225  * Input:               sc      -- ptr to per ctlr structure
  226  *                      offset  -- register offset
  227  *                      size    -- # of bytes to be read
  228  * Output:              None
  229  * Return value:        Value read
  230  */
  231 #define tw_osl_read_pci_config(ctlr_handle, offset, size)               \
  232         pci_read_config(                                                \
  233                 ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_dev, \
  234                 offset, size)
  235 
  236 
  237 
  238 /*
  239  * Function name:       tw_osl_write_pci_config
  240  * Description:         Writes to the PCI config space.
  241  *
  242  * Input:               sc      -- ptr to per ctlr structure
  243  *                      offset  -- register offset
  244  *                      value   -- value to write
  245  *                      size    -- # of bytes to be written
  246  * Output:              None
  247  * Return value:        None
  248  */
  249 #define tw_osl_write_pci_config(ctlr_handle, offset, value, size)       \
  250         pci_write_config(                                               \
  251                 ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_dev, \
  252                 offset/*PCIR_STATUS*/, value, size)
  253 
  254 #endif /* TW_OSL_PCI_CONFIG_ACCESSIBLE */
  255 
  256 
  257 
  258 /*
  259  * Function name:       tw_osl_get_local_time
  260  * Description:         Gets the local time
  261  *
  262  * Input:               None
  263  * Output:              None
  264  * Return value:        local time
  265  */
  266 #define tw_osl_get_local_time()                                         \
  267         (time_second - utc_offset())
  268 
  269 
  270 /*
  271  * Function name:       tw_osl_delay
  272  * Description:         Spin for the specified time
  273  *
  274  * Input:               usecs -- micro-seconds to spin
  275  * Output:              None
  276  * Return value:        None
  277  */
  278 #define tw_osl_delay(usecs)     DELAY(usecs)
  279 
  280 
  281 
  282 #ifdef TW_OSL_CAN_SLEEP
  283 
  284 /*
  285  * Function name:       tw_osl_sleep
  286  * Description:         Sleep for the specified time, or until woken up
  287  *
  288  * Input:               ctlr_handle -- controller handle
  289  *                      sleep_handle -- handle to sleep on
  290  *                      timeout -- time period (in ms) to sleep
  291  * Output:              None
  292  * Return value:        0 -- successfully woken up
  293  *                      EWOULDBLOCK -- time out
  294  *                      ERESTART -- woken up by a signal
  295  */
  296 #define tw_osl_sleep(ctlr_handle, sleep_handle, timeout)                \
  297         tsleep((TW_VOID *)sleep_handle, PRIBIO, NULL, timeout)
  298 
  299 
  300 
  301 /*
  302  * Function name:       tw_osl_wakeup
  303  * Description:         Wake up a sleeping process
  304  *
  305  * Input:               ctlr_handle -- controller handle
  306  *                      sleep_handle -- handle of sleeping process to be
  307                                         woken up
  308  * Output:              None
  309  * Return value:        None
  310  */
  311 #define tw_osl_wakeup(ctlr_handle, sleep_handle)                        \
  312         wakeup_one(sleep_handle)
  313 
  314 #endif /* TW_OSL_CAN_SLEEP */
  315 
  316 
  317 
  318 /* Allows setting breakpoints in the CL code for debugging purposes. */
  319 #define tw_osl_breakpoint()             breakpoint()
  320 
  321 
  322 /* Text name of current function. */
  323 #define tw_osl_cur_func()               __func__
  324 
  325 
  326 /* Copy 'size' bytes from 'src' to 'dest'. */
  327 #define tw_osl_memcpy(dest, src, size)  bcopy(src, dest, size)
  328 
  329 
  330 /* Zero 'size' bytes starting at 'addr'. */
  331 #define tw_osl_memzero                  bzero
  332 
  333 
  334 /* Standard sprintf. */
  335 #define tw_osl_sprintf                  sprintf
  336 
  337 
  338 /* Copy string 'src' to 'dest'. */
  339 #define tw_osl_strcpy                   strcpy
  340 
  341 
  342 /* Return length of string pointed at by 'str'. */
  343 #define tw_osl_strlen                   strlen
  344 
  345 
  346 /* Standard vsprintf. */
  347 #define tw_osl_vsprintf                 vsprintf
  348 
  349 
  350 
  351 #endif /* TW_OSL_INLINE_H */

Cache object: a887a6c2876618f0720e9284a9334abb


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