Lines Matching refs:header
98 * @header: Pool of DMA memory for device command buffer headers.
153 * @cb_header: Device command buffer header, allocated from a DMA pool.
178 * struct vmw_cmdbuf_dheader - Device command buffer header with inline
181 * @cb_header: Device command buffer header.
244 * @header: Pointer to the header to free.
246 static void vmw_cmdbuf_header_inline_free(struct vmw_cmdbuf_header *header)
250 if (WARN_ON_ONCE(!header->inline_space))
253 dheader = container_of(header->cb_header, struct vmw_cmdbuf_dheader,
255 dma_pool_free(header->man->dheaders, dheader, header->handle);
256 kfree(header);
263 * header: Pointer to the header to free.
267 static void __vmw_cmdbuf_header_free(struct vmw_cmdbuf_header *header)
269 struct vmw_cmdbuf_man *man = header->man;
273 if (header->inline_space) {
274 vmw_cmdbuf_header_inline_free(header);
278 drm_mm_remove_node(&header->node);
280 if (header->cb_header)
281 dma_pool_free(man->headers, header->cb_header,
282 header->handle);
283 kfree(header);
290 * @header: Pointer to the header to free.
292 void vmw_cmdbuf_header_free(struct vmw_cmdbuf_header *header)
294 struct vmw_cmdbuf_man *man = header->man;
297 if (header->inline_space) {
298 vmw_cmdbuf_header_inline_free(header);
302 __vmw_cmdbuf_header_free(header);
310 * @header: The header of the buffer to submit.
312 static int vmw_cmdbuf_header_submit(struct vmw_cmdbuf_header *header)
314 struct vmw_cmdbuf_man *man = header->man;
317 val = upper_32_bits(header->handle);
320 val = lower_32_bits(header->handle);
321 val |= header->cb_context & SVGA_CB_CONTEXT_MASK;
324 return header->cb_header->status;
422 WARN_ONCE(true, "Command buffer header error.\n");
481 * @header: The header of the buffer to submit.
484 * This function adds @header to the "submitted" queue of the command
490 struct vmw_cmdbuf_header *header,
493 if (!(header->cb_header->flags & SVGA_CB_FLAG_DX_CONTEXT))
494 header->cb_header->dxContext = 0;
495 header->cb_context = cb_context;
496 list_add_tail(&header->list, &man->ctx[cb_context].submitted);
546 SVGA3dCmdHeader *header = (SVGA3dCmdHeader *)
554 if (!vmw_cmd_describe(header, &error_cmd_size, &cmd_name)) {
875 * vmw_cmdbuf_space_pool - Set up a command buffer header with command buffer
879 * @header: Pointer to the header to set up.
884 struct vmw_cmdbuf_header *header,
895 ret = vmw_cmdbuf_alloc_space(man, &header->node, size, interruptible);
900 header->cb_header = dma_pool_zalloc(man->headers, GFP_KERNEL,
901 &header->handle);
902 if (!header->cb_header) {
907 header->size = header->node.size << PAGE_SHIFT;
908 cb_hdr = header->cb_header;
909 offset = header->node.start << PAGE_SHIFT;
910 header->cmd = man->map + offset;
923 drm_mm_remove_node(&header->node);
930 * vmw_cmdbuf_space_inline - Set up a command buffer header with
934 * @header: Pointer to the header to set up.
938 struct vmw_cmdbuf_header *header,
948 &header->handle);
952 header->inline_space = true;
953 header->size = VMW_CMDBUF_INLINE_SIZE;
955 header->cb_header = cb_hdr;
956 header->cmd = dheader->cmd;
959 cb_hdr->ptr.pa = (u64)header->handle +
966 * vmw_cmdbuf_alloc - Allocate a command buffer header complete with
972 * @p_header: points to a header pointer to populate on successful return.
975 * returns an error pointer. The header pointer returned in @p_header should
982 struct vmw_cmdbuf_header *header;
987 header = kzalloc(sizeof(*header), GFP_KERNEL);
988 if (!header)
992 ret = vmw_cmdbuf_space_inline(man, header, size);
994 ret = vmw_cmdbuf_space_pool(man, header, size, interruptible);
997 kfree(header);
1001 header->man = man;
1002 INIT_LIST_HEAD(&header->list);
1003 header->cb_header->status = SVGA_CB_STATUS_NONE;
1004 *p_header = header;
1006 return header->cmd;
1090 * @header: Header of the command buffer. NULL if the current command buffer
1098 struct vmw_cmdbuf_header *header)
1100 if (!header)
1103 if (size > header->size)
1107 header->cb_header->flags |= SVGA_CB_FLAG_DX_CONTEXT;
1108 header->cb_header->dxContext = ctx_id;
1111 header->reserved = size;
1112 return header->cmd;
1120 * @header: Header of the command buffer. NULL if the current command buffer
1125 struct vmw_cmdbuf_header *header, bool flush)
1127 if (!header) {
1134 WARN_ON(size > header->reserved);
1135 man->cur = header;
1138 header->cb_header->flags &= ~SVGA_CB_FLAG_DX_CONTEXT;
1158 struct vmw_cmdbuf_header *header;
1160 void *cmd = vmw_cmdbuf_alloc(man, size, false, &header);
1166 header->cb_header->length = size;
1167 header->cb_context = SVGA_CB_CONTEXT_DEVICE;
1169 status = vmw_cmdbuf_header_submit(header);
1171 vmw_cmdbuf_header_free(header);