Root/drivers/staging/crystalhd/crystalhd_fw_if.h

1/***************************************************************************
2 * Copyright (c) 2005-2009, Broadcom Corporation.
3 *
4 * Name: crystalhd_fw_if . h
5 *
6 * Description:
7 * BCM70012 Firmware interface definitions.
8 *
9 * HISTORY:
10 *
11 **********************************************************************
12 * This file is part of the crystalhd device driver.
13 *
14 * This driver is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation, version 2 of the License.
17 *
18 * This driver is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this driver. If not, see <http://www.gnu.org/licenses/>.
25 **********************************************************************/
26
27#ifndef _CRYSTALHD_FW_IF_H_
28#define _CRYSTALHD_FW_IF_H_
29
30/* TBD: Pull in only required defs into this file.. */
31
32/* User Data Header */
33struct user_data {
34    struct user_data *next;
35    uint32_t type;
36    uint32_t size;
37};
38
39/*------------------------------------------------------*
40 * MPEG Extension to the PPB *
41 *------------------------------------------------------*/
42struct ppb_mpeg {
43    uint32_t to_be_defined;
44    uint32_t valid;
45
46    /* Always valid, defaults to picture size if no
47       sequence display extension in the stream. */
48    uint32_t display_horizontal_size;
49    uint32_t display_vertical_size;
50
51    /* MPEG_VALID_PANSCAN
52       Offsets are a copy values from the MPEG stream. */
53    uint32_t offset_count;
54    int32_t horizontal_offset[3];
55    int32_t vertical_offset[3];
56
57    /* MPEG_VALID_USERDATA
58       User data is in the form of a linked list. */
59    int32_t userDataSize;
60    struct user_data *userData;
61
62};
63
64
65/*------------------------------------------------------*
66 * VC1 Extension to the PPB *
67 *------------------------------------------------------*/
68struct ppb_vc1 {
69    uint32_t to_be_defined;
70    uint32_t valid;
71
72    /* Always valid, defaults to picture size if no
73       sequence display extension in the stream. */
74    uint32_t display_horizontal_size;
75    uint32_t display_vertical_size;
76
77    /* VC1 pan scan windows */
78    uint32_t num_panscan_windows;
79    int32_t ps_horiz_offset[4];
80    int32_t ps_vert_offset[4];
81    int32_t ps_width[4];
82    int32_t ps_height[4];
83
84    /* VC1_VALID_USERDATA
85       User data is in the form of a linked list. */
86    int32_t userDataSize;
87    struct user_data *userData;
88
89};
90
91/*------------------------------------------------------*
92 * H.264 Extension to the PPB *
93 *------------------------------------------------------*/
94
95/**
96 * @brief Film grain SEI message.
97 *
98 * Content of the film grain SEI message.
99 */
100
101/* maximum number of model-values as for Thomson spec(standard says 5) */
102#define MAX_FGT_MODEL_VALUE (3)
103
104/* maximum number of intervals(as many as 256 intervals?) */
105#define MAX_FGT_VALUE_INTERVAL (256)
106
107struct fgt_sei {
108    struct fgt_sei *next;
109    unsigned char model_values[3][MAX_FGT_VALUE_INTERVAL][MAX_FGT_MODEL_VALUE];
110    unsigned char upper_bound[3][MAX_FGT_VALUE_INTERVAL];
111    unsigned char lower_bound[3][MAX_FGT_VALUE_INTERVAL];
112
113    unsigned char cancel_flag; /* Cancel flag: 1 no film grain. */
114    unsigned char model_id; /* Model id. */
115
116    /* +unused SE based on Thomson spec */
117    unsigned char color_desc_flag; /* Separate color descrition flag. */
118    unsigned char bit_depth_luma; /* Bit depth luma minus 8. */
119    unsigned char bit_depth_chroma; /* Bit depth chroma minus 8. */
120    unsigned char full_range_flag; /* Full range flag. */
121    unsigned char color_primaries; /* Color primaries. */
122    unsigned char transfer_charact; /* Transfer characteristics. */
123    unsigned char matrix_coeff; /*< Matrix coefficients. */
124    /* -unused SE based on Thomson spec */
125
126    unsigned char blending_mode_id; /* Blending mode. */
127    unsigned char log2_scale_factor; /* Log2 scale factor (2-7). */
128    unsigned char comp_flag[3]; /* Components [0,2] parameters present flag. */
129    unsigned char num_intervals_minus1[3]; /* Number of intensity level intervals. */
130    unsigned char num_model_values[3]; /* Number of model values. */
131    uint16_t repetition_period; /* Repetition period (0-16384) */
132
133};
134
135struct ppb_h264 {
136    /* 'valid' specifies which fields (or sets of
137     * fields) below are valid. If the corresponding
138     * bit in 'valid' is NOT set then that field(s)
139     * is (are) not initialized. */
140    uint32_t valid;
141
142    int32_t poc_top; /* POC for Top Field/Frame */
143    int32_t poc_bottom; /* POC for Bottom Field */
144    uint32_t idr_pic_id;
145
146    /* H264_VALID_PANSCAN */
147    uint32_t pan_scan_count;
148    int32_t pan_scan_left[3];
149    int32_t pan_scan_right[3];
150    int32_t pan_scan_top[3];
151    int32_t pan_scan_bottom[3];
152
153    /* H264_VALID_CT_TYPE */
154    uint32_t ct_type_count;
155    uint32_t ct_type[3];
156
157    /* H264_VALID_SPS_CROP */
158    int32_t sps_crop_left;
159    int32_t sps_crop_right;
160    int32_t sps_crop_top;
161    int32_t sps_crop_bottom;
162
163    /* H264_VALID_VUI */
164    uint32_t chroma_top;
165    uint32_t chroma_bottom;
166
167    /* H264_VALID_USER */
168    uint32_t user_data_size;
169    struct user_data *user_data;
170
171    /* H264 VALID FGT */
172    struct fgt_sei *pfgt;
173
174};
175
176struct ppb {
177    /* Common fields. */
178    uint32_t picture_number; /* Ordinal display number */
179    uint32_t video_buffer; /* Video (picbuf) number */
180    uint32_t video_address; /* Address of picbuf Y */
181    uint32_t video_address_uv; /* Address of picbuf UV */
182    uint32_t video_stripe; /* Picbuf stripe */
183    uint32_t video_width; /* Picbuf width */
184    uint32_t video_height; /* Picbuf height */
185
186    uint32_t channel_id; /* Decoder channel ID */
187    uint32_t status; /* reserved */
188    uint32_t width; /* pixels */
189    uint32_t height; /* pixels */
190    uint32_t chroma_format; /* see above */
191    uint32_t pulldown; /* see above */
192    uint32_t flags; /* see above */
193    uint32_t pts; /* 32 LSBs of PTS */
194    uint32_t protocol; /* protocolXXX (above) */
195
196    uint32_t frame_rate; /* see above */
197    uint32_t matrix_coeff; /* see above */
198    uint32_t aspect_ratio; /* see above */
199    uint32_t colour_primaries; /* see above */
200    uint32_t transfer_char; /* see above */
201    uint32_t pcr_offset; /* 45kHz if PCR type; else 27MHz */
202    uint32_t n_drop; /* Number of pictures to be dropped */
203
204    uint32_t custom_aspect_ratio_width_height;
205    /* upper 16-bits is Y and lower 16-bits is X */
206
207    uint32_t picture_tag; /* Indexing tag from BUD packets */
208    uint32_t picture_done_payload;
209    uint32_t picture_meta_payload;
210    uint32_t reserved[1];
211
212    /* Protocol-specific extensions. */
213    union {
214        struct ppb_h264 h264;
215        struct ppb_mpeg mpeg;
216        struct ppb_vc1 vc1;
217    } other;
218
219};
220
221struct c011_pib {
222    uint32_t bFormatChange;
223    uint32_t resolution;
224    uint32_t channelId;
225    uint32_t ppbPtr;
226    int32_t ptsStcOffset;
227    uint32_t zeroPanscanValid;
228    uint32_t dramOutBufAddr;
229    uint32_t yComponent;
230    struct ppb ppb;
231
232};
233
234struct dec_rsp_channel_start_video {
235    uint32_t command;
236    uint32_t sequence;
237    uint32_t status;
238    uint32_t picBuf;
239    uint32_t picRelBuf;
240    uint32_t picInfoDeliveryQ;
241    uint32_t picInfoReleaseQ;
242    uint32_t channelStatus;
243    uint32_t userDataDeliveryQ;
244    uint32_t userDataReleaseQ;
245    uint32_t transportStreamCaptureAddr;
246    uint32_t asyncEventQ;
247
248};
249
250#define eCMD_C011_CMD_BASE (0x73763000)
251
252/* host commands */
253enum c011_ts_cmd {
254    eCMD_TS_GET_NEXT_PIC = 0x7376F100, /* debug get next picture */
255    eCMD_TS_GET_LAST_PIC = 0x7376F102, /* debug get last pic status */
256    eCMD_TS_READ_WRITE_MEM = 0x7376F104, /* debug read write memory */
257
258    /* New API commands */
259    /* General commands */
260    eCMD_C011_INIT = eCMD_C011_CMD_BASE + 0x01,
261    eCMD_C011_RESET = eCMD_C011_CMD_BASE + 0x02,
262    eCMD_C011_SELF_TEST = eCMD_C011_CMD_BASE + 0x03,
263    eCMD_C011_GET_VERSION = eCMD_C011_CMD_BASE + 0x04,
264    eCMD_C011_GPIO = eCMD_C011_CMD_BASE + 0x05,
265    eCMD_C011_DEBUG_SETUP = eCMD_C011_CMD_BASE + 0x06,
266
267    /* Decoding commands */
268    eCMD_C011_DEC_CHAN_OPEN = eCMD_C011_CMD_BASE + 0x100,
269    eCMD_C011_DEC_CHAN_CLOSE = eCMD_C011_CMD_BASE + 0x101,
270    eCMD_C011_DEC_CHAN_ACTIVATE = eCMD_C011_CMD_BASE + 0x102,
271    eCMD_C011_DEC_CHAN_STATUS = eCMD_C011_CMD_BASE + 0x103,
272    eCMD_C011_DEC_CHAN_FLUSH = eCMD_C011_CMD_BASE + 0x104,
273    eCMD_C011_DEC_CHAN_TRICK_PLAY = eCMD_C011_CMD_BASE + 0x105,
274    eCMD_C011_DEC_CHAN_TS_PIDS = eCMD_C011_CMD_BASE + 0x106,
275    eCMD_C011_DEC_CHAN_PS_STREAM_ID = eCMD_C011_CMD_BASE + 0x107,
276    eCMD_C011_DEC_CHAN_INPUT_PARAMS = eCMD_C011_CMD_BASE + 0x108,
277    eCMD_C011_DEC_CHAN_VIDEO_OUTPUT = eCMD_C011_CMD_BASE + 0x109,
278    eCMD_C011_DEC_CHAN_OUTPUT_FORMAT = eCMD_C011_CMD_BASE + 0x10A,
279    eCMD_C011_DEC_CHAN_SCALING_FILTERS = eCMD_C011_CMD_BASE + 0x10B,
280    eCMD_C011_DEC_CHAN_OSD_MODE = eCMD_C011_CMD_BASE + 0x10D,
281    eCMD_C011_DEC_CHAN_DROP = eCMD_C011_CMD_BASE + 0x10E,
282    eCMD_C011_DEC_CHAN_RELEASE = eCMD_C011_CMD_BASE + 0x10F,
283    eCMD_C011_DEC_CHAN_STREAM_SETTINGS = eCMD_C011_CMD_BASE + 0x110,
284    eCMD_C011_DEC_CHAN_PAUSE_OUTPUT = eCMD_C011_CMD_BASE + 0x111,
285    eCMD_C011_DEC_CHAN_CHANGE = eCMD_C011_CMD_BASE + 0x112,
286    eCMD_C011_DEC_CHAN_SET_STC = eCMD_C011_CMD_BASE + 0x113,
287    eCMD_C011_DEC_CHAN_SET_PTS = eCMD_C011_CMD_BASE + 0x114,
288    eCMD_C011_DEC_CHAN_CC_MODE = eCMD_C011_CMD_BASE + 0x115,
289    eCMD_C011_DEC_CREATE_AUDIO_CONTEXT = eCMD_C011_CMD_BASE + 0x116,
290    eCMD_C011_DEC_COPY_AUDIO_CONTEXT = eCMD_C011_CMD_BASE + 0x117,
291    eCMD_C011_DEC_DELETE_AUDIO_CONTEXT = eCMD_C011_CMD_BASE + 0x118,
292    eCMD_C011_DEC_CHAN_SET_DECYPTION = eCMD_C011_CMD_BASE + 0x119,
293    eCMD_C011_DEC_CHAN_START_VIDEO = eCMD_C011_CMD_BASE + 0x11A,
294    eCMD_C011_DEC_CHAN_STOP_VIDEO = eCMD_C011_CMD_BASE + 0x11B,
295    eCMD_C011_DEC_CHAN_PIC_CAPTURE = eCMD_C011_CMD_BASE + 0x11C,
296    eCMD_C011_DEC_CHAN_PAUSE = eCMD_C011_CMD_BASE + 0x11D,
297    eCMD_C011_DEC_CHAN_PAUSE_STATE = eCMD_C011_CMD_BASE + 0x11E,
298    eCMD_C011_DEC_CHAN_SET_SLOWM_RATE = eCMD_C011_CMD_BASE + 0x11F,
299    eCMD_C011_DEC_CHAN_GET_SLOWM_RATE = eCMD_C011_CMD_BASE + 0x120,
300    eCMD_C011_DEC_CHAN_SET_FF_RATE = eCMD_C011_CMD_BASE + 0x121,
301    eCMD_C011_DEC_CHAN_GET_FF_RATE = eCMD_C011_CMD_BASE + 0x122,
302    eCMD_C011_DEC_CHAN_FRAME_ADVANCE = eCMD_C011_CMD_BASE + 0x123,
303    eCMD_C011_DEC_CHAN_SET_SKIP_PIC_MODE = eCMD_C011_CMD_BASE + 0x124,
304    eCMD_C011_DEC_CHAN_GET_SKIP_PIC_MODE = eCMD_C011_CMD_BASE + 0x125,
305    eCMD_C011_DEC_CHAN_FILL_PIC_BUF = eCMD_C011_CMD_BASE + 0x126,
306    eCMD_C011_DEC_CHAN_SET_CONTINUITY_CHECK = eCMD_C011_CMD_BASE + 0x127,
307    eCMD_C011_DEC_CHAN_GET_CONTINUITY_CHECK = eCMD_C011_CMD_BASE + 0x128,
308    eCMD_C011_DEC_CHAN_SET_BRCM_TRICK_MODE = eCMD_C011_CMD_BASE + 0x129,
309    eCMD_C011_DEC_CHAN_GET_BRCM_TRICK_MODE = eCMD_C011_CMD_BASE + 0x12A,
310    eCMD_C011_DEC_CHAN_REVERSE_FIELD_STATUS = eCMD_C011_CMD_BASE + 0x12B,
311    eCMD_C011_DEC_CHAN_I_PICTURE_FOUND = eCMD_C011_CMD_BASE + 0x12C,
312    eCMD_C011_DEC_CHAN_SET_PARAMETER = eCMD_C011_CMD_BASE + 0x12D,
313    eCMD_C011_DEC_CHAN_SET_USER_DATA_MODE = eCMD_C011_CMD_BASE + 0x12E,
314    eCMD_C011_DEC_CHAN_SET_PAUSE_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x12F,
315    eCMD_C011_DEC_CHAN_SET_SLOW_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x130,
316    eCMD_C011_DEC_CHAN_SET_FF_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x131,
317    eCMD_C011_DEC_CHAN_SET_DISPLAY_TIMING_MODE = eCMD_C011_CMD_BASE + 0x132,
318    eCMD_C011_DEC_CHAN_SET_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x133,
319    eCMD_C011_DEC_CHAN_GET_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x134,
320    eCMD_C011_DEC_CHAN_SET_REVERSE_FIELD = eCMD_C011_CMD_BASE + 0x135,
321    eCMD_C011_DEC_CHAN_STREAM_OPEN = eCMD_C011_CMD_BASE + 0x136,
322    eCMD_C011_DEC_CHAN_SET_PCR_PID = eCMD_C011_CMD_BASE + 0x137,
323    eCMD_C011_DEC_CHAN_SET_VID_PID = eCMD_C011_CMD_BASE + 0x138,
324    eCMD_C011_DEC_CHAN_SET_PAN_SCAN_MODE = eCMD_C011_CMD_BASE + 0x139,
325    eCMD_C011_DEC_CHAN_START_DISPLAY_AT_PTS = eCMD_C011_CMD_BASE + 0x140,
326    eCMD_C011_DEC_CHAN_STOP_DISPLAY_AT_PTS = eCMD_C011_CMD_BASE + 0x141,
327    eCMD_C011_DEC_CHAN_SET_DISPLAY_ORDER = eCMD_C011_CMD_BASE + 0x142,
328    eCMD_C011_DEC_CHAN_GET_DISPLAY_ORDER = eCMD_C011_CMD_BASE + 0x143,
329    eCMD_C011_DEC_CHAN_SET_HOST_TRICK_MODE = eCMD_C011_CMD_BASE + 0x144,
330    eCMD_C011_DEC_CHAN_SET_OPERATION_MODE = eCMD_C011_CMD_BASE + 0x145,
331    eCMD_C011_DEC_CHAN_DISPLAY_PAUSE_UNTO_PTS = eCMD_C011_CMD_BASE + 0x146,
332    eCMD_C011_DEC_CHAN_SET_PTS_STC_DIFF_THRESHOLD = eCMD_C011_CMD_BASE + 0x147,
333    eCMD_C011_DEC_CHAN_SEND_COMPRESSED_BUF = eCMD_C011_CMD_BASE + 0x148,
334    eCMD_C011_DEC_CHAN_SET_CLIPPING = eCMD_C011_CMD_BASE + 0x149,
335    eCMD_C011_DEC_CHAN_SET_PARAMETERS_FOR_HARD_RESET_INTERRUPT_TO_HOST
336        = eCMD_C011_CMD_BASE + 0x150,
337
338    /* Decoder RevD commands */
339    eCMD_C011_DEC_CHAN_SET_CSC = eCMD_C011_CMD_BASE + 0x180, /* color space conversion */
340    eCMD_C011_DEC_CHAN_SET_RANGE_REMAP = eCMD_C011_CMD_BASE + 0x181,
341    eCMD_C011_DEC_CHAN_SET_FGT = eCMD_C011_CMD_BASE + 0x182,
342    /* Note: 0x183 not implemented yet in Rev D main */
343    eCMD_C011_DEC_CHAN_SET_LASTPICTURE_PADDING = eCMD_C011_CMD_BASE + 0x183,
344
345    /* Decoder 7412 commands (7412-only) */
346    eCMD_C011_DEC_CHAN_SET_CONTENT_KEY = eCMD_C011_CMD_BASE + 0x190,
347    eCMD_C011_DEC_CHAN_SET_SESSION_KEY = eCMD_C011_CMD_BASE + 0x191,
348    eCMD_C011_DEC_CHAN_FMT_CHANGE_ACK = eCMD_C011_CMD_BASE + 0x192,
349
350    eCMD_C011_DEC_CHAN_CUSTOM_VIDOUT = eCMD_C011_CMD_BASE + 0x1FF,
351
352    /* Encoding commands */
353    eCMD_C011_ENC_CHAN_OPEN = eCMD_C011_CMD_BASE + 0x200,
354    eCMD_C011_ENC_CHAN_CLOSE = eCMD_C011_CMD_BASE + 0x201,
355    eCMD_C011_ENC_CHAN_ACTIVATE = eCMD_C011_CMD_BASE + 0x202,
356    eCMD_C011_ENC_CHAN_CONTROL = eCMD_C011_CMD_BASE + 0x203,
357    eCMD_C011_ENC_CHAN_STATISTICS = eCMD_C011_CMD_BASE + 0x204,
358
359    eNOTIFY_C011_ENC_CHAN_EVENT = eCMD_C011_CMD_BASE + 0x210,
360
361};
362
363#endif
364

Archive Download this file



interactive