Lines Matching refs:sg

58 	struct scatterlist *sg;
79 #define sg_is_chain(sg) ((sg)->page_link & SG_PAGE_LINK_CHAIN)
80 #define sg_is_last(sg) ((sg)->page_link & SG_PAGE_LINK_LAST)
81 #define sg_chain_ptr(sg) \
82 ((struct scatterlist *) ((sg)->page_link & ~SG_PAGE_LINK_MASK))
84 #define sg_dma_address(sg) (sg)->address
85 #define sg_dma_len(sg) (sg)->length
89 (iter)->sg; _sg_iter_next(iter))
93 #define for_each_sg(sglist, sg, sgmax, iter) \
94 for (iter = 0, sg = (sglist); iter < (sgmax); iter++, sg = sg_next(sg))
100 sg_assign_page(struct scatterlist *sg, struct page *page)
102 unsigned long page_link = sg->page_link & SG_PAGE_LINK_MASK;
104 sg->page_link = page_link | (unsigned long)page;
108 sg_set_page(struct scatterlist *sg, struct page *page, unsigned int len,
111 sg_assign_page(sg, page);
112 sg->offset = offset;
113 sg->length = len;
117 sg_page(struct scatterlist *sg)
119 return ((struct page *)((sg)->page_link & ~SG_PAGE_LINK_MASK));
123 sg_set_buf(struct scatterlist *sg, const void *buf, unsigned int buflen)
125 sg_set_page(sg, virt_to_page(buf), buflen,
130 sg_next(struct scatterlist *sg)
132 if (sg_is_last(sg))
134 sg++;
135 if (sg_is_chain(sg))
136 sg = sg_chain_ptr(sg);
137 return (sg);
141 sg_phys(struct scatterlist *sg)
143 return (VM_PAGE_TO_PHYS(sg_page(sg)) + sg->offset);
147 sg_virt(struct scatterlist *sg)
150 return ((void *)((unsigned long)page_address(sg_page(sg)) + sg->offset));
157 struct scatterlist *sg = &prv[prv_nents - 1];
159 sg->offset = 0;
160 sg->length = 0;
161 sg->page_link = ((unsigned long)sgl |
166 sg_mark_end(struct scatterlist *sg)
168 sg->page_link |= SG_PAGE_LINK_LAST;
169 sg->page_link &= ~SG_PAGE_LINK_CHAIN;
173 sg_init_table(struct scatterlist *sg, unsigned int nents)
175 bzero(sg, sizeof(*sg) * nents);
176 sg_mark_end(&sg[nents - 1]);
189 sg_kfree(struct scatterlist *sg, unsigned int nents)
192 free_page((unsigned long)sg);
194 kfree(sg);
242 struct scatterlist *sg, *prv;
264 sg = first_chunk;
267 sg = alloc_fn(alloc_size, gfp_mask);
269 if (unlikely(!sg)) {
275 sg_init_table(sg, alloc_size);
279 sg_chain(prv, max_ents, sg);
281 table->sgl = sg;
284 sg_mark_end(&sg[sg_size - 1]);
286 prv = sg;
364 sg_nents(struct scatterlist *sg)
368 for (nents = 0; sg; sg = sg_next(sg))
381 piter->sg = sglist;
388 struct scatterlist *sg;
391 sg = iter->sg;
392 pgcount = (sg->offset + sg->length + PAGE_SIZE - 1) >> PAGE_SHIFT;
397 sg = sg_next(sg);
399 if (sg == NULL || iter->maxents == 0)
401 pgcount = (sg->offset + sg->length + PAGE_SIZE - 1) >> PAGE_SHIFT;
403 iter->sg = sg;
407 sg_page_count(struct scatterlist *sg)
409 return (PAGE_ALIGN(sg->offset + sg->length) >> PAGE_SHIFT);
411 #define sg_dma_page_count(sg) \
412 sg_page_count(sg)
421 if (piter->sg == NULL)
428 pgcount = sg_page_count(piter->sg);
432 piter->sg = sg_next(piter->sg);
435 if (piter->sg == NULL)
448 iter->sg = sgl;
453 iter->sg = NULL;
469 __dma_address = __spi->sg->address + \
477 return (nth_page(sg_page(piter->sg), piter->sg_pgoffset));