1 /* 2 * drivers/amlogic/media/stream_input/parser/streambuf.h 3 * 4 * Copyright (C) 2016 Amlogic, Inc. All rights reserved. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 14 * more details. 15 * 16 */ 17 18 #ifndef STREAMBUF_H 19 #define STREAMBUF_H 20 #include <linux/amlogic/media/utils/amports_config.h> 21 22 #define BUF_FLAG_ALLOC 0x01 23 #define BUF_FLAG_IN_USE 0x02 24 #define BUF_FLAG_PARSER 0x04 25 #define BUF_FLAG_FIRST_TSTAMP 0x08 26 #define BUF_FLAG_IOMEM 0x10 27 28 #define BUF_TYPE_VIDEO 0 29 #define BUF_TYPE_AUDIO 1 30 #define BUF_TYPE_SUBTITLE 2 31 #define BUF_TYPE_USERDATA 3 32 #define BUF_TYPE_HEVC 4 33 #define BUF_MAX_NUM 5 34 35 #define INVALID_PTS 0xffffffff 36 37 #define FETCHBUF_SIZE (64*1024) 38 #define USER_DATA_SIZE (8*1024) 39 40 struct vdec_s; 41 struct stream_buf_s; 42 43 struct parser_args { 44 u32 vid; 45 u32 aid; 46 u32 sid; 47 u32 pcrid; 48 }; 49 50 struct stream_buf_ops { 51 int (*init) (struct stream_buf_s *, struct vdec_s *); 52 void (*release) (struct stream_buf_s *); 53 int (*write) (struct stream_buf_s *, const u8 *, u32); 54 u32 (*get_wp) (struct stream_buf_s *); 55 void (*set_wp) (struct stream_buf_s *, u32); 56 u32 (*get_rp) (struct stream_buf_s *); 57 void (*set_rp) (struct stream_buf_s *, u32); 58 }; 59 60 struct stream_buf_s { 61 int id; 62 u8 name[16]; 63 s32 flag; 64 u32 type; 65 unsigned long buf_start; 66 struct page *buf_pages; 67 int buf_page_num; 68 u32 buf_size; 69 u32 default_buf_size; 70 u32 canusebuf_size; 71 u32 first_tstamp; 72 const ulong reg_base; 73 wait_queue_head_t wq; 74 struct timer_list timer; 75 u32 wcnt; 76 u32 buf_wp; 77 u32 buf_rp; 78 u32 max_buffer_delay_ms; 79 u64 last_write_jiffies64; 80 void *write_thread; 81 int for_4k; 82 bool is_secure; 83 bool is_multi_inst; 84 bool no_parser; 85 bool is_phybuf; 86 bool is_hevc; 87 u32 drm_flag; 88 ulong ext_buf_addr; 89 atomic_t payload; 90 struct parser_args pars; 91 struct stream_buf_ops *ops; 92 } /*stream_buf_t */; 93 94 struct stream_port_s { 95 /* driver info */ 96 const char *name; 97 struct device *class_dev; 98 const struct file_operations *fops; 99 100 /* ports control */ 101 s32 type; 102 s32 flag; 103 s32 pcr_inited; 104 105 /* decoder info */ 106 s32 vformat; 107 s32 aformat; 108 s32 achanl; 109 s32 asamprate; 110 s32 adatawidth; 111 112 /* parser info */ 113 u32 vid; 114 u32 aid; 115 u32 sid; 116 u32 pcrid; 117 bool is_4k; 118 } /*stream_port_t */; 119 enum drm_level_e { 120 DRM_LEVEL1 = 1, 121 DRM_LEVEL2 = 2, 122 DRM_LEVEL3 = 3, 123 DRM_NONE = 4, 124 }; 125 126 struct drm_info { 127 enum drm_level_e drm_level; 128 u32 drm_flag; 129 u32 drm_hasesdata; 130 u32 drm_priv; 131 u32 drm_pktsize; 132 u32 drm_pktpts; 133 u32 drm_phy; 134 u32 drm_vir; 135 u32 drm_remap; 136 u32 data_offset; 137 u32 handle; 138 u32 extpad[7]; 139 } /*drminfo_t */; 140 141 #define TYPE_DRMINFO_V2 0x100 142 #define TYPE_DRMINFO 0x80 143 #define TYPE_PATTERN 0x40 144 145 struct vdec_s; 146 147 extern void *fetchbuf; 148 149 extern u32 stbuf_level(struct stream_buf_s *buf); 150 extern u32 stbuf_rp(struct stream_buf_s *buf); 151 extern u32 stbuf_space(struct stream_buf_s *buf); 152 extern u32 stbuf_size(struct stream_buf_s *buf); 153 extern u32 stbuf_canusesize(struct stream_buf_s *buf); 154 extern s32 stbuf_init(struct stream_buf_s *buf, struct vdec_s *vdec); 155 extern s32 stbuf_wait_space(struct stream_buf_s *stream_buf, size_t count); 156 extern void stbuf_release(struct stream_buf_s *buf); 157 extern int stbuf_change_size(struct stream_buf_s *buf, int size, 158 bool is_secure); 159 extern int stbuf_fetch_init(void); 160 extern void stbuf_fetch_release(void); 161 extern u32 stbuf_sub_rp_get(void); 162 extern void stbuf_sub_rp_set(unsigned int sub_rp); 163 extern u32 stbuf_sub_wp_get(void); 164 extern u32 stbuf_sub_start_get(void); 165 extern u32 stbuf_userdata_start_get(void); 166 extern struct stream_buf_s *get_stream_buffer(int id); 167 168 extern void stbuf_vdec2_init(struct stream_buf_s *buf); 169 170 u32 parser_get_wp(struct stream_buf_s *vb); 171 void parser_set_wp(struct stream_buf_s *vb, u32 val); 172 u32 parser_get_rp(struct stream_buf_s *vb); 173 void parser_set_rp(struct stream_buf_s *vb, u32 val); 174 175 #endif /* STREAMBUF_H */ 176