18c2ecf20Sopenharmony_ci#ifndef _QLA_DSD_H_
28c2ecf20Sopenharmony_ci#define _QLA_DSD_H_
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#include <asm/unaligned.h>
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci/* 32-bit data segment descriptor (8 bytes) */
78c2ecf20Sopenharmony_cistruct dsd32 {
88c2ecf20Sopenharmony_ci	__le32 address;
98c2ecf20Sopenharmony_ci	__le32 length;
108c2ecf20Sopenharmony_ci};
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistatic inline void append_dsd32(struct dsd32 **dsd, struct scatterlist *sg)
138c2ecf20Sopenharmony_ci{
148c2ecf20Sopenharmony_ci	put_unaligned_le32(sg_dma_address(sg), &(*dsd)->address);
158c2ecf20Sopenharmony_ci	put_unaligned_le32(sg_dma_len(sg),     &(*dsd)->length);
168c2ecf20Sopenharmony_ci	(*dsd)++;
178c2ecf20Sopenharmony_ci}
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci/* 64-bit data segment descriptor (12 bytes) */
208c2ecf20Sopenharmony_cistruct dsd64 {
218c2ecf20Sopenharmony_ci	__le64 address;
228c2ecf20Sopenharmony_ci	__le32 length;
238c2ecf20Sopenharmony_ci} __packed;
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cistatic inline void append_dsd64(struct dsd64 **dsd, struct scatterlist *sg)
268c2ecf20Sopenharmony_ci{
278c2ecf20Sopenharmony_ci	put_unaligned_le64(sg_dma_address(sg), &(*dsd)->address);
288c2ecf20Sopenharmony_ci	put_unaligned_le32(sg_dma_len(sg),     &(*dsd)->length);
298c2ecf20Sopenharmony_ci	(*dsd)++;
308c2ecf20Sopenharmony_ci}
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci#endif
33