⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vp.h

📁 ESS3890+SL原代码(1*16内存)
💻 H
📖 第 1 页 / 共 2 页
字号:
    VP_cmdq_cmd(a); \} while(0)#define VP_ucode(ncmdq, a) VP_cbus(ncmdq, a)/* vp_ucode should be faded out */#define vp_ucode(a)		VP_ucode(NCMDQ_VP_ucode, a)#define vp_ucode_only(a)	VP_ucode(0, a)#define wait4l_only		VP_block(0, UCODE_IDLE)#define VP_mcmd(ncmdq, a) VP_cbus(ncmdq, a)/* vp_mcmd should be faded out */#define vp_mcmd(a)	VP_mcmd(NCMDQ_VP_mcmd, a)#define vp_mcmd_only(a)	VP_mcmd(0, a)/************************************************************ * blocking commands at interface with internal queue * might have to be issued twice to take into account delay induced  * by internal vp queue, in such case use VP_block_twice() ************************************************************//************************************************************ * VP_MCMD_ISSUED: * why needed is still to be investigated!!! * stuffing between vp_mcmd and dmay in rla case * must be issued immediate after vp_mcmd to avoid certain timing problem: * there could be a scenerio that the vp_mcmd has been executed, causing * waitio_ready to wait forever ************************************************************/typedef enum {    UCODE_IDLE		=0x21f,    IO_IDLE		=0x9f,    VP_MCMD_ISSUED	=0x9b,    VP_CMDQ_NOT_EMPTY_N_IO_IDLE	=0x0fe,} READY_MASK;#define VP_block(ncmdq, ready_mask) \{ \  if (ncmdq) VP_cmdq_wait(ncmdq); \  mvd[buscon_cmdque_vpstatwait]  = ready_mask; \}#define VP_block_twice(ncmdq, ready_mask) \{ \  if (ncmdq) VP_cmdq_wait(ncmdq); \  mvd[buscon_cmdque_vpstatwait]  = ready_mask; \  mvd[buscon_cmdque_vpstatwait]  = ready_mask; \}/************************************************************ * send endio to terminate vp_mcmd used in io ************************************************************/#define VP_endio(ncmdq)		 \{ \  VP_block(ncmdq, 0x400); \  VP_block(0, 0x8400); \}/************************************************************ * VP_xfer a general way for transfering 1d data between dram and vp * for 2d data use VP_xfer_2d * e.g. to output idct result to dram: * VP_xfer(VPCMD_R_DPCM, vpadr, VPDMA_BREAK+VPDMA_WIDTH2, offset+xy2a(x,y,720), 4, 16); ************************************************************//* internal use in VP_xfer */#define	VPDIR(cmd)	(((cmd) & 0x1000) ? VPDMA_VP2MEM : VPDMA_MEM2VP)#define	VP_xfer(ncmdq, cmd, vpadr, mode, addr, dx, dy) do {	\    if (ncmdq) VP_cmdq_wait(ncmdq);				\    VP_cmdq_cmd((cmd) + (vpadr));				\    VP_cmdq_deltas((dx), (dy));					\    VP_cmdq_dmax(VPDIR(cmd) + (mode) + a2x(addr));		\    VP_cmdq_dmay(a2y(addr));					\} while (0)#define	VP_xfer_bf(ncmdq, cmd, vpadr, mode, addr, dx, dy) do {	\    vp_mcmd_only(VPCMD_BFRAME_ON);				\    if (ncmdq) VP_cmdq_wait(ncmdq);				\    VP_cmdq_cmd((cmd) + (vpadr));				\    VP_cmdq_deltas((dx), (dy));					\    VP_cmdq_dmax(VPDIR(cmd) + (mode) + a2x(addr));		\    VP_cmdq_dmay(0x8000+a2y(addr));				\    vp_mcmd_only(VPCMD_BFRAME_OF);				\} while (0)#define	VP_xfer_sw(ncmdq, cmd, vpadr, mode, addr, dx, dy, z) do {	\    if (ncmdq) VP_cmdq_wait(ncmdq);					\    VP_cmdq_cmd((cmd) + (vpadr));					\    VP_cmdq_deltas((dx), (dy));						\    VP_cmdq_dmax(VPDIR(cmd) + (mode) + a2x(addr));			\    if (z) VP_cmdq_dmay(0x8000+a2y(addr));				\    else VP_cmdq_dmay(a2y(addr));					\} while (0)#ifdef R3418#define VP_xfer_quick(ncmdq, cmd, vpadr, addr) do {             \    if (ncmdq) VP_cmdq_wait(ncmdq);                             \    VP_cmdq_cmd((cmd) + (vpadr));                               \    mvd[buscon_cmdque_vpdeltas] = last_vpdma_setup;             \    VP_cmdq_dmay((addr));                                       \    VP_xfer_wait();                                             \} while (0)#else#define VP_xfer_quick(ncmdq, cmd, vpadr, addr) do {             \    if (ncmdq) VP_cmdq_wait(ncmdq);                             \    VP_cmdq_cmd((cmd) + (vpadr));                               \    VP_cmdq_dmay(a2y(addr));                                       \} while (0)#endif#define VP_ucode_wait() do {				\    VP_block_twice(NCMDQ_VP_block_twice, UCODE_IDLE);	\} while (0);/************************************************************ * vp_mcmd is issued outside for better optimization  * offset, DX, X all in dword unit  * remember to select INC2  * need width term  * BframeComp can be  0 or 0x8000  ************************************************************/#define VP_xfer_2d(ncmdq, x, y, DX, DY, offset, width, vpdma_mode, vpdir, BframeComp) \{ \ int addr = (offset)+xy2a(x,y,width); \ if (ncmdq) VP_cmdq_wait(ncmdq); \ VP_cmdq_deltas(DX, DY); \ VP_cmdq_dmax((vpdir) + (vpdma_mode) +  (VPDMA_BREAK) + a2x(addr)); \ VP_cmdq_dmay(a2y(addr)+BframeComp);  \}/************************************************************ * wait until cmdq is empty, then read out port value * such wait is necessary to make sure that port value is valid ************************************************************/#define VP_read(ncmdq, port) \{ \    if (ncmdq) VP_cmdq_wait(ncmdq); \    VP_block_twice(0, UCODE_IDLE); \    VP_cmdq_wait_empty; \    mvd[buscon_cmdque_vprd] = 0x0; \    while (!(mvd[buscon_cmdque_status]& 0x8)); \    port = (mvd[buscon_cmdque_rdrlatchl] & 0xffff); \}/************************************************************ * CMDQ_reset discard all pending cmdq entries ************************************************************//* since it's reset, probably it does not go thru command queue,  * so no need for cmdq_wait??? */#define VP_cmdq_reset(ncmdq)  \{ \    if (ncmdq) VP_cmdq_wait(ncmdq); \    mvd[buscon_cmdque_cntl] = 0x20; \    mvd[buscon_cmdque_cntl] = 0x00; \}#define CMDQ_reset() VP_cmdq_reset(0)/************************************************************ * global typedef ************************************************************/typedef enum {    rnone,    rksearch,    rkcross,    rkaraoke,    rspatial,    rcdda,    rhscale,    rpal2ntsc,    rntsc2pal,    rtwo2one,    rdemphasis,    rvolume_128,    recho,    recho_dp,    rmpgnonpage,    rmp3_destereo,    rmp3_mult48,    rmp3_imdct12,    rmp3_imdct36,    rmp3nonpage,    rjpgnonpage,    rgslnonpage,    rgamnonpage,    requnonpage,    rkscnonpage,    rrvbnonpage,    rzeropoint,    rdigest,    rwma,    rac3lib,    rwma1,    rdummy, /* rdummy should never be used in indexing array */} RAMCODE;/************************************************************ * Global variables ************************************************************/#define VP_RESTORE_MPG_UCODE	0x0001#define VP_RESTORE_MP3_UCODE	0x0002#define VP_RESTORE_JPG_UCODE	0x0004#define VP_RESTORE_GSL_UCODE	0x0008#define VP_RESTORE_GAM_UCODE	0x0010#define VP_RESTORE_EQU_UCODE	0x0020#define VP_RESTORE_KSC_UCODE	0x0040#define VP_RESTORE_RVB_UCODE	0x0080GBLDEF0(volatile unsigned int VP_need_to_restore_ucode);/************************************************************ * external function declaration ************************************************************/EXPORT void VP_init(int);EXPORT void VP_reset(void);EXPORT void VP_load_ucode(RAMCODE name);EXPORT void VP_version(void);EXPORT void VP_xfer_wait(void);EXPORT void VP_set_rvb_delay_hack(void);#else	/* FAKE */#define VP_xfer_wait()#define VP_ucode_wait()#define VP_load_ucode(name)#define VP_cmdq_wait(n)#endif#endif /* _VP_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -