drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c

Source file repositories/reference/linux-study-clean/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c

File Facts

System
Linux kernel
Corpus path
drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c
Extension
.c
Size
44294 bytes
Lines
1324
Domain
Driver Families
Bucket
drivers/media
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct vdec_h264_slice_lat_dec_param {
	struct mtk_h264_sps_param sps;
	struct mtk_h264_pps_param pps;
	struct mtk_h264_slice_hd_param slice_header;
	struct slice_api_h264_scaling_matrix scaling_matrix;
	struct slice_api_h264_decode_param decode_params;
	struct mtk_h264_dpb_info h264_dpb_info[V4L2_H264_NUM_DPB_ENTRIES];
};

/**
 * struct vdec_h264_slice_info - decode information (shared data between host and firmware)
 *
 * @nal_info:		nal info of current picture
 * @timeout:		Decode timeout: 1 timeout, 0 no timeout
 * @bs_buf_size:	bitstream size
 * @bs_buf_addr:	bitstream buffer dma address
 * @y_fb_dma:		Y frame buffer dma address
 * @c_fb_dma:		C frame buffer dma address
 * @vdec_fb_va:	VDEC frame buffer struct virtual address
 * @crc:		Used to check whether hardware's status is right
 */
struct vdec_h264_slice_info {
	u16 nal_info;
	u16 timeout;
	u32 bs_buf_size;
	u64 bs_buf_addr;
	u64 y_fb_dma;
	u64 c_fb_dma;
	u64 vdec_fb_va;
	u32 crc[8];
};

/**
 * struct vdec_h264_slice_vsi - shared memory for decode information exchange
 *        between SCP and Host (shared data between host and firmware).
 *
 * @wdma_err_addr:        wdma error dma address
 * @wdma_start_addr:      wdma start dma address
 * @wdma_end_addr:        wdma end dma address
 * @slice_bc_start_addr:  slice bc start dma address
 * @slice_bc_end_addr:    slice bc end dma address
 * @row_info_start_addr:  row info start dma address
 * @row_info_end_addr:    row info end dma address
 * @trans_start:          trans start dma address
 * @trans_end:            trans end dma address
 * @wdma_end_addr_offset: wdma end address offset
 *
 * @mv_buf_dma:           HW working motion vector buffer
 * @dec:                  decode information (AP-R, VPU-W)
 * @h264_slice_params:    decode parameters for hw used
 */
struct vdec_h264_slice_vsi {
	/* LAT dec addr */
	u64 wdma_err_addr;
	u64 wdma_start_addr;
	u64 wdma_end_addr;
	u64 slice_bc_start_addr;
	u64 slice_bc_end_addr;
	u64 row_info_start_addr;
	u64 row_info_end_addr;
	u64 trans_start;
	u64 trans_end;
	u64 wdma_end_addr_offset;

	u64 mv_buf_dma[H264_MAX_MV_NUM];
	struct vdec_h264_slice_info dec;
	struct vdec_h264_slice_lat_dec_param h264_slice_params;
};

/**
 * struct vdec_h264_slice_share_info - shared information used to exchange
 *                                     message between lat and core
 *
 * @sps:               sequence header information from user space
 * @dec_params:        decoder params from user space
 * @h264_slice_params: decoder params used for hardware
 * @trans_start:       trans start dma address
 * @trans_end:         trans end dma address
 * @nal_info:          nal info of current picture
 */
struct vdec_h264_slice_share_info {
	struct v4l2_ctrl_h264_sps sps;
	struct v4l2_ctrl_h264_decode_params dec_params;
	struct vdec_h264_slice_lat_dec_param h264_slice_params;
	u64 trans_start;
	u64 trans_end;
	u16 nal_info;
};

/*

Annotation

Implementation Notes