1 /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
3 * Copyright 2013-2016 Freescale Semiconductor, Inc.
4 * Copyright 2016-2017 NXP
10 #include <soc/fsl/qman.h>
13 static inline void __dma_to_qm_sg(struct qm_sg_entry
*qm_sg_ptr
, dma_addr_t dma
,
16 qm_sg_entry_set64(qm_sg_ptr
, dma
);
17 qm_sg_ptr
->__reserved2
= 0;
19 qm_sg_ptr
->offset
= cpu_to_be16(offset
& QM_SG_OFF_MASK
);
22 static inline void dma_to_qm_sg_one(struct qm_sg_entry
*qm_sg_ptr
,
23 dma_addr_t dma
, u32 len
, u16 offset
)
25 __dma_to_qm_sg(qm_sg_ptr
, dma
, offset
);
26 qm_sg_entry_set_len(qm_sg_ptr
, len
);
29 static inline void dma_to_qm_sg_one_last(struct qm_sg_entry
*qm_sg_ptr
,
30 dma_addr_t dma
, u32 len
, u16 offset
)
32 __dma_to_qm_sg(qm_sg_ptr
, dma
, offset
);
33 qm_sg_entry_set_f(qm_sg_ptr
, len
);
36 static inline void dma_to_qm_sg_one_ext(struct qm_sg_entry
*qm_sg_ptr
,
37 dma_addr_t dma
, u32 len
, u16 offset
)
39 __dma_to_qm_sg(qm_sg_ptr
, dma
, offset
);
40 qm_sg_ptr
->cfg
= cpu_to_be32(QM_SG_EXT
| (len
& QM_SG_LEN_MASK
));
43 static inline void dma_to_qm_sg_one_last_ext(struct qm_sg_entry
*qm_sg_ptr
,
44 dma_addr_t dma
, u32 len
,
47 __dma_to_qm_sg(qm_sg_ptr
, dma
, offset
);
48 qm_sg_ptr
->cfg
= cpu_to_be32(QM_SG_EXT
| QM_SG_FIN
|
49 (len
& QM_SG_LEN_MASK
));
53 * convert scatterlist to h/w link table format
54 * but does not have final bit; instead, returns last entry
56 static inline struct qm_sg_entry
*
57 sg_to_qm_sg(struct scatterlist
*sg
, int len
,
58 struct qm_sg_entry
*qm_sg_ptr
, u16 offset
)
63 ent_len
= min_t(int, sg_dma_len(sg
), len
);
65 dma_to_qm_sg_one(qm_sg_ptr
, sg_dma_address(sg
), ent_len
,
75 * convert scatterlist to h/w link table format
76 * scatterlist must have been previously dma mapped
78 static inline void sg_to_qm_sg_last(struct scatterlist
*sg
, int len
,
79 struct qm_sg_entry
*qm_sg_ptr
, u16 offset
)
81 qm_sg_ptr
= sg_to_qm_sg(sg
, len
, qm_sg_ptr
, offset
);
82 qm_sg_entry_set_f(qm_sg_ptr
, qm_sg_entry_get_len(qm_sg_ptr
));
85 #endif /* __SG_SW_QM_H */