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

📄 ct11mpcore_eb.h

📁 FDMP the body of the kernel, the Information-Technology Promotion Agency (IPA) adopted by the unexpl
💻 H
📖 第 1 页 / 共 2 页
字号:
	eb_gic_int_enable(id);}/* * GIC CPUインタフェ〖ス簇息のドライバ *//* * DICのプロセッサの充哈み庭黎刨を肋年 */ Inline voideb_gic_cpu_set_priority(int pri){	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CPUIF_PR), pri);}/* * DICのプロセッサの充哈み庭黎刨のどのビットを蝗脱するか */Inline voideb_gic_cpu_enable_priority(int mask_bit){	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CPUIF_BPR), mask_bit);}Inline voideb_gic_cpu_disable(void){	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CPUIF_CCR), 0x00);}	 /* * GIC CPUインタフェ〖スの介袋步 *  maks_bit : 孺秤滦据とする充哈み庭黎刨のビットを回年 *  pri      : プロセッサの充哈みマスクを回年  */ Inline voideb_gic_cpu_init(int mask_bit, int pri){		/* 铜跟步 */	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CPUIF_CCR), EB_GIC_CPUIF_CCR_EN);	/* 充哈み庭黎刨のうち铜跟にするbitを回年*/	eb_gic_cpu_enable_priority(mask_bit); 		/* プロセッサの充哈みマスクを肋年 */	eb_gic_cpu_set_priority(pri);}Inline voideb_gic_init(int mask_bit, int pri){	eb_gic_disable();	eb_gic_cpu_disable();	/*	 * 充哈み链敦贿	 */	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_ECR + 0x00), 0xFFFFFFFF);	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_ECR + 0x04), 0xFFFFFFFF);	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_ECR + 0x08), 0xFFFFFFFF);	/*	 * ペンディングクリア	 */	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_PCR + 0x00), 0xFFFFFFFF);	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_PCR + 0x04), 0xFFFFFFFF);	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_PCR + 0x08), 0xFFFFFFFF);	/*	 * コンフィギュレ〖ション	 */	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x00), 0x55555555);	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x04), 0x55555555);	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x08), 0x55555555);	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x0C), 0x55555555);	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x10), 0x55555555);	sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x14), 0x55555555);		eb_gic_enable();	eb_gic_cpu_init(mask_bit, pri);}/* *  ドライバ *//* *  DIC簇息のドライバ */ /* * DICの铜跟步 */Inline voidmpcore_dic_enable(void){    int i;        /* DICインタフェ〖スを痰跟に */    sil_wrw_mem((VP)MPCORE_DIC_CR, 0x00);        /* 充哈みを链て敦贿 */    for(i = 0; i < MPCORE_DIC_TNUM_INT/32; i++){        sil_wrw_mem((VP)(MPCORE_DIC_CE + (4 * i)), 0xffffffff);        }    /* ペンディングをクリア */    for(i = 0; i < MPCORE_DIC_TNUM_INT/32; i++){        sil_wrw_mem((VP)(MPCORE_DIC_CP + (4 * i)), 0xffffffff);        }    /* 庭黎刨呵你に肋年  */    for(i = 0; i < MPCORE_DIC_TNUM_INT/4; i++){        sil_wrw_mem((VP)(MPCORE_DIC_IPR + (4 * i)), 0xffffffff);        }    /* モ〖ド介袋步(1-N Level) */    for(i = 0; i < MPCORE_DIC_TNUM_INT/16; i++){        sil_wrw_mem((VP)(MPCORE_DIC_ICR + (4 * i)), 0x55555555);    }        /* DICインタフェ〖スを铜跟に */	sil_wrw_mem((VP)MPCORE_DIC_CR, MPCORE_DIC_CR_ENABLE);    }/* * DIC充哈み钓材 */Inline voidmpcore_dic_int_enable(int id){	UW offset_addr;	UW offset_bit;	offset_addr = (id / 32) * 4;	offset_bit  = id % 32;		sil_wrw_mem((VP)(MPCORE_DIC_SE + offset_addr), (1 << offset_bit));}/* * DIC充哈み敦贿 */Inline voidmpcore_dic_int_disable(int id){	UW offset_addr;	UW offset_bit;	offset_addr = (id / 32) * 4;	offset_bit  = id % 32;    sil_wrw_mem((VP)(MPCORE_DIC_CE + offset_addr), (1 << offset_bit));}/* * DIC充哈みペンディングクリア */Inline voidmpcore_dic_int_clear(int id){	UW offset_addr;	UW offset_bit;	offset_addr = (id / 32) * 4;	offset_bit  = id % 32;    sil_wrw_mem((VP)(MPCORE_DIC_CP + offset_addr), (1 << offset_bit));}/* * DIC充哈みペンディングセット */static inline voidmpcore_dic_int_set(int id){	UW offset_addr;	UW offset_bit;	offset_addr = (id / 32) * 4;	offset_bit  = id % 32;    sil_wrw_mem((VP)(MPCORE_DIC_SP + offset_addr), (1 << offset_bit));	}/* * DIC充哈み庭黎刨の肋年 */ Inline voidmpcore_dic_set_priority(int id, int pri){	UW offset_addr;	UW offset_bit;	offset_addr = (id / 4) * 4;	offset_bit  = ((id % 4) * 8) + 4;    sil_wrw_mem((VP)(MPCORE_DIC_IPR + offset_addr),				(sil_rew_mem((VP)(MPCORE_DIC_IPR + offset_addr)) & ~(0xf << offset_bit))				| (pri << offset_bit));}/* * DIC充哈みタ〖ゲットの肋年 * CPUはORで回年  */ Inline voidmpcore_dic_set_target(int id, int cpu){	UW offset_addr;	UW offset_bit;	offset_addr = (id / 4) * 4;	offset_bit  = ((id % 4) * 8);	sil_wrw_mem((VP)(MPCORE_DIC_ITR + offset_addr),				(sil_rew_mem((VP)(MPCORE_DIC_ITR + offset_addr)) & ~(0xf << offset_bit))				| (cpu << offset_bit));	}/* * DIC充哈みコンフィギュレ〖ション肋年 */ Inline voidmpcore_dic_set_config(int id, int set){	UW offset_addr;	UW offset_bit;	offset_addr = (id / 16) * 4;	offset_bit  = ((id % 16) * 2);    sil_wrw_mem((VP)(MPCORE_DIC_ICR + offset_addr),            (sil_rew_mem((VP)(MPCORE_DIC_ICR + offset_addr)) & ~(0x3 << offset_bit))			  | (set << offset_bit));	}/* * DICに掐蜗する充哈みの介袋步 *  id  : 充哈みID(DICの瓷妄ID) *  pri : 充哈み庭黎刨 *  cpu : タ〖ゲットCPU *        0を回年するとsys_defs.hで回年したPRCIDで回年したプロセッサを *        回年する  *  cfg : コンフィギュレ〖ション  */Inline voidmpcore_dic_init_int_source(int id, int pri, int cpu, int cfg){	/* 充哈み庭黎刨の肋年  */		mpcore_dic_set_priority(id, pri);	if(cpu != 0){		/* タ〖ゲットプロセッサの回年 */		mpcore_dic_set_target(id, cpu);	}	else{		mpcore_dic_set_target(id, (1<<(PRCID-1)));	}	  	/* level high + N-N software model */	mpcore_dic_set_config(id, cfg);	/* 充哈みペンディングクリア */	mpcore_dic_int_clear(id);	  	/* 充哈み钓材 */	  	mpcore_dic_int_enable(id);}/* *  ソフトウェア充哈みを券乖 */Inline voidmpcore_dic_swi(int cpu, int id){	sil_wrw_mem((VP)MPCORE_DIC_SIR, (cpu << MPCORE_DIC_SIR_CPU_OFFSET)				|id);}/* *  DIC CPUインタフェ〖ス簇息のドライバ *//* * DICのプロセッサの充哈み庭黎刨を肋年 */ Inline voidmpcore_dic_cpu_set_priority(int pri){	sil_wrw_mem((VP)MPCORE_DIC_CPUIF_PMR, (pri << MPCORE_DIC_CPUIF_PMR_OFFSET));}/* * DICのプロセッサの充哈み庭黎刨のどのビットを蝗脱するか */Inline voidmpcore_dic_cpu_enable_priority(int mask_bit){	sil_wrw_mem((VP)MPCORE_DIC_CPUIF_BPR, mask_bit);}/* * DIC CPUインタフェ〖スの介袋步 *  maks_bit : 孺秤滦据とする充哈み庭黎刨のビットを回年 *  pri      : プロセッサの充哈みマスクを回年  */ Inline voidmpcore_dic_cpu_init(int mask_bit, int pri){		/* 铜跟步 */	sil_wrw_mem((VP)MPCORE_DIC_CPUIF_CR, MPCORE_DIC_CPUIF_CR_EN);	/* 充哈み庭黎刨のうち铜跟にするbitを回年*/	mpcore_dic_cpu_enable_priority(mask_bit); /* 链ビット铜跟 */		/* プロセッサの充哈みマスクを肋年 */	mpcore_dic_cpu_set_priority(pri);}/* *  EBのリソ〖スの拎侯 */ Inline voideb_led_out(unsigned char ptn){	sil_wrw_mem((VP)EB_LED, ptn);}Inline voidset_led(unsigned char ptn){	sil_wrw_mem((VP)EB_LED,				((ptn & 0x3) << (PRCID-1)*2) |				(sil_rew_mem((VP)EB_LED) & ~(0x03 << (PRCID-1)*2)));}/* *  EB と Core Tile 粗の充哈みの介袋步 *  充哈みモ〖ドをnewモ〖ドwithoutDCCへ  */Inline voideb_core_tile_init_int_mode(void){	/* EBのシステムレジスタをアンロック */	sil_wrw_mem((VP)EB_SYS_LOCK, EB_SYS_LOCK_UNLOCK);	/* 充哈みモ〖ドをnewモ〖ドwithoutDCCへ */	sil_wrw_mem((VP)EB_SYS_PLD_CTRL1,				(sil_rew_mem((VP)EB_SYS_PLD_CTRL1) & ~EB_SYS_PLD_CTRL1_INTMODE) | 				EB_SYS_PLD_CTRL1_INTMODE_NEW_NODCC);	/* EBのシステムレジスタをロック */	sil_wrw_mem((VP)EB_SYS_LOCK, EB_SYS_LOCK_LOCK);}  /* * 柒垄UART脱 词白SIOドライバ *//* * カ〖ネル弹瓢箕脱の介袋步(sys_putcを蝗脱するため) */extern void eb_uart_init(void);/* *  シリアルI/Oポ〖ト介袋步ブロック *  ドライバ巴赂  */typedef struct sio_port_initialization_block {    VP reg_base;   /* レジスタのベ〖スアドレス */	UW int_id;     /* 充哈み戎规               */}SIOPINIB;/* *  シリアルI/Oポ〖ト瓷妄ブロックの年盗 */typedef struct sio_port_control_block {    const SIOPINIB  *siopinib;  /* シリアルI/Oポ〖ト介袋步ブロック */    VP_INT          exinf;      /* 橙磨攫鼠 */    BOOL    openflag;       /* オ〖プン貉みフラグ */    BOOL    sendflag;       /* 流慨充哈みイネ〖ブルフラグ */    BOOL    getready;       /* 矢机を减慨した觉轮 */    BOOL    putready;       /* 矢机を流慨できる觉轮 */}SIOPCB;/* *  コ〖ルバックル〖チンの急侍戎规 */#define SIO_ERDY_SND    1u      /* 流慨材墙コ〖ルバック */#define SIO_ERDY_RCV    2u      /* 减慨奶梦コ〖ルバック *//* *  オンチップのUARTからのポ〖リング叫蜗 */extern void uart_putc(char c);/* *  SIOドライバの介袋步ル〖チン */extern void uart_initialize(void);/* *  オ〖プンしているポ〖トがあるか々 */extern BOOL uart_openflag(void);/* *  シリアルI/Oポ〖トのオ〖プン */extern SIOPCB   *uart_opn_por(ID siopid, VP_INT exinf);/* *  シリアルI/Oポ〖トのクロ〖ズ */extern void uart_cls_por(SIOPCB *siopcb);/* *  シリアルI/Oポ〖トへの矢机流慨 */extern BOOL uart_snd_chr(SIOPCB *siopcb, char c);/* *  シリアルI/Oポ〖トからの矢机减慨 */extern INT  uart_rcv_chr(SIOPCB *siopcb);/* *  シリアルI/Oポ〖トからのコ〖ルバックの钓材 */extern void uart_ena_cbr(SIOPCB *siopcb, UINT cbrtn);/* *  シリアルI/Oポ〖トからのコ〖ルバックの敦贿 */extern void uart_dis_cbr(SIOPCB *siopcb, UINT cbrtn);/* *  SIOの充哈みサ〖ビスル〖チン */extern void uart_in_isr(void);extern void uart_out_isr(void);/* *  シリアルI/Oポ〖トからの流慨材墙コ〖ルバック */extern void uart_ierdy_snd(VP_INT exinf);/* *  シリアルI/Oポ〖トからの减慨奶梦コ〖ルバック */extern void uart_ierdy_rcv(VP_INT exinf);/* * SMPモ〖ドの铜跟步 */extern void mpcore_smp_mode_enable(void);/* * キャッシュ簇息の簇眶 */extern void mpcore_dcache_enable(void);extern void mpcore_dcache_disable(void);extern void mpcore_icache_enable (void);extern void mpcore_icache_disable(void);extern void mpcore_cache_enable(void);extern void mpcore_cache_disable(void);/* * MMUの介袋步 */extern void mpcore_mmu_init(void);/* * スピンロックを艰评 */Inline voidmpcore_spin_lock(UINT *lock){    UINT locked;        for(;;){        Asm("   mov      r2, #0x01   \n"			"\t ldrex    r1, [%1]    \n"			"\t cmp      r1, #0x00   \n"            "\t wfene                \n"            			"\t strexeq  r1, r2,[%1] \n"			"\t mov      %0, r1      \n"			:"=r"(locked):"r"(lock):"r1","r2", "cc");        /* 喇根したらリタ〖ン */		if(locked == 0){            mpcore_data_memory_barrier();            return;        }    }}/* * スピンロックを倡庶 */Inline voidmpcore_spin_unlock(UINT *lock){    mpcore_data_memory_barrier();    *lock = 0;    mpcore_data_sync_barrier();    Asm("sev");}#endif /* _MACRO_ONLY */#endif /* _EB_MPCORE_H_ */

⌨️ 快捷键说明

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