Lines Matching refs:buffer
32 static zx_status_t io_buffer_init_common(io_buffer_t* buffer, zx_handle_t bti_handle, in io_buffer_init_common() argument
65 buffer->bti_handle = bti_handle; in io_buffer_init_common()
66 buffer->vmo_handle = vmo_handle; in io_buffer_init_common()
67 buffer->pmt_handle = pmt_handle; in io_buffer_init_common()
68 buffer->size = size; in io_buffer_init_common()
69 buffer->offset = offset; in io_buffer_init_common()
70 buffer->virt = (void *)virt; in io_buffer_init_common()
71 buffer->phys = phys; in io_buffer_init_common()
76 zx_status_t io_buffer_init_aligned(io_buffer_t* buffer, zx_handle_t bti, size_t size, in io_buffer_init_aligned() argument
78 memset(buffer, 0, sizeof(*buffer)); in io_buffer_init_aligned()
112 return io_buffer_init_common(buffer, bti, vmo_handle, size, 0, flags); in io_buffer_init_aligned()
115 zx_status_t io_buffer_init(io_buffer_t* buffer, zx_handle_t bti, size_t size, uint32_t flags) { in io_buffer_init() argument
117 return io_buffer_init_aligned(buffer, bti, size, 0, flags); in io_buffer_init()
120 zx_status_t io_buffer_init_vmo(io_buffer_t* buffer, zx_handle_t bti, zx_handle_t vmo_handle, in io_buffer_init_vmo() argument
122 memset(buffer, 0, sizeof(*buffer)); in io_buffer_init_vmo()
138 return io_buffer_init_common(buffer, bti, vmo_handle, size, offset, flags); in io_buffer_init_vmo()
141 zx_status_t io_buffer_init_mmio(io_buffer_t* buffer, zx_handle_t vmo_handle, void* virt, in io_buffer_init_mmio() argument
143 memset(buffer, 0, sizeof(*buffer)); in io_buffer_init_mmio()
148 buffer->vmo_handle = vmo_handle; in io_buffer_init_mmio()
149 buffer->size = size; in io_buffer_init_mmio()
150 buffer->offset = offset; in io_buffer_init_mmio()
151 buffer->virt = (void *)virt; in io_buffer_init_mmio()
156 zx_status_t io_buffer_init_physical(io_buffer_t* buffer, zx_handle_t bti, zx_paddr_t addr, in io_buffer_init_physical() argument
158 memset(buffer, 0, sizeof(*buffer)); in io_buffer_init_physical()
193 buffer->bti_handle = bti; in io_buffer_init_physical()
194 buffer->vmo_handle = vmo_handle; in io_buffer_init_physical()
195 buffer->pmt_handle = pmt; in io_buffer_init_physical()
196 buffer->size = size; in io_buffer_init_physical()
197 buffer->offset = 0; in io_buffer_init_physical()
198 buffer->virt = (void *)virt; in io_buffer_init_physical()
199 buffer->phys = phys; in io_buffer_init_physical()
200 buffer->phys_list = NULL; in io_buffer_init_physical()
201 buffer->phys_count = 0; in io_buffer_init_physical()
205 void io_buffer_release(io_buffer_t* buffer) { in io_buffer_release() argument
206 if (buffer->vmo_handle != ZX_HANDLE_INVALID) { in io_buffer_release()
207 if (buffer->pmt_handle != ZX_HANDLE_INVALID) { in io_buffer_release()
208 zx_status_t status = zx_pmt_unpin(buffer->pmt_handle); in io_buffer_release()
210 buffer->pmt_handle = ZX_HANDLE_INVALID; in io_buffer_release()
213 zx_vmar_unmap(zx_vmar_root_self(), (uintptr_t)buffer->virt, buffer->size); in io_buffer_release()
214 zx_handle_close(buffer->vmo_handle); in io_buffer_release()
215 buffer->vmo_handle = ZX_HANDLE_INVALID; in io_buffer_release()
217 if (buffer->phys_list && buffer->pmt_handle != ZX_HANDLE_INVALID) { in io_buffer_release()
218 zx_status_t status = zx_pmt_unpin(buffer->pmt_handle); in io_buffer_release()
220 buffer->pmt_handle = ZX_HANDLE_INVALID; in io_buffer_release()
222 free(buffer->phys_list); in io_buffer_release()
223 buffer->phys_list = NULL; in io_buffer_release()
224 buffer->phys = 0; in io_buffer_release()
225 buffer->phys_count = 0; in io_buffer_release()
228 zx_status_t io_buffer_cache_op(io_buffer_t* buffer, const uint32_t op, in io_buffer_cache_op() argument
231 return zx_vmo_op_range(buffer->vmo_handle, op, buffer->offset + offset, size, NULL, 0); in io_buffer_cache_op()
237 zx_status_t io_buffer_cache_flush(io_buffer_t* buffer, zx_off_t offset, size_t length) { in io_buffer_cache_flush() argument
238 if (offset + length < offset || offset + length > buffer->size) { in io_buffer_cache_flush()
241 return zx_cache_flush(io_buffer_virt(buffer) + offset, length, ZX_CACHE_FLUSH_DATA); in io_buffer_cache_flush()
244 zx_status_t io_buffer_cache_flush_invalidate(io_buffer_t* buffer, zx_off_t offset, size_t length) { in io_buffer_cache_flush_invalidate() argument
245 if (offset + length < offset || offset + length > buffer->size) { in io_buffer_cache_flush_invalidate()
248 return zx_cache_flush(io_buffer_virt(buffer) + offset, length, in io_buffer_cache_flush_invalidate()
252 zx_status_t io_buffer_physmap(io_buffer_t* buffer) { in io_buffer_physmap() argument
253 if (buffer->phys_count > 0) { in io_buffer_physmap()
256 if (buffer->size == 0) { in io_buffer_physmap()
259 if (buffer->pmt_handle != ZX_HANDLE_INVALID && buffer->phys == IO_BUFFER_INVALID_PHYS) { in io_buffer_physmap()
265 uint64_t page_offset = ROUNDDOWN(buffer->offset, PAGE_SIZE); in io_buffer_physmap()
267 uint64_t page_length = buffer->size - page_offset; in io_buffer_physmap()
276 if (buffer->phys == IO_BUFFER_INVALID_PHYS) { in io_buffer_physmap()
278 zx_status_t status = io_buffer_physmap_range(buffer, page_offset, page_length, in io_buffer_physmap()
284 buffer->pmt_handle = pmt; in io_buffer_physmap()
289 paddrs[i] = buffer->phys + page_offset + i * PAGE_SIZE; in io_buffer_physmap()
291 paddrs[0] += buffer->offset & (PAGE_SIZE - 1); in io_buffer_physmap()
293 buffer->phys_list = paddrs; in io_buffer_physmap()
294 buffer->phys_count = pages; in io_buffer_physmap()
298 zx_status_t io_buffer_physmap_range(io_buffer_t* buffer, zx_off_t offset, in io_buffer_physmap_range() argument
312 zx_status_t status = zx_bti_pin(buffer->bti_handle, options, buffer->vmo_handle, in io_buffer_physmap_range()