Print this page
    
NEX-1890 update oce from source provided by Emulex
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/sys/fibre-channel/fca/oce/oce_buf.h
          +++ new/usr/src/uts/common/sys/fibre-channel/fca/oce/oce_buf.h
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  
    | 
      ↓ open down ↓ | 
    11 lines elided | 
    
      ↑ open up ↑ | 
  
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22      -/* Copyright © 2003-2011 Emulex. All rights reserved.  */
       22 +/*
       23 + * Copyright (c) 2009-2012 Emulex. All rights reserved.
       24 + * Use is subject to license terms.
       25 + */
  23   26  
       27 +
  24   28  /*
  25   29   * Header file defining the driver buffer management interface
  26   30   */
  27   31  
  28   32  #ifndef _OCE_BUF_H_
  29   33  #define _OCE_BUF_H_
  30   34  
  31   35  #ifdef __cplusplus
  32   36  extern "C" {
  33   37  #endif
  34   38  
  35   39  #include <sys/ddidmareq.h>
  36   40  #include <oce_io.h>
  37   41  #include <oce_utils.h>
  38   42  
  39   43  #define GET_Q_NEXT(_START, _STEP, _END) \
  40   44          (((_START) + (_STEP)) < (_END) ? ((_START) + (_STEP)) \
  41   45          : (((_START) + (_STEP)) - (_END)))
  42   46  
  43   47  #define OCE_MAX_TX_HDL          8
  44   48  #define OCE_MAX_TXDMA_COOKIES   18
  45   49  #define OCE_TXMAP_ALIGN         1
  46   50  #define OCE_TX_MAX_FRAGS        (OCE_MAX_TX_HDL * OCE_MAX_TXDMA_COOKIES)
  47   51  
  48   52  /* helper structure to access OS addresses */
  49   53  typedef union  oce_addr_s {
  50   54          uint64_t addr64;
  51   55          struct {
  52   56  #ifdef _BIG_ENDIAN
  53   57                  uint32_t addr_hi;
  54   58                  uint32_t addr_lo;
  55   59  #else
  56   60                  uint32_t addr_lo;
  57   61                  uint32_t addr_hi;
  58   62  #endif
  59   63          }dw;
  60   64  }oce_addr64_t;
  61   65  
  
    | 
      ↓ open down ↓ | 
    28 lines elided | 
    
      ↑ open up ↑ | 
  
  62   66  typedef struct oce_dma_buf_s {
  63   67          caddr_t         base;
  64   68          uint64_t        addr;
  65   69          ddi_acc_handle_t acc_handle;
  66   70          ddi_dma_handle_t dma_handle;
  67   71          /* size of the memory */
  68   72          size_t          size;
  69   73          size_t          off;
  70   74          size_t          len;
  71   75          uint32_t        num_pages;
       76 +        uint32_t        ncookies;
       77 +        ddi_dma_cookie_t cookie;
  72   78  }oce_dma_buf_t;
  73   79  
  74      -#define DBUF_PA(obj) (((oce_dma_buf_t *)(obj))->addr)
  75      -#define DBUF_VA(obj) (((oce_dma_buf_t *)(obj))->base)
  76      -#define DBUF_DHDL(obj) (((oce_dma_buf_t *)(obj))->dma_handle)
  77      -#define DBUF_AHDL(obj) (((oce_dma_buf_t *)obj))->acc_handle)
  78      -#define DBUF_SYNC(obj, flags)   (void) ddi_dma_sync(DBUF_DHDL(obj), 0,\
  79      -                        0, (flags))
       80 +#define DBUF_PA(obj) ((obj).addr)
       81 +#define DBUF_VA(obj) ((obj).base)
       82 +#define DBUF_DHDL(obj) ((obj).dma_handle)
       83 +#define DBUF_AHDL(obj) ((obj).acc_handle)
       84 +#define DBUF_SYNC(obj, off, len, flags)         \
       85 +        (void) ddi_dma_sync(DBUF_DHDL(obj), off, len, (flags))
  80   86  
  81   87  typedef struct oce_ring_buffer_s {
  82   88          uint16_t    cidx;       /* Get ptr */
  83   89          uint16_t    pidx;       /* Put Ptr */
  84   90          size_t  item_size;      /* Size */
  85   91          size_t  num_items;      /* count */
  86   92          uint32_t  num_used;
  87      -        oce_dma_buf_t   *dbuf;  /* dma buffer */
       93 +        oce_dma_buf_t   dbuf;   /* dma buffer */
  88   94  }oce_ring_buffer_t;
  89   95  
  90   96  typedef struct oce_rq_bdesc_s {
  91      -        oce_dma_buf_t   *rqb;
       97 +        oce_dma_buf_t   rqb;
  92   98          struct oce_rq   *rq;
  93   99          oce_addr64_t    frag_addr;
  94  100          mblk_t          *mp;
  95  101          frtn_t          fr_rtn;
  96      -    uint32_t    ref_cnt;
      102 +        uint32_t        ref_cnt;
  97  103  }oce_rq_bdesc_t;
  98  104  
  99  105  typedef struct oce_wq_bdesc_s {
 100      -        OCE_LIST_NODE_T  link;
 101      -        oce_dma_buf_t   *wqb;
      106 +        oce_dma_buf_t   wqb;
 102  107          oce_addr64_t    frag_addr;
 103  108  } oce_wq_bdesc_t;
 104  109  
 105  110  typedef struct oce_wq_mdesc_s {
 106      -        OCE_LIST_NODE_T         link;
 107  111          ddi_dma_handle_t        dma_handle;
 108  112  } oce_wq_mdesc_t;
 109  113  
 110  114  enum entry_type {
 111  115          HEADER_WQE = 0x1, /* arbitrary value */
 112  116          MAPPED_WQE,
 113  117          COPY_WQE,
 114  118          DUMMY_WQE
 115  119  };
 116  120  
 117  121  typedef struct _oce_handle_s {
 118  122      enum entry_type     type;
 119  123          void            *hdl; /* opaque handle */
 120  124  }oce_handle_t;
 121  125  
 122  126  typedef struct _oce_wqe_desc_s {
 123      -        OCE_LIST_NODE_T  link;
      127 +        list_node_t     link;
 124  128          oce_handle_t    hdesc[OCE_MAX_TX_HDL];
 125  129          struct oce_nic_frag_wqe frag[OCE_TX_MAX_FRAGS];
 126  130          struct oce_wq  *wq;
 127  131          mblk_t          *mp;
 128  132          uint16_t        wqe_cnt;
 129  133          uint16_t        frag_idx;
 130  134          uint16_t        frag_cnt;
 131  135          uint16_t        nhdl;
 132  136  }oce_wqe_desc_t;
 133  137  
 134  138  #pragma pack(1)
 135  139  /* Always keep it 2 mod 4 */
 136  140  typedef struct _oce_rq_buf_hdr_s {
 137  141          void *datap;
 138  142          uint8_t pad[18];
 139  143          /* ether_vlan_header_t vhdr; */
 140  144  } oce_rq_buf_hdr_t;
 141  145  #pragma pack()
 142  146  
 143      -#define OCE_RQE_BUF_HEADROOM    18
      147 +#define OCE_RQE_BUF_HEADROOM    10      /* always 2 mod  4 */
      148 +#define OCE_IP_ALIGN            2       /* Align the IP header */
 144  149  #define MAX_POOL_NAME           32
 145  150  
 146  151  #define RING_NUM_PENDING(ring)  ring->num_used
 147  152  
 148  153  #define RING_NUM_FREE(ring)     \
 149  154          (uint32_t)(ring->num_items - ring->num_used)
 150  155  
 151  156  #define RING_FULL(ring) (ring->num_used == ring->num_items)
 152  157  
 153  158  #define RING_EMPTY(ring) (ring->num_used == 0)
 154  159  
 155  160  #define RING_GET(ring, n)                       \
 156  161          ring->cidx = GET_Q_NEXT(ring->cidx, n, ring->num_items)
 157  162  
 158  163  #define RING_PUT(ring, n)                       \
 159  164          ring->pidx = GET_Q_NEXT(ring->pidx, n, ring->num_items)
 160  165  
 161  166  #define RING_GET_CONSUMER_ITEM_VA(ring, type)   \
 162  167          (void*)(((type *)DBUF_VA(ring->dbuf)) + ring->cidx)
 163  168  
 164  169  #define RING_GET_CONSUMER_ITEM_PA(ring, type)           \
 165  170          (uint64_t)(((type *)DBUF_PA(ring->dbuf)) + ring->cidx)
 166  171  
 167  172  #define RING_GET_PRODUCER_ITEM_VA(ring, type)           \
 168  173          (void *)(((type *)DBUF_VA(ring->dbuf)) + ring->pidx)
 169  174  
 170  175  #define RING_GET_PRODUCER_ITEM_PA(ring, type)           \
 171  176          (uint64_t)(((type *)DBUF_PA(ring->dbuf)) + ring->pidx)
 172  177  
 173  178  /* Rq cache */
 174  179  int oce_rqb_cache_create(struct oce_rq *rq, size_t buf_size);
 175  180  void oce_rqb_cache_destroy(struct oce_rq *rq);
 176  181  
 177  182  /* Wq Cache */
 178  183  int oce_wqe_desc_ctor(void *buf, void *arg, int kmflags);
 179  184  void oce_wqe_desc_dtor(void *buf, void *arg);
 180  185  
 181  186  int oce_wqb_cache_create(struct oce_wq *wq, size_t buf_size);
 182  187  void oce_wqb_cache_destroy(struct oce_wq *wq);
 183  188  
 184  189  void oce_wqm_cache_destroy(struct oce_wq *wq);
 185  190  int oce_wqm_cache_create(struct oce_wq *wq);
 186  191  
 187  192  void oce_page_list(oce_dma_buf_t *dbuf,
 188  193      struct phys_addr *pa_list, int list_size);
 189  194  
 190  195  
 191  196  #ifdef __cplusplus
 192  197  }
 193  198  #endif
 194  199  
 195  200  #endif /* _OCE_BUF_H_ */
  
    | 
      ↓ open down ↓ | 
    42 lines elided | 
    
      ↑ open up ↑ | 
  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX