58 lines · c
1/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */2/*3 * Copyright 2015-2016 Freescale Semiconductor, Inc.4 * Copyright 2017 NXP5 */6 7#ifndef _SG_SW_QM2_H_8#define _SG_SW_QM2_H_9 10#include <soc/fsl/dpaa2-fd.h>11 12static inline void dma_to_qm_sg_one(struct dpaa2_sg_entry *qm_sg_ptr,13 dma_addr_t dma, u32 len, u16 offset)14{15 dpaa2_sg_set_addr(qm_sg_ptr, dma);16 dpaa2_sg_set_format(qm_sg_ptr, dpaa2_sg_single);17 dpaa2_sg_set_final(qm_sg_ptr, false);18 dpaa2_sg_set_len(qm_sg_ptr, len);19 dpaa2_sg_set_bpid(qm_sg_ptr, 0);20 dpaa2_sg_set_offset(qm_sg_ptr, offset);21}22 23/*24 * convert scatterlist to h/w link table format25 * but does not have final bit; instead, returns last entry26 */27static inline struct dpaa2_sg_entry *28sg_to_qm_sg(struct scatterlist *sg, int len,29 struct dpaa2_sg_entry *qm_sg_ptr, u16 offset)30{31 int ent_len;32 33 while (len) {34 ent_len = min_t(int, sg_dma_len(sg), len);35 36 dma_to_qm_sg_one(qm_sg_ptr, sg_dma_address(sg), ent_len,37 offset);38 qm_sg_ptr++;39 sg = sg_next(sg);40 len -= ent_len;41 }42 return qm_sg_ptr - 1;43}44 45/*46 * convert scatterlist to h/w link table format47 * scatterlist must have been previously dma mapped48 */49static inline void sg_to_qm_sg_last(struct scatterlist *sg, int len,50 struct dpaa2_sg_entry *qm_sg_ptr,51 u16 offset)52{53 qm_sg_ptr = sg_to_qm_sg(sg, len, qm_sg_ptr, offset);54 dpaa2_sg_set_final(qm_sg_ptr, true);55}56 57#endif /* _SG_SW_QM2_H_ */58