xref: /openbmc/linux/drivers/scsi/qla2xxx/qla_dsd.h (revision 976e3645923bdd2fe7893aae33fd7a21098bfb28)
115b7a68cSBart Van Assche #ifndef _QLA_DSD_H_
215b7a68cSBart Van Assche #define _QLA_DSD_H_
315b7a68cSBart Van Assche 
4*ba0cef25SBart Van Assche #include <asm/unaligned.h>
5*ba0cef25SBart Van Assche 
615b7a68cSBart Van Assche /* 32-bit data segment descriptor (8 bytes) */
715b7a68cSBart Van Assche struct dsd32 {
815b7a68cSBart Van Assche 	__le32 address;
915b7a68cSBart Van Assche 	__le32 length;
1015b7a68cSBart Van Assche };
1115b7a68cSBart Van Assche 
append_dsd32(struct dsd32 ** dsd,struct scatterlist * sg)1215b7a68cSBart Van Assche static inline void append_dsd32(struct dsd32 **dsd, struct scatterlist *sg)
1315b7a68cSBart Van Assche {
1415b7a68cSBart Van Assche 	put_unaligned_le32(sg_dma_address(sg), &(*dsd)->address);
1515b7a68cSBart Van Assche 	put_unaligned_le32(sg_dma_len(sg),     &(*dsd)->length);
1615b7a68cSBart Van Assche 	(*dsd)++;
1715b7a68cSBart Van Assche }
1815b7a68cSBart Van Assche 
1915b7a68cSBart Van Assche /* 64-bit data segment descriptor (12 bytes) */
2015b7a68cSBart Van Assche struct dsd64 {
2115b7a68cSBart Van Assche 	__le64 address;
2215b7a68cSBart Van Assche 	__le32 length;
2315b7a68cSBart Van Assche } __packed;
2415b7a68cSBart Van Assche 
append_dsd64(struct dsd64 ** dsd,struct scatterlist * sg)2515b7a68cSBart Van Assche static inline void append_dsd64(struct dsd64 **dsd, struct scatterlist *sg)
2615b7a68cSBart Van Assche {
2715b7a68cSBart Van Assche 	put_unaligned_le64(sg_dma_address(sg), &(*dsd)->address);
2815b7a68cSBart Van Assche 	put_unaligned_le32(sg_dma_len(sg),     &(*dsd)->length);
2915b7a68cSBart Van Assche 	(*dsd)++;
3015b7a68cSBart Van Assche }
3115b7a68cSBart Van Assche 
3215b7a68cSBart Van Assche #endif
33