Lines Matching full:mem
17 * @mem: address space of the endpoint controller
20 * Reimplement get_order() for mem->page_size since the generic get_order
23 static int pci_epc_mem_get_order(struct pci_epc_mem *mem, size_t size) in pci_epc_mem_get_order() argument
26 unsigned int page_shift = ilog2(mem->window.page_size); in pci_epc_mem_get_order()
51 struct pci_epc_mem *mem = NULL; in pci_epc_multi_mem_init() local
77 mem = kzalloc(sizeof(*mem), GFP_KERNEL); in pci_epc_multi_mem_init()
78 if (!mem) { in pci_epc_multi_mem_init()
87 kfree(mem); in pci_epc_multi_mem_init()
92 mem->window.phys_base = windows[i].phys_base; in pci_epc_multi_mem_init()
93 mem->window.size = windows[i].size; in pci_epc_multi_mem_init()
94 mem->window.page_size = page_size; in pci_epc_multi_mem_init()
95 mem->bitmap = bitmap; in pci_epc_multi_mem_init()
96 mem->pages = pages; in pci_epc_multi_mem_init()
97 mutex_init(&mem->lock); in pci_epc_multi_mem_init()
98 epc->windows[i] = mem; in pci_epc_multi_mem_init()
101 epc->mem = epc->windows[0]; in pci_epc_multi_mem_init()
108 mem = epc->windows[i]; in pci_epc_multi_mem_init()
109 kfree(mem->bitmap); in pci_epc_multi_mem_init()
110 kfree(mem); in pci_epc_multi_mem_init()
150 struct pci_epc_mem *mem; in pci_epc_mem_exit() local
157 mem = epc->windows[i]; in pci_epc_mem_exit()
158 kfree(mem->bitmap); in pci_epc_mem_exit()
159 kfree(mem); in pci_epc_mem_exit()
164 epc->mem = NULL; in pci_epc_mem_exit()
182 struct pci_epc_mem *mem; in pci_epc_mem_alloc_addr() local
190 mem = epc->windows[i]; in pci_epc_mem_alloc_addr()
191 mutex_lock(&mem->lock); in pci_epc_mem_alloc_addr()
192 align_size = ALIGN(size, mem->window.page_size); in pci_epc_mem_alloc_addr()
193 order = pci_epc_mem_get_order(mem, align_size); in pci_epc_mem_alloc_addr()
195 pageno = bitmap_find_free_region(mem->bitmap, mem->pages, in pci_epc_mem_alloc_addr()
198 page_shift = ilog2(mem->window.page_size); in pci_epc_mem_alloc_addr()
199 *phys_addr = mem->window.phys_base + in pci_epc_mem_alloc_addr()
203 bitmap_release_region(mem->bitmap, in pci_epc_mem_alloc_addr()
205 mutex_unlock(&mem->lock); in pci_epc_mem_alloc_addr()
208 mutex_unlock(&mem->lock); in pci_epc_mem_alloc_addr()
211 mutex_unlock(&mem->lock); in pci_epc_mem_alloc_addr()
221 struct pci_epc_mem *mem; in pci_epc_get_matching_window() local
225 mem = epc->windows[i]; in pci_epc_get_matching_window()
227 if (phys_addr >= mem->window.phys_base && in pci_epc_get_matching_window()
228 phys_addr < (mem->window.phys_base + mem->window.size)) in pci_epc_get_matching_window()
229 return mem; in pci_epc_get_matching_window()
239 * @virt_addr: virtual address of the allocated mem space
247 struct pci_epc_mem *mem; in pci_epc_mem_free_addr() local
253 mem = pci_epc_get_matching_window(epc, phys_addr); in pci_epc_mem_free_addr()
254 if (!mem) { in pci_epc_mem_free_addr()
259 page_size = mem->window.page_size; in pci_epc_mem_free_addr()
262 pageno = (phys_addr - mem->window.phys_base) >> page_shift; in pci_epc_mem_free_addr()
264 order = pci_epc_mem_get_order(mem, size); in pci_epc_mem_free_addr()
265 mutex_lock(&mem->lock); in pci_epc_mem_free_addr()
266 bitmap_release_region(mem->bitmap, pageno, order); in pci_epc_mem_free_addr()
267 mutex_unlock(&mem->lock); in pci_epc_mem_free_addr()