Lines Matching refs:nvdimm_map
52 struct nvdimm_map { struct
65 static struct nvdimm_map *find_nvdimm_map(struct device *dev, in find_nvdimm_map() argument
69 struct nvdimm_map *nvdimm_map; in find_nvdimm_map() local
71 list_for_each_entry(nvdimm_map, &nvdimm_bus->mapping_list, list) in find_nvdimm_map()
72 if (nvdimm_map->offset == offset) in find_nvdimm_map()
73 return nvdimm_map; in find_nvdimm_map()
77 static struct nvdimm_map *alloc_nvdimm_map(struct device *dev, in alloc_nvdimm_map()
81 struct nvdimm_map *nvdimm_map; in alloc_nvdimm_map() local
83 nvdimm_map = kzalloc(sizeof(*nvdimm_map), GFP_KERNEL); in alloc_nvdimm_map()
84 if (!nvdimm_map) in alloc_nvdimm_map()
87 INIT_LIST_HEAD(&nvdimm_map->list); in alloc_nvdimm_map()
88 nvdimm_map->nvdimm_bus = nvdimm_bus; in alloc_nvdimm_map()
89 nvdimm_map->offset = offset; in alloc_nvdimm_map()
90 nvdimm_map->flags = flags; in alloc_nvdimm_map()
91 nvdimm_map->size = size; in alloc_nvdimm_map()
92 kref_init(&nvdimm_map->kref); in alloc_nvdimm_map()
101 nvdimm_map->mem = memremap(offset, size, flags); in alloc_nvdimm_map()
103 nvdimm_map->iomem = ioremap(offset, size); in alloc_nvdimm_map()
105 if (!nvdimm_map->mem) in alloc_nvdimm_map()
110 list_add(&nvdimm_map->list, &nvdimm_bus->mapping_list); in alloc_nvdimm_map()
112 return nvdimm_map; in alloc_nvdimm_map()
117 kfree(nvdimm_map); in alloc_nvdimm_map()
124 struct nvdimm_map *nvdimm_map; in nvdimm_map_release() local
126 nvdimm_map = container_of(kref, struct nvdimm_map, kref); in nvdimm_map_release()
127 nvdimm_bus = nvdimm_map->nvdimm_bus; in nvdimm_map_release()
129 dev_dbg(&nvdimm_bus->dev, "%pa\n", &nvdimm_map->offset); in nvdimm_map_release()
130 list_del(&nvdimm_map->list); in nvdimm_map_release()
131 if (nvdimm_map->flags) in nvdimm_map_release()
132 memunmap(nvdimm_map->mem); in nvdimm_map_release()
134 iounmap(nvdimm_map->iomem); in nvdimm_map_release()
135 release_mem_region(nvdimm_map->offset, nvdimm_map->size); in nvdimm_map_release()
136 kfree(nvdimm_map); in nvdimm_map_release()
141 struct nvdimm_map *nvdimm_map = data; in nvdimm_map_put() local
142 struct nvdimm_bus *nvdimm_bus = nvdimm_map->nvdimm_bus; in nvdimm_map_put()
145 kref_put(&nvdimm_map->kref, nvdimm_map_release); in nvdimm_map_put()
159 struct nvdimm_map *nvdimm_map; in devm_nvdimm_memremap() local
162 nvdimm_map = find_nvdimm_map(dev, offset); in devm_nvdimm_memremap()
163 if (!nvdimm_map) in devm_nvdimm_memremap()
164 nvdimm_map = alloc_nvdimm_map(dev, offset, size, flags); in devm_nvdimm_memremap()
166 kref_get(&nvdimm_map->kref); in devm_nvdimm_memremap()
169 if (!nvdimm_map) in devm_nvdimm_memremap()
172 if (devm_add_action_or_reset(dev, nvdimm_map_put, nvdimm_map)) in devm_nvdimm_memremap()
175 return nvdimm_map->mem; in devm_nvdimm_memremap()