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