162306a36Sopenharmony_ci#ifndef _QLA_DSD_H_ 262306a36Sopenharmony_ci#define _QLA_DSD_H_ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <asm/unaligned.h> 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci/* 32-bit data segment descriptor (8 bytes) */ 762306a36Sopenharmony_cistruct dsd32 { 862306a36Sopenharmony_ci __le32 address; 962306a36Sopenharmony_ci __le32 length; 1062306a36Sopenharmony_ci}; 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cistatic inline void append_dsd32(struct dsd32 **dsd, struct scatterlist *sg) 1362306a36Sopenharmony_ci{ 1462306a36Sopenharmony_ci put_unaligned_le32(sg_dma_address(sg), &(*dsd)->address); 1562306a36Sopenharmony_ci put_unaligned_le32(sg_dma_len(sg), &(*dsd)->length); 1662306a36Sopenharmony_ci (*dsd)++; 1762306a36Sopenharmony_ci} 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci/* 64-bit data segment descriptor (12 bytes) */ 2062306a36Sopenharmony_cistruct dsd64 { 2162306a36Sopenharmony_ci __le64 address; 2262306a36Sopenharmony_ci __le32 length; 2362306a36Sopenharmony_ci} __packed; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistatic inline void append_dsd64(struct dsd64 **dsd, struct scatterlist *sg) 2662306a36Sopenharmony_ci{ 2762306a36Sopenharmony_ci put_unaligned_le64(sg_dma_address(sg), &(*dsd)->address); 2862306a36Sopenharmony_ci put_unaligned_le32(sg_dma_len(sg), &(*dsd)->length); 2962306a36Sopenharmony_ci (*dsd)++; 3062306a36Sopenharmony_ci} 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#endif 33