Lines Matching refs:mapping

43 bus_space_io_mapping_init_wc(bus_space_tag_t bst, struct io_mapping *mapping,  in bus_space_io_mapping_init_wc()  argument
68 mapping->diom_bst = bst; in bus_space_io_mapping_init_wc()
69 mapping->base = addr; in bus_space_io_mapping_init_wc()
70 mapping->size = size; in bus_space_io_mapping_init_wc()
71 mapping->diom_atomic = false; in bus_space_io_mapping_init_wc()
74 mapping->diom_va = uvm_km_alloc(kernel_map, PAGE_SIZE, PAGE_SIZE, in bus_space_io_mapping_init_wc()
76 KASSERT(mapping->diom_va != 0); in bus_space_io_mapping_init_wc()
82 io_mapping_fini(struct io_mapping *mapping) in io_mapping_fini() argument
85 KASSERT(!mapping->diom_atomic); in io_mapping_fini()
87 uvm_km_free(kernel_map, mapping->diom_va, PAGE_SIZE, UVM_KMF_VAONLY); in io_mapping_fini()
88 mapping->diom_va = 0; /* paranoia */ in io_mapping_fini()
95 struct io_mapping *mapping; in bus_space_io_mapping_create_wc() local
97 mapping = kmem_alloc(sizeof(*mapping), KM_SLEEP); in bus_space_io_mapping_create_wc()
98 if (!bus_space_io_mapping_init_wc(bst, mapping, addr, size)) { in bus_space_io_mapping_create_wc()
99 kmem_free(mapping, sizeof(*mapping)); in bus_space_io_mapping_create_wc()
103 return mapping; in bus_space_io_mapping_create_wc()
107 io_mapping_free(struct io_mapping *mapping) in io_mapping_free() argument
110 io_mapping_fini(mapping); in io_mapping_free()
111 kmem_free(mapping, sizeof(*mapping)); in io_mapping_free()
115 io_mapping_map_wc(struct io_mapping *mapping, bus_addr_t offset, in io_mapping_map_wc() argument
123 KASSERT(PAGE_SIZE <= mapping->size); in io_mapping_map_wc()
124 KASSERT(offset <= (mapping->size - PAGE_SIZE)); in io_mapping_map_wc()
129 KASSERT(va != mapping->diom_va); in io_mapping_map_wc()
131 cookie = bus_space_mmap(mapping->diom_bst, mapping->base, in io_mapping_map_wc()
146 io_mapping_unmap(struct io_mapping *mapping, void *ptr, bus_size_t size) in io_mapping_unmap() argument
150 KASSERT(mapping->diom_va != va); in io_mapping_unmap()
159 io_mapping_map_atomic_wc(struct io_mapping *mapping, bus_addr_t offset) in io_mapping_map_atomic_wc() argument
164 KASSERT(PAGE_SIZE <= mapping->size); in io_mapping_map_atomic_wc()
165 KASSERT(offset <= (mapping->size - PAGE_SIZE)); in io_mapping_map_atomic_wc()
167 KASSERT(!mapping->diom_atomic); in io_mapping_map_atomic_wc()
169 cookie = bus_space_mmap(mapping->diom_bst, mapping->base, offset, in io_mapping_map_atomic_wc()
174 pmap_kenter_pa(mapping->diom_va, pmap_phys_address(cookie), in io_mapping_map_atomic_wc()
178 mapping->diom_atomic = true; in io_mapping_map_atomic_wc()
179 return (void *)mapping->diom_va; in io_mapping_map_atomic_wc()
183 io_mapping_unmap_atomic(struct io_mapping *mapping, void *ptr __diagused) in io_mapping_unmap_atomic() argument
186 KASSERT(mapping->diom_atomic); in io_mapping_unmap_atomic()
187 KASSERT(mapping->diom_va == (vaddr_t)ptr); in io_mapping_unmap_atomic()
189 pmap_kremove(mapping->diom_va, PAGE_SIZE); in io_mapping_unmap_atomic()
192 mapping->diom_atomic = false; in io_mapping_unmap_atomic()