diff options
Diffstat (limited to 'drivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Incl/mvd.h')
-rwxr-xr-x | drivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Incl/mvd.h | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/drivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Incl/mvd.h b/drivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Incl/mvd.h new file mode 100755 index 000000000000..956f69e93f70 --- /dev/null +++ b/drivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Incl/mvd.h @@ -0,0 +1,157 @@ +/*************************************************** + Copyright (c) 2015 Amphion Semiconductor Ltd + All rights reserved. + *************************************************** + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + **************************************************** + + Author : Media IP FW team + File name : mvd.h + Notes : Replaces misnamed "global.h" + + ***********************************************/ + +#ifndef _MVD_H_ +#define _MVD_H_ + +///////////////////////////////////////////////////////////////////////////////// +// Header files +///////////////////////////////////////////////////////////////////////////////// + +#include "basetype.h" +#include "DecKernelLibCfg.h" + +///////////////////////////////////////////////////////////////////////////////// +// Global Variables +///////////////////////////////////////////////////////////////////////////////// +extern u_int32 uMvdKernelIrqPin[DECODERLIB_MAX_MALONES][0x2]; + +///////////////////////////////////////////////////////////////////////////////// +// Macros +///////////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////////// +// Register access model +// + +/////////////////////////////////////////////////// +// This is the option used for most builds + +#ifndef MVD_DEBUG_REG_ACCESS +#if TARGET_LEVEL == CMODEL + extern u_int32 dec_model_malone_reg_write ( u_int32 * puRegAddr, u_int32 uWrtData ); + extern u_int32 dec_model_malone_reg_read ( u_int32 * puRegAddr, u_int32 uReadData ); + + #define APB_REGISTER_WRITE(a,b) dec_model_malone_reg_write ( ( u_int32 * )a, ( u_int32 )b ) + #define APB_REGISTER_READ(a,b) b = *a; dec_model_malone_reg_read ( ( u_int32 * )a, ( u_int32 )b ) + #define APB_REG_WRITE(a,b) dec_model_malone_reg_write ( ( u_int32 * )&a, ( u_int32 )b ) + #define APB_REG_READ(a,b) b = a; dec_model_malone_reg_read ( ( u_int32 * )&a, ( u_int32 )b ) +#else + + + +#if 0 +#include "VPU_debug.h" +//static u_int32 c; + +#define APB_REGISTER_WRITE(a,b) c = b; *a = c; printk("write reg 0x%p, val 0x%x, in %s\n", a, c, __FUNCTION__) +#define APB_REGISTER_READ(a,b) c = *a; b = c; printk("read reg 0x%p, val 0x%x, in %s\n", a, c, __FUNCTION__) +#define APB_REG_WRITE(a,b) c = b; a = c; printk("write reg 0x%p, val 0x%x, in %s\n", &a, c, __FUNCTION__) +#define APB_REG_READ(a,b) c = a; b = c; printk("read reg 0x%p, val 0x%x, in %s\n", &a, c, __FUNCTION__) +#else + + #define APB_REGISTER_WRITE(a,b) *a = b + #define APB_REGISTER_READ(a,b) b = *a + #define APB_REG_WRITE(a,b) a = b + #define APB_REG_READ(a,b) b = a +#endif + +#endif +#else + // Store reg acesses in simple debug array for dumping from debugger + extern void decoderlib_debug_reg( volatile u_int32 * puRegAddr, u_int32 uVal); + #define APB_REGISTER_WRITE(a,b) *a = b + #define APB_REGISTER_READ(a,b) b = *a + #define APB_REG_WRITE(a,b) decoderlib_debug_reg(( u_int32 * )&a,b) + #define APB_REG_READ(a,b) b = a +#endif + + +#ifdef MVD_DIAG_LOG_REG_ACCESS + +#define DIAG_CQ_ID DECLIB_DBG_REG_CQ + +extern void decoderlib_dbg_core_log_write ( volatile u_int32 * puRegAddr, u_int32 uVal, void * pMVDHw, u_int32 uAuxData, bool bActive ); +extern void decoderlib_dbg_core_log_read ( volatile u_int32 * puRegAddr, u_int32 *puVal, void * pMVDHw, u_int32 uAuxData, bool bActive ); +extern u_int32 decoderlib_dbg_get_reg_mask ( u_int32 uStrIdx ); + +#define MVD_REG_WRITE(pMvdHw,aux,addr,val) decoderlib_dbg_core_log_write ( ( u_int32 * )&addr, val, ( void * )pMvdHw, aux, gbLogRegAccessActive ) +#define MVD_REG_READ(pMvdHw,aux,addr,val) decoderlib_dbg_core_log_read ( ( u_int32 * )&addr, &val, ( void * )pMvdHw, 0x0, gbLogRegAccessActive ) +#define MVD_ADDRESS_WRITE(pMvdHw,aux,addr,val) decoderlib_dbg_core_log_write ( ( u_int32 * )addr, val, ( void * )pMvdHw, aux, gbLogRegAccessActive ) +#define MVD_ADDRESS_READ(pMvdHw,aux,addr,val) decoderlib_dbg_core_log_read ( ( u_int32 * )addr, &val, ( void * )pMvdHw, 0x0, gbLogRegAccessActive ) + +#else + +#define MVD_REG_WRITE(pMvdHw,aux,addr,val) APB_REG_WRITE(addr,val) +#define MVD_REG_READ(pMvdHw,aux,addr,val) APB_REG_READ(addr,val) +#define MVD_ADDRESS_WRITE(pMvdHw,aux,addr,val) APB_REGISTER_WRITE(addr,val) +#define MVD_ADDRESS_READ(pMvdHw,aux,addr,val) APB_REGISTER_READ(addr,val) + +#endif /* MVD_DIAG_LOG_REG_WRITES */ + +#define APB_REGISTER_POLL(s,p,v,m) +#define APB_SEEK_EVENT(e) +#define APB_REG_SET(a,m,b) ((a)) = ((((a)) & ~(m)) | ((b) & (m))) + +/////////////////////////// +// System functions +// + +/////////////////////////// +// MULT_U(a,b) +// +// a * b + +#define MULT_U(a,b) (a)*(b) + +/////////////////////////// +// LDIV_MOD_U(a,b) +// +// a / b, mod = a % b + +#define LDIV_MOD_U(a,b,mod) (a)/(b), mod = (a)%(b) + +/////////////////////////// +// MEMORY_BLOCK_COPY(a,b,c,d) +// +// a : int - 1 for load, 0: store +// b : int - size of transfer in bytes +// c : void * - source address +// d : void * - destination address + +#define MEMORY_BLOCK_COPY(a,b,c,d) pal_memcpy(d,c,b) + +////////////////////////////////////////////////// +// Implementation running defines +// + +#define FORCE_DECODE_HANDLE_IRQ { \ + pgCtrlMVDHw->uForceFIQ = 1; \ + if ( pgCtrlMVDHw->uMaloneID == 0 ) \ + { \ + pal_int_set ( uDecLibIrqPin[0x0][0x0] ); \ + } \ + else \ + { \ + pal_int_set ( uDecLibIrqPin[0x1][0x0] ); \ + } \ + } + +#endif /* _MVD_H_ */ + +/* End of file */ |