Lines Matching full:header

91  * @header: Pool of DMA memory for device command buffer headers.
142 * @cb_header: Device command buffer header, allocated from a DMA pool.
167 * struct vmw_cmdbuf_dheader - Device command buffer header with inline
170 * @cb_header: Device command buffer header.
233 * @header: Pointer to the header to free.
235 static void vmw_cmdbuf_header_inline_free(struct vmw_cmdbuf_header *header) in vmw_cmdbuf_header_inline_free() argument
239 if (WARN_ON_ONCE(!header->inline_space)) in vmw_cmdbuf_header_inline_free()
242 dheader = container_of(header->cb_header, struct vmw_cmdbuf_dheader, in vmw_cmdbuf_header_inline_free()
244 dma_pool_free(header->man->dheaders, dheader, header->handle); in vmw_cmdbuf_header_inline_free()
245 kfree(header); in vmw_cmdbuf_header_inline_free()
252 * header: Pointer to the header to free.
256 static void __vmw_cmdbuf_header_free(struct vmw_cmdbuf_header *header) in __vmw_cmdbuf_header_free() argument
258 struct vmw_cmdbuf_man *man = header->man; in __vmw_cmdbuf_header_free()
262 if (header->inline_space) { in __vmw_cmdbuf_header_free()
263 vmw_cmdbuf_header_inline_free(header); in __vmw_cmdbuf_header_free()
267 drm_mm_remove_node(&header->node); in __vmw_cmdbuf_header_free()
269 if (header->cb_header) in __vmw_cmdbuf_header_free()
270 dma_pool_free(man->headers, header->cb_header, in __vmw_cmdbuf_header_free()
271 header->handle); in __vmw_cmdbuf_header_free()
272 kfree(header); in __vmw_cmdbuf_header_free()
279 * @header: Pointer to the header to free.
281 void vmw_cmdbuf_header_free(struct vmw_cmdbuf_header *header) in vmw_cmdbuf_header_free() argument
283 struct vmw_cmdbuf_man *man = header->man; in vmw_cmdbuf_header_free()
286 if (header->inline_space) { in vmw_cmdbuf_header_free()
287 vmw_cmdbuf_header_inline_free(header); in vmw_cmdbuf_header_free()
291 __vmw_cmdbuf_header_free(header); in vmw_cmdbuf_header_free()
299 * @header: The header of the buffer to submit.
301 static int vmw_cmdbuf_header_submit(struct vmw_cmdbuf_header *header) in vmw_cmdbuf_header_submit() argument
303 struct vmw_cmdbuf_man *man = header->man; in vmw_cmdbuf_header_submit()
306 val = upper_32_bits(header->handle); in vmw_cmdbuf_header_submit()
309 val = lower_32_bits(header->handle); in vmw_cmdbuf_header_submit()
310 val |= header->cb_context & SVGA_CB_CONTEXT_MASK; in vmw_cmdbuf_header_submit()
313 return header->cb_header->status; in vmw_cmdbuf_header_submit()
409 WARN_ONCE(true, "Command buffer header error.\n"); in vmw_cmdbuf_ctx_process()
466 * @header: The header of the buffer to submit.
469 * This function adds @header to the "submitted" queue of the command
475 struct vmw_cmdbuf_header *header, in vmw_cmdbuf_ctx_add() argument
478 if (!(header->cb_header->flags & SVGA_CB_FLAG_DX_CONTEXT)) in vmw_cmdbuf_ctx_add()
479 header->cb_header->dxContext = 0; in vmw_cmdbuf_ctx_add()
480 header->cb_context = cb_context; in vmw_cmdbuf_ctx_add()
481 list_add_tail(&header->list, &man->ctx[cb_context].submitted); in vmw_cmdbuf_ctx_add()
531 SVGA3dCmdHeader *header = (SVGA3dCmdHeader *) in vmw_cmdbuf_work_func() local
539 if (!vmw_cmd_describe(header, &error_cmd_size, &cmd_name)) { in vmw_cmdbuf_work_func()
852 * vmw_cmdbuf_space_pool - Set up a command buffer header with command buffer
856 * @header: Pointer to the header to set up.
861 struct vmw_cmdbuf_header *header, in vmw_cmdbuf_space_pool() argument
872 ret = vmw_cmdbuf_alloc_space(man, &header->node, size, interruptible); in vmw_cmdbuf_space_pool()
877 header->cb_header = dma_pool_zalloc(man->headers, GFP_KERNEL, in vmw_cmdbuf_space_pool()
878 &header->handle); in vmw_cmdbuf_space_pool()
879 if (!header->cb_header) { in vmw_cmdbuf_space_pool()
884 header->size = header->node.size << PAGE_SHIFT; in vmw_cmdbuf_space_pool()
885 cb_hdr = header->cb_header; in vmw_cmdbuf_space_pool()
886 offset = header->node.start << PAGE_SHIFT; in vmw_cmdbuf_space_pool()
887 header->cmd = man->map + offset; in vmw_cmdbuf_space_pool()
900 drm_mm_remove_node(&header->node); in vmw_cmdbuf_space_pool()
907 * vmw_cmdbuf_space_inline - Set up a command buffer header with
911 * @header: Pointer to the header to set up.
915 struct vmw_cmdbuf_header *header, in vmw_cmdbuf_space_inline() argument
925 &header->handle); in vmw_cmdbuf_space_inline()
929 header->inline_space = true; in vmw_cmdbuf_space_inline()
930 header->size = VMW_CMDBUF_INLINE_SIZE; in vmw_cmdbuf_space_inline()
932 header->cb_header = cb_hdr; in vmw_cmdbuf_space_inline()
933 header->cmd = dheader->cmd; in vmw_cmdbuf_space_inline()
936 cb_hdr->ptr.pa = (u64)header->handle + in vmw_cmdbuf_space_inline()
943 * vmw_cmdbuf_alloc - Allocate a command buffer header complete with
949 * @p_header: points to a header pointer to populate on successful return.
952 * returns an error pointer. The header pointer returned in @p_header should
959 struct vmw_cmdbuf_header *header; in vmw_cmdbuf_alloc() local
964 header = kzalloc(sizeof(*header), GFP_KERNEL); in vmw_cmdbuf_alloc()
965 if (!header) in vmw_cmdbuf_alloc()
969 ret = vmw_cmdbuf_space_inline(man, header, size); in vmw_cmdbuf_alloc()
971 ret = vmw_cmdbuf_space_pool(man, header, size, interruptible); in vmw_cmdbuf_alloc()
974 kfree(header); in vmw_cmdbuf_alloc()
978 header->man = man; in vmw_cmdbuf_alloc()
979 INIT_LIST_HEAD(&header->list); in vmw_cmdbuf_alloc()
980 header->cb_header->status = SVGA_CB_STATUS_NONE; in vmw_cmdbuf_alloc()
981 *p_header = header; in vmw_cmdbuf_alloc()
983 return header->cmd; in vmw_cmdbuf_alloc()
1067 * @header: Header of the command buffer. NULL if the current command buffer
1075 struct vmw_cmdbuf_header *header) in vmw_cmdbuf_reserve() argument
1077 if (!header) in vmw_cmdbuf_reserve()
1080 if (size > header->size) in vmw_cmdbuf_reserve()
1084 header->cb_header->flags |= SVGA_CB_FLAG_DX_CONTEXT; in vmw_cmdbuf_reserve()
1085 header->cb_header->dxContext = ctx_id; in vmw_cmdbuf_reserve()
1088 header->reserved = size; in vmw_cmdbuf_reserve()
1089 return header->cmd; in vmw_cmdbuf_reserve()
1097 * @header: Header of the command buffer. NULL if the current command buffer
1102 struct vmw_cmdbuf_header *header, bool flush) in vmw_cmdbuf_commit() argument
1104 if (!header) { in vmw_cmdbuf_commit()
1111 WARN_ON(size > header->reserved); in vmw_cmdbuf_commit()
1112 man->cur = header; in vmw_cmdbuf_commit()
1115 header->cb_header->flags &= ~SVGA_CB_FLAG_DX_CONTEXT; in vmw_cmdbuf_commit()
1135 struct vmw_cmdbuf_header *header; in vmw_cmdbuf_send_device_command() local
1137 void *cmd = vmw_cmdbuf_alloc(man, size, false, &header); in vmw_cmdbuf_send_device_command()
1143 header->cb_header->length = size; in vmw_cmdbuf_send_device_command()
1144 header->cb_context = SVGA_CB_CONTEXT_DEVICE; in vmw_cmdbuf_send_device_command()
1146 status = vmw_cmdbuf_header_submit(header); in vmw_cmdbuf_send_device_command()
1148 vmw_cmdbuf_header_free(header); in vmw_cmdbuf_send_device_command()