794 lines
23 KiB
C
Executable File
794 lines
23 KiB
C
Executable File
/*=============================================================================
|
|
Copyright (c) 2006 Broadcom Europe Limited.
|
|
All rights reserved.
|
|
|
|
Project : VideoCore III
|
|
Module : Video codec specific header (vcodec)
|
|
File : $RCSfile: vcodec.h,v $
|
|
Revision : $Revision: 1.14 $
|
|
|
|
FILE DESCRIPTION
|
|
Chip I/O for the video codec.
|
|
=============================================================================*/
|
|
|
|
#ifndef __VCODEC_H__
|
|
#define __VCODEC_H__
|
|
|
|
#define VCODEC_IO_BASE 0x7f000000
|
|
|
|
|
|
typedef enum
|
|
{
|
|
WIDTH_MASK0 = 0,
|
|
WIDTH_MASK1 = 0x00000001,
|
|
WIDTH_MASK2 = 0x00000003,
|
|
WIDTH_MASK3 = 0x00000007,
|
|
WIDTH_MASK4 = 0x0000000f,
|
|
WIDTH_MASK5 = 0x0000001f,
|
|
WIDTH_MASK6 = 0x0000003f,
|
|
WIDTH_MASK7 = 0x0000007f,
|
|
WIDTH_MASK8 = 0x000000ff,
|
|
WIDTH_MASK9 = 0x000001ff,
|
|
WIDTH_MASK10 = 0x000003ff,
|
|
WIDTH_MASK11 = 0x000007ff,
|
|
WIDTH_MASK12 = 0x00000fff,
|
|
WIDTH_MASK13 = 0x00001fff,
|
|
WIDTH_MASK14 = 0x00003fff,
|
|
WIDTH_MASK15 = 0x00007fff,
|
|
WIDTH_MASK16 = 0x0000ffff,
|
|
WIDTH_MASK17 = 0x0001ffff,
|
|
WIDTH_MASK18 = 0x0003ffff,
|
|
WIDTH_MASK19 = 0x0007ffff,
|
|
WIDTH_MASK20 = 0x000fffff,
|
|
WIDTH_MASK21 = 0x001fffff,
|
|
WIDTH_MASK22 = 0x003fffff,
|
|
WIDTH_MASK23 = 0x007fffff,
|
|
WIDTH_MASK24 = 0x00ffffff,
|
|
WIDTH_MASK25 = 0x01ffffff,
|
|
WIDTH_MASK26 = 0x03ffffff,
|
|
WIDTH_MASK27 = 0x07ffffff,
|
|
WIDTH_MASK28 = 0x0fffffff,
|
|
WIDTH_MASK29 = 0x1fffffff,
|
|
WIDTH_MASK30 = 0x3fffffff,
|
|
WIDTH_MASK31 = 0x7fffffff,
|
|
WIDTH_MASK32 = 0xffffffff
|
|
} WIDTH_MASKS;
|
|
|
|
|
|
/* Pull the register addresses from 'RegFld.h' and create an enum;
|
|
* this gives us a set of constants that we can use to access the
|
|
* registers in IO statements.
|
|
*/
|
|
#define CHIP "sv_chip_regmap.h"
|
|
#define CHIP2 "sv_enc_chip_regmap.h"
|
|
|
|
enum
|
|
{
|
|
#define RegAreaFunc(a,b,c) a = b, a##End = c, a##Max = c-b,
|
|
#define RegFunc(mod, modbase, regname, offset, name, addr) name = addr,
|
|
#define FldFunc(a,b,c,d)
|
|
|
|
#include CHIP
|
|
//#include CHIP2
|
|
|
|
#undef FldFunc
|
|
#undef RegFunc
|
|
#undef RegAreaFunc
|
|
};
|
|
|
|
// Enum of FIELD_Reg
|
|
typedef enum {
|
|
#define FldFunc(reg, field, lsb, width) FIELD_ ##reg ##_ ##field = (WIDTH_MASK ##width << lsb),
|
|
#include CHIP
|
|
//#include CHIP2
|
|
}RegAddrField;
|
|
#undef FldFunc
|
|
|
|
// Enum of POS_Reg
|
|
typedef enum {
|
|
#define FldFunc(reg, field, lsb, width) POS_ ##reg ##_ ##field = lsb,
|
|
#include CHIP
|
|
//#include CHIP2
|
|
}RegAddrPos;
|
|
#undef FldFunc
|
|
|
|
|
|
|
|
/* Don't use _VCODEC_IO directly - prefer Reg{Rd|Wt} below */
|
|
#define _VCODEC_IO(x) (* (volatile unsigned long *) (VCODEC_IO_BASE | (x)))
|
|
|
|
/* Use these rather than _IO() directly so that it's easy to replace the macros with simulation functions */
|
|
#define RegWt( addr, value ) _VCODEC_IO( addr ) = ( value )
|
|
#define RegRd( addr ) _VCODEC_IO( addr )
|
|
|
|
|
|
|
|
#define RegValFieldGet(RegVal, Reg, Field) ((RegVal & FIELD_ ##Reg ##_ ##Field) >> POS_ ##Reg ##_ ##Field)
|
|
#define RegValFieldSetTo(RegVal, Reg, Field, To) ( (RegVal) += -((RegVal)&FIELD_ ##Reg ##_ ##Field) + (To<<POS_ ##Reg ##_ ##Field))
|
|
|
|
// Allows video codec to access memory
|
|
#define VCODECCTL 0x10000c40
|
|
#define VCODECDQNT8X8BASE 0x500
|
|
|
|
|
|
// Taken from mpeg_symdec.h
|
|
/* GetSymbol Register (WO) ----------------------------------------------------
|
|
---------------------------------------------------------------------------------
|
|
Write this register to specify the next symbol to be extracted from the stream.
|
|
The symbol value is also read from the GetSymbol register.
|
|
The codestream pointer is advanced by the size of the symbol.
|
|
|
|
Register Fields:
|
|
31:11 Reserved
|
|
15:12 Type
|
|
11:08 SubType
|
|
07:00 N
|
|
*/
|
|
|
|
/* 15:12 Type for */
|
|
typedef enum
|
|
{
|
|
GET_N_BITS,
|
|
GET_EXP_GOL,
|
|
GET_MP2_INFO,
|
|
GET_MP2_COEF,
|
|
GET_264_INFO,
|
|
GET_264_COEF,
|
|
GET_4X4_SPACE_PRED_MODE
|
|
} GS_TYPE;
|
|
|
|
/* 11:08 SubType GET_MP2_INFO */
|
|
typedef enum
|
|
{
|
|
MB_TYPE_I,
|
|
MB_TYPE_P,
|
|
MB_TYPE_B,
|
|
MB_ADDRESS,
|
|
CBP,
|
|
MOTION_CODE,
|
|
DM_VECTOR
|
|
} GS_SUBTYPE_MP2_INFO;
|
|
|
|
/* 11:08 SubType GET_MP2_COEF */
|
|
typedef enum
|
|
{
|
|
DCT_COEF0_DC,
|
|
DCT_COEF0_AC,
|
|
DCT_COEF1_AC,
|
|
DCT_COEF1_DC,
|
|
DC_SIZE_LUM,
|
|
DC_SIZE_CHR
|
|
} GS_SUBTYPE_MP2_COEF;
|
|
|
|
|
|
|
|
// From sv_symb_int.vh
|
|
|
|
/*
|
|
// Syntax element decoder function selection
|
|
parameter DCD_TYPE_N_BITS = 'd0,
|
|
DCD_TYPE_EXPGOL = 'd1,
|
|
DCD_TYPE_MPEG_INFO = 'd2,
|
|
DCD_TYPE_MPEG_COEF = 'd3,
|
|
DCD_TYPE_H264_INFO = 'd4,
|
|
DCD_TYPE_H264_COEF = 'd5,
|
|
DCD_TYPE_SPAT_PRED = 'd6,
|
|
DCD_TYPE_VC1 = 'd7;
|
|
|
|
|
|
// Table identification
|
|
|
|
|
|
// MPEG "Info" tables
|
|
*/
|
|
enum
|
|
{
|
|
MINFO_MBTYPE_I_TABLE = 0,
|
|
MINFO_MBTYPE_P_TABLE = 1,
|
|
MINFO_MBTYPE_B_TABLE = 2,
|
|
MINFO_MBADDR_TABLE = 3,
|
|
MINFO_CBP_TABLE = 4,
|
|
MINFO_MOTION_TABLE = 5,
|
|
MINFO_DM_VECTOR_TABLE = 6,
|
|
MINFO_261_MTYPE = 7,
|
|
MINFO_263_MCBPC = 8,
|
|
MINFO_263_CBPY = 9};
|
|
|
|
// MPEG "Coef" tables
|
|
enum
|
|
{
|
|
MCOEF_DCT_COEF0_DC = 0,
|
|
MCOEF_DCT_COEF0_AC = 1,
|
|
MCOEF_DCT_COEF1_DC = 2,
|
|
MCOEF_DCT_COEF1_AC = 3,
|
|
MCOEF_DC_SIZE_LUMA = 4,
|
|
MCOEF_DC_SIZE_CHROMA = 5,
|
|
MCOEF_261_COEF0 = 6,
|
|
MCOEF_261_COEF1 = 7,
|
|
MCOEF_263 = 8
|
|
};
|
|
/*
|
|
// H264 Info tables
|
|
parameter HINFO_MBTYPE_I = 'd0,
|
|
HINFO_MBTYPE_P = 'd1,
|
|
HINFO_MBTYPE_B = 'd2,
|
|
HINFO_SUBMBTYPE_P = 'd3,
|
|
HINFO_SUBMBTYPE_B = 'd4,
|
|
HINFO_MVD = 'd5,
|
|
HINFO_TU = 'd6,
|
|
HINFO_CBP = 'd7,
|
|
HINFO_TE = 'd8,
|
|
HINFO_SU = 'd9;
|
|
|
|
// H264 coef
|
|
parameter HCOEF_CAVLC_TOKEN = 'd0,
|
|
HCOEF_CAVLC_TOT_ZERO = 'd1,
|
|
HCOEF_CAVLC_TOT_ZERO_CR = 'd2,
|
|
HCOEF_CAVLC_RUN_BEFORE = 'd3,
|
|
HCOEF_CAVLC_LEVEL = 'd4,
|
|
HCOEF_CABAC_LEVEL = 'd5,
|
|
HCOEF_CABAC_SIGMAP = 'd6;
|
|
|
|
// VC-1
|
|
parameter VC1_CBPCY = 'd0,
|
|
VC1_MBMODE = 'd1,
|
|
VC1_MVEC = 'd2,
|
|
VC1_MVBP = 'd3,
|
|
VC1_TTMB = 'd4,
|
|
VC1_SUBTYPE = 'd5,
|
|
VC1_TTBLK = 'd6,
|
|
VC1_DCDIFF = 'd7,
|
|
VC1_BMVTYPE = 'd8;
|
|
|
|
parameter VC1_LEVEL_SIZE = 'd11; // Unsigned
|
|
parameter VC1_RUN_SIZE = 'd6;
|
|
parameter VC1_COEF_MSB = VC1_LEVEL_SIZE + 1 + VC1_RUN_SIZE - 1; // Run, level, sign
|
|
|
|
|
|
// Constructed symbol types
|
|
parameter CONSTR_UE = 'd0,
|
|
CONSTR_SE = 'd1,
|
|
CONSTR_UEG0 = 'd2,
|
|
CONSTR_UEG3 = 'd3,
|
|
CONSTR_CAVLC = 'd4,
|
|
CONSTR_SU = 'd5;
|
|
|
|
|
|
// Xfer symb types
|
|
parameter XFER_MVD = 'd0,
|
|
XFER_REFID = 'd1,
|
|
XFER_SMODE = 'd2,
|
|
XFER_XFORM8X8 = 'd3,
|
|
XFER_MVD_HW = 'd4,
|
|
XFER_SUBTYPE = 'd5;
|
|
|
|
|
|
|
|
|
|
// Coef generator
|
|
parameter CG_MPEG_TYPE = 'd0,
|
|
CG_CAVLC_TYPE = 'd1,
|
|
CG_CABAC_TYPE = 'd2,
|
|
CG_VC1_TYPE = 'd3,
|
|
CG_PCM_TYPE = 'd4;
|
|
|
|
parameter FAST_DCD_MPEG = 'd0,
|
|
FAST_DCD_CAVLC = 'd1,
|
|
FAST_DCD_CABAC = 'd2,
|
|
FAST_DCD_VC1 = 'd3;
|
|
|
|
parameter CG_SUBTYPE_MPEG2 = 'd0,
|
|
CG_SUBTYPE_H261 = 'd1,
|
|
CG_SUBTYPE_H263 = 'd2,
|
|
CG_SUBTYPE_MPEG1 = 'd3;
|
|
|
|
parameter CG_IXFM_TYPE_4X4 = 'd0,
|
|
CG_IXFM_TYPE_16X16 = 'd1,
|
|
CG_IXFM_TYPE_8X8 = 'd2,
|
|
CG_IXFM_TYPE_PCM = 'd3;
|
|
|
|
// MPEG coefficient escape code is a fixed-length representation
|
|
// of run & level., preceeded by an 'escape' code
|
|
*/
|
|
#define MPEG_ESC_CODE 1
|
|
#define MPEG_ESC_CODE_SIZE 6
|
|
#define MPEG_LEVEL_SIZE 11
|
|
#define MPEG_RUN_SIZE 6
|
|
#define MPEG_ESC_SIZE (MPEG_ESC_CODE_SIZE + MPEG_LEVEL_SIZE + MPEG_RUN_SIZE + 1)
|
|
#define MPEG_RUN_SHIFT (MPEG_LEVEL_SIZE + 1)
|
|
#define MPEG_ESC_SHIFT (MPEG_RUN_SHIFT + MPEG_RUN_SIZE)
|
|
#define H263_LAST_SHIFT (MPEG_ESC_SHIFT + 1)
|
|
|
|
// Escape code - same as MPEG
|
|
#define H261_LEVEL_SIZE 7
|
|
#define H261_RUN_SIZE 6
|
|
#define H261_ESC_SIZE (MPEG_ESC_CODE_SIZE + H261_LEVEL_SIZE + H261_RUN_SIZE + 1)
|
|
|
|
#define H263_ESC_CODE 3
|
|
#define H263_ESC_CODE_SIZE 7
|
|
#define H263_LEVEL_SIZE 7
|
|
#define H263_RUN_SIZE 6
|
|
#define H263_ESC_SIZE (H263_ESC_CODE_SIZE + 1 + 1 + H263_LEVEL_SIZE + H263_RUN_SIZE)
|
|
|
|
// MPEG escape: [Run],[Sign],[Level]
|
|
#define MPEG_ESC_RUN_START MPEG_ESC_CODE_SIZE
|
|
#define MPEG_ESC_RUN_END (MPEG_ESC_RUN_START + MPEG_RUN_SIZE - 1)
|
|
#define MPEG_ESC_SIGN_BIT (MPEG_ESC_RUN_END + 1)
|
|
#define MPEG_ESC_LEVEL_START (MPEG_ESC_SIGN_BIT + 1)
|
|
#define MPEG_ESC_LEVEL_END (MPEG_ESC_LEVEL_START + MPEG_LEVEL_SIZE - 1)
|
|
|
|
|
|
#define MPEG_LEVEL_MSB (MPEG_LEVEL_SIZE - 1)
|
|
#define MPEG_COEF_MSB (MPEG_LEVEL_MSB + 1)
|
|
#define MPEG_RUN_MSB (MPEG_RUN_SIZE - 1)
|
|
|
|
// H261 escape: [Run],[Sign],[Level]
|
|
#define H261_ESC_RUN_START (MPEG_ESC_CODE_SIZE)
|
|
#define H261_ESC_RUN_END (H261_ESC_RUN_START + H261_RUN_SIZE - 1)
|
|
#define H261_ESC_SIGN_BIT (H261_ESC_RUN_END + 1)
|
|
#define H261_ESC_LEVEL_START (H261_ESC_SIGN_BIT + 1)
|
|
#define H261_ESC_LEVEL_END (H261_ESC_LEVEL_START + H261_LEVEL_SIZE - 1)
|
|
|
|
// H263 escape: [Last],[Run],[Sign],[Level]
|
|
#define H263_ESC_LAST_BIT (H263_ESC_CODE_SIZE)
|
|
#define H263_ESC_RUN_START (H263_ESC_CODE_SIZE + 1)
|
|
#define H263_ESC_RUN_END (H263_ESC_RUN_START + H263_RUN_SIZE - 1)
|
|
#define H263_ESC_SIGN_BIT (H263_ESC_RUN_END + 1)
|
|
#define H263_ESC_LEVEL_START (H263_ESC_SIGN_BIT + 1)
|
|
#define H263_ESC_LEVEL_END (H263_ESC_LEVEL_START + H263_LEVEL_SIZE - 1)
|
|
|
|
#define H264_LEVEL_SIZE 15; // Unsigned
|
|
#define H264_LEVEL_MSB (H264_LEVEL_SIZE - 1)
|
|
/*
|
|
// MPEG 1 escape. Basically the same as H261, except has a 'double' escape if the
|
|
// level in the regular escape = 0
|
|
parameter MPEG1_ESC_DBL_START = H261_ESC_LEVEL_END + 1;
|
|
parameter MPEG1_ESC_DBL_END = MPEG1_ESC_DBL_START + 8 - 1;
|
|
parameter MPEG1_ESC_DBL_SIZE = H261_ESC_SIZE + 8;
|
|
|
|
|
|
// VC1 defines
|
|
parameter VC1_PTYPE_I = 0,
|
|
VC1_PTYPE_P = 1,
|
|
VC1_PTYPE_B = 2;
|
|
|
|
parameter VC1_FCM_PROG = 0,
|
|
VC1_FCM_INTL_FRM = 1,
|
|
VC1_FCM_INTL_FLD = 2;
|
|
|
|
// Paramters for coef. generator buffer
|
|
parameter BUF_COEF_SIZE = 'd15;
|
|
parameter BUF_RUN_SIZE = 'd6; // For MPEG
|
|
|
|
|
|
// H264 vector types
|
|
parameter H264_P_L0_16X16 = 'd0,
|
|
H264_P_L0_L0_16X8 = 'd1,
|
|
H264_P_L0_L0_8X16 = 'd2,
|
|
H264_P_8X8 = 'd3,
|
|
H264_P_8X8REF0 = 'd4;
|
|
|
|
parameter H264_B_DIRECT_16X16 = 'd0,
|
|
H264_B_8X8 = 'd22;
|
|
|
|
|
|
|
|
// VC-1 Inverse coef block sizes
|
|
parameter VC1_IX_BLK_8X8 = 0,
|
|
VC1_IX_BLK_8X4 = 1,
|
|
VC1_IX_BLK_4X8 = 2,
|
|
VC1_IX_BLK_4X4 = 3;
|
|
|
|
|
|
// Constants used in vector generation
|
|
parameter VEC_TYPE_16X16 = 'd0,
|
|
VEC_TYPE_16X8 = 'd1,
|
|
VEC_TYPE_8X16 = 'd2,
|
|
VEC_TYPE_8X8 = 'd3;
|
|
|
|
parameter VEC_SUBTYPE_8X8 = 'd0,
|
|
VEC_SUBTYPE_8X4 = 'd1,
|
|
VEC_SUBTYPE_4X8 = 'd2,
|
|
VEC_SUBTYPE_4X4 = 'd3;
|
|
|
|
parameter VEC_COMPUTE = 'd0,
|
|
VEC_COPY_LEFT = 'd1,
|
|
VEC_COPY_TOP = 'd2;
|
|
|
|
parameter VEC_SEL_A = 'd0,
|
|
VEC_SEL_B = 'd1,
|
|
VEC_SEL_C = 'd2,
|
|
VEC_SEL_D = 'd3;
|
|
|
|
parameter VEC_VC1_1MV = 'd0,
|
|
VEC_VC1_2MV = 'd1,
|
|
VEC_VC1_4MV = 'd3;
|
|
|
|
|
|
// Vector generator ALU
|
|
parameter ALU_IN_SEL_A = VEC_SEL_A,
|
|
ALU_IN_SEL_B = VEC_SEL_B,
|
|
ALU_IN_SEL_C = VEC_SEL_C,
|
|
ALU_IN_SEL_CONST = 'd3;
|
|
|
|
parameter ALU_LDSEL_A = 'd0,
|
|
ALU_LDSEL_B = 'd1,
|
|
ALU_LDSEL_C = 'd2;
|
|
|
|
parameter ALU_OUT_DIFF = 'd0,
|
|
ALU_OUT_SUM = 'd1,
|
|
ALU_OUT_C = 'd2,
|
|
ALU_OUT_ENC_DIFF = 'd3;
|
|
|
|
parameter ALU_LDSRC_MEM = 'd0,
|
|
ALU_LDSRC_ALU = 'd1;
|
|
|
|
// Conditional load
|
|
parameter ALU_CLD_LT_M32 = 'd0,
|
|
ALU_CLD_GE_M32 = 'd1,
|
|
ALU_CLD_LT_0 = 'd2,
|
|
ALU_CLD_GE_0 = 'd3;
|
|
*/
|
|
|
|
#define REG_STATUS 0x00000110
|
|
|
|
#define STATUS_MOCOMP_RDY (1 << 2)
|
|
#define STATUS_MOCOMP_DONE (1 << 3)
|
|
#define STATUS_SPAT_RDY (1 << 4)
|
|
#define STATUS_SPAT_DONE (1 << 5)
|
|
#define STATUS_XFM_RDY (1 << 6)
|
|
#define STATUS_XFM_DONE (1 << 7)
|
|
#define STATUS_RECON_RDY (1 << 8)
|
|
#define STATUS_RECON_DONE (1 << 9)
|
|
#define STATUS_DBLK_RDY (1 << 10)
|
|
#define STATUS_DBLK_DONE (1 << 11)
|
|
|
|
// Updated bits for new status register...
|
|
#define STATUS_FLUSHCTX (1<<17)
|
|
#define STATUS_RESET (1<<16)
|
|
#define STATUS_CTXDMAACT (1<<11)
|
|
|
|
#define STATUS_ALL_RDY (STATUS_MOCOMP_RDY | STATUS_SPAT_RDY | \
|
|
STATUS_XFM_RDY | STATUS_RECON_RDY | \
|
|
STATUS_DBLK_RDY)
|
|
|
|
#define STATUS_ALL_DONE (STATUS_MOCOMP_DONE | STATUS_SPAT_DONE | \
|
|
STATUS_XFM_DONE | STATUS_RECON_DONE | \
|
|
STATUS_DBLK_DONE)
|
|
|
|
#define STATUS_ALL_RDY_DONE (STATUS_ALL_DONE | STATUS_ALL_RDY)
|
|
|
|
#define REG_SINT_STRM_POS 0x00000c10
|
|
|
|
// Use base and offsets for symbol interpreter registers.
|
|
#define REGBASE_SINT 0x00000c00
|
|
#define REGOFF_SINT_DMA_ADDR 0x00
|
|
#define REGOFF_SINT_DMA_LEN 0x04
|
|
#define REGOFF_SINT_STRM_POS 0x10
|
|
#define REGOFF_SINT_STRM_STAT 0x14
|
|
#define REGOFF_SINT_STRM_BITS 0x1c
|
|
#define REGOFF_SINT_GET_SYMB 0x20
|
|
#define SINT_STRM_STAT_DCD_ERR (1 << 9)
|
|
#define SINT_STRM_STAT_STRM_ERR (1 << 8)
|
|
#define SINT_STRM_STAT_VALID (1 << 0)
|
|
#define REGOFF_SINT_DO_RESID 0x28
|
|
#define DO_RESID_INTRA16 (1 << 6)
|
|
#define RESID_WR_XNZERO (1 << 10)
|
|
#define DO_RESID_AFETCH (1 << 16)
|
|
#define DO_RESID_INTRA (1 << 17)
|
|
#define DO_RESID_SKIP (1 << 18)
|
|
#define REGOFF_VEC_MBTYPE 0x30
|
|
#define REGOFF_SINT_VEC_DMODE 0x38
|
|
#define REGOFF_SINT_VEC_TOP_LD 0x3c
|
|
#define REGOFF_SINT_SMODE_DATA 0xa0
|
|
#define REGOFF_SINT_SMODE_LEFT 0xa4
|
|
#define REGOFF_SINT_SMODE_TOP 0xa8
|
|
#define REGOFF_SINT_SMODE_VALID 0xac
|
|
|
|
#define REGOFF_TOPCTX_WRADDR 0x90
|
|
#define REGOFF_DIRCTX_WRADDR 0x94
|
|
#define REGOFF_TOPCTX_WRDAT 0x98
|
|
#define REGOFF_XFER_SYMB 0x9c
|
|
|
|
#define REGOFF_VEC_DO_CONST 0x40
|
|
#define REGOFF_VEC_REFIDX 0x48
|
|
|
|
#define REGOFF_SINT_VEC_COLTYPE 0x54
|
|
#define REGOFF_SINT_VEC_COLREFID 0x58
|
|
#define REGOFF_SINT_CTL 0x80
|
|
#define REGOFF_SINT_VLC_TOP_CTX 0x84
|
|
#define REGOFF_SINT_QP 0x8c
|
|
|
|
#define STRM_STAT_CG_ACTIVE (1 << 1)
|
|
#define STRM_STAT_VG_ACTIVE (1 << 4)
|
|
#define STRM_STAT_CG_PARSE (1 << 7)
|
|
#define STRM_STAT_STRM_ERR (1 << 8)
|
|
#define STRM_STAT_DCD_ERR (1 << 9)
|
|
#define STRM_STAT_CTX_BUSY (1 << 11)
|
|
#define STRM_STAT_FLUSH_CTX (1 << 17)
|
|
|
|
#define REG_MCOM_CTL 0x00000300
|
|
#define SHIFT_REG_MCOM_CTL_BREF 24
|
|
#define SHIFT_REG_MCOM_CTL_AREF 16
|
|
#define SHIFT_REG_MCOM_CTL_SUBBLOCK 12
|
|
#define SHIFT_REG_MCOM_CTL_YSIZE 6
|
|
#define SHIFT_REG_MCOM_CTL_XSIZE 4
|
|
#define SHIFT_REG_MCOM_CTL_BFLD 3
|
|
#define SHIFT_REG_MCOM_CTL_AFLD 2
|
|
#define SHIFT_REG_MCOM_CTL_MODE 0
|
|
|
|
#define REG_MCOM_SRCA 0x00000304
|
|
#define SHIFT_REG_MCOM_SRCA_Y 16
|
|
#define REG_MCOM_SRCB 0x00000308
|
|
#define SHIFT_REG_MCOM_SRCB_Y 16
|
|
|
|
#define REG_SPRE_CTL 0x00000320
|
|
#define SPRE_CTL_CNST_INTRA (1 << 4)
|
|
#define REG_SPRE_MODE 0x00000324
|
|
|
|
#define REG_DEQUANT_MAP1 0x400
|
|
#define REG_DEQUANT_MAP2 0x500
|
|
|
|
#define REG_IXFM_CTL 0x00000700
|
|
#define IXFM_XFM_I16 (1 << 30)
|
|
#define IXFM_XFM_8X8 (2 << 30)
|
|
#define IXFM_FIELD_SCAN (1 << 29)
|
|
#define IXFM_QS_TABLE (1 << 28)
|
|
#define IXFM_8X8_SUB_ORD (1 << 27)
|
|
#define IXFM_INTRA (1 << 24)
|
|
|
|
#define REG_IXFM_COEF 0x00000704
|
|
#define REG_IXFM_PCM 0x0000070C
|
|
|
|
#define REG_DBLK_CTL 0x00000720
|
|
#define DBLK_CTL_8X8 (1 << 7)
|
|
#define DBLK_CTL_MONO (1 << 6)
|
|
#define DBLK_CTL_ISINTRA (1 << 4)
|
|
#define DBLK_CTL_FLEFT (1 << 3)
|
|
#define DBLK_CTL_FTOP (1 << 2)
|
|
#define DBLK_CTL_FINT (1 << 1)
|
|
#define DBLK_ALL_AVAIL (DBLK_CTL_FINT | \
|
|
DBLK_CTL_FTOP | DBLK_CTL_FLEFT)
|
|
#define DBLK_NO_TOP_LEFT (DBLK_CTL_FINT)
|
|
#define DBLK_NO_TOP (DBLK_CTL_FINT | DBLK_CTL_FLEFT)
|
|
#define DBLK_NO_LEFT (DBLK_CTL_FINT | DBLK_CTL_FTOP)
|
|
|
|
#define REG_DBLK_OUT 0x00000724
|
|
#define REG_DBLK_EDGE 0x00000728
|
|
#define REG_DBLK_QNT 0x0000072C
|
|
#define REG_DBLK_OFFSET 0x00000730
|
|
#define REG_DBLK_TOP_CTX 0x00000734
|
|
#define REG_DBLK_TOP_INTRA (1 << 0)
|
|
#define REG_DBLK_TOP_FIELD (1 << 1)
|
|
#define SHIFT_REG_DBLK_TOP_CTX_ISINTRA 0
|
|
#define SHIFT_REG_DBLK_TOP_CTX_ISFIELD 1
|
|
#define SHIFT_REG_DBLK_TOP_CTX_B10 2
|
|
#define SHIFT_REG_DBLK_TOP_CTX_B11 3
|
|
#define SHIFT_REG_DBLK_TOP_CTX_B14 4
|
|
#define SHIFT_REG_DBLK_TOP_CTX_B15 5
|
|
#define REG_DBLK_XZERO 0x00000738
|
|
#define REG_DBLK_MVDIFF 0x0000073C
|
|
|
|
#define REG_MB_CTL 0x00000740
|
|
#define SHIFT_REG_MB_CTL_TOP_FIELD 17
|
|
#define SHIFT_REG_MB_CTL_FIELD_MODE 16
|
|
|
|
#define SYMB_GET_NBITS (0)
|
|
#define SYMB_GET_UE (1 << 12)
|
|
#define SYMB_GET_SE ((1 << 12) | (1 << 8))
|
|
#define SYMB_GET_H264_INFO (4 << 12)
|
|
#define SYMB_GET_SPATIAL (6 << 12)
|
|
|
|
#define SYMB_H264_INFO_I_MBTYPE (0 << 8)
|
|
#define SYMB_H264_INFO_P_MBTYPE (1 << 8)
|
|
#define SYMB_H264_INFO_B_MBTYPE (2 << 8)
|
|
#define SYMB_H264_INFO_SUB_P_SLICE (3 << 8)
|
|
#define SYMB_H264_INFO_SUB_B_SLICE (4 << 8)
|
|
#define SYMB_H264_INFO_MVD (5 << 8)
|
|
#define SYMB_H264_INFO_TU (6 << 8)
|
|
#define SYMB_H264_INFO_CBP (7 << 8)
|
|
#define SYMB_H264_INFO_TE (8 << 8)
|
|
#define SYMB_H264_INFO_SU (9 << 8)
|
|
|
|
#define SYMB_GET_TE (SYMB_GET_H264_INFO | SYMB_H264_INFO_TE)
|
|
|
|
|
|
#define REG_RVC_CTL 0xe00
|
|
#define REG_RVC_PUT 0xe04
|
|
#define REG_RVC_GET 0xe08
|
|
#define REG_RVC_BASE 0xe0c
|
|
#define REG_RVC_END 0xe10
|
|
|
|
#define REG_HST2CPU_MBX 0xf00
|
|
#define REG_CPU2HST_MBX 0xf04
|
|
#define REG_MBX_STAT 0xf08
|
|
|
|
#define REG_VEC_MBTYPE 0x0C30
|
|
#define VEC_MBTYPE_IS_B (1 << 0)
|
|
|
|
#define REG_VEC_RESID 0x0C34
|
|
|
|
#define REG_VEC_DO_CONST 0x0C40
|
|
#define SHIFT_REG_VEC_DO_CONST_ULFT_MBAFF_FIELD 6
|
|
#define REG_VEC_DO_CONST_INTRA (1 << 4)
|
|
#define REG_VEC_DO_CONST_PSKIP (1 << 5)
|
|
#define REG_VEC_DO_CONST_ULFT_MBAFF_FIELD (1 << 6)
|
|
#define REG_VEC_DO_CONST_LEFTCOPY (1 << 7)
|
|
#define REG_VEC_REF0_LTERM (1 << 8)
|
|
#define REG_VEC_DO_CONST_MVDIFF (1 << 9)
|
|
|
|
#define REG_VEC_DIFF 0x0C44
|
|
#define REG_SINT_XNZERO 0x0C2C
|
|
#define SHIFT_REG_SINT_XNZERO_B10 10
|
|
#define REG_SINT_XNZERO_B10 (1 << 10)
|
|
#define REG_SINT_XNZERO_B11 (1 << 11)
|
|
#define REG_SINT_XNZERO_B14 (1 << 14)
|
|
#define SHIFT_REG_SINT_XNZERO_B14 14
|
|
#define REG_SINT_XNZERO_B15 (1 << 15)
|
|
|
|
#define REG_VEC_REFIDX 0x0C48
|
|
#define SHIFT_REG_VEC_REFIDX0 0
|
|
#define SHIFT_REG_VEC_REFIDX1 8
|
|
#define SHIFT_REG_VEC_REFIDX2 16
|
|
#define SHIFT_REG_VEC_REFIDX3 24
|
|
#define SHIFT_REG_VEC_REFIDX_DELTA SHIFT_REG_VEC_REFIDX1
|
|
|
|
#define REG_VEC_TOPREF 0x0C4C
|
|
#define SHIFT_REG_VEC_TOPREFL0_B0 0
|
|
#define SHIFT_REG_VEC_TOPREFL0_B1 5
|
|
#define SHIFT_REG_VEC_TOPREFL0_C 10
|
|
#define SHIFT_REG_VEC_TOPREFL1_B0 16
|
|
#define SHIFT_REG_VEC_TOPREFL1_B1 21
|
|
#define SHIFT_REG_VEC_TOPREFL1_C 26
|
|
#define SHIFT_REG_VEC_TOPREF_DELTA SHIFT_REG_VEC_TOPREFL0_B1
|
|
|
|
#define REG_VEC_TOPTOPREF 0x0C50
|
|
|
|
#define REG_VEC_COLTYPE 0x0C54
|
|
#define MASK_REG_VEC_COLTYPE_TYPE 0x3
|
|
#define MASK_REG_VEC_COLTYPE_SLICE_ID 0xfff
|
|
#define SHIFT_REG_VEC_COLTYPE_TYPE 0
|
|
#define SHIFT_REG_VEC_COLTYPE_SUBTYPE0 2
|
|
#define SHIFT_REG_VEC_COLTYPE_SUBTYPE1 4
|
|
#define SHIFT_REG_VEC_COLTYPE_SUBTYPE2 6
|
|
#define SHIFT_REG_VEC_COLTYPE_SUBTYPE3 8
|
|
#define SHIFT_REG_VEC_COLTYPE_SLICE_ID 16
|
|
#define SHIFT_REG_VEC_COLTYPE_IS_FIELD 29
|
|
#define SHIFT_REG_VEC_COLTYPE_TOP_FIELD 30
|
|
#define SHIFT_REG_VEC_COLTYPE_MBAFF 31
|
|
|
|
#define COLTYPE_FLD_TOP (1<<SHIFT_REG_VEC_COLTYPE_IS_FIELD) | (1<<SHIFT_REG_VEC_COLTYPE_TOP_FIELD)
|
|
#define COLTYPE_AFF_FLD (1<<SHIFT_REG_VEC_COLTYPE_MBAFF) | (1<<SHIFT_REG_VEC_COLTYPE_IS_FIELD)
|
|
#define COLTYPE_FLD (1<<SHIFT_REG_VEC_COLTYPE_IS_FIELD)
|
|
|
|
#define REG_VEC_COLREFID 0x0C58
|
|
#define SHIFT_REG_VEC_COLREFID0 0
|
|
#define SHIFT_REG_VEC_COLREFID1 8
|
|
#define SHIFT_REG_VEC_COLREFID2 16
|
|
#define SHIFT_REG_VEC_COLREFID3 24
|
|
#define SHIFT_REG_VEC_COLREFID_DELTA SHIFT_REG_VEC_COLREFID1
|
|
#define MASK_REG_VEC_COLREFID 0x7
|
|
|
|
#define REG_VEC_TOPPIC 0x0c5c
|
|
|
|
#define REG_VEC_OUTPIC_MAP 0x0cc0
|
|
#define REGIO_VEC_OUTPIC_MAP (REG_VEC_OUTPIC_MAP | IO_BASE)
|
|
|
|
#define REG_VEC_MEM_BASE 0x0d00
|
|
#define REG_VEC_MEM_END 0x0e00
|
|
|
|
#define REG_VEC_MEM_MBAFF_L0_D 0x0d7c
|
|
#define REG_VEC_MEM_MBAFF_L1_D 0x0dfc
|
|
|
|
#define REG_VEC_MEM_SIZE (REG_VEC_MEM_END - REG_VEC_MEM_BASE)
|
|
|
|
|
|
#define REG_DMA0_SD_ADDR 0x1800
|
|
#define REG_DMA0_LCL_ADDR 0x1804
|
|
#define REG_DMA0_LENGTH 0x1808
|
|
#define REG_DMA1_SD_ADDR 0x1810
|
|
#define REG_DMA1_LCL_ADDR 0x1814
|
|
#define REG_DMA1_LENGTH 0x1818
|
|
#define REG_DMA2_SD_ADDR 0x1820
|
|
#define REG_DMA2_LCL_ADDR 0x1824
|
|
#define REG_DMA2_LENGTH 0x1828
|
|
#define REG_DMA3_SD_ADDR 0x1830
|
|
#define REG_DMA3_LCL_ADDR 0x1834
|
|
#define REG_DMA3_LENGTH 0x1838
|
|
#define REG_DMA_STATUS 0x1840
|
|
#define REG_DMA0_ACTIVE (1 << 0)
|
|
#define REG_DMA1_ACTIVE (1 << 1)
|
|
#define REG_DMA2_ACTIVE (1 << 2)
|
|
#define REG_DMA3_ACTIVE (1 << 3)
|
|
|
|
#define REG_DMA_ALL_ACTIVE REG_DMA0_ACTIVE | REG_DMA1_ACTIVE | \
|
|
REG_DMA2_ACTIVE | REG_DMA3_ACTIVE
|
|
|
|
#define DMA_MEM_BASE 0x1A00
|
|
#define DMA_MEM_SIZE 0x200
|
|
//; In bytes
|
|
#define MASK_DMA0_STATUS (1<<0)
|
|
#define MASK_DMA1_STATUS (1<<1)
|
|
#define MASK_DMA2_STATUS (1<<2)
|
|
#define MASK_DMA3_STATUS (1<<3)
|
|
|
|
#define DEBUG_LED 0x910
|
|
|
|
|
|
// Offsets to MVDATA
|
|
#define MVDATA_A 0x0
|
|
#define MVDATA_B 0xC
|
|
#define MVDATA_C 0x30
|
|
#define MVDATA_D 0x3C
|
|
#define MVDATA_LD_A 0x0
|
|
#define MVDATA_LD_B 0x8
|
|
#define MVDATA_LD_C 0x20
|
|
#define MVDATA_LD_D 0x28
|
|
|
|
#define MASK_MVDATA_X 0xFFFF
|
|
#define MASK_MVDATA_Y 0x7FFF0000
|
|
#define SHIFT_MVDATA_Y 16
|
|
#define MASK_MVDATA_VALID 0x80000000
|
|
|
|
#define REGIO_SINT_VEC_TOPPIC (REG_VEC_TOPPIC | IO_BASE)
|
|
|
|
#define REGIO_SINT_VEC_TOPREF (REG_VEC_TOPREF | IO_BASE)
|
|
|
|
#define REGIO_DEBUG_LED (DEBUG_LED | IO_BASE)
|
|
|
|
|
|
#define REG_WPRED_CTL 0x0340
|
|
#define REG_WPRED_SEL 0x0314
|
|
|
|
|
|
|
|
/*
|
|
** The following do not appear in sv_chip_regmap.h
|
|
**
|
|
** From code_in_pump.v:
|
|
*/
|
|
|
|
#define DECODE_CIP_CIRC_START 0x00000A40
|
|
#define DECODE_CIP_CIRC_END 0x00000A44
|
|
#define DECODE_CIP_START 0x00000A48
|
|
#define DECODE_CIP_END 0x00000A4C
|
|
#define DECODE_CIP_CTL 0x00000A50
|
|
|
|
/* We define the range of the CIP block register address space... */
|
|
#define DECODE_CIP_BASE 0x00000A40
|
|
#define DECODE_CIP_BASEEND 0x00000A53
|
|
|
|
/* ...and the three flags in CIP_CTL. */
|
|
#define CIP_CTL_ENABLE 0x00000001
|
|
#define CIP_CTL_CMD_Q_EMPTY 0x00000002
|
|
#define CIP_CTL_DATA_Q_EMPTY 0x00000004
|
|
/*
|
|
** These two macros are used to determine whether the CIP block has finished sending
|
|
** data to the CI block. It is then safe to flush the CI block if required.
|
|
*/
|
|
#define CIP_CTL_MASK ( CIP_CTL_ENABLE | CIP_CTL_CMD_Q_EMPTY | CIP_CTL_DATA_Q_EMPTY )
|
|
#define CIP_CTL_EMPTY ( CIP_CTL_CMD_Q_EMPTY | CIP_CTL_DATA_Q_EMPTY )
|
|
|
|
|
|
/*
|
|
** Defines for the CodeIn control register:
|
|
*/
|
|
#define CI_CTL_ENA 0x00000001
|
|
#define CI_CTL_EMU 0x00000002
|
|
#define CI_CTL_MCHN 0x00000004
|
|
#define CI_CTL_OWRT 0x00000008
|
|
|
|
#define CI_CTL_FLUSH 0x00000010
|
|
#define CI_CTL_NOBD 0x00000020
|
|
|
|
#define CI_CTL_ACT 0x00010000
|
|
#define CI_CTL_FULL 0x00020000
|
|
#define CI_CTL_ERR 0x00040000
|
|
|
|
#define CI_CTL_GET_ERRTYPE( x ) ( ( (x) >> 19U ) & 0x1F )
|
|
|
|
#define CI_CTL_BFULL 0x01000000
|
|
|
|
|
|
#endif
|