| /* |
| * drivers/amlogic/media/stream_input/parser/streambuf.h |
| * |
| * Copyright (C) 2016 Amlogic, Inc. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| * more details. |
| * |
| */ |
| |
| #ifndef STREAMBUF_H |
| #define STREAMBUF_H |
| #include <linux/amlogic/media/utils/amports_config.h> |
| |
| #define BUF_FLAG_ALLOC 0x01 |
| #define BUF_FLAG_IN_USE 0x02 |
| #define BUF_FLAG_PARSER 0x04 |
| #define BUF_FLAG_FIRST_TSTAMP 0x08 |
| #define BUF_FLAG_IOMEM 0x10 |
| |
| #define BUF_TYPE_VIDEO 0 |
| #define BUF_TYPE_AUDIO 1 |
| #define BUF_TYPE_SUBTITLE 2 |
| #define BUF_TYPE_USERDATA 3 |
| #define BUF_TYPE_HEVC 4 |
| #define BUF_MAX_NUM 5 |
| |
| #define INVALID_PTS 0xffffffff |
| |
| #define FETCHBUF_SIZE (64*1024) |
| #define USER_DATA_SIZE (8*1024) |
| |
| /* stream_buffer_metainfo stbuf_flag */ |
| #define STBUF_META_FLAG_SECURE (1 << 0) |
| #define STBUF_META_FLAG_PTS_SERV (1 << 1) /* use pts server flag */ |
| #define STBUF_META_FLAG_XXX1 (1 << 2) |
| |
| struct vdec_s; |
| struct stream_buf_s; |
| |
| struct parser_args { |
| u32 vid; |
| u32 aid; |
| u32 sid; |
| u32 pcrid; |
| }; |
| |
| struct stream_buf_ops { |
| int (*init) (struct stream_buf_s *, struct vdec_s *); |
| void (*release) (struct stream_buf_s *); |
| int (*write) (struct stream_buf_s *, const u8 *, u32); |
| u32 (*get_wp) (struct stream_buf_s *); |
| void (*set_wp) (struct stream_buf_s *, u32); |
| u32 (*get_rp) (struct stream_buf_s *); |
| void (*set_rp) (struct stream_buf_s *, u32); |
| }; |
| |
| struct stream_buf_s { |
| int id; |
| u8 name[16]; |
| s32 flag; |
| u32 type; |
| unsigned long buf_start; |
| struct page *buf_pages; |
| int buf_page_num; |
| u32 buf_size; |
| u32 default_buf_size; |
| u32 canusebuf_size; |
| u32 first_tstamp; |
| const ulong reg_base; |
| wait_queue_head_t wq; |
| struct timer_list timer; |
| u32 wcnt; |
| u32 buf_wp; |
| u32 buf_rp; |
| u32 max_buffer_delay_ms; |
| u64 last_write_jiffies64; |
| void *write_thread; |
| int for_4k; |
| bool is_secure; |
| bool is_multi_inst; |
| bool no_parser; |
| bool is_phybuf; |
| bool is_hevc; |
| bool use_ptsserv; |
| u32 drm_flag; |
| ulong ext_buf_addr; |
| atomic_t payload; |
| u32 stream_offset; |
| struct parser_args pars; |
| struct stream_buf_ops *ops; |
| u32 last_offset[2]; |
| u32 write_count; |
| } /*stream_buf_t */; |
| |
| struct stream_port_s { |
| /* driver info */ |
| const char *name; |
| struct device *class_dev; |
| const struct file_operations *fops; |
| |
| /* ports control */ |
| s32 type; |
| s32 flag; |
| s32 pcr_inited; |
| |
| /* decoder info */ |
| s32 vformat; |
| s32 aformat; |
| s32 achanl; |
| s32 asamprate; |
| s32 adatawidth; |
| |
| /* parser info */ |
| u32 vid; |
| u32 aid; |
| u32 sid; |
| u32 pcrid; |
| bool is_4k; |
| } /*stream_port_t */; |
| enum drm_level_e { |
| DRM_LEVEL1 = 1, |
| DRM_LEVEL2 = 2, |
| DRM_LEVEL3 = 3, |
| DRM_NONE = 4, |
| }; |
| |
| struct drm_info { |
| enum drm_level_e drm_level; |
| u32 drm_flag; |
| u32 drm_hasesdata; |
| u32 drm_priv; |
| u32 drm_pktsize; |
| u32 drm_pktpts; |
| u32 drm_phy; |
| u32 drm_vir; |
| u32 drm_remap; |
| u32 data_offset; |
| u32 handle; |
| u32 extpad[7]; |
| } /*drminfo_t */; |
| |
| struct stream_buffer_metainfo { |
| union { |
| u32 stbuf_start; |
| u32 stbuf_pktaddr; //stbuf_pktaddr + stbuf_pktsize = wp |
| }; |
| union { |
| u32 stbuf_size; |
| u32 stbuf_pktsize; |
| }; |
| u32 stbuf_flag; |
| u32 stbuf_private; |
| u32 reserved[16]; |
| }; |
| |
| struct stream_buffer_status { |
| u32 stbuf_wp; |
| u32 stbuf_rp; |
| u32 stbuf_start; |
| u32 stbuf_size; |
| u32 reserved[16]; |
| }; |
| |
| |
| #define TYPE_DRMINFO_V2 0x100 |
| #define TYPE_DRMINFO 0x80 |
| #define TYPE_PATTERN 0x40 |
| |
| struct vdec_s; |
| |
| extern void *fetchbuf; |
| |
| extern u32 stbuf_level(struct stream_buf_s *buf); |
| extern u32 stbuf_rp(struct stream_buf_s *buf); |
| extern u32 stbuf_space(struct stream_buf_s *buf); |
| extern u32 stbuf_size(struct stream_buf_s *buf); |
| extern u32 stbuf_canusesize(struct stream_buf_s *buf); |
| extern s32 stbuf_init(struct stream_buf_s *buf, struct vdec_s *vdec); |
| extern s32 stbuf_wait_space(struct stream_buf_s *stream_buf, size_t count); |
| extern void stbuf_release(struct stream_buf_s *buf); |
| extern int stbuf_change_size(struct stream_buf_s *buf, int size, |
| bool is_secure); |
| extern int stbuf_fetch_init(void); |
| extern void stbuf_fetch_release(void); |
| extern u32 stbuf_sub_rp_get(void); |
| extern void stbuf_sub_rp_set(unsigned int sub_rp); |
| extern u32 stbuf_sub_wp_get(void); |
| extern u32 stbuf_sub_start_get(void); |
| extern u32 stbuf_userdata_start_get(void); |
| extern struct stream_buf_s *get_stream_buffer(int id); |
| |
| extern void stbuf_vdec2_init(struct stream_buf_s *buf); |
| |
| u32 parser_get_wp(struct stream_buf_s *vb); |
| void parser_set_wp(struct stream_buf_s *vb, u32 val); |
| u32 parser_get_rp(struct stream_buf_s *vb); |
| void parser_set_rp(struct stream_buf_s *vb, u32 val); |
| |
| #endif /* STREAMBUF_H */ |