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 if (size > mem->window.size) in pci_epc_mem_alloc_addr()
194 align_size = ALIGN(size, mem->window.page_size); in pci_epc_mem_alloc_addr()
195 order = pci_epc_mem_get_order(mem, align_size); in pci_epc_mem_alloc_addr()
197 mutex_lock(&mem->lock); in pci_epc_mem_alloc_addr()
198 pageno = bitmap_find_free_region(mem->bitmap, mem->pages, in pci_epc_mem_alloc_addr()
201 page_shift = ilog2(mem->window.page_size); in pci_epc_mem_alloc_addr()
202 *phys_addr = mem->window.phys_base + in pci_epc_mem_alloc_addr()
206 bitmap_release_region(mem->bitmap, 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()
214 mutex_unlock(&mem->lock); in pci_epc_mem_alloc_addr()
224 struct pci_epc_mem *mem; in pci_epc_get_matching_window() local
228 mem = epc->windows[i]; in pci_epc_get_matching_window()
230 if (phys_addr >= mem->window.phys_base && in pci_epc_get_matching_window()
231 phys_addr < (mem->window.phys_base + mem->window.size)) in pci_epc_get_matching_window()
232 return mem; in pci_epc_get_matching_window()
242 * @virt_addr: virtual address of the allocated mem space
250 struct pci_epc_mem *mem; in pci_epc_mem_free_addr() local
256 mem = pci_epc_get_matching_window(epc, phys_addr); in pci_epc_mem_free_addr()
257 if (!mem) { in pci_epc_mem_free_addr()
262 page_size = mem->window.page_size; in pci_epc_mem_free_addr()
265 pageno = (phys_addr - mem->window.phys_base) >> page_shift; in pci_epc_mem_free_addr()
267 order = pci_epc_mem_get_order(mem, size); in pci_epc_mem_free_addr()
268 mutex_lock(&mem->lock); in pci_epc_mem_free_addr()
269 bitmap_release_region(mem->bitmap, pageno, order); in pci_epc_mem_free_addr()
270 mutex_unlock(&mem->lock); in pci_epc_mem_free_addr()