1*17fcb3dcSFan Gong // SPDX-License-Identifier: GPL-2.0 2*17fcb3dcSFan Gong // Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved. 3*17fcb3dcSFan Gong 4*17fcb3dcSFan Gong #include <linux/dma-mapping.h> 5*17fcb3dcSFan Gong 6*17fcb3dcSFan Gong #include "hinic3_hwdev.h" 7*17fcb3dcSFan Gong #include "hinic3_wq.h" 8*17fcb3dcSFan Gong 9*17fcb3dcSFan Gong void hinic3_wq_get_multi_wqebbs(struct hinic3_wq *wq, 10*17fcb3dcSFan Gong u16 num_wqebbs, u16 *prod_idx, 11*17fcb3dcSFan Gong struct hinic3_sq_bufdesc **first_part_wqebbs, 12*17fcb3dcSFan Gong struct hinic3_sq_bufdesc **second_part_wqebbs, 13*17fcb3dcSFan Gong u16 *first_part_wqebbs_num) 14*17fcb3dcSFan Gong { 15*17fcb3dcSFan Gong u32 idx, remaining; 16*17fcb3dcSFan Gong 17*17fcb3dcSFan Gong idx = wq->prod_idx & wq->idx_mask; 18*17fcb3dcSFan Gong wq->prod_idx += num_wqebbs; 19*17fcb3dcSFan Gong *prod_idx = idx; 20*17fcb3dcSFan Gong *first_part_wqebbs = get_q_element(&wq->qpages, idx, &remaining); 21*17fcb3dcSFan Gong if (likely(remaining >= num_wqebbs)) { 22*17fcb3dcSFan Gong *first_part_wqebbs_num = num_wqebbs; 23*17fcb3dcSFan Gong *second_part_wqebbs = NULL; 24*17fcb3dcSFan Gong } else { 25*17fcb3dcSFan Gong *first_part_wqebbs_num = remaining; 26*17fcb3dcSFan Gong idx += remaining; 27*17fcb3dcSFan Gong *second_part_wqebbs = get_q_element(&wq->qpages, idx, NULL); 28*17fcb3dcSFan Gong } 29*17fcb3dcSFan Gong } 30