Lines Matching refs:vm
33 get_vm_block(struct ct_vm *vm, unsigned int size, struct ct_atc *atc) in get_vm_block() argument
39 if (size > vm->size) { in get_vm_block()
45 mutex_lock(&vm->lock); in get_vm_block()
46 list_for_each(pos, &vm->unused) { in get_vm_block()
51 if (pos == &vm->unused) in get_vm_block()
56 list_move(&entry->list, &vm->used); in get_vm_block()
57 vm->size -= size; in get_vm_block()
68 list_add(&block->list, &vm->used); in get_vm_block()
71 vm->size -= size; in get_vm_block()
74 mutex_unlock(&vm->lock); in get_vm_block()
78 static void put_vm_block(struct ct_vm *vm, struct ct_vm_block *block) in put_vm_block() argument
85 mutex_lock(&vm->lock); in put_vm_block()
87 vm->size += block->size; in put_vm_block()
89 list_for_each(pos, &vm->unused) { in put_vm_block()
94 if (pos == &vm->unused) { in put_vm_block()
95 list_add_tail(&block->list, &vm->unused); in put_vm_block()
110 while (pre != &vm->unused) { in put_vm_block()
122 mutex_unlock(&vm->lock); in put_vm_block()
127 ct_vm_map(struct ct_vm *vm, struct snd_pcm_substream *substream, int size) in ct_vm_map() argument
135 block = get_vm_block(vm, size, atc); in ct_vm_map()
142 ptp = (unsigned long *)vm->ptp[0].area; in ct_vm_map()
155 static void ct_vm_unmap(struct ct_vm *vm, struct ct_vm_block *block) in ct_vm_unmap() argument
158 put_vm_block(vm, block); in ct_vm_unmap()
167 ct_get_ptp_phys(struct ct_vm *vm, int index) in ct_get_ptp_phys() argument
171 addr = (index >= CT_PTP_NUM) ? ~0UL : vm->ptp[index].addr; in ct_get_ptp_phys()
178 struct ct_vm *vm; in ct_vm_create() local
184 vm = kzalloc(sizeof(*vm), GFP_KERNEL); in ct_vm_create()
185 if (!vm) in ct_vm_create()
188 mutex_init(&vm->lock); in ct_vm_create()
194 PAGE_SIZE, &vm->ptp[i]); in ct_vm_create()
200 ct_vm_destroy(vm); in ct_vm_create()
203 vm->size = CT_ADDRS_PER_PAGE * i; in ct_vm_create()
204 vm->map = ct_vm_map; in ct_vm_create()
205 vm->unmap = ct_vm_unmap; in ct_vm_create()
206 vm->get_ptp_phys = ct_get_ptp_phys; in ct_vm_create()
207 INIT_LIST_HEAD(&vm->unused); in ct_vm_create()
208 INIT_LIST_HEAD(&vm->used); in ct_vm_create()
212 block->size = vm->size; in ct_vm_create()
213 list_add(&block->list, &vm->unused); in ct_vm_create()
216 *rvm = vm; in ct_vm_create()
222 void ct_vm_destroy(struct ct_vm *vm) in ct_vm_destroy() argument
229 while (!list_empty(&vm->used)) { in ct_vm_destroy()
230 pos = vm->used.next; in ct_vm_destroy()
235 while (!list_empty(&vm->unused)) { in ct_vm_destroy()
236 pos = vm->unused.next; in ct_vm_destroy()
244 snd_dma_free_pages(&vm->ptp[i]); in ct_vm_destroy()
246 vm->size = 0; in ct_vm_destroy()
248 kfree(vm); in ct_vm_destroy()