mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-20 14:00:11 +01:00
259 lines
6.3 KiB
C
259 lines
6.3 KiB
C
/**************************************************************************
|
|
*
|
|
* Copyright 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
|
|
* All Rights Reserved.
|
|
* Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA
|
|
* All Rights Reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the
|
|
* "Software"), to deal in the Software without restriction, including
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
* distribute, sub license, and/or sell copies of the Software, and to
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
* the following conditions:
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
|
* THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
* The above copyright notice and this permission notice (including the
|
|
* next paragraph) shall be included in all copies or substantial portions
|
|
* of the Software.
|
|
*
|
|
**************************************************************************/
|
|
/*
|
|
* Authors
|
|
* Thomas Hellström <thomas-at-tungstengraphics-dot-com>
|
|
*/
|
|
|
|
#ifndef _TTM_PLACEMENT_USER_H_
|
|
#define _TTM_PLACEMENT_USER_H_
|
|
|
|
#if !defined(__KERNEL__) && !defined(_KERNEL)
|
|
#include <stdint.h>
|
|
#else
|
|
#include <linux/kernel.h>
|
|
#endif
|
|
|
|
#include "ttm/ttm_placement_common.h"
|
|
|
|
#define TTM_PLACEMENT_MAJOR 0
|
|
#define TTM_PLACEMENT_MINOR 1
|
|
#define TTM_PLACEMENT_PL 0
|
|
#define TTM_PLACEMENT_DATE "080819"
|
|
|
|
/**
|
|
* struct ttm_pl_create_req
|
|
*
|
|
* @size: The buffer object size.
|
|
* @placement: Flags that indicate initial acceptable
|
|
* placement.
|
|
* @page_alignment: Required alignment in pages.
|
|
*
|
|
* Input to the TTM_BO_CREATE ioctl.
|
|
*/
|
|
|
|
struct ttm_pl_create_req {
|
|
uint64_t size;
|
|
uint32_t placement;
|
|
uint32_t page_alignment;
|
|
};
|
|
|
|
/**
|
|
* struct ttm_pl_create_ub_req
|
|
*
|
|
* @size: The buffer object size.
|
|
* @user_address: User-space address of the memory area that
|
|
* should be used to back the buffer object cast to 64-bit.
|
|
* @placement: Flags that indicate initial acceptable
|
|
* placement.
|
|
* @page_alignment: Required alignment in pages.
|
|
*
|
|
* Input to the TTM_BO_CREATE_UB ioctl.
|
|
*/
|
|
|
|
struct ttm_pl_create_ub_req {
|
|
uint64_t size;
|
|
uint64_t user_address;
|
|
uint32_t placement;
|
|
uint32_t page_alignment;
|
|
};
|
|
|
|
/**
|
|
* struct ttm_pl_rep
|
|
*
|
|
* @gpu_offset: The current offset into the memory region used.
|
|
* This can be used directly by the GPU if there are no
|
|
* additional GPU mapping procedures used by the driver.
|
|
*
|
|
* @bo_size: Actual buffer object size.
|
|
*
|
|
* @map_handle: Offset into the device address space.
|
|
* Used for map, seek, read, write. This will never change
|
|
* during the lifetime of an object.
|
|
*
|
|
* @placement: Flag indicating the placement status of
|
|
* the buffer object using the TTM_PL flags above.
|
|
*
|
|
* @sync_object_arg: Used for user-space synchronization and
|
|
* depends on the synchronization model used. If fences are
|
|
* used, this is the buffer_object::fence_type_mask
|
|
*
|
|
* Output from the TTM_PL_CREATE and TTM_PL_REFERENCE, and
|
|
* TTM_PL_SETSTATUS ioctls.
|
|
*/
|
|
|
|
struct ttm_pl_rep {
|
|
uint64_t gpu_offset;
|
|
uint64_t bo_size;
|
|
uint64_t map_handle;
|
|
uint32_t placement;
|
|
uint32_t handle;
|
|
uint32_t sync_object_arg;
|
|
uint32_t pad64;
|
|
};
|
|
|
|
/**
|
|
* struct ttm_pl_setstatus_req
|
|
*
|
|
* @set_placement: Placement flags to set.
|
|
*
|
|
* @clr_placement: Placement flags to clear.
|
|
*
|
|
* @handle: The object handle
|
|
*
|
|
* Input to the TTM_PL_SETSTATUS ioctl.
|
|
*/
|
|
|
|
struct ttm_pl_setstatus_req {
|
|
uint32_t set_placement;
|
|
uint32_t clr_placement;
|
|
uint32_t handle;
|
|
uint32_t pad64;
|
|
};
|
|
|
|
/**
|
|
* struct ttm_pl_reference_req
|
|
*
|
|
* @handle: The object to put a reference on.
|
|
*
|
|
* Input to the TTM_PL_REFERENCE and the TTM_PL_UNREFERENCE ioctls.
|
|
*/
|
|
|
|
struct ttm_pl_reference_req {
|
|
uint32_t handle;
|
|
uint32_t pad64;
|
|
};
|
|
|
|
/*
|
|
* ACCESS mode flags for SYNCCPU.
|
|
*
|
|
* TTM_SYNCCPU_MODE_READ will guarantee that the GPU is not
|
|
* writing to the buffer.
|
|
*
|
|
* TTM_SYNCCPU_MODE_WRITE will guarantee that the GPU is not
|
|
* accessing the buffer.
|
|
*
|
|
* TTM_SYNCCPU_MODE_NO_BLOCK makes sure the call does not wait
|
|
* for GPU accesses to finish but return -EBUSY.
|
|
*
|
|
* TTM_SYNCCPU_MODE_TRYCACHED Try to place the buffer in cacheable
|
|
* memory while synchronized for CPU.
|
|
*/
|
|
|
|
#define TTM_PL_SYNCCPU_MODE_READ TTM_ACCESS_READ
|
|
#define TTM_PL_SYNCCPU_MODE_WRITE TTM_ACCESS_WRITE
|
|
#define TTM_PL_SYNCCPU_MODE_NO_BLOCK (1 << 2)
|
|
#define TTM_PL_SYNCCPU_MODE_TRYCACHED (1 << 3)
|
|
|
|
/**
|
|
* struct ttm_pl_synccpu_arg
|
|
*
|
|
* @handle: The object to synchronize.
|
|
*
|
|
* @access_mode: access mode indicated by the
|
|
* TTM_SYNCCPU_MODE flags.
|
|
*
|
|
* @op: indicates whether to grab or release the
|
|
* buffer for cpu usage.
|
|
*
|
|
* Input to the TTM_PL_SYNCCPU ioctl.
|
|
*/
|
|
|
|
struct ttm_pl_synccpu_arg {
|
|
uint32_t handle;
|
|
uint32_t access_mode;
|
|
enum {
|
|
TTM_PL_SYNCCPU_OP_GRAB,
|
|
TTM_PL_SYNCCPU_OP_RELEASE
|
|
} op;
|
|
uint32_t pad64;
|
|
};
|
|
|
|
/*
|
|
* Waiting mode flags for the TTM_BO_WAITIDLE ioctl.
|
|
*
|
|
* TTM_WAITIDLE_MODE_LAZY: Allow for sleeps during polling
|
|
* wait.
|
|
*
|
|
* TTM_WAITIDLE_MODE_NO_BLOCK: Don't block waiting for GPU,
|
|
* but return -EBUSY if the buffer is busy.
|
|
*/
|
|
|
|
#define TTM_PL_WAITIDLE_MODE_LAZY (1 << 0)
|
|
#define TTM_PL_WAITIDLE_MODE_NO_BLOCK (1 << 1)
|
|
|
|
/**
|
|
* struct ttm_waitidle_arg
|
|
*
|
|
* @handle: The object to synchronize.
|
|
*
|
|
* @mode: wait mode indicated by the
|
|
* TTM_SYNCCPU_MODE flags.
|
|
*
|
|
* Argument to the TTM_BO_WAITIDLE ioctl.
|
|
*/
|
|
|
|
struct ttm_pl_waitidle_arg {
|
|
uint32_t handle;
|
|
uint32_t mode;
|
|
};
|
|
|
|
union ttm_pl_create_arg {
|
|
struct ttm_pl_create_req req;
|
|
struct ttm_pl_rep rep;
|
|
};
|
|
|
|
union ttm_pl_reference_arg {
|
|
struct ttm_pl_reference_req req;
|
|
struct ttm_pl_rep rep;
|
|
};
|
|
|
|
union ttm_pl_setstatus_arg {
|
|
struct ttm_pl_setstatus_req req;
|
|
struct ttm_pl_rep rep;
|
|
};
|
|
|
|
union ttm_pl_create_ub_arg {
|
|
struct ttm_pl_create_ub_req req;
|
|
struct ttm_pl_rep rep;
|
|
};
|
|
|
|
/*
|
|
* Ioctl offsets.
|
|
*/
|
|
|
|
#define TTM_PL_CREATE 0x00
|
|
#define TTM_PL_REFERENCE 0x01
|
|
#define TTM_PL_UNREF 0x02
|
|
#define TTM_PL_SYNCCPU 0x03
|
|
#define TTM_PL_WAITIDLE 0x04
|
|
#define TTM_PL_SETSTATUS 0x05
|
|
#define TTM_PL_CREATE_UB 0x06
|
|
|
|
#endif
|