Lines Matching refs:header
225 static void vmw_cmdbuf_header_inline_free(struct vmw_cmdbuf_header *header) in vmw_cmdbuf_header_inline_free() argument
229 if (WARN_ON_ONCE(!header->inline_space)) in vmw_cmdbuf_header_inline_free()
232 dheader = container_of(header->cb_header, struct vmw_cmdbuf_dheader, in vmw_cmdbuf_header_inline_free()
234 dma_pool_free(header->man->dheaders, dheader, header->handle); in vmw_cmdbuf_header_inline_free()
235 kfree(header); in vmw_cmdbuf_header_inline_free()
246 static void __vmw_cmdbuf_header_free(struct vmw_cmdbuf_header *header) in __vmw_cmdbuf_header_free() argument
248 struct vmw_cmdbuf_man *man = header->man; in __vmw_cmdbuf_header_free()
252 if (header->inline_space) { in __vmw_cmdbuf_header_free()
253 vmw_cmdbuf_header_inline_free(header); in __vmw_cmdbuf_header_free()
257 drm_mm_remove_node(&header->node); in __vmw_cmdbuf_header_free()
259 if (header->cb_header) in __vmw_cmdbuf_header_free()
260 dma_pool_free(man->headers, header->cb_header, in __vmw_cmdbuf_header_free()
261 header->handle); in __vmw_cmdbuf_header_free()
262 kfree(header); in __vmw_cmdbuf_header_free()
271 void vmw_cmdbuf_header_free(struct vmw_cmdbuf_header *header) in vmw_cmdbuf_header_free() argument
273 struct vmw_cmdbuf_man *man = header->man; in vmw_cmdbuf_header_free()
276 if (header->inline_space) { in vmw_cmdbuf_header_free()
277 vmw_cmdbuf_header_inline_free(header); in vmw_cmdbuf_header_free()
281 __vmw_cmdbuf_header_free(header); in vmw_cmdbuf_header_free()
291 static int vmw_cmdbuf_header_submit(struct vmw_cmdbuf_header *header) in vmw_cmdbuf_header_submit() argument
293 struct vmw_cmdbuf_man *man = header->man; in vmw_cmdbuf_header_submit()
296 if (sizeof(header->handle) > 4) in vmw_cmdbuf_header_submit()
297 val = (header->handle >> 32); in vmw_cmdbuf_header_submit()
302 val = (header->handle & 0xFFFFFFFFULL); in vmw_cmdbuf_header_submit()
303 val |= header->cb_context & SVGA_CB_CONTEXT_MASK; in vmw_cmdbuf_header_submit()
306 return header->cb_header->status; in vmw_cmdbuf_header_submit()
461 struct vmw_cmdbuf_header *header, in vmw_cmdbuf_ctx_add() argument
464 if (!(header->cb_header->flags & SVGA_CB_FLAG_DX_CONTEXT)) in vmw_cmdbuf_ctx_add()
465 header->cb_header->dxContext = 0; in vmw_cmdbuf_ctx_add()
466 header->cb_context = cb_context; in vmw_cmdbuf_ctx_add()
467 list_add_tail(&header->list, &man->ctx[cb_context].submitted); in vmw_cmdbuf_ctx_add()
774 struct vmw_cmdbuf_header *header, in vmw_cmdbuf_space_pool() argument
785 ret = vmw_cmdbuf_alloc_space(man, &header->node, size, interruptible); in vmw_cmdbuf_space_pool()
790 header->cb_header = dma_pool_alloc(man->headers, GFP_KERNEL, in vmw_cmdbuf_space_pool()
791 &header->handle); in vmw_cmdbuf_space_pool()
792 if (!header->cb_header) { in vmw_cmdbuf_space_pool()
797 header->size = header->node.size << PAGE_SHIFT; in vmw_cmdbuf_space_pool()
798 cb_hdr = header->cb_header; in vmw_cmdbuf_space_pool()
799 offset = header->node.start << PAGE_SHIFT; in vmw_cmdbuf_space_pool()
800 header->cmd = man->map + offset; in vmw_cmdbuf_space_pool()
814 drm_mm_remove_node(&header->node); in vmw_cmdbuf_space_pool()
829 struct vmw_cmdbuf_header *header, in vmw_cmdbuf_space_inline() argument
839 &header->handle); in vmw_cmdbuf_space_inline()
843 header->inline_space = true; in vmw_cmdbuf_space_inline()
844 header->size = VMW_CMDBUF_INLINE_SIZE; in vmw_cmdbuf_space_inline()
846 header->cb_header = cb_hdr; in vmw_cmdbuf_space_inline()
847 header->cmd = dheader->cmd; in vmw_cmdbuf_space_inline()
851 cb_hdr->ptr.pa = (u64)header->handle + in vmw_cmdbuf_space_inline()
874 struct vmw_cmdbuf_header *header; in vmw_cmdbuf_alloc() local
879 header = kzalloc(sizeof(*header), GFP_KERNEL); in vmw_cmdbuf_alloc()
880 if (!header) in vmw_cmdbuf_alloc()
884 ret = vmw_cmdbuf_space_inline(man, header, size); in vmw_cmdbuf_alloc()
886 ret = vmw_cmdbuf_space_pool(man, header, size, interruptible); in vmw_cmdbuf_alloc()
889 kfree(header); in vmw_cmdbuf_alloc()
893 header->man = man; in vmw_cmdbuf_alloc()
894 INIT_LIST_HEAD(&header->list); in vmw_cmdbuf_alloc()
895 header->cb_header->status = SVGA_CB_STATUS_NONE; in vmw_cmdbuf_alloc()
896 *p_header = header; in vmw_cmdbuf_alloc()
898 return header->cmd; in vmw_cmdbuf_alloc()
990 struct vmw_cmdbuf_header *header) in vmw_cmdbuf_reserve() argument
992 if (!header) in vmw_cmdbuf_reserve()
995 if (size > header->size) in vmw_cmdbuf_reserve()
999 header->cb_header->flags |= SVGA_CB_FLAG_DX_CONTEXT; in vmw_cmdbuf_reserve()
1000 header->cb_header->dxContext = ctx_id; in vmw_cmdbuf_reserve()
1003 header->reserved = size; in vmw_cmdbuf_reserve()
1004 return header->cmd; in vmw_cmdbuf_reserve()
1017 struct vmw_cmdbuf_header *header, bool flush) in vmw_cmdbuf_commit() argument
1019 if (!header) { in vmw_cmdbuf_commit()
1026 WARN_ON(size > header->reserved); in vmw_cmdbuf_commit()
1027 man->cur = header; in vmw_cmdbuf_commit()
1030 header->cb_header->flags &= ~SVGA_CB_FLAG_DX_CONTEXT; in vmw_cmdbuf_commit()
1062 struct vmw_cmdbuf_header *header; in vmw_cmdbuf_send_device_command() local
1064 void *cmd = vmw_cmdbuf_alloc(man, size, false, &header); in vmw_cmdbuf_send_device_command()
1070 header->cb_header->length = size; in vmw_cmdbuf_send_device_command()
1071 header->cb_context = SVGA_CB_CONTEXT_DEVICE; in vmw_cmdbuf_send_device_command()
1073 status = vmw_cmdbuf_header_submit(header); in vmw_cmdbuf_send_device_command()
1075 vmw_cmdbuf_header_free(header); in vmw_cmdbuf_send_device_command()