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

Commit 9e8be801 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: cvp: Add uapi headers and trace events header"

parents 26da2af7 117fc89e
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