Changeset View
Changeset View
Standalone View
Standalone View
head/sys/compat/linuxkpi/common/include/linux/scatterlist.h
Show All 37 Lines | |||||
struct scatterlist { | struct scatterlist { | ||||
unsigned long page_link; | unsigned long page_link; | ||||
#define SG_PAGE_LINK_CHAIN 0x1UL | #define SG_PAGE_LINK_CHAIN 0x1UL | ||||
#define SG_PAGE_LINK_LAST 0x2UL | #define SG_PAGE_LINK_LAST 0x2UL | ||||
#define SG_PAGE_LINK_MASK 0x3UL | #define SG_PAGE_LINK_MASK 0x3UL | ||||
unsigned int offset; | unsigned int offset; | ||||
unsigned int length; | unsigned int length; | ||||
dma_addr_t address; | dma_addr_t dma_address; | ||||
unsigned int dma_length; | |||||
}; | }; | ||||
CTASSERT((sizeof(struct scatterlist) & SG_PAGE_LINK_MASK) == 0); | CTASSERT((sizeof(struct scatterlist) & SG_PAGE_LINK_MASK) == 0); | ||||
struct sg_table { | struct sg_table { | ||||
struct scatterlist *sgl; | struct scatterlist *sgl; | ||||
unsigned int nents; | unsigned int nents; | ||||
unsigned int orig_nents; | unsigned int orig_nents; | ||||
Show All 17 Lines | |||||
#define SG_CHAIN SG_PAGE_LINK_CHAIN | #define SG_CHAIN SG_PAGE_LINK_CHAIN | ||||
#define SG_END SG_PAGE_LINK_LAST | #define SG_END SG_PAGE_LINK_LAST | ||||
#define sg_is_chain(sg) ((sg)->page_link & SG_PAGE_LINK_CHAIN) | #define sg_is_chain(sg) ((sg)->page_link & SG_PAGE_LINK_CHAIN) | ||||
#define sg_is_last(sg) ((sg)->page_link & SG_PAGE_LINK_LAST) | #define sg_is_last(sg) ((sg)->page_link & SG_PAGE_LINK_LAST) | ||||
#define sg_chain_ptr(sg) \ | #define sg_chain_ptr(sg) \ | ||||
((struct scatterlist *) ((sg)->page_link & ~SG_PAGE_LINK_MASK)) | ((struct scatterlist *) ((sg)->page_link & ~SG_PAGE_LINK_MASK)) | ||||
#define sg_dma_address(sg) (sg)->address | #define sg_dma_address(sg) (sg)->dma_address | ||||
#define sg_dma_len(sg) (sg)->length | #define sg_dma_len(sg) (sg)->dma_length | ||||
#define for_each_sg_page(sgl, iter, nents, pgoffset) \ | #define for_each_sg_page(sgl, iter, nents, pgoffset) \ | ||||
for (_sg_iter_init(sgl, iter, nents, pgoffset); \ | for (_sg_iter_init(sgl, iter, nents, pgoffset); \ | ||||
(iter)->sg; _sg_iter_next(iter)) | (iter)->sg; _sg_iter_next(iter)) | ||||
#define for_each_sg(sglist, sg, sgmax, iter) \ | #define for_each_sg(sglist, sg, sgmax, iter) \ | ||||
for (iter = 0, sg = (sglist); iter < (sgmax); iter++, sg = sg_next(sg)) | for (iter = 0, sg = (sglist); iter < (sgmax); iter++, sg = sg_next(sg)) | ||||
▲ Show 20 Lines • Show All 349 Lines • ▼ Show 20 Lines | if (nents) { | ||||
iter->sg_pgoffset = 0; | iter->sg_pgoffset = 0; | ||||
iter->maxents = 0; | iter->maxents = 0; | ||||
} | } | ||||
} | } | ||||
static inline dma_addr_t | static inline dma_addr_t | ||||
sg_page_iter_dma_address(struct sg_page_iter *spi) | sg_page_iter_dma_address(struct sg_page_iter *spi) | ||||
{ | { | ||||
return (spi->sg->address + (spi->sg_pgoffset << PAGE_SHIFT)); | return (spi->sg->dma_address + (spi->sg_pgoffset << PAGE_SHIFT)); | ||||
} | } | ||||
static inline struct page * | static inline struct page * | ||||
sg_page_iter_page(struct sg_page_iter *piter) | sg_page_iter_page(struct sg_page_iter *piter) | ||||
{ | { | ||||
return (nth_page(sg_page(piter->sg), piter->sg_pgoffset)); | return (nth_page(sg_page(piter->sg), piter->sg_pgoffset)); | ||||
} | } | ||||
#endif /* _LINUX_SCATTERLIST_H_ */ | #endif /* _LINUX_SCATTERLIST_H_ */ |