Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 117fc89e authored by abhikran's avatar abhikran
Browse files

msm: cvp: Add uapi headers and trace events header



Adding new uapi header files and trace events header file for
Computer Vision Processor(CVP) driver. The header files expose
parameters to userspace clients to make system calls to CVP driver.

Change-Id: I6a55738e6bbda5a3f8f7b80881910c278fdd35d2
Signed-off-by: default avatarabhikran <abhikran@codeaurora.org>
parent 24529801
Loading
Loading
Loading
Loading
+341 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
 */

#undef TRACE_SYSTEM
#define TRACE_SYSTEM msm_cvp_events

#if !defined(_TRACE_MSM_CVP_H_) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_MSM_CVP_H
#include <linux/types.h>
#include <linux/tracepoint.h>

DECLARE_EVENT_CLASS(msm_v4l2_cvp,

	TP_PROTO(char *dummy),

	TP_ARGS(dummy),

	TP_STRUCT__entry(
		__field(char *, dummy)
	),

	TP_fast_assign(
		__entry->dummy = dummy;
	),

	TP_printk("%s", __entry->dummy)
);

DEFINE_EVENT(msm_v4l2_cvp, msm_v4l2_cvp_open_start,

	TP_PROTO(char *dummy),

	TP_ARGS(dummy)
);

DEFINE_EVENT(msm_v4l2_cvp, msm_v4l2_cvp_open_end,

	TP_PROTO(char *dummy),

	TP_ARGS(dummy)
);

DEFINE_EVENT(msm_v4l2_cvp, msm_v4l2_cvp_close_start,

	TP_PROTO(char *dummy),

	TP_ARGS(dummy)
);

DEFINE_EVENT(msm_v4l2_cvp, msm_v4l2_cvp_close_end,

	TP_PROTO(char *dummy),

	TP_ARGS(dummy)
);

DEFINE_EVENT(msm_v4l2_cvp, msm_v4l2_cvp_fw_load_start,

	TP_PROTO(char *dummy),

	TP_ARGS(dummy)
);

DEFINE_EVENT(msm_v4l2_cvp, msm_v4l2_cvp_fw_load_end,

	TP_PROTO(char *dummy),

	TP_ARGS(dummy)
);

DECLARE_EVENT_CLASS(msm_cvp_common,

	TP_PROTO(void *instp, int old_state, int new_state),

	TP_ARGS(instp, old_state, new_state),

	TP_STRUCT__entry(
		__field(void *, instp)
		__field(int, old_state)
		__field(int, new_state)
	),

	TP_fast_assign(
		__entry->instp = instp;
		__entry->old_state = old_state;
		__entry->new_state = new_state;
	),

	TP_printk("Moved inst: %p from 0x%x to 0x%x",
		__entry->instp,
		__entry->old_state,
		__entry->new_state)
);

DEFINE_EVENT(msm_cvp_common, msm_cvp_common_state_change,

	TP_PROTO(void *instp, int old_state, int new_state),

	TP_ARGS(instp, old_state, new_state)
);

DECLARE_EVENT_CLASS(cvp_venus_hfi_var,

	TP_PROTO(u32 cp_start, u32 cp_size,
		u32 cp_nonpixel_start, u32 cp_nonpixel_size),

	TP_ARGS(cp_start, cp_size, cp_nonpixel_start, cp_nonpixel_size),

	TP_STRUCT__entry(
		__field(u32, cp_start)
		__field(u32, cp_size)
		__field(u32, cp_nonpixel_start)
		__field(u32, cp_nonpixel_size)
	),

	TP_fast_assign(
		__entry->cp_start = cp_start;
		__entry->cp_size = cp_size;
		__entry->cp_nonpixel_start = cp_nonpixel_start;
		__entry->cp_nonpixel_size = cp_nonpixel_size;
	),

	TP_printk(
		"TZBSP_MEM_PROTECT_VIDEO_VAR done, cp_start : 0x%x, cp_size : 0x%x, cp_nonpixel_start : 0x%x, cp_nonpixel_size : 0x%x",
		__entry->cp_start,
		__entry->cp_size,
		__entry->cp_nonpixel_start,
		__entry->cp_nonpixel_size)
);

DEFINE_EVENT(cvp_venus_hfi_var, cvp_venus_hfi_var_done,

	TP_PROTO(u32 cp_start, u32 cp_size,
		u32 cp_nonpixel_start, u32 cp_nonpixel_size),

	TP_ARGS(cp_start, cp_size, cp_nonpixel_start, cp_nonpixel_size)
);

DECLARE_EVENT_CLASS(msm_v4l2_cvp_buffer_events,

	TP_PROTO(char *event_type, u32 device_addr, int64_t timestamp,
		u32 alloc_len, u32 filled_len, u32 offset),

	TP_ARGS(event_type, device_addr, timestamp, alloc_len,
		filled_len, offset),

	TP_STRUCT__entry(
		__field(char *, event_type)
		__field(u32, device_addr)
		__field(int64_t, timestamp)
		__field(u32, alloc_len)
		__field(u32, filled_len)
		__field(u32, offset)
	),

	TP_fast_assign(
		__entry->event_type = event_type;
		__entry->device_addr = device_addr;
		__entry->timestamp = timestamp;
		__entry->alloc_len = alloc_len;
		__entry->filled_len = filled_len;
		__entry->offset = offset;
	),

	TP_printk(
		"%s, device_addr : 0x%x, timestamp : %lld, alloc_len : 0x%x, filled_len : 0x%x, offset : 0x%x",
		__entry->event_type,
		__entry->device_addr,
		__entry->timestamp,
		__entry->alloc_len,
		__entry->filled_len,
		__entry->offset)
);

DEFINE_EVENT(msm_v4l2_cvp_buffer_events, msm_v4l2_cvp_buffer_event_start,

	TP_PROTO(char *event_type, u32 device_addr, int64_t timestamp,
		u32 alloc_len, u32 filled_len, u32 offset),

	TP_ARGS(event_type, device_addr, timestamp, alloc_len,
		filled_len, offset)
);

DEFINE_EVENT(msm_v4l2_cvp_buffer_events, msm_v4l2_cvp_buffer_event_end,

	TP_PROTO(char *event_type, u32 device_addr, int64_t timestamp,
		u32 alloc_len, u32 filled_len, u32 offset),

	TP_ARGS(event_type, device_addr, timestamp, alloc_len,
		filled_len, offset)
);

DECLARE_EVENT_CLASS(msm_cvp_smem_buffer_dma_ops,

	TP_PROTO(char *buffer_op, u32 buffer_type, u32 heap_mask,
		size_t size, u32 align, u32 flags, int map_kernel),

	TP_ARGS(buffer_op, buffer_type, heap_mask, size, align,
		flags, map_kernel),

	TP_STRUCT__entry(
		__field(char *, buffer_op)
		__field(u32, buffer_type)
		__field(u32, heap_mask)
		__field(u32, size)
		__field(u32, align)
		__field(u32, flags)
		__field(int, map_kernel)
	),

	TP_fast_assign(
		__entry->buffer_op = buffer_op;
		__entry->buffer_type = buffer_type;
		__entry->heap_mask = heap_mask;
		__entry->size = size;
		__entry->align = align;
		__entry->flags = flags;
		__entry->map_kernel = map_kernel;
	),

	TP_printk(
		"%s, buffer_type : 0x%x, heap_mask : 0x%x, size : 0x%x, align : 0x%x, flags : 0x%x, map_kernel : %d",
		__entry->buffer_op,
		__entry->buffer_type,
		__entry->heap_mask,
		__entry->size,
		__entry->align,
		__entry->flags,
		__entry->map_kernel)
);

DEFINE_EVENT(msm_cvp_smem_buffer_dma_ops, msm_cvp_smem_buffer_dma_op_start,

	TP_PROTO(char *buffer_op, u32 buffer_type, u32 heap_mask,
		size_t size, u32 align, u32 flags, int map_kernel),

	TP_ARGS(buffer_op, buffer_type, heap_mask, size, align,
		flags, map_kernel)
);

DEFINE_EVENT(msm_cvp_smem_buffer_dma_ops, msm_cvp_smem_buffer_dma_op_end,

	TP_PROTO(char *buffer_op, u32 buffer_type, u32 heap_mask,
		size_t size, u32 align, u32 flags, int map_kernel),

	TP_ARGS(buffer_op, buffer_type, heap_mask, size, align,
		flags, map_kernel)
);

DECLARE_EVENT_CLASS(msm_cvp_smem_buffer_iommu_ops,

	TP_PROTO(char *buffer_op, int domain_num, int partition_num,
		unsigned long align, unsigned long iova,
		unsigned long buffer_size),

	TP_ARGS(buffer_op, domain_num, partition_num, align, iova, buffer_size),

	TP_STRUCT__entry(
		__field(char *, buffer_op)
		__field(int, domain_num)
		__field(int, partition_num)
		__field(unsigned long, align)
		__field(unsigned long, iova)
		__field(unsigned long, buffer_size)
	),

	TP_fast_assign(
		__entry->buffer_op = buffer_op;
		__entry->domain_num = domain_num;
		__entry->partition_num = partition_num;
		__entry->align = align;
		__entry->iova = iova;
		__entry->buffer_size = buffer_size;
	),

	TP_printk(
		"%s, domain : %d, partition : %d, align : %lx, iova : 0x%lx, buffer_size=%lx",
		__entry->buffer_op,
		__entry->domain_num,
		__entry->partition_num,
		__entry->align,
		__entry->iova,
		__entry->buffer_size)
);

DEFINE_EVENT(msm_cvp_smem_buffer_iommu_ops, msm_cvp_smem_buffer_iommu_op_start,

	TP_PROTO(char *buffer_op, int domain_num, int partition_num,
		unsigned long align, unsigned long iova,
		unsigned long buffer_size),

	TP_ARGS(buffer_op, domain_num, partition_num, align, iova, buffer_size)
);

DEFINE_EVENT(msm_cvp_smem_buffer_iommu_ops, msm_cvp_smem_buffer_iommu_op_end,

	TP_PROTO(char *buffer_op, int domain_num, int partition_num,
		unsigned long align, unsigned long iova,
		unsigned long buffer_size),

	TP_ARGS(buffer_op, domain_num, partition_num, align, iova, buffer_size)
);

DECLARE_EVENT_CLASS(msm_cvp_perf,

	TP_PROTO(const char *name, unsigned long value),

	TP_ARGS(name, value),

	TP_STRUCT__entry(
		__field(const char *, name)
		__field(unsigned long, value)
	),

	TP_fast_assign(
		__entry->name = name;
		__entry->value = value;
	),

	TP_printk("%s %lu", __entry->name, __entry->value)
);

DEFINE_EVENT(msm_cvp_perf, msm_cvp_perf_clock_scale,

	TP_PROTO(const char *clock_name, unsigned long frequency),

	TP_ARGS(clock_name, frequency)
);

DEFINE_EVENT(msm_cvp_perf, msm_cvp_perf_bus_vote,

	TP_PROTO(const char *governor_mode, unsigned long ab),

	TP_ARGS(governor_mode, ab)
);

#endif

#include <trace/define_trace.h>
+25 −0
Original line number Diff line number Diff line
@@ -822,6 +822,31 @@ enum v4l2_mpeg_vidc_extradata {
	EXTRADATA_ENC_INPUT_ROI = 4,
	EXTRADATA_ENC_INPUT_HDR10PLUS = 8,
};
enum v4l2_mpeg_cvp_extradata {
	V4L2_MPEG_CVP_EXTRADATA_NONE = 0,
	V4L2_MPEG_CVP_EXTRADATA_INTERLACE_VIDEO = 2,
	V4L2_MPEG_CVP_EXTRADATA_TIMESTAMP = 5,
	V4L2_MPEG_CVP_EXTRADATA_S3D_FRAME_PACKING = 6,
	V4L2_MPEG_CVP_EXTRADATA_FRAME_RATE = 7,
	V4L2_MPEG_CVP_EXTRADATA_PANSCAN_WINDOW = 8,
	V4L2_MPEG_CVP_EXTRADATA_RECOVERY_POINT_SEI = 9,
	V4L2_MPEG_CVP_EXTRADATA_NUM_CONCEALED_MB = 11,
	V4L2_MPEG_CVP_EXTRADATA_ASPECT_RATIO = 15,
	V4L2_MPEG_CVP_EXTRADATA_MPEG2_SEQDISP = 16,
	V4L2_MPEG_CVP_EXTRADATA_STREAM_USERDATA = 17,
	V4L2_MPEG_CVP_EXTRADATA_FRAME_QP = 18,
	V4L2_MPEG_CVP_EXTRADATA_LTR = 20,
#define V4L2_MPEG_CVP_EXTRADATA_HDR10PLUS_METADATA \
	V4L2_MPEG_CVP_EXTRADATA_HDR10PLUS_METADATA
	V4L2_MPEG_CVP_EXTRADATA_HDR10PLUS_METADATA = 23,
	V4L2_MPEG_CVP_EXTRADATA_ROI_QP = 24,
	V4L2_MPEG_CVP_EXTRADATA_OUTPUT_CROP = 25,
	V4L2_MPEG_CVP_EXTRADATA_DISPLAY_COLOUR_SEI = 26,
	V4L2_MPEG_CVP_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI = 27,
	V4L2_MPEG_CVP_EXTRADATA_VUI_DISPLAY = 29,
	V4L2_MPEG_CVP_EXTRADATA_VPX_COLORSPACE = 30,
	V4L2_MPEG_CVP_EXTRADATA_UBWC_CR_STATS_INFO = 31,
};

#define V4L2_CID_MPEG_VIDC_VIDEO_VUI_TIMING_INFO \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 19)
+26 −0
Original line number Diff line number Diff line
@@ -2304,6 +2304,29 @@ struct v4l2_streamparm {
#define V4L2_EVENT_MSM_VIDC_UNREGISTER_BUFFER_DONE \
		(V4L2_EVENT_MSM_VIDC_START + 12)

/*
 *  CVP Events
 */
#define V4L2_EVENT_MSM_CVP_START	(V4L2_EVENT_PRIVATE_START + 0x00001000)
#define V4L2_EVENT_MSM_CVP_FLUSH_DONE	(V4L2_EVENT_MSM_CVP_START + 1)
#define V4L2_EVENT_MSM_CVP_PORT_SETTINGS_CHANGED_SUFFICIENT	\
		(V4L2_EVENT_MSM_CVP_START + 2)
#define V4L2_EVENT_MSM_CVP_PORT_SETTINGS_CHANGED_INSUFFICIENT	\
		(V4L2_EVENT_MSM_CVP_START + 3)

#define V4L2_EVENT_MSM_CVP_SYS_ERROR	(V4L2_EVENT_MSM_CVP_START + 5)
#define V4L2_EVENT_MSM_CVP_RELEASE_BUFFER_REFERENCE \
		(V4L2_EVENT_MSM_CVP_START + 6)
#define V4L2_EVENT_MSM_CVP_RELEASE_UNQUEUED_BUFFER \
		(V4L2_EVENT_MSM_CVP_START + 7)
#define V4L2_EVENT_MSM_CVP_HW_OVERLOAD (V4L2_EVENT_MSM_CVP_START + 8)
#define V4L2_EVENT_MSM_CVP_MAX_CLIENTS (V4L2_EVENT_MSM_CVP_START + 9)
#define V4L2_EVENT_MSM_CVP_HW_UNSUPPORTED (V4L2_EVENT_MSM_CVP_START + 10)
#define V4L2_EVENT_MSM_CVP_REGISTER_BUFFER_DONE \
		(V4L2_EVENT_MSM_CVP_START + 11)
#define V4L2_EVENT_MSM_CVP_UNREGISTER_BUFFER_DONE \
		(V4L2_EVENT_MSM_CVP_START + 12)

/* Payload for V4L2_EVENT_VSYNC */
struct v4l2_event_vsync {
	/* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
@@ -2550,4 +2573,7 @@ struct v4l2_create_buffers {
/* (BASE_VIDIOC_PRIVATE + 0) is private ioctl code for video module */
#define BASE_VIDIOC_PRIVATE_VIDEO	(BASE_VIDIOC_PRIVATE + 0)

/* (BASE_VIDIOC_PRIVATE + 1) is private ioctl code for cvp module */
#define BASE_VIDIOC_PRIVATE_CVP	(BASE_VIDIOC_PRIVATE + 1)

#endif /* _UAPI__LINUX_VIDEODEV2_H */
+258 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
/*
 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
 */
#ifndef __MSM_CVP_PRIVATE_H__
#define __MSM_CVP_PRIVATE_H__

#include <linux/videodev2.h>

#define MAX_DFS_HFI_PARAMS 20

/* VIDIOC private cvp command */
#define VIDIOC_CVP_CMD \
		_IOWR('V', BASE_VIDIOC_PRIVATE_CVP, struct msm_cvp_arg)

/* Commands type */
#define MSM_VIDC_CMD_START		0x10000000
#define MSM_CVP_CMD_START		(MSM_VIDC_CMD_START + 0x1000)

/*
 * userspace clients pass one of the below arguments type
 * in struct msm_cvp_arg (@type field).
 */

/*
 * MSM_CVP_GET_SESSION_INFO - this argument type is used to
 *          get the session information from driver. it passes
 *          struct msm_cvp_session_info {}
 */
#define MSM_CVP_GET_SESSION_INFO	(MSM_CVP_CMD_START + 1)

/*
 * MSM_CVP_REQUEST_POWER - this argument type is used to
 *          set the power required to driver. it passes
 *          struct msm_cvp_request_power {}
 */
#define MSM_CVP_REQUEST_POWER		(MSM_CVP_CMD_START + 2)

/*
 * MSM_CVP_REGISTER_BUFFER - this argument type is used to
 *          register the buffer to driver. it passes
 *          struct msm_cvp_buffer {}
 */
#define MSM_CVP_REGISTER_BUFFER		(MSM_CVP_CMD_START + 3)

/*
 * MSM_CVP_REGISTER_BUFFER - this argument type is used to
 *          unregister the buffer to driver. it passes
 *          struct msm_cvp_buffer {}
 */
#define MSM_CVP_UNREGISTER_BUFFER	(MSM_CVP_CMD_START + 4)

#define MSM_CVP_HFI_SEND_CMD        (MSM_CVP_CMD_START + 5)

#define MSM_CVP_HFI_DFS_CONFIG_CMD  (MSM_CVP_CMD_START + 6)

#define MSM_CVP_HFI_DFS_FRAME_CMD  (MSM_CVP_CMD_START + 7)

#define MSM_CVP_HFI_DFS_FRAME_CMD_RESPONSE  (MSM_CVP_CMD_START + 8)

/* flags */
#define MSM_CVP_FLAG_UNSECURE			0x00000000
#define MSM_CVP_FLAG_SECURE			0x00000001

/* buffer type */
#define MSM_CVP_BUFTYPE_INPUT			0x00000001
#define MSM_CVP_BUFTYPE_OUTPUT			0x00000002
#define MSM_CVP_BUFTYPE_INTERNAL_1		0x00000003
#define MSM_CVP_BUFTYPE_INTERNAL_2		0x00000004


/**
 * struct msm_cvp_session_info - session information
 * @session_id:    current session id
 */
struct msm_cvp_session_info {
	unsigned int session_id;
	unsigned int reserved[10];
};

/**
 * struct msm_cvp_request_power - power / clock data information
 * @clock_cycles_a:  clock cycles per second required for hardware_a
 * @clock_cycles_b:  clock cycles per second required for hardware_b
 * @ddr_bw:        bandwidth required for ddr in bps
 * @sys_cache_bw:  bandwidth required for system cache in bps
 */
struct msm_cvp_request_power {
	unsigned int clock_cycles_a;
	unsigned int clock_cycles_b;
	unsigned int ddr_bw;
	unsigned int sys_cache_bw;
	unsigned int reserved[8];
};

/**
 * struct msm_cvp_buffer - buffer information to be registered
 * @index:         index of buffer
 * @type:          buffer type
 * @fd:            file descriptor of buffer
 * @size:          allocated size of buffer
 * @offset:        offset in fd from where usable data starts
 * @pixelformat:   fourcc format
 * @flags:         buffer flags
 */
struct msm_cvp_buffer {
	unsigned int index;
	unsigned int type;
	unsigned int fd;
	unsigned int size;
	unsigned int offset;
	unsigned int pixelformat;
	unsigned int flags;
	unsigned int reserved[5];
};

/**
 * struct msm_cvp_send_cmd - sending generic HFI command
 * @cmd_address_fd:   file descriptor of cmd_address
 * @cmd_size:         allocated size of buffer
 */
struct msm_cvp_send_cmd {
	unsigned int cmd_address_fd;
	unsigned int cmd_size;
	unsigned int reserved[10];
};

/**
 * enum HFI_COLOR_PLANE_TYPE - define the type of plane
 */
enum HFI_COLOR_PLANE_TYPE {
	HFI_COLOR_PLANE_METADATA,
	HFI_COLOR_PLANE_PICDATA,
	HFI_MAX_PLANES
};

/**
 * struct msm_cvp_color_plane_info - color plane info
 * @stride:      stride of plane
 * @buf_size:    size of plane
 */
struct msm_cvp_color_plane_info {
	int stride[HFI_MAX_PLANES];
	unsigned int buf_size[HFI_MAX_PLANES];
};

/**
 * struct msm_cvp_client_data - store generic client
 *                              data
 * @transactionid:  transaction id
 * @client_data1:   client data to be used during callback
 * @client_data2:   client data to be used during callback
 */
struct msm_cvp_client_data {
	unsigned int transactionid;
	unsigned int client_data1;
	unsigned int client_data2;
};

/**
 * struct msm_cvp_dfsconfig - dfs config packet
 * @cmd_size:               command size in bytes
 * @cmd_address:            command address
 * @size:                   packet size in bytes
 * @packet_type:            HFI_CMD_SESSION_CVP_DFS
 * @session_id:             id value associated with a session
 * @srcbuffer_format:       buffer format of source imagesize
 * @left_plane_info:        left view buffer plane info
 * @right_plane_info:       right view buffer plane info
 * @width:                  image width
 * @height:                 image height
 * @occlusionmask_enable:   0: disable, 1: enable
 * @occlusioncost:          occlusion cost threshold
 * @occlusionbound:         occlusion bound
 * @occlusionshift:         occlusion shift
 * @maxdisparity:           max disparitymap in integer precision
 * @disparityoffset:        disparity offset
 * @medianfilter_enable:    enable median filter on disparity map
 * @occlusionfilling_enable:0: disable, 1: enable
 * @occlusionmaskdump:      0: disable, 1: enable
 * @clientdata:             client data for mapping command
 *                          and message pairs
 */
struct msm_cvp_dfsconfig {
	unsigned int cmd_size;
	unsigned int cmd_address;
	unsigned int size;
	unsigned int packet_type;
	unsigned int session_id;
	unsigned int srcbuffer_format;
	struct msm_cvp_color_plane_info left_plane_info;
	struct msm_cvp_color_plane_info right_plane_info;
	unsigned int width;
	unsigned int height;
	unsigned int occlusionmask_enable;
	unsigned int occlusioncost;
	unsigned int occlusionbound;
	unsigned int occlusionshift;
	unsigned int maxdisparity;
	unsigned int disparityoffset;
	unsigned int medianfilter_enable;
	unsigned int occlusionfilling_enable;
	unsigned int occlusionmaskdump;
	struct msm_cvp_client_data clientdata;
	unsigned int reserved[MAX_DFS_HFI_PARAMS];
};

/**
 * struct msm_cvp_dfsframe - dfs frame packet
 * @cmd_size:                command size in bytes
 * @cmd_address:             command address
 * @size:                    packet size in bytes
 * @packet_type:             HFI_CMD_SESSION_CVP_DFS
 * @session_id:              id value associated with a session
 * @left_buffer_index:       left buffer index
 * @right_buffer_index:      right buffer index
 * @disparitymap_buffer_idx: disparity map buffer index
 * @occlusionmask_buffer_idx:occlusion mask buffer index
 */
struct msm_cvp_dfsframe {
	unsigned int cmd_size;
	unsigned int cmd_address;
	unsigned int size;
	unsigned int packet_type;
	unsigned int session_id;
	unsigned int left_buffer_index;
	unsigned int right_buffer_index;
	unsigned int disparitymap_buffer_idx;
	unsigned int occlusionmask_buffer_idx;
	struct msm_cvp_client_data clientdata;
};

/**
 * struct msm_cvp_arg - argument passed with VIDIOC_CVP_CMD
 * @type:          command type
 * @session:       session information
 * @req_power:     power information
 * @regbuf:        buffer to be registered
 * @unregbuf:      buffer to be unregistered
 * @send_cmd:      sending generic HFI command
 * @dfsconfig:     sending DFS config command
 * @dfsframe:      sending DFS frame command
 */
struct msm_cvp_arg {
	unsigned int type;
	union data_t {
		struct msm_cvp_session_info session;
		struct msm_cvp_request_power req_power;
		struct msm_cvp_buffer regbuf;
		struct msm_cvp_buffer unregbuf;
		struct msm_cvp_send_cmd send_cmd;
		struct msm_cvp_dfsconfig dfsconfig;
		struct msm_cvp_dfsframe dfsframe;
	} data;
	unsigned int reserved[12];
};

#endif
+99 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
/*
 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
 */
#ifndef __MSM_CVP_UTILS_H__
#define __MSM_CVP_UTILS_H__

#include <linux/types.h>

#define MSM_CVP_HAL_INTERLACE_COLOR_FORMAT_NV12	0x2
#define MSM_CVP_HAL_INTERLACE_COLOR_FORMAT_NV12_UBWC	0x8002
#define MSM_CVP_EXTRADATA_FRAME_QP_ADV 0x1

struct msm_cvp_mastering_display_colour_sei_payload {
	unsigned int nDisplayPrimariesX[3];
	unsigned int nDisplayPrimariesY[3];
	unsigned int nWhitePointX;
	unsigned int nWhitePointY;
	unsigned int nMaxDisplayMasteringLuminance;
	unsigned int nMinDisplayMasteringLuminance;
};

/* msm_cvp_extradata_type */
#define MSM_CVP_EXTRADATA_NONE 0x00000000
#define MSM_CVP_EXTRADATA_MB_QUANTIZATION 0x00000001
#define MSM_CVP_EXTRADATA_INTERLACE_VIDEO 0x00000002
#define MSM_CVP_EXTRADATA_TIMESTAMP 0x00000005
#define MSM_CVP_EXTRADATA_S3D_FRAME_PACKING 0x00000006
#define MSM_CVP_EXTRADATA_FRAME_RATE 0x00000007
#define MSM_CVP_EXTRADATA_PANSCAN_WINDOW 0x00000008
#define MSM_CVP_EXTRADATA_RECOVERY_POINT_SEI 0x00000009
#define MSM_CVP_EXTRADATA_MPEG2_SEQDISP 0x0000000D
#define MSM_CVP_EXTRADATA_STREAM_USERDATA 0x0000000E
#define MSM_CVP_EXTRADATA_FRAME_QP 0x0000000F
#define MSM_CVP_EXTRADATA_FRAME_BITS_INFO 0x00000010
#define MSM_CVP_EXTRADATA_ROI_QP 0x00000013
#define MSM_CVP_EXTRADATA_VPX_COLORSPACE_INFO 0x00000014
#define MSM_CVP_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI 0x00000015
#define MSM_CVP_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI 0x00000016
#define MSM_CVP_EXTRADATA_PQ_INFO 0x00000017
#define MSM_CVP_EXTRADATA_COLOUR_REMAPPING_INFO_SEI 0x00000018
#define MSM_CVP_EXTRADATA_UBWC_CR_STAT_INFO 0x00000019
#define MSM_CVP_EXTRADATA_HDR10PLUS_METADATA 0x0000001A
#define MSM_CVP_EXTRADATA_INPUT_CROP 0x0700000E
#define MSM_CVP_EXTRADATA_OUTPUT_CROP 0x0700000F
#define MSM_CVP_EXTRADATA_MULTISLICE_INFO 0x7F100000
#define MSM_CVP_EXTRADATA_NUM_CONCEALED_MB 0x7F100001
#define MSM_CVP_EXTRADATA_INDEX 0x7F100002
#define MSM_CVP_EXTRADATA_ASPECT_RATIO 0x7F100003
#define MSM_CVP_EXTRADATA_METADATA_LTR 0x7F100004
#define MSM_CVP_EXTRADATA_METADATA_MBI 0x7F100005
#define MSM_CVP_EXTRADATA_VUI_DISPLAY_INFO 0x7F100006

/* msm_cvp_framepack_type */
#define MSM_CVP_FRAMEPACK_CHECKERBOARD 0x00
#define MSM_CVP_FRAMEPACK_COLUMN_INTERLEAVE 0x01
#define MSM_CVP_FRAMEPACK_ROW_INTERLEAVE 0x02
#define MSM_CVP_FRAMEPACK_SIDE_BY_SIDE 0x03
#define MSM_CVP_FRAMEPACK_TOP_BOTTOM 0x04
#define MSM_CVP_FRAMEPACK_TEMPORAL_INTERLEAVE 0x05

/* msm_cvp_userdata_type */
#define MSM_CVP_USERDATA_TYPE_FRAME 0x1
#define MSM_CVP_USERDATA_TYPE_TOP_FIELD 0x2
#define MSM_CVP_USERDATA_TYPE_BOTTOM_FIELD 0x3

/* See colour_primaries of ISO/IEC 14496 for significance */
/* msm_cvp_h264_color_primaries_values */
#define MSM_CVP_RESERVED_1 0
#define MSM_CVP_BT709_5 1
#define MSM_CVP_UNSPECIFIED 2
#define MSM_CVP_RESERVED_2 3
#define MSM_CVP_BT470_6_M 4
#define MSM_CVP_BT601_6_625 5
#define MSM_CVP_BT470_6_BG MSM_CVP_BT601_6_625
#define MSM_CVP_BT601_6_525 6

/* msm_cvp_pixel_depth */
#define MSM_CVP_BIT_DEPTH_8 0
#define MSM_CVP_BIT_DEPTH_10 1
#define MSM_CVP_BIT_DEPTH_UNSUPPORTED 0XFFFFFFFF

/* msm_cvp_video_format */
#define MSM_CVP_COMPONENT 0
#define MSM_CVP_PAL 1
#define MSM_CVP_NTSC 2

/* msm_cvp_color_desc_flag */
#define MSM_CVP_COLOR_DESC_NOT_PRESENT 0
#define MSM_CVP_COLOR_DESC_PRESENT 1

/*  msm_cvp_pic_struct */
#define MSM_CVP_PIC_STRUCT_MAYBE_INTERLACED 0x0
#define MSM_CVP_PIC_STRUCT_PROGRESSIVE 0x1

/*default when layer ID isn't specified*/
#define MSM_CVP_ALL_LAYER_ID 0xFF

#endif