Lines Matching defs:mmap
231 struct spigen_mmap *mmap;
234 if ((error = devfs_get_cdevpriv((void **)&mmap)) != 0)
237 if (mmap->bufsize < stm->stm_command_length + stm->stm_data_length)
240 transfer.tx_cmd = transfer.rx_cmd = (void *)((uintptr_t)mmap->kvaddr);
243 (void *)((uintptr_t)mmap->kvaddr + stm->stm_command_length);
286 struct spigen_mmap *mmap = arg;
288 if (mmap->kvaddr != 0)
289 pmap_qremove(mmap->kvaddr, mmap->bufsize / PAGE_SIZE);
290 if (mmap->bufobj != NULL)
291 vm_object_deallocate(mmap->bufobj);
292 free(mmap, M_DEVBUF);
299 struct spigen_mmap *mmap;
311 if (devfs_get_cdevpriv((void **)&mmap) == 0)
314 mmap = malloc(sizeof(*mmap), M_DEVBUF, M_ZERO | M_WAITOK);
315 if ((mmap->kvaddr = kva_alloc(size)) == 0) {
316 spigen_mmap_cleanup(mmap);
319 mmap->bufsize = size;
320 mmap->bufobj = vm_pager_allocate(OBJT_PHYS, 0, size, nprot, 0,
324 VM_OBJECT_WLOCK(mmap->bufobj);
325 vm_object_reference_locked(mmap->bufobj); // kernel and userland both
327 m[n] = vm_page_grab(mmap->bufobj, n,
332 VM_OBJECT_WUNLOCK(mmap->bufobj);
333 pmap_qenter(mmap->kvaddr, m, pages);
336 if ((error = devfs_set_cdevpriv(mmap, spigen_mmap_cleanup)) != 0) {
338 spigen_mmap_cleanup(mmap);
342 *object = mmap->bufobj;