brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · b8b737d Raw
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