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 sg_count
,
58 struct qm_sg_entry
*qm_sg_ptr
, u16 offset
)
60 while (sg_count
&& sg
) {
61 dma_to_qm_sg_one(qm_sg_ptr
, sg_dma_address(sg
),
62 sg_dma_len(sg
), offset
);
71 * convert scatterlist to h/w link table format
72 * scatterlist must have been previously dma mapped
74 static inline void sg_to_qm_sg_last(struct scatterlist
*sg
, int sg_count
,
75 struct qm_sg_entry
*qm_sg_ptr
, u16 offset
)
77 qm_sg_ptr
= sg_to_qm_sg(sg
, sg_count
, qm_sg_ptr
, offset
);
78 qm_sg_entry_set_f(qm_sg_ptr
, qm_sg_entry_get_len(qm_sg_ptr
));
81 #endif /* __SG_SW_QM_H */