Lines Matching refs:bat_req
84 struct dpmaif_bat_request *bat_req = rxq->bat_req; in t7xx_dpmaif_update_bat_wr_idx() local
92 old_rl_idx = bat_req->bat_release_rd_idx; in t7xx_dpmaif_update_bat_wr_idx()
93 old_wr_idx = bat_req->bat_wr_idx; in t7xx_dpmaif_update_bat_wr_idx()
99 if (new_wr_idx >= bat_req->bat_size_cnt) { in t7xx_dpmaif_update_bat_wr_idx()
100 new_wr_idx -= bat_req->bat_size_cnt; in t7xx_dpmaif_update_bat_wr_idx()
105 bat_req->bat_wr_idx = new_wr_idx; in t7xx_dpmaif_update_bat_wr_idx()
165 const struct dpmaif_bat_request *bat_req, in t7xx_dpmaif_rx_buf_alloc() argument
172 if (!buf_cnt || buf_cnt > bat_req->bat_size_cnt) in t7xx_dpmaif_rx_buf_alloc()
176 bat_max_cnt = bat_req->bat_size_cnt; in t7xx_dpmaif_rx_buf_alloc()
178 bat_cnt = t7xx_ring_buf_rd_wr_count(bat_max_cnt, bat_req->bat_release_rd_idx, in t7xx_dpmaif_rx_buf_alloc()
179 bat_req->bat_wr_idx, DPMAIF_WRITE); in t7xx_dpmaif_rx_buf_alloc()
183 bat_start_idx = bat_req->bat_wr_idx; in t7xx_dpmaif_rx_buf_alloc()
193 cur_skb = (struct dpmaif_bat_skb *)bat_req->bat_skb + cur_bat_idx; in t7xx_dpmaif_rx_buf_alloc()
195 !t7xx_alloc_and_map_skb_info(dpmaif_ctrl, bat_req->pkt_buf_sz, cur_skb)) in t7xx_dpmaif_rx_buf_alloc()
198 cur_bat = (struct dpmaif_bat *)bat_req->bat_base + cur_bat_idx; in t7xx_dpmaif_rx_buf_alloc()
219 if (hw_wr_idx != bat_req->bat_wr_idx) { in t7xx_dpmaif_rx_buf_alloc()
230 t7xx_unmap_bat_skb(dpmaif_ctrl->dev, bat_req->bat_skb, i); in t7xx_dpmaif_rx_buf_alloc()
266 static void t7xx_dpmaif_set_bat_mask(struct dpmaif_bat_request *bat_req, unsigned int idx) in t7xx_dpmaif_set_bat_mask() argument
270 spin_lock_irqsave(&bat_req->mask_lock, flags); in t7xx_dpmaif_set_bat_mask()
271 set_bit(idx, bat_req->bat_bitmap); in t7xx_dpmaif_set_bat_mask()
272 spin_unlock_irqrestore(&bat_req->mask_lock, flags); in t7xx_dpmaif_set_bat_mask()
319 int t7xx_dpmaif_rx_frag_alloc(struct dpmaif_ctrl *dpmaif_ctrl, struct dpmaif_bat_request *bat_req, in t7xx_dpmaif_rx_frag_alloc() argument
322 unsigned int buf_space, cur_bat_idx = bat_req->bat_wr_idx; in t7xx_dpmaif_rx_frag_alloc()
323 struct dpmaif_bat_page *bat_skb = bat_req->bat_skb; in t7xx_dpmaif_rx_frag_alloc()
326 if (!buf_cnt || buf_cnt > bat_req->bat_size_cnt) in t7xx_dpmaif_rx_frag_alloc()
329 buf_space = t7xx_ring_buf_rd_wr_count(bat_req->bat_size_cnt, in t7xx_dpmaif_rx_frag_alloc()
330 bat_req->bat_release_rd_idx, bat_req->bat_wr_idx, in t7xx_dpmaif_rx_frag_alloc()
348 data = netdev_alloc_frag(bat_req->pkt_buf_sz); in t7xx_dpmaif_rx_frag_alloc()
356 bat_req->pkt_buf_sz, DMA_FROM_DEVICE); in t7xx_dpmaif_rx_frag_alloc()
366 cur_page->data_len = bat_req->pkt_buf_sz; in t7xx_dpmaif_rx_frag_alloc()
370 cur_bat = (struct dpmaif_bat *)bat_req->bat_base + cur_bat_idx; in t7xx_dpmaif_rx_frag_alloc()
373 cur_bat_idx = t7xx_ring_buf_get_next_wr_idx(bat_req->bat_size_cnt, cur_bat_idx); in t7xx_dpmaif_rx_frag_alloc()
376 bat_req->bat_wr_idx = cur_bat_idx; in t7xx_dpmaif_rx_frag_alloc()
385 t7xx_unmap_bat_page(dpmaif_ctrl->dev, bat_req->bat_skb, i); in t7xx_dpmaif_rx_frag_alloc()
447 struct dpmaif_bat_skb *bat_skb = rxq->bat_req->bat_skb; in t7xx_bat_cur_bid_check()
478 static unsigned int t7xx_dpmaif_avail_pkt_bat_cnt(struct dpmaif_bat_request *bat_req) in t7xx_dpmaif_avail_pkt_bat_cnt() argument
483 spin_lock_irqsave(&bat_req->mask_lock, flags); in t7xx_dpmaif_avail_pkt_bat_cnt()
485 zero_index = find_next_zero_bit(bat_req->bat_bitmap, bat_req->bat_size_cnt, in t7xx_dpmaif_avail_pkt_bat_cnt()
486 bat_req->bat_release_rd_idx); in t7xx_dpmaif_avail_pkt_bat_cnt()
488 if (zero_index < bat_req->bat_size_cnt) { in t7xx_dpmaif_avail_pkt_bat_cnt()
489 spin_unlock_irqrestore(&bat_req->mask_lock, flags); in t7xx_dpmaif_avail_pkt_bat_cnt()
490 return zero_index - bat_req->bat_release_rd_idx; in t7xx_dpmaif_avail_pkt_bat_cnt()
494 zero_index = find_first_zero_bit(bat_req->bat_bitmap, bat_req->bat_release_rd_idx); in t7xx_dpmaif_avail_pkt_bat_cnt()
495 spin_unlock_irqrestore(&bat_req->mask_lock, flags); in t7xx_dpmaif_avail_pkt_bat_cnt()
496 return bat_req->bat_size_cnt - bat_req->bat_release_rd_idx + zero_index; in t7xx_dpmaif_avail_pkt_bat_cnt()
515 bat = rxq->bat_req; in t7xx_dpmaif_release_bat_entry()
575 bid_cnt = t7xx_dpmaif_avail_pkt_bat_cnt(rxq->bat_req); in t7xx_dpmaif_bat_release_and_add()
585 ret = t7xx_dpmaif_rx_buf_alloc(rxq->dpmaif_ctrl, rxq->bat_req, rxq->index, bid_cnt, false); in t7xx_dpmaif_bat_release_and_add()
633 bat_skb = rxq->bat_req->bat_skb; in t7xx_dpmaif_set_data_to_skb()
675 t7xx_dpmaif_set_bat_mask(rxq->bat_req, cur_bid); in t7xx_dpmaif_get_rx_pkt()
918 const struct dpmaif_bat_request *bat_req) in t7xx_dpmaif_base_free() argument
920 if (bat_req->bat_base) in t7xx_dpmaif_base_free()
922 bat_req->bat_size_cnt * sizeof(struct dpmaif_bat), in t7xx_dpmaif_base_free()
923 bat_req->bat_base, bat_req->bat_bus_addr); in t7xx_dpmaif_base_free()
939 int t7xx_dpmaif_bat_alloc(const struct dpmaif_ctrl *dpmaif_ctrl, struct dpmaif_bat_request *bat_req, in t7xx_dpmaif_bat_alloc() argument
946 bat_req->bat_size_cnt = DPMAIF_FRG_COUNT; in t7xx_dpmaif_bat_alloc()
947 bat_req->pkt_buf_sz = DPMAIF_HW_FRG_PKTBUF; in t7xx_dpmaif_bat_alloc()
950 bat_req->bat_size_cnt = DPMAIF_BAT_COUNT; in t7xx_dpmaif_bat_alloc()
951 bat_req->pkt_buf_sz = DPMAIF_HW_BAT_PKTBUF; in t7xx_dpmaif_bat_alloc()
954 bat_req->type = buf_type; in t7xx_dpmaif_bat_alloc()
955 bat_req->bat_wr_idx = 0; in t7xx_dpmaif_bat_alloc()
956 bat_req->bat_release_rd_idx = 0; in t7xx_dpmaif_bat_alloc()
958 bat_req->bat_base = dma_alloc_coherent(dpmaif_ctrl->dev, in t7xx_dpmaif_bat_alloc()
959 bat_req->bat_size_cnt * sizeof(struct dpmaif_bat), in t7xx_dpmaif_bat_alloc()
960 &bat_req->bat_bus_addr, GFP_KERNEL | __GFP_ZERO); in t7xx_dpmaif_bat_alloc()
961 if (!bat_req->bat_base) in t7xx_dpmaif_bat_alloc()
965 bat_req->bat_skb = devm_kzalloc(dpmaif_ctrl->dev, bat_req->bat_size_cnt * sw_buf_size, in t7xx_dpmaif_bat_alloc()
967 if (!bat_req->bat_skb) in t7xx_dpmaif_bat_alloc()
970 bat_req->bat_bitmap = bitmap_zalloc(bat_req->bat_size_cnt, GFP_KERNEL); in t7xx_dpmaif_bat_alloc()
971 if (!bat_req->bat_bitmap) in t7xx_dpmaif_bat_alloc()
974 spin_lock_init(&bat_req->mask_lock); in t7xx_dpmaif_bat_alloc()
975 atomic_set(&bat_req->refcnt, 0); in t7xx_dpmaif_bat_alloc()
979 t7xx_dpmaif_base_free(dpmaif_ctrl, bat_req); in t7xx_dpmaif_bat_alloc()
984 void t7xx_dpmaif_bat_free(const struct dpmaif_ctrl *dpmaif_ctrl, struct dpmaif_bat_request *bat_req) in t7xx_dpmaif_bat_free() argument
986 if (!bat_req || !atomic_dec_and_test(&bat_req->refcnt)) in t7xx_dpmaif_bat_free()
989 bitmap_free(bat_req->bat_bitmap); in t7xx_dpmaif_bat_free()
990 bat_req->bat_bitmap = NULL; in t7xx_dpmaif_bat_free()
992 if (bat_req->bat_skb) { in t7xx_dpmaif_bat_free()
995 for (i = 0; i < bat_req->bat_size_cnt; i++) { in t7xx_dpmaif_bat_free()
996 if (bat_req->type == BAT_TYPE_FRAG) in t7xx_dpmaif_bat_free()
997 t7xx_unmap_bat_page(dpmaif_ctrl->dev, bat_req->bat_skb, i); in t7xx_dpmaif_bat_free()
999 t7xx_unmap_bat_skb(dpmaif_ctrl->dev, bat_req->bat_skb, i); in t7xx_dpmaif_bat_free()
1003 t7xx_dpmaif_base_free(dpmaif_ctrl, bat_req); in t7xx_dpmaif_bat_free()
1022 rxq->bat_req = &rxq->dpmaif_ctrl->bat_req; in t7xx_dpmaif_rx_alloc()
1023 atomic_inc(&rxq->bat_req->refcnt); in t7xx_dpmaif_rx_alloc()
1035 t7xx_dpmaif_bat_free(rxq->dpmaif_ctrl, rxq->bat_req); in t7xx_dpmaif_rx_buf_free()
1147 memset(rxq->bat_req->bat_base, 0, rxq->bat_req->bat_size_cnt * sizeof(struct dpmaif_bat)); in t7xx_dpmaif_stop_rxq()
1148 bitmap_zero(rxq->bat_req->bat_bitmap, rxq->bat_req->bat_size_cnt); in t7xx_dpmaif_stop_rxq()
1156 rxq->bat_req->bat_release_rd_idx = 0; in t7xx_dpmaif_stop_rxq()
1157 rxq->bat_req->bat_wr_idx = 0; in t7xx_dpmaif_stop_rxq()