Lines Matching refs:pmem

42 static void pmem_do_bvec(struct pmem_device *pmem, struct page *page,  in pmem_do_bvec()  argument
50 memcpy(mem + off, pmem->virt_addr + pmem_off, len); in pmem_do_bvec()
54 memcpy(pmem->virt_addr + pmem_off, mem + off, len); in pmem_do_bvec()
63 struct pmem_device *pmem = bdev->bd_disk->private_data; in pmem_make_request() local
80 pmem_do_bvec(pmem, bvec.bv_page, bvec.bv_len, bvec.bv_offset, in pmem_make_request()
92 struct pmem_device *pmem = bdev->bd_disk->private_data; in pmem_rw_page() local
94 pmem_do_bvec(pmem, page, PAGE_CACHE_SIZE, 0, rw, sector); in pmem_rw_page()
103 struct pmem_device *pmem = bdev->bd_disk->private_data; in pmem_direct_access() local
106 if (!pmem) in pmem_direct_access()
109 *kaddr = pmem->virt_addr + offset; in pmem_direct_access()
110 *pfn = (pmem->phys_addr + offset) >> PAGE_SHIFT; in pmem_direct_access()
112 return pmem->size - offset; in pmem_direct_access()
123 struct pmem_device *pmem; in pmem_alloc() local
128 pmem = kzalloc(sizeof(*pmem), GFP_KERNEL); in pmem_alloc()
129 if (!pmem) in pmem_alloc()
132 pmem->phys_addr = res->start; in pmem_alloc()
133 pmem->size = resource_size(res); in pmem_alloc()
136 if (!request_mem_region(pmem->phys_addr, pmem->size, "pmem")) { in pmem_alloc()
137 dev_warn(dev, "could not reserve region [0x%pa:0x%zx]\n", &pmem->phys_addr, pmem->size); in pmem_alloc()
146 pmem->virt_addr = ioremap_nocache(pmem->phys_addr, pmem->size); in pmem_alloc()
147 if (!pmem->virt_addr) in pmem_alloc()
150 pmem->pmem_queue = blk_alloc_queue(GFP_KERNEL); in pmem_alloc()
151 if (!pmem->pmem_queue) in pmem_alloc()
154 blk_queue_make_request(pmem->pmem_queue, pmem_make_request); in pmem_alloc()
155 blk_queue_max_hw_sectors(pmem->pmem_queue, 1024); in pmem_alloc()
156 blk_queue_bounce_limit(pmem->pmem_queue, BLK_BOUNCE_ANY); in pmem_alloc()
167 disk->private_data = pmem; in pmem_alloc()
168 disk->queue = pmem->pmem_queue; in pmem_alloc()
172 set_capacity(disk, pmem->size >> 9); in pmem_alloc()
173 pmem->pmem_disk = disk; in pmem_alloc()
177 return pmem; in pmem_alloc()
180 blk_cleanup_queue(pmem->pmem_queue); in pmem_alloc()
182 iounmap(pmem->virt_addr); in pmem_alloc()
184 release_mem_region(pmem->phys_addr, pmem->size); in pmem_alloc()
186 kfree(pmem); in pmem_alloc()
191 static void pmem_free(struct pmem_device *pmem) in pmem_free() argument
193 del_gendisk(pmem->pmem_disk); in pmem_free()
194 put_disk(pmem->pmem_disk); in pmem_free()
195 blk_cleanup_queue(pmem->pmem_queue); in pmem_free()
196 iounmap(pmem->virt_addr); in pmem_free()
197 release_mem_region(pmem->phys_addr, pmem->size); in pmem_free()
198 kfree(pmem); in pmem_free()
203 struct pmem_device *pmem; in pmem_probe() local
213 pmem = pmem_alloc(&pdev->dev, res); in pmem_probe()
214 if (IS_ERR(pmem)) in pmem_probe()
215 return PTR_ERR(pmem); in pmem_probe()
217 platform_set_drvdata(pdev, pmem); in pmem_probe()
224 struct pmem_device *pmem = platform_get_drvdata(pdev); in pmem_remove() local
226 pmem_free(pmem); in pmem_remove()