?? util.h
字號:
/* SCCSID @(#)util.h 1.35 10/28/98 *//* * $Log$ */#ifndef __UTIL_H__#define __UTIL_H__#include "mvd.h"#include "common.h"register volatile int *mvd asm("r27");#define lwpeek(addr) mvd[addr]#define lwpoke(addr, data) mvd[addr] = data#ifdef MPEG1#define DMAWIDTH0 256 /* 0x100 for refresh *//* for Y, we will use INC2_Y */#define DMAWIDTH2_E2_UV (DISP_info[E2].wUV)#define DMAWIDTH1_E2_Y ((704*3/4)/4)#define DMAWIDTH1 (176/4) /* I/P screen */#define DMAWIDTH2 ((176*3/4) /4) /* B screen */#else /*MPEG1*/#define DMAWIDTH0 256 /* 0x100 for refresh */#define DMAWIDTH1 (360/4) /* uv screen */#define DMAWIDTH2 (720/4) /* y screen */#endif /*MPEG1*/#ifdef SVCD#define WIDTH720 (720/4)#define WIDTH360 (360/4)#define WIDTH352 (352/4)#endif/* * **************** Risc Interface **************** */#define RIFACE_STLD_IRQSUPRESS 0x0000C000#define RIFACE_LD_IRQSUPRESS 0x00004000#define RIFACE_ST_IRQSUPRESS 0x00008000#define xport_irq 0x00000001#define tim1_irq 0x00000002#define tim2_irq 0x00000004#define vin_irq 0x00000008#define vout_irq 0x00000010#define rdma_irq 0x00000020#define vpcmdq_irq 0x00000040#define buscon_irq 0x00000080#define huff_irq 0x00000100#define host_irq 0x00000200#define aud_irq 0x00000400#define tdm_irq 0x00000800#define gateway_irq 0x00001000#define debug_irq 0x00002000 #define enable_int(ch) { \ int tmp; \ mvd[riface_irqsuppress] =0; asm("nop"); asm("nop"); \ tmp = mvd[riface_irqmask]; \ tmp |= cat2(ch,_irq); \ mvd[riface_irqmask] = tmp; \}#define disable_int(ch) { \ int tmp; \ mvd[riface_irqsuppress] =0; asm("nop"); asm("nop"); \ tmp = mvd[riface_irqmask] ; \ tmp &= ~cat2(ch,_irq); \ mvd[riface_irqmask] =tmp; \}/* * **************** Risc DMA **************** */GBLDEF_0(int RDMADoneMask, 0);#define rdma_transr_enable 0x00000001#define rdma_tdmw_enable 0x00000002#define rdma_gater_enable 0x00000004#define rdma_gatew_enable 0x00000008#define rdma_hostr_enable 0x00000010#define rdma_hostw_enable 0x00000020#define disable_rdma(ch) lwpoke(rdma_disable,cat3(rdma_,ch,_enable))#define enable_rdma(ch) lwpoke(rdma_enable, cat3(rdma_,ch,_enable))#define clear_rdma_done(ch) lwpoke(rdma_done, cat3(rdma_,ch,_enable))#define rdma_xfer(ch, adr, cnt, pri) do { \ mvd[rdma_disable] = cat3(rdma_,ch,_enable); \ mvd[cat3(rdma_,ch,_addr)] = (int)(adr) >> 1; \ mvd[cat3(rdma_,ch,_cnt)] = cnt; \ mvd[cat3(rdma_,ch,_pri)] = pri; \ mvd[rdma_enable] = cat3(rdma_,ch,_enable); \} while (0)#define rdma_is_done(ch) \ (mvd[rdma_done] & cat3(rdma_,ch,_enable))#define rdma_wait(ch) do { \ (void) mvd[rdma_done]; /* read twice */ \ do {} while (!rdma_is_done(ch)); \} while(0)/* * **************** Bus Controller DMA **************** */#define buscon_vp_runbit 0x00000001#define buscon_yscnnr_runbit 0x00000002#define buscon_yscn_runbit 0x00000004#define buscon_uscn_runbit 0x00000008#define buscon_vscn_runbit 0x00000010#define buscon_ycamnr_runbit 0x00000020#define buscon_ycam_runbit 0x00000040#define buscon_ucam_runbit 0x00000080#define buscon_vcam_runbit 0x00000100#define buscon_xportv_runbit 0x00000200#define buscon_xporta_runbit 0x00000400#define buscon_audioin_runbit 0x00000800#define buscon_audioout_runbit 0x00001000#define buscon_hostout_runbit 0x00002000#define buscon_ref_runbit 0x00004000#define buscon_b2r_runbit 0x00008000#define buscon_hufdecv_runbit 0x00010000#define buscon_hufdeca_runbit 0x00020000#define buscon_m2h_runbit 0x00040000#define buscon_hufenc_runbit 0x00080000#define buscon_h2m_runbit 0x00100000#define buscon_r2b_runbit 0x00200000#define buscon_xa1_runbit buscon_hufenc_runbit#define buscon_xa2_runbit buscon_audioin_runbit#define buscon_dma_deltas_xa1 buscon_dma_deltas_hufenc#define buscon_dma_xpos_xa1 buscon_dma_xpos_hufenc#define buscon_dma_ypos_xa1 buscon_dma_ypos_hufenc#define buscon_dma_deltas_xa2 buscon_dma_deltas_audio_in#define buscon_dma_xpos_xa2 buscon_dma_xpos_audio_in#define buscon_dma_ypos_xa2 buscon_dma_ypos_audio_in#define buscon_a2d_runbit buscon_audioin_runbit#define buscon_dma_deltas_a2d buscon_dma_deltas_audio_in#define buscon_dma_xpos_a2d buscon_dma_xpos_audio_in#define buscon_dma_ypos_a2d buscon_dma_ypos_audio_in#define buscon_d2a_runbit buscon_audioout_runbit#define buscon_dma_deltas_d2a buscon_dma_deltas_audio_out#define buscon_dma_xpos_d2a buscon_dma_xpos_audio_out#define buscon_dma_ypos_d2a buscon_dma_ypos_audio_out#define BDMA_INC2 0x1000 /* Increment Y position by 2 when DMAing*/#define BDMA_WIDTH0 0x0000 /* Use width0 for y increments */#define BDMA_WIDTH1 0x0200 /* Use width1 for y increments */#define BDMA_WIDTH2 0x0400 /* Use width2 for y increments */#define BDMA_WIDTH3 0x0600 /* Use width3 for y increments */#define BDMA_USEDX 0x0800 /* Use dx for y increments */#define flush_xportv 0x80#define flush_xporta 0x40#define flush_hufenc 0x20#define flush_r2b 0x10#define flush_b2r 0x00 /* Doesn't really exists */#define flush_d2a 0x00 /* Doesn't really exists */#define DY_MAX 0x80 /* for VCP 0x40 */#define buscon_is_running(ch) \ (mvd[buscon_dma_status] & cat3(buscon_,ch,_runbit))#define buscon_wait(ch) do { \ while (buscon_is_running(ch)); \ gbl_gate_control &= ~flush_##ch; \ mvd[gate_control] = gbl_gate_control; \} while (0)#define buscon_wait_timeout(ch, timeout) do { \ int timeout_count = 0; \ while (buscon_is_running(ch)) { \ timeout_count++; \ if (timeout_count > timeout) { \ EPRINTF(("pending_status = 0x%x at %d, %s\n", \ mvd[buscon_dma_pending],__LINE__,__FILE__)); \ break; \ } \ } \ gbl_gate_control &= ~flush_##ch; \ mvd[gate_control] = gbl_gate_control; \} while(0)#define buscon_disable(ch) mvd[buscon_dma_disable] = cat3(buscon_,ch,_runbit)#define buscon_enable(ch) mvd[buscon_dma_enable] = cat3(buscon_,ch,_runbit)GBLDEF_0(int gbl_buscon_irqmasks,0);#ifdef BUSCON_IRQ_USE_MACRO #define buscon_irq_enable(ch_runbit) do { \ do {} while (!(mvd[buscon_dma_status] & ch_runbit)); \ mvd[riface_irqsuppress] = 0; asm("nop"); asm("nop"); \ gbl_buscon_irqmasks |= ch_runbit; \ mvd[buscon_dma_irqmasks] = gbl_buscon_irqmasks; \} while (0)#define buscon_irq_disable(ch_runbit) do { \ mvd[riface_irqsuppress] = 0; asm("nop"); asm("nop"); \ gbl_buscon_irqmasks &= ~ch_runbit; \ mvd[buscon_dma_irqmasks] = gbl_buscon_irqmasks; \} while (0)#endif#define buscon_zap(ch) do { \ buscon_irq_disable(cat3(buscon_,ch,_runbit)); \ buscon_disable(ch); \ /*do {;} while (buscon_is_running(ch));*/ \} while (0)#define a2x(a) ((a) & 0x1ff)#define a2y(a) ((a) >> 9)#define buscon_xfer(ch, mode, addr, dx, dy) do { \ mvd[cat2(buscon_dma_deltas_,ch)] = ((0x80 - (dy)) << 9) | (0x200 - (dx));\ mvd[cat2(buscon_dma_xpos_,ch)] = (mode) | a2x(addr); \ mvd[cat2(buscon_dma_ypos_,ch)] = a2y(addr); \} while(0)#define buscon_quick_BF(ch, addr, mode, BframeComp) do { \ mvd[cat2(buscon_dma_xpos_,ch)] = (mode) | a2x(addr); \ mvd[cat2(buscon_dma_ypos_,ch)] = BframeComp + a2y(addr); \} while(0)#define buscon_quick(ch, addr, mode) buscon_quick_BF(ch, addr, mode, 0)/* * **************** RISC fifo **************** */#define GATE_TREMASK 0x02#define GATE_DWMASK 0x01#if 1#define get_riscfifo(answer) do { \ while (!(lwpeek(gate_status) & GATE_DWMASK)); \ answer = lwpeek(gate_risc_fifo); \} while (0)#define put_riscfifo(data) do { \ while (!(lwpeek(gate_status) & GATE_TREMASK)); \ lwpoke(gate_risc_fifo,data); \} while (0)#else#define get_riscfifo(answer) do { \ int timeout = 0; \ while (!(lwpeek(gate_status) & GATE_DWMASK)){ \ timeout++; \ if (timeout>0x400000) { \ EPRINTF(("GateRiscFF DW timeout\n")); break; \ } \ } \ answer = lwpeek(gate_risc_fifo); \} while (0)#define put_riscfifo(data) do { \ int timeout = 0; \ while (!(lwpeek(gate_status) & GATE_TREMASK)){ \ timeout++; \ if (timeout>0x400000) { \ EPRINTF(("GateRiscFF TRE timeout\n")); break; \ } \ } \ lwpoke(gate_risc_fifo,data); \} while (0)#endifextern unsigned int *RISC_ptr_realtime, *RISC_cache_realtime;extern unsigned int *VCD_ptr_resume_info, *VCD_cache_resume_info;GBLDEF_0(int timer2_period, 0); /* Period for timer2. Set at run time */void RISC_timer2_interrupt_service(void);void RISC_start_timer2(void);void RISC_to_dram(int dst, int *srcp, int n);void RISC_flush(int start, int n);void update_glbTimer(void);void risc_fifo_read(int *p, int n);void risc_fifo_write(int *p, int n);void sram_to_dram(int dst, int *srcp, int n);void dram_to_sram(int *dstp, int src, int n);void UTIL_flushcache(register unsigned int, unsigned int);#endif /* __UTIL_H__ */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -