Lines Matching refs:nvdimm_map
60 struct nvdimm_map { struct
73 static struct nvdimm_map *find_nvdimm_map(struct device *dev, in find_nvdimm_map() argument
77 struct nvdimm_map *nvdimm_map; in find_nvdimm_map() local
79 list_for_each_entry(nvdimm_map, &nvdimm_bus->mapping_list, list) in find_nvdimm_map()
80 if (nvdimm_map->offset == offset) in find_nvdimm_map()
81 return nvdimm_map; in find_nvdimm_map()
85 static struct nvdimm_map *alloc_nvdimm_map(struct device *dev, in alloc_nvdimm_map()
89 struct nvdimm_map *nvdimm_map; in alloc_nvdimm_map() local
91 nvdimm_map = kzalloc(sizeof(*nvdimm_map), GFP_KERNEL); in alloc_nvdimm_map()
92 if (!nvdimm_map) in alloc_nvdimm_map()
95 INIT_LIST_HEAD(&nvdimm_map->list); in alloc_nvdimm_map()
96 nvdimm_map->nvdimm_bus = nvdimm_bus; in alloc_nvdimm_map()
97 nvdimm_map->offset = offset; in alloc_nvdimm_map()
98 nvdimm_map->flags = flags; in alloc_nvdimm_map()
99 nvdimm_map->size = size; in alloc_nvdimm_map()
100 kref_init(&nvdimm_map->kref); in alloc_nvdimm_map()
109 nvdimm_map->mem = memremap(offset, size, flags); in alloc_nvdimm_map()
111 nvdimm_map->iomem = ioremap(offset, size); in alloc_nvdimm_map()
113 if (!nvdimm_map->mem) in alloc_nvdimm_map()
118 list_add(&nvdimm_map->list, &nvdimm_bus->mapping_list); in alloc_nvdimm_map()
120 return nvdimm_map; in alloc_nvdimm_map()
125 kfree(nvdimm_map); in alloc_nvdimm_map()
132 struct nvdimm_map *nvdimm_map; in nvdimm_map_release() local
134 nvdimm_map = container_of(kref, struct nvdimm_map, kref); in nvdimm_map_release()
135 nvdimm_bus = nvdimm_map->nvdimm_bus; in nvdimm_map_release()
137 dev_dbg(&nvdimm_bus->dev, "%pa\n", &nvdimm_map->offset); in nvdimm_map_release()
138 list_del(&nvdimm_map->list); in nvdimm_map_release()
139 if (nvdimm_map->flags) in nvdimm_map_release()
140 memunmap(nvdimm_map->mem); in nvdimm_map_release()
142 iounmap(nvdimm_map->iomem); in nvdimm_map_release()
143 release_mem_region(nvdimm_map->offset, nvdimm_map->size); in nvdimm_map_release()
144 kfree(nvdimm_map); in nvdimm_map_release()
149 struct nvdimm_map *nvdimm_map = data; in nvdimm_map_put() local
150 struct nvdimm_bus *nvdimm_bus = nvdimm_map->nvdimm_bus; in nvdimm_map_put()
153 kref_put(&nvdimm_map->kref, nvdimm_map_release); in nvdimm_map_put()
167 struct nvdimm_map *nvdimm_map; in devm_nvdimm_memremap() local
170 nvdimm_map = find_nvdimm_map(dev, offset); in devm_nvdimm_memremap()
171 if (!nvdimm_map) in devm_nvdimm_memremap()
172 nvdimm_map = alloc_nvdimm_map(dev, offset, size, flags); in devm_nvdimm_memremap()
174 kref_get(&nvdimm_map->kref); in devm_nvdimm_memremap()
177 if (!nvdimm_map) in devm_nvdimm_memremap()
180 if (devm_add_action_or_reset(dev, nvdimm_map_put, nvdimm_map)) in devm_nvdimm_memremap()
183 return nvdimm_map->mem; in devm_nvdimm_memremap()