Lines Matching full:buffer
13 #define buffer_to_dma_dir(buffer) (((buffer)->dir == HBG_DIR_RX) ? \ argument
34 static int hbg_dma_map(struct hbg_buffer *buffer) in hbg_dma_map() argument
36 struct hbg_priv *priv = buffer->priv; in hbg_dma_map()
38 buffer->skb_dma = dma_map_single(&priv->pdev->dev, in hbg_dma_map()
39 buffer->skb->data, buffer->skb_len, in hbg_dma_map()
40 buffer_to_dma_dir(buffer)); in hbg_dma_map()
41 if (unlikely(dma_mapping_error(&priv->pdev->dev, buffer->skb_dma))) in hbg_dma_map()
47 static void hbg_dma_unmap(struct hbg_buffer *buffer) in hbg_dma_unmap() argument
49 struct hbg_priv *priv = buffer->priv; in hbg_dma_unmap()
51 if (unlikely(!buffer->skb_dma)) in hbg_dma_unmap()
54 dma_unmap_single(&priv->pdev->dev, buffer->skb_dma, buffer->skb_len, in hbg_dma_unmap()
55 buffer_to_dma_dir(buffer)); in hbg_dma_unmap()
56 buffer->skb_dma = 0; in hbg_dma_unmap()
59 static void hbg_init_tx_desc(struct hbg_buffer *buffer, in hbg_init_tx_desc() argument
62 u32 ip_offset = buffer->skb->network_header - buffer->skb->mac_header; in hbg_init_tx_desc()
67 if (likely(buffer->skb->ip_summed == CHECKSUM_PARTIAL)) { in hbg_init_tx_desc()
74 buffer->skb->len); in hbg_init_tx_desc()
75 tx_desc->word2 = buffer->skb_dma; in hbg_init_tx_desc()
76 tx_desc->word3 = buffer->state_dma; in hbg_init_tx_desc()
87 struct hbg_buffer *buffer; in hbg_net_start_xmit() local
103 buffer = &ring->queue[ntu]; in hbg_net_start_xmit()
104 buffer->skb = skb; in hbg_net_start_xmit()
105 buffer->skb_len = skb->len; in hbg_net_start_xmit()
106 if (unlikely(hbg_dma_map(buffer))) { in hbg_net_start_xmit()
111 buffer->state = HBG_TX_STATE_START; in hbg_net_start_xmit()
112 hbg_init_tx_desc(buffer, &tx_desc); in hbg_net_start_xmit()
123 static void hbg_buffer_free_skb(struct hbg_buffer *buffer) in hbg_buffer_free_skb() argument
125 if (unlikely(!buffer->skb)) in hbg_buffer_free_skb()
128 dev_kfree_skb_any(buffer->skb); in hbg_buffer_free_skb()
129 buffer->skb = NULL; in hbg_buffer_free_skb()
132 static int hbg_buffer_alloc_skb(struct hbg_buffer *buffer) in hbg_buffer_alloc_skb() argument
134 u32 len = hbg_spec_max_frame_len(buffer->priv, buffer->dir); in hbg_buffer_alloc_skb()
135 struct hbg_priv *priv = buffer->priv; in hbg_buffer_alloc_skb()
137 buffer->skb = netdev_alloc_skb(priv->netdev, len); in hbg_buffer_alloc_skb()
138 if (unlikely(!buffer->skb)) in hbg_buffer_alloc_skb()
141 buffer->skb_len = len; in hbg_buffer_alloc_skb()
142 memset(buffer->skb->data, 0, HBG_PACKET_HEAD_SIZE); in hbg_buffer_alloc_skb()
146 static void hbg_buffer_free(struct hbg_buffer *buffer) in hbg_buffer_free() argument
148 hbg_dma_unmap(buffer); in hbg_buffer_free()
149 hbg_buffer_free_skb(buffer); in hbg_buffer_free()
160 struct hbg_buffer *buffer; in hbg_napi_tx_recycle() local
176 buffer = &ring->queue[ntc]; in hbg_napi_tx_recycle()
177 if (buffer->state != HBG_TX_STATE_COMPLETE) in hbg_napi_tx_recycle()
180 hbg_buffer_free(buffer); in hbg_napi_tx_recycle()
201 struct hbg_buffer *buffer; in hbg_rx_fill_one_buffer() local
207 buffer = &ring->queue[ring->ntu]; in hbg_rx_fill_one_buffer()
208 ret = hbg_buffer_alloc_skb(buffer); in hbg_rx_fill_one_buffer()
212 ret = hbg_dma_map(buffer); in hbg_rx_fill_one_buffer()
214 hbg_buffer_free_skb(buffer); in hbg_rx_fill_one_buffer()
218 hbg_hw_fill_buffer(priv, buffer->skb_dma); in hbg_rx_fill_one_buffer()
224 struct hbg_buffer *buffer) in hbg_sync_data_from_hw() argument
231 dma_sync_single_for_cpu(&priv->pdev->dev, buffer->skb_dma, in hbg_sync_data_from_hw()
232 buffer->skb_len, DMA_FROM_DEVICE); in hbg_sync_data_from_hw()
234 rx_desc = (struct hbg_rx_desc *)buffer->skb->data; in hbg_sync_data_from_hw()
243 struct hbg_buffer *buffer; in hbg_napi_rx_poll() local
251 buffer = &ring->queue[ring->ntc]; in hbg_napi_rx_poll()
252 if (unlikely(!buffer->skb)) in hbg_napi_rx_poll()
255 if (unlikely(!hbg_sync_data_from_hw(priv, buffer))) in hbg_napi_rx_poll()
257 rx_desc = (struct hbg_rx_desc *)buffer->skb->data; in hbg_napi_rx_poll()
260 hbg_dma_unmap(buffer); in hbg_napi_rx_poll()
262 skb_reserve(buffer->skb, HBG_PACKET_HEAD_SIZE + NET_IP_ALIGN); in hbg_napi_rx_poll()
263 skb_put(buffer->skb, pkt_len); in hbg_napi_rx_poll()
264 buffer->skb->protocol = eth_type_trans(buffer->skb, in hbg_napi_rx_poll()
268 napi_gro_receive(napi, buffer->skb); in hbg_napi_rx_poll()
269 buffer->skb = NULL; in hbg_napi_rx_poll()
286 struct hbg_buffer *buffer; in hbg_ring_uninit() local
296 buffer = &ring->queue[i]; in hbg_ring_uninit()
297 hbg_buffer_free(buffer); in hbg_ring_uninit()
298 buffer->ring = NULL; in hbg_ring_uninit()
299 buffer->priv = NULL; in hbg_ring_uninit()
315 struct hbg_buffer *buffer; in hbg_ring_init() local
326 buffer = &ring->queue[i]; in hbg_ring_init()
327 buffer->skb_len = 0; in hbg_ring_init()
328 buffer->dir = dir; in hbg_ring_init()
329 buffer->ring = ring; in hbg_ring_init()
330 buffer->priv = priv; in hbg_ring_init()
331 buffer->state_dma = ring->queue_dma + (i * sizeof(*buffer)); in hbg_ring_init()