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/liquidio/lio_main.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  *   BSD LICENSE
    3  *
    4  *   Copyright(c) 2017 Cavium, Inc.. All rights reserved.
    5  *   All rights reserved.
    6  *
    7  *   Redistribution and use in source and binary forms, with or without
    8  *   modification, are permitted provided that the following conditions
    9  *   are met:
   10  *
   11  *     * Redistributions of source code must retain the above copyright
   12  *       notice, this list of conditions and the following disclaimer.
   13  *     * Redistributions in binary form must reproduce the above copyright
   14  *       notice, this list of conditions and the following disclaimer in
   15  *       the documentation and/or other materials provided with the
   16  *       distribution.
   17  *     * Neither the name of Cavium, Inc. nor the names of its
   18  *       contributors may be used to endorse or promote products derived
   19  *       from this software without specific prior written permission.
   20  *
   21  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   22  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   23  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   24  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   25  *   OWNER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   26  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   27  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   28  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   29  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   30  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   31  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   32  */
   33 /*$FreeBSD$*/
   34 
   35 /*
   36  *  \file lio_main.h
   37  *  \brief Host Driver: This file is included by all host driver source files
   38  *  to include common definitions.
   39  */
   40 
   41 #ifndef _LIO_MAIN_H_
   42 #define  _LIO_MAIN_H_
   43 
   44 extern unsigned int    lio_hwlro;
   45 
   46 #define LIO_CAST64(v)   ((long long)(long)(v))
   47 
   48 #define LIO_DRV_NAME    "lio"
   49 
   50 /** Swap 8B blocks */
   51 static inline void
   52 lio_swap_8B_data(uint64_t *data, uint32_t blocks)
   53 {
   54 
   55         while (blocks) {
   56                 *data = htobe64(*data);
   57                 blocks--;
   58                 data++;
   59         }
   60 }
   61 
   62 /*
   63  * \brief unmaps a PCI BAR
   64  * @param oct Pointer to Octeon device
   65  * @param baridx bar index
   66  */
   67 static inline void
   68 lio_unmap_pci_barx(struct octeon_device *oct, int baridx)
   69 {
   70 
   71         lio_dev_dbg(oct, "Freeing PCI mapped regions for Bar%d\n", baridx);
   72 
   73         if (oct->mem_bus_space[baridx].pci_mem != NULL) {
   74                 bus_release_resource(oct->device, SYS_RES_MEMORY,
   75                                      PCIR_BAR(baridx * 2),
   76                                      oct->mem_bus_space[baridx].pci_mem);
   77                 oct->mem_bus_space[baridx].pci_mem = NULL;
   78         }
   79 }
   80 
   81 /*
   82  * \brief maps a PCI BAR
   83  * @param oct Pointer to Octeon device
   84  * @param baridx bar index
   85  */
   86 static inline int
   87 lio_map_pci_barx(struct octeon_device *oct, int baridx)
   88 {
   89         int     rid = PCIR_BAR(baridx * 2);
   90 
   91         oct->mem_bus_space[baridx].pci_mem =
   92                 bus_alloc_resource_any(oct->device, SYS_RES_MEMORY, &rid,
   93                                        RF_ACTIVE);
   94 
   95         if (oct->mem_bus_space[baridx].pci_mem == NULL) {
   96                 lio_dev_err(oct, "Unable to allocate bus resource: memory\n");
   97                 return (ENXIO);
   98         }
   99 
  100         /* Save bus_space values for READ/WRITE_REG macros */
  101         oct->mem_bus_space[baridx].tag =
  102                 rman_get_bustag(oct->mem_bus_space[baridx].pci_mem);
  103         oct->mem_bus_space[baridx].handle =
  104                 rman_get_bushandle(oct->mem_bus_space[baridx].pci_mem);
  105 
  106         lio_dev_dbg(oct, "BAR%d Tag 0x%llx Handle 0x%llx\n",
  107                     baridx, LIO_CAST64(oct->mem_bus_space[baridx].tag),
  108                     LIO_CAST64(oct->mem_bus_space[baridx].handle));
  109 
  110         return (0);
  111 }
  112 
  113 static inline void
  114 lio_sleep_cond(struct octeon_device *oct, volatile int *condition)
  115 {
  116 
  117         while (!(*condition)) {
  118                 lio_mdelay(1);
  119                 lio_flush_iq(oct, oct->instr_queue[0], 0);
  120                 lio_process_ordered_list(oct, 0);
  121         }
  122 }
  123 
  124 int     lio_console_debug_enabled(uint32_t console);
  125 
  126 #ifndef ROUNDUP4
  127 #define ROUNDUP4(val)   (((val) + 3) & 0xfffffffc)
  128 #endif
  129 
  130 #ifndef ROUNDUP8
  131 #define ROUNDUP8(val)   (((val) + 7) & 0xfffffff8)
  132 #endif
  133 
  134 #define BIT_ULL(nr)     (1ULL << (nr))
  135 
  136 void    lio_free_mbuf(struct lio_instr_queue *iq,
  137                       struct lio_mbuf_free_info *finfo);
  138 void    lio_free_sgmbuf(struct lio_instr_queue *iq,
  139                         struct lio_mbuf_free_info *finfo);
  140 
  141 #endif  /* _LIO_MAIN_H_ */

Cache object: 1ba498791006e0eefa009f9f52ad60d2


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