Lines Matching refs:ring
36 static int hnae_alloc_buffer(struct hnae_ring *ring, struct hnae_desc_cb *cb)
38 unsigned int order = hnae_page_order(ring);
48 cb->length = hnae_page_size(ring);
54 static void hnae_free_buffer(struct hnae_ring *ring, struct hnae_desc_cb *cb)
61 else if (unlikely(is_rx_ring(ring)))
67 static int hnae_map_buffer(struct hnae_ring *ring, struct hnae_desc_cb *cb)
69 cb->dma = dma_map_page(ring_to_dev(ring), cb->priv, 0,
70 cb->length, ring_to_dma_dir(ring));
72 if (dma_mapping_error(ring_to_dev(ring), cb->dma))
78 static void hnae_unmap_buffer(struct hnae_ring *ring, struct hnae_desc_cb *cb)
81 dma_unmap_single(ring_to_dev(ring), cb->dma, cb->length,
82 ring_to_dma_dir(ring));
84 dma_unmap_page(ring_to_dev(ring), cb->dma, cb->length,
85 ring_to_dma_dir(ring));
119 static void hnae_free_buffers(struct hnae_ring *ring)
123 for (i = 0; i < ring->desc_num; i++)
124 hnae_free_buffer_detach(ring, i);
128 static int hnae_alloc_buffers(struct hnae_ring *ring)
132 for (i = 0; i < ring->desc_num; i++) {
133 ret = hnae_alloc_buffer_attach(ring, i);
142 hnae_free_buffer_detach(ring, j);
147 static void hnae_free_desc(struct hnae_ring *ring)
149 dma_unmap_single(ring_to_dev(ring), ring->desc_dma_addr,
150 ring->desc_num * sizeof(ring->desc[0]),
151 ring_to_dma_dir(ring));
152 ring->desc_dma_addr = 0;
153 kfree(ring->desc);
154 ring->desc = NULL;
158 static int hnae_alloc_desc(struct hnae_ring *ring)
160 int size = ring->desc_num * sizeof(ring->desc[0]);
162 ring->desc = kzalloc(size, GFP_KERNEL);
163 if (!ring->desc)
166 ring->desc_dma_addr = dma_map_single(ring_to_dev(ring),
167 ring->desc, size, ring_to_dma_dir(ring));
168 if (dma_mapping_error(ring_to_dev(ring), ring->desc_dma_addr)) {
169 ring->desc_dma_addr = 0;
170 kfree(ring->desc);
171 ring->desc = NULL;
178 /* fini ring, also free the buffer for the ring */
179 static void hnae_fini_ring(struct hnae_ring *ring)
181 if (is_rx_ring(ring))
182 hnae_free_buffers(ring);
184 hnae_free_desc(ring);
185 kfree(ring->desc_cb);
186 ring->desc_cb = NULL;
187 ring->next_to_clean = 0;
188 ring->next_to_use = 0;
191 /* init ring, and with buffer for rx ring */
193 hnae_init_ring(struct hnae_queue *q, struct hnae_ring *ring, int flags)
197 if (ring->desc_num <= 0 || ring->buf_size <= 0)
200 ring->q = q;
201 ring->flags = flags;
202 ring->coal_param = q->handle->coal_param;
203 assert(!ring->desc && !ring->desc_cb && !ring->desc_dma_addr);
205 /* not matter for tx or rx ring, the ntc and ntc start from 0 */
206 assert(ring->next_to_use == 0);
207 assert(ring->next_to_clean == 0);
209 ring->desc_cb = kcalloc(ring->desc_num, sizeof(ring->desc_cb[0]),
211 if (!ring->desc_cb) {
216 ret = hnae_alloc_desc(ring);
220 if (is_rx_ring(ring)) {
221 ret = hnae_alloc_buffers(ring);
229 hnae_free_desc(ring);
231 kfree(ring->desc_cb);
232 ring->desc_cb = NULL;
296 for (i = 0; i < handle->q_num; i++) /* free ring*/
302 for (i = 0; i < handle->q_num; i++) {/* reinit ring*/