Lines Matching defs:sgbuf
727 struct snd_dma_sg_fallback *sgbuf)
731 if (sgbuf->pages && sgbuf->addrs) {
733 while (i < sgbuf->count) {
734 if (!sgbuf->pages[i] || !sgbuf->addrs[i])
736 size = sgbuf->addrs[i] & ~PAGE_MASK;
739 if (sgbuf->use_dma_alloc_coherent)
741 page_address(sgbuf->pages[i]),
742 sgbuf->addrs[i] & PAGE_MASK);
744 do_free_pages(page_address(sgbuf->pages[i]),
749 kvfree(sgbuf->pages);
750 kvfree(sgbuf->addrs);
751 kfree(sgbuf);
756 struct snd_dma_sg_fallback *sgbuf;
769 sgbuf = kzalloc(sizeof(*sgbuf), GFP_KERNEL);
770 if (!sgbuf)
772 sgbuf->use_dma_alloc_coherent = cpu_feature_enabled(X86_FEATURE_XENPV);
774 sgbuf->count = size >> PAGE_SHIFT;
775 sgbuf->pages = kvcalloc(sgbuf->count, sizeof(*sgbuf->pages), GFP_KERNEL);
776 sgbuf->addrs = kvcalloc(sgbuf->count, sizeof(*sgbuf->addrs), GFP_KERNEL);
777 if (!sgbuf->pages || !sgbuf->addrs)
780 pagep = sgbuf->pages;
781 addrp = sgbuf->addrs;
785 if (sgbuf->use_dma_alloc_coherent)
809 p = vmap(sgbuf->pages, sgbuf->count, VM_MAP, PAGE_KERNEL);
814 set_pages_array_wc(sgbuf->pages, sgbuf->count);
816 dmab->private_data = sgbuf;
818 dmab->addr = sgbuf->addrs[0] & PAGE_MASK;
822 __snd_dma_sg_fallback_free(dmab, sgbuf);
828 struct snd_dma_sg_fallback *sgbuf = dmab->private_data;
831 set_pages_array_wb(sgbuf->pages, sgbuf->count);
839 struct snd_dma_sg_fallback *sgbuf = dmab->private_data;
842 return (sgbuf->addrs[index] & PAGE_MASK) | (offset & ~PAGE_MASK);
848 struct snd_dma_sg_fallback *sgbuf = dmab->private_data;
852 return vm_map_pages(area, sgbuf->pages, sgbuf->count);